diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b7eb3fe0..dc28db2c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -193,9 +193,3 @@ jobs:
uses: SonarSource/sonarqube-scan-action@v6
with:
projectBaseDir: packages/agentic-crew
-
- - name: SonarCloud Scan - meshy
- if: env.SONAR_TOKEN != ''
- uses: SonarSource/sonarqube-scan-action@v6
- with:
- projectBaseDir: packages/meshy-content-generator
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 2354ede4..50b829c7 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -82,8 +82,6 @@ jobs:
name: '@jbcom/agentic'
- dir: packages/triage
name: '@jbcom/agentic-triage'
- - dir: packages/meshy-content-generator
- name: '@jbcom/agentic-meshy'
- dir: packages/providers
name: '@jbcom/agentic-providers'
- dir: tooling/vitest-agentic
diff --git a/README.md b/README.md
index 65eb8b32..3bd31b41 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,6 @@
| [`@jbcom/agentic`](packages/agentic) | TypeScript | Fleet management, multi-agent routing, CI resolution, GitHub Actions | [Docs](https://agentic.coach/packages/agentic/) |
| [`@jbcom/agentic-triage`](packages/triage) | TypeScript | AI-powered issue triage, PR review, sprint planning (Vercel AI SDK + MCP) | [Docs](https://agentic.coach/packages/triage/) |
| [`agentic-crew`](packages/agentic-crew) | Python | Framework-agnostic crew orchestration (CrewAI, LangGraph, Strands) | [Docs](https://agentic.coach/packages/crew/) |
-| [`@jbcom/agentic-meshy`](packages/meshy-content-generator) | TypeScript | Declarative Meshy 3D asset generation pipelines | [Docs](https://agentic.coach/packages/meshy-content-generator/) |
| [`@jbcom/agentic-providers`](packages/providers) | TypeScript | LLM provider implementations (Ollama, Jules, Cursor) | [Docs](https://agentic.coach/packages/agentic/) |
### Testing Plugins
@@ -39,6 +38,7 @@
- [`jbcom/game-generator`](https://github.com/jbcom/game-generator) — experimental Bevy-based retro-RPG design sandbox
- [`jbcom/game-asset-mcp`](https://github.com/jbcom/game-asset-mcp) — MCP server for local 3D asset libraries and PolyHaven ingestion
+- [`jbcom/meshy-content-generator`](https://github.com/jbcom/meshy-content-generator) — declarative image pipelines backed by vendor-fabric
## Quick Start
@@ -123,7 +123,6 @@ agentic/
│ ├── agentic/ # @jbcom/agentic (TypeScript)
│ ├── triage/ # @jbcom/agentic-triage (TypeScript)
│ ├── agentic-crew/ # agentic-crew (Python)
-│ ├── meshy-content-generator/ # @jbcom/agentic-meshy (TypeScript)
│ ├── providers/ # @jbcom/agentic-providers (TypeScript)
├── tooling/
│ ├── vitest-agentic/ # @jbcom/vitest-agentic (TypeScript)
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 79c82d63..f5536d96 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -65,7 +65,7 @@ export default defineConfig({
{ label: '@jbcom/agentic', slug: 'packages/agentic' },
{ label: '@jbcom/agentic-triage', slug: 'packages/triage' },
{ label: 'agentic-crew', slug: 'packages/crew' },
- { label: '@jbcom/agentic-meshy', slug: 'packages/meshy-content-generator' },
+ { label: 'meshy-content-generator', slug: 'packages/meshy-content-generator' },
],
},
{
diff --git a/docs/src/content/docs/api/meshy/README.md b/docs/src/content/docs/api/meshy/README.md
deleted file mode 100644
index 143545cd..00000000
--- a/docs/src/content/docs/api/meshy/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "@jbcom/agentic-meshy"
----
-
-## Classes
-
-- [PipelineRunner](/api/meshy/classes/pipelinerunner/)
-
-## Interfaces
-
-- [DefinitionBundle](/api/meshy/interfaces/definitionbundle/)
-- [DefinitionLoadOptions](/api/meshy/interfaces/definitionloadoptions/)
-- [PipelineRunnerOptions](/api/meshy/interfaces/pipelinerunneroptions/)
-- [RunOptions](/api/meshy/interfaces/runoptions/)
-- [ValidationOptions](/api/meshy/interfaces/validationoptions/)
-- [ValidationResult](/api/meshy/interfaces/validationresult/)
-
-## Type Aliases
-
-- [AssetManifest](/api/meshy/type-aliases/assetmanifest/)
-- [InputBinding](/api/meshy/type-aliases/inputbinding/)
-- [OutputBinding](/api/meshy/type-aliases/outputbinding/)
-- [PipelineDefinition](/api/meshy/type-aliases/pipelinedefinition/)
-- [PipelineStep](/api/meshy/type-aliases/pipelinestep/)
-- [TaskDefinition](/api/meshy/type-aliases/taskdefinition/)
-- [TaskState](/api/meshy/type-aliases/taskstate/)
-
-## Variables
-
-- [AssetManifestSchema](/api/meshy/variables/assetmanifestschema/)
-- [TaskStateSchema](/api/meshy/variables/taskstateschema/)
-
-## Functions
-
-- [loadAnimationIds](/api/meshy/functions/loadanimationids/)
-- [loadJsonDefinitions](/api/meshy/functions/loadjsondefinitions/)
-- [validateManifestAndPipeline](/api/meshy/functions/validatemanifestandpipeline/)
diff --git a/docs/src/content/docs/api/meshy/classes/PipelineRunner.md b/docs/src/content/docs/api/meshy/classes/PipelineRunner.md
deleted file mode 100644
index 1a194868..00000000
--- a/docs/src/content/docs/api/meshy/classes/PipelineRunner.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "PipelineRunner"
----
-
-Defined in: [core/runner.ts:61](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L61)
-
-Executes declarative pipelines against asset manifests.
-
-## Constructors
-
-### Constructor
-
-> **new PipelineRunner**(`options`): `PipelineRunner`
-
-Defined in: [core/runner.ts:67](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L67)
-
-#### Parameters
-
-##### options
-
-[`PipelineRunnerOptions`](/api/meshy/interfaces/pipelinerunneroptions/)
-
-#### Returns
-
-`PipelineRunner`
-
-## Methods
-
-### run()
-
-> **run**(`options`): `Promise`\<\{\[`key`: `string`\]: `unknown`; `id`: `string`; `name`: `string`; `seed?`: `number`; `tasks?`: `Record`\<`string`, \{\[`key`: `string`\]: `unknown`; `artifacts?`: `Record`\<`string`, `string`\>; `outputs?`: `Record`\<`string`, `unknown`\>; `status?`: `"PENDING"` \| `"IN_PROGRESS"` \| `"SUCCEEDED"` \| `"FAILED"` \| `"CANCELED"`; `taskId?`: `string`; \}\>; `type`: `string`; \}\>
-
-Defined in: [core/runner.ts:80](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L80)
-
-Run a pipeline against the manifest in the provided asset directory.
-
-#### Parameters
-
-##### options
-
-[`RunOptions`](/api/meshy/interfaces/runoptions/)
-
-Pipeline execution options.
-
-#### Returns
-
-`Promise`\<\{\[`key`: `string`\]: `unknown`; `id`: `string`; `name`: `string`; `seed?`: `number`; `tasks?`: `Record`\<`string`, \{\[`key`: `string`\]: `unknown`; `artifacts?`: `Record`\<`string`, `string`\>; `outputs?`: `Record`\<`string`, `unknown`\>; `status?`: `"PENDING"` \| `"IN_PROGRESS"` \| `"SUCCEEDED"` \| `"FAILED"` \| `"CANCELED"`; `taskId?`: `string`; \}\>; `type`: `string`; \}\>
-
-Updated manifest with task state.
diff --git a/docs/src/content/docs/api/meshy/functions/loadAnimationIds.md b/docs/src/content/docs/api/meshy/functions/loadAnimationIds.md
deleted file mode 100644
index b7039376..00000000
--- a/docs/src/content/docs/api/meshy/functions/loadAnimationIds.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "loadAnimationIds"
----
-
-> **loadAnimationIds**(): `Record`\<`string`, `number`\>
-
-Defined in: [lookups/animation-ids.ts:14](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/lookups/animation-ids.ts#L14)
-
-## Returns
-
-`Record`\<`string`, `number`\>
diff --git a/docs/src/content/docs/api/meshy/functions/loadJsonDefinitions.md b/docs/src/content/docs/api/meshy/functions/loadJsonDefinitions.md
deleted file mode 100644
index 1861eb27..00000000
--- a/docs/src/content/docs/api/meshy/functions/loadJsonDefinitions.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "loadJsonDefinitions"
----
-
-> **loadJsonDefinitions**(`options`): `Promise`\<[`DefinitionBundle`](/api/meshy/interfaces/definitionbundle/)\>
-
-Defined in: [core/definitions.ts:31](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/definitions.ts#L31)
-
-Load and validate pipeline/task definitions from disk.
-
-## Parameters
-
-### options
-
-[`DefinitionLoadOptions`](/api/meshy/interfaces/definitionloadoptions/)
-
-Directory paths for pipeline and task definitions.
-
-## Returns
-
-`Promise`\<[`DefinitionBundle`](/api/meshy/interfaces/definitionbundle/)\>
-
-Parsed and validated definition bundle.
diff --git a/docs/src/content/docs/api/meshy/functions/validateManifestAndPipeline.md b/docs/src/content/docs/api/meshy/functions/validateManifestAndPipeline.md
deleted file mode 100644
index 21373364..00000000
--- a/docs/src/content/docs/api/meshy/functions/validateManifestAndPipeline.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "validateManifestAndPipeline"
----
-
-> **validateManifestAndPipeline**(`options`): [`ValidationResult`](/api/meshy/interfaces/validationresult/)
-
-Defined in: [core/validator.ts:49](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L49)
-
-Validate a manifest against the pipeline/task definitions without executing Meshy calls.
-
-## Parameters
-
-### options
-
-[`ValidationOptions`](/api/meshy/interfaces/validationoptions/)
-
-## Returns
-
-[`ValidationResult`](/api/meshy/interfaces/validationresult/)
diff --git a/docs/src/content/docs/api/meshy/interfaces/DefinitionBundle.md b/docs/src/content/docs/api/meshy/interfaces/DefinitionBundle.md
deleted file mode 100644
index 9febed97..00000000
--- a/docs/src/content/docs/api/meshy/interfaces/DefinitionBundle.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "DefinitionBundle"
----
-
-Defined in: [core/definitions.ts:10](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/definitions.ts#L10)
-
-Parsed pipeline and task definitions loaded from JSON files.
-
-## Properties
-
-### pipelines
-
-> **pipelines**: `Map`\<`string`, \{ `description?`: `string`; `name`: `string`; `stateMapping?`: `Record`\<`string`, `string`\>; `steps`: `object`[]; `version?`: `string`; \}\>
-
-Defined in: [core/definitions.ts:11](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/definitions.ts#L11)
-
-***
-
-### tasks
-
-> **tasks**: `Map`\<`string`, \{ `apiVersion?`: `string`; `description?`: `string`; `endpoint?`: `string`; `id`: `string`; `inputs`: `object`[]; `method?`: `"GET"` \| `"POST"` \| `"DELETE"`; `outputs`: `object`[]; `poll?`: \{ `intervalMs?`: `number`; `path`: `string`; `strategy`: `"stream"` \| `"poll"`; `timeoutMs?`: `number`; \}; \}\>
-
-Defined in: [core/definitions.ts:12](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/definitions.ts#L12)
diff --git a/docs/src/content/docs/api/meshy/interfaces/DefinitionLoadOptions.md b/docs/src/content/docs/api/meshy/interfaces/DefinitionLoadOptions.md
deleted file mode 100644
index 33832b50..00000000
--- a/docs/src/content/docs/api/meshy/interfaces/DefinitionLoadOptions.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "DefinitionLoadOptions"
----
-
-Defined in: [core/definitions.ts:18](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/definitions.ts#L18)
-
-Paths to definition directories on disk.
-
-## Properties
-
-### pipelinesDir
-
-> **pipelinesDir**: `string`
-
-Defined in: [core/definitions.ts:20](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/definitions.ts#L20)
-
-Directory containing `*.pipeline.json` definitions.
-
-***
-
-### tasksDir
-
-> **tasksDir**: `string`
-
-Defined in: [core/definitions.ts:22](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/definitions.ts#L22)
-
-Directory containing task definition JSON files.
diff --git a/docs/src/content/docs/api/meshy/interfaces/PipelineRunnerOptions.md b/docs/src/content/docs/api/meshy/interfaces/PipelineRunnerOptions.md
deleted file mode 100644
index 9e263de7..00000000
--- a/docs/src/content/docs/api/meshy/interfaces/PipelineRunnerOptions.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "PipelineRunnerOptions"
----
-
-Defined in: [core/runner.ts:21](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L21)
-
-## Properties
-
-### apiKey
-
-> **apiKey**: `string`
-
-Defined in: [core/runner.ts:25](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L25)
-
-Meshy API key used to authenticate requests.
-
-***
-
-### client?
-
-> `optional` **client**: `MeshyClient`
-
-Defined in: [core/runner.ts:27](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L27)
-
-Optional Meshy client override (useful for testing).
-
-***
-
-### definitions
-
-> **definitions**: [`DefinitionBundle`](/api/meshy/interfaces/definitionbundle/)
-
-Defined in: [core/runner.ts:23](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L23)
-
-Loaded pipeline/task definitions.
-
-***
-
-### logger()?
-
-> `optional` **logger**: (`message`) => `void`
-
-Defined in: [core/runner.ts:31](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L31)
-
-Optional logger to capture pipeline progress.
-
-#### Parameters
-
-##### message
-
-`string`
-
-#### Returns
-
-`void`
-
-***
-
-### lookups?
-
-> `optional` **lookups**: `Record`\<`string`, `Record`\<`string`, `unknown`\>\>
-
-Defined in: [core/runner.ts:29](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L29)
-
-Lookup tables for binding inputs by key.
diff --git a/docs/src/content/docs/api/meshy/interfaces/RunOptions.md b/docs/src/content/docs/api/meshy/interfaces/RunOptions.md
deleted file mode 100644
index 929bb970..00000000
--- a/docs/src/content/docs/api/meshy/interfaces/RunOptions.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "RunOptions"
----
-
-Defined in: [core/runner.ts:34](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L34)
-
-## Properties
-
-### assetDir
-
-> **assetDir**: `string`
-
-Defined in: [core/runner.ts:38](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L38)
-
-Asset directory containing the manifest.json file.
-
-***
-
-### pipelineName
-
-> **pipelineName**: `string`
-
-Defined in: [core/runner.ts:36](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L36)
-
-Pipeline definition name.
-
-***
-
-### step?
-
-> `optional` **step**: `string`
-
-Defined in: [core/runner.ts:40](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/runner.ts#L40)
-
-Optional step id to run within the pipeline.
diff --git a/docs/src/content/docs/api/meshy/interfaces/ValidationOptions.md b/docs/src/content/docs/api/meshy/interfaces/ValidationOptions.md
deleted file mode 100644
index 58c8d65d..00000000
--- a/docs/src/content/docs/api/meshy/interfaces/ValidationOptions.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "ValidationOptions"
----
-
-Defined in: [core/validator.ts:24](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L24)
-
-Options for validating a manifest against a pipeline definition.
-
-## Properties
-
-### definitions
-
-> **definitions**: [`DefinitionBundle`](/api/meshy/interfaces/definitionbundle/)
-
-Defined in: [core/validator.ts:25](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L25)
-
-***
-
-### env?
-
-> `optional` **env**: `Record`\<`string`, `string` \| `undefined`\>
-
-Defined in: [core/validator.ts:28](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L28)
-
-***
-
-### lookups?
-
-> `optional` **lookups**: `Record`\<`string`, `Record`\<`string`, `unknown`\>\>
-
-Defined in: [core/validator.ts:29](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L29)
-
-***
-
-### manifest
-
-> **manifest**: `unknown`
-
-Defined in: [core/validator.ts:27](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L27)
-
-***
-
-### pipelineName
-
-> **pipelineName**: `string`
-
-Defined in: [core/validator.ts:26](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L26)
diff --git a/docs/src/content/docs/api/meshy/interfaces/ValidationResult.md b/docs/src/content/docs/api/meshy/interfaces/ValidationResult.md
deleted file mode 100644
index dd97e4d6..00000000
--- a/docs/src/content/docs/api/meshy/interfaces/ValidationResult.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "ValidationResult"
----
-
-Defined in: [core/validator.ts:16](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L16)
-
-Validation errors and warnings produced by the manifest validator.
-
-## Properties
-
-### errors
-
-> **errors**: `string`[]
-
-Defined in: [core/validator.ts:17](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L17)
-
-***
-
-### warnings
-
-> **warnings**: `string`[]
-
-Defined in: [core/validator.ts:18](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/core/validator.ts#L18)
diff --git a/docs/src/content/docs/api/meshy/type-aliases/AssetManifest.md b/docs/src/content/docs/api/meshy/type-aliases/AssetManifest.md
deleted file mode 100644
index 10ddfa90..00000000
--- a/docs/src/content/docs/api/meshy/type-aliases/AssetManifest.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "AssetManifest"
----
-
-> **AssetManifest** = `z.infer`\<*typeof* [`AssetManifestSchema`](/api/meshy/variables/assetmanifestschema/)\>
-
-Defined in: [schemas/manifest.ts:22](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/manifest.ts#L22)
diff --git a/docs/src/content/docs/api/meshy/type-aliases/InputBinding.md b/docs/src/content/docs/api/meshy/type-aliases/InputBinding.md
deleted file mode 100644
index dc9105e1..00000000
--- a/docs/src/content/docs/api/meshy/type-aliases/InputBinding.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "InputBinding"
----
-
-> **InputBinding** = `z.infer`\<*typeof* `InputBindingSchema`\>
-
-Defined in: [schemas/definitions.ts:68](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/definitions.ts#L68)
diff --git a/docs/src/content/docs/api/meshy/type-aliases/OutputBinding.md b/docs/src/content/docs/api/meshy/type-aliases/OutputBinding.md
deleted file mode 100644
index 8c6967d2..00000000
--- a/docs/src/content/docs/api/meshy/type-aliases/OutputBinding.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "OutputBinding"
----
-
-> **OutputBinding** = `z.infer`\<*typeof* `OutputBindingSchema`\>
-
-Defined in: [schemas/definitions.ts:69](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/definitions.ts#L69)
diff --git a/docs/src/content/docs/api/meshy/type-aliases/PipelineDefinition.md b/docs/src/content/docs/api/meshy/type-aliases/PipelineDefinition.md
deleted file mode 100644
index 2b8f8ac6..00000000
--- a/docs/src/content/docs/api/meshy/type-aliases/PipelineDefinition.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "PipelineDefinition"
----
-
-> **PipelineDefinition** = `z.infer`\<*typeof* `PipelineDefinitionSchema`\>
-
-Defined in: [schemas/definitions.ts:72](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/definitions.ts#L72)
diff --git a/docs/src/content/docs/api/meshy/type-aliases/PipelineStep.md b/docs/src/content/docs/api/meshy/type-aliases/PipelineStep.md
deleted file mode 100644
index 8c1ab990..00000000
--- a/docs/src/content/docs/api/meshy/type-aliases/PipelineStep.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "PipelineStep"
----
-
-> **PipelineStep** = `z.infer`\<*typeof* `PipelineStepSchema`\>
-
-Defined in: [schemas/definitions.ts:71](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/definitions.ts#L71)
diff --git a/docs/src/content/docs/api/meshy/type-aliases/TaskDefinition.md b/docs/src/content/docs/api/meshy/type-aliases/TaskDefinition.md
deleted file mode 100644
index 03aab785..00000000
--- a/docs/src/content/docs/api/meshy/type-aliases/TaskDefinition.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "TaskDefinition"
----
-
-> **TaskDefinition** = `z.infer`\<*typeof* `TaskDefinitionSchema`\>
-
-Defined in: [schemas/definitions.ts:70](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/definitions.ts#L70)
diff --git a/docs/src/content/docs/api/meshy/type-aliases/TaskState.md b/docs/src/content/docs/api/meshy/type-aliases/TaskState.md
deleted file mode 100644
index 3a8a7226..00000000
--- a/docs/src/content/docs/api/meshy/type-aliases/TaskState.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "TaskState"
----
-
-> **TaskState** = `z.infer`\<*typeof* [`TaskStateSchema`](/api/meshy/variables/taskstateschema/)\>
-
-Defined in: [schemas/manifest.ts:23](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/manifest.ts#L23)
diff --git a/docs/src/content/docs/api/meshy/variables/AssetManifestSchema.md b/docs/src/content/docs/api/meshy/variables/AssetManifestSchema.md
deleted file mode 100644
index 75d6f7a9..00000000
--- a/docs/src/content/docs/api/meshy/variables/AssetManifestSchema.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "AssetManifestSchema"
----
-
-> `const` **AssetManifestSchema**: `ZodObject`\<\{ `id`: `ZodString`; `name`: `ZodString`; `seed`: `ZodOptional`\<`ZodNumber`\>; `tasks`: `ZodOptional`\<`ZodRecord`\<`ZodString`, `ZodObject`\<\{ `artifacts`: `ZodOptional`\<`ZodRecord`\<`ZodString`, `ZodString`\>\>; `outputs`: `ZodOptional`\<`ZodRecord`\<`ZodString`, `ZodUnknown`\>\>; `status`: `ZodOptional`\<`ZodEnum`\<\{ `CANCELED`: `"CANCELED"`; `FAILED`: `"FAILED"`; `IN_PROGRESS`: `"IN_PROGRESS"`; `PENDING`: `"PENDING"`; `SUCCEEDED`: `"SUCCEEDED"`; \}\>\>; `taskId`: `ZodOptional`\<`ZodString`\>; \}, `$loose`\>\>\>; `type`: `ZodString`; \}, `$loose`\>
-
-Defined in: [schemas/manifest.ts:12](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/manifest.ts#L12)
diff --git a/docs/src/content/docs/api/meshy/variables/TaskStateSchema.md b/docs/src/content/docs/api/meshy/variables/TaskStateSchema.md
deleted file mode 100644
index 3400aae9..00000000
--- a/docs/src/content/docs/api/meshy/variables/TaskStateSchema.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-editUrl: false
-next: false
-prev: false
-title: "TaskStateSchema"
----
-
-> `const` **TaskStateSchema**: `ZodObject`\<\{ `artifacts`: `ZodOptional`\<`ZodRecord`\<`ZodString`, `ZodString`\>\>; `outputs`: `ZodOptional`\<`ZodRecord`\<`ZodString`, `ZodUnknown`\>\>; `status`: `ZodOptional`\<`ZodEnum`\<\{ `CANCELED`: `"CANCELED"`; `FAILED`: `"FAILED"`; `IN_PROGRESS`: `"IN_PROGRESS"`; `PENDING`: `"PENDING"`; `SUCCEEDED`: `"SUCCEEDED"`; \}\>\>; `taskId`: `ZodOptional`\<`ZodString`\>; \}, `$loose`\>
-
-Defined in: [schemas/manifest.ts:3](https://github.com/jbcom/agentic/blob/3e0fc0dae3f16f8cce14665d77f819f138b021fa/packages/meshy-content-generator/src/schemas/manifest.ts#L3)
diff --git a/docs/src/content/docs/getting-started/introduction.md b/docs/src/content/docs/getting-started/introduction.md
index d89ee9de..96372ab7 100644
--- a/docs/src/content/docs/getting-started/introduction.md
+++ b/docs/src/content/docs/getting-started/introduction.md
@@ -62,7 +62,7 @@ from agentic_crew import run_crew
result = run_crew("my-app", "reviewer", inputs={"pr": 42})
```
-### @jbcom/agentic-meshy
+### meshy-content-generator
TypeScript
diff --git a/docs/src/content/docs/guides/architecture.md b/docs/src/content/docs/guides/architecture.md
index 8295268e..7d89e7b5 100644
--- a/docs/src/content/docs/guides/architecture.md
+++ b/docs/src/content/docs/guides/architecture.md
@@ -37,7 +37,7 @@ The Agentic toolkit spans TypeScript and Python. Each language targets the domai
| | +----------------------+ +----------------------+
| - Ollama agent |
| - Jules agent | +----------------------+
- | - Cursor agent | | @jbcom/agentic-meshy |
+ | - Cursor agent | | meshy-content-generator |
+---------+--------+ | (3D Asset Pipelines)|
| +----------------------+
|
@@ -94,7 +94,7 @@ Framework-agnostic crew orchestration:
@jbcom/agentic-providers ---> @jbcom/agentic-triage (peer dependency)
@jbcom/vitest-agentic (standalone, mocks agentic components)
pytest-agentic-crew (standalone, fixtures for agentic-crew)
-@jbcom/agentic-meshy (standalone)
+meshy-content-generator (standalone Python package; vendor-fabric transport)
agentic-crew (standalone Python package)
```
diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index 3c0a9a57..4ed67e2b 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -127,7 +127,7 @@ import { Tabs, TabItem } from '@astrojs/starlight/components';
-
@jbcom/agentic-meshy
+
meshy-content-generator
TypeScript
Declarative 3D asset pipelines. Text-to-3D, rigging, animation via Meshy AI with manifest state.
View Package
diff --git a/docs/src/content/docs/packages/agentic.md b/docs/src/content/docs/packages/agentic.md
index c46fb9ab..6d4b4f5e 100644
--- a/docs/src/content/docs/packages/agentic.md
+++ b/docs/src/content/docs/packages/agentic.md
@@ -193,7 +193,7 @@ src/
- **[@jbcom/agentic-triage](/packages/triage/)** — Triage primitives consumed by Agentic fleets
- **[agentic-crew](/packages/crew/)** — Framework-agnostic crew orchestration
-- **[@jbcom/agentic-meshy](/packages/meshy-content-generator/)** — 3D asset pipelines
+- **[meshy-content-generator](/packages/meshy-content-generator/)** — standalone image pipelines backed by vendor-fabric
## Links
diff --git a/docs/src/content/docs/packages/meshy-content-generator.md b/docs/src/content/docs/packages/meshy-content-generator.md
index 13fd59a2..9460a142 100644
--- a/docs/src/content/docs/packages/meshy-content-generator.md
+++ b/docs/src/content/docs/packages/meshy-content-generator.md
@@ -1,189 +1,20 @@
---
-title: "@jbcom/agentic-meshy"
-description: Declarative 3D asset pipelines powered by Meshy AI — text-to-3D, rigging, and animation without bespoke scripts
+title: "meshy-content-generator"
+description: Standalone declarative image pipelines backed by vendor-fabric
---
-# @jbcom/agentic-meshy
+# meshy-content-generator
-> Declarative 3D asset pipelines powered by Meshy AI — define pipelines in JSON, run from CLI or API, preview instantly.
+The former `@jbcom/agentic-meshy` workspace package has moved to the
+standalone OSS repository
+[`jbcom/meshy-content-generator`](https://github.com/jbcom/meshy-content-generator).
-
- TypeScript
-
-
-**Stop writing bespoke scripts for every 3D asset.** @jbcom/agentic-meshy wraps Meshy's text-to-image, text-to-3D, rigging, and animation endpoints in a declarative pipeline system. Define your pipeline as JSON, point it at an asset manifest, and get reproducible results every time.
-
-## Why @jbcom/agentic-meshy?
-
-| Problem | Solution |
-|---------|----------|
-| Meshy integration requires custom scripts per asset | Declarative JSON pipelines — no code |
-| Pipeline state lives in memory, lost on failure | Manifest-based state — resume from any step |
-| No way to replay exact pipeline in CI | VCR recording for Meshy calls, fully deterministic |
-| Preview requires external tools | Built-in 3D preview with `@google/model-viewer` |
-
-## Installation
+The new Python CLI owns declarative expansion and local ImageMagick steps. It
+depends on `vendor-fabric`, which exclusively owns Meshy authentication, HTTP,
+rate limiting, errors, polling, downloads and resumable job manifests.
```bash
-pnpm add @jbcom/agentic-meshy
-# or
-npm install @jbcom/agentic-meshy
-```
-
-## Quick Start
-
-### CLI
-
-```bash
-# List built-in pipelines and tasks
-content-gen list \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-
-# Validate an asset manifest
-content-gen validate ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-
-# Run a pipeline
-content-gen run character ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
-
-### Programmatic API
-
-```typescript
-import {
- PipelineRunner,
- loadJsonDefinitions
-} from '@jbcom/agentic-meshy';
-
-const definitions = await loadJsonDefinitions({
- pipelinesDir: './pipelines/definitions',
- tasksDir: './tasks/definitions',
-});
-
-const runner = new PipelineRunner({
- definitions,
- apiKey: process.env.MESHY_API_KEY!,
-});
-
-await runner.run({
- pipelineName: 'character',
- assetDir: './assets/characters/hero',
-});
-```
-
-## Core Concepts
-
-### Pipeline Definitions
-
-`pipelines/definitions/*.pipeline.json` describe **orchestration**. Each step references a task and can override inputs:
-
-```json
-{
- "name": "character",
- "steps": [
- {
- "task": "text-to-image",
- "inputs": { "prompt": "{{manifest.description}}" }
- },
- {
- "task": "image-to-3d",
- "inputs": { "image": "{{steps.0.output}}" }
- },
- {
- "task": "auto-rig",
- "inputs": { "model": "{{steps.1.output}}" }
- }
- ]
-}
-```
-
-### Task Definitions
-
-`tasks/definitions/*.json` describe **Meshy API calls**. Inputs resolve from manifests, previous steps, literals, environment variables, or lookup tables:
-
-```json
-{
- "name": "text-to-image",
- "endpoint": "/text-to-image",
- "method": "POST",
- "inputs": {
- "prompt": { "source": "manifest", "key": "description" },
- "style": { "source": "literal", "value": "realistic" }
- }
-}
+uvx --from meshy-content-generator content-gen run pipeline.json --root . --dry-run
```
-### Asset Manifests
-
-Each asset directory contains a `manifest.json` that supplies task inputs and stores pipeline state:
-
-```json
-{
- "name": "Hero Character",
- "description": "A medieval knight with ornate armor",
- "style": "fantasy",
- "state": {
- "lastStep": 1,
- "outputs": { "0": "image_abc123.png" }
- }
-}
-```
-
-## API Server & Preview
-
-```bash
-pnpm dev
-```
-
-- **API reference**: `http://localhost:5177/api`
-- **OpenAPI spec**: `http://localhost:5177/openapi.json`
-- **3D Preview**: `http://localhost:5177/preview?assetDir=./assets/characters/hero&file=model.glb`
-
-The preview uses `@google/model-viewer` from your local install (no CDN dependency).
-
-## Testing
-
-```bash
-# Unit tests
-pnpm test:unit
-
-# E2E tests
-pnpm test:e2e
-
-# Record Meshy calls for replay in CI
-POLLY_MODE=record pnpm test:unit
-
-# Replay recorded calls (default)
-POLLY_MODE=replay pnpm test:unit
-```
-
-## Environment Variables
-
-| Variable | Required | Description |
-|----------|----------|-------------|
-| `MESHY_API_KEY` | Yes | Meshy API key |
-| `POLLY_MODE` | No | `record` or `replay` (default: `replay`) |
-
-## Integration with Strata
-
-@jbcom/agentic-meshy powers the 3D asset pipeline for [Strata](https://strata.game), the AI-powered gaming platform:
-
-- **Character models**: Text description → 3D model → rigged → animated
-- **Environment assets**: Procedural generation of buildings, terrain features, props
-- **Item generation**: Weapons, armor, consumables from text descriptions
-- **Batch processing**: Generate entire game asset libraries from a manifest directory
-
-## Related Packages
-
-- **[@jbcom/agentic](/packages/agentic/)** — Fleet management and orchestration
-- **[agentic-crew](/packages/crew/)** — Multi-agent workflows for content generation
-
-## Links
-
-- [GitHub Repository](https://github.com/jbcom/agentic/tree/main/packages/meshy-content-generator)
-- [Meshy API Docs](https://docs.meshy.ai)
-- [npm Package](https://www.npmjs.com/package/@jbcom/agentic-meshy)
+The old npm package is retired and must not be used for new work.
diff --git a/docs/tests/unit/build-output.test.ts b/docs/tests/unit/build-output.test.ts
index 177b6faf..3ee20449 100644
--- a/docs/tests/unit/build-output.test.ts
+++ b/docs/tests/unit/build-output.test.ts
@@ -71,7 +71,7 @@ describe('Package pages exist in build output', () => {
{ path: 'packages/agentic/index.html', label: '@jbcom/agentic' },
{ path: 'packages/triage/index.html', label: '@jbcom/agentic-triage' },
{ path: 'packages/crew/index.html', label: 'agentic-crew' },
- { path: 'packages/meshy-content-generator/index.html', label: '@jbcom/agentic-meshy' },
+ { path: 'packages/meshy-content-generator/index.html', label: 'meshy-content-generator' },
];
for (const { path, label } of packagePages) {
diff --git a/docs/tests/unit/content-contract.test.ts b/docs/tests/unit/content-contract.test.ts
index 59b0551c..a55f7016 100644
--- a/docs/tests/unit/content-contract.test.ts
+++ b/docs/tests/unit/content-contract.test.ts
@@ -62,7 +62,7 @@ describe('Documentation contract', () => {
});
it('uses the canonical meshy package name in product pages', () => {
- expect(readDoc('packages/meshy-content-generator.md')).toContain('@jbcom/agentic-meshy');
+ expect(readDoc('packages/meshy-content-generator.md')).toContain('jbcom/meshy-content-generator');
});
it('does not ship stale triage source examples or stub remarks', () => {
diff --git a/packages/agentic/tests/production-release.test.ts b/packages/agentic/tests/production-release.test.ts
index 909c5481..9ae38e12 100644
--- a/packages/agentic/tests/production-release.test.ts
+++ b/packages/agentic/tests/production-release.test.ts
@@ -604,6 +604,22 @@ describe('Property 7: Multi-architecture support', () => {
expect(releaseWorkflow).toContain('platforms: linux/amd64,linux/arm64');
});
});
+
+describe('Extracted package release ownership', () => {
+ it('does not publish or scan the standalone Meshy package from this monorepo', async () => {
+ const [releaseWorkflow, ciWorkflow] = await Promise.all([
+ import('node:fs').then((fs) =>
+ fs.promises.readFile(join(WORKSPACE_ROOT, '.github/workflows/release.yml'), 'utf-8')
+ ),
+ import('node:fs').then((fs) =>
+ fs.promises.readFile(join(WORKSPACE_ROOT, '.github/workflows/ci.yml'), 'utf-8')
+ ),
+ ]);
+
+ expect(releaseWorkflow).not.toContain('packages/meshy-content-generator');
+ expect(ciWorkflow).not.toContain('packages/meshy-content-generator');
+ });
+});
describe('Docker non-root user example', () => {
/**
* **Validates: Requirements 2.6, 7.4**
diff --git a/packages/meshy-content-generator/LICENSE b/packages/meshy-content-generator/LICENSE
deleted file mode 100644
index 07ae2c9d..00000000
--- a/packages/meshy-content-generator/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2026 jbcom
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/packages/meshy-content-generator/README.md b/packages/meshy-content-generator/README.md
index 26b06e22..49975fdb 100644
--- a/packages/meshy-content-generator/README.md
+++ b/packages/meshy-content-generator/README.md
@@ -1,91 +1,8 @@
-# @jbcom/agentic-meshy
-
-[](https://www.npmjs.com/package/@jbcom/agentic-meshy)
-[](https://github.com/jbcom/agentic/actions/workflows/ci.yml)
-[](https://opensource.org/licenses/MIT)
-
-Declarative Meshy 3D asset generation pipelines. Define text-to-image, text-to-3D, rigging, and animation workflows as JSON, then run them from a CLI, REST API, or programmatically as a library. Includes a built-in 3D model preview server powered by `@google/model-viewer`.
-
-[Full Documentation](https://agentic.coach) | [Package Docs](https://agentic.coach/packages/meshy-content-generator/)
-
-## Installation
-
-```bash
-npm install @jbcom/agentic-meshy
-# or
-pnpm add @jbcom/agentic-meshy
-```
-
-## Quick Start
-
-### CLI
-
-```bash
-# List built-in pipelines and tasks
-content-gen list --pipelines ./pipelines/definitions --tasks ./tasks/definitions
-
-# Validate an asset manifest
-content-gen validate ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-
-# Run a pipeline
-content-gen run character ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
-
-### Programmatic API
-
-```typescript
-import { PipelineRunner, loadJsonDefinitions } from '@jbcom/agentic-meshy';
-
-const definitions = await loadJsonDefinitions({
- pipelinesDir: './pipelines/definitions',
- tasksDir: './tasks/definitions',
-});
-
-const runner = new PipelineRunner({
- definitions,
- apiKey: process.env.MESHY_API_KEY!,
-});
-
-await runner.run({
- pipelineName: 'character',
- assetDir: './assets/characters/hero',
-});
-```
-
-### API Server and Preview
-
-```bash
-pnpm dev
-```
-
-- API reference: `http://localhost:5177/api`
-- OpenAPI spec: `http://localhost:5177/openapi.json`
-- 3D preview: `http://localhost:5177/preview?assetDir=./assets/characters/hero&file=model.glb`
-
-## Key Features
-
-- **Meshy-first** -- built around Meshy's text-to-image, text-to-3D, rigging, and animation endpoints
-- **Declarative pipelines** -- orchestration defined in JSON, not brittle scripts
-- **Reusable manifests** -- one manifest per asset, replay the exact pipeline anytime
-- **CLI + API + library** -- use from the command line, embed in a server, or import directly
-- **VCR-tested** -- Polly.js recording for deterministic Meshy API tests
-- **OpenAPI spec** -- auto-generated spec with Scalar API reference
-
-## Environment
-
-```bash
-MESHY_API_KEY=your_api_key # Required for Meshy API calls
-POLLY_MODE=replay # VCR mode: record | replay | passthrough
-```
-
-## Documentation
-
-Visit [agentic.coach](https://agentic.coach) for full documentation including the [Meshy Content Generator guide](https://agentic.coach/packages/meshy-content-generator/).
-
-## License
-
-MIT
+# Extracted
+
+The former `@jbcom/agentic-meshy` package was extracted with its history into
+the standalone OSS repository
+[`jbcom/meshy-content-generator`](https://github.com/jbcom/meshy-content-generator).
+The replacement is a Python package whose only Meshy transport is
+`vendor-fabric`. This tombstone is intentionally not a workspace package and
+can be removed after downstream links have aged out.
diff --git a/packages/meshy-content-generator/e2e/fixtures/model.glb b/packages/meshy-content-generator/e2e/fixtures/model.glb
deleted file mode 100644
index 9e00702b..00000000
--- a/packages/meshy-content-generator/e2e/fixtures/model.glb
+++ /dev/null
@@ -1 +0,0 @@
-glTF
\ No newline at end of file
diff --git a/packages/meshy-content-generator/e2e/playwright.config.ts b/packages/meshy-content-generator/e2e/playwright.config.ts
deleted file mode 100644
index 201f608b..00000000
--- a/packages/meshy-content-generator/e2e/playwright.config.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { defineConfig } from "@playwright/test";
-
-export default defineConfig({
- testDir: "./tests",
- timeout: 60_000,
- use: {
- baseURL: "http://127.0.0.1:5177",
- browserName: "chromium",
- },
- webServer: {
- command: "pnpm dev",
- url: "http://127.0.0.1:5177/openapi.json",
- reuseExistingServer: !process.env.CI,
- env: {
- MESHY_API_KEY: process.env.MESHY_API_KEY ?? "test-key",
- },
- },
-});
diff --git a/packages/meshy-content-generator/e2e/tests/preview.spec.ts b/packages/meshy-content-generator/e2e/tests/preview.spec.ts
deleted file mode 100644
index d7d38e76..00000000
--- a/packages/meshy-content-generator/e2e/tests/preview.spec.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import fs from "node:fs";
-import path from "node:path";
-import { expect, test } from "@playwright/test";
-
-const fixtureDir = path.resolve(process.cwd(), "e2e/fixtures");
-const modelPath = path.join(fixtureDir, "model.glb");
-
-test.beforeAll(() => {
- fs.mkdirSync(fixtureDir, { recursive: true });
- if (!fs.existsSync(modelPath)) {
- fs.writeFileSync(modelPath, "glTF");
- }
-});
-
-test("preview page renders model-viewer", async ({ page }) => {
- const url = `/preview?assetDir=${encodeURIComponent("e2e/fixtures")}&file=model.glb`;
- await page.goto(url);
- await expect(page.locator("model-viewer")).toBeVisible();
-});
diff --git a/packages/meshy-content-generator/lookups/animation-library.json b/packages/meshy-content-generator/lookups/animation-library.json
deleted file mode 100644
index 1702ed69..00000000
--- a/packages/meshy-content-generator/lookups/animation-library.json
+++ /dev/null
@@ -1,1367 +0,0 @@
-{
- "name": "meshy-animation-library",
- "description": "Meshy Animation Library - auto-synced from docs.meshy.ai",
- "source": "https://docs.meshy.ai/en/api/animation-library",
- "syncedAt": "2026-01-15T19:11:41.639Z",
- "totalAnimations": 678,
- "byPath": {
- "DailyActions.Idle.Idle": 0,
- "WalkAndRun.Walking.Walking_Woman": 1,
- "DailyActions.LookingAround.Alert": 2,
- "DailyActions.LookingAround.Arise": 3,
- "Fighting.AttackingwithWeapon.Attack": 4,
- "WalkAndRun.Running.BackLeft_run": 5,
- "WalkAndRun.Running.BackRight_Run": 6,
- "Fighting.GettingHit.BeHit_FlyUp": 7,
- "Fighting.Dying.Dead": 8,
- "Fighting.Transitioning.ForwardLeft_Run_Fight": 9,
- "Fighting.Transitioning.ForwardRight_Run_Fight": 10,
- "DailyActions.Idle.Idle_02": 11,
- "DailyActions.Idle.Idle_03": 12,
- "WalkAndRun.Running.Jump_Run": 13,
- "WalkAndRun.Running.Run_02": 14,
- "WalkAndRun.Running.Run_03": 15,
- "WalkAndRun.Running.RunFast": 16,
- "BodyMovements.Acting.Skill_01": 17,
- "BodyMovements.Acting.Skill_02": 18,
- "BodyMovements.Acting.Skill_03": 19,
- "WalkAndRun.Walking.Walk_Fight_Back": 20,
- "WalkAndRun.Walking.Walk_Fight_Forward": 21,
- "Dancing.Dancing.FunnyDancing_01": 22,
- "Dancing.Dancing.FunnyDancing_02": 23,
- "Dancing.Dancing.FunnyDancing_03": 24,
- "DailyActions.Interacting.Agree_Gesture": 25,
- "DailyActions.Interacting.Angry_Stomp": 26,
- "BodyMovements.Acting.Big_Heart_Gesture": 27,
- "DailyActions.Interacting.Big_Wave_Hello": 28,
- "BodyMovements.Acting.Call_Gesture": 29,
- "WalkAndRun.Walking.Casual_Walk": 30,
- "BodyMovements.Acting.Catching_Breath": 31,
- "DailyActions.Idle.Chair_Sit_Idle_F": 32,
- "DailyActions.Idle.Chair_Sit_Idle_M": 33,
- "DailyActions.Interacting.Checkout_Gesture": 34,
- "BodyMovements.Acting.Clapping_Run": 35,
- "DailyActions.Idle.Confused_Scratch": 36,
- "DailyActions.Interacting.Discuss_While_Moving": 37,
- "DailyActions.Idle.Dozing_Elderly": 38,
- "BodyMovements.Acting.Excited_Walk_F": 39,
- "BodyMovements.Acting.Excited_Walk_M": 40,
- "DailyActions.Interacting.Formal_Bow": 41,
- "DailyActions.Interacting.Gentlemans_Bow": 42,
- "BodyMovements.Acting.Handbag_Walk": 43,
- "BodyMovements.Acting.Happy_jump_f": 44,
- "BodyMovements.Acting.Indoor_Play": 45,
- "BodyMovements.Acting.Jump_Rope": 46,
- "DailyActions.Interacting.Listening_Gesture": 47,
- "DailyActions.Idle.Mirror_Viewing": 48,
- "DailyActions.Interacting.Motivational_Cheer": 49,
- "DailyActions.Interacting.Phone_Call_Gesture": 50,
- "BodyMovements.Acting.Shouting_Angrily": 51,
- "DailyActions.Transitioning.Sit_to_Stand_Transition_F": 52,
- "DailyActions.Transitioning.Sit_to_Stand_Transition_M": 53,
- "Dancing.Dancing.Squat_Stance": 54,
- "WalkAndRun.Walking.Stage_Walk": 55,
- "DailyActions.Interacting.Stand_and_Chat": 56,
- "DailyActions.Transitioning.Stand_to_Sit_Transition_M": 57,
- "DailyActions.Transitioning.Step_to_Sit_Transition": 58,
- "BodyMovements.Acting.Victory_Cheer": 59,
- "DailyActions.Transitioning.Walk_to_Sit": 60,
- "BodyMovements.Acting.happy_jump_m": 61,
- "BodyMovements.Acting.penguin_walk": 62,
- "Dancing.Dancing.Arm_Circle_Shuffle": 63,
- "Dancing.Dancing.All_Night_Dance": 64,
- "Dancing.Dancing.Bass_Beats": 65,
- "Dancing.Dancing.Boom_Dance": 66,
- "Dancing.Dancing.Bubble_Dance": 67,
- "Dancing.Dancing.Cherish_Pop_Dance": 68,
- "Dancing.Dancing.Crystal_Beads": 69,
- "Dancing.Dancing.Cardio_Dance": 70,
- "Dancing.Dancing.Denim_Pop_Dance": 71,
- "Dancing.Dancing.Dont_You_Dare": 72,
- "Dancing.Dancing.Fast_Lightning": 73,
- "Dancing.Dancing.Gangnam_Groove": 74,
- "Dancing.Dancing.Indoor_Swing": 75,
- "Dancing.Dancing.Love_You_Pop_Dance": 76,
- "Dancing.Dancing.Magic_Genie": 77,
- "Dancing.Dancing.Not_Your_Mom": 78,
- "Dancing.Dancing.OMG_Groove": 79,
- "Dancing.Dancing.Pop_Dance_LSA2": 80,
- "Dancing.Dancing.Pod_Baby_Groove": 81,
- "Dancing.Dancing.Shake_It_Off_Dance": 82,
- "Dancing.Dancing.Superlove_Pop_Dance": 83,
- "Dancing.Dancing.You_Groove": 84,
- "Fighting.Transitioning.Axe_Stance": 85,
- "Fighting.AttackingwithWeapon.Basic_Jump": 86,
- "Fighting.Punching.Boxing_Practice": 87,
- "Fighting.Transitioning.Chest_Pound_Taunt": 88,
- "Fighting.AttackingwithWeapon.Combat_Stance": 89,
- "Fighting.Punching.Counterstrike": 90,
- "Fighting.AttackingwithWeapon.Double_Blade_Spin": 91,
- "Fighting.AttackingwithWeapon.Double_Combo_Attack": 92,
- "Fighting.Punching.Dodge_and_Counter": 93,
- "Fighting.Punching.Flying_Fist_Kick": 94,
- "Fighting.AttackingwithWeapon.Gun_Hold_Left_Turn": 95,
- "Fighting.Punching.Kung_Fu_Punch": 96,
- "Fighting.AttackingwithWeapon.Left_Slash": 97,
- "Fighting.AttackingwithWeapon.Run_and_Shoot": 98,
- "Fighting.Transitioning.Reaping_Swing": 99,
- "Fighting.Transitioning.Rightward_Spin": 100,
- "BodyMovements.Acting.Sword_Shout": 101,
- "Fighting.AttackingwithWeapon.Sword_Judgment": 102,
- "Fighting.AttackingwithWeapon.Simple_Kick": 103,
- "Fighting.AttackingwithWeapon.Side_Shot": 104,
- "Fighting.AttackingwithWeapon.Triple_Combo_Attack": 105,
- "WalkAndRun.Walking.Confident_Walk": 106,
- "WalkAndRun.Walking.Confident_Strut": 107,
- "WalkAndRun.Walking.Flirty_Strut": 108,
- "BodyMovements.Acting.Groovy_Walk": 109,
- "WalkAndRun.Running.Hello_Run": 110,
- "WalkAndRun.Walking.Injured_Walk": 111,
- "WalkAndRun.Walking.Monster_Walk": 112,
- "BodyMovements.Acting.Mummy_Stagger": 113,
- "WalkAndRun.Walking.Proud_Strut": 114,
- "WalkAndRun.Walking.Quick_Walk": 115,
- "WalkAndRun.Walking.Run_to_Walk_Transition": 116,
- "WalkAndRun.Walking.Red_Carpet_Walk": 117,
- "WalkAndRun.Walking.Skip_Forward": 118,
- "WalkAndRun.Walking.Slow_Orc_Walk": 119,
- "WalkAndRun.Running.Touch_and_Run": 120,
- "WalkAndRun.Walking.Thoughtful_Walk": 121,
- "WalkAndRun.Walking.Texting_Walk": 122,
- "WalkAndRun.Walking.Unsteady_Walk": 123,
- "WalkAndRun.Walking.Walking_with_Phone": 124,
- "Fighting.CastingSpell.Charged_Spell_Cast": 125,
- "Fighting.CastingSpell.Charged_Spell_Cast_1": 126,
- "Fighting.CastingSpell.Charged_Ground_Slam": 127,
- "Fighting.AttackingwithWeapon.Heavy_Hammer_Swing": 128,
- "Fighting.CastingSpell.mage_soell_cast": 129,
- "Fighting.CastingSpell.mage_soell_cast_1": 130,
- "Fighting.CastingSpell.mage_soell_cast_2": 131,
- "Fighting.CastingSpell.mage_soell_cast_3": 132,
- "Fighting.CastingSpell.mage_soell_cast_4": 133,
- "Fighting.CastingSpell.mage_soell_cast_5": 134,
- "Fighting.CastingSpell.mage_soell_cast_6": 135,
- "Fighting.CastingSpell.mage_soell_cast_7": 136,
- "Fighting.CastingSpell.mage_soell_cast_8": 137,
- "Fighting.Blocking.Block1": 138,
- "Fighting.Blocking.Block2": 139,
- "Fighting.Blocking.Block3": 140,
- "Fighting.Blocking.Block4": 141,
- "Fighting.Blocking.Block5": 142,
- "Fighting.Blocking.Block6": 143,
- "Fighting.Blocking.Block8": 144,
- "Fighting.Blocking.Block9": 145,
- "Fighting.Blocking.Block10": 146,
- "Fighting.Blocking.Sword_Parry": 147,
- "Fighting.Blocking.Sword_Parry_Backward": 148,
- "Fighting.Blocking.Two_Handed_Parry": 149,
- "Fighting.Blocking.Hit_Reaction_with_Bow": 150,
- "Fighting.Blocking.Sword_Parry_Backward_1": 151,
- "Fighting.Blocking.Sword_Parry_Backward_2": 152,
- "Fighting.Blocking.Sword_Parry_Backward_3": 153,
- "Fighting.Blocking.Sword_Parry_Backward_4": 154,
- "Fighting.Blocking.Sword_Parry_Backward_5": 155,
- "Fighting.Transitioning.Stand_Dodge": 156,
- "Fighting.Transitioning.Stand_Dodge_1": 157,
- "Fighting.Transitioning.Roll_Dodge": 158,
- "Fighting.Transitioning.Roll_Dodge_1": 159,
- "Fighting.Transitioning.Roll_Dodge_2": 160,
- "Fighting.Transitioning.Roll_Dodge_3": 161,
- "Fighting.Transitioning.Stand_Dodge_2": 162,
- "Fighting.Transitioning.Roll_Dodge_4": 163,
- "Fighting.Transitioning.Stand_Dodge_3": 164,
- "Fighting.Transitioning.Kneeling_Reload": 165,
- "Fighting.Transitioning.Running_Reload": 166,
- "Fighting.Transitioning.Slow_Walk_Reload": 167,
- "Fighting.Transitioning.Prone_Reload": 168,
- "Fighting.Transitioning.Forward_Reload_Subtle": 169,
- "Fighting.Transitioning.Standing_Reload": 170,
- "Fighting.Transitioning.Hit_Reaction_to_Waist": 171,
- "Fighting.GettingHit.Electrocution_Reaction": 172,
- "Fighting.GettingHit.Slap_Reaction": 173,
- "Fighting.GettingHit.Face_Punch_Reaction": 174,
- "Fighting.GettingHit.Face_Punch_Reaction_1": 175,
- "Fighting.GettingHit.Face_Punch_Reaction_2": 176,
- "Fighting.GettingHit.Gunshot_Reaction": 177,
- "Fighting.GettingHit.Hit_Reaction": 178,
- "Fighting.GettingHit.Hit_Reaction_1": 179,
- "Fighting.GettingHit.Shot_in_the_Back_and_Fall": 180,
- "Fighting.Dying.Electrocuted_Fall": 181,
- "Fighting.Dying.Shot_and_Blown_Back": 182,
- "Fighting.Dying.Shot_and_Fall_Backward": 183,
- "Fighting.Dying.Shot_and_Fall_Forward": 184,
- "Fighting.Dying.Shot_and_Slow_Fall_Backward": 185,
- "Fighting.Dying.Strangled_and_Fall_Forward": 186,
- "Fighting.Dying.Knock_Down": 187,
- "Fighting.Dying.Fall_Dead_from_Abdominal_Injury": 188,
- "Fighting.Dying.dying_backwards": 189,
- "Fighting.Dying.Knock_Down_1": 190,
- "Fighting.Punching.Left_Jab_from_Guard": 191,
- "Fighting.Punching.Right_Jab_from_Guard": 192,
- "Fighting.Punching.Left_Hook_from_Guard": 193,
- "Fighting.Punching.Right_Uppercut_from_Guard": 194,
- "Fighting.Punching.Right_Upper_Hook_from_Guard": 195,
- "Fighting.Punching.Left_Uppercut_from_Guard": 196,
- "Fighting.Punching.Left_Short_Hook_from_Guard": 197,
- "Fighting.Punching.Punch_Combo": 198,
- "Fighting.Punching.Weapon_Combo": 199,
- "Fighting.Punching.Punch_Combo_1": 200,
- "Fighting.Punching.Punch_Combo_2": 201,
- "Fighting.Punching.Weapon_Combo_1": 202,
- "Fighting.Punching.Punch_Combo_3": 203,
- "Fighting.Punching.Punch_Combo_4": 204,
- "Fighting.Punching.Punch_Combo_5": 205,
- "Fighting.Punching.Spartan_Kick": 206,
- "Fighting.Punching.Roundhouse_Kick": 207,
- "Fighting.Punching.Lunge_Roundhouse_Kick": 208,
- "Fighting.Punching.Boxing_Guard_Right_Straight_Kick": 209,
- "Fighting.Punching.Boxing_Guard_Prep_Straight_Punch": 210,
- "Fighting.Punching.Boxing_Guard_Step_Knee_Strike": 211,
- "Fighting.Punching.Elbow_Strike": 212,
- "Fighting.Punching.Leg_Sweep": 213,
- "Fighting.Punching.Punch_Forward_with_Both_Fists": 214,
- "Fighting.Punching.High_Kick": 215,
- "Fighting.Punching.Lunge_Spin_Kick": 216,
- "Fighting.Punching.Sweeping_Kick": 217,
- "Fighting.Punching.Step_in_High_Kick": 218,
- "Fighting.Punching.Right_Hand_Sword_Slash": 219,
- "Fighting.Punching.Shield_Push_Left": 220,
- "Fighting.Punching.Charged_Upward_Slash": 221,
- "Fighting.AttackingwithWeapon.Draw_and_Shoot_from_Back": 222,
- "Fighting.AttackingwithWeapon.Draw_and_Shoot_from_Back_1": 223,
- "Fighting.AttackingwithWeapon.Archery_Shot": 224,
- "Fighting.AttackingwithWeapon.Archery_Shot_1": 225,
- "Fighting.AttackingwithWeapon.Archery_Shot_2": 226,
- "Fighting.AttackingwithWeapon.Archery_Shot_3": 227,
- "Fighting.AttackingwithWeapon.Walk_Forward_with_Bow_Aimed": 228,
- "Fighting.AttackingwithWeapon.Draw_and_Shoot_from_Back_2": 229,
- "Fighting.AttackingwithWeapon.Walk_Backward_with_Bow_Aimed": 230,
- "Fighting.AttackingwithWeapon.Archery_Aim_with_Lateral_Scan": 231,
- "Fighting.AttackingwithWeapon.Cowboy_Quick_Draw_Shooting": 232,
- "Fighting.AttackingwithWeapon.Walk_Backward_While_Shooting": 233,
- "Fighting.AttackingwithWeapon.Walk_Forward_While_Shooting": 234,
- "Fighting.AttackingwithWeapon.Forward_Roll_and_Fire": 235,
- "Fighting.AttackingwithWeapon.Draw_and_Shoot_Left": 236,
- "Fighting.AttackingwithWeapon.Charged_Axe_Chop": 237,
- "Fighting.AttackingwithWeapon.Axe_Spin_Attack": 238,
- "Fighting.AttackingwithWeapon.Crouch_Pull_and_Throw": 239,
- "Fighting.AttackingwithWeapon.Thrust_Slash": 240,
- "Fighting.AttackingwithWeapon.Weapon_Combo_2": 241,
- "Fighting.AttackingwithWeapon.Charged_Slash": 242,
- "DailyActions.Idle.Idle_3": 243,
- "DailyActions.Idle.Idle_4": 244,
- "DailyActions.Idle.Idle_5": 245,
- "DailyActions.Idle.Idle_6": 246,
- "DailyActions.Idle.Idle_7": 247,
- "DailyActions.Idle.Idle_8": 248,
- "DailyActions.Idle.Idle_9": 249,
- "DailyActions.Idle.Idle_10": 250,
- "DailyActions.Idle.Idle_11": 251,
- "DailyActions.Idle.Idle_12": 252,
- "DailyActions.Idle.Idle_13": 253,
- "DailyActions.Idle.Idle_14": 254,
- "DailyActions.Idle.Angry_Ground_Stomp": 255,
- "DailyActions.Idle.Angry_Ground_Stomp_1": 256,
- "DailyActions.Idle.Angry_Ground_Stomp_2": 257,
- "DailyActions.Idle.CrouchLookAroundBow": 258,
- "DailyActions.Pushing.Step_Forward_and_Push": 259,
- "DailyActions.Pushing.Push_Forward_and_Stop": 260,
- "DailyActions.Pushing.Push_and_Walk_Forward": 261,
- "DailyActions.Pushing.Crouch_and_Push_Forward": 262,
- "DailyActions.Sleeping.Sleep_on_Desk": 263,
- "DailyActions.Sleeping.Cough_While_Sleeping": 264,
- "DailyActions.Sleeping.Groan_Holding_Stomach_in_Sleep": 265,
- "DailyActions.Sleeping.Lie_Down_Hands_Spread": 266,
- "DailyActions.Sleeping.Sleep_Normally": 267,
- "DailyActions.Sleeping.Sit_and_Doze_Off": 268,
- "DailyActions.Sleeping.sleep": 269,
- "DailyActions.Sleeping.Toss_and_Turn": 270,
- "DailyActions.Sleeping.Wake_Up_and_Look_Up": 271,
- "DailyActions.Sleeping.Lie_on_Chair_Sunbathe_and_Sleep": 272,
- "DailyActions.PickingUpItem.Male_Run_Forward_Pick_Up_Left": 273,
- "DailyActions.PickingUpItem.Female_Crouch_Pick_Up_Place_Side": 274,
- "DailyActions.PickingUpItem.Female_Run_Forward_Pick_Up_Right": 275,
- "DailyActions.PickingUpItem.Male_Bend_Over_Pick_Up": 276,
- "DailyActions.PickingUpItem.Female_Crouch_Pick_Fruit_Basket_Stand": 277,
- "DailyActions.PickingUpItem.Female_Stand_Pick_Fruit_Basket": 278,
- "DailyActions.PickingUpItem.Female_Crouch_Pick_Gun_Point_Forward": 279,
- "DailyActions.PickingUpItem.Female_Crouch_Pick_Throw_Forward": 280,
- "DailyActions.PickingUpItem.Female_Bend_Over_Pick_Up_Inspect": 281,
- "DailyActions.PickingUpItem.Female_Walk_Pick_Put_In_Pocket": 282,
- "DailyActions.PickingUpItem.Pull_Radish": 283,
- "DailyActions.PickingUpItem.Collect_Object": 284,
- "DailyActions.Interacting.open_door": 285,
- "DailyActions.Interacting.open_door_1": 286,
- "DailyActions.Interacting.open_door_2": 287,
- "DailyActions.Interacting.open_door_3": 288,
- "DailyActions.Interacting.open_door_4": 289,
- "DailyActions.Interacting.Wave_One_Hand": 290,
- "DailyActions.Interacting.Wave_for_Help": 291,
- "DailyActions.Interacting.Gesture_with_Hand_on_Gun": 292,
- "DailyActions.Interacting.Wave_for_Help_1": 293,
- "DailyActions.Interacting.Wave_for_Help_2": 294,
- "DailyActions.Interacting.Wave_for_Help_3": 295,
- "DailyActions.Interacting.Wave_for_Help_4": 296,
- "DailyActions.Interacting.Personalized_Gesture": 297,
- "DailyActions.Interacting.Cheer_with_Both_Hands_Up": 298,
- "DailyActions.Interacting.Stand_Clap_and_Sit_Down": 299,
- "DailyActions.Interacting.Sit_Cheer_with_Left_Hand": 300,
- "DailyActions.Interacting.Cheer_with_Both_Hands_1": 301,
- "DailyActions.Interacting.Stand_Wave_and_Sit_Down": 302,
- "DailyActions.Interacting.Cheer_with_Both_Hands": 303,
- "DailyActions.Interacting.Seated_Fist_Pump": 304,
- "DailyActions.Interacting.Stand_Cheer_and_Sit_Down": 305,
- "DailyActions.Interacting.Cheer_with_One_Hand_Up": 306,
- "DailyActions.Interacting.Sitting_Answering_Questions": 307,
- "DailyActions.Interacting.Talk_Passionately": 308,
- "DailyActions.Interacting.Talk_with_Left_Hand_on_Hip": 309,
- "DailyActions.Interacting.Talk_with_Left_Hand_Raised": 310,
- "DailyActions.Interacting.Stand_Talking_Angry": 311,
- "DailyActions.Interacting.Phone_Conversation": 312,
- "DailyActions.Interacting.Talk_with_Hands_Open": 313,
- "DailyActions.Interacting.Talk_with_Right_Hand_Open": 314,
- "DailyActions.Interacting.Hand_on_Hip_Gesture": 315,
- "DailyActions.Interacting.Headache_Relief": 316,
- "DailyActions.Interacting.Shrug": 317,
- "DailyActions.Interacting.Scheming_Hand_Rub": 318,
- "DailyActions.WorkingOut.air_squat": 319,
- "DailyActions.WorkingOut.bicep_curl": 320,
- "DailyActions.WorkingOut.bicycle_crunch": 321,
- "DailyActions.WorkingOut.circle_crunch": 322,
- "DailyActions.WorkingOut.golf_drive": 323,
- "DailyActions.WorkingOut.idle_to_push_up": 324,
- "DailyActions.WorkingOut.jump_push_up": 325,
- "DailyActions.WorkingOut.jumping_jacks": 326,
- "DailyActions.WorkingOut.kettlebell_swing": 327,
- "DailyActions.WorkingOut.push_up_to_idle": 328,
- "DailyActions.WorkingOut.push_up": 329,
- "DailyActions.WorkingOut.situps": 330,
- "DailyActions.WorkingOut.Sumo_High_Pull": 331,
- "DailyActions.LookingAround.Look_Around_Dumbfounded": 333,
- "DailyActions.LookingAround.Lower_Weapon_Look_Raise": 334,
- "DailyActions.LookingAround.Axe_Breathe_and_Look_Around": 335,
- "DailyActions.LookingAround.Long_Breathe_and_Look_Around": 336,
- "DailyActions.LookingAround.Torch_Look_Around": 337,
- "DailyActions.LookingAround.Short_Breathe_and_Look_Around": 338,
- "DailyActions.LookingAround.Walking_Scan_with_Sudden_Look_Back": 339,
- "DailyActions.LookingAround.Crawl_and_Look_Back": 340,
- "DailyActions.LookingAround.Walk_Slowly_and_Look_Around": 341,
- "DailyActions.Drinking.Stand_and_Drink": 342,
- "DailyActions.Drinking.Sit_and_Drink": 343,
- "DailyActions.Transitioning.Stand_Up1": 344,
- "DailyActions.Transitioning.Stand_Up2": 345,
- "DailyActions.Transitioning.Stand_Up3": 346,
- "DailyActions.Transitioning.Stand_Up4": 347,
- "DailyActions.Transitioning.Stand_Up5": 348,
- "DailyActions.Transitioning.Stand_Up6": 349,
- "DailyActions.Transitioning.Stand_Up7": 350,
- "DailyActions.Transitioning.Stand_Up8": 351,
- "DailyActions.Transitioning.Stand_Up9": 352,
- "DailyActions.Transitioning.Stand_Up10": 353,
- "DailyActions.Transitioning.Sitting_Clap": 354,
- "DailyActions.Transitioning.Sit_Finger_Wag_No": 355,
- "DailyActions.Transitioning.Sit_Hands_on_Head_Lean_Back": 356,
- "DailyActions.Transitioning.Sit_Thumbs_Up_Right": 357,
- "DailyActions.Transitioning.Sit_Shout_Hands_on_Mouth": 358,
- "DailyActions.Transitioning.Look_Back_and_Sit": 359,
- "DailyActions.Transitioning.Sit_to_standTransition_Female_2": 360,
- "DailyActions.Transitioning.Sit_Dodge": 361,
- "DailyActions.Transitioning.Sit_Cross_Legged": 362,
- "DailyActions.Transitioning.Sit_Cross_Legged_on_Floor": 363,
- "DailyActions.Transitioning.Sit_on_Chair_Arms_Crossed": 364,
- "DailyActions.Transitioning.Kneel_on_One_Knee_and_Stand": 365,
- "DailyActions.Transitioning.falling_down": 366,
- "DailyActions.Transitioning.SideLying_Reach_Help": 367,
- "DailyActions.Transitioning.Angry_To_Tantrum_Sit": 368,
- "DailyActions.Transitioning.Lie_Back_Leg_Swing": 369,
- "DailyActions.Transitioning.Stand_To_Side_Lying": 370,
- "DailyActions.Transitioning.Sit_Lie_Bed": 371,
- "DailyActions.Transitioning.Prone_Reach_Help": 372,
- "BodyMovements.Acting.Handstand_Flip": 375,
- "BodyMovements.Acting.Punch_Pose": 376,
- "BodyMovements.Acting.Relax_arms_then_strike_battle_pose": 377,
- "BodyMovements.Acting.Large_step_then_high_kick": 378,
- "BodyMovements.Acting.Side_jumps_in_horse_stance": 379,
- "BodyMovements.Acting.Step_Right_for_Exercise": 381,
- "BodyMovements.Acting.Jump_and_Slam_Back_Down": 382,
- "BodyMovements.Acting.Quick_Step_and_Spin_Dodge": 384,
- "BodyMovements.Acting.Boxing_Warmup": 385,
- "BodyMovements.Acting.Zombie_Scream": 386,
- "BodyMovements.Acting.Half_Squat_with_Thumb_Up": 387,
- "BodyMovements.Acting.Show_Both_Arm_Muscles": 388,
- "BodyMovements.Acting.Grip_and_Throw_Down": 389,
- "BodyMovements.Acting.Stand_on_Pole_and_Balance": 390,
- "BodyMovements.Acting.Head_Hold_in_Pain": 391,
- "BodyMovements.Acting.Ground_Flip_and_Sweep_Up": 392,
- "BodyMovements.Acting.baseball_pitching": 393,
- "BodyMovements.Acting.Backflip_and_Hooks": 394,
- "BodyMovements.Acting.Breakdance_1990": 395,
- "BodyMovements.Acting.Burpee_Exercise": 396,
- "BodyMovements.Acting.360_Power_Spin_Jump": 397,
- "BodyMovements.Acting.Crouch_Charge_and_Throw": 398,
- "BodyMovements.Acting.Step_Step_Turn_Kick": 399,
- "BodyMovements.Acting.Sprint_Roll_and_Flip": 401,
- "BodyMovements.Acting.Run_and_Leap": 402,
- "BodyMovements.Acting.Victory_Fist_Pump": 403,
- "BodyMovements.Acting.Crouch_and_Step_Back": 404,
- "BodyMovements.Acting.Joyful_Dance_with_Hand_Sway": 405,
- "BodyMovements.Acting.Thomas_Flair_to_Jump_Up": 406,
- "BodyMovements.Acting.Wall_Push_Jump_and_Flip": 407,
- "BodyMovements.Acting.Jazz_Hands": 408,
- "BodyMovements.Acting.Finger_Wag_No": 409,
- "BodyMovements.Acting.Kick_a_Soccer_Ball": 410,
- "BodyMovements.Acting.Neck_Slashing_Gesture": 411,
- "BodyMovements.Acting.victory": 412,
- "BodyMovements.Acting.Backflip_and_Rise": 413,
- "BodyMovements.Acting.Double_kick_forward": 414,
- "BodyMovements.Acting.Happy_Sway_Standing": 415,
- "BodyMovements.Acting.Hit_in_Back_While_Running": 416,
- "BodyMovements.Acting.Hop_with_Arms_Raised": 417,
- "BodyMovements.Acting.Jump_to_Catch_and_Fall": 419,
- "BodyMovements.Acting.Left_Hand_Bitten_Step_Back": 420,
- "BodyMovements.Acting.Over_Shoulder_Throw": 421,
- "BodyMovements.Acting.Rising_Flying_Kick": 422,
- "BodyMovements.VaultingOverObstacle.Vault_with_Rifle": 425,
- "BodyMovements.VaultingOverObstacle.Roll_Behind_Cover": 426,
- "BodyMovements.VaultingOverObstacle.Vault_and_Land": 427,
- "BodyMovements.VaultingOverObstacle.Unarmed_Vault": 428,
- "BodyMovements.VaultingOverObstacle.Parkour_Vault": 429,
- "BodyMovements.VaultingOverObstacle.Parkour_Vault_with_Roll": 430,
- "BodyMovements.VaultingOverObstacle.Parkour_Vault_1": 431,
- "BodyMovements.VaultingOverObstacle.Parkour_Vault_2": 432,
- "BodyMovements.VaultingOverObstacle.Parkour_Vault_3": 433,
- "BodyMovements.Climbing.Fast_Ladder_Climb": 434,
- "BodyMovements.Climbing.Ladder_Climb_Finish": 435,
- "BodyMovements.Climbing.Ladder_Mount_Start": 436,
- "BodyMovements.Climbing.Slow_Ladder_Climb": 437,
- "BodyMovements.Climbing.Ladder_Climb_Loop": 438,
- "BodyMovements.Climbing.Climb_Left_with_Both_Limbs": 439,
- "BodyMovements.Climbing.Climb_Right_with_Both_Limbs": 440,
- "BodyMovements.Climbing.Climb_Stairs": 441,
- "BodyMovements.Climbing.Fast_Stair_Climb": 442,
- "BodyMovements.Climbing.climbing_up_wall": 444,
- "BodyMovements.Climbing.diagonal_wall_run": 445,
- "BodyMovements.Climbing.Hang_and_Climb_Left": 446,
- "BodyMovements.Climbing.Hang_and_Climb_Rght": 447,
- "BodyMovements.Climbing.Jump_and_Grab_Wall": 448,
- "BodyMovements.Climbing.Climb_Up_Rope": 449,
- "BodyMovements.PerformingStunt.Wall_Flip": 450,
- "BodyMovements.PerformingStunt.One_Arm_Handstand": 451,
- "BodyMovements.PerformingStunt.Backflip": 452,
- "BodyMovements.PerformingStunt.Backflip_Sweep_Kick": 453,
- "BodyMovements.PerformingStunt.Sweep_Kick": 455,
- "BodyMovements.PerformingStunt.Jumping_Head_Scissor_Takedown": 456,
- "BodyMovements.PerformingStunt.Jumping_Punch": 457,
- "BodyMovements.PerformingStunt.Unicycle_Jump_Dismount": 458,
- "BodyMovements.PerformingStunt.Run_Jump_and_Roll": 459,
- "BodyMovements.Jumping.Jump_with_Arms_Open": 460,
- "BodyMovements.Jumping.Jump_with_Arms_and_Legs_Open": 461,
- "BodyMovements.Jumping.Backflip_Jump": 462,
- "BodyMovements.Jumping.Run_and_Jump": 463,
- "BodyMovements.Jumping.Leap_and_Punch": 464,
- "BodyMovements.Jumping.Leap_Right_and_Catch": 465,
- "BodyMovements.Jumping.Regular_Jump": 466,
- "BodyMovements.Jumping.Jump_Over_Obstacle_2": 467,
- "BodyMovements.Jumping.Back_Jump": 468,
- "BodyMovements.Jumping.Jumping_Down": 470,
- "BodyMovements.Jumping.Jump_Over_Obstacle": 471,
- "BodyMovements.Jumping.Jump_Over_Obstacle_1": 472,
- "BodyMovements.HangingfromLedge.Quad_Jump_Left": 473,
- "BodyMovements.HangingfromLedge.Quad_Jump_Up": 474,
- "BodyMovements.HangingfromLedge.Quad_Climb_Right": 475,
- "BodyMovements.HangingfromLedge.Hang_and_Push_with_Foot": 476,
- "BodyMovements.HangingfromLedge.Rope_Hang_Idle": 477,
- "BodyMovements.HangingfromLedge.Bar_Hang_Idle": 478,
- "BodyMovements.HangingfromLedge.Upside_Down_Rope_Hang": 479,
- "BodyMovements.HangingfromLedge.Upside_Down_Rope_Hang_1": 480,
- "BodyMovements.HangingfromLedge.Upside_Down_Rope_Hang_2": 481,
- "BodyMovements.HangingfromLedge.Grab_Wall_Midair_Idle": 482,
- "BodyMovements.HangingfromLedge.Slow_Bar_Hang_Left": 483,
- "BodyMovements.HangingfromLedge.Slow_Bar_Hang_Right": 484,
- "BodyMovements.HangingfromLedge.Jump_and_Hang_on_Bar": 485,
- "BodyMovements.HangingfromLedge.Wall_Support_to_Step_Down": 486,
- "BodyMovements.FallingFreely.Climb_Attempt_and_Fall_3": 487,
- "BodyMovements.FallingFreely.Climb_Attempt_and_Fall_4": 488,
- "BodyMovements.FallingFreely.Climb_Attempt_and_Fall_5": 489,
- "BodyMovements.HangingfromLedge.Fall_Down": 490,
- "BodyMovements.HangingfromLedge.Fall_from_Bar": 491,
- "BodyMovements.HangingfromLedge.Wall_Support_Jump_to_Ground": 492,
- "BodyMovements.HangingfromLedge.Jump_Down_from_Wall": 493,
- "BodyMovements.HangingfromLedge.Swing_on_Rope_to_Ground": 494,
- "BodyMovements.HangingfromLedge.Grab_Bar_and_Swing_Forward": 495,
- "BodyMovements.HangingfromLedge.Rope_Hang_Backflip_to_Crouch": 496,
- "BodyMovements.Climbing.climbing_down_wall": 497,
- "BodyMovements.FallingFreely.Climb_Attempt_and_Fall": 498,
- "BodyMovements.FallingFreely.Climb_Attempt_and_Fall_1": 499,
- "BodyMovements.FallingFreely.Climb_Attempt_and_Fall_2": 500,
- "BodyMovements.FallingFreely.Leap_of_Faith": 501,
- "BodyMovements.FallingFreely.Fall1": 502,
- "BodyMovements.FallingFreely.Fall2": 503,
- "BodyMovements.FallingFreely.Fall3": 504,
- "BodyMovements.FallingFreely.Fall4": 505,
- "BodyMovements.FallingFreely.Dive_Down_and_Land": 506,
- "BodyMovements.FallingFreely.Dive_Down_and_Land_1": 507,
- "BodyMovements.FallingFreely.Dive_Down_and_Land_2": 508,
- "WalkAndRun.Running.Lean_Forward_Sprint": 509,
- "WalkAndRun.Running.Standard_Forward_Charge": 510,
- "WalkAndRun.Running.Rifle_Charge": 511,
- "WalkAndRun.Running.Male_Head_Down_Charge": 512,
- "WalkAndRun.Running.Female_Head_Down_Charge": 513,
- "WalkAndRun.Running.Female_Bow_Charge_Left_Hand": 514,
- "WalkAndRun.Running.Female_Throwing_Stance_Charge": 515,
- "WalkAndRun.Running.slide_light": 516,
- "WalkAndRun.Running.slide_right": 517,
- "WalkAndRun.Running.sliding_rool": 518,
- "WalkAndRun.Running.sliding_stumble": 519,
- "WalkAndRun.CrouchWalking.Crouch_Walk_with_Torch": 520,
- "WalkAndRun.CrouchWalking.Crouch_Walk_Left_with_Torch": 521,
- "WalkAndRun.CrouchWalking.Crouch_Walk_Right_with_Torch": 522,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Backward": 523,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Forward": 524,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Left": 525,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Right": 526,
- "WalkAndRun.CrouchWalking.Crouch_Walk_Left_with_Gun": 527,
- "WalkAndRun.CrouchWalking.Walk_Left_with_Gun": 528,
- "WalkAndRun.CrouchWalking.Walk_Backward_with_Gun": 529,
- "WalkAndRun.Running.run_fast_3": 530,
- "WalkAndRun.Running.Sprint_and_Sudden_Stop": 531,
- "WalkAndRun.Running.run_fast_4": 532,
- "WalkAndRun.Running.run_fast_5": 533,
- "WalkAndRun.Running.run_fast_6": 534,
- "WalkAndRun.Running.run_fast_7": 535,
- "WalkAndRun.Running.run_fast_8": 536,
- "WalkAndRun.Running.run_fast_9": 537,
- "WalkAndRun.Running.run_fast_10": 538,
- "WalkAndRun.Running.run_fast_2": 539,
- "WalkAndRun.Walking.Injured_Walk_Backward": 540,
- "WalkAndRun.Walking.Walk_Backward_with_Gun_1": 541,
- "WalkAndRun.Walking.Walk_Backward_with_Grenade": 542,
- "WalkAndRun.Walking.Step_Back": 543,
- "WalkAndRun.Walking.Walk_Backward": 544,
- "WalkAndRun.Walking.Walk_Backward_with_Bow": 545,
- "WalkAndRun.Walking.Walk_Backward_with_Sword": 546,
- "WalkAndRun.Walking.Walk_Backward_with_Bow_1": 547,
- "WalkAndRun.Walking.Walk_Backward_with_Sword_Shield": 548,
- "WalkAndRun.Walking.Crawl_Backward": 549,
- "WalkAndRun.Walking.Carry_Heavy_Cannon_Forward": 550,
- "WalkAndRun.Walking.Carry_Heavy_Object_Walk": 551,
- "WalkAndRun.Walking.Carry_Water_Bucket_Walk": 552,
- "WalkAndRun.Walking.Elderly_Shaky_Walk": 553,
- "WalkAndRun.Walking.Funky_Walk": 554,
- "WalkAndRun.Walking.Limping_Walk_1": 555,
- "WalkAndRun.Walking.Limping_Walk_2": 556,
- "WalkAndRun.Walking.Limping_Walk_3": 557,
- "WalkAndRun.Walking.Limping_Walk": 558,
- "WalkAndRun.Walking.Sneaky_Walk": 559,
- "WalkAndRun.Walking.Spear_Walk": 560,
- "WalkAndRun.Walking.Step_Hip_Hop_Dance": 561,
- "WalkAndRun.Walking.Stumble_Walk": 562,
- "WalkAndRun.Walking.Stylish_Walk": 563,
- "WalkAndRun.Walking.Tightrope_Walk": 564,
- "WalkAndRun.Walking.Walk_with_Umbrella": 565,
- "WalkAndRun.Walking.walking_2": 566,
- "WalkAndRun.Walking.Walk_with_Walker_Support": 567,
- "WalkAndRun.Swimming.Swim_Idle": 568,
- "WalkAndRun.Swimming.Swim_Forward": 569,
- "WalkAndRun.Swimming.swimming_to_edge": 570,
- "WalkAndRun.TurningAround.Run_Turn_Left": 571,
- "WalkAndRun.TurningAround.Walk_Turn_Left": 572,
- "WalkAndRun.TurningAround.Rifle_Turn_Left": 573,
- "WalkAndRun.TurningAround.Walk_Turn_Left_with_Weapon": 574,
- "WalkAndRun.TurningAround.Combat_Idle_Turn_Left": 575,
- "WalkAndRun.TurningAround.Idle_Turn_Left": 576,
- "WalkAndRun.TurningAround.Idle_Step_Turn_Left": 577,
- "WalkAndRun.TurningAround.Idle_Torch_Turn_Left": 578,
- "WalkAndRun.TurningAround.Depressed_Full_Turn_Left": 579,
- "WalkAndRun.TurningAround.Sword_and_Shield_Alert_Turn_Left": 580,
- "WalkAndRun.TurningAround.Run_Sharp_Turn_Right": 581,
- "WalkAndRun.TurningAround.Run_Turn_Right": 582,
- "WalkAndRun.TurningAround.Walk_Turn_Right": 583,
- "WalkAndRun.TurningAround.Walk_Turn_Right_Female": 584,
- "WalkAndRun.TurningAround.Rifle_Aim_Turn_Right": 585,
- "WalkAndRun.TurningAround.Idle_Turn_Right": 586,
- "WalkAndRun.TurningAround.Walk_Turn_Right_Idle_Style": 587,
- "WalkAndRun.TurningAround.Frustrated_Turn_Right": 588,
- "WalkAndRun.TurningAround.Alert_Quick_Turn_Right": 589,
- "WalkAndRun.TurningAround.Sword_and_Shield_Alert_Turn_Right": 590,
- "Dancing.Dancing.Hip_Hop_Dance": 591,
- "Dancing.Dancing.Hip_Hop_Dance_1": 592,
- "Dancing.Dancing.Hip_Hop_Dance_2": 593,
- "Dancing.Dancing.Hip_Hop_Dance_3": 594,
- "Dancing.Dancing.jazz_danc": 595,
- "Dancing.Dancing.ymca_dance": 596,
- "Dancing.Dancing.Hip_Hop_Dance_4": 597,
- "DailyActions.WorkingOut.kettlebell_swing_1": 598,
- "DailyActions.Idle.Idle_15": 599,
- "BodyMovements.PerformingStunt.Backflip_inplace": 601,
- "BodyMovements.PerformingStunt.Backflip_Sweep_Kick_inplace": 604,
- "BodyMovements.Jumping.Back_Jump_inplace": 605,
- "WalkAndRun.Running.BackLeft_run_inplace": 606,
- "WalkAndRun.Running.BackRight_Run_inplace": 607,
- "Fighting.GettingHit.BeHit_FlyUp_inplace": 608,
- "Fighting.Punching.Boxing_Practice_inplace": 609,
- "WalkAndRun.Walking.Carry_Heavy_Cannon_Forward_inplace": 610,
- "WalkAndRun.Walking.Carry_Heavy_Object_Walk_inplace": 611,
- "WalkAndRun.Walking.Carry_Water_Bucket_Walk_inplace": 612,
- "WalkAndRun.Walking.Casual_Walk_inplace": 613,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Backward_inplace": 615,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Forward_inplace": 616,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Left_inplace": 617,
- "WalkAndRun.CrouchWalking.Cautious_Crouch_Walk_Right_inplace": 618,
- "BodyMovements.Climbing.Climb_Left_with_Both_Limbs_inplace": 619,
- "BodyMovements.Climbing.Climb_Right_with_Both_Limbs_inplace": 620,
- "WalkAndRun.Walking.Confident_Strut_inplace": 621,
- "WalkAndRun.Walking.Crawl_Backward_inplace": 622,
- "WalkAndRun.CrouchWalking.Crouch_Walk_Left_with_Gun_inplace": 623,
- "WalkAndRun.CrouchWalking.Crouch_Walk_Left_with_Torch_inplace": 624,
- "WalkAndRun.CrouchWalking.Crouch_Walk_Right_with_Torch_inplace": 625,
- "WalkAndRun.Walking.Elderly_Shaky_Walk_inplace": 626,
- "WalkAndRun.Running.Female_Bow_Charge_Left_Hand_inplace": 627,
- "WalkAndRun.Running.Female_Throwing_Stance_Charge_inplace": 628,
- "WalkAndRun.Walking.Flirty_Strut_inplace": 629,
- "Fighting.Transitioning.ForwardLeft_Run_Fight_inplace": 630,
- "Fighting.Transitioning.ForwardRight_Run_Fight_inplace": 631,
- "WalkAndRun.Walking.Funky_Walk_inplace": 632,
- "BodyMovements.Acting.Handbag_Walk_inplace": 635,
- "WalkAndRun.Running.Hello_Run_inplace": 636,
- "WalkAndRun.Walking.Injured_Walk_inplace": 637,
- "WalkAndRun.Walking.Injured_Walk_Backward_inplace": 638,
- "BodyMovements.Acting.Jazz_Hands_inplace": 639,
- "BodyMovements.Jumping.Jump_Over_Obstacle_inplace": 640,
- "BodyMovements.Jumping.Jump_Over_Obstacle_1_inplace": 641,
- "BodyMovements.Jumping.Jump_Over_Obstacle_2_inplace": 642,
- "WalkAndRun.Running.Jump_Run_inplace": 643,
- "WalkAndRun.Running.Lean_Forward_Sprint_inplace": 644,
- "WalkAndRun.Walking.Limping_Walk_inplace": 645,
- "WalkAndRun.Walking.Limping_Walk_1_inplace": 646,
- "WalkAndRun.Walking.Limping_Walk_2_inplace": 647,
- "WalkAndRun.Walking.Limping_Walk_3_inplace": 648,
- "Fighting.Punching.Lunge_Roundhouse_Kick_inplace": 649,
- "BodyMovements.Acting.Mummy_Stagger_inplace": 650,
- "BodyMovements.VaultingOverObstacle.Parkour_Vault_with_Roll_inplace": 651,
- "WalkAndRun.Walking.Proud_Strut_inplace": 652,
- "WalkAndRun.Walking.Red_Carpet_Walk_inplace": 653,
- "WalkAndRun.Running.Rifle_Charge_inplace": 654,
- "BodyMovements.Acting.Run_and_Leap_inplace": 656,
- "WalkAndRun.Running.run_fast_10_inplace": 657,
- "WalkAndRun.Running.run_fast_2_inplace": 658,
- "WalkAndRun.Running.run_fast_3_inplace": 659,
- "WalkAndRun.Running.run_fast_4_inplace": 660,
- "WalkAndRun.Running.run_fast_5_inplace": 661,
- "WalkAndRun.Running.run_fast_6_inplace": 662,
- "WalkAndRun.Running.run_fast_7_inplace": 663,
- "WalkAndRun.Running.run_fast_8_inplace": 664,
- "WalkAndRun.Running.run_fast_9_inplace": 665,
- "Fighting.Transitioning.Running_Reload_inplace": 666,
- "WalkAndRun.Walking.Run_to_Walk_Transition_inplace": 667,
- "WalkAndRun.Walking.Skip_Forward_inplace": 668,
- "WalkAndRun.Walking.Slow_Orc_Walk_inplace": 669,
- "Fighting.Transitioning.Slow_Walk_Reload_inplace": 670,
- "WalkAndRun.Walking.Sneaky_Walk_inplace": 671,
- "WalkAndRun.Walking.Spear_Walk_inplace": 672,
- "WalkAndRun.Running.Standard_Forward_Charge_inplace": 673,
- "WalkAndRun.Walking.Stumble_Walk_inplace": 674,
- "WalkAndRun.Walking.Stylish_Walk_inplace": 675,
- "WalkAndRun.Walking.Texting_Walk_inplace": 676,
- "WalkAndRun.Walking.Tightrope_Walk_inplace": 677,
- "WalkAndRun.Walking.Unsteady_Walk_inplace": 678,
- "WalkAndRun.Walking.Walk_Backward_inplace": 679,
- "Fighting.AttackingwithWeapon.Walk_Backward_While_Shooting_inplace": 680,
- "WalkAndRun.Walking.Walk_Backward_with_Bow_inplace": 681,
- "WalkAndRun.Walking.Walk_Backward_with_Bow_1_inplace": 682,
- "Fighting.AttackingwithWeapon.Walk_Backward_with_Bow_Aimed_inplace": 683,
- "WalkAndRun.Walking.Walk_Backward_with_Grenade_inplace": 684,
- "WalkAndRun.CrouchWalking.Walk_Backward_with_Gun_inplace": 685,
- "WalkAndRun.Walking.Walk_Backward_with_Gun_1_inplace": 686,
- "WalkAndRun.Walking.Walk_Backward_with_Sword_inplace": 687,
- "WalkAndRun.Walking.Walk_Fight_Back_inplace": 688,
- "WalkAndRun.Walking.Walk_Fight_Forward_inplace": 689,
- "Fighting.AttackingwithWeapon.Walk_Forward_While_Shooting_inplace": 690,
- "Fighting.AttackingwithWeapon.Walk_Forward_with_Bow_Aimed_inplace": 691,
- "WalkAndRun.Walking.walking_2_inplace": 692,
- "WalkAndRun.Walking.Walking_with_Phone_inplace": 693,
- "WalkAndRun.CrouchWalking.Walk_Left_with_Gun_inplace": 694,
- "WalkAndRun.Walking.Walk_with_Umbrella_inplace": 695,
- "WalkAndRun.Walking.Walk_with_Walker_Support_inplace": 696
- },
- "byName": {
- "Idle": 0,
- "Walking_Woman": 1,
- "Alert": 2,
- "Arise": 3,
- "Attack": 4,
- "BackLeft_run": 5,
- "BackRight_Run": 6,
- "BeHit_FlyUp": 7,
- "Dead": 8,
- "ForwardLeft_Run_Fight": 9,
- "ForwardRight_Run_Fight": 10,
- "Idle_02": 11,
- "Idle_03": 12,
- "Jump_Run": 13,
- "Run_02": 14,
- "Run_03": 15,
- "RunFast": 16,
- "Skill_01": 17,
- "Skill_02": 18,
- "Skill_03": 19,
- "Walk_Fight_Back": 20,
- "Walk_Fight_Forward": 21,
- "FunnyDancing_01": 22,
- "FunnyDancing_02": 23,
- "FunnyDancing_03": 24,
- "Agree_Gesture": 25,
- "Angry_Stomp": 26,
- "Big_Heart_Gesture": 27,
- "Big_Wave_Hello": 28,
- "Call_Gesture": 29,
- "Casual_Walk": 30,
- "Catching_Breath": 31,
- "Chair_Sit_Idle_F": 32,
- "Chair_Sit_Idle_M": 33,
- "Checkout_Gesture": 34,
- "Clapping_Run": 35,
- "Confused_Scratch": 36,
- "Discuss_While_Moving": 37,
- "Dozing_Elderly": 38,
- "Excited_Walk_F": 39,
- "Excited_Walk_M": 40,
- "Formal_Bow": 41,
- "Gentlemans_Bow": 42,
- "Handbag_Walk": 43,
- "Happy_jump_f": 44,
- "Indoor_Play": 45,
- "Jump_Rope": 46,
- "Listening_Gesture": 47,
- "Mirror_Viewing": 48,
- "Motivational_Cheer": 49,
- "Phone_Call_Gesture": 50,
- "Shouting_Angrily": 51,
- "Sit_to_Stand_Transition_F": 52,
- "Sit_to_Stand_Transition_M": 53,
- "Squat_Stance": 54,
- "Stage_Walk": 55,
- "Stand_and_Chat": 56,
- "Stand_to_Sit_Transition_M": 57,
- "Step_to_Sit_Transition": 58,
- "Victory_Cheer": 59,
- "Walk_to_Sit": 60,
- "happy_jump_m": 61,
- "penguin_walk": 62,
- "Arm_Circle_Shuffle": 63,
- "All_Night_Dance": 64,
- "Bass_Beats": 65,
- "Boom_Dance": 66,
- "Bubble_Dance": 67,
- "Cherish_Pop_Dance": 68,
- "Crystal_Beads": 69,
- "Cardio_Dance": 70,
- "Denim_Pop_Dance": 71,
- "Dont_You_Dare": 72,
- "Fast_Lightning": 73,
- "Gangnam_Groove": 74,
- "Indoor_Swing": 75,
- "Love_You_Pop_Dance": 76,
- "Magic_Genie": 77,
- "Not_Your_Mom": 78,
- "OMG_Groove": 79,
- "Pop_Dance_LSA2": 80,
- "Pod_Baby_Groove": 81,
- "Shake_It_Off_Dance": 82,
- "Superlove_Pop_Dance": 83,
- "You_Groove": 84,
- "Axe_Stance": 85,
- "Basic_Jump": 86,
- "Boxing_Practice": 87,
- "Chest_Pound_Taunt": 88,
- "Combat_Stance": 89,
- "Counterstrike": 90,
- "Double_Blade_Spin": 91,
- "Double_Combo_Attack": 92,
- "Dodge_and_Counter": 93,
- "Flying_Fist_Kick": 94,
- "Gun_Hold_Left_Turn": 95,
- "Kung_Fu_Punch": 96,
- "Left_Slash": 97,
- "Run_and_Shoot": 98,
- "Reaping_Swing": 99,
- "Rightward_Spin": 100,
- "Sword_Shout": 101,
- "Sword_Judgment": 102,
- "Simple_Kick": 103,
- "Side_Shot": 104,
- "Triple_Combo_Attack": 105,
- "Confident_Walk": 106,
- "Confident_Strut": 107,
- "Flirty_Strut": 108,
- "Groovy_Walk": 109,
- "Hello_Run": 110,
- "Injured_Walk": 111,
- "Monster_Walk": 112,
- "Mummy_Stagger": 113,
- "Proud_Strut": 114,
- "Quick_Walk": 115,
- "Run_to_Walk_Transition": 116,
- "Red_Carpet_Walk": 117,
- "Skip_Forward": 118,
- "Slow_Orc_Walk": 119,
- "Touch_and_Run": 120,
- "Thoughtful_Walk": 121,
- "Texting_Walk": 122,
- "Unsteady_Walk": 123,
- "Walking_with_Phone": 124,
- "Charged_Spell_Cast": 125,
- "Charged_Spell_Cast_1": 126,
- "Charged_Ground_Slam": 127,
- "Heavy_Hammer_Swing": 128,
- "mage_soell_cast": 129,
- "mage_soell_cast_1": 130,
- "mage_soell_cast_2": 131,
- "mage_soell_cast_3": 132,
- "mage_soell_cast_4": 133,
- "mage_soell_cast_5": 134,
- "mage_soell_cast_6": 135,
- "mage_soell_cast_7": 136,
- "mage_soell_cast_8": 137,
- "Block1": 138,
- "Block2": 139,
- "Block3": 140,
- "Block4": 141,
- "Block5": 142,
- "Block6": 143,
- "Block8": 144,
- "Block9": 145,
- "Block10": 146,
- "Sword_Parry": 147,
- "Sword_Parry_Backward": 148,
- "Two_Handed_Parry": 149,
- "Hit_Reaction_with_Bow": 150,
- "Sword_Parry_Backward_1": 151,
- "Sword_Parry_Backward_2": 152,
- "Sword_Parry_Backward_3": 153,
- "Sword_Parry_Backward_4": 154,
- "Sword_Parry_Backward_5": 155,
- "Stand_Dodge": 156,
- "Stand_Dodge_1": 157,
- "Roll_Dodge": 158,
- "Roll_Dodge_1": 159,
- "Roll_Dodge_2": 160,
- "Roll_Dodge_3": 161,
- "Stand_Dodge_2": 162,
- "Roll_Dodge_4": 163,
- "Stand_Dodge_3": 164,
- "Kneeling_Reload": 165,
- "Running_Reload": 166,
- "Slow_Walk_Reload": 167,
- "Prone_Reload": 168,
- "Forward_Reload_Subtle": 169,
- "Standing_Reload": 170,
- "Hit_Reaction_to_Waist": 171,
- "Electrocution_Reaction": 172,
- "Slap_Reaction": 173,
- "Face_Punch_Reaction": 174,
- "Face_Punch_Reaction_1": 175,
- "Face_Punch_Reaction_2": 176,
- "Gunshot_Reaction": 177,
- "Hit_Reaction": 178,
- "Hit_Reaction_1": 179,
- "Shot_in_the_Back_and_Fall": 180,
- "Electrocuted_Fall": 181,
- "Shot_and_Blown_Back": 182,
- "Shot_and_Fall_Backward": 183,
- "Shot_and_Fall_Forward": 184,
- "Shot_and_Slow_Fall_Backward": 185,
- "Strangled_and_Fall_Forward": 186,
- "Knock_Down": 187,
- "Fall_Dead_from_Abdominal_Injury": 188,
- "dying_backwards": 189,
- "Knock_Down_1": 190,
- "Left_Jab_from_Guard": 191,
- "Right_Jab_from_Guard": 192,
- "Left_Hook_from_Guard": 193,
- "Right_Uppercut_from_Guard": 194,
- "Right_Upper_Hook_from_Guard": 195,
- "Left_Uppercut_from_Guard": 196,
- "Left_Short_Hook_from_Guard": 197,
- "Punch_Combo": 198,
- "Weapon_Combo": 199,
- "Punch_Combo_1": 200,
- "Punch_Combo_2": 201,
- "Weapon_Combo_1": 202,
- "Punch_Combo_3": 203,
- "Punch_Combo_4": 204,
- "Punch_Combo_5": 205,
- "Spartan_Kick": 206,
- "Roundhouse_Kick": 207,
- "Lunge_Roundhouse_Kick": 208,
- "Boxing_Guard_Right_Straight_Kick": 209,
- "Boxing_Guard_Prep_Straight_Punch": 210,
- "Boxing_Guard_Step_Knee_Strike": 211,
- "Elbow_Strike": 212,
- "Leg_Sweep": 213,
- "Punch_Forward_with_Both_Fists": 214,
- "High_Kick": 215,
- "Lunge_Spin_Kick": 216,
- "Sweeping_Kick": 217,
- "Step_in_High_Kick": 218,
- "Right_Hand_Sword_Slash": 219,
- "Shield_Push_Left": 220,
- "Charged_Upward_Slash": 221,
- "Draw_and_Shoot_from_Back": 222,
- "Draw_and_Shoot_from_Back_1": 223,
- "Archery_Shot": 224,
- "Archery_Shot_1": 225,
- "Archery_Shot_2": 226,
- "Archery_Shot_3": 227,
- "Walk_Forward_with_Bow_Aimed": 228,
- "Draw_and_Shoot_from_Back_2": 229,
- "Walk_Backward_with_Bow_Aimed": 230,
- "Archery_Aim_with_Lateral_Scan": 231,
- "Cowboy_Quick_Draw_Shooting": 232,
- "Walk_Backward_While_Shooting": 233,
- "Walk_Forward_While_Shooting": 234,
- "Forward_Roll_and_Fire": 235,
- "Draw_and_Shoot_Left": 236,
- "Charged_Axe_Chop": 237,
- "Axe_Spin_Attack": 238,
- "Crouch_Pull_and_Throw": 239,
- "Thrust_Slash": 240,
- "Weapon_Combo_2": 241,
- "Charged_Slash": 242,
- "Idle_3": 243,
- "Idle_4": 244,
- "Idle_5": 245,
- "Idle_6": 246,
- "Idle_7": 247,
- "Idle_8": 248,
- "Idle_9": 249,
- "Idle_10": 250,
- "Idle_11": 251,
- "Idle_12": 252,
- "Idle_13": 253,
- "Idle_14": 254,
- "Angry_Ground_Stomp": 255,
- "Angry_Ground_Stomp_1": 256,
- "Angry_Ground_Stomp_2": 257,
- "CrouchLookAroundBow": 258,
- "Step_Forward_and_Push": 259,
- "Push_Forward_and_Stop": 260,
- "Push_and_Walk_Forward": 261,
- "Crouch_and_Push_Forward": 262,
- "Sleep_on_Desk": 263,
- "Cough_While_Sleeping": 264,
- "Groan_Holding_Stomach_in_Sleep": 265,
- "Lie_Down_Hands_Spread": 266,
- "Sleep_Normally": 267,
- "Sit_and_Doze_Off": 268,
- "sleep": 269,
- "Toss_and_Turn": 270,
- "Wake_Up_and_Look_Up": 271,
- "Lie_on_Chair_Sunbathe_and_Sleep": 272,
- "Male_Run_Forward_Pick_Up_Left": 273,
- "Female_Crouch_Pick_Up_Place_Side": 274,
- "Female_Run_Forward_Pick_Up_Right": 275,
- "Male_Bend_Over_Pick_Up": 276,
- "Female_Crouch_Pick_Fruit_Basket_Stand": 277,
- "Female_Stand_Pick_Fruit_Basket": 278,
- "Female_Crouch_Pick_Gun_Point_Forward": 279,
- "Female_Crouch_Pick_Throw_Forward": 280,
- "Female_Bend_Over_Pick_Up_Inspect": 281,
- "Female_Walk_Pick_Put_In_Pocket": 282,
- "Pull_Radish": 283,
- "Collect_Object": 284,
- "open_door": 285,
- "open_door_1": 286,
- "open_door_2": 287,
- "open_door_3": 288,
- "open_door_4": 289,
- "Wave_One_Hand": 290,
- "Wave_for_Help": 291,
- "Gesture_with_Hand_on_Gun": 292,
- "Wave_for_Help_1": 293,
- "Wave_for_Help_2": 294,
- "Wave_for_Help_3": 295,
- "Wave_for_Help_4": 296,
- "Personalized_Gesture": 297,
- "Cheer_with_Both_Hands_Up": 298,
- "Stand_Clap_and_Sit_Down": 299,
- "Sit_Cheer_with_Left_Hand": 300,
- "Cheer_with_Both_Hands_1": 301,
- "Stand_Wave_and_Sit_Down": 302,
- "Cheer_with_Both_Hands": 303,
- "Seated_Fist_Pump": 304,
- "Stand_Cheer_and_Sit_Down": 305,
- "Cheer_with_One_Hand_Up": 306,
- "Sitting_Answering_Questions": 307,
- "Talk_Passionately": 308,
- "Talk_with_Left_Hand_on_Hip": 309,
- "Talk_with_Left_Hand_Raised": 310,
- "Stand_Talking_Angry": 311,
- "Phone_Conversation": 312,
- "Talk_with_Hands_Open": 313,
- "Talk_with_Right_Hand_Open": 314,
- "Hand_on_Hip_Gesture": 315,
- "Headache_Relief": 316,
- "Shrug": 317,
- "Scheming_Hand_Rub": 318,
- "air_squat": 319,
- "bicep_curl": 320,
- "bicycle_crunch": 321,
- "circle_crunch": 322,
- "golf_drive": 323,
- "idle_to_push_up": 324,
- "jump_push_up": 325,
- "jumping_jacks": 326,
- "kettlebell_swing": 327,
- "push_up_to_idle": 328,
- "push_up": 329,
- "situps": 330,
- "Sumo_High_Pull": 331,
- "Look_Around_Dumbfounded": 333,
- "Lower_Weapon_Look_Raise": 334,
- "Axe_Breathe_and_Look_Around": 335,
- "Long_Breathe_and_Look_Around": 336,
- "Torch_Look_Around": 337,
- "Short_Breathe_and_Look_Around": 338,
- "Walking_Scan_with_Sudden_Look_Back": 339,
- "Crawl_and_Look_Back": 340,
- "Walk_Slowly_and_Look_Around": 341,
- "Stand_and_Drink": 342,
- "Sit_and_Drink": 343,
- "Stand_Up1": 344,
- "Stand_Up2": 345,
- "Stand_Up3": 346,
- "Stand_Up4": 347,
- "Stand_Up5": 348,
- "Stand_Up6": 349,
- "Stand_Up7": 350,
- "Stand_Up8": 351,
- "Stand_Up9": 352,
- "Stand_Up10": 353,
- "Sitting_Clap": 354,
- "Sit_Finger_Wag_No": 355,
- "Sit_Hands_on_Head_Lean_Back": 356,
- "Sit_Thumbs_Up_Right": 357,
- "Sit_Shout_Hands_on_Mouth": 358,
- "Look_Back_and_Sit": 359,
- "Sit_to_standTransition_Female_2": 360,
- "Sit_Dodge": 361,
- "Sit_Cross_Legged": 362,
- "Sit_Cross_Legged_on_Floor": 363,
- "Sit_on_Chair_Arms_Crossed": 364,
- "Kneel_on_One_Knee_and_Stand": 365,
- "falling_down": 366,
- "SideLying_Reach_Help": 367,
- "Angry_To_Tantrum_Sit": 368,
- "Lie_Back_Leg_Swing": 369,
- "Stand_To_Side_Lying": 370,
- "Sit_Lie_Bed": 371,
- "Prone_Reach_Help": 372,
- "Handstand_Flip": 375,
- "Punch_Pose": 376,
- "Relax_arms_then_strike_battle_pose": 377,
- "Large_step_then_high_kick": 378,
- "Side_jumps_in_horse_stance": 379,
- "Step_Right_for_Exercise": 381,
- "Jump_and_Slam_Back_Down": 382,
- "Quick_Step_and_Spin_Dodge": 384,
- "Boxing_Warmup": 385,
- "Zombie_Scream": 386,
- "Half_Squat_with_Thumb_Up": 387,
- "Show_Both_Arm_Muscles": 388,
- "Grip_and_Throw_Down": 389,
- "Stand_on_Pole_and_Balance": 390,
- "Head_Hold_in_Pain": 391,
- "Ground_Flip_and_Sweep_Up": 392,
- "baseball_pitching": 393,
- "Backflip_and_Hooks": 394,
- "Breakdance_1990": 395,
- "Burpee_Exercise": 396,
- "360_Power_Spin_Jump": 397,
- "Crouch_Charge_and_Throw": 398,
- "Step_Step_Turn_Kick": 399,
- "Sprint_Roll_and_Flip": 401,
- "Run_and_Leap": 402,
- "Victory_Fist_Pump": 403,
- "Crouch_and_Step_Back": 404,
- "Joyful_Dance_with_Hand_Sway": 405,
- "Thomas_Flair_to_Jump_Up": 406,
- "Wall_Push_Jump_and_Flip": 407,
- "Jazz_Hands": 408,
- "Finger_Wag_No": 409,
- "Kick_a_Soccer_Ball": 410,
- "Neck_Slashing_Gesture": 411,
- "victory": 412,
- "Backflip_and_Rise": 413,
- "Double_kick_forward": 414,
- "Happy_Sway_Standing": 415,
- "Hit_in_Back_While_Running": 416,
- "Hop_with_Arms_Raised": 417,
- "Jump_to_Catch_and_Fall": 419,
- "Left_Hand_Bitten_Step_Back": 420,
- "Over_Shoulder_Throw": 421,
- "Rising_Flying_Kick": 422,
- "Vault_with_Rifle": 425,
- "Roll_Behind_Cover": 426,
- "Vault_and_Land": 427,
- "Unarmed_Vault": 428,
- "Parkour_Vault": 429,
- "Parkour_Vault_with_Roll": 430,
- "Parkour_Vault_1": 431,
- "Parkour_Vault_2": 432,
- "Parkour_Vault_3": 433,
- "Fast_Ladder_Climb": 434,
- "Ladder_Climb_Finish": 435,
- "Ladder_Mount_Start": 436,
- "Slow_Ladder_Climb": 437,
- "Ladder_Climb_Loop": 438,
- "Climb_Left_with_Both_Limbs": 439,
- "Climb_Right_with_Both_Limbs": 440,
- "Climb_Stairs": 441,
- "Fast_Stair_Climb": 442,
- "climbing_up_wall": 444,
- "diagonal_wall_run": 445,
- "Hang_and_Climb_Left": 446,
- "Hang_and_Climb_Rght": 447,
- "Jump_and_Grab_Wall": 448,
- "Climb_Up_Rope": 449,
- "Wall_Flip": 450,
- "One_Arm_Handstand": 451,
- "Backflip": 452,
- "Backflip_Sweep_Kick": 453,
- "Sweep_Kick": 455,
- "Jumping_Head_Scissor_Takedown": 456,
- "Jumping_Punch": 457,
- "Unicycle_Jump_Dismount": 458,
- "Run_Jump_and_Roll": 459,
- "Jump_with_Arms_Open": 460,
- "Jump_with_Arms_and_Legs_Open": 461,
- "Backflip_Jump": 462,
- "Run_and_Jump": 463,
- "Leap_and_Punch": 464,
- "Leap_Right_and_Catch": 465,
- "Regular_Jump": 466,
- "Jump_Over_Obstacle_2": 467,
- "Back_Jump": 468,
- "Jumping_Down": 470,
- "Jump_Over_Obstacle": 471,
- "Jump_Over_Obstacle_1": 472,
- "Quad_Jump_Left": 473,
- "Quad_Jump_Up": 474,
- "Quad_Climb_Right": 475,
- "Hang_and_Push_with_Foot": 476,
- "Rope_Hang_Idle": 477,
- "Bar_Hang_Idle": 478,
- "Upside_Down_Rope_Hang": 479,
- "Upside_Down_Rope_Hang_1": 480,
- "Upside_Down_Rope_Hang_2": 481,
- "Grab_Wall_Midair_Idle": 482,
- "Slow_Bar_Hang_Left": 483,
- "Slow_Bar_Hang_Right": 484,
- "Jump_and_Hang_on_Bar": 485,
- "Wall_Support_to_Step_Down": 486,
- "Climb_Attempt_and_Fall_3": 487,
- "Climb_Attempt_and_Fall_4": 488,
- "Climb_Attempt_and_Fall_5": 489,
- "Fall_Down": 490,
- "Fall_from_Bar": 491,
- "Wall_Support_Jump_to_Ground": 492,
- "Jump_Down_from_Wall": 493,
- "Swing_on_Rope_to_Ground": 494,
- "Grab_Bar_and_Swing_Forward": 495,
- "Rope_Hang_Backflip_to_Crouch": 496,
- "climbing_down_wall": 497,
- "Climb_Attempt_and_Fall": 498,
- "Climb_Attempt_and_Fall_1": 499,
- "Climb_Attempt_and_Fall_2": 500,
- "Leap_of_Faith": 501,
- "Fall1": 502,
- "Fall2": 503,
- "Fall3": 504,
- "Fall4": 505,
- "Dive_Down_and_Land": 506,
- "Dive_Down_and_Land_1": 507,
- "Dive_Down_and_Land_2": 508,
- "Lean_Forward_Sprint": 509,
- "Standard_Forward_Charge": 510,
- "Rifle_Charge": 511,
- "Male_Head_Down_Charge": 512,
- "Female_Head_Down_Charge": 513,
- "Female_Bow_Charge_Left_Hand": 514,
- "Female_Throwing_Stance_Charge": 515,
- "slide_light": 516,
- "slide_right": 517,
- "sliding_rool": 518,
- "sliding_stumble": 519,
- "Crouch_Walk_with_Torch": 520,
- "Crouch_Walk_Left_with_Torch": 521,
- "Crouch_Walk_Right_with_Torch": 522,
- "Cautious_Crouch_Walk_Backward": 523,
- "Cautious_Crouch_Walk_Forward": 524,
- "Cautious_Crouch_Walk_Left": 525,
- "Cautious_Crouch_Walk_Right": 526,
- "Crouch_Walk_Left_with_Gun": 527,
- "Walk_Left_with_Gun": 528,
- "Walk_Backward_with_Gun": 529,
- "run_fast_3": 530,
- "Sprint_and_Sudden_Stop": 531,
- "run_fast_4": 532,
- "run_fast_5": 533,
- "run_fast_6": 534,
- "run_fast_7": 535,
- "run_fast_8": 536,
- "run_fast_9": 537,
- "run_fast_10": 538,
- "run_fast_2": 539,
- "Injured_Walk_Backward": 540,
- "Walk_Backward_with_Gun_1": 541,
- "Walk_Backward_with_Grenade": 542,
- "Step_Back": 543,
- "Walk_Backward": 544,
- "Walk_Backward_with_Bow": 545,
- "Walk_Backward_with_Sword": 546,
- "Walk_Backward_with_Bow_1": 547,
- "Walk_Backward_with_Sword_Shield": 548,
- "Crawl_Backward": 549,
- "Carry_Heavy_Cannon_Forward": 550,
- "Carry_Heavy_Object_Walk": 551,
- "Carry_Water_Bucket_Walk": 552,
- "Elderly_Shaky_Walk": 553,
- "Funky_Walk": 554,
- "Limping_Walk_1": 555,
- "Limping_Walk_2": 556,
- "Limping_Walk_3": 557,
- "Limping_Walk": 558,
- "Sneaky_Walk": 559,
- "Spear_Walk": 560,
- "Step_Hip_Hop_Dance": 561,
- "Stumble_Walk": 562,
- "Stylish_Walk": 563,
- "Tightrope_Walk": 564,
- "Walk_with_Umbrella": 565,
- "walking_2": 566,
- "Walk_with_Walker_Support": 567,
- "Swim_Idle": 568,
- "Swim_Forward": 569,
- "swimming_to_edge": 570,
- "Run_Turn_Left": 571,
- "Walk_Turn_Left": 572,
- "Rifle_Turn_Left": 573,
- "Walk_Turn_Left_with_Weapon": 574,
- "Combat_Idle_Turn_Left": 575,
- "Idle_Turn_Left": 576,
- "Idle_Step_Turn_Left": 577,
- "Idle_Torch_Turn_Left": 578,
- "Depressed_Full_Turn_Left": 579,
- "Sword_and_Shield_Alert_Turn_Left": 580,
- "Run_Sharp_Turn_Right": 581,
- "Run_Turn_Right": 582,
- "Walk_Turn_Right": 583,
- "Walk_Turn_Right_Female": 584,
- "Rifle_Aim_Turn_Right": 585,
- "Idle_Turn_Right": 586,
- "Walk_Turn_Right_Idle_Style": 587,
- "Frustrated_Turn_Right": 588,
- "Alert_Quick_Turn_Right": 589,
- "Sword_and_Shield_Alert_Turn_Right": 590,
- "Hip_Hop_Dance": 591,
- "Hip_Hop_Dance_1": 592,
- "Hip_Hop_Dance_2": 593,
- "Hip_Hop_Dance_3": 594,
- "jazz_danc": 595,
- "ymca_dance": 596,
- "Hip_Hop_Dance_4": 597,
- "kettlebell_swing_1": 598,
- "Idle_15": 599,
- "Backflip_inplace": 601,
- "Backflip_Sweep_Kick_inplace": 604,
- "Back_Jump_inplace": 605,
- "BackLeft_run_inplace": 606,
- "BackRight_Run_inplace": 607,
- "BeHit_FlyUp_inplace": 608,
- "Boxing_Practice_inplace": 609,
- "Carry_Heavy_Cannon_Forward_inplace": 610,
- "Carry_Heavy_Object_Walk_inplace": 611,
- "Carry_Water_Bucket_Walk_inplace": 612,
- "Casual_Walk_inplace": 613,
- "Cautious_Crouch_Walk_Backward_inplace": 615,
- "Cautious_Crouch_Walk_Forward_inplace": 616,
- "Cautious_Crouch_Walk_Left_inplace": 617,
- "Cautious_Crouch_Walk_Right_inplace": 618,
- "Climb_Left_with_Both_Limbs_inplace": 619,
- "Climb_Right_with_Both_Limbs_inplace": 620,
- "Confident_Strut_inplace": 621,
- "Crawl_Backward_inplace": 622,
- "Crouch_Walk_Left_with_Gun_inplace": 623,
- "Crouch_Walk_Left_with_Torch_inplace": 624,
- "Crouch_Walk_Right_with_Torch_inplace": 625,
- "Elderly_Shaky_Walk_inplace": 626,
- "Female_Bow_Charge_Left_Hand_inplace": 627,
- "Female_Throwing_Stance_Charge_inplace": 628,
- "Flirty_Strut_inplace": 629,
- "ForwardLeft_Run_Fight_inplace": 630,
- "ForwardRight_Run_Fight_inplace": 631,
- "Funky_Walk_inplace": 632,
- "Handbag_Walk_inplace": 635,
- "Hello_Run_inplace": 636,
- "Injured_Walk_inplace": 637,
- "Injured_Walk_Backward_inplace": 638,
- "Jazz_Hands_inplace": 639,
- "Jump_Over_Obstacle_inplace": 640,
- "Jump_Over_Obstacle_1_inplace": 641,
- "Jump_Over_Obstacle_2_inplace": 642,
- "Jump_Run_inplace": 643,
- "Lean_Forward_Sprint_inplace": 644,
- "Limping_Walk_inplace": 645,
- "Limping_Walk_1_inplace": 646,
- "Limping_Walk_2_inplace": 647,
- "Limping_Walk_3_inplace": 648,
- "Lunge_Roundhouse_Kick_inplace": 649,
- "Mummy_Stagger_inplace": 650,
- "Parkour_Vault_with_Roll_inplace": 651,
- "Proud_Strut_inplace": 652,
- "Red_Carpet_Walk_inplace": 653,
- "Rifle_Charge_inplace": 654,
- "Run_and_Leap_inplace": 656,
- "run_fast_10_inplace": 657,
- "run_fast_2_inplace": 658,
- "run_fast_3_inplace": 659,
- "run_fast_4_inplace": 660,
- "run_fast_5_inplace": 661,
- "run_fast_6_inplace": 662,
- "run_fast_7_inplace": 663,
- "run_fast_8_inplace": 664,
- "run_fast_9_inplace": 665,
- "Running_Reload_inplace": 666,
- "Run_to_Walk_Transition_inplace": 667,
- "Skip_Forward_inplace": 668,
- "Slow_Orc_Walk_inplace": 669,
- "Slow_Walk_Reload_inplace": 670,
- "Sneaky_Walk_inplace": 671,
- "Spear_Walk_inplace": 672,
- "Standard_Forward_Charge_inplace": 673,
- "Stumble_Walk_inplace": 674,
- "Stylish_Walk_inplace": 675,
- "Texting_Walk_inplace": 676,
- "Tightrope_Walk_inplace": 677,
- "Unsteady_Walk_inplace": 678,
- "Walk_Backward_inplace": 679,
- "Walk_Backward_While_Shooting_inplace": 680,
- "Walk_Backward_with_Bow_inplace": 681,
- "Walk_Backward_with_Bow_1_inplace": 682,
- "Walk_Backward_with_Bow_Aimed_inplace": 683,
- "Walk_Backward_with_Grenade_inplace": 684,
- "Walk_Backward_with_Gun_inplace": 685,
- "Walk_Backward_with_Gun_1_inplace": 686,
- "Walk_Backward_with_Sword_inplace": 687,
- "Walk_Fight_Back_inplace": 688,
- "Walk_Fight_Forward_inplace": 689,
- "Walk_Forward_While_Shooting_inplace": 690,
- "Walk_Forward_with_Bow_Aimed_inplace": 691,
- "walking_2_inplace": 692,
- "Walking_with_Phone_inplace": 693,
- "Walk_Left_with_Gun_inplace": 694,
- "Walk_with_Umbrella_inplace": 695,
- "Walk_with_Walker_Support_inplace": 696
- }
-}
diff --git a/packages/meshy-content-generator/lookups/animation-presets.json b/packages/meshy-content-generator/lookups/animation-presets.json
deleted file mode 100644
index 4028acf2..00000000
--- a/packages/meshy-content-generator/lookups/animation-presets.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "description": "Animation presets for different character archetypes",
- "presets": {
- "hero": {
- "description": "Full animation set for playable main characters",
- "animations": [
- "Combat_Stance",
- "RunFast",
- "Kung_Fu_Punch",
- "BeHit_FlyUp",
- "Dead",
- "Basic_Jump",
- "Dodge_and_Counter"
- ]
- },
- "enemy": {
- "description": "Standard enemy NPC animation set",
- "animations": ["Combat_Stance", "RunFast", "Double_Combo_Attack", "BeHit_FlyUp", "Dead"]
- },
- "boss": {
- "description": "Enhanced animation set for boss characters",
- "animations": [
- "Combat_Stance",
- "RunFast",
- "Double_Combo_Attack",
- "Kung_Fu_Punch",
- "BeHit_FlyUp",
- "Dead",
- "Block1"
- ]
- },
- "prop": {
- "description": "Minimal animation for animated props/hazards",
- "animations": ["Idle"]
- }
- },
- "default": "enemy"
-}
diff --git a/packages/meshy-content-generator/package.json b/packages/meshy-content-generator/package.json
deleted file mode 100644
index ce879ea1..00000000
--- a/packages/meshy-content-generator/package.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- "name": "@jbcom/agentic-meshy",
- "version": "0.1.2",
- "description": "Declarative Meshy content generation pipelines with a CLI and API.",
- "license": "MIT",
- "type": "module",
- "keywords": [
- "content-generation",
- "pipeline",
- "meshy",
- "cli",
- "asset-generation"
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/jbcom/agentic.git",
- "directory": "packages/meshy-content-generator"
- },
- "homepage": "https://agentic.coach/meshy-content-generator",
- "author": "Arcade Cabinet",
- "engines": {
- "node": ">=20.0.0"
- },
- "files": [
- "dist",
- "pipelines",
- "tasks",
- "lookups",
- "README.md",
- "CHANGELOG.md",
- "LICENSE"
- ],
- "exports": {
- ".": {
- "types": "./dist/index.d.ts",
- "import": "./dist/index.js"
- },
- "./cli": {
- "types": "./dist/cli/index.d.ts",
- "import": "./dist/cli/index.js"
- }
- },
- "bin": {
- "content-gen": "./dist/cli/index.js"
- },
- "scripts": {
- "build": "tsup",
- "check": "biome check .",
- "dev": "tsx src/api/server.ts",
- "lint": "biome check .",
- "format": "biome format . --write",
- "test": "vitest run",
- "test:unit": "vitest run",
- "test:record": "POLLY_MODE=record vitest run",
- "test:e2e": "playwright test -c e2e/playwright.config.ts",
- "test:all": "pnpm test:unit && pnpm test:e2e",
- "typecheck": "tsc -p tsconfig.json --noEmit"
- },
- "dependencies": {
- "@asteasolutions/zod-to-openapi": "^8.4.0",
- "@google/model-viewer": "^4.1.0",
- "@pollyjs/adapter-fetch": "^6.0.7",
- "@pollyjs/core": "^6.0.6",
- "@pollyjs/persister-fs": "^6.0.6",
- "@scalar/fastify-api-reference": "^1.43.17",
- "commander": "^14.0.2",
- "dotenv": "^17.2.3",
- "fastify": "^5.8.5",
- "seedrandom": "^3.0.5",
- "three": "^0.172.0",
- "zod": "^4.3.6"
- },
- "devDependencies": {
- "@biomejs/biome": "^2.3.13",
- "@playwright/test": "^1.58.0",
- "@types/node": "^25.0.10",
- "@types/seedrandom": "^3.0.8",
- "tsup": "^8.5.1",
- "tsx": "^4.21.0",
- "typescript": "^5.9.3",
- "vitest": "^4.1.0"
- }
-}
diff --git a/packages/meshy-content-generator/pipelines/definitions/brand-image.pipeline.json b/packages/meshy-content-generator/pipelines/definitions/brand-image.pipeline.json
deleted file mode 100644
index 8569f1ab..00000000
--- a/packages/meshy-content-generator/pipelines/definitions/brand-image.pipeline.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "name": "brand-image",
- "description": "Generate brand imagery from text prompts with download",
- "version": "1.0.0",
- "steps": [
- {
- "id": "generate",
- "task": "text-to-image-download"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/pipelines/definitions/character-full.pipeline.json b/packages/meshy-content-generator/pipelines/definitions/character-full.pipeline.json
deleted file mode 100644
index 040cad50..00000000
--- a/packages/meshy-content-generator/pipelines/definitions/character-full.pipeline.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "character-full",
- "description": "Full pipeline: text-to-image → text-to-3d-preview → text-to-3d-refine → rigging → animation",
- "version": "1.0.0",
- "steps": [
- {
- "id": "concept",
- "task": "text-to-image",
- "skipArtifacts": true,
- "inputs": [
- { "name": "prompt", "source": "manifest", "path": "textToImageTask.prompt" },
- { "name": "ai_model", "source": "literal", "value": "nano-banana-pro" }
- ]
- },
- {
- "id": "preview",
- "task": "text-to-3d-preview",
- "dependsOn": ["concept"],
- "skipArtifacts": true,
- "inputs": [{ "name": "prompt", "source": "manifest", "path": "textTo3DPreviewTask.prompt" }]
- },
- {
- "id": "refine",
- "task": "text-to-3d-refine",
- "dependsOn": ["preview"],
- "skipArtifacts": true,
- "inputs": [
- { "name": "preview_task_id", "source": "step", "step": "preview", "path": "taskId" },
- {
- "name": "texture_prompt",
- "source": "manifest",
- "path": "textTo3DRefineTask.texturePrompt"
- }
- ]
- },
- {
- "id": "rigging",
- "task": "rigging",
- "dependsOn": ["refine"],
- "skipArtifacts": true,
- "inputs": [{ "name": "input_task_id", "source": "step", "step": "refine", "path": "taskId" }]
- },
- {
- "id": "animations",
- "task": "animation",
- "dependsOn": ["rigging"],
- "forEach": {
- "source": "manifest",
- "path": "animationTask.animations",
- "as": "animationName"
- },
- "inputs": [{ "name": "rig_task_id", "source": "step", "step": "rigging", "path": "taskId" }]
- }
- ]
-}
diff --git a/packages/meshy-content-generator/pipelines/definitions/character.pipeline.json b/packages/meshy-content-generator/pipelines/definitions/character.pipeline.json
deleted file mode 100644
index d46ec2cd..00000000
--- a/packages/meshy-content-generator/pipelines/definitions/character.pipeline.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "name": "character",
- "description": "Character pipeline: concept → multi-image-to-3d → rigging → animations",
- "version": "2.1.0",
- "steps": [
- {
- "id": "concept",
- "task": "text-to-image",
- "inputs": [
- {
- "name": "prompt",
- "source": "manifest",
- "path": "textToImageTask.prompt"
- },
- {
- "name": "ai_model",
- "source": "literal",
- "value": "nano-banana-pro"
- },
- {
- "name": "generate_multi_view",
- "source": "manifest",
- "path": "textToImageTask.generateMultiView",
- "default": true
- },
- {
- "name": "pose_mode",
- "source": "manifest",
- "path": "textToImageTask.poseMode",
- "default": "a-pose"
- }
- ]
- },
- {
- "id": "model",
- "task": "multi-image-to-3d",
- "dependsOn": ["concept"],
- "inputs": [
- {
- "name": "image_urls",
- "source": "step",
- "step": "concept",
- "path": "images"
- }
- ]
- },
- {
- "id": "rigging",
- "task": "rigging",
- "dependsOn": ["model"],
- "inputs": [
- {
- "name": "input_task_id",
- "source": "step",
- "step": "model",
- "path": "taskId"
- },
- {
- "name": "texture_image_url",
- "source": "step",
- "step": "model",
- "path": "textureUrl"
- }
- ]
- },
- {
- "id": "animations",
- "task": "animation",
- "dependsOn": ["rigging"],
- "forEach": {
- "source": "manifest",
- "path": "animationTask.animations",
- "as": "animationName"
- },
- "inputs": [
- {
- "name": "rig_task_id",
- "source": "step",
- "step": "rigging",
- "path": "taskId"
- }
- ]
- }
- ]
-}
diff --git a/packages/meshy-content-generator/pipelines/definitions/prop.pipeline.json b/packages/meshy-content-generator/pipelines/definitions/prop.pipeline.json
deleted file mode 100644
index a6589929..00000000
--- a/packages/meshy-content-generator/pipelines/definitions/prop.pipeline.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "prop",
- "description": "Prop pipeline: concept → multi-image-to-3d (no rigging or animations)",
- "version": "1.1.0",
- "steps": [
- {
- "id": "concept",
- "task": "text-to-image",
- "inputs": [
- {
- "name": "prompt",
- "source": "manifest",
- "path": "textToImageTask.prompt"
- },
- {
- "name": "ai_model",
- "source": "literal",
- "value": "nano-banana-pro"
- },
- {
- "name": "generate_multi_view",
- "source": "manifest",
- "path": "textToImageTask.generateMultiView",
- "default": true
- },
- {
- "name": "pose_mode",
- "source": "manifest",
- "path": "textToImageTask.poseMode",
- "default": "a-pose"
- }
- ]
- },
- {
- "id": "model",
- "task": "multi-image-to-3d",
- "dependsOn": ["concept"],
- "inputs": [
- {
- "name": "image_urls",
- "source": "step",
- "step": "concept",
- "path": "images"
- },
- {
- "name": "target_polycount",
- "source": "manifest",
- "path": "multiImageTo3DTask.targetPolycount",
- "default": 10000
- },
- {
- "name": "symmetry_mode",
- "source": "manifest",
- "path": "multiImageTo3DTask.symmetryMode",
- "default": "off"
- }
- ]
- }
- ]
-}
diff --git a/packages/meshy-content-generator/project.json b/packages/meshy-content-generator/project.json
deleted file mode 100644
index 1f5af5c2..00000000
--- a/packages/meshy-content-generator/project.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "name": "meshy-content-generator",
- "tags": ["lang:ts", "scope:meshy"],
- "targets": {
- "build": {
- "command": "tsup",
- "options": { "cwd": "{projectRoot}" }
- },
- "test": {
- "command": "vitest run",
- "options": { "cwd": "{projectRoot}" }
- },
- "lint": {
- "command": "biome lint src/",
- "options": { "cwd": "{projectRoot}" }
- },
- "typecheck": {
- "command": "tsc --noEmit",
- "options": { "cwd": "{projectRoot}" }
- }
- }
-}
diff --git a/packages/meshy-content-generator/sonar-project.properties b/packages/meshy-content-generator/sonar-project.properties
deleted file mode 100644
index d996dad4..00000000
--- a/packages/meshy-content-generator/sonar-project.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-sonar.projectKey=jbcom_agentic_meshy
-sonar.organization=jbcom
-sonar.projectName=@jbcom/agentic-meshy
-
-sonar.sources=src
-sonar.tests=test
-sonar.sourceEncoding=UTF-8
-
-sonar.javascript.lcov.reportPaths=coverage/lcov.info
-sonar.coverage.exclusions=**/dist/**,**/node_modules/**,**/*.test.ts,**/*.config.ts
diff --git a/packages/meshy-content-generator/src/__tests__/api.test.ts b/packages/meshy-content-generator/src/__tests__/api.test.ts
deleted file mode 100644
index 72bd119b..00000000
--- a/packages/meshy-content-generator/src/__tests__/api.test.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import fs from "node:fs";
-import path from "node:path";
-import { fileURLToPath } from "node:url";
-import { describe, expect, it } from "vitest";
-import { buildServer } from "../api/app.js";
-
-const baseDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../");
-
-describe("API server", () => {
- it("serves OpenAPI spec", async () => {
- const app = buildServer({ cwd: baseDir });
- const response = await app.inject({ method: "GET", url: "/openapi.json" });
- expect(response.statusCode).toBe(200);
- const payload = JSON.parse(response.payload);
- expect(payload.info.title).toBe("Meshy Content Generator API");
- await app.close();
- });
-
- it("serves preview HTML", async () => {
- const tempDir = path.join(baseDir, ".tmp-preview");
- fs.mkdirSync(tempDir, { recursive: true });
- const glbPath = path.join(tempDir, "model.glb");
- fs.writeFileSync(glbPath, "glTF");
-
- const app = buildServer({ cwd: baseDir });
- const response = await app.inject({
- method: "GET",
- url: `/preview?assetDir=${encodeURIComponent(".tmp-preview")}&file=model.glb`,
- });
- expect(response.statusCode).toBe(200);
- expect(response.payload).toContain("model-viewer");
- await app.close();
- });
-
- it("serves asset files via /file", async () => {
- const tempDir = path.join(baseDir, ".tmp-preview");
- fs.mkdirSync(tempDir, { recursive: true });
- const glbPath = path.join(tempDir, "model.glb");
- fs.writeFileSync(glbPath, "glTF");
-
- const app = buildServer({ cwd: baseDir });
- const response = await app.inject({
- method: "GET",
- url: `/file?assetDir=${encodeURIComponent(".tmp-preview")}&file=model.glb`,
- });
- expect(response.statusCode).toBe(200);
- expect(response.headers["content-type"]).toContain("model/gltf-binary");
- await app.close();
- });
-
- it("blocks non-preview file types via /file", async () => {
- const tempDir = path.join(baseDir, ".tmp-preview");
- fs.mkdirSync(tempDir, { recursive: true });
- const txtPath = path.join(tempDir, "notes.txt");
- fs.writeFileSync(txtPath, "nope");
-
- const app = buildServer({ cwd: baseDir });
- const response = await app.inject({
- method: "GET",
- url: `/file?assetDir=${encodeURIComponent(".tmp-preview")}&file=notes.txt`,
- });
- expect(response.statusCode).toBe(403);
- await app.close();
- });
-});
diff --git a/packages/meshy-content-generator/src/__tests__/cli.test.ts b/packages/meshy-content-generator/src/__tests__/cli.test.ts
deleted file mode 100644
index bda41276..00000000
--- a/packages/meshy-content-generator/src/__tests__/cli.test.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { spawnSync } from "node:child_process";
-import path from "node:path";
-import { describe, expect, it } from "vitest";
-
-const root = path.resolve(process.cwd());
-
-function runCli(args: string[]) {
- const result = spawnSync("pnpm", ["exec", "tsx", "src/cli/index.ts", ...args], {
- cwd: root,
- encoding: "utf-8",
- env: {
- ...process.env,
- DOTENV_CONFIG_QUIET: "true",
- },
- });
-
- return {
- stdout: result.stdout?.trim() ?? "",
- stderr: result.stderr?.trim() ?? "",
- status: result.status ?? 0,
- };
-}
-
-describe("CLI", () => {
- it("lists pipelines and tasks", () => {
- const { stdout, status } = runCli([
- "list",
- "--pipelines",
- "pipelines/definitions",
- "--tasks",
- "tasks/definitions",
- ]);
-
- expect(status).toBe(0);
- expect(stdout).toMatchInlineSnapshot(`
- "Pipelines:\n- brand-image\n- character\n- character-full\n- prop\n\nTasks:\n- animation\n- multi-image-to-3d\n- rigging\n- text-to-3d-preview\n- text-to-3d-refine\n- text-to-image\n- text-to-image-download"
- `);
- });
-});
diff --git a/packages/meshy-content-generator/src/__tests__/definitions.test.ts b/packages/meshy-content-generator/src/__tests__/definitions.test.ts
deleted file mode 100644
index eb10b2d7..00000000
--- a/packages/meshy-content-generator/src/__tests__/definitions.test.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import path from "node:path";
-import { fileURLToPath } from "node:url";
-import { describe, expect, it } from "vitest";
-import { loadJsonDefinitions } from "../core/definitions.js";
-
-const baseDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../");
-
-describe("definitions loader", () => {
- it("loads pipeline and task definitions", async () => {
- const definitions = await loadJsonDefinitions({
- pipelinesDir: path.join(baseDir, "pipelines/definitions"),
- tasksDir: path.join(baseDir, "tasks/definitions"),
- });
-
- expect(definitions.pipelines.size).toBeGreaterThan(0);
- expect(definitions.tasks.size).toBeGreaterThan(0);
- });
-});
diff --git a/packages/meshy-content-generator/src/__tests__/openapi-contract.test.ts b/packages/meshy-content-generator/src/__tests__/openapi-contract.test.ts
deleted file mode 100644
index 7c2dc8c6..00000000
--- a/packages/meshy-content-generator/src/__tests__/openapi-contract.test.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { describe, expect, it } from "vitest";
-import { buildOpenApiSpec } from "../api/openapi.js";
-
-function getSchema(spec: ReturnType
, name: string) {
- const schemas = spec.components?.schemas ?? {};
- return schemas[name] as {
- type?: string;
- required?: string[];
- properties?: Record;
- };
-}
-
-describe("OpenAPI contracts", () => {
- it("exposes RunRequest with required fields", () => {
- const spec = buildOpenApiSpec();
- const schema = getSchema(spec, "RunRequest");
- expect(schema).toBeDefined();
- expect(schema.type).toBe("object");
- expect(schema.required).toEqual(["pipelineName", "assetDir"]);
- });
-
- it("exposes RunResponse with status enum", () => {
- const spec = buildOpenApiSpec();
- const schema = getSchema(spec, "RunResponse");
- expect(schema).toBeDefined();
- const status = schema.properties?.status as { enum?: string[] } | undefined;
- expect(status?.enum).toEqual(["QUEUED", "RUNNING", "SUCCEEDED", "FAILED"]);
- });
-});
diff --git a/packages/meshy-content-generator/src/__tests__/openapi.test.ts b/packages/meshy-content-generator/src/__tests__/openapi.test.ts
deleted file mode 100644
index 74b27363..00000000
--- a/packages/meshy-content-generator/src/__tests__/openapi.test.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { describe, expect, it } from "vitest";
-import { buildOpenApiSpec } from "../api/openapi.js";
-
-describe("OpenAPI spec", () => {
- it("includes core routes", () => {
- const spec = buildOpenApiSpec();
- expect(spec.paths["/runs"]).toBeDefined();
- expect(spec.paths["/runs/{runId}"]).toBeDefined();
- expect(spec.paths["/openapi.json"]).toBeDefined();
- expect(spec.paths["/preview"]).toBeDefined();
- });
-});
diff --git a/packages/meshy-content-generator/src/__tests__/pipeline.vcr.test.ts b/packages/meshy-content-generator/src/__tests__/pipeline.vcr.test.ts
deleted file mode 100644
index 2c9ce3a4..00000000
--- a/packages/meshy-content-generator/src/__tests__/pipeline.vcr.test.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import fs from "node:fs";
-import path from "node:path";
-import { fileURLToPath } from "node:url";
-import { describe, expect, it } from "vitest";
-import { loadJsonDefinitions } from "../core/definitions.js";
-import { PipelineRunner } from "../core/runner.js";
-import { loadAnimationIds } from "../lookups/animation-ids.js";
-import { createPolly } from "./polly.js";
-
-const baseDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../");
-const recordingsDir = path.join(baseDir, "test/__recordings__");
-const recordingFile = path.join(recordingsDir, "meshy-character-full.json");
-const mode = process.env.POLLY_MODE ?? "replay";
-
-describe("Full Meshy pipeline (VCR)", () => {
- const shouldRun = mode === "record" || fs.existsSync(recordingFile);
-
- const testFn = shouldRun ? it : it.skip;
-
- testFn(
- "runs text → image → preview → refine → rigging → animation",
- async () => {
- if (process.env.POLLY_MODE === "record" && !process.env.MESHY_API_KEY) {
- throw new Error("MESHY_API_KEY is required for recording.");
- }
-
- const polly = createPolly("meshy-character-full");
-
- const fixtureDir = path.join(baseDir, "test/fixtures/character-full");
- const tempDir = path.join(baseDir, ".tmp-full-pipeline");
- fs.rmSync(tempDir, { recursive: true, force: true });
- fs.mkdirSync(tempDir, { recursive: true });
- fs.copyFileSync(path.join(fixtureDir, "manifest.json"), path.join(tempDir, "manifest.json"));
-
- const definitions = await loadJsonDefinitions({
- pipelinesDir: path.join(baseDir, "pipelines/definitions"),
- tasksDir: path.join(baseDir, "tasks/definitions"),
- });
-
- const runner = new PipelineRunner({
- definitions,
- apiKey: process.env.MESHY_API_KEY ?? "",
- lookups: {
- ANIMATION_IDS: loadAnimationIds(),
- },
- });
-
- const manifest = await runner.run({
- pipelineName: "character-full",
- assetDir: tempDir,
- });
-
- expect(manifest.tasks?.["text-to-image"]).toBeDefined();
- expect(manifest.tasks?.["text-to-3d-preview"]).toBeDefined();
- expect(manifest.tasks?.["text-to-3d-refine"]).toBeDefined();
- expect(manifest.tasks?.rigging).toBeDefined();
- expect(manifest.tasks?.animation).toBeDefined();
-
- await polly.stop();
- fs.rmSync(tempDir, { recursive: true, force: true });
- },
- 1_800_000,
- );
-});
diff --git a/packages/meshy-content-generator/src/__tests__/polly.ts b/packages/meshy-content-generator/src/__tests__/polly.ts
deleted file mode 100644
index 05e83c50..00000000
--- a/packages/meshy-content-generator/src/__tests__/polly.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import path from "node:path";
-import FetchAdapter from "@pollyjs/adapter-fetch";
-import type { MODE } from "@pollyjs/core";
-import { Polly } from "@pollyjs/core";
-import FSPersister from "@pollyjs/persister-fs";
-
-Polly.register(FetchAdapter);
-Polly.register(FSPersister);
-
-export function createPolly(recordingName: string) {
- const recordingsDir = path.resolve(process.cwd(), "test/__recordings__");
- const mode = (process.env.POLLY_MODE ?? "replay") as MODE;
-
- const polly = new Polly(recordingName, {
- adapters: ["fetch"],
- persister: "fs",
- mode,
- logLevel: "silent",
- recordIfMissing: mode === "record",
- matchRequestsBy: {
- headers: {
- exclude: ["authorization"],
- },
- },
- persisterOptions: {
- fs: {
- recordingsDir,
- },
- },
- });
-
- polly.server.any().on("beforePersist", (_, recording) => {
- const entries = Array.isArray(recording.entries)
- ? recording.entries
- : ((recording as { log?: { entries?: [] } }).log?.entries ?? []);
- for (const entry of entries) {
- if (entry.request.headers?.authorization) {
- entry.request.headers.authorization = "[REDACTED]";
- }
- }
- });
-
- return polly;
-}
diff --git a/packages/meshy-content-generator/src/__tests__/runner.test.ts b/packages/meshy-content-generator/src/__tests__/runner.test.ts
deleted file mode 100644
index 7e165ad1..00000000
--- a/packages/meshy-content-generator/src/__tests__/runner.test.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import path from "node:path";
-import { fileURLToPath } from "node:url";
-import { describe, expect, it, vi } from "vitest";
-import { loadJsonDefinitions } from "../core/definitions.js";
-import { PipelineRunner } from "../core/runner.js";
-import { loadAnimationIds } from "../lookups/animation-ids.js";
-import type { TaskResult } from "../meshy/meshy-client.js";
-
-const baseDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../");
-
-class FakeMeshyClient {
- private lastPath = "";
-
- async post(pathValue: string): Promise {
- this.lastPath = pathValue;
- const response = { result: "task-123" };
- return response as T;
- }
-
- async streamUntilComplete(): Promise> {
- if (this.lastPath.includes("text-to-image")) {
- return {
- id: "task-123",
- status: "SUCCEEDED",
- progress: 100,
- result: {
- result: {
- image_urls: ["https://example.com/image1.png", "https://example.com/image2.png"],
- },
- } as T,
- };
- }
-
- return {
- id: "task-123",
- status: "SUCCEEDED",
- progress: 100,
- result: {
- result: {
- model_urls: { glb: "https://example.com/model.glb" },
- texture_urls: [{ base_color: "https://example.com/tex.png" }],
- },
- } as T,
- };
- }
-}
-
-describe("PipelineRunner", () => {
- it("executes a pipeline step and maps outputs", async () => {
- vi.stubGlobal(
- "fetch",
- vi.fn(async () => ({ ok: true, body: ReadableStream.from(["data"]) })),
- );
-
- const definitions = await loadJsonDefinitions({
- pipelinesDir: path.join(baseDir, "pipelines/definitions"),
- tasksDir: path.join(baseDir, "tasks/definitions"),
- });
-
- const runner = new PipelineRunner({
- definitions,
- apiKey: "test",
- client: new FakeMeshyClient() as unknown as never,
- lookups: {
- ANIMATION_IDS: loadAnimationIds(),
- },
- logger: () => { /* noop logger for tests */ },
- });
-
- const tempDir = path.join(baseDir, ".tmp-test");
- await import("node:fs").then((fs) => fs.mkdirSync(tempDir, { recursive: true }));
-
- const manifestPath = path.join(tempDir, "manifest.json");
- await import("node:fs").then((fs) =>
- fs.writeFileSync(
- manifestPath,
- JSON.stringify({
- id: "hero",
- name: "Hero",
- type: "prop",
- textToImageTask: { prompt: "Test" },
- }),
- ),
- );
-
- const result = await runner.run({
- pipelineName: "prop",
- assetDir: tempDir,
- });
-
- expect(result.tasks?.["multi-image-to-3d"]).toBeDefined();
- vi.unstubAllGlobals();
- });
-});
diff --git a/packages/meshy-content-generator/src/__tests__/validator.test.ts b/packages/meshy-content-generator/src/__tests__/validator.test.ts
deleted file mode 100644
index bc807998..00000000
--- a/packages/meshy-content-generator/src/__tests__/validator.test.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import path from "node:path";
-import { describe, expect, it } from "vitest";
-import { loadJsonDefinitions } from "../core/definitions.js";
-import { validateManifestAndPipeline } from "../core/validator.js";
-import { loadAnimationIds } from "../lookups/animation-ids.js";
-import { readJson } from "../utils/json.js";
-
-const baseDir = process.cwd();
-const manifestPath = path.join(baseDir, "test/fixtures/character-full/manifest.json");
-
-describe("validateManifestAndPipeline", () => {
- it("validates the sample character pipeline manifest", async () => {
- const definitions = await loadJsonDefinitions({
- pipelinesDir: path.join(baseDir, "pipelines/definitions"),
- tasksDir: path.join(baseDir, "tasks/definitions"),
- });
- const manifest = readJson(manifestPath);
-
- const result = validateManifestAndPipeline({
- definitions,
- pipelineName: "character-full",
- manifest,
- lookups: {
- ANIMATION_IDS: loadAnimationIds(),
- },
- });
-
- expect(result.errors).toEqual([]);
- });
-
- it("fails when manifest schema is invalid", async () => {
- const definitions = await loadJsonDefinitions({
- pipelinesDir: path.join(baseDir, "pipelines/definitions"),
- tasksDir: path.join(baseDir, "tasks/definitions"),
- });
- const manifest = readJson(manifestPath);
- delete (manifest as { id?: string }).id;
-
- const result = validateManifestAndPipeline({
- definitions,
- pipelineName: "character-full",
- manifest,
- });
-
- expect(result.errors.length).toBeGreaterThan(0);
- });
-
- it("fails when required manifest inputs are missing", async () => {
- const definitions = await loadJsonDefinitions({
- pipelinesDir: path.join(baseDir, "pipelines/definitions"),
- tasksDir: path.join(baseDir, "tasks/definitions"),
- });
- const manifest = readJson(manifestPath);
- delete (manifest as { textTo3DPreviewTask?: { prompt?: string } }).textTo3DPreviewTask;
-
- const result = validateManifestAndPipeline({
- definitions,
- pipelineName: "character-full",
- manifest,
- });
-
- expect(result.errors).toContain(
- "Missing required input 'prompt' for step 'preview' (task 'text-to-3d-preview').",
- );
- });
-});
diff --git a/packages/meshy-content-generator/src/api/app.ts b/packages/meshy-content-generator/src/api/app.ts
deleted file mode 100644
index 062b1fa0..00000000
--- a/packages/meshy-content-generator/src/api/app.ts
+++ /dev/null
@@ -1,278 +0,0 @@
-import crypto from "node:crypto";
-import fs from "node:fs";
-import path from "node:path";
-import scalarFastifyApiReference from "@scalar/fastify-api-reference";
-import Fastify from "fastify";
-import { loadJsonDefinitions } from "../core/definitions.js";
-import { PipelineRunner } from "../core/runner.js";
-import { loadAnimationIds } from "../lookups/animation-ids.js";
-import { buildOpenApiSpec, RunRequestSchema } from "./openapi.js";
-
-/**
- * Build the Fastify server for the content generator API + preview.
- *
- * @param options - Server options (defaults to process.cwd()).
- */
-export function buildServer(options?: { cwd?: string }) {
- const app = Fastify({ logger: true });
- const runs = new Map<
- string,
- { status: "QUEUED" | "RUNNING" | "SUCCEEDED" | "FAILED"; manifest?: unknown; error?: string }
- >();
-
- const cwd = options?.cwd ?? process.cwd();
-
- const openapi = buildOpenApiSpec();
-
- app.get("/openapi.json", async (_request, reply) => {
- reply.send(openapi);
- });
-
- app.register(scalarFastifyApiReference, {
- routePrefix: "/api",
- logLevel: "silent",
- configuration: {
- content: openapi,
- theme: "purple",
- customCss: `
- :root {
- --scalar-color-1: #f3f4f6;
- --scalar-color-2: #d9dbe1;
- --scalar-color-3: #b3b8c5;
- --scalar-color-accent: #8b5cf6;
- --scalar-color-accent-2: #a78bfa;
- --scalar-background-1: #0b0b12;
- --scalar-background-2: #12121c;
- --scalar-background-3: #171726;
- font-family: "Instrument Sans", "Inter", system-ui, -apple-system, sans-serif;
- }
- `,
- },
- });
-
- app.post("/runs", async (request, reply) => {
- const parseResult = RunRequestSchema.safeParse(request.body);
- if (!parseResult.success) {
- reply.status(400).send({ error: parseResult.error.message });
- return;
- }
-
- const { pipelineName, assetDir, step, wait } = parseResult.data;
- const runId = crypto.randomUUID();
- runs.set(runId, { status: "QUEUED" });
-
- const absoluteAssetDir = path.resolve(cwd, assetDir);
- if (!absoluteAssetDir.startsWith(cwd + path.sep)) {
- reply
- .status(400)
- .send({ error: "Asset directory must be within the current working directory." });
- return;
- }
-
- const apiKey = process.env.MESHY_API_KEY;
- if (!apiKey) {
- reply.status(400).send({ error: "MESHY_API_KEY is required." });
- return;
- }
-
- const runner = new PipelineRunner({
- definitions: await loadJsonDefinitions({
- pipelinesDir: path.resolve(cwd, "pipelines/definitions"),
- tasksDir: path.resolve(cwd, "tasks/definitions"),
- }),
- apiKey,
- lookups: {
- ANIMATION_IDS: loadAnimationIds(),
- },
- });
-
- const runPromise = (async () => {
- runs.set(runId, { status: "RUNNING" });
- try {
- const manifest = await runner.run({
- pipelineName,
- assetDir: absoluteAssetDir,
- ...(step !== undefined ? { step } : {}),
- });
- runs.set(runId, { status: "SUCCEEDED", manifest });
- } catch (error) {
- runs.set(runId, {
- status: "FAILED",
- error: error instanceof Error ? error.message : String(error),
- });
- }
- })();
-
- if (wait) {
- await runPromise;
- }
-
- const record = runs.get(runId);
- reply.send({
- runId,
- status: record?.status ?? "QUEUED",
- manifest: record?.manifest,
- error: record?.error,
- });
- });
-
- app.get("/runs/:runId", async (request, reply) => {
- const runId = (request.params as { runId: string }).runId;
- const record = runs.get(runId);
- if (!record) {
- reply.status(404).send({ error: "Run not found." });
- return;
- }
- reply.send({ runId, status: record.status, manifest: record.manifest, error: record.error });
- });
-
- app.get("/preview", async (request, reply) => {
- const { assetDir, file } = request.query as { assetDir?: string; file?: string };
- if (!assetDir || !file) {
- reply.status(400).send("Missing assetDir or file query parameters.");
- return;
- }
-
- const absoluteAssetDir = path.resolve(cwd, assetDir);
- const absoluteFile = path.resolve(absoluteAssetDir, file);
- if (!absoluteFile.startsWith(cwd + path.sep)) {
- reply.status(400).send("Invalid asset path.");
- return;
- }
-
- if (!fs.existsSync(absoluteFile)) {
- reply.status(404).send("File not found.");
- return;
- }
-
- const modelUrl = `/file?assetDir=${encodeURIComponent(assetDir)}&file=${encodeURIComponent(
- file,
- )}`;
-
- const html = `
-
-
-
-
- Meshy Preview
-
-
-
-
-
-
- Meshy Preview
- •
- ${path.basename(file)}
-
-
-
-
-`;
-
- reply.type("text/html").send(html);
- });
-
- app.get("/file", async (request, reply) => {
- const { assetDir, file } = request.query as { assetDir?: string; file?: string };
- if (!assetDir || !file) {
- reply.status(400).send("Missing assetDir or file query parameters.");
- return;
- }
-
- const absoluteAssetDir = path.resolve(cwd, assetDir);
- const absoluteFile = path.resolve(absoluteAssetDir, file);
- if (!absoluteFile.startsWith(cwd + path.sep)) {
- reply.status(400).send("Invalid asset path.");
- return;
- }
-
- if (!fs.existsSync(absoluteFile)) {
- reply.status(404).send("File not found.");
- return;
- }
-
- const ext = path.extname(absoluteFile).toLowerCase();
- const allowedTypes: Record = {
- ".glb": "model/gltf-binary",
- ".gltf": "model/gltf+json",
- ".png": "image/png",
- ".jpg": "image/jpeg",
- ".jpeg": "image/jpeg",
- };
-
- const contentType = allowedTypes[ext];
- if (!contentType) {
- reply.status(403).send("File type not allowed.");
- return;
- }
-
- reply.type(contentType);
- reply.send(fs.createReadStream(absoluteFile));
- });
-
- app.get("/vendor/model-viewer.min.js", async (_request, reply) => {
- const vendorPath = path.resolve(
- cwd,
- "node_modules/@google/model-viewer/dist/model-viewer.min.js",
- );
- if (!fs.existsSync(vendorPath)) {
- reply.status(404).send("model-viewer asset not found.");
- return;
- }
- reply.type("text/javascript");
- reply.send(fs.createReadStream(vendorPath));
- });
-
- return app;
-}
diff --git a/packages/meshy-content-generator/src/api/openapi.ts b/packages/meshy-content-generator/src/api/openapi.ts
deleted file mode 100644
index 2da767b7..00000000
--- a/packages/meshy-content-generator/src/api/openapi.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-import {
- extendZodWithOpenApi,
- OpenAPIRegistry,
- OpenApiGeneratorV3,
-} from "@asteasolutions/zod-to-openapi";
-import { z } from "zod";
-import { AssetManifestSchema } from "../schemas/manifest.js";
-
-extendZodWithOpenApi(z);
-
-export const RunRequestSchema = z.object({
- pipelineName: z.string(),
- assetDir: z.string(),
- step: z.string().optional(),
- wait: z.boolean().optional(),
-});
-
-export const RunStatusSchema = z.enum(["QUEUED", "RUNNING", "SUCCEEDED", "FAILED"]);
-
-export const RunResponseSchema = z.object({
- runId: z.string(),
- status: RunStatusSchema,
- manifest: AssetManifestSchema.optional(),
- error: z.string().optional(),
-});
-
-export const RunRecordSchema = z.object({
- runId: z.string(),
- status: RunStatusSchema,
- manifest: AssetManifestSchema.optional(),
- error: z.string().optional(),
-});
-
-/**
- * Build the OpenAPI document describing the Meshy content generation API.
- */
-export function buildOpenApiSpec(): ReturnType["generateDocument"]> {
- const registry = new OpenAPIRegistry();
-
- registry.register("RunRequest", RunRequestSchema);
- registry.register("RunResponse", RunResponseSchema);
- registry.register("RunRecord", RunRecordSchema);
-
- registry.registerPath({
- method: "post",
- path: "/runs",
- description: "Start a Meshy pipeline run.",
- request: {
- body: {
- content: {
- "application/json": { schema: RunRequestSchema },
- },
- },
- },
- responses: {
- 200: {
- description: "Run accepted",
- content: {
- "application/json": { schema: RunResponseSchema },
- },
- },
- },
- });
-
- registry.registerPath({
- method: "get",
- path: "/runs/{runId}",
- description: "Fetch run status and results.",
- request: {
- params: z.object({ runId: z.string() }),
- },
- responses: {
- 200: {
- description: "Run status",
- content: {
- "application/json": { schema: RunRecordSchema },
- },
- },
- 404: {
- description: "Run not found",
- },
- },
- });
-
- registry.registerPath({
- method: "get",
- path: "/openapi.json",
- description: "OpenAPI spec for the Meshy content generation API.",
- responses: {
- 200: {
- description: "OpenAPI spec",
- },
- },
- });
-
- registry.registerPath({
- method: "get",
- path: "/preview",
- description: "Preview a generated GLB using a lightweight viewer.",
- request: {
- query: z.object({
- assetDir: z.string(),
- file: z.string(),
- }),
- },
- responses: {
- 200: {
- description: "HTML preview",
- },
- },
- });
-
- registry.registerPath({
- method: "get",
- path: "/file",
- description: "Serve a file within an asset directory for previewing.",
- request: {
- query: z.object({
- assetDir: z.string(),
- file: z.string(),
- }),
- },
- responses: {
- 200: {
- description: "Binary asset file",
- },
- 404: {
- description: "File not found",
- },
- },
- });
-
- const generator = new OpenApiGeneratorV3(registry.definitions);
-
- return generator.generateDocument({
- openapi: "3.0.3",
- info: {
- title: "Meshy Content Generator API",
- version: "0.1.0",
- description: "API for running declarative Meshy content pipelines.",
- },
- });
-}
diff --git a/packages/meshy-content-generator/src/api/server.ts b/packages/meshy-content-generator/src/api/server.ts
deleted file mode 100644
index 3498f97d..00000000
--- a/packages/meshy-content-generator/src/api/server.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { buildServer } from "./app.js";
-
-const port = Number(process.env.PORT ?? 5177);
-
-const app = buildServer();
-app.listen({ port, host: "0.0.0.0" });
diff --git a/packages/meshy-content-generator/src/cli/index.ts b/packages/meshy-content-generator/src/cli/index.ts
deleted file mode 100644
index 578bb3ab..00000000
--- a/packages/meshy-content-generator/src/cli/index.ts
+++ /dev/null
@@ -1,161 +0,0 @@
-import path from "node:path";
-import { Command } from "commander";
-import dotenv from "dotenv";
-import { loadJsonDefinitions } from "../core/definitions.js";
-import { PipelineRunner } from "../core/runner.js";
-import { validateManifestAndPipeline } from "../core/validator.js";
-import { loadAnimationIds } from "../lookups/animation-ids.js";
-import { readJson } from "../utils/json.js";
-
-const program = new Command();
-
-dotenv.config();
-
-program
- .name("content-gen")
- .description("Declarative content generation pipelines")
- .version("0.1.0");
-
-function resolveDir(input: string | undefined, fallback: string): string {
- if (input) return path.resolve(process.cwd(), input);
- return path.resolve(process.cwd(), fallback);
-}
-
-async function buildRunner(options: {
- pipelines: string;
- tasks: string;
- meshyApiKey?: string;
-}): Promise {
- const definitions = await loadJsonDefinitions({
- pipelinesDir: options.pipelines,
- tasksDir: options.tasks,
- });
-
- const apiKey = options.meshyApiKey ?? process.env.MESHY_API_KEY;
- if (!apiKey) {
- throw new Error("MESHY_API_KEY is required.");
- }
-
- return new PipelineRunner({
- definitions,
- apiKey,
- lookups: {
- ANIMATION_IDS: loadAnimationIds(),
- },
- });
-}
-
-program
- .command("list")
- .description("List available pipelines and tasks")
- .option("--pipelines ", "Pipelines definitions directory", "pipelines/definitions")
- .option("--tasks ", "Task definitions directory", "tasks/definitions")
- .action(async (opts) => {
- const pipelinesDir = resolveDir(opts.pipelines, "pipelines/definitions");
- const tasksDir = resolveDir(opts.tasks, "tasks/definitions");
- const definitions = await loadJsonDefinitions({ pipelinesDir, tasksDir });
-
- console.log("\nPipelines:");
- const pipelineList = Array.from(definitions.pipelines.values()).sort((a, b) =>
- a.name.localeCompare(b.name),
- );
- for (const pipeline of pipelineList) {
- console.log(`- ${pipeline.name}`);
- }
-
- console.log("\nTasks:");
- const taskList = Array.from(definitions.tasks.values()).sort((a, b) =>
- a.id.localeCompare(b.id),
- );
- for (const task of taskList) {
- console.log(`- ${task.id}`);
- }
- });
-
-program
- .command("validate")
- .description("Validate a manifest against pipeline/task definitions")
- .argument("", "Asset directory containing manifest.json")
- .option("--pipelines ", "Pipelines definitions directory", "pipelines/definitions")
- .option("--tasks ", "Task definitions directory", "tasks/definitions")
- .option("--pipeline ", "Pipeline name to validate")
- .action(async (assetDir, opts) => {
- const pipelinesDir = resolveDir(opts.pipelines, "pipelines/definitions");
- const tasksDir = resolveDir(opts.tasks, "tasks/definitions");
- const definitions = await loadJsonDefinitions({ pipelinesDir, tasksDir });
-
- if (opts.pipeline && !definitions.pipelines.has(opts.pipeline)) {
- throw new Error(`Pipeline not found: ${opts.pipeline}`);
- }
-
- const manifestPath = path.join(path.resolve(process.cwd(), assetDir), "manifest.json");
- const exists = await import("node:fs").then((fs) => fs.existsSync(manifestPath));
- if (!exists) {
- throw new Error(`manifest.json not found at ${manifestPath}`);
- }
-
- const manifest = readJson(manifestPath);
- const pipelineNames = Array.from(definitions.pipelines.keys());
- const pipelineName = opts.pipeline ?? pipelineNames[0];
- if (!pipelineName) {
- throw new Error("No pipeline definitions found to validate.");
- }
- if (!opts.pipeline && pipelineNames.length > 1) {
- console.warn(
- `No pipeline specified; defaulting to '${pipelineName}'. Use --pipeline to choose another.`,
- );
- }
-
- const result = validateManifestAndPipeline({
- definitions,
- pipelineName,
- manifest,
- lookups: {
- ANIMATION_IDS: loadAnimationIds(),
- },
- });
-
- if (result.warnings.length > 0) {
- console.warn("Validation warnings:");
- for (const warning of result.warnings) {
- console.warn(`- ${warning}`);
- }
- }
-
- if (result.errors.length > 0) {
- const message = ["Validation failed:", ...result.errors.map((error) => `- ${error}`)].join(
- "\n",
- );
- throw new Error(message);
- }
-
- console.log("Manifest + definitions validated.");
- });
-
-program
- .command("run")
- .description("Run a pipeline against an asset manifest")
- .argument("", "Pipeline name")
- .argument("", "Asset directory containing manifest.json")
- .option("--pipelines ", "Pipelines definitions directory", "pipelines/definitions")
- .option("--tasks ", "Task definitions directory", "tasks/definitions")
- .option("--step ", "Optional step id to run")
- .option("--meshy-api-key ", "Meshy API key (overrides env)")
- .action(async (pipelineName, assetDir, opts) => {
- const pipelinesDir = resolveDir(opts.pipelines, "pipelines/definitions");
- const tasksDir = resolveDir(opts.tasks, "tasks/definitions");
-
- const runner = await buildRunner({
- pipelines: pipelinesDir,
- tasks: tasksDir,
- meshyApiKey: opts.meshyApiKey,
- });
-
- await runner.run({
- pipelineName,
- assetDir: path.resolve(process.cwd(), assetDir),
- step: opts.step,
- });
- });
-
-program.parse();
diff --git a/packages/meshy-content-generator/src/content.config.ts b/packages/meshy-content-generator/src/content.config.ts
deleted file mode 100644
index 7fbcf2c3..00000000
--- a/packages/meshy-content-generator/src/content.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { defineCollection } from "astro:content";
-import { docsLoader } from "@astrojs/starlight/loaders";
-import { docsSchema } from "@astrojs/starlight/schema";
-
-export const collections = {
- docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
-};
diff --git a/packages/meshy-content-generator/src/content/docs/api.mdx b/packages/meshy-content-generator/src/content/docs/api.mdx
deleted file mode 100644
index f575db3d..00000000
--- a/packages/meshy-content-generator/src/content/docs/api.mdx
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: API Server
----
-
-The API server exposes pipeline execution, run status, and an OpenAPI spec.
-
-## Run the server
-
-```bash
-pnpm dev
-```
-
-Default endpoints:
-
-- API reference: `http://localhost:5177/api`
-- OpenAPI JSON: `http://localhost:5177/openapi.json`
-- File proxy: `http://localhost:5177/file?assetDir=...&file=...`
-
-## Run a pipeline
-
-```bash
-curl -X POST http://localhost:5177/runs \
- -H 'content-type: application/json' \
- -d '{
- "pipelineName": "character",
- "assetDir": "./assets/characters/hero",
- "wait": true
- }'
-```
-
-## Check run status
-
-```bash
-curl http://localhost:5177/runs/
-```
-
-## Environment
-
-```bash
-MESHY_API_KEY=your_api_key
-```
-
-The server validates input with Zod and publishes the same schema in the OpenAPI output.
diff --git a/packages/meshy-content-generator/src/content/docs/ci-setup.mdx b/packages/meshy-content-generator/src/content/docs/ci-setup.mdx
deleted file mode 100644
index 53a74938..00000000
--- a/packages/meshy-content-generator/src/content/docs/ci-setup.mdx
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: CI Setup
----
-
-Use VCR recording to make Meshy calls deterministic in CI.
-
-## Record once
-
-```bash
-POLLY_MODE=record pnpm test:unit
-```
-
-This writes recordings to `test/__recordings__`. Commit them so CI can replay.
-
-## Replay in CI
-
-```bash
-POLLY_MODE=replay pnpm test:unit
-```
-
-## Suggested CI steps
-
-```bash
-pnpm install
-pnpm check
-pnpm test
-pnpm test:e2e
-pnpm build
-```
diff --git a/packages/meshy-content-generator/src/content/docs/cli.mdx b/packages/meshy-content-generator/src/content/docs/cli.mdx
deleted file mode 100644
index 2e6ccaf8..00000000
--- a/packages/meshy-content-generator/src/content/docs/cli.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: CLI
----
-
-## Commands
-
-### list
-
-```bash
-content-gen list --pipelines ./pipelines/definitions --tasks ./tasks/definitions
-```
-
-### validate
-
-```bash
-content-gen validate ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
-
-Validation checks:
-
-- Manifest schema (required fields and types).
-- Pipeline/task references and step dependencies.
-- Manifest input bindings where possible (env/lookup/manifest/literal).
-
-### run
-
-```bash
-content-gen run character ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
diff --git a/packages/meshy-content-generator/src/content/docs/getting-started.mdx b/packages/meshy-content-generator/src/content/docs/getting-started.mdx
deleted file mode 100644
index 6148a327..00000000
--- a/packages/meshy-content-generator/src/content/docs/getting-started.mdx
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: Getting Started
----
-
-## Install
-
-```bash
-pnpm add @jbcom/agentic-meshy
-```
-
-## Environment
-
-```bash
-MESHY_API_KEY=your_api_key
-```
-
-## Run a pipeline
-
-```bash
-content-gen run character ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
-
-## Start the API + preview server
-
-```bash
-pnpm dev
-```
-
-## Use the API
-
-```ts
-import {
- PipelineRunner,
- loadJsonDefinitions,
-} from "@jbcom/agentic-meshy";
-
-const definitions = await loadJsonDefinitions({
- pipelinesDir: "./pipelines/definitions",
- tasksDir: "./tasks/definitions",
-});
-
-const runner = new PipelineRunner({
- definitions,
- apiKey: process.env.MESHY_API_KEY!,
-});
-
-await runner.run({
- pipelineName: "character",
- assetDir: "./assets/characters/hero",
-});
-```
diff --git a/packages/meshy-content-generator/src/content/docs/index.mdx b/packages/meshy-content-generator/src/content/docs/index.mdx
deleted file mode 100644
index 0df619db..00000000
--- a/packages/meshy-content-generator/src/content/docs/index.mdx
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Overview
----
-
-# meshy-content-generator
-
-A declarative Meshy content-generation pipeline engine with a CLI and API. Pipelines and tasks are defined as JSON and optimized for Meshy endpoints.
-
-## Key ideas
-
-- Define **pipelines** and **tasks** as JSON.
-- Provide **manifests** per asset to supply prompts/config.
-- Run from CLI, API server, or embed as a library.
-
-## Use cases
-
-- Generate 3D characters/props from structured manifests
-- Orchestrate multi‑step AI workflows
-- Standardize build‑time content pipelines
-
-Explore the full examples in the [Use Cases](/use-cases) section.
-
-For operating guidance, see [Meshy Ops](/mesh-ops), [Pricing & Credits](/pricing), and [Troubleshooting](/troubleshooting).
diff --git a/packages/meshy-content-generator/src/content/docs/manifest.mdx b/packages/meshy-content-generator/src/content/docs/manifest.mdx
deleted file mode 100644
index a09b8774..00000000
--- a/packages/meshy-content-generator/src/content/docs/manifest.mdx
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Manifests
----
-
-Each asset directory contains a `manifest.json`. The manifest feeds input values into tasks and stores task state.
-
-Example:
-
-```json
-{
- "id": "hero",
- "name": "Hero",
- "type": "character",
- "textToImageTask": {
- "prompt": "Anime hero in a rooftop setting"
- },
- "multiImageTo3DTask": {
- "texturePrompt": "cel-shaded materials"
- },
- "animationTask": {
- "animations": ["WalkAndRun.Walking.Casual_Walk"]
- }
-}
-```
diff --git a/packages/meshy-content-generator/src/content/docs/mesh-ops.mdx b/packages/meshy-content-generator/src/content/docs/mesh-ops.mdx
deleted file mode 100644
index 43fdbe75..00000000
--- a/packages/meshy-content-generator/src/content/docs/mesh-ops.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: Meshy Ops
----
-
-## Cost & rate‑limit guidance
-
-Meshy requests can be credit‑ and time‑intensive. Recommended practices:
-
-- **Batch by asset type** (characters vs props) to reduce pipeline churn.
-- **Record VCR fixtures** for CI to avoid burning credits on tests.
-- **Use preview → refine** intentionally; refine tasks are the most expensive.
-- **Throttle parallel runs** if you are seeing rate‑limit errors.
-
-## When to use each pipeline
-
-- `character-full`: full production asset pipeline (text → image → preview → refine → rig → animation)
-- `character`: reduced flow when you want faster iteration
-- `prop`: fast prop generation (text → 3D)
-
-## Suggested asset folder layout
-
-```text
-assets/
-├── characters/
-│ └── hero/
-│ └── manifest.json
-└── props/
- └── katana/
- └── manifest.json
-```
-
-## Recording VCR fixtures
-
-```bash
-POLLY_MODE=record pnpm test:unit
-```
-
-Commit the recordings under `test/__recordings__` so CI can replay.
diff --git a/packages/meshy-content-generator/src/content/docs/meshy-api.mdx b/packages/meshy-content-generator/src/content/docs/meshy-api.mdx
deleted file mode 100644
index 5f4f4624..00000000
--- a/packages/meshy-content-generator/src/content/docs/meshy-api.mdx
+++ /dev/null
@@ -1,386 +0,0 @@
----
-title: Meshy API
----
-
-# Meshy API Reference
-
-Complete API documentation for all Meshy endpoints used in the content-gen pipeline.
-
-**Base URL:** `https://api.meshy.ai/openapi`
-
-**Authentication:** `Authorization: Bearer ${YOUR_API_KEY}`
-
----
-
-## Text-to-Image API
-
-Generate concept images from text prompts.
-
-### Create Task
-`POST /v1/text-to-image`
-
-**Required Parameters:**
-| Name | Type | Description |
-|------|------|-------------|
-| `ai_model` | string | `nano-banana` or `nano-banana-pro` |
-| `prompt` | string | Text description of desired image |
-
-**Optional Parameters:**
-| Name | Type | Default | Description |
-|------|------|---------|-------------|
-| `generate_multi_view` | boolean | false | Produces 3 multi-angle views when true |
-| `pose_mode` | string | "" | `a-pose`, `t-pose`, or empty |
-| `aspect_ratio` | string | `1:1` | `1:1`, `16:9`, `9:16`, `4:3`, `3:4` |
-
-**Response:**
-```json
-{ "result": "task-id" }
-```
-
-**Task Object (on completion):**
-```json
-{
- "id": "...",
- "type": "text-to-image",
- "status": "SUCCEEDED",
- "image_urls": ["url1", "url2", "url3"], // 1 or 3 URLs
- "progress": 100
-}
-```
-
-### Other Endpoints
-- `GET /v1/text-to-image/:id` - Retrieve task
-- `GET /v1/text-to-image/:id/stream` - SSE stream
-- `DELETE /v1/text-to-image/:id` - Delete task
-- `GET /v1/text-to-image` - List tasks
-
----
-
-## Image-to-3D API (Single Image)
-
-Generate 3D model from a single image.
-
-### Create Task
-`POST /v1/image-to-3d`
-
-**Required Parameters:**
-| Name | Type | Description |
-|------|------|-------------|
-| `image_url` | string | Publicly accessible URL or base64 data URI (.jpg, .jpeg, .png) |
-
-**Optional Parameters:**
-| Name | Type | Default | Description |
-|------|------|---------|-------------|
-| `model_type` | string | `standard` | `standard` or `lowpoly` |
-| `ai_model` | string | `latest` | `meshy-5` or `latest` (Meshy 6) |
-| `topology` | string | `triangle` | `quad` or `triangle` |
-| `target_polycount` | integer | 30000 | 100-300,000 |
-| `symmetry_mode` | string | `auto` | `off`, `auto`, `on` |
-| `should_remesh` | boolean | true | Enable remesh phase |
-| `should_texture` | boolean | true | Generate textures |
-| `enable_pbr` | boolean | false | Generate PBR maps |
-| `pose_mode` | string | "" | `a-pose`, `t-pose`, or empty |
-| `texture_prompt` | string | - | Texture guidance (max 600 chars) |
-| `texture_image_url` | string | - | 2D image for texture guidance |
-
-**Response:**
-```json
-{ "result": "task-id" }
-```
-
-**Task Object (on completion):**
-```json
-{
- "id": "...",
- "type": "image-to-3d",
- "status": "SUCCEEDED",
- "model_urls": {
- "glb": "https://...",
- "fbx": "https://...",
- "obj": "https://...",
- "usdz": "https://..."
- },
- "texture_urls": [{
- "base_color": "https://...",
- "metallic": "https://...",
- "normal": "https://...",
- "roughness": "https://..."
- }]
-}
-```
-
-### Other Endpoints
-- `GET /v1/image-to-3d/:id` - Retrieve task
-- `GET /v1/image-to-3d/:id/stream` - SSE stream
-- `DELETE /v1/image-to-3d/:id` - Delete task
-- `GET /v1/image-to-3d` - List tasks
-
----
-
-## Multi-Image-to-3D API
-
-Generate 3D model from multiple images (1-4) of the same object.
-
-### Create Task
-`POST /v1/multi-image-to-3d`
-
-**Required Parameters:**
-| Name | Type | Description |
-|------|------|-------------|
-| `image_urls` | array | 1-4 publicly accessible URLs or base64 data URIs |
-
-**Optional Parameters:**
-| Name | Type | Default | Description |
-|------|------|---------|-------------|
-| `ai_model` | string | `latest` | `meshy-5` or `latest` |
-| `topology` | string | `triangle` | `quad` or `triangle` |
-| `target_polycount` | integer | 30000 | 100-300,000 |
-| `symmetry_mode` | string | `auto` | `off`, `auto`, `on` |
-| `should_remesh` | boolean | true | Enable remesh phase |
-| `should_texture` | boolean | true | Generate textures |
-| `enable_pbr` | boolean | false | Generate PBR maps |
-| `pose_mode` | string | "" | `a-pose`, `t-pose`, or empty |
-| `texture_prompt` | string | - | Texture guidance (max 600 chars) |
-| `texture_image_url` | string | - | 2D image for texture guidance |
-
-**Response:**
-```json
-{ "result": "task-id" }
-```
-
-**Task Object:** Same structure as Image-to-3D with `type: "multi-image-to-3d"`
-
-### Other Endpoints
-- `GET /v1/multi-image-to-3d/:id` - Retrieve task
-- `GET /v1/multi-image-to-3d/:id/stream` - SSE stream
-- `DELETE /v1/multi-image-to-3d/:id` - Delete task
-- `GET /v1/multi-image-to-3d` - List tasks
-
----
-
-## Text-to-3D API
-
-Two-stage workflow: preview (mesh) then refine (texture).
-
-### Create Preview Task
-`POST /v2/text-to-3d`
-
-**Required Parameters:**
-| Name | Type | Description |
-|------|------|-------------|
-| `mode` | string | Must be `"preview"` |
-| `prompt` | string | Object description (max 600 chars) |
-
-**Optional Parameters:**
-| Name | Type | Default | Description |
-|------|------|---------|-------------|
-| `art_style` | string | `realistic` | `realistic` or `sculpture` |
-| `ai_model` | string | `latest` | `meshy-5` or `latest` |
-| `topology` | string | `triangle` | `quad` or `triangle` |
-| `target_polycount` | integer | 30000 | 100-300,000 |
-| `should_remesh` | boolean | true | Enable remesh phase |
-| `symmetry_mode` | string | `auto` | `off`, `auto`, `on` |
-| `pose_mode` | string | "" | `a-pose`, `t-pose`, or empty |
-
-### Create Refine Task
-`POST /v2/text-to-3d`
-
-**Required Parameters:**
-| Name | Type | Description |
-|------|------|-------------|
-| `mode` | string | Must be `"refine"` |
-| `preview_task_id` | string | ID of SUCCEEDED preview task |
-
-**Optional Parameters:**
-| Name | Type | Default | Description |
-|------|------|---------|-------------|
-| `enable_pbr` | boolean | false | Generate PBR maps |
-| `texture_prompt` | string | - | Texture guidance (max 600 chars) |
-| `texture_image_url` | string | - | 2D image for texture guidance |
-| `ai_model` | string | `latest` | `meshy-5` or `latest` |
-
-### Other Endpoints
-- `GET /v2/text-to-3d/:id` - Retrieve task
-- `GET /v2/text-to-3d/:id/stream` - SSE stream
-- `DELETE /v2/text-to-3d/:id` - Delete task
-- `GET /v2/text-to-3d` - List tasks
-
----
-
-## Auto-Rigging API
-
-Create skeleton and bind mesh for animation.
-
-### Create Task
-`POST /v1/rigging`
-
-**Required Parameters (one of):**
-| Name | Type | Description |
-|------|------|-------------|
-| `input_task_id` | string | Task ID from Image-to-3D, Multi-Image-to-3D, or Text-to-3D |
-| `model_url` | string | Publicly accessible GLB URL or base64 data URI |
-
-**Optional Parameters:**
-| Name | Type | Default | Description |
-|------|------|---------|-------------|
-| `height_meters` | number | 1.7 | Character height in meters |
-| `texture_image_url` | string | - | UV-unwrapped base color texture (.png) |
-
-**Response:**
-```json
-{ "result": "task-id" }
-```
-
-**Task Object (on completion):**
-```json
-{
- "id": "...",
- "type": "rig",
- "status": "SUCCEEDED",
- "result": {
- "rigged_character_glb_url": "https://...",
- "rigged_character_fbx_url": "https://...",
- "basic_animations": {
- "walking_glb_url": "https://...",
- "walking_fbx_url": "https://...",
- "running_glb_url": "https://...",
- "running_fbx_url": "https://..."
- }
- }
-}
-```
-
-### Other Endpoints
-- `GET /v1/rigging/:id` - Retrieve task
-- `GET /v1/rigging/:id/stream` - SSE stream
-- `DELETE /v1/rigging/:id` - Delete task
-
----
-
-## Animation API
-
-Apply animations from library to rigged characters.
-
-### Create Task
-`POST /v1/animations`
-
-**Required Parameters:**
-| Name | Type | Description |
-|------|------|-------------|
-| `rig_task_id` | string | Task ID from completed rigging task |
-| `action_id` | integer | Animation ID from library (see below) |
-
-**Optional Parameters:**
-| Name | Type | Description |
-|------|------|-------------|
-| `post_process` | object | Post-processing options |
-| `post_process.operation_type` | string | `change_fps`, `fbx2usdz`, or `extract_armature` |
-| `post_process.fps` | integer | Target FPS: 24, 25, 30, or 60 (default 30) |
-
-**Response:**
-```json
-{ "result": "task-id" }
-```
-
-**Task Object (on completion):**
-```json
-{
- "id": "...",
- "type": "animate",
- "status": "SUCCEEDED",
- "result": {
- "animation_glb_url": "https://...",
- "animation_fbx_url": "https://...",
- "processed_usdz_url": "https://...",
- "processed_armature_fbx_url": "https://...",
- "processed_animation_fps_fbx_url": "https://..."
- }
-}
-```
-
-### Other Endpoints
-- `GET /v1/animations/:id` - Retrieve task
-- `GET /v1/animations/:id/stream` - SSE stream
-- `DELETE /v1/animations/:id` - Delete task
-
----
-
-## Animation Library Reference
-
-Common animation IDs used in our pipeline:
-
-| ID | Name | Description |
-|----|------|-------------|
-| 92 | IDLE_COMBAT | Combat-ready stance |
-| 93 | IDLE_NEUTRAL | Relaxed standing |
-| 1 | WALK | Walking forward |
-| 2 | RUN | Running forward |
-| 45 | ATTACK_MELEE_1 | Basic melee attack |
-| 46 | ATTACK_MELEE_2 | Secondary melee attack |
-| 60 | BLOCK | Defensive block |
-| 70 | HIT_REACTION | Taking damage |
-| 80 | DEATH | Death animation |
-| 30 | JUMP_IDLE | Jumping in place |
-
-See `tasks/registry.ts` for complete mapping.
-
----
-
-## Common Patterns
-
-### Image Input Formats
-All image parameters accept:
-1. **Publicly accessible URL**: `https://example.com/image.png`
-2. **Base64 Data URI**: `data:image/png;base64,`
-
-### Task Status Values
-- `PENDING` - In queue
-- `IN_PROGRESS` - Processing
-- `SUCCEEDED` - Complete
-- `FAILED` - Error occurred
-- `CANCELED` - Cancelled by user
-
-### Streaming (SSE)
-
-All `/stream` endpoints use Server-Sent Events:
-
-```text
-event: message
-data: {"id": "...", "progress": 50, "status": "IN_PROGRESS"}
-
-event: message
-data: {"id": "...", "progress": 100, "status": "SUCCEEDED", ...full object...}
-```
-
-### Error Response
-```json
-{
- "status_code": 400,
- "message": "Invalid values: ImageURL is a required field"
-}
-```
-
----
-
-## Pipeline Flow
-
-```text
-text-to-image (multi-view)
- │
- ▼ image_urls[3]
-multi-image-to-3d
- │
- ▼ model_urls.glb, texture_urls[0].base_color
-rigging (input_task_id OR model_url + texture_image_url)
- │
- ▼ result.rigged_character_glb_url
-animations (rig_task_id + action_id)
- │
- ▼ result.animation_glb_url
-```
-
----
-
-*Last Updated: 2025-01-15*
-
-*Source: [Meshy API Documentation](https://docs.meshy.ai/en/api/)*
diff --git a/packages/meshy-content-generator/src/content/docs/pipeline-walkthrough.mdx b/packages/meshy-content-generator/src/content/docs/pipeline-walkthrough.mdx
deleted file mode 100644
index 20dd58b1..00000000
--- a/packages/meshy-content-generator/src/content/docs/pipeline-walkthrough.mdx
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: Pipeline Walkthrough
----
-
-This walkthrough shows how pipeline steps and task definitions work together.
-
-## 1) Manifest
-
-Each asset directory contains a `manifest.json` that supplies prompts and configuration.
-
-```json
-{
- "id": "hero",
- "name": "Hero",
- "type": "character",
- "textTo3DPreviewTask": {
- "prompt": "Stylized anime hero with clean silhouette"
- },
- "textTo3DRefineTask": {
- "texturePrompt": "Cel-shaded materials with crisp outlines"
- },
- "animationTask": {
- "animations": ["WalkAndRun.Walking.Casual_Walk"]
- }
-}
-```
-
-## 2) Pipeline
-
-Pipelines reference task IDs. Each step can override inputs.
-
-```json
-{
- "name": "character-full",
- "steps": [
- {
- "id": "preview",
- "task": "text-to-3d-preview",
- "inputs": [
- { "name": "prompt", "source": "manifest", "path": "textTo3DPreviewTask.prompt" }
- ]
- },
- {
- "id": "refine",
- "task": "text-to-3d-refine",
- "dependsOn": ["preview"],
- "inputs": [
- { "name": "preview_task_id", "source": "step", "step": "preview", "path": "taskId" },
- { "name": "texture_prompt", "source": "manifest", "path": "textTo3DRefineTask.texturePrompt" }
- ]
- }
- ]
-}
-```
-
-## 3) Task definition
-
-Tasks map to Meshy endpoints and define how outputs are captured.
-
-```json
-{
- "id": "text-to-3d-refine",
- "apiVersion": "v2",
- "endpoint": "text-to-3d",
- "inputs": [
- { "name": "mode", "source": "literal", "value": "refine" },
- { "name": "preview_task_id", "source": "literal" }
- ],
- "outputs": [
- { "name": "model", "responsePath": "result.model_urls.glb", "artifact": "refined.glb" }
- ]
-}
-```
-
-## 4) Run
-
-```bash
-content-gen run character-full ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
-
-The manifest is updated with task status, outputs, and artifact paths.
diff --git a/packages/meshy-content-generator/src/content/docs/pipelines.mdx b/packages/meshy-content-generator/src/content/docs/pipelines.mdx
deleted file mode 100644
index b8f440d0..00000000
--- a/packages/meshy-content-generator/src/content/docs/pipelines.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Pipelines
----
-
-Pipelines are JSON files in `pipelines/definitions/*.pipeline.json`. Each step references a task definition and can override inputs.
-
-Example:
-
-```json
-{
- "name": "character",
- "version": "2.1.0",
- "steps": [
- { "id": "concept", "task": "text-to-image" },
- { "id": "model", "task": "multi-image-to-3d", "dependsOn": ["concept"] }
- ]
-}
-```
diff --git a/packages/meshy-content-generator/src/content/docs/preview.mdx b/packages/meshy-content-generator/src/content/docs/preview.mdx
deleted file mode 100644
index c576232d..00000000
--- a/packages/meshy-content-generator/src/content/docs/preview.mdx
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Preview
----
-
-The preview route hosts a lightweight viewer for generated assets so you can validate Meshy outputs quickly.
-
-## Start the server
-
-```bash
-pnpm dev
-```
-
-## Open a preview
-
-```bash
-http://localhost:5177/preview?assetDir=./assets/characters/hero&file=model.glb
-```
-
-- `assetDir` must be inside the current working directory.
-- `file` is resolved relative to the asset directory.
-
-The preview uses `` and supports basic camera controls and lighting out of the box.
-
-The viewer fetches assets through the `/file` endpoint so only the requested file is served.
diff --git a/packages/meshy-content-generator/src/content/docs/pricing.mdx b/packages/meshy-content-generator/src/content/docs/pricing.mdx
deleted file mode 100644
index 6611818f..00000000
--- a/packages/meshy-content-generator/src/content/docs/pricing.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Pricing & Credits FAQ
----
-
-## How credits are used
-
-Meshy charges credits per task. The most expensive steps are typically:
-
-1. Text‑to‑3D refine
-2. Rigging
-3. Animation
-
-Preview passes are cheaper and faster, so use preview to validate before refine.
-
-## Reduce cost per iteration
-
-- **Prototype with preview only** before running refine.
-- **Reuse manifests** for deterministic runs.
-- **Limit animation sets** during iteration.
-- **Batch runs** (avoid small, repeated single‑asset runs).
-
-## CI best practices
-
-Use VCR recordings to avoid spending credits in CI.
-
-```bash
-POLLY_MODE=record pnpm test:unit
-POLLY_MODE=replay pnpm test:unit
-```
-
-## Where to check balances
-
-Use the Meshy dashboard to monitor credit usage and queue status.
diff --git a/packages/meshy-content-generator/src/content/docs/providers.mdx b/packages/meshy-content-generator/src/content/docs/providers.mdx
deleted file mode 100644
index 9fb9ec58..00000000
--- a/packages/meshy-content-generator/src/content/docs/providers.mdx
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Meshy API
----
-
-This project targets Meshy specifically. Task definitions map directly onto Meshy endpoints and the pipeline runner uses a Meshy client under the hood.
-
-Supported tasks include:
-
-- text-to-image
-- text-to-3d-preview
-- text-to-3d-refine
-- multi-image-to-3d
-- rigging
-- animation
diff --git a/packages/meshy-content-generator/src/content/docs/rate-limits.mdx b/packages/meshy-content-generator/src/content/docs/rate-limits.mdx
deleted file mode 100644
index 92f4f820..00000000
--- a/packages/meshy-content-generator/src/content/docs/rate-limits.mdx
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Rate‑Limit Recovery
----
-
-## Symptoms
-
-- Meshy requests fail with 429 or rate‑limit errors.
-- Pipelines stall or slow down significantly.
-
-## Immediate mitigation
-
-- Reduce concurrent runs.
-- Back off and retry after a short delay.
-- Prefer preview tasks first; run refine in a separate window.
-
-## Operational strategies
-
-- **Queue runs** instead of firing parallel jobs.
-- **Stagger animation runs** (animations can fan out quickly).
-- **Use VCR in CI** to avoid hitting Meshy from tests.
-
-## Suggested default policy
-
-If you hit a rate limit, retry with exponential backoff. The Meshy client already retries on 429s using a linear backoff. You can increase `maxRetries` and `retryDelayMs` when initializing `MeshyClient`.
diff --git a/packages/meshy-content-generator/src/content/docs/testing.mdx b/packages/meshy-content-generator/src/content/docs/testing.mdx
deleted file mode 100644
index ffdc73e8..00000000
--- a/packages/meshy-content-generator/src/content/docs/testing.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: Testing
----
-
-## Test layers
-
-- **Unit**: schema validation, pipeline orchestration, input resolution, OpenAPI generation.
-- **Integration**: Fastify API routes via `inject()`.
-- **E2E**: Playwright against the running API server and preview page.
-- **Contracts**: OpenAPI spec assertions (schemas and required fields).
-- **CLI**: Snapshot tests for CLI output.
-- **VCR**: Full Meshy pipeline run recorded once and replayed in CI.
-
-## Commands
-
-```bash
-pnpm test:unit
-pnpm test:e2e
-pnpm test:all
-```
-
-## E2E notes
-
-Playwright starts the API server automatically (`pnpm dev`) and uses a dummy `MESHY_API_KEY`. The E2E suite does not call Meshy endpoints.
-
-Install browsers once:
-
-```bash
-pnpm exec playwright install --with-deps
-```
-
-## VCR pipeline recording
-
-```bash
-POLLY_MODE=record pnpm test:unit
-```
-
-After recording, set `POLLY_MODE=replay` for CI/default runs.
diff --git a/packages/meshy-content-generator/src/content/docs/troubleshooting.mdx b/packages/meshy-content-generator/src/content/docs/troubleshooting.mdx
deleted file mode 100644
index b595a034..00000000
--- a/packages/meshy-content-generator/src/content/docs/troubleshooting.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Troubleshooting
----
-
-## Missing MESHY_API_KEY
-
-**Symptom**: `MESHY_API_KEY is required.`
-
-**Fix**: Set the key in your environment or `.env` file.
-
-```bash
-MESHY_API_KEY=your_api_key
-```
-
-## Validation failures
-
-If `content-gen validate` reports missing inputs, check:
-
-- The manifest contains the required fields.
-- The pipeline step path matches the manifest path.
-- Lookup tables referenced by inputs are loaded.
-
-## Pipeline stuck or slow
-
-- Meshy tasks can take time. The runner streams until completion.
-- Check Meshy queue status and credits in your Meshy dashboard.
-- For CI, use VCR replay to avoid long waits.
-
-## Preview not loading
-
-- Ensure the asset is inside the working directory.
-- Verify `assetDir` and `file` query parameters are correct.
-- The preview uses `/file` to serve content; open `http://localhost:5177/file?...` directly to confirm access.
-
-## CORS / local access
-
-The preview is intended for local use. If you expose the API publicly, add authentication and strict CORS.
diff --git a/packages/meshy-content-generator/src/content/docs/use-cases.mdx b/packages/meshy-content-generator/src/content/docs/use-cases.mdx
deleted file mode 100644
index 9bb131d4..00000000
--- a/packages/meshy-content-generator/src/content/docs/use-cases.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: Use Cases
----
-
-## Character pipeline (text → image → 3D → rig → animation)
-
-Use `character-full` when you want the full Meshy workflow and a rigged character ready for animation.
-
-```bash
-content-gen run character-full ./assets/characters/hero \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
-
-Typical outputs:
-
-- `concept.png`
-- `preview.glb`
-- `refined.glb`
-- `rigged.glb`
-- `animations/*.fbx`
-
-## Prop pipeline (text → 3D)
-
-Use `prop` for rapid asset iteration.
-
-```bash
-content-gen run prop ./assets/props/katana \
- --pipelines ./pipelines/definitions \
- --tasks ./tasks/definitions
-```
-
-## API-driven generation
-
-Run the same pipelines over HTTP from build systems or internal tools.
-
-```bash
-curl -X POST http://localhost:5177/runs \
- -H 'content-type: application/json' \
- -d '{
- "pipelineName": "character",
- "assetDir": "./assets/characters/hero",
- "wait": true
- }'
-```
diff --git a/packages/meshy-content-generator/src/core/definitions.ts b/packages/meshy-content-generator/src/core/definitions.ts
deleted file mode 100644
index 36fa4693..00000000
--- a/packages/meshy-content-generator/src/core/definitions.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import fs from "node:fs";
-import path from "node:path";
-import type { PipelineDefinition, TaskDefinition } from "../schemas/definitions.js";
-import { PipelineDefinitionSchema, TaskDefinitionSchema } from "../schemas/definitions.js";
-import { readJson } from "../utils/json.js";
-
-/**
- * Parsed pipeline and task definitions loaded from JSON files.
- */
-export interface DefinitionBundle {
- pipelines: Map;
- tasks: Map;
-}
-
-/**
- * Paths to definition directories on disk.
- */
-export interface DefinitionLoadOptions {
- /** Directory containing `*.pipeline.json` definitions. */
- pipelinesDir: string;
- /** Directory containing task definition JSON files. */
- tasksDir: string;
-}
-
-/**
- * Load and validate pipeline/task definitions from disk.
- *
- * @param options - Directory paths for pipeline and task definitions.
- * @returns Parsed and validated definition bundle.
- */
-export async function loadJsonDefinitions(
- options: DefinitionLoadOptions,
-): Promise {
- const pipelines = new Map();
- const tasks = new Map();
-
- const pipelineFiles = fs
- .readdirSync(options.pipelinesDir)
- .filter((file) => file.endsWith(".pipeline.json"));
-
- for (const file of pipelineFiles) {
- const fullPath = path.join(options.pipelinesDir, file);
- const data = readJson(fullPath);
- const parsed = PipelineDefinitionSchema.parse(data);
- pipelines.set(parsed.name, parsed);
- }
-
- const taskFiles = fs.readdirSync(options.tasksDir).filter((file) => file.endsWith(".json"));
-
- for (const file of taskFiles) {
- const fullPath = path.join(options.tasksDir, file);
- const data = readJson(fullPath);
- if (!("id" in (data as Record))) continue;
- const parsed = TaskDefinitionSchema.parse(data);
- tasks.set(parsed.id, parsed);
- }
-
- return { pipelines, tasks };
-}
diff --git a/packages/meshy-content-generator/src/core/runner.ts b/packages/meshy-content-generator/src/core/runner.ts
deleted file mode 100644
index 25718949..00000000
--- a/packages/meshy-content-generator/src/core/runner.ts
+++ /dev/null
@@ -1,690 +0,0 @@
-import fs from "node:fs";
-import path from "node:path";
-import { Readable } from "node:stream";
-import type { ReadableStream as WebReadableStream } from "node:stream/web";
-import seedrandom from "seedrandom";
-import type { TaskResult } from "../meshy/meshy-client.js";
-import { MeshyClient } from "../meshy/meshy-client.js";
-import type {
- InputBinding,
- PipelineDefinition,
- PipelineStep,
- TaskDefinition,
-} from "../schemas/definitions.js";
-import type { AssetManifest, TaskState } from "../schemas/manifest.js";
-import { AssetManifestSchema } from "../schemas/manifest.js";
-import { readJson, writeJson } from "../utils/json.js";
-import { getPathValue, setPathValue } from "../utils/object-path.js";
-import { applyTemplate } from "../utils/template.js";
-import type { DefinitionBundle } from "./definitions.js";
-
-export interface PipelineRunnerOptions {
- /** Loaded pipeline/task definitions. */
- definitions: DefinitionBundle;
- /** Meshy API key used to authenticate requests. */
- apiKey: string;
- /** Optional Meshy client override (useful for testing). */
- client?: MeshyClient;
- /** Lookup tables for binding inputs by key. */
- lookups?: Record>;
- /** Optional logger to capture pipeline progress. */
- logger?: (message: string) => void;
-}
-
-export interface RunOptions {
- /** Pipeline definition name. */
- pipelineName: string;
- /** Asset directory containing the manifest.json file. */
- assetDir: string;
- /** Optional step id to run within the pipeline. */
- step?: string;
-}
-
-interface StepResult {
- taskId?: string;
- status: string;
- outputs: Record;
- artifacts: Record;
-}
-
-interface ExecutionContext {
- manifest: AssetManifest;
- assetDir: string;
- stepResults: Map;
- iterationVars: Record;
- seed: number;
-}
-
-/**
- * Executes declarative pipelines against asset manifests.
- */
-export class PipelineRunner {
- private readonly definitions: DefinitionBundle;
- private readonly client: MeshyClient;
- private readonly lookups: Record>;
- private readonly logger: (message: string) => void;
-
- constructor(options: PipelineRunnerOptions) {
- this.definitions = options.definitions;
- this.client = options.client ?? new MeshyClient({ apiKey: options.apiKey });
- this.lookups = options.lookups ?? {};
- this.logger = options.logger ?? console.log;
- }
-
- /**
- * Run a pipeline against the manifest in the provided asset directory.
- *
- * @param options - Pipeline execution options.
- * @returns Updated manifest with task state.
- */
- async run(options: RunOptions): Promise {
- const pipeline = this.getPipeline(options.pipelineName);
- const manifestPath = path.join(options.assetDir, "manifest.json");
- if (!fs.existsSync(manifestPath)) {
- throw new Error(`Manifest not found: ${manifestPath}`);
- }
-
- const manifest = AssetManifestSchema.parse(readJson(manifestPath));
- const seeded = this.ensureSeed(manifest, manifestPath);
-
- const context: ExecutionContext = {
- manifest: seeded,
- assetDir: options.assetDir,
- stepResults: new Map(),
- iterationVars: {},
- seed: seeded.seed ?? 0,
- };
-
- this.loadExistingResults(pipeline, context);
-
- const stepsToRun = options.step
- ? pipeline.steps.filter((step) => step.id === options.step)
- : pipeline.steps;
-
- for (const step of stepsToRun) {
- await this.executeStep(step, pipeline, context);
- writeJson(manifestPath, context.manifest);
- }
-
- return context.manifest;
- }
-
- /**
- * Resolve a pipeline definition by name.
- */
- private getPipeline(name: string): PipelineDefinition {
- const pipeline = this.definitions.pipelines.get(name);
- if (!pipeline) throw new Error(`Pipeline definition not found: ${name}`);
- return pipeline;
- }
-
- /**
- * Resolve a task definition by id.
- */
- private getTask(id: string): TaskDefinition {
- const task = this.definitions.tasks.get(id);
- if (!task) throw new Error(`Task definition not found: ${id}`);
- return task;
- }
-
- /**
- * Ensure the manifest has a deterministic seed, generating one if missing.
- */
- private ensureSeed(manifest: AssetManifest, manifestPath: string): AssetManifest {
- if (manifest.seed !== undefined) return manifest;
- const rng = seedrandom();
- const seed = rng.int32() >>> 0;
- const updated = { ...manifest, seed };
- writeJson(manifestPath, updated);
- return updated;
- }
-
- /**
- * Load existing task state from the manifest into the execution context.
- */
- private loadExistingResults(pipeline: PipelineDefinition, context: ExecutionContext): void {
- const tasks = context.manifest.tasks ?? {};
- for (const step of pipeline.steps) {
- const state = tasks[step.task];
- if (!state) continue;
- const result: StepResult = {
- status: state.status ?? "UNKNOWN",
- outputs: state.outputs ?? {},
- artifacts: state.artifacts ?? {},
- };
- if (state.taskId) {
- result.taskId = state.taskId;
- }
- context.stepResults.set(step.id, result);
- }
- }
-
- /**
- * Execute a pipeline step (including dependency checks and forEach handling).
- */
- private async executeStep(
- step: PipelineStep,
- pipeline: PipelineDefinition,
- context: ExecutionContext,
- ): Promise {
- for (const dep of step.dependsOn ?? []) {
- const existing = context.stepResults.get(dep);
- if (!existing) {
- throw new Error(`Dependency '${dep}' not completed for step '${step.id}'`);
- }
- }
-
- if (step.forEach) {
- await this.executeForEach(step, pipeline, context);
- return;
- }
-
- const stepResult = await this.executeTask(step, context);
- context.stepResults.set(step.id, stepResult);
- this.applyStateMappings(pipeline, step, context, stepResult);
- }
-
- /**
- * Execute a step multiple times for each resolved item.
- */
- private async executeForEach(
- step: PipelineStep,
- pipeline: PipelineDefinition,
- context: ExecutionContext,
- ): Promise {
- const forEach = step.forEach;
- if (!forEach) return;
-
- const iterable = this.resolveForEachSource(forEach.source, forEach, context);
- if (!Array.isArray(iterable)) {
- throw new Error(`forEach source for step '${step.id}' did not resolve to an array.`);
- }
-
- const results: StepResult[] = [];
- let index = 0;
- for (const item of iterable) {
- context.iterationVars[forEach.as] = item;
- context.iterationVars[`${forEach.as}_index`] = index;
- const result = await this.executeTask(step, context);
- results.push(result);
- index += 1;
- }
-
- context.stepResults.set(step.id, results);
- if (results.length > 0) {
- const latest = results[results.length - 1];
- if (latest) {
- this.applyStateMappings(pipeline, step, context, latest);
- }
- }
- }
-
- /**
- * Resolve a forEach source array from manifest, step output, or literal input.
- */
- private resolveForEachSource(
- source: InputBinding["source"],
- binding: {
- path?: string | undefined;
- step?: string | undefined;
- table?: string | undefined;
- key?: string | undefined;
- },
- context: ExecutionContext,
- ): unknown {
- switch (source) {
- case "manifest":
- return binding.path ? getPathValue(context.manifest, binding.path) : undefined;
- case "step":
- if (!binding.step || !binding.path) return undefined;
- return this.resolveStepOutput(binding.step, binding.path, context);
- case "literal":
- return binding.path;
- case "env":
- return binding.path ? process.env[binding.path] : undefined;
- case "lookup":
- if (!binding.table) return undefined;
- if (binding.key) {
- const resolvedKey = applyTemplate(binding.key, {
- ...context.iterationVars,
- seed: context.seed,
- assetId: context.manifest.id,
- });
- return this.lookups[binding.table]?.[resolvedKey];
- }
- return Object.values(this.lookups[binding.table] ?? {});
- default:
- return undefined;
- }
- }
-
- /**
- * Execute a single task using the configured provider.
- * Skips already-succeeded tasks and only downloads missing artifacts.
- */
- private async executeTask(step: PipelineStep, context: ExecutionContext): Promise {
- const taskDef = this.getTask(step.task);
- const shouldDownloadArtifacts = !step.skipArtifacts;
-
- // Check if task already succeeded - skip re-running, just ensure artifacts
- const existingResult = context.stepResults.get(step.id);
- const existing = Array.isArray(existingResult) ? existingResult[0] : existingResult;
- if (existing && existing.status === "SUCCEEDED" && existing.taskId) {
- this.logger(
- `\n▶ Step ${step.id} (${taskDef.id}) - already SUCCEEDED${shouldDownloadArtifacts ? ", checking artifacts" : ", skipping artifacts"}`,
- );
-
- // Check for missing artifacts and download them (unless skipArtifacts is set)
- if (shouldDownloadArtifacts) {
- const missingArtifacts = await this.downloadMissingArtifacts(taskDef, existing, context);
- if (Object.keys(missingArtifacts).length > 0) {
- existing.artifacts = { ...existing.artifacts, ...missingArtifacts };
- this.updateTaskArtifacts(taskDef, existing.artifacts, context);
- }
- }
-
- return existing;
- }
-
- const inputs = this.resolveInputs(taskDef, step, context);
-
- this.logger(`\n▶ Step ${step.id} (${taskDef.id})`);
- const result = await this.runMeshyTask(taskDef, inputs);
-
- const outputs = {
- ...this.mapOutputs(taskDef, result),
- taskId: result.id,
- };
-
- // Download artifacts unless skipArtifacts is set on the step
- const artifacts = shouldDownloadArtifacts
- ? await this.downloadArtifacts(taskDef, outputs, context)
- : {};
-
- this.persistTaskState(taskDef, result, outputs, artifacts, context);
-
- return {
- taskId: result.id,
- status: result.status,
- outputs,
- artifacts,
- };
- }
-
- /**
- * Download artifacts that are missing from an already-succeeded task.
- * Fetches task details from Meshy API if URLs are not cached in outputs.
- */
- private async downloadMissingArtifacts(
- taskDef: TaskDefinition,
- existing: StepResult,
- context: ExecutionContext,
- ): Promise> {
- const missingArtifacts: Record = {};
-
- // Check which outputs need downloading
- const outputsNeedingDownload: Array<{
- output: (typeof taskDef.outputs)[0];
- filename: string;
- targetPath: string;
- }> = [];
-
- for (const output of taskDef.outputs) {
- if (!output.artifact) continue;
-
- const filename = applyTemplate(output.artifact, {
- ...context.iterationVars,
- seed: context.seed,
- assetId: context.manifest.id,
- });
- const targetPath = path.join(context.assetDir, filename);
-
- if (fs.existsSync(targetPath)) {
- this.logger(` ✓ ${filename} already exists`);
- continue;
- }
-
- outputsNeedingDownload.push({ output, filename, targetPath });
- }
-
- if (outputsNeedingDownload.length === 0) {
- return missingArtifacts;
- }
-
- // Fetch task details from Meshy API to get download URLs
- let outputs = existing.outputs;
- if (existing.taskId) {
- try {
- const apiVersion = taskDef.apiVersion ?? "v1";
- const endpoint = taskDef.endpoint ?? taskDef.id;
- const fetchPath = `/${apiVersion}/${endpoint}/${existing.taskId}`;
- const taskDetails = await this.client.get>(fetchPath);
-
- // Map the response to outputs
- // Some APIs return { result: { url: ... } }, others return { model_urls: { glb: ... } }
- // Wrap in { result: ... } only if the response doesn't already have a result property
- // AND the responsePath starts with "result."
- const hasResultProperty =
- taskDetails && typeof taskDetails === "object" && "result" in taskDetails;
- outputs = {};
- for (const output of taskDef.outputs) {
- let source: Record;
- if (output.responsePath.startsWith("result.") && !hasResultProperty) {
- source = { result: taskDetails };
- } else {
- source = taskDetails as Record;
- }
- const value = getPathValue(source, output.responsePath);
- outputs[output.name] = value;
- }
- } catch (err) {
- this.logger(` ⚠ Failed to fetch task details: ${err}`);
- return missingArtifacts;
- }
- }
-
- // Download the files
- for (const { output, filename, targetPath } of outputsNeedingDownload) {
- const url = outputs[output.name];
- if (typeof url === "string" && url.trim()) {
- this.logger(` ↓ Downloading ${filename}...`);
- try {
- await this.downloadFile(url, targetPath);
- missingArtifacts[output.name] = filename;
- this.logger(` ✓ Downloaded ${filename}`);
- } catch (err) {
- this.logger(` ✗ Failed to download ${filename}: ${err}`);
- }
- } else {
- this.logger(` ⚠ No URL for ${output.name}`);
- }
- }
-
- return missingArtifacts;
- }
-
- /**
- * Update only the artifacts in manifest task state without overwriting other fields.
- */
- private updateTaskArtifacts(
- taskDef: TaskDefinition,
- artifacts: Record,
- context: ExecutionContext,
- ): void {
- const tasks = context.manifest.tasks ?? {};
- const state = tasks[taskDef.id];
- if (state) {
- state.artifacts = { ...state.artifacts, ...artifacts };
- }
- }
-
- /**
- * Resolve task inputs from manifest, step outputs, env vars, or lookups.
- */
- private resolveInputs(
- taskDef: TaskDefinition,
- step: PipelineStep,
- context: ExecutionContext,
- ): Record {
- const bindings = new Map();
- for (const input of taskDef.inputs) {
- bindings.set(input.name, input);
- }
- for (const input of step.inputs ?? []) {
- bindings.set(input.name, input);
- }
-
- const resolved: Record = {};
- const templateVars = {
- ...context.iterationVars,
- seed: context.seed,
- assetId: context.manifest.id,
- };
-
- for (const binding of bindings.values()) {
- const value = this.resolveInput(binding, context, templateVars);
- if (value !== undefined) {
- resolved[binding.name] = value;
- } else if (binding.default !== undefined) {
- resolved[binding.name] = binding.default;
- }
- }
-
- return resolved;
- }
-
- /**
- * Resolve one input binding into a concrete value.
- */
- private resolveInput(
- binding: InputBinding,
- context: ExecutionContext,
- templateVars: Record,
- ): unknown {
- const resolvePath = (raw?: string): string | undefined => {
- if (!raw) return undefined;
- return applyTemplate(raw, templateVars);
- };
-
- switch (binding.source) {
- case "literal":
- if (typeof binding.value === "string") {
- return applyTemplate(binding.value, templateVars);
- }
- return binding.value;
- case "env":
- return binding.path ? process.env[resolvePath(binding.path) ?? ""] : undefined;
- case "manifest":
- return binding.path
- ? getPathValue(context.manifest, resolvePath(binding.path) ?? "")
- : undefined;
- case "step":
- if (!binding.step || !binding.path) return undefined;
- return this.resolveStepOutput(binding.step, resolvePath(binding.path) ?? "", context);
- case "lookup":
- if (!binding.table) return undefined;
- return this.lookups[binding.table]?.[applyTemplate(binding.key ?? "", templateVars)];
- default:
- return undefined;
- }
- }
-
- /**
- * Read a value from a previous step output by path.
- */
- private resolveStepOutput(stepId: string, pathValue: string, context: ExecutionContext): unknown {
- const result = context.stepResults.get(stepId);
- if (!result) return undefined;
- const latest = Array.isArray(result) ? result[result.length - 1] : result;
- if (!latest) return undefined;
- return getPathValue(latest.outputs, pathValue);
- }
-
- /**
- * Map provider response into named outputs based on task definition.
- */
- private mapOutputs(
- taskDef: TaskDefinition,
- result: TaskResult>,
- ): Record {
- const outputs: Record = {};
- const source = (result.result ?? (result as unknown as Record)) as Record<
- string,
- unknown
- >;
- for (const output of taskDef.outputs) {
- const value = getPathValue(source, output.responsePath);
- outputs[output.name] = value;
- }
- return outputs;
- }
-
- /**
- * Download artifact URLs into the asset directory.
- */
- private async downloadArtifacts(
- taskDef: TaskDefinition,
- outputs: Record,
- context: ExecutionContext,
- ): Promise> {
- const artifacts: Record = {};
-
- for (const output of taskDef.outputs) {
- if (!output.artifact) continue;
- const value = outputs[output.name];
- if (typeof value === "string") {
- if (!value.trim()) continue;
- const filename = applyTemplate(output.artifact, {
- ...context.iterationVars,
- seed: context.seed,
- assetId: context.manifest.id,
- });
- const targetPath = path.join(context.assetDir, filename);
- await this.downloadFile(value, targetPath);
- artifacts[output.name] = filename;
- continue;
- }
-
- if (Array.isArray(value)) {
- let index = 0;
- for (const item of value) {
- if (typeof item !== "string" || !item.trim()) {
- index += 1;
- continue;
- }
- const filename = applyTemplate(output.artifact, {
- ...context.iterationVars,
- seed: context.seed,
- assetId: context.manifest.id,
- index,
- });
- const targetPath = path.join(context.assetDir, filename);
- await this.downloadFile(item, targetPath);
- artifacts[`${output.name}.${index}`] = filename;
- index += 1;
- }
- }
- }
-
- return artifacts;
- }
-
- /**
- * Download a single file from URL to a local path.
- */
- private async downloadFile(url: string, targetPath: string): Promise {
- if (!url || !url.trim()) return;
- const response = await fetch(url);
- if (!response.ok || !response.body) {
- throw new Error(`Failed to download artifact: ${url}`);
- }
-
- await fs.promises.mkdir(path.dirname(targetPath), { recursive: true });
- const fileStream = fs.createWriteStream(targetPath);
- const nodeStream = Readable.fromWeb(response.body as unknown as WebReadableStream);
- await new Promise((resolve, reject) => {
- nodeStream
- .pipe(fileStream)
- .on("finish", () => resolve())
- .on("error", (error: Error) => reject(error));
- });
- }
-
- /**
- * Persist task outputs into the manifest's task state.
- */
- private persistTaskState(
- taskDef: TaskDefinition,
- result: TaskResult>,
- outputs: Record,
- artifacts: Record,
- context: ExecutionContext,
- ): void {
- const tasks = context.manifest.tasks ?? {};
- const state: TaskState = {
- taskId: result.id,
- status: result.status,
- outputs,
- artifacts,
- };
- tasks[taskDef.id] = state;
- context.manifest.tasks = tasks;
- }
-
- /**
- * Apply output values into manifest paths using mapping rules.
- */
- private applyStateMappings(
- pipeline: PipelineDefinition,
- step: PipelineStep,
- context: ExecutionContext,
- stepResult: StepResult,
- ): void {
- const mapping = {
- ...(pipeline.stateMapping ?? {}),
- ...(step.stateMapping ?? {}),
- };
-
- for (const [manifestPath, outputPath] of Object.entries(mapping)) {
- const value = getPathValue(stepResult.outputs, outputPath);
- if (value !== undefined) {
- setPathValue(context.manifest as Record, manifestPath, value);
- }
- }
- }
-
- private async runMeshyTask(
- taskDef: TaskDefinition,
- inputs: Record,
- ): Promise>> {
- const apiVersion = taskDef.apiVersion ?? "v1";
- const endpoint = taskDef.endpoint ?? taskDef.id;
- const method = taskDef.method ?? "POST";
-
- if (method !== "POST") {
- throw new Error(`Unsupported Meshy method '${method}' for task '${taskDef.id}'.`);
- }
-
- const createPath = `/${apiVersion}/${endpoint}`;
- const payload = Object.fromEntries(
- Object.entries(inputs).filter(([, value]) => value !== undefined && value !== ""),
- );
-
- const createResponse = await this.client.post<{ result?: string; id?: string }>(
- createPath,
- payload,
- );
- const taskId = createResponse.result ?? createResponse.id;
- if (!taskId) {
- throw new Error(
- `Meshy task creation failed for ${taskDef.id}: ${JSON.stringify(createResponse)}`,
- );
- }
-
- const streamPath = `/${apiVersion}/${endpoint}/${taskId}/stream`;
- const result = await this.client.streamUntilComplete>(streamPath);
-
- if (result.result) {
- return { ...result, id: taskId };
- }
-
- const fetchPath = `/${apiVersion}/${endpoint}/${taskId}`;
- const fetched = await this.client.get>(fetchPath);
- const fetchedResult =
- typeof fetched === "object" && fetched !== null && "result" in fetched
- ? (fetched as { result?: Record }).result
- : fetched;
-
- const combined: TaskResult> = {
- ...result,
- ...(typeof fetched === "object" ? fetched : {}),
- id: taskId,
- };
- const finalResult = fetchedResult ?? result.result;
- if (typeof finalResult !== "undefined") {
- combined.result = finalResult;
- }
-
- return combined;
- }
-}
diff --git a/packages/meshy-content-generator/src/core/validator.ts b/packages/meshy-content-generator/src/core/validator.ts
deleted file mode 100644
index ea4f81e0..00000000
--- a/packages/meshy-content-generator/src/core/validator.ts
+++ /dev/null
@@ -1,290 +0,0 @@
-import type {
- InputBinding,
- PipelineDefinition,
- PipelineStep,
- TaskDefinition,
-} from "../schemas/definitions.js";
-import type { AssetManifest } from "../schemas/manifest.js";
-import { AssetManifestSchema } from "../schemas/manifest.js";
-import { getPathValue } from "../utils/object-path.js";
-import { applyTemplate } from "../utils/template.js";
-import type { DefinitionBundle } from "./definitions.js";
-
-/**
- * Validation errors and warnings produced by the manifest validator.
- */
-export interface ValidationResult {
- errors: string[];
- warnings: string[];
-}
-
-/**
- * Options for validating a manifest against a pipeline definition.
- */
-export interface ValidationOptions {
- definitions: DefinitionBundle;
- pipelineName: string;
- manifest: unknown;
- env?: Record;
- lookups?: Record>;
-}
-
-interface ValidationContext {
- manifest: AssetManifest;
- stepResults: Map<
- string,
- { outputs: Record } | { outputs: Record }[]
- >;
- iterationVars: Record;
- env: Record;
- lookups: Record>;
-}
-
-/**
- * Validate a manifest and its pipeline/task bindings without executing any Meshy calls.
- */
-/**
- * Validate a manifest against the pipeline/task definitions without executing Meshy calls.
- */
-export function validateManifestAndPipeline(options: ValidationOptions): ValidationResult {
- const errors: string[] = [];
- const warnings: string[] = [];
- const env = options.env ?? process.env;
- const lookups = options.lookups ?? {};
-
- const manifestResult = AssetManifestSchema.safeParse(options.manifest);
- if (!manifestResult.success) {
- errors.push(`Manifest schema invalid: ${manifestResult.error.message}`);
- return { errors, warnings };
- }
-
- const manifest = manifestResult.data;
- const pipeline = options.definitions.pipelines.get(options.pipelineName);
- if (!pipeline) {
- errors.push(`Pipeline definition not found: ${options.pipelineName}`);
- return { errors, warnings };
- }
-
- const stepIds = new Set();
- for (const step of pipeline.steps) {
- if (stepIds.has(step.id)) {
- errors.push(`Duplicate step id '${step.id}' in pipeline '${pipeline.name}'.`);
- }
- stepIds.add(step.id);
- }
-
- for (const step of pipeline.steps) {
- for (const dep of step.dependsOn ?? []) {
- if (!stepIds.has(dep)) {
- errors.push(`Step '${step.id}' depends on missing step '${dep}'.`);
- }
- }
- }
-
- const context: ValidationContext = {
- manifest,
- stepResults: new Map(),
- iterationVars: {},
- env,
- lookups,
- };
-
- for (const step of pipeline.steps) {
- const task = options.definitions.tasks.get(step.task);
- if (!task) {
- errors.push(`Task definition not found for step '${step.id}': ${step.task}`);
- continue;
- }
-
- if (step.forEach) {
- const iterable = resolveForEachSource(
- step.forEach.source,
- step.forEach,
- context,
- errors,
- warnings,
- );
- if (Array.isArray(iterable)) {
- iterable.forEach((item, index) => {
- context.iterationVars[step.forEach?.as ?? "item"] = item;
- context.iterationVars[`${step.forEach?.as ?? "item"}_index`] = index;
- validateStepInputs(step, task, pipeline, context, errors, warnings);
- });
- } else {
- errors.push(`forEach source for step '${step.id}' did not resolve to an array.`);
- }
- } else {
- validateStepInputs(step, task, pipeline, context, errors, warnings);
- }
- }
-
- return { errors, warnings };
-}
-
-function validateStepInputs(
- step: PipelineStep,
- taskDef: TaskDefinition,
- pipeline: PipelineDefinition,
- context: ValidationContext,
- errors: string[],
- warnings: string[],
-): void {
- const bindings = new Map();
- for (const input of taskDef.inputs) {
- bindings.set(input.name, input);
- }
- for (const input of step.inputs ?? []) {
- bindings.set(input.name, input);
- }
-
- const templateVars = {
- ...context.iterationVars,
- seed: context.manifest.seed ?? 0,
- assetId: context.manifest.id,
- };
-
- for (const binding of bindings.values()) {
- const resolved = resolveInput(binding, context, templateVars, pipeline, errors, warnings);
- if (resolved === undefined && binding.default === undefined) {
- if (
- binding.source === "manifest" ||
- binding.source === "env" ||
- binding.source === "lookup"
- ) {
- errors.push(
- `Missing required input '${binding.name}' for step '${step.id}' (task '${taskDef.id}').`,
- );
- } else if (binding.source === "literal") {
- warnings.push(
- `Optional literal input '${binding.name}' has no value for step '${step.id}'.`,
- );
- }
- }
- }
-}
-
-function resolveInput(
- binding: InputBinding,
- context: ValidationContext,
- templateVars: Record,
- pipeline: PipelineDefinition,
- errors: string[],
- warnings: string[],
-): unknown {
- const resolvePath = (raw?: string): string | undefined => {
- if (!raw) return undefined;
- return applyTemplate(raw, templateVars);
- };
-
- switch (binding.source) {
- case "literal":
- if (typeof binding.value === "string") {
- return applyTemplate(binding.value, templateVars);
- }
- return binding.value;
- case "env": {
- const envKey = resolvePath(binding.path);
- if (!envKey) {
- errors.push(`Env binding missing key for '${binding.name}'.`);
- return undefined;
- }
- return context.env[envKey];
- }
- case "manifest": {
- const pathValue = resolvePath(binding.path);
- if (!pathValue) {
- errors.push(`Manifest binding missing path for '${binding.name}'.`);
- return undefined;
- }
- return getPathValue(context.manifest, pathValue);
- }
- case "step":
- if (!binding.step || !binding.path) {
- errors.push(`Step binding missing step/path for '${binding.name}'.`);
- return undefined;
- }
- if (!pipeline.steps.some((step) => step.id === binding.step)) {
- errors.push(
- `Step binding references missing step '${binding.step}' for '${binding.name}'.`,
- );
- } else {
- warnings.push(
- `Step binding '${binding.name}' resolved at runtime from step '${binding.step}'.`,
- );
- }
- return undefined;
- case "lookup": {
- if (!binding.table) {
- errors.push(`Lookup binding missing table for '${binding.name}'.`);
- return undefined;
- }
- const table = context.lookups[binding.table];
- if (!table) {
- errors.push(`Lookup table '${binding.table}' missing for '${binding.name}'.`);
- return undefined;
- }
- const key = applyTemplate(binding.key ?? binding.path ?? "", templateVars);
- if (!key) {
- errors.push(`Lookup binding missing key for '${binding.name}'.`);
- return undefined;
- }
- return table[key];
- }
- default:
- return undefined;
- }
-}
-
-function resolveForEachSource(
- source: InputBinding["source"],
- binding: {
- path?: string | undefined;
- step?: string | undefined;
- table?: string | undefined;
- key?: string | undefined;
- as?: string | undefined;
- },
- context: ValidationContext,
- errors: string[],
- warnings: string[],
-): unknown {
- const templateVars = {
- ...context.iterationVars,
- seed: context.manifest.seed ?? 0,
- assetId: context.manifest.id,
- };
-
- switch (source) {
- case "manifest": {
- const pathValue = binding.path ? applyTemplate(binding.path, templateVars) : "";
- return pathValue ? getPathValue(context.manifest, pathValue) : undefined;
- }
- case "step":
- warnings.push(
- `forEach source uses step '${binding.step ?? "unknown"}' and cannot be resolved at validate-time.`,
- );
- return undefined;
- case "literal":
- return binding.path ? applyTemplate(binding.path, templateVars) : binding.path;
- case "env":
- return binding.path ? context.env[applyTemplate(binding.path, templateVars)] : undefined;
- case "lookup": {
- if (!binding.table) {
- errors.push("forEach lookup source missing table.");
- return undefined;
- }
- const table = context.lookups[binding.table];
- if (!table) {
- errors.push(`forEach lookup table '${binding.table}' missing.`);
- return undefined;
- }
- const key = binding.key ?? binding.path;
- if (!key) {
- return Object.values(table);
- }
- return table[applyTemplate(key, templateVars)];
- }
- default:
- return undefined;
- }
-}
diff --git a/packages/meshy-content-generator/src/env.d.ts b/packages/meshy-content-generator/src/env.d.ts
deleted file mode 100644
index e16c13c6..00000000
--- a/packages/meshy-content-generator/src/env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/packages/meshy-content-generator/src/index.ts b/packages/meshy-content-generator/src/index.ts
deleted file mode 100644
index dbb2cd4f..00000000
--- a/packages/meshy-content-generator/src/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-export type { DefinitionBundle, DefinitionLoadOptions } from "./core/definitions.js";
-export { loadJsonDefinitions } from "./core/definitions.js";
-export type { PipelineRunnerOptions, RunOptions } from "./core/runner.js";
-export { PipelineRunner } from "./core/runner.js";
-export type { ValidationOptions, ValidationResult } from "./core/validator.js";
-export { validateManifestAndPipeline } from "./core/validator.js";
-export { loadAnimationIds } from "./lookups/animation-ids.js";
-export type {
- InputBinding,
- OutputBinding,
- PipelineDefinition,
- PipelineStep,
- TaskDefinition,
-} from "./schemas/definitions.js";
-export type { AssetManifest, TaskState } from "./schemas/manifest.js";
-export { AssetManifestSchema, TaskStateSchema } from "./schemas/manifest.js";
diff --git a/packages/meshy-content-generator/src/lookups/animation-ids.ts b/packages/meshy-content-generator/src/lookups/animation-ids.ts
deleted file mode 100644
index 4de6b60b..00000000
--- a/packages/meshy-content-generator/src/lookups/animation-ids.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import path from "node:path";
-import { fileURLToPath } from "node:url";
-import { readJson } from "../utils/json.js";
-
-export interface AnimationLibrary {
- name: string;
- description: string;
- source: string;
- syncedAt: string;
- totalAnimations: number;
- byPath: Record;
-}
-
-export function loadAnimationIds(): Record {
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
- const filePath = path.resolve(__dirname, "../../lookups/animation-library.json");
- const library = readJson(filePath);
- return library.byPath;
-}
diff --git a/packages/meshy-content-generator/src/meshy/meshy-client.ts b/packages/meshy-content-generator/src/meshy/meshy-client.ts
deleted file mode 100644
index 59a38d8b..00000000
--- a/packages/meshy-content-generator/src/meshy/meshy-client.ts
+++ /dev/null
@@ -1,258 +0,0 @@
-/**
- * Meshy API Client
- *
- * Base client with authentication, error handling, and rate limiting.
- */
-
-export interface MeshyClientConfig {
- /** Meshy API key. */
- apiKey: string;
- /** Override base URL for Meshy (default: https://api.meshy.ai/openapi). */
- baseUrl?: string;
- /** SSE stream timeout in milliseconds. */
- streamTimeoutMs?: number;
- /** Max retries on rate-limit errors. */
- maxRetries?: number;
- /** Base delay (ms) between retries. */
- retryDelayMs?: number;
-}
-
-export type TaskStatus = "PENDING" | "IN_PROGRESS" | "SUCCEEDED" | "FAILED" | "CANCELED";
-
-export interface TaskResult {
- id: string;
- status: TaskStatus;
- progress: number;
- result?: T;
- task_error?: { message: string };
-}
-
-export class MeshyApiError extends Error {
- constructor(
- message: string,
- public readonly statusCode: number,
- public readonly isRateLimit = false,
- public readonly isAuthError = false,
- ) {
- super(message);
- this.name = "MeshyApiError";
- }
-}
-
-export class RateLimitError extends MeshyApiError {
- constructor(message: string) {
- super(message, 429, true, false);
- this.name = "RateLimitError";
- }
-}
-
-export class AuthenticationError extends MeshyApiError {
- constructor(message: string) {
- super(message, 401, false, true);
- this.name = "AuthenticationError";
- }
-}
-
-export class InsufficientCreditsError extends MeshyApiError {
- constructor(message: string) {
- super(message, 402, false, false);
- this.name = "InsufficientCreditsError";
- }
-}
-
-/**
- * Low-level Meshy API client with streaming support.
- */
-export class MeshyClient {
- private readonly apiKey: string;
- private readonly baseUrl: string;
- private readonly streamTimeoutMs: number;
- private readonly maxRetries: number;
- private readonly retryDelayMs: number;
-
- constructor(config: MeshyClientConfig) {
- this.apiKey = config.apiKey;
- this.baseUrl = (config.baseUrl ?? "https://api.meshy.ai/openapi").replace(/\/$/, "");
- this.streamTimeoutMs = config.streamTimeoutMs ?? 600_000;
- this.maxRetries = config.maxRetries ?? 3;
- this.retryDelayMs = config.retryDelayMs ?? 1000;
- }
-
- /**
- * Perform a GET request against the Meshy API.
- *
- * @param path - API path (e.g. /v1/text-to-image).
- * @param query - Optional query params.
- */
- async get(
- path: string,
- query?: Record,
- ): Promise {
- return this.request("GET", path, undefined, query);
- }
-
- /**
- * Perform a POST request against the Meshy API.
- *
- * @param path - API path (e.g. /v2/text-to-3d).
- * @param body - JSON payload for Meshy.
- */
- async post(path: string, body: unknown): Promise {
- return this.request("POST", path, body);
- }
-
- /**
- * Perform a DELETE request against the Meshy API.
- *
- * @param path - API path to delete.
- */
- async delete(path: string): Promise {
- await this.request("DELETE", path);
- }
-
- /**
- * Stream task progress (SSE) until completion.
- *
- * @param path - Stream endpoint for a Meshy task.
- */
- async streamUntilComplete(path: string): Promise> {
- const url = this.buildUrl(path);
-
- const response = await fetch(url, {
- method: "GET",
- headers: {
- Authorization: `Bearer ${this.apiKey}`,
- Accept: "text/event-stream",
- },
- signal: AbortSignal.timeout(this.streamTimeoutMs),
- });
-
- await this.ensureOk(response);
-
- if (!response.body) {
- throw new MeshyApiError("Streaming response did not include a body", 500);
- }
-
- const reader = response.body.getReader();
- const decoder = new TextDecoder();
- let buffer = "";
- let finalResult: TaskResult | null = null;
-
- try {
- while (true) {
- const { value, done } = await reader.read();
- if (done) break;
-
- buffer += decoder.decode(value, { stream: true });
- const lines = buffer.split(/\r?\n/);
- buffer = lines.pop() ?? "";
-
- for (const line of lines) {
- if (!line.trim().startsWith("data:")) continue;
-
- const payload = line.replace(/^data:\s*/, "");
- try {
- const parsed = JSON.parse(payload) as TaskResult;
- finalResult = parsed;
-
- if (["SUCCEEDED", "FAILED", "CANCELED"].includes(parsed.status)) {
- await reader.cancel();
- return parsed;
- }
- } catch {
- // Ignore parse errors for non-JSON lines
- }
- }
- }
- } finally {
- reader.releaseLock();
- }
-
- if (finalResult) return finalResult;
- throw new MeshyApiError("No data received from stream", 500);
- }
-
- /**
- * Core HTTP handler with retry/backoff for rate limits.
- */
- private async request(
- method: string,
- path: string,
- body?: unknown,
- query?: Record,
- ): Promise {
- let lastError: Error | null = null;
-
- for (let attempt = 1; attempt <= this.maxRetries + 1; attempt += 1) {
- try {
- const url = this.buildUrl(path, query);
- const response = await fetch(url, {
- method,
- headers: {
- Authorization: `Bearer ${this.apiKey}`,
- "Content-Type": "application/json",
- },
- body: body ? JSON.stringify(body) : null,
- });
-
- await this.ensureOk(response);
-
- if (response.status === 204) {
- return undefined as T;
- }
-
- return (await response.json()) as T;
- } catch (error) {
- lastError = error as Error;
- if (error instanceof RateLimitError && attempt <= this.maxRetries) {
- await this.delay(this.retryDelayMs * attempt);
- continue;
- }
- break;
- }
- }
-
- throw lastError ?? new MeshyApiError("Unknown Meshy error", 500);
- }
-
- /**
- * Build a full API URL with query parameters.
- */
- private buildUrl(path: string, query?: Record): string {
- const url = new URL(`${this.baseUrl}${path.startsWith("/") ? "" : "/"}${path}`);
- if (query) {
- for (const [key, value] of Object.entries(query)) {
- url.searchParams.set(key, String(value));
- }
- }
- return url.toString();
- }
-
- /**
- * Validate HTTP responses and surface Meshy errors.
- */
- private async ensureOk(response: Response): Promise {
- if (response.ok) return;
-
- let message = response.statusText;
- try {
- const payload = (await response.json()) as { message?: string };
- if (payload.message) message = payload.message;
- } catch {
- // Ignore JSON parse errors
- }
-
- if (response.status === 401) throw new AuthenticationError(message);
- if (response.status === 402) throw new InsufficientCreditsError(message);
- if (response.status === 429) throw new RateLimitError(message);
-
- throw new MeshyApiError(message, response.status);
- }
-
- /**
- * Delay helper for retry backoff.
- */
- private async delay(ms: number): Promise {
- return new Promise((resolve) => setTimeout(resolve, ms));
- }
-}
diff --git a/packages/meshy-content-generator/src/schemas/definitions.ts b/packages/meshy-content-generator/src/schemas/definitions.ts
deleted file mode 100644
index 7c07b93a..00000000
--- a/packages/meshy-content-generator/src/schemas/definitions.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-import { z } from "zod";
-
-const inputSource = z.enum(["manifest", "step", "literal", "env", "lookup"]);
-
-export const InputBindingSchema = z.object({
- name: z.string(),
- source: inputSource,
- path: z.string().optional(),
- step: z.string().optional(),
- table: z.string().optional(),
- key: z.string().optional(),
- value: z.unknown().optional(),
- default: z.unknown().optional(),
-});
-
-export const OutputBindingSchema = z.object({
- name: z.string(),
- responsePath: z.string(),
- artifact: z.string().optional(),
-});
-
-export const TaskDefinitionSchema = z.object({
- id: z.string(),
- description: z.string().optional(),
- apiVersion: z.string().optional(),
- endpoint: z.string().optional(),
- method: z.enum(["GET", "POST", "DELETE"]).optional(),
- inputs: z.array(InputBindingSchema).default([]),
- outputs: z.array(OutputBindingSchema).default([]),
- poll: z
- .object({
- strategy: z.enum(["stream", "poll"]).default("stream"),
- path: z.string(),
- intervalMs: z.number().int().positive().optional(),
- timeoutMs: z.number().int().positive().optional(),
- })
- .optional(),
-});
-
-export const PipelineStepSchema = z.object({
- id: z.string(),
- task: z.string(),
- dependsOn: z.array(z.string()).optional(),
- forEach: z
- .object({
- source: inputSource,
- path: z.string().optional(),
- step: z.string().optional(),
- table: z.string().optional(),
- key: z.string().optional(),
- as: z.string(),
- })
- .optional(),
- inputs: z.array(InputBindingSchema).optional(),
- stateMapping: z.record(z.string(), z.string()).optional(),
- /** Skip downloading artifacts for this step. Useful for interim pipeline stages. */
- skipArtifacts: z.boolean().optional(),
-});
-
-export const PipelineDefinitionSchema = z.object({
- name: z.string(),
- description: z.string().optional(),
- version: z.string().optional(),
- steps: z.array(PipelineStepSchema),
- stateMapping: z.record(z.string(), z.string()).optional(),
-});
-
-export type InputBinding = z.infer;
-export type OutputBinding = z.infer;
-export type TaskDefinition = z.infer;
-export type PipelineStep = z.infer;
-export type PipelineDefinition = z.infer;
diff --git a/packages/meshy-content-generator/src/schemas/manifest.ts b/packages/meshy-content-generator/src/schemas/manifest.ts
deleted file mode 100644
index dbf2b99d..00000000
--- a/packages/meshy-content-generator/src/schemas/manifest.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { z } from "zod";
-
-export const TaskStateSchema = z
- .object({
- taskId: z.string().optional(),
- status: z.enum(["PENDING", "IN_PROGRESS", "SUCCEEDED", "FAILED", "CANCELED"]).optional(),
- outputs: z.record(z.string(), z.unknown()).optional(),
- artifacts: z.record(z.string(), z.string()).optional(),
- })
- .passthrough();
-
-export const AssetManifestSchema = z
- .object({
- id: z.string(),
- name: z.string(),
- type: z.string(),
- seed: z.number().int().nonnegative().optional(),
- tasks: z.record(z.string(), TaskStateSchema).optional(),
- })
- .passthrough();
-
-export type AssetManifest = z.infer;
-export type TaskState = z.infer;
diff --git a/packages/meshy-content-generator/src/styles/global.css b/packages/meshy-content-generator/src/styles/global.css
deleted file mode 100644
index 94dbde3a..00000000
--- a/packages/meshy-content-generator/src/styles/global.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- Meshy Content Generator Documentation Portal
-
- BRANDING HIERARCHY:
- 1. Enterprise base (jbcom.github.io) - fonts, core colors, layout
- 2. Org theme - accent colors (below)
- 3. Org customizations - unique to this org
-
- Part of the jbcom Enterprise ecosystem
-*/
-
-/* ===== LAYER 1: Enterprise Base ===== */
-@import url("https://raw.githubusercontent.com/jbcom/jbcom.github.io/main/enterprise-branding/starlight-base.css");
-
-/* ===== LAYER 2: Org Theme (Purple) ===== */
-:root {
- --sl-color-accent-low: #2e1065;
- --sl-color-accent: #8b5cf6;
- --sl-color-accent-high: #ddd6fe;
- --sl-color-text-accent: #8b5cf6;
-}
-
-/* ===== LAYER 3: Org-Specific Customizations ===== */
diff --git a/packages/meshy-content-generator/src/utils/json.ts b/packages/meshy-content-generator/src/utils/json.ts
deleted file mode 100644
index b2616f53..00000000
--- a/packages/meshy-content-generator/src/utils/json.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import fs from "node:fs";
-
-export function readJson(filePath: string): T {
- const raw = fs.readFileSync(filePath, "utf-8");
- return JSON.parse(raw) as T;
-}
-
-export function writeJson(filePath: string, value: unknown): void {
- fs.writeFileSync(filePath, JSON.stringify(value, null, 2));
-}
diff --git a/packages/meshy-content-generator/src/utils/object-path.ts b/packages/meshy-content-generator/src/utils/object-path.ts
deleted file mode 100644
index 35cbff4d..00000000
--- a/packages/meshy-content-generator/src/utils/object-path.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-export function getPathValue(obj: unknown, path: string): unknown {
- if (!path) return undefined;
- const parts = path.split(".").filter(Boolean);
- let current: unknown = obj;
- for (const part of parts) {
- if (current === null || current === undefined) return undefined;
- if (typeof current !== "object") return undefined;
- const record = current as Record;
- current = record[part];
- }
- return current;
-}
-
-export function setPathValue(obj: Record, path: string, value: unknown): void {
- const parts = path.split(".").filter(Boolean);
- if (parts.length === 0) return;
- let current: Record = obj;
- for (let i = 0; i < parts.length - 1; i += 1) {
- const part = parts[i] as string;
- const next = current[part];
- if (!next || typeof next !== "object") {
- current[part] = {};
- }
- current = current[part] as Record;
- }
- const lastPart = parts[parts.length - 1];
- if (lastPart !== undefined) {
- current[lastPart] = value;
- }
-}
diff --git a/packages/meshy-content-generator/src/utils/template.ts b/packages/meshy-content-generator/src/utils/template.ts
deleted file mode 100644
index 817d7709..00000000
--- a/packages/meshy-content-generator/src/utils/template.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-const TEMPLATE_REGEX = /\{\{\s*([\w.-]+)\s*\}\}/g;
-
-export function applyTemplate(value: string, vars: Record): string {
- return value.replace(TEMPLATE_REGEX, (_match, key) => {
- const resolved = vars[key];
- return resolved === undefined || resolved === null ? "" : String(resolved);
- });
-}
diff --git a/packages/meshy-content-generator/tasks/definitions/animation.json b/packages/meshy-content-generator/tasks/definitions/animation.json
deleted file mode 100644
index 6517ed62..00000000
--- a/packages/meshy-content-generator/tasks/definitions/animation.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "id": "animation",
- "apiVersion": "v1",
- "endpoint": "animations",
- "method": "POST",
- "inputs": [
- {
- "name": "rig_task_id",
- "source": "literal"
- },
- {
- "name": "action_id",
- "source": "lookup",
- "table": "ANIMATION_IDS",
- "key": "{{animationName}}"
- }
- ],
- "outputs": [
- {
- "name": "taskId",
- "responsePath": "result"
- },
- {
- "name": "animation",
- "responsePath": "result.animation_glb_url",
- "artifact": "animations/{{animationName}}.glb"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/tasks/definitions/multi-image-to-3d.json b/packages/meshy-content-generator/tasks/definitions/multi-image-to-3d.json
deleted file mode 100644
index bd1fa427..00000000
--- a/packages/meshy-content-generator/tasks/definitions/multi-image-to-3d.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- "id": "multi-image-to-3d",
- "apiVersion": "v2",
- "endpoint": "multi-image-to-3d",
- "method": "POST",
- "inputs": [
- {
- "name": "image_urls",
- "source": "literal"
- },
- {
- "name": "ai_model",
- "source": "literal",
- "value": "latest"
- },
- {
- "name": "topology",
- "source": "manifest",
- "path": "multiImageTo3DTask.topology",
- "default": "quad"
- },
- {
- "name": "target_polycount",
- "source": "manifest",
- "path": "multiImageTo3DTask.targetPolycount",
- "default": 30000
- },
- {
- "name": "symmetry_mode",
- "source": "manifest",
- "path": "multiImageTo3DTask.symmetryMode",
- "default": "auto"
- },
- {
- "name": "should_remesh",
- "source": "manifest",
- "path": "multiImageTo3DTask.shouldRemesh",
- "default": true
- },
- {
- "name": "should_texture",
- "source": "manifest",
- "path": "multiImageTo3DTask.shouldTexture",
- "default": true
- },
- {
- "name": "enable_pbr",
- "source": "manifest",
- "path": "multiImageTo3DTask.enablePbr",
- "default": false
- },
- {
- "name": "pose_mode",
- "source": "manifest",
- "path": "multiImageTo3DTask.poseMode",
- "default": "a-pose"
- },
- {
- "name": "texture_prompt",
- "source": "manifest",
- "path": "multiImageTo3DTask.texturePrompt"
- }
- ],
- "outputs": [
- {
- "name": "taskId",
- "responsePath": "id"
- },
- {
- "name": "model",
- "responsePath": "result.model_urls.glb",
- "artifact": "model.glb"
- },
- {
- "name": "textures",
- "responsePath": "result.texture_urls"
- },
- {
- "name": "textureUrl",
- "responsePath": "result.texture_urls.0.base_color"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/tasks/definitions/rigging.json b/packages/meshy-content-generator/tasks/definitions/rigging.json
deleted file mode 100644
index ba494f48..00000000
--- a/packages/meshy-content-generator/tasks/definitions/rigging.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "id": "rigging",
- "apiVersion": "v1",
- "endpoint": "rigging",
- "method": "POST",
- "inputs": [
- {
- "name": "input_task_id",
- "source": "literal"
- },
- {
- "name": "height_meters",
- "source": "manifest",
- "path": "riggingTask.heightMeters",
- "default": 1.7
- },
- {
- "name": "texture_image_url",
- "source": "literal"
- }
- ],
- "outputs": [
- {
- "name": "taskId",
- "responsePath": "id"
- },
- {
- "name": "riggedModel",
- "responsePath": "result.rigged_character_glb_url",
- "artifact": "rigged.glb"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/tasks/definitions/text-to-3d-preview.json b/packages/meshy-content-generator/tasks/definitions/text-to-3d-preview.json
deleted file mode 100644
index 4d1277e9..00000000
--- a/packages/meshy-content-generator/tasks/definitions/text-to-3d-preview.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "id": "text-to-3d-preview",
- "apiVersion": "v2",
- "endpoint": "text-to-3d",
- "method": "POST",
- "inputs": [
- {
- "name": "mode",
- "source": "literal",
- "value": "preview"
- },
- {
- "name": "prompt",
- "source": "manifest",
- "path": "textTo3DPreviewTask.prompt"
- },
- {
- "name": "art_style",
- "source": "manifest",
- "path": "textTo3DPreviewTask.artStyle",
- "default": "realistic"
- },
- {
- "name": "ai_model",
- "source": "manifest",
- "path": "textTo3DPreviewTask.aiModel",
- "default": "latest"
- },
- {
- "name": "topology",
- "source": "manifest",
- "path": "textTo3DPreviewTask.topology",
- "default": "quad"
- },
- {
- "name": "target_polycount",
- "source": "manifest",
- "path": "textTo3DPreviewTask.targetPolycount",
- "default": 30000
- },
- {
- "name": "should_remesh",
- "source": "manifest",
- "path": "textTo3DPreviewTask.shouldRemesh",
- "default": true
- },
- {
- "name": "symmetry_mode",
- "source": "manifest",
- "path": "textTo3DPreviewTask.symmetryMode",
- "default": "auto"
- },
- {
- "name": "pose_mode",
- "source": "manifest",
- "path": "textTo3DPreviewTask.poseMode",
- "default": ""
- },
- {
- "name": "moderation",
- "source": "manifest",
- "path": "textTo3DPreviewTask.moderation",
- "default": false
- }
- ],
- "outputs": [
- {
- "name": "taskId",
- "responsePath": "id"
- },
- {
- "name": "model",
- "responsePath": "result.model_urls.glb",
- "artifact": "preview.glb"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/tasks/definitions/text-to-3d-refine.json b/packages/meshy-content-generator/tasks/definitions/text-to-3d-refine.json
deleted file mode 100644
index 736e5a62..00000000
--- a/packages/meshy-content-generator/tasks/definitions/text-to-3d-refine.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "id": "text-to-3d-refine",
- "apiVersion": "v2",
- "endpoint": "text-to-3d",
- "method": "POST",
- "inputs": [
- {
- "name": "mode",
- "source": "literal",
- "value": "refine"
- },
- {
- "name": "preview_task_id",
- "source": "literal"
- },
- {
- "name": "texture_prompt",
- "source": "manifest",
- "path": "textTo3DRefineTask.texturePrompt"
- },
- {
- "name": "enable_pbr",
- "source": "manifest",
- "path": "textTo3DRefineTask.enablePbr",
- "default": false
- },
- {
- "name": "moderation",
- "source": "manifest",
- "path": "textTo3DRefineTask.moderation",
- "default": false
- }
- ],
- "outputs": [
- {
- "name": "taskId",
- "responsePath": "id"
- },
- {
- "name": "model",
- "responsePath": "result.model_urls.glb",
- "artifact": "refined.glb"
- },
- {
- "name": "textures",
- "responsePath": "result.texture_urls"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/tasks/definitions/text-to-image-download.json b/packages/meshy-content-generator/tasks/definitions/text-to-image-download.json
deleted file mode 100644
index ce172656..00000000
--- a/packages/meshy-content-generator/tasks/definitions/text-to-image-download.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "id": "text-to-image-download",
- "description": "Generate images from text prompts with automatic artifact download",
- "apiVersion": "v1",
- "endpoint": "text-to-image",
- "method": "POST",
- "inputs": [
- {
- "name": "prompt",
- "source": "manifest",
- "path": "textToImageTask.prompt"
- },
- {
- "name": "ai_model",
- "source": "manifest",
- "path": "textToImageTask.aiModel",
- "default": "nano-banana"
- },
- {
- "name": "generate_multi_view",
- "source": "manifest",
- "path": "textToImageTask.generateMultiView",
- "default": false
- },
- {
- "name": "pose_mode",
- "source": "manifest",
- "path": "textToImageTask.poseMode",
- "default": ""
- },
- {
- "name": "aspect_ratio",
- "source": "manifest",
- "path": "textToImageTask.aspectRatio",
- "default": "1:1"
- }
- ],
- "outputs": [
- {
- "name": "images",
- "responsePath": "result.image_urls",
- "artifact": "concept-{{index}}.png"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/tasks/definitions/text-to-image.json b/packages/meshy-content-generator/tasks/definitions/text-to-image.json
deleted file mode 100644
index 5cfcdea8..00000000
--- a/packages/meshy-content-generator/tasks/definitions/text-to-image.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "id": "text-to-image",
- "apiVersion": "v1",
- "endpoint": "text-to-image",
- "method": "POST",
- "inputs": [
- {
- "name": "prompt",
- "source": "manifest",
- "path": "textToImageTask.prompt"
- },
- {
- "name": "ai_model",
- "source": "manifest",
- "path": "textToImageTask.aiModel",
- "default": "nano-banana"
- },
- {
- "name": "generate_multi_view",
- "source": "manifest",
- "path": "textToImageTask.generateMultiView",
- "default": false
- },
- {
- "name": "pose_mode",
- "source": "manifest",
- "path": "textToImageTask.poseMode",
- "default": ""
- },
- {
- "name": "aspect_ratio",
- "source": "manifest",
- "path": "textToImageTask.aspectRatio",
- "default": "1:1"
- }
- ],
- "outputs": [
- {
- "name": "images",
- "responsePath": "result.image_urls"
- }
- ]
-}
diff --git a/packages/meshy-content-generator/test/__recordings__/meshy-character-full_1171058505/recording.har b/packages/meshy-content-generator/test/__recordings__/meshy-character-full_1171058505/recording.har
deleted file mode 100644
index d656a84d..00000000
--- a/packages/meshy-content-generator/test/__recordings__/meshy-character-full_1171058505/recording.har
+++ /dev/null
@@ -1,789 +0,0 @@
-{
- "log": {
- "_recordingName": "meshy-character-full",
- "creator": {
- "comment": "persister:fs",
- "name": "Polly.JS",
- "version": "6.0.6"
- },
- "entries": [
- {
- "_id": "3daba821e85df17fb40447250893e1d1",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 168,
- "cookies": [],
- "headers": [
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- },
- {
- "name": "content-type",
- "value": "application/json"
- }
- ],
- "headersSize": 159,
- "httpVersion": "HTTP/1.1",
- "method": "POST",
- "postData": {
- "mimeType": "application/json",
- "params": [],
- "text": "{\"prompt\":\"A stylized anime hero standing on a rooftop, clean line art, neutral lighting\",\"ai_model\":\"nano-banana-pro\",\"generate_multi_view\":false,\"aspect_ratio\":\"1:1\"}"
- },
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v1/text-to-image"
- },
- "response": {
- "bodySize": 49,
- "content": {
- "mimeType": "application/json; charset=utf-8",
- "size": 49,
- "text": "{\"result\":\"019c03fc-bce6-719f-bc39-1aec5e30ed42\"}"
- },
- "cookies": [],
- "headers": [
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-length",
- "value": "49"
- },
- {
- "name": "content-type",
- "value": "application/json; charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:43:41 GMT"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 158,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 202,
- "statusText": "Accepted"
- },
- "startedDateTime": "2026-01-28T09:43:40.775Z",
- "time": 245,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 245
- }
- },
- {
- "_id": "d016a4b531cce28045be8c8b477131f6",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 0,
- "cookies": [],
- "headers": [
- {
- "name": "accept",
- "value": "text/event-stream"
- },
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- }
- ],
- "headersSize": 197,
- "httpVersion": "HTTP/1.1",
- "method": "GET",
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v1/text-to-image/019c03fc-bce6-719f-bc39-1aec5e30ed42/stream"
- },
- "response": {
- "bodySize": 1847,
- "content": {
- "mimeType": "text/event-stream;charset=utf-8",
- "size": 1847,
- "text": "event:message\ndata:{\"id\":\"019c03fc-bce6-719f-bc39-1aec5e30ed42\",\"type\":\"text-to-image\",\"ai_model\":\"nano-banana-pro\",\"prompt\":\"A stylized anime hero standing on a rooftop, clean line art, neutral lighting\",\"status\":\"IN_PROGRESS\",\"progress\":30,\"created_at\":1769593421069,\"started_at\":1769593421102}\n\n: keep-alive\n\n: keep-alive\n\n: keep-alive\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fc-bce6-719f-bc39-1aec5e30ed42\",\"type\":\"text-to-image\",\"ai_model\":\"nano-banana-pro\",\"prompt\":\"A stylized anime hero standing on a rooftop, clean line art, neutral lighting\",\"status\":\"IN_PROGRESS\",\"progress\":90,\"created_at\":1769593421069,\"started_at\":1769593421102}\n\nevent:message\ndata:{\"id\":\"019c03fc-bce6-719f-bc39-1aec5e30ed42\",\"type\":\"text-to-image\",\"ai_model\":\"nano-banana-pro\",\"prompt\":\"A stylized anime hero standing on a rooftop, clean line art, neutral lighting\",\"status\":\"IN_PROGRESS\",\"progress\":99,\"created_at\":1769593421069,\"started_at\":1769593421102}\n\nevent:message\ndata:{\"id\":\"019c03fc-bce6-719f-bc39-1aec5e30ed42\",\"type\":\"text-to-image\",\"ai_model\":\"nano-banana-pro\",\"prompt\":\"A stylized anime hero standing on a rooftop, clean line art, neutral lighting\",\"status\":\"SUCCEEDED\",\"progress\":100,\"created_at\":1769593421069,\"started_at\":1769593421102,\"finished_at\":1769593470339,\"expires_at\":1769852670339,\"image_urls\":[\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/uploads/image_019c03fc-bce6-719f-bc39-1aec5e30ed42_0.png?Expires=1769852670\\u0026Signature=D22rn-UytVX9pvEZPXcFtGgIMEebBcops88xnY-aXsvj~5hxtih2Nndl8GCFw7kFU~wtVWuq3tcP0Rjgkot7eM7gouw28canZNLYuzAGiwZm~kGX0aAheR2D6v7H42~60rOVzKWVYaNnWAEXPxRA38N7w49JSOrTwMCVTLFNLiLA6svERdKclhT~vFdbm8j~eISZhR-XdEw5jDsGLpybC0c7IOxlvLcyA0G9jp5E4YShOdwGm~JPc9CencsL-AVzqx6pSfHbv28QYZT1MbpjPGiYdn1mpPOUto63AeTapxmTFb5zMjSkAU2~EmehIYSUfx~iDfkvOExAdg~gvK16lg__\\u0026Key-Pair-Id=KL5I0C8H7HX83\"]}\n\n"
- },
- "cookies": [],
- "headers": [
- {
- "name": "cache-control",
- "value": "no-cache"
- },
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-type",
- "value": "text/event-stream;charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:43:41 GMT"
- },
- {
- "name": "transfer-encoding",
- "value": "chunked"
- },
- {
- "name": "x-accel-buffering",
- "value": "no"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 214,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 200,
- "statusText": "OK"
- },
- "startedDateTime": "2026-01-28T09:43:41.021Z",
- "time": 49268,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 49268
- }
- },
- {
- "_id": "246ffbfd3dae2fcf2195f24555b2282a",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 246,
- "cookies": [],
- "headers": [
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- },
- {
- "name": "content-type",
- "value": "application/json"
- }
- ],
- "headersSize": 156,
- "httpVersion": "HTTP/1.1",
- "method": "POST",
- "postData": {
- "mimeType": "application/json",
- "params": [],
- "text": "{\"mode\":\"preview\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"art_style\":\"realistic\",\"ai_model\":\"latest\",\"topology\":\"quad\",\"target_polycount\":30000,\"should_remesh\":true,\"symmetry_mode\":\"auto\",\"moderation\":false}"
- },
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v2/text-to-3d"
- },
- "response": {
- "bodySize": 49,
- "content": {
- "mimeType": "application/json; charset=utf-8",
- "size": 49,
- "text": "{\"result\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\"}"
- },
- "cookies": [],
- "headers": [
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-length",
- "value": "49"
- },
- {
- "name": "content-type",
- "value": "application/json; charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:44:30 GMT"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 158,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 202,
- "statusText": "Accepted"
- },
- "startedDateTime": "2026-01-28T09:44:30.294Z",
- "time": 341,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 341
- }
- },
- {
- "_id": "edcc5806d4c397deb9bc663c19bed700",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 0,
- "cookies": [],
- "headers": [
- {
- "name": "accept",
- "value": "text/event-stream"
- },
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- }
- ],
- "headersSize": 194,
- "httpVersion": "HTTP/1.1",
- "method": "GET",
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v2/text-to-3d/019c03fd-7e45-73ca-9b94-7cf5d4aa6abc/stream"
- },
- "response": {
- "bodySize": 12671,
- "content": {
- "mimeType": "text/event-stream;charset=utf-8",
- "size": 12671,
- "text": "event:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"PENDING\",\"created_at\":1769593470684,\"progress\":0,\"preceding_tasks\":1,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":10,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":18,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":23,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":28,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":34,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":39,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":45,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":50,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":55,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":61,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":66,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":72,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":77,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":82,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":88,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":93,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593470684,\"progress\":99,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\n: keep-alive\n\n: keep-alive\n\n: keep-alive\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"type\":\"text-to-3d-preview\",\"mode\":\"preview\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"\",\"texture_image_url\":\"\",\"status\":\"SUCCEEDED\",\"created_at\":1769593470684,\"progress\":100,\"started_at\":1769593470801,\"finished_at\":1769593560692,\"task_error\":null,\"model_urls\":{\"glb\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fd-7e45-73ca-9b94-7cf5d4aa6abc/output/model.glb?Expires=4923158400\\u0026Signature=MMimAlrNUq225Yz0muXpeX4spUDrvXGZwWscKAGAA5NCBJBZubb~zoA7F8Ggcdri8HN7HqXLWUKjcvMZRJypfZf6vi63tG6ywaP1FN8u-6qsgjzUbL4VihWetnawzB4lb45QSy5IgcfKoSa-CXz0xt55fhddlkWUavpftyi5Rq9MZN6NUiOq-NNQPk4RbX3PTzIAZw16y6-9OLx0zg30iZxmdhv4kgMT3Sizk0QXXH43blkPf153UN30OZLbARGVJfLNe~uia7kPB1C5nFOhL3xlcGONFn7AMBE7pQa~XTlhtqmoSuKuoNP8w9HvDqjSiiB2FdOIn9OJLvMOjcdgeQ__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"fbx\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fd-7e45-73ca-9b94-7cf5d4aa6abc/output/model.fbx?Expires=4923158400\\u0026Signature=LoHt4g2Vcjcqbjrp9vJ330yuXsXCvmrd6K0d6eM6DsyUov7kcb1yiD7aKTvnStIQBnna5aNoth6e-7Zo8hfrt3ndVIywNP6VSBImuVa-9nGaVT9r-2uUGHkZVDCL81bCztPj9FNIo1cLXR9KxvLtG7mHp5ft7F1UUyrRL~qJxPm7Dyhtvn7viApI714836zWFQ6T703qN0TIPyEeHX7gHH5q~V4AQGk-yMXQLqJtuVdIfrW2YjI2bjZr90Gnb7zgauq53Oo0Rg2XbB3DQ1KnnxZZBNNw-JCx4Ev-gqZ0FIY6oYsVc8Cx~HF-Bv9HEJoGs6E4wD9eavy9JZ552LRS9A__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"usdz\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fd-7e45-73ca-9b94-7cf5d4aa6abc/output/model.usdz?Expires=4923158400\\u0026Signature=c-bJ5fHZjPmVvuhafYywfvFovzvvJ4pgo1Dp5deDQwa483nuXs6zM6jdInx7pLoUJBurPNW-Hrq4A4dC3SD7r8Ccs043qmyplekT4LfZuqN4D2t7ydlxwOyV51r0Zx2kE6YRAbWhPWAaJbtgjm6JuEyG7SkBhFU6psjt6pqTDYKLbbu5M9Z4OqCNn4cpx4bCRiZglILXKgU6C~zbHhElirzpH7ToKe4YV9gFDmpyTnMwL8Z42MckSH9dtADoNml1XuXRBy-amqcAFURcKrfsgyIww7Wc9ISAYJRnV1S3ooXGALkM-YtZKoMlQblGQMlkK0KE55gZdlI630o3m8gGDg__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"obj\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fd-7e45-73ca-9b94-7cf5d4aa6abc/output/model.obj?Expires=4923158400\\u0026Signature=JI4TU~hHI0BRreydayBP-RacxxeZmOTTFosSlvhShAnb3lY57rjlNGbK3B0pC8oGfXsGb-pq4twAxYijolK4IlDFpbEv80jP7Ae9JLWtnGA731K960oDzrBbXWTgydd6R84OFNI9jqK3onQKop3WBE8axnt4L5ehtucum~Wzq8nXZrjj-tegfcv8GdU3cJ1kwC844pjW87nTOkS1Hj07RKz7PyJGxn6UTx4-5UHdQhIsOGCe8G~~0qBb5S~6uYhmCy4sdiuchzuE-8WKra06pLOslcGRt6qwGKueoboZDU9-6H-7yUa-hItEZPg3L0Jdh-Sq7KkFwS5~P9PCVjQRLw__\\u0026Key-Pair-Id=KL5I0C8H7HX83\"},\"thumbnail_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fd-7e45-73ca-9b94-7cf5d4aa6abc/output/preview.png?Expires=4923158400\\u0026Signature=GA4ksWHCW7z4zxLuQVaZXH49XlRV-MGACgA4CNfEgfKD3zvgbzAYRQ8BdRttpzOXOQZBREi~GWe-MFFqSheSTnAnMlYFPlhuGc-P5les8SFUCeP8ZW8gteHLoF3gMVb6AjzlsHMbWrUIkEEpWc2Mvv2dMikNizVzbpPvnjS7nH6yBdfnAyShWYLs~-snyVkMjlRNpwFWfOiF3L4ZLVqJS-Ygs570vLgaQ1UN-G9p4lCwLMYfc56lvksKq045Nv4F6KSeLNSWBcA5rp6ZMlzw-tKDyMIUU1RpOSGtZvG5eLvxiVWgcPmhpzCKFHJzidpZFdkxa2rh0XRz5xk5oTJLJA__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"video_url\":\"\",\"texture_urls\":[]}\n\n"
- },
- "cookies": [],
- "headers": [
- {
- "name": "cache-control",
- "value": "no-cache"
- },
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-type",
- "value": "text/event-stream;charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:44:30 GMT"
- },
- {
- "name": "transfer-encoding",
- "value": "chunked"
- },
- {
- "name": "x-accel-buffering",
- "value": "no"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 214,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 200,
- "statusText": "OK"
- },
- "startedDateTime": "2026-01-28T09:44:30.636Z",
- "time": 90116,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 90116
- }
- },
- {
- "_id": "f5d390bc73607104f60779d58e71024c",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 195,
- "cookies": [],
- "headers": [
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- },
- {
- "name": "content-type",
- "value": "application/json"
- }
- ],
- "headersSize": 156,
- "httpVersion": "HTTP/1.1",
- "method": "POST",
- "postData": {
- "mimeType": "application/json",
- "params": [],
- "text": "{\"mode\":\"refine\",\"preview_task_id\":\"019c03fd-7e45-73ca-9b94-7cf5d4aa6abc\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"enable_pbr\":false,\"moderation\":false}"
- },
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v2/text-to-3d"
- },
- "response": {
- "bodySize": 49,
- "content": {
- "mimeType": "application/json; charset=utf-8",
- "size": 49,
- "text": "{\"result\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\"}"
- },
- "cookies": [],
- "headers": [
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-length",
- "value": "49"
- },
- {
- "name": "content-type",
- "value": "application/json; charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:46:01 GMT"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 158,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 202,
- "statusText": "Accepted"
- },
- "startedDateTime": "2026-01-28T09:46:00.754Z",
- "time": 345,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 345
- }
- },
- {
- "_id": "b853d89357466e5d5e1110040e634326",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 0,
- "cookies": [],
- "headers": [
- {
- "name": "accept",
- "value": "text/event-stream"
- },
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- }
- ],
- "headersSize": 194,
- "httpVersion": "HTTP/1.1",
- "method": "GET",
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v2/text-to-3d/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/stream"
- },
- "response": {
- "bodySize": 20839,
- "content": {
- "mimeType": "text/event-stream;charset=utf-8",
- "size": 20839,
- "text": "event:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"PENDING\",\"created_at\":1769593561149,\"progress\":0,\"preceding_tasks\":1,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":5,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":10,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":15,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":20,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":25,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":25,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":25,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":25,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":26,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":28,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":33,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":36,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":40,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":50,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":60,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":60,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":60,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":60,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":61,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":66,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":71,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":76,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":81,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":86,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":96,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":97,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593561149,\"progress\":99,\"started_at\":0,\"finished_at\":0,\"task_error\":null,\"model_urls\":{\"glb\":\"\"},\"thumbnail_url\":\"\",\"video_url\":\"\",\"texture_urls\":null}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"type\":\"text-to-3d-refine\",\"mode\":\"refine\",\"name\":\"\",\"seed\":3504613218,\"art_style\":\"realistic\",\"texture_richness\":\"high\",\"prompt\":\"Stylized anime hero character with clean silhouette, standing pose\",\"negative_prompt\":\"\",\"texture_prompt\":\"Cel-shaded anime materials, crisp outlines, subtle fabric weave\",\"texture_image_url\":\"\",\"status\":\"SUCCEEDED\",\"created_at\":1769593561149,\"progress\":100,\"started_at\":1769593561700,\"finished_at\":1769593652653,\"task_error\":null,\"model_urls\":{\"glb\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/output/model.glb?Expires=4923158400\\u0026Signature=js4OWKqg6g4wTuU7CGncTRqe~VUxZt9HKLQ1VhMCK61yTBItVtdWXAgJL9vjI7UQ1HniuCJHEQ6V55v4FqCm1zNyZ6C-EZrodX7PNT3I9zyaYq0deAwTZWci5AUpegIUoo7uUvRbdtSoJ8xt0BdZaHI06vEpljfbk1rM5e-lDnD8HOwasLaRoKbUmG0vzo8cV74~5apt3MPmsQMXO2Z1BEq1jZql19oItR~gFBr2TSy6q-U2FIpKNHQnufuIeWA~b8qvcbmdS-Mq6m-QGhqJp5g0mLhSXgU1nsQ8W2bAbe~uUD~dJCg4HFxGLvpZVbOUzgIk34LMUxrwKnpg6p9PEg__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"fbx\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/output/model.fbx?Expires=4923158400\\u0026Signature=rl43uQR8zpgGXhnoxFjkH5pecwpNf8YpqzYT4D19lTEh6wReiKoM4XVHbffghA1hepP21OBQHbBp-6Qg50bl5Er8JJqTd4FgF2QubU38D-amfvKlYa5DpglqtLlHBY0bPWYL7e3Lz7A9BP5gFrp70c-WM7hqdPnMR3G1yfW2zj9~Kxqc4LLYDoWZcOM-V49KcsiWKqqsFFTr3bQTVBaptgl39x2RtDg-vZkfccxfs2W-WNFsQaEan~lG2kJC0yWp9-UPpQgHE1WQDeU8jlQs4zpgbxbKEKalXT~~T9TGsapvXCgRcFqaQ3goSGOgCuue9EKaWBhJgWgy5ap1Ykdesg__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"usdz\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/output/model.usdz?Expires=4923158400\\u0026Signature=LCq~vE7Lny5MwBrLDz0lrotYWbL7uZ1MdIHWhSV-7qPjQ1cXoe7aby5u1srPcpX5q-lEccqxVzaXr~X9L7nRIO5-QDtwwhXQUrU4YjOwaIg2aDtMOPr-1vJoN8-xaWMFZ293ZxQx9ZjubFA1CASiy-ENatW~itLREPfGhvuuLXtIlFlP917CvSYG2C3W4DLxr2ksZQbgZdVo59sJRVnrwFZmBDkrrLLJBZezDgIVbLuLRASj0gIvDSe-~sqkZCKBMrhPNuYIqtZ-zyuNMqNBOaOWjs16fIyI2huSSzjgWkZfFUBlx7RwelzXp5Av3ZMH474J~O6mUwRzrcZNXhRgRA__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"obj\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/output/model.obj?Expires=4923158400\\u0026Signature=aeh~nBaRlhDClfiObUWz1qqWinW2N5BLaxZrUgA3B4YxZTAdd-t7l2tWmafpMMfiHC4NAIBz2dhJnhngKrVeBozxXWWtXinkKFr3Ura8xXIXXg~aVma3W4VmTZaL3FTb62Eoimi7HVnKogyUnUkg1gWwwYU6AvCK-tI7YsSMo5Po~3BnaL9mF8C81OwUZXHjTRFVtlwZs1ADnVV1OwhnIuEJDBb6tNHitcii99Ta8StFVrG6xqXyoX3FJ8bro130qREkwSTAqQtKu1wij1G2teLZ7yWN3-vUD40Wp~r3cA7CXESPdEj1ZAOJOqP-CfPuMyV6Sdbh6zt2txEYd2PZTQ__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"mtl\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/output/model.mtl?Expires=4923158400\\u0026Signature=L94QevbTFdyq21RWQS2kYkHvPoxMVWwIUNVrsRbv3lZ1k3dlF6Ao-twemUDzbxd9B1cnXXUYi6XKrAfF2cG2rsIDTmmHdykukNlklzce4eSdL7YhQNKtm~X15uUgpVsroULEm8eLbKupDfF-Z-JM8urdYgxmOFCw9J-DAhL8pLTSNjSP6~vJied4SsoHhwf8MVAziANswseFRWdLOyqSOYTDIWhWLsJdJuxYfEpcFMco42q0uMsAO-XsZjWOuTNStU2a8gbA4ypxG4dG~EbSmximzKqbJh5CjbO667Jqs5Ubeyw54FW6yBpVBgBRppK9OCAEfcdAmlX7dzIkgT3S7w__\\u0026Key-Pair-Id=KL5I0C8H7HX83\"},\"thumbnail_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/output/preview.png?Expires=4923158400\\u0026Signature=Pa2UkTFZMRhzwt05b7PbdNAPJVrOLJHqbyQi-jSjVAMAQsHHP532ZE~WG5-x17i3wHGCOQUlyS32A820PvcYM3KELbNJss8x7pyY5WYd5IqBfn0NqkaRQTFNdJIlwr4oQDBpGM5pDaSAcsg-AflGoAv5nhfLhrdUXe6IoCd3NWLgbntGC~Dd~xSKO1b3EacP8llIf2zxxp~IqeCZvSezlnSOB38F7SgQBRs6QkCNqZHXVFFZT-90m7J1eomrYcNC~h1vgcjwkXD91Ue~BimLm6Qzew78Yx1cF6cVTXdZC-8Q91euOp0COBXIM1HJzEGXkswK276vnSfTfTaSkSF3HQ__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"video_url\":\"\",\"texture_urls\":[{\"base_color\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c03fe-df9c-7436-a6d5-0ba4ea3a42ce/output/texture_0.png?Expires=4923158400\\u0026Signature=CCIOu4IM0V-8LONSyLY3ryriihB6rv67DkvyXiAyMM51sD6-qKyyhG-a5wE9S2tUCYt6~5UxXntZatfxEAOMuRijlnOBI3auXRS7smTSbGMCsP7qwD-8-ypd~D6E4A4t2aCE-R4z4y4iPT28SPJSJsgBUqE6GWLw7Ja9tTKdQd8hmv3v-dohEG35tM959DU0UWFEfDMvUWywQ1RAJ-uUa9n1NymXJY4Rp4~u5rogW3pZ76-JsVC8eb4SnR55Q6aGDUgId7ixHO5wJa6F8x5HGbIxQg7XjIIO4LTpX7tfOEquqWXXrHpcumrmzAfB7lD4Tzuc6D-4kzO3-ZrMBwys6g__\\u0026Key-Pair-Id=KL5I0C8H7HX83\"}]}\n\n"
- },
- "cookies": [],
- "headers": [
- {
- "name": "cache-control",
- "value": "no-cache"
- },
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-type",
- "value": "text/event-stream;charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:46:01 GMT"
- },
- {
- "name": "transfer-encoding",
- "value": "chunked"
- },
- {
- "name": "x-accel-buffering",
- "value": "no"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 214,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 200,
- "statusText": "OK"
- },
- "startedDateTime": "2026-01-28T09:46:01.100Z",
- "time": 91756,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 91756
- }
- },
- {
- "_id": "5b7774e7f78ddae8eccc5b6d1952ebe4",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 76,
- "cookies": [],
- "headers": [
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- },
- {
- "name": "content-type",
- "value": "application/json"
- }
- ],
- "headersSize": 153,
- "httpVersion": "HTTP/1.1",
- "method": "POST",
- "postData": {
- "mimeType": "application/json",
- "params": [],
- "text": "{\"input_task_id\":\"019c03fe-df9c-7436-a6d5-0ba4ea3a42ce\",\"height_meters\":1.7}"
- },
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v1/rigging"
- },
- "response": {
- "bodySize": 50,
- "content": {
- "mimeType": "application/json; charset=utf-8",
- "size": 50,
- "text": "{\"result\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\"}\n"
- },
- "cookies": [],
- "headers": [
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-length",
- "value": "50"
- },
- {
- "name": "content-type",
- "value": "application/json; charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:47:36 GMT"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 158,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 202,
- "statusText": "Accepted"
- },
- "startedDateTime": "2026-01-28T09:47:32.857Z",
- "time": 4000,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 4000
- }
- },
- {
- "_id": "0b8fd638c62805f4c42f41cd4a4f9b7e",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 0,
- "cookies": [],
- "headers": [
- {
- "name": "accept",
- "value": "text/event-stream"
- },
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- }
- ],
- "headersSize": 191,
- "httpVersion": "HTTP/1.1",
- "method": "GET",
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v1/rigging/019c0400-4746-7ed6-9f28-0f3aaff57d3e/stream"
- },
- "response": {
- "bodySize": 8666,
- "content": {
- "mimeType": "text/event-stream;charset=utf-8",
- "size": 8666,
- "text": "event:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"PENDING\",\"created_at\":1769593656755,\"progress\":0,\"preceding_tasks\":1,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":1,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":10,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":15,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":20,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":26,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":31,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":36,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":42,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":47,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":52,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593656755,\"progress\":95,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"\",\"rigged_character_glb_url\":\"\",\"basic_animations\":null}}\n\nevent:message\ndata:{\"id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"type\":\"rig\",\"name\":\"\",\"status\":\"SUCCEEDED\",\"created_at\":1769593656755,\"progress\":100,\"started_at\":1769593657328,\"finished_at\":1769593676718,\"expires_at\":1769852876718,\"task_error\":null,\"result\":{\"rigged_character_fbx_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Character_output.fbx?Expires=1769852876\\u0026Signature=bTRbssRxFKq-ByhuxSorJ21LFjnxVdua-wLja8feyHWE3cTSFVKCGsk0t1k-JBb0u9~OmZhQyVFJALGl-FvTQ~LLtAcQ6xhBGNS3ipA5zrZkKT1eL9QSKsGgk3Mo6UWRaa9Fht1yKkpFfCNL3VPEICp~ojPM3dWH7xKIkGsKB3~oTrceiuxQTidZ3cCDDFgSnXTUox0sd-XHQGXU0BwofFr7A-SCCEtWfCiRVJir1wnqu6FN-vM~ZCjPGZgRwO6pGkptX~Rv2XKRhMbItesM1xiVPq63OY--GFHMq~xwEpCrz-3A2mZ6veFojoWHiY51igtD1jJay3JvoP6zq9oyeA__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"rigged_character_glb_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Character_output.glb?Expires=1769852876\\u0026Signature=KXyyBIbSh7reRlf9Zw3sYYGpe9d4EtScuMYQn~asnG0UTQxbgWc2B4-cS4ST1A4h~jBKJqQXXAvSjnIVWQOVwV~FaDUyw2gN~xqQmAwd2eT8BlLoSfbRE1q0PTttLu3WyvgI3oGVg~pzOg~9ulO8PA71paMamX0~0VmIc8uzabHGBFtwcZg5WnIYOCfk4vJXT4LjbQr5ssnzt4DB6sHjqI86ejU9OgV1B8t6ncZfN3zqcnBo2KxMyc4qJLnaTTC5Uera9QljAVeEzs86yH-ec4vHtfNDA6hprXfouwsGdhAEVHV7gDgxkTr-7uwCzTf~ffhsZj89IHETr1DVV1o3yg__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"basic_animations\":{\"walking_glb_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Animation_Walking_withSkin.glb?Expires=1769852876\\u0026Signature=c8szqrkFdSric2cxp7EsfQncyqoARkgh1d2Ed0v3J9~xqSD7fW~bx4MY6oDPCX9tp1xGPBby2kHYHllApv7sIPg-Ga0CwxcJgVwfscbUFlrCxqA-4JnQfqxLYXUkQrYQwjRHH8ktSIHZ7zAdcP5QsB9eSUfH9tlG0T2k58oI-I5D6Ddp~qNcNi70xnM4XxXfyYUEx7ors38WAXC-CGqoqyOiNVYo7oAFSHQ-c1TfinCbBQ9b-SquA70Yd2Kea0ZKuzNik-R8HQolCdFFeWYeVgFry0xSmTjxErkUifI8MgQwMH47yyWLYHxNldiQ5NG7Tqai-NY1QDzFUOPKQ4pBfg__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"walking_fbx_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Animation_Walking_withSkin.fbx?Expires=1769852876\\u0026Signature=khKutX14WR0eeP0JhoM4Nb7E1K2r-2iIgVlzSoQaqwbDjg8amdB5MMsM3OU5EYzauV14RqMzIAfSdgnrW9auGR4~UUwGG6IyY6F5g9U-vALHwJTNfIBtVprLgpGiXm2PiZVzq0CTsaJhtDWwRUNlRlfQNSCwio-YPO1391SRy-eFBQHsooBcOLPbHA8DNfUV~wznLVlxysq62Ox~FSKkI9B-C-nq78sLmd8SCpWjzVpnLQ6TfwgQrcmXJPOLxrugo1KnYY4KrUa1iNsC4vvrPPJZPb5902uDLBdio0-1EOqEmKBGu9v8Tlm1wZiQqj6vZgVJpYjeNnqGAVQelqgKIA__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"walking_armature_glb_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Animation_Walking_withSkin_armature.glb?Expires=1769852876\\u0026Signature=QaJlOFby-~5u5JYsFGb7oKR5oO2zIob2R55WaPXNxMEl8DoPGSuhBrU9~EcvmJeU84hGGUfHCEa3ya6utHzSzNEfyjDeJa0m7m4VL8rAAN~k7j4SfppzaEobq95Pb-uqj4r8rZPeDpvW~JLnpb1gYfcg~nytPU79wT3gXYfN6CmGrH3iFUHoDbe9-IxTXo6cM~ZLeLSy9nzY715qwPu8N0Dv6wS-QfDFihDxHfEZq19~OTt2Dki20EJZliBdYJ2FWpSAFbFcD-Sq7hDPnN-GWMWhgQtMRU6tKBc4FK3WOmwhYxFoX9LX~KLmGYEB25X-2Vfun3KbLRtzmYX1Ymy3Yg__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"running_glb_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Animation_Running_withSkin.glb?Expires=1769852876\\u0026Signature=RS2cCqJ90d8l-DrZVtUnnOe2MNVqzHOPe16BFzDF5ZDaG9VWVwJ72W8JVIw5yLvPCWTJV42RgtguhcwP-v53dAKkJVhtkNSXetidolRHSwAUSo7ulCOu7MwhlfDa5o7dR69gbV20D2lnUZqi~j5kNIP2~nDrW9-Htx06M9Jn6s5uGLPfCVCDKuYUhSnVdAUHv~W4DCwLgpGwukrUlzA-1gHnrYFMk53T-4Ku2dgfH-iCva5j~BxTgeyHPqcZOVzc5BovDJBSj5ktkK0uiTRAop-EeQdQxljzMxyau1MOKQYLQ0xypSoS5JJeKpW2k1WV4DdfUFxuu7Fab9jryMa1AQ__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"running_fbx_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Animation_Running_withSkin.fbx?Expires=1769852876\\u0026Signature=jwExnFPtz-hdkFGs2f5O7ObmUYjn8qrs6EUsDRyR-qKqD0iAkgtSzLQxNZXJ~yL6g5Pw2NtBIc-vfldCZWUVJKQqonnQ5jXWg2KIHksj0uxKaEyf7ff6aHzor3x6iyeQkS3L~oLs45sHgecpDuER1wDJUChLSPRbIWobnzib2tA45LEqcUsBX9V0KEbxE1VPXz6Rp7okS7a5wqBvR57AhmPGquW0QUrcD0lG5QSjPQwROlkFQ6L3rFIAC7E4OLSeUBEnwlEznAV-MOGIxblpAYZPx~1ZsVagHkAs20fEyvAsRaL1-WecRK8NjNb0pG~2sB9Ze9QctR6H-8hDmAYt6Q__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"running_armature_glb_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-4746-7ed6-9f28-0f3aaff57d3e/output/Animation_Running_withSkin_armature.glb?Expires=1769852876\\u0026Signature=e4BORDmdppyhRPh09FdhIGOkY9wbIGUjyws2aAf9N50~5XCQmBga5ygF~2NutJmSisEVJ8ArSVqNMJGSCUrh3sLpd2g4f63cZODR8BKI~d7zaGghBaHeCQA5uAKgu1Z-jzTFedfQjK7pOXNjvSP0e11lMSvo7rnJYVpDC3eUdPw~M9tbpobqf8VaCCWCPT1OKuUDqciRIRaBS1smcwibAvTQComUbpCXv~FL9TpfhO-ghY1upVZB3aka3s5G8m8g0BTDf89TKDQV3ymWKGlSUHyF9vK7ZM7p7p7r~ItQ4OevHXwky6BP9FES5jOkhCrsj8-w~MmScoO0aVZCtrAO~g__\\u0026Key-Pair-Id=KL5I0C8H7HX83\"}}}\n\n"
- },
- "cookies": [],
- "headers": [
- {
- "name": "cache-control",
- "value": "no-cache"
- },
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-type",
- "value": "text/event-stream;charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:47:36 GMT"
- },
- {
- "name": "transfer-encoding",
- "value": "chunked"
- },
- {
- "name": "x-accel-buffering",
- "value": "no"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 214,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 200,
- "statusText": "OK"
- },
- "startedDateTime": "2026-01-28T09:47:36.858Z",
- "time": 19869,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 19869
- }
- },
- {
- "_id": "af0b2e744d70c66d465d5d59624b2d4e",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 69,
- "cookies": [],
- "headers": [
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- },
- {
- "name": "content-type",
- "value": "application/json"
- }
- ],
- "headersSize": 156,
- "httpVersion": "HTTP/1.1",
- "method": "POST",
- "postData": {
- "mimeType": "application/json",
- "params": [],
- "text": "{\"rig_task_id\":\"019c0400-4746-7ed6-9f28-0f3aaff57d3e\",\"action_id\":30}"
- },
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v1/animations"
- },
- "response": {
- "bodySize": 50,
- "content": {
- "mimeType": "application/json; charset=utf-8",
- "size": 50,
- "text": "{\"result\":\"019c0400-a468-74bd-bfee-386d46487e23\"}\n"
- },
- "cookies": [],
- "headers": [
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-length",
- "value": "50"
- },
- {
- "name": "content-type",
- "value": "application/json; charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:47:57 GMT"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 158,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 202,
- "statusText": "Accepted"
- },
- "startedDateTime": "2026-01-28T09:47:56.729Z",
- "time": 510,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 510
- }
- },
- {
- "_id": "fe51ae2b3b84b98b36a2e6e82d4c50e6",
- "_order": 0,
- "cache": {},
- "request": {
- "bodySize": 0,
- "cookies": [],
- "headers": [
- {
- "name": "accept",
- "value": "text/event-stream"
- },
- {
- "name": "authorization",
- "value": "Bearer msy_3ClctZx7svFvzl4kvgXqP2Sa1z7aNIu74dwf"
- }
- ],
- "headersSize": 194,
- "httpVersion": "HTTP/1.1",
- "method": "GET",
- "queryString": [],
- "url": "https://api.meshy.ai/openapi/v1/animations/019c0400-a468-74bd-bfee-386d46487e23/stream"
- },
- "response": {
- "bodySize": 7123,
- "content": {
- "mimeType": "text/event-stream;charset=utf-8",
- "size": 7123,
- "text": "event:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"PENDING\",\"created_at\":1769593677238,\"progress\":0,\"preceding_tasks\":1,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":1,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":10,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":15,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":20,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":26,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":31,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":36,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":42,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":47,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":52,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":57,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\n: keep-alive\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":63,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":68,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"IN_PROGRESS\",\"created_at\":1769593677238,\"progress\":95,\"started_at\":0,\"finished_at\":0,\"expires_at\":0,\"task_error\":null,\"result\":{\"animation_glb_url\":\"\",\"animation_fbx_url\":\"\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\nevent:message\ndata:{\"id\":\"019c0400-a468-74bd-bfee-386d46487e23\",\"type\":\"animate\",\"name\":\"\",\"status\":\"SUCCEEDED\",\"created_at\":1769593677238,\"progress\":100,\"started_at\":1769593677633,\"finished_at\":1769593702064,\"expires_at\":1769852902064,\"task_error\":null,\"result\":{\"animation_glb_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-a468-74bd-bfee-386d46487e23/output/Animation_Casual_Walk_withSkin.glb?Expires=1769852902\\u0026Signature=Q3oCGL25TLV6opIY1QagJgBWVycj8lrn2CmbC7xghNs1l8njNq5yTbKNQtrhj-FvbPVY~AO1LRkB1CJZraajOYeobbzZKeRdLrEgzK9NOL~Bpaw6t8vfB8AD198tWEMKgOecK60G1dBP~OOp6~oobdADq0GPnqzARoGqAPdbP3M-GUWY5~7waaG-RTh3ZEgeHxpI8TBpSZb5qix447R2twOLsc4mv3aSngv1THxlifDt9XjIKmyQ1xZco5FFqsBA5ywvbMWqEBBzR1UPQBjrpmng~rc4AoU2iJLga3a~VxVjj3bWT3jIKrp03Fo358pZ8O-r3wExsJoc4Nb7CpBXxA__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"animation_fbx_url\":\"https://assets.meshy.ai/b0dbbbaf-b086-4bee-9845-d9c2576d26db/tasks/019c0400-a468-74bd-bfee-386d46487e23/output/Animation_Casual_Walk_withSkin.fbx?Expires=1769852902\\u0026Signature=NippfUMIjw3-MmsizLZuYBsB4CtbSwGaL0ucwvKvwIhlc0qRfnjgkSEhGx1a5B8EKYgapairRH1hGN8AAY67wAqTy~KxcbTx-Ktfk4lej9hxgFisKrqZ55R3Ob9u1NKCye81l8BUSMbM7H6aGKtZ1egpeDyvj2VkXntiUIJ2Ahu7xqwQAQM~o3RdPkRxkDajMP5kn3sbrpfl56IzfsV~SkpD0OGk0kH9dAME4CPtGsKG9zOTA~TiVTScqrCbybNePvgc0EBvbt2cFkhaaGg3uUMi1fLZhQWlKHxUPTn~6Dn2MH2gCXcvLa7wE1BwGgZCYOQIpQO8TziCjkVM5sU-7A__\\u0026Key-Pair-Id=KL5I0C8H7HX83\",\"processed_usdz_url\":\"\",\"processed_armature_fbx_url\":\"\",\"processed_animation_fps_fbx_url\":\"\"}}\n\n"
- },
- "cookies": [],
- "headers": [
- {
- "name": "cache-control",
- "value": "no-cache"
- },
- {
- "name": "connection",
- "value": "keep-alive"
- },
- {
- "name": "content-type",
- "value": "text/event-stream;charset=utf-8"
- },
- {
- "name": "date",
- "value": "Wed, 28 Jan 2026 09:47:57 GMT"
- },
- {
- "name": "transfer-encoding",
- "value": "chunked"
- },
- {
- "name": "x-accel-buffering",
- "value": "no"
- },
- {
- "name": "x-api-version",
- "value": "v2026.01.27"
- }
- ],
- "headersSize": 214,
- "httpVersion": "HTTP/1.1",
- "redirectURL": "",
- "status": 200,
- "statusText": "OK"
- },
- "startedDateTime": "2026-01-28T09:47:57.239Z",
- "time": 24829,
- "timings": {
- "blocked": -1,
- "connect": -1,
- "dns": -1,
- "receive": 0,
- "send": 0,
- "ssl": -1,
- "wait": 24829
- }
- }
- ],
- "pages": [],
- "version": "1.2"
- }
-}
diff --git a/packages/meshy-content-generator/test/fixtures/character-full/manifest.json b/packages/meshy-content-generator/test/fixtures/character-full/manifest.json
deleted file mode 100644
index 0c58391d..00000000
--- a/packages/meshy-content-generator/test/fixtures/character-full/manifest.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "id": "full-pipeline-test",
- "name": "Full Pipeline Test",
- "type": "character",
- "textToImageTask": {
- "prompt": "A stylized anime hero standing on a rooftop, clean line art, neutral lighting"
- },
- "textTo3DPreviewTask": {
- "prompt": "Stylized anime hero character with clean silhouette, standing pose"
- },
- "textTo3DRefineTask": {
- "texturePrompt": "Cel-shaded anime materials, crisp outlines, subtle fabric weave"
- },
- "riggingTask": {
- "heightMeters": 1.7
- },
- "animationTask": {
- "animations": ["WalkAndRun.Walking.Casual_Walk"]
- }
-}
diff --git a/packages/meshy-content-generator/tsconfig.json b/packages/meshy-content-generator/tsconfig.json
deleted file mode 100644
index 306cc2ce..00000000
--- a/packages/meshy-content-generator/tsconfig.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2022",
- "module": "ES2022",
- "moduleResolution": "Bundler",
- "lib": ["ES2022"],
- "types": ["node"],
- "outDir": "dist",
- "rootDir": "src",
- "declaration": true,
- "declarationMap": true,
- "sourceMap": true,
- "strict": true,
- "noImplicitAny": true,
- "noUncheckedIndexedAccess": true,
- "exactOptionalPropertyTypes": true,
- "noFallthroughCasesInSwitch": true,
- "skipLibCheck": true
- },
- "include": ["src"],
- "exclude": ["src/content.config.ts"]
-}
diff --git a/packages/meshy-content-generator/tsup.config.ts b/packages/meshy-content-generator/tsup.config.ts
deleted file mode 100644
index 20e47a56..00000000
--- a/packages/meshy-content-generator/tsup.config.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { defineConfig } from "tsup";
-
-export default defineConfig([
- {
- entry: ["src/index.ts"],
- format: ["esm"],
- dts: true,
- sourcemap: true,
- clean: true,
- outDir: "dist",
- },
- {
- entry: ["src/cli/index.ts"],
- format: ["esm"],
- dts: true,
- sourcemap: true,
- outDir: "dist/cli",
- banner: {
- js: "#!/usr/bin/env node",
- },
- },
-]);
diff --git a/packages/meshy-content-generator/vitest.config.ts b/packages/meshy-content-generator/vitest.config.ts
deleted file mode 100644
index d5cfff3f..00000000
--- a/packages/meshy-content-generator/vitest.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { defineConfig } from "vitest/config";
-
-export default defineConfig({
- test: {
- include: ["src/**/__tests__/**/*.test.ts"],
- },
-});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b3b30d7d..a98a7a6f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -187,70 +187,6 @@ importers:
specifier: ^4.1.0
version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.3)(@vitest/coverage-v8@4.1.10)(vite@8.1.5(@types/node@22.19.3)(esbuild@0.28.1)(tsx@4.21.0)(yaml@2.9.0))
- packages/meshy-content-generator:
- dependencies:
- '@asteasolutions/zod-to-openapi':
- specifier: ^8.4.0
- version: 8.4.1(zod@4.3.6)
- '@google/model-viewer':
- specifier: ^4.1.0
- version: 4.1.0(three@0.172.0)
- '@pollyjs/adapter-fetch':
- specifier: ^6.0.7
- version: 6.0.7
- '@pollyjs/core':
- specifier: ^6.0.6
- version: 6.0.6
- '@pollyjs/persister-fs':
- specifier: ^6.0.6
- version: 6.0.6(supports-color@7.2.0)
- '@scalar/fastify-api-reference':
- specifier: ^1.43.17
- version: 1.44.26
- commander:
- specifier: ^14.0.2
- version: 14.0.2
- dotenv:
- specifier: ^17.2.3
- version: 17.3.1
- fastify:
- specifier: ^5.8.5
- version: 5.10.0
- seedrandom:
- specifier: ^3.0.5
- version: 3.0.5
- three:
- specifier: ^0.172.0
- version: 0.172.0
- zod:
- specifier: ^4.3.6
- version: 4.3.6
- devDependencies:
- '@biomejs/biome':
- specifier: ^2.3.13
- version: 2.4.4
- '@playwright/test':
- specifier: ^1.58.0
- version: 1.58.2
- '@types/node':
- specifier: ^25.0.10
- version: 25.3.0
- '@types/seedrandom':
- specifier: ^3.0.8
- version: 3.0.8
- tsup:
- specifier: ^8.5.1
- version: 8.5.1(postcss@8.5.23)(supports-color@7.2.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)
- tsx:
- specifier: ^4.21.0
- version: 4.21.0
- typescript:
- specifier: ^5.9.3
- version: 5.9.3
- vitest:
- specifier: ^4.1.0
- version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.10)(vite@8.1.5(@types/node@25.3.0)(esbuild@0.28.1)(tsx@4.21.0)(yaml@2.9.0))
-
packages/providers:
dependencies:
'@jbcom/agentic-triage':
@@ -435,11 +371,6 @@ packages:
resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==}
engines: {node: '>=18'}
- '@asteasolutions/zod-to-openapi@8.4.1':
- resolution: {integrity: sha512-WmJUsFINbnWxGvHSd16aOjgKf+5GsfdxruO2YDLcgplsidakCauik1lhlk83YDH06265Yd1XtUyF24o09uygpw==}
- peerDependencies:
- zod: ^4.0.0
-
'@astrojs/compiler-binding-darwin-arm64@0.3.1':
resolution: {integrity: sha512-IEmEF2fUIlTHtpeE/isyEGVOB14cEyh/LZOFYt6wn3jNyVpdC8aR5OZ+RzFUR/f+8ZDM1LaMwZKvoA7eMyJeFw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -1167,35 +1098,18 @@ packages:
engines: {node: '>=14.21.3'}
hasBin: true
- '@biomejs/biome@2.4.4':
- resolution: {integrity: sha512-tigwWS5KfJf0cABVd52NVaXyAVv4qpUXOWJ1rxFL8xF1RVoeS2q/LK+FHgYoKMclJCuRoCWAPy1IXaN9/mS61Q==}
- engines: {node: '>=14.21.3'}
- hasBin: true
-
'@biomejs/cli-darwin-arm64@2.3.10':
resolution: {integrity: sha512-M6xUjtCVnNGFfK7HMNKa593nb7fwNm43fq1Mt71kpLpb+4mE7odO8W/oWVDyBVO4ackhresy1ZYO7OJcVo/B7w==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
- '@biomejs/cli-darwin-arm64@2.4.4':
- resolution: {integrity: sha512-jZ+Xc6qvD6tTH5jM6eKX44dcbyNqJHssfl2nnwT6vma6B1sj7ZLTGIk6N5QwVBs5xGN52r3trk5fgd3sQ9We9A==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [darwin]
-
'@biomejs/cli-darwin-x64@2.3.10':
resolution: {integrity: sha512-Vae7+V6t/Avr8tVbFNjnFSTKZogZHFYl7MMH62P/J1kZtr0tyRQ9Fe0onjqjS2Ek9lmNLmZc/VR5uSekh+p1fg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
- '@biomejs/cli-darwin-x64@2.4.4':
- resolution: {integrity: sha512-Dh1a/+W+SUCXhEdL7TiX3ArPTFCQKJTI1mGncZNWfO+6suk+gYA4lNyJcBB+pwvF49uw0pEbUS49BgYOY4hzUg==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [darwin]
-
'@biomejs/cli-linux-arm64-musl@2.3.10':
resolution: {integrity: sha512-B9DszIHkuKtOH2IFeeVkQmSMVUjss9KtHaNXquYYWCjH8IstNgXgx5B0aSBQNr6mn4RcKKRQZXn9Zu1rM3O0/A==}
engines: {node: '>=14.21.3'}
@@ -1203,13 +1117,6 @@ packages:
os: [linux]
libc: [musl]
- '@biomejs/cli-linux-arm64-musl@2.4.4':
- resolution: {integrity: sha512-+sPAXq3bxmFwhVFJnSwkSF5Rw2ZAJMH3MF6C9IveAEOdSpgajPhoQhbbAK12SehN9j2QrHpk4J/cHsa/HqWaYQ==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
'@biomejs/cli-linux-arm64@2.3.10':
resolution: {integrity: sha512-hhPw2V3/EpHKsileVOFynuWiKRgFEV48cLe0eA+G2wO4SzlwEhLEB9LhlSrVeu2mtSn205W283LkX7Fh48CaxA==}
engines: {node: '>=14.21.3'}
@@ -1217,13 +1124,6 @@ packages:
os: [linux]
libc: [glibc]
- '@biomejs/cli-linux-arm64@2.4.4':
- resolution: {integrity: sha512-V/NFfbWhsUU6w+m5WYbBenlEAz8eYnSqRMDMAW3K+3v0tYVkNyZn8VU0XPxk/lOqNXLSCCrV7FmV/u3SjCBShg==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
'@biomejs/cli-linux-x64-musl@2.3.10':
resolution: {integrity: sha512-QTfHZQh62SDFdYc2nfmZFuTm5yYb4eO1zwfB+90YxUumRCR171tS1GoTX5OD0wrv4UsziMPmrePMtkTnNyYG3g==}
engines: {node: '>=14.21.3'}
@@ -1231,13 +1131,6 @@ packages:
os: [linux]
libc: [musl]
- '@biomejs/cli-linux-x64-musl@2.4.4':
- resolution: {integrity: sha512-gGvFTGpOIQDb5CQ2VC0n9Z2UEqlP46c4aNgHmAMytYieTGEcfqhfCFnhs6xjt0S3igE6q5GLuIXtdQt3Izok+g==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
'@biomejs/cli-linux-x64@2.3.10':
resolution: {integrity: sha512-wwAkWD1MR95u+J4LkWP74/vGz+tRrIQvr8kfMMJY8KOQ8+HMVleREOcPYsQX82S7uueco60L58Wc6M1I9WA9Dw==}
engines: {node: '>=14.21.3'}
@@ -1245,37 +1138,18 @@ packages:
os: [linux]
libc: [glibc]
- '@biomejs/cli-linux-x64@2.4.4':
- resolution: {integrity: sha512-R4+ZCDtG9kHArasyBO+UBD6jr/FcFCTH8QkNTOCu0pRJzCWyWC4EtZa2AmUZB5h3e0jD7bRV2KvrENcf8rndBg==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
'@biomejs/cli-win32-arm64@2.3.10':
resolution: {integrity: sha512-o7lYc9n+CfRbHvkjPhm8s9FgbKdYZu5HCcGVMItLjz93EhgJ8AM44W+QckDqLA9MKDNFrR8nPbO4b73VC5kGGQ==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
- '@biomejs/cli-win32-arm64@2.4.4':
- resolution: {integrity: sha512-trzCqM7x+Gn832zZHgr28JoYagQNX4CZkUZhMUac2YxvvyDRLJDrb5m9IA7CaZLlX6lTQmADVfLEKP1et1Ma4Q==}
- engines: {node: '>=14.21.3'}
- cpu: [arm64]
- os: [win32]
-
'@biomejs/cli-win32-x64@2.3.10':
resolution: {integrity: sha512-pHEFgq7dUEsKnqG9mx9bXihxGI49X+ar+UBrEIj3Wqj3UCZp1rNgV+OoyjFgcXsjCWpuEAF4VJdkZr3TrWdCbQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
- '@biomejs/cli-win32-x64@2.4.4':
- resolution: {integrity: sha512-gnOHKVPFAAPrpoPt2t+Q6FZ7RPry/FDV3GcpU53P3PtLNnQjBmKyN2Vh/JtqXet+H4pme8CC76rScwdjDcT1/A==}
- engines: {node: '>=14.21.3'}
- cpu: [x64]
- os: [win32]
-
'@bruits/satteri-darwin-arm64@0.9.5':
resolution: {integrity: sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==}
cpu: [arm64]
@@ -1534,33 +1408,9 @@ packages:
'@expressive-code/plugin-text-markers@0.44.1':
resolution: {integrity: sha512-B3BsJoJ8CFMlcIX9f+X9tcI3C4zPDO601+YuLi9GheSTNro7ZfqSjLptMQKBHOWZvxnAtY5zvIX7iO/qtBhNBg==}
- '@fastify/ajv-compiler@4.0.5':
- resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==}
-
- '@fastify/error@4.2.0':
- resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
-
- '@fastify/fast-json-stringify-compiler@5.0.3':
- resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}
-
- '@fastify/forwarded@3.0.1':
- resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==}
-
- '@fastify/merge-json-schemas@0.2.1':
- resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
-
- '@fastify/proxy-addr@5.1.0':
- resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
-
'@gerrit0/mini-shiki@3.20.0':
resolution: {integrity: sha512-Wa57i+bMpK6PGJZ1f2myxo3iO+K/kZikcyvH8NIqNNZhQUbDav7V9LQmWOXhf946mz5c1NZ19WMsGYiDKTryzQ==}
- '@google/model-viewer@4.1.0':
- resolution: {integrity: sha512-7WB/jS6wfBfRl/tWhsUUvDMKFE1KlKME97coDLlZQfvJD0nCwjhES1lJ+k7wnmf7T3zMvCfn9mIjM/mgZapuig==}
- engines: {node: '>=6.0.0'}
- peerDependencies:
- three: ^0.172.0
-
'@graphql-typed-document-node/core@3.2.0':
resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==}
peerDependencies:
@@ -1903,12 +1753,6 @@ packages:
resolution: {integrity: sha512-I6MMle0hXR8SC2KVaDHt+vQvGDSQQwhfA9eq17hAL1y1Sf+7aGpaCXzMx3S4wcD9fLS5LZxd7aY8nAiTYHjoEg==}
engines: {node: '>=18.x'}
- '@lit-labs/ssr-dom-shim@1.5.1':
- resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==}
-
- '@lit/reactive-element@2.1.2':
- resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==}
-
'@mdx-js/mdx@3.1.1':
resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
@@ -1922,11 +1766,6 @@ packages:
'@cfworker/json-schema':
optional: true
- '@monogrid/gainmap-js@3.4.0':
- resolution: {integrity: sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg==}
- peerDependencies:
- three: '>= 0.159.0'
-
'@napi-rs/wasm-runtime@0.2.4':
resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==}
@@ -2171,9 +2010,6 @@ packages:
cpu: [x64]
os: [win32]
- '@pinojs/redact@0.4.0':
- resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
-
'@playwright/mcp@0.0.68':
resolution: {integrity: sha512-oP9I9ghXKuQEBo4xaC7HgsS2gRTxyMzlBm3UEhYj4VqqrqbPQUX2shATPaNA/am9joBzq9v0OXISzeIgP+zmHA==}
engines: {node: '>=18'}
@@ -2196,27 +2032,6 @@ packages:
resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==}
engines: {node: '>=12'}
- '@pollyjs/adapter-fetch@6.0.7':
- resolution: {integrity: sha512-kv44DROx/2qzlcgS71EccGr2/I5nK40Xt92paGNI+1/Kmz290bw/ykt8cvXDg4O4xCc9Fh/jXeAkS7qwGpCx2g==}
-
- '@pollyjs/adapter@6.0.6':
- resolution: {integrity: sha512-szhys0NiFQqCJDMC0kpDyjhLqSI7aWc6m6iATCRKgcMcN/7QN85pb3GmRzvnNV8+/Bi2AUSCwxZljcsKhbYVWQ==}
-
- '@pollyjs/core@6.0.6':
- resolution: {integrity: sha512-1ZZcmojW8iSFmvHGeLlvuudM3WiDV842FsVvtPAo3HoAYE6jCNveLHJ+X4qvonL4enj1SyTF3hXA107UkQFQrA==}
-
- '@pollyjs/node-server@6.0.6':
- resolution: {integrity: sha512-nkP1+hdNoVOlrRz9R84haXVsaSmo8Xmq7uYK9GeUMSLQy4Fs55ZZ9o2KI6vRA8F6ZqJSbC31xxwwIoTkjyP7Vg==}
-
- '@pollyjs/persister-fs@6.0.6':
- resolution: {integrity: sha512-/ALVgZiH2zGqwLkW0Mntc0Oq1v7tR8LS8JD2SAyIsHpnSXeBUnfPWwjAuYw0vqORHFVEbwned6MBRFfvU/3qng==}
-
- '@pollyjs/persister@6.0.6':
- resolution: {integrity: sha512-9KB1p+frvYvFGur4ifzLnFKFLXAMXrhAhCnVhTnkG2WIqqQPT7y+mKBV/DKCmYFx8GPA9FiNGqt2pB53uJpIdw==}
-
- '@pollyjs/utils@6.0.6':
- resolution: {integrity: sha512-nhVJoI3nRgRimE0V2DVSvsXXNROUH6iyJbroDu4IdsOIOFC1Ds0w+ANMB4NMwFaqE+AisWOmXFzwAGdAfyiQVg==}
-
'@rolldown/binding-android-arm64@1.1.5':
resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2462,38 +2277,6 @@ packages:
cpu: [x64]
os: [win32]
- '@scalar/core@0.3.42':
- resolution: {integrity: sha512-RbyooMuG4oQEOhiA/tC+++bkIK1zeYGNxrTzSAgTrTzVlbFKPzw72fs4gX9/eHDo7qVc9FsymIW6qVpWbySzNg==}
- engines: {node: '>=20'}
-
- '@scalar/fastify-api-reference@1.44.26':
- resolution: {integrity: sha512-w6cCqHasrZ7+JNj6oOtK7iZJ0r0gxPkKMLlADSnx+JNTuNL0JuXwplgcbAGbgRAszIkvkkXTNvGOAulHPzGdLQ==}
- engines: {node: '>=20'}
-
- '@scalar/helpers@0.2.16':
- resolution: {integrity: sha512-JlDUKdmwAHdcFUdTngNtx/uhLKTBACXlgvri7iKb6Jx6ImRIBgHwxZNAqlil1L047+QBrKh97lnezNpzNQAffQ==}
- engines: {node: '>=20'}
-
- '@scalar/json-magic@0.11.5':
- resolution: {integrity: sha512-WhNsLzjaCwa0hdYVezHnNmlOkX8PMPbyljeBfHtkmxMSf8W5Ht1LePQzfWzMc9SFwN6n7LcR4XVQvUwwNIyUUg==}
- engines: {node: '>=20'}
-
- '@scalar/openapi-parser@0.24.14':
- resolution: {integrity: sha512-C3PBhS1TNJY+nCoUnrLiyKgLIty9Iu0QVvj2XhU0uMFJNwtMS18xdvTiQ1Svtu2YZF08T6K9UPbViBKwSMFcbg==}
- engines: {node: '>=20'}
-
- '@scalar/openapi-types@0.5.3':
- resolution: {integrity: sha512-m4n/Su3K01d15dmdWO1LlqecdSPKuNjuokrJLdiQ485kW/hRHbXW1QP6tJL75myhw/XhX5YhYAR+jrwnGjXiMw==}
- engines: {node: '>=20'}
-
- '@scalar/openapi-upgrader@0.1.8':
- resolution: {integrity: sha512-2xuYLLs0fBadLIk4I1ObjMiCnOyLPEMPf24A1HtHQvhKGDnGlvT63F2rU2Xw8lxCjgHnzveMPnOJEbwIy64RCg==}
- engines: {node: '>=20'}
-
- '@scalar/types@0.6.7':
- resolution: {integrity: sha512-ihHaoPF9qQR05pV3mfE7yBlHQdm5CoJVE0HiJFH6xSrzLfk2yJ6XdD3OzyRCqyxkZ38bj2RIZMS6LJsGy4p66g==}
- engines: {node: '>=20'}
-
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
@@ -2599,10 +2382,6 @@ packages:
'@sinclair/typebox@0.34.48':
resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==}
- '@sindresorhus/fnv1a@2.0.1':
- resolution: {integrity: sha512-suq9tRQ6bkpMukTG5K5z0sPWB7t0zExMzZCdmYm6xTSSIm/yCKNm7VCL36wVeyTsFr597/UhU1OAYdHGMDiHrw==}
- engines: {node: '>=10'}
-
'@sindresorhus/is@4.6.0':
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
@@ -2683,15 +2462,6 @@ packages:
'@types/sax@1.2.7':
resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
- '@types/seedrandom@3.0.8':
- resolution: {integrity: sha512-TY1eezMU2zH2ozQoAFAQFOPpvP15g+ZgSfTZt31AUUH/Rxtnz3H+A/Sv1Snw2/amp//omibc+AEkTaA8KUeOLQ==}
-
- '@types/set-cookie-parser@2.4.10':
- resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==}
-
- '@types/trusted-types@2.0.7':
- resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
-
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
@@ -2755,13 +2525,6 @@ packages:
resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==}
hasBin: true
- abstract-logging@2.0.1:
- resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
-
- accepts@1.3.8:
- resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
- engines: {node: '>= 0.6'}
-
accepts@2.0.0:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
@@ -2808,14 +2571,6 @@ packages:
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- ajv-draft-04@1.0.0:
- resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
- peerDependencies:
- ajv: '>=8.18.0'
- peerDependenciesMeta:
- ajv:
- optional: true
-
ajv-formats@3.0.1:
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
peerDependencies:
@@ -2883,9 +2638,6 @@ packages:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
- array-flatten@1.1.1:
- resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
-
array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
@@ -2924,13 +2676,6 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- atomic-sleep@1.0.0:
- resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
- engines: {node: '>=8.0.0'}
-
- avvio@9.2.0:
- resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==}
-
axios@1.18.1:
resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==}
@@ -2991,10 +2736,6 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
- basic-auth@2.0.1:
- resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==}
- engines: {node: '>= 0.8'}
-
bcp-47-match@2.0.3:
resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==}
@@ -3007,9 +2748,6 @@ packages:
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
- blueimp-md5@2.19.0:
- resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==}
-
body-parser@2.3.0:
resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==}
engines: {node: '>=18'}
@@ -3020,9 +2758,6 @@ packages:
bottleneck@2.19.5:
resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==}
- bowser@2.14.1:
- resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==}
-
brace-expansion@5.0.8:
resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==}
engines: {node: 20 || >=22}
@@ -3232,10 +2967,6 @@ packages:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
- content-disposition@0.5.4:
- resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
- engines: {node: '>= 0.6'}
-
content-disposition@1.0.1:
resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==}
engines: {node: '>=18'}
@@ -3276,9 +3007,6 @@ packages:
cookie-es@1.2.3:
resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==}
- cookie-signature@1.0.7:
- resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==}
-
cookie-signature@1.2.2:
resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
engines: {node: '>=6.6.0'}
@@ -3287,10 +3015,6 @@ packages:
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
- cookie@1.1.1:
- resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
- engines: {node: '>=18'}
-
cookie@2.0.1:
resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==}
engines: {node: '>=22'}
@@ -3356,14 +3080,6 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- debug@2.6.9:
- resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -3405,10 +3121,6 @@ packages:
destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
- destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -3461,10 +3173,6 @@ packages:
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
engines: {node: '>=12'}
- dotenv@17.3.1:
- resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==}
- engines: {node: '>=12'}
-
dset@3.1.4:
resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==}
engines: {node: '>=4'}
@@ -3655,10 +3363,6 @@ packages:
peerDependencies:
express: '>= 4.11'
- express@4.22.1:
- resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==}
- engines: {node: '>= 0.10.0'}
-
express@5.2.1:
resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==}
engines: {node: '>= 18'}
@@ -3676,24 +3380,9 @@ packages:
fast-content-type-parse@3.0.0:
resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==}
- fast-decode-uri-component@1.0.1:
- resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
-
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
- fast-json-stringify@6.3.0:
- resolution: {integrity: sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==}
-
- fast-json-stringify@7.0.1:
- resolution: {integrity: sha512-eRSayARSbbwlBjpP4vnTTIRD5QPcIrmihPxDeN1DtKnHPg66UuJLx+8hlK1kaFdjvzyQ/dzALoi4vwAQ+T+iZA==}
-
- fast-querystring@1.1.2:
- resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
-
fast-string-truncated-width@3.0.3:
resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==}
@@ -3706,15 +3395,6 @@ packages:
fast-wrap-ansi@0.2.2:
resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
- fastify-plugin@4.5.1:
- resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==}
-
- fastify@5.10.0:
- resolution: {integrity: sha512-A9L0ziuWGQHgEEVgF3davQ9vbD93IuX+lo2IsxapQmu5b/Y/ynn9m9K5JHt9dvyJXOFc5iN0Zk5GHEOqnzhWjg==}
-
- fastq@1.20.1:
- resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
-
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -3744,18 +3424,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- finalhandler@1.3.2:
- resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==}
- engines: {node: '>= 0.8'}
-
finalhandler@2.1.1:
resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==}
engines: {node: '>= 18.0.0'}
- find-my-way@9.7.0:
- resolution: {integrity: sha512-f2JHn75x2JlwUwLenZypgczR7YWMb/uO9BvUXtus+JMgkbIkLADd38cI4EiV+OQqrGo1Zlq6V8wnqMJ8e62wUQ==}
- engines: {node: '>=20'}
-
find-up-simple@1.0.1:
resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
engines: {node: '>=18'}
@@ -3803,10 +3475,6 @@ packages:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
- fresh@0.5.2:
- resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
- engines: {node: '>= 0.6'}
-
fresh@2.0.0:
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
engines: {node: '>= 0.8'}
@@ -3820,10 +3488,6 @@ packages:
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
- fs-extra@10.1.0:
- resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
- engines: {node: '>=12'}
-
fs-extra@11.3.3:
resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==}
engines: {node: '>=14.14'}
@@ -4049,10 +3713,6 @@ packages:
resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
engines: {node: '>= 0.8'}
- http-graceful-shutdown@3.1.15:
- resolution: {integrity: sha512-7BzY5XxGV4g7QaOZ8xf5Hco8vJMMUFDl+AcB8AuOOdS1wTOZ88aV3EIADUnyAItj2QW+QfBPz08/PzxKiDKh6Q==}
- engines: {node: '>=4.0.0'}
-
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
@@ -4108,9 +3768,6 @@ packages:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
- immediate@3.0.6:
- resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
-
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
@@ -4155,17 +3812,9 @@ packages:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
- ipaddr.js@2.3.0:
- resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==}
- engines: {node: '>= 10'}
-
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
- is-absolute-url@3.0.3:
- resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==}
- engines: {node: '>=8'}
-
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
@@ -4215,9 +3864,6 @@ packages:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
- is-promise@2.2.2:
- resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
-
is-promise@4.0.0:
resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
@@ -4308,9 +3954,6 @@ packages:
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- json-schema-ref-resolver@3.0.0:
- resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==}
-
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
@@ -4334,24 +3977,10 @@ packages:
jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
- jsonpointer@5.0.1:
- resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
- engines: {node: '>=0.10.0'}
-
klona@2.0.6:
resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
engines: {node: '>= 8'}
- leven@4.1.0:
- resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- lie@3.3.0:
- resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
-
- light-my-request@6.6.0:
- resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
-
lightningcss-android-arm64@1.33.0:
resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
engines: {node: '>= 12.0.0'}
@@ -4440,15 +4069,6 @@ packages:
linkify-it@6.1.0:
resolution: {integrity: sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==}
- lit-element@4.2.2:
- resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==}
-
- lit-html@3.3.2:
- resolution: {integrity: sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==}
-
- lit@3.3.2:
- resolution: {integrity: sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==}
-
load-json-file@4.0.0:
resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
engines: {node: '>=4'}
@@ -4489,10 +4109,6 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
- loglevel@1.9.2:
- resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
- engines: {node: '>= 0.6.0'}
-
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
@@ -4616,10 +4232,6 @@ packages:
mdurl@2.0.0:
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
- media-typer@0.3.0:
- resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
- engines: {node: '>= 0.6'}
-
media-typer@1.1.0:
resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
engines: {node: '>= 0.8'}
@@ -4628,9 +4240,6 @@ packages:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
- merge-descriptors@1.0.3:
- resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
-
merge-descriptors@2.0.0:
resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
engines: {node: '>=18'}
@@ -4638,10 +4247,6 @@ packages:
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- methods@1.1.2:
- resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
- engines: {node: '>= 0.6'}
-
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -4770,11 +4375,6 @@ packages:
resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
engines: {node: '>=18'}
- mime@1.6.0:
- resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
- engines: {node: '>=4'}
- hasBin: true
-
mime@4.1.0:
resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==}
engines: {node: '>=16'}
@@ -4806,17 +4406,10 @@ packages:
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
- morgan@1.11.0:
- resolution: {integrity: sha512-zSkVu3t18r39pw4ixfBKvfZi3y2UOqr7d4WYwcj3m8nXpEQK4rPO6GLzs/CExoRgmX3y9EjmmcXqv6jq0SK46g==}
- engines: {node: '>= 0.8.0'}
-
mrmime@2.0.1:
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
engines: {node: '>=10'}
- ms@2.0.0:
- resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -4832,15 +4425,6 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@5.1.6:
- resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==}
- engines: {node: ^18 || >=20}
- hasBin: true
-
- negotiator@0.6.3:
- resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
- engines: {node: '>= 0.6'}
-
negotiator@1.0.0:
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
engines: {node: '>= 0.6'}
@@ -4858,10 +4442,6 @@ packages:
nlcst-to-string@4.0.0:
resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
- nocache@3.0.4:
- resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==}
- engines: {node: '>=12.0.0'}
-
node-emoji@2.2.0:
resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==}
engines: {node: '>=18'}
@@ -5017,18 +4597,10 @@ packages:
ollama@0.6.3:
resolution: {integrity: sha512-KEWEhIqE5wtfzEIZbDCLH51VFZ6Z3ZSa6sIOg/E/tBV8S51flyqBOXi+bRxlOYKDf8i327zG9eSTb8IJxvm3Zg==}
- on-exit-leak-free@2.1.2:
- resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
- engines: {node: '>=14.0.0'}
-
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
- on-headers@1.1.0:
- resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==}
- engines: {node: '>= 0.8'}
-
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -5050,9 +4622,6 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
- openapi3-ts@4.5.0:
- resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==}
-
ora@5.3.0:
resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==}
engines: {node: '>=10'}
@@ -5218,16 +4787,6 @@ packages:
resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
engines: {node: '>=4'}
- pino-abstract-transport@3.0.0:
- resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
-
- pino-std-serializers@7.1.0:
- resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
-
- pino@10.3.1:
- resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
- hasBin: true
-
pirates@4.0.7:
resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines: {node: '>= 6'}
@@ -5314,15 +4873,6 @@ packages:
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
- process-warning@4.0.1:
- resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
-
- process-warning@5.0.0:
- resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
-
- promise-worker-transferable@1.0.4:
- resolution: {integrity: sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==}
-
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
@@ -5348,12 +4898,6 @@ packages:
resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==}
engines: {node: '>=0.6'}
- querystringify@2.2.0:
- resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
-
- quick-format-unescaped@4.0.4:
- resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
-
radix3@1.1.2:
resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
@@ -5403,10 +4947,6 @@ packages:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'}
- real-require@0.2.0:
- resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
- engines: {node: '>= 12.13.0'}
-
recma-build-jsx@1.0.0:
resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
@@ -5503,9 +5043,6 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- requires-port@1.0.0:
- resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
-
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -5530,10 +5067,6 @@ packages:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
- ret@0.5.0:
- resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
- engines: {node: '>=10'}
-
retext-latin@4.0.0:
resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
@@ -5546,13 +5079,6 @@ packages:
retext@9.0.0:
resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
- reusify@1.1.0:
- resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- rfdc@1.4.1:
- resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
-
rimraf@6.1.3:
resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==}
engines: {node: 20 || >=22}
@@ -5568,9 +5094,6 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- route-recognizer@0.3.4:
- resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==}
-
router@2.2.0:
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
engines: {node: '>= 18'}
@@ -5578,16 +5101,6 @@ packages:
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
- safe-regex2@5.0.0:
- resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==}
-
- safe-stable-stringify@2.5.0:
- resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
- engines: {node: '>=10'}
-
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -5602,12 +5115,6 @@ packages:
resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==}
engines: {node: '>=11.0.0'}
- secure-json-parse@4.1.0:
- resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
-
- seedrandom@3.0.5:
- resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==}
-
semantic-release@25.0.2:
resolution: {integrity: sha512-6qGjWccl5yoyugHt3jTgztJ9Y0JVzyH8/Voc/D8PlLat9pwxQYXz7W1Dpnq5h0/G5GCYGUaDSlYcyk3AMh5A6g==}
engines: {node: ^22.14.0 || >= 24.10.0}
@@ -5636,25 +5143,14 @@ packages:
engines: {node: '>=10'}
hasBin: true
- send@0.19.2:
- resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==}
- engines: {node: '>= 0.8.0'}
-
send@1.2.1:
resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
engines: {node: '>= 18'}
- serve-static@1.16.3:
- resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==}
- engines: {node: '>= 0.8.0'}
-
serve-static@2.2.1:
resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
engines: {node: '>= 18'}
- set-cookie-parser@2.7.2:
- resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
-
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -5724,17 +5220,10 @@ packages:
resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==}
engines: {node: '>=8'}
- slugify@1.6.6:
- resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
- engines: {node: '>=8.0.0'}
-
smol-toml@1.7.0:
resolution: {integrity: sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==}
engines: {node: '>= 18'}
- sonic-boom@4.2.1:
- resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
-
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -5771,10 +5260,6 @@ packages:
split2@1.0.0:
resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==}
- split2@4.2.0:
- resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
- engines: {node: '>= 10.x'}
-
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
@@ -5892,13 +5377,6 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
- thread-stream@4.0.0:
- resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==}
- engines: {node: '>=20'}
-
- three@0.172.0:
- resolution: {integrity: sha512-6HMgMlzU97MsV7D/tY8Va38b83kz8YJX+BefKjspMNAv0Vx6dxMogHOrnRl/sbMIs3BPUKijPqDqJ/+UwJbIow==}
-
through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
@@ -5939,9 +5417,6 @@ packages:
resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==}
engines: {node: '>=14.14'}
- to-arraybuffer@1.0.1:
- resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==}
-
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -6022,10 +5497,6 @@ packages:
resolution: {integrity: sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==}
engines: {node: '>=20'}
- type-is@1.6.18:
- resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
- engines: {node: '>= 0.6'}
-
type-is@2.0.1:
resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
engines: {node: '>= 0.6'}
@@ -6234,19 +5705,9 @@ packages:
resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- url-parse@1.5.10:
- resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
-
- utf8-byte-length@1.0.5:
- resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==}
-
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
-
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
@@ -6594,11 +6055,6 @@ snapshots:
dependencies:
json-schema: 0.4.0
- '@asteasolutions/zod-to-openapi@8.4.1(zod@4.3.6)':
- dependencies:
- openapi3-ts: 4.5.0
- zod: 4.3.6
-
'@astrojs/compiler-binding-darwin-arm64@0.3.1':
optional: true
@@ -7578,66 +7034,31 @@ snapshots:
'@biomejs/cli-win32-arm64': 2.3.10
'@biomejs/cli-win32-x64': 2.3.10
- '@biomejs/biome@2.4.4':
- optionalDependencies:
- '@biomejs/cli-darwin-arm64': 2.4.4
- '@biomejs/cli-darwin-x64': 2.4.4
- '@biomejs/cli-linux-arm64': 2.4.4
- '@biomejs/cli-linux-arm64-musl': 2.4.4
- '@biomejs/cli-linux-x64': 2.4.4
- '@biomejs/cli-linux-x64-musl': 2.4.4
- '@biomejs/cli-win32-arm64': 2.4.4
- '@biomejs/cli-win32-x64': 2.4.4
-
'@biomejs/cli-darwin-arm64@2.3.10':
optional: true
- '@biomejs/cli-darwin-arm64@2.4.4':
- optional: true
-
'@biomejs/cli-darwin-x64@2.3.10':
optional: true
- '@biomejs/cli-darwin-x64@2.4.4':
- optional: true
-
'@biomejs/cli-linux-arm64-musl@2.3.10':
optional: true
- '@biomejs/cli-linux-arm64-musl@2.4.4':
- optional: true
-
'@biomejs/cli-linux-arm64@2.3.10':
optional: true
- '@biomejs/cli-linux-arm64@2.4.4':
- optional: true
-
'@biomejs/cli-linux-x64-musl@2.3.10':
optional: true
- '@biomejs/cli-linux-x64-musl@2.4.4':
- optional: true
-
'@biomejs/cli-linux-x64@2.3.10':
optional: true
- '@biomejs/cli-linux-x64@2.4.4':
- optional: true
-
'@biomejs/cli-win32-arm64@2.3.10':
optional: true
- '@biomejs/cli-win32-arm64@2.4.4':
- optional: true
-
'@biomejs/cli-win32-x64@2.3.10':
optional: true
- '@biomejs/cli-win32-x64@2.4.4':
- optional: true
-
- '@bruits/satteri-darwin-arm64@0.9.5':
+ '@bruits/satteri-darwin-arm64@0.9.5':
optional: true
'@bruits/satteri-darwin-x64@0.9.5':
@@ -7826,29 +7247,6 @@ snapshots:
dependencies:
'@expressive-code/core': 0.44.1
- '@fastify/ajv-compiler@4.0.5':
- dependencies:
- ajv: 8.18.0
- ajv-formats: 3.0.1(ajv@8.18.0)
- fast-uri: 4.1.1
-
- '@fastify/error@4.2.0': {}
-
- '@fastify/fast-json-stringify-compiler@5.0.3':
- dependencies:
- fast-json-stringify: 6.3.0
-
- '@fastify/forwarded@3.0.1': {}
-
- '@fastify/merge-json-schemas@0.2.1':
- dependencies:
- dequal: 2.0.3
-
- '@fastify/proxy-addr@5.1.0':
- dependencies:
- '@fastify/forwarded': 3.0.1
- ipaddr.js: 2.3.0
-
'@gerrit0/mini-shiki@3.20.0':
dependencies:
'@shikijs/engine-oniguruma': 3.20.0
@@ -7857,12 +7255,6 @@ snapshots:
'@shikijs/types': 3.20.0
'@shikijs/vscode-textmate': 10.0.2
- '@google/model-viewer@4.1.0(three@0.172.0)':
- dependencies:
- '@monogrid/gainmap-js': 3.4.0(three@0.172.0)
- lit: 3.3.2
- three: 0.172.0
-
'@graphql-typed-document-node/core@3.2.0(graphql@15.10.1)':
dependencies:
graphql: 15.10.1
@@ -8131,12 +7523,6 @@ snapshots:
'@graphql-typed-document-node/core': 3.2.0(graphql@15.10.1)
graphql: 15.10.1
- '@lit-labs/ssr-dom-shim@1.5.1': {}
-
- '@lit/reactive-element@2.1.2':
- dependencies:
- '@lit-labs/ssr-dom-shim': 1.5.1
-
'@mdx-js/mdx@3.1.1(supports-color@7.2.0)':
dependencies:
'@types/estree': 1.0.8
@@ -8211,11 +7597,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@monogrid/gainmap-js@3.4.0(three@0.172.0)':
- dependencies:
- promise-worker-transferable: 1.0.4
- three: 0.172.0
-
'@napi-rs/wasm-runtime@0.2.4':
dependencies:
'@emnapi/core': 1.8.1
@@ -8517,8 +7898,6 @@ snapshots:
'@pagefind/windows-x64@1.5.2':
optional: true
- '@pinojs/redact@0.4.0': {}
-
'@playwright/mcp@0.0.68':
dependencies:
playwright: 1.59.0-alpha-1771104257000
@@ -8540,63 +7919,6 @@ snapshots:
'@pnpm/network.ca-file': 1.0.2
config-chain: 1.1.13
- '@pollyjs/adapter-fetch@6.0.7':
- dependencies:
- '@pollyjs/adapter': 6.0.6
- '@pollyjs/utils': 6.0.6
- to-arraybuffer: 1.0.1
-
- '@pollyjs/adapter@6.0.6':
- dependencies:
- '@pollyjs/utils': 6.0.6
-
- '@pollyjs/core@6.0.6':
- dependencies:
- '@pollyjs/utils': 6.0.6
- '@sindresorhus/fnv1a': 2.0.1
- blueimp-md5: 2.19.0
- fast-json-stable-stringify: 2.1.0
- is-absolute-url: 3.0.3
- lodash-es: 4.18.1
- loglevel: 1.9.2
- route-recognizer: 0.3.4
- slugify: 1.6.6
-
- '@pollyjs/node-server@6.0.6(supports-color@7.2.0)':
- dependencies:
- '@pollyjs/utils': 6.0.6
- body-parser: 2.3.0(supports-color@7.2.0)
- cors: 2.8.5
- express: 4.22.1(supports-color@7.2.0)
- fs-extra: 10.1.0
- http-graceful-shutdown: 3.1.15(supports-color@7.2.0)
- morgan: 1.11.0(supports-color@7.2.0)
- nocache: 3.0.4
- transitivePeerDependencies:
- - supports-color
-
- '@pollyjs/persister-fs@6.0.6(supports-color@7.2.0)':
- dependencies:
- '@pollyjs/node-server': 6.0.6(supports-color@7.2.0)
- '@pollyjs/persister': 6.0.6
- transitivePeerDependencies:
- - supports-color
-
- '@pollyjs/persister@6.0.6':
- dependencies:
- '@pollyjs/utils': 6.0.6
- '@types/set-cookie-parser': 2.4.10
- bowser: 2.14.1
- fast-json-stable-stringify: 2.1.0
- lodash-es: 4.18.1
- set-cookie-parser: 2.7.2
- utf8-byte-length: 1.0.5
-
- '@pollyjs/utils@6.0.6':
- dependencies:
- qs: 6.15.3
- url-parse: 1.5.10
-
'@rolldown/binding-android-arm64@1.1.5':
optional: true
@@ -8731,54 +8053,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.62.2':
optional: true
- '@scalar/core@0.3.42':
- dependencies:
- '@scalar/types': 0.6.7
-
- '@scalar/fastify-api-reference@1.44.26':
- dependencies:
- '@scalar/core': 0.3.42
- '@scalar/openapi-parser': 0.24.14
- '@scalar/openapi-types': 0.5.3
- fastify-plugin: 4.5.1
- github-slugger: 2.0.0
-
- '@scalar/helpers@0.2.16': {}
-
- '@scalar/json-magic@0.11.5':
- dependencies:
- '@scalar/helpers': 0.2.16
- pathe: 2.0.3
- yaml: 2.9.0
-
- '@scalar/openapi-parser@0.24.14':
- dependencies:
- '@scalar/helpers': 0.2.16
- '@scalar/json-magic': 0.11.5
- '@scalar/openapi-types': 0.5.3
- '@scalar/openapi-upgrader': 0.1.8
- ajv: 8.18.0
- ajv-draft-04: 1.0.0(ajv@8.18.0)
- ajv-formats: 3.0.1(ajv@8.18.0)
- jsonpointer: 5.0.1
- leven: 4.1.0
- yaml: 2.9.0
-
- '@scalar/openapi-types@0.5.3':
- dependencies:
- zod: 4.3.6
-
- '@scalar/openapi-upgrader@0.1.8':
- dependencies:
- '@scalar/openapi-types': 0.5.3
-
- '@scalar/types@0.6.7':
- dependencies:
- '@scalar/helpers': 0.2.16
- nanoid: 5.1.6
- type-fest: 5.3.1
- zod: 4.3.6
-
'@sec-ant/readable-stream@0.4.1': {}
'@semantic-release/changelog@6.0.3(semantic-release@25.0.2(supports-color@7.2.0)(typescript@5.9.3))':
@@ -8957,8 +8231,6 @@ snapshots:
'@sinclair/typebox@0.34.48': {}
- '@sindresorhus/fnv1a@2.0.1': {}
-
'@sindresorhus/is@4.6.0': {}
'@sindresorhus/merge-streams@4.0.0': {}
@@ -9037,14 +8309,6 @@ snapshots:
dependencies:
'@types/node': 25.3.0
- '@types/seedrandom@3.0.8': {}
-
- '@types/set-cookie-parser@2.4.10':
- dependencies:
- '@types/node': 25.3.0
-
- '@types/trusted-types@2.0.7': {}
-
'@types/unist@2.0.11': {}
'@types/unist@3.0.3': {}
@@ -9127,13 +8391,6 @@ snapshots:
dependencies:
argparse: 2.0.1
- abstract-logging@2.0.1: {}
-
- accepts@1.3.8:
- dependencies:
- mime-types: 2.1.35
- negotiator: 0.6.3
-
accepts@2.0.0:
dependencies:
mime-types: 3.0.2
@@ -9199,10 +8456,6 @@ snapshots:
'@opentelemetry/api': 1.9.0
zod: 4.3.6
- ajv-draft-04@1.0.0(ajv@8.18.0):
- optionalDependencies:
- ajv: 8.18.0
-
ajv-formats@3.0.1(ajv@8.18.0):
optionalDependencies:
ajv: 8.18.0
@@ -9255,8 +8508,6 @@ snapshots:
aria-query@5.3.2: {}
- array-flatten@1.1.1: {}
-
array-ify@1.0.0: {}
array-iterate@2.0.1: {}
@@ -9374,13 +8625,6 @@ snapshots:
asynckit@0.4.0: {}
- atomic-sleep@1.0.0: {}
-
- avvio@9.2.0:
- dependencies:
- '@fastify/error': 4.2.0
- fastq: 1.20.1
-
axios@1.18.1(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0):
dependencies:
follow-redirects: 1.16.0(debug@4.4.3(supports-color@7.2.0))
@@ -9455,10 +8699,6 @@ snapshots:
baseline-browser-mapping@2.10.0: {}
- basic-auth@2.0.1:
- dependencies:
- safe-buffer: 5.1.2
-
bcp-47-match@2.0.3: {}
bcp-47@2.1.0:
@@ -9475,8 +8715,6 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
- blueimp-md5@2.19.0: {}
-
body-parser@2.3.0(supports-color@7.2.0):
dependencies:
bytes: 3.1.2
@@ -9495,8 +8733,6 @@ snapshots:
bottleneck@2.19.5: {}
- bowser@2.14.1: {}
-
brace-expansion@5.0.8:
dependencies:
balanced-match: 4.0.4
@@ -9703,10 +8939,6 @@ snapshots:
consola@3.4.2: {}
- content-disposition@0.5.4:
- dependencies:
- safe-buffer: 5.2.1
-
content-disposition@1.0.1: {}
content-type@1.0.5: {}
@@ -9736,14 +8968,10 @@ snapshots:
cookie-es@1.2.3: {}
- cookie-signature@1.0.7: {}
-
cookie-signature@1.2.2: {}
cookie@0.7.2: {}
- cookie@1.1.1: {}
-
cookie@2.0.1: {}
core-js-compat@3.48.0:
@@ -9816,12 +9044,6 @@ snapshots:
dependencies:
css-tree: 2.2.1
- debug@2.6.9(supports-color@7.2.0):
- dependencies:
- ms: 2.0.0
- optionalDependencies:
- supports-color: 7.2.0
-
debug@4.4.3(supports-color@7.2.0):
dependencies:
ms: 2.1.3
@@ -9850,8 +9072,6 @@ snapshots:
destr@2.0.5: {}
- destroy@1.2.0: {}
-
detect-libc@2.1.2: {}
detect-port@1.6.1(supports-color@7.2.0):
@@ -9903,8 +9123,6 @@ snapshots:
dotenv@16.4.7: {}
- dotenv@17.3.1: {}
-
dset@3.1.4: {}
dunder-proto@1.0.1:
@@ -10133,42 +9351,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- express@4.22.1(supports-color@7.2.0):
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 2.3.0(supports-color@7.2.0)
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.7.2
- cookie-signature: 1.0.7
- debug: 2.6.9(supports-color@7.2.0)
- depd: 2.0.0
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.3.2(supports-color@7.2.0)
- fresh: 0.5.2
- http-errors: 2.0.1
- merge-descriptors: 1.0.3
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 8.4.2
- proxy-addr: 2.0.7
- qs: 6.15.3
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.19.2(supports-color@7.2.0)
- serve-static: 1.16.3(supports-color@7.2.0)
- setprototypeof: 1.2.0
- statuses: 2.0.2
- type-is: 1.6.18
- utils-merge: 1.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
-
express@5.2.1(supports-color@7.2.0):
dependencies:
accepts: 2.0.0
@@ -10217,34 +9399,8 @@ snapshots:
fast-content-type-parse@3.0.0: {}
- fast-decode-uri-component@1.0.1: {}
-
fast-deep-equal@3.1.3: {}
- fast-json-stable-stringify@2.1.0: {}
-
- fast-json-stringify@6.3.0:
- dependencies:
- '@fastify/merge-json-schemas': 0.2.1
- ajv: 8.18.0
- ajv-formats: 3.0.1(ajv@8.18.0)
- fast-uri: 4.1.1
- json-schema-ref-resolver: 3.0.0
- rfdc: 1.4.1
-
- fast-json-stringify@7.0.1:
- dependencies:
- '@fastify/merge-json-schemas': 0.2.1
- ajv: 8.18.0
- ajv-formats: 3.0.1(ajv@8.18.0)
- fast-uri: 4.1.1
- json-schema-ref-resolver: 3.0.0
- rfdc: 1.4.1
-
- fast-querystring@1.1.2:
- dependencies:
- fast-decode-uri-component: 1.0.1
-
fast-string-truncated-width@3.0.3: {}
fast-string-width@3.0.2:
@@ -10257,30 +9413,6 @@ snapshots:
dependencies:
fast-string-width: 3.0.2
- fastify-plugin@4.5.1: {}
-
- fastify@5.10.0:
- dependencies:
- '@fastify/ajv-compiler': 4.0.5
- '@fastify/error': 4.2.0
- '@fastify/fast-json-stringify-compiler': 5.0.3
- '@fastify/proxy-addr': 5.1.0
- abstract-logging: 2.0.1
- avvio: 9.2.0
- fast-json-stringify: 7.0.1
- find-my-way: 9.7.0
- light-my-request: 6.6.0
- pino: 10.3.1
- process-warning: 5.0.0
- rfdc: 1.4.1
- secure-json-parse: 4.1.0
- semver: 7.8.5
- toad-cache: 3.7.0
-
- fastq@1.20.1:
- dependencies:
- reusify: 1.1.0
-
fdir@6.5.0(picomatch@4.0.5):
optionalDependencies:
picomatch: 4.0.5
@@ -10305,18 +9437,6 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
- finalhandler@1.3.2(supports-color@7.2.0):
- dependencies:
- debug: 2.6.9(supports-color@7.2.0)
- encodeurl: 2.0.0
- escape-html: 1.0.3
- on-finished: 2.4.1
- parseurl: 1.3.3
- statuses: 2.0.2
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
finalhandler@2.1.1(supports-color@7.2.0):
dependencies:
debug: 4.4.3(supports-color@7.2.0)
@@ -10328,12 +9448,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- find-my-way@9.7.0:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-querystring: 1.1.2
- safe-regex2: 5.0.0
-
find-up-simple@1.0.1: {}
find-up@2.1.0:
@@ -10377,8 +9491,6 @@ snapshots:
forwarded@0.2.0: {}
- fresh@0.5.2: {}
-
fresh@2.0.0: {}
from2@2.3.0:
@@ -10392,12 +9504,6 @@ snapshots:
fs-constants@1.0.0: {}
- fs-extra@10.1.0:
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.2.0
- universalify: 2.0.1
-
fs-extra@11.3.3:
dependencies:
graceful-fs: 4.2.11
@@ -10755,12 +9861,6 @@ snapshots:
statuses: 2.0.2
toidentifier: 1.0.1
- http-graceful-shutdown@3.1.15(supports-color@7.2.0):
- dependencies:
- debug: 4.4.3(supports-color@7.2.0)
- transitivePeerDependencies:
- - supports-color
-
http-proxy-agent@7.0.2(supports-color@7.2.0):
dependencies:
agent-base: 7.1.4
@@ -10810,8 +9910,6 @@ snapshots:
ignore@7.0.5: {}
- immediate@3.0.6: {}
-
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
@@ -10847,12 +9945,8 @@ snapshots:
ipaddr.js@1.9.1: {}
- ipaddr.js@2.3.0: {}
-
iron-webcrypto@1.2.1: {}
- is-absolute-url@3.0.3: {}
-
is-alphabetical@2.0.1: {}
is-alphanumerical@2.0.1:
@@ -10884,8 +9978,6 @@ snapshots:
is-plain-obj@4.1.0: {}
- is-promise@2.2.2: {}
-
is-promise@4.0.0: {}
is-stream@2.0.1: {}
@@ -10960,10 +10052,6 @@ snapshots:
json-parse-even-better-errors@2.3.1: {}
- json-schema-ref-resolver@3.0.0:
- dependencies:
- dequal: 2.0.3
-
json-schema-traverse@1.0.0: {}
json-schema-typed@8.0.2: {}
@@ -10982,22 +10070,8 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
- jsonpointer@5.0.1: {}
-
klona@2.0.6: {}
- leven@4.1.0: {}
-
- lie@3.3.0:
- dependencies:
- immediate: 3.0.6
-
- light-my-request@6.6.0:
- dependencies:
- cookie: 1.1.1
- process-warning: 4.0.1
- set-cookie-parser: 2.7.2
-
lightningcss-android-arm64@1.33.0:
optional: true
@@ -11057,22 +10131,6 @@ snapshots:
dependencies:
uc.micro: 3.0.0
- lit-element@4.2.2:
- dependencies:
- '@lit-labs/ssr-dom-shim': 1.5.1
- '@lit/reactive-element': 2.1.2
- lit-html: 3.3.2
-
- lit-html@3.3.2:
- dependencies:
- '@types/trusted-types': 2.0.7
-
- lit@3.3.2:
- dependencies:
- '@lit/reactive-element': 2.1.2
- lit-element: 4.2.2
- lit-html: 3.3.2
-
load-json-file@4.0.0:
dependencies:
graceful-fs: 4.2.11
@@ -11108,8 +10166,6 @@ snapshots:
chalk: 4.1.2
is-unicode-supported: 0.1.0
- loglevel@1.9.2: {}
-
longest-streak@3.1.0: {}
lru-cache@10.4.3: {}
@@ -11361,20 +10417,14 @@ snapshots:
mdurl@2.0.0: {}
- media-typer@0.3.0: {}
-
media-typer@1.1.0: {}
meow@13.2.0: {}
- merge-descriptors@1.0.3: {}
-
merge-descriptors@2.0.0: {}
merge-stream@2.0.0: {}
- methods@1.1.2: {}
-
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.3.0
@@ -11666,8 +10716,6 @@ snapshots:
dependencies:
mime-db: 1.54.0
- mime@1.6.0: {}
-
mime@4.1.0: {}
mimic-fn@2.1.0: {}
@@ -11691,20 +10739,8 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.3
- morgan@1.11.0(supports-color@7.2.0):
- dependencies:
- basic-auth: 2.0.1
- debug: 2.6.9(supports-color@7.2.0)
- depd: 2.0.0
- on-finished: 2.4.1
- on-headers: 1.1.0
- transitivePeerDependencies:
- - supports-color
-
mrmime@2.0.1: {}
- ms@2.0.0: {}
-
ms@2.1.3: {}
mute-stream@3.0.0: {}
@@ -11717,10 +10753,6 @@ snapshots:
nanoid@3.3.16: {}
- nanoid@5.1.6: {}
-
- negotiator@0.6.3: {}
-
negotiator@1.0.0: {}
neo-async@2.6.2: {}
@@ -11733,8 +10765,6 @@ snapshots:
dependencies:
'@types/nlcst': 2.0.3
- nocache@3.0.4: {}
-
node-emoji@2.2.0:
dependencies:
'@sindresorhus/is': 4.6.0
@@ -11870,14 +10900,10 @@ snapshots:
dependencies:
whatwg-fetch: 3.6.20
- on-exit-leak-free@2.1.2: {}
-
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
- on-headers@1.1.0: {}
-
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -11904,10 +10930,6 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
- openapi3-ts@4.5.0:
- dependencies:
- yaml: 2.9.0
-
ora@5.3.0:
dependencies:
bl: 4.1.0
@@ -12072,26 +11094,6 @@ snapshots:
pify@3.0.0: {}
- pino-abstract-transport@3.0.0:
- dependencies:
- split2: 4.2.0
-
- pino-std-serializers@7.1.0: {}
-
- pino@10.3.1:
- dependencies:
- '@pinojs/redact': 0.4.0
- atomic-sleep: 1.0.0
- on-exit-leak-free: 2.1.2
- pino-abstract-transport: 3.0.0
- pino-std-serializers: 7.1.0
- process-warning: 5.0.0
- quick-format-unescaped: 4.0.4
- real-require: 0.2.0
- safe-stable-stringify: 2.5.0
- sonic-boom: 4.2.1
- thread-stream: 4.0.0
-
pirates@4.0.7: {}
pkce-challenge@5.0.1: {}
@@ -12163,15 +11165,6 @@ snapshots:
process-nextick-args@2.0.1: {}
- process-warning@4.0.1: {}
-
- process-warning@5.0.0: {}
-
- promise-worker-transferable@1.0.4:
- dependencies:
- is-promise: 2.2.2
- lie: 3.3.0
-
property-information@7.1.0: {}
proto-list@1.2.4: {}
@@ -12192,10 +11185,6 @@ snapshots:
es-define-property: 1.0.1
side-channel: 1.1.1
- querystringify@2.2.0: {}
-
- quick-format-unescaped@4.0.4: {}
-
radix3@1.1.2: {}
range-parser@1.2.1: {}
@@ -12264,8 +11253,6 @@ snapshots:
readdirp@5.0.0: {}
- real-require@0.2.0: {}
-
recma-build-jsx@1.0.0:
dependencies:
'@types/estree': 1.0.8
@@ -12433,8 +11420,6 @@ snapshots:
require-from-string@2.0.2: {}
- requires-port@1.0.0: {}
-
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
@@ -12454,8 +11439,6 @@ snapshots:
onetime: 5.1.2
signal-exit: 3.0.7
- ret@0.5.0: {}
-
retext-latin@4.0.0:
dependencies:
'@types/nlcst': 2.0.3
@@ -12481,10 +11464,6 @@ snapshots:
retext-stringify: 4.0.0
unified: 11.0.5
- reusify@1.1.0: {}
-
- rfdc@1.4.1: {}
-
rimraf@6.1.3:
dependencies:
glob: 13.0.6
@@ -12542,8 +11521,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.62.2
fsevents: 2.3.3
- route-recognizer@0.3.4: {}
-
router@2.2.0(supports-color@7.2.0):
dependencies:
debug: 4.4.3(supports-color@7.2.0)
@@ -12556,14 +11533,6 @@ snapshots:
safe-buffer@5.1.2: {}
- safe-buffer@5.2.1: {}
-
- safe-regex2@5.0.0:
- dependencies:
- ret: 0.5.0
-
- safe-stable-stringify@2.5.0: {}
-
safer-buffer@2.1.2: {}
satteri@0.9.5:
@@ -12587,10 +11556,6 @@ snapshots:
sax@1.6.1: {}
- secure-json-parse@4.1.0: {}
-
- seedrandom@3.0.5: {}
-
semantic-release@25.0.2(supports-color@7.2.0)(typescript@5.9.3):
dependencies:
'@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.2(supports-color@7.2.0)(typescript@5.9.3))(supports-color@7.2.0)
@@ -12638,24 +11603,6 @@ snapshots:
semver@7.8.5: {}
- send@0.19.2(supports-color@7.2.0):
- dependencies:
- debug: 2.6.9(supports-color@7.2.0)
- depd: 2.0.0
- destroy: 1.2.0
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- fresh: 0.5.2
- http-errors: 2.0.1
- mime: 1.6.0
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.2
- transitivePeerDependencies:
- - supports-color
-
send@1.2.1(supports-color@7.2.0):
dependencies:
debug: 4.4.3(supports-color@7.2.0)
@@ -12672,15 +11619,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- serve-static@1.16.3(supports-color@7.2.0):
- dependencies:
- encodeurl: 2.0.0
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 0.19.2(supports-color@7.2.0)
- transitivePeerDependencies:
- - supports-color
-
serve-static@2.2.1(supports-color@7.2.0):
dependencies:
encodeurl: 2.0.0
@@ -12690,8 +11628,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- set-cookie-parser@2.7.2: {}
-
setprototypeof@1.2.0: {}
sharp@0.35.3(@types/node@25.3.0):
@@ -12807,14 +11743,8 @@ snapshots:
dependencies:
unicode-emoji-modifier-base: 1.0.0
- slugify@1.6.6: {}
-
smol-toml@1.7.0: {}
- sonic-boom@4.2.1:
- dependencies:
- atomic-sleep: 1.0.0
-
source-map-js@1.2.1: {}
source-map-support@0.5.19:
@@ -12848,8 +11778,6 @@ snapshots:
dependencies:
through2: 2.0.5
- split2@4.2.0: {}
-
stackback@0.0.2: {}
statuses@2.0.2: {}
@@ -12978,12 +11906,6 @@ snapshots:
dependencies:
any-promise: 1.3.0
- thread-stream@4.0.0:
- dependencies:
- real-require: 0.2.0
-
- three@0.172.0: {}
-
through2@2.0.5:
dependencies:
readable-stream: 2.3.8
@@ -13017,8 +11939,6 @@ snapshots:
tmp@0.2.7: {}
- to-arraybuffer@1.0.1: {}
-
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -13092,11 +12012,6 @@ snapshots:
dependencies:
tagged-tag: 1.0.0
- type-is@1.6.18:
- dependencies:
- media-typer: 0.3.0
- mime-types: 2.1.35
-
type-is@2.0.1:
dependencies:
content-type: 1.0.5
@@ -13251,17 +12166,8 @@ snapshots:
url-join@5.0.0: {}
- url-parse@1.5.10:
- dependencies:
- querystringify: 2.2.0
- requires-port: 1.0.0
-
- utf8-byte-length@1.0.5: {}
-
util-deprecate@1.0.2: {}
- utils-merge@1.0.1: {}
-
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.2.0
diff --git a/scripts/brand-assets/README.md b/scripts/brand-assets/README.md
index db7f0f89..ea842dd0 100644
--- a/scripts/brand-assets/README.md
+++ b/scripts/brand-assets/README.md
@@ -1,60 +1,15 @@
-# Brand Asset Generation
+# Brand asset generation
-Dogfooding the `meshy-content-generator` package to produce Agentic brand imagery.
-
-## Prerequisites
-
-- Node.js 20+
-- `MESHY_API_KEY` environment variable (available via Doppler)
-
-## What It Generates
-
-| Asset | Directory | Aspect Ratio | Description |
-|-------|-----------|--------------|-------------|
-| Hero Image | `hero-image/` | 16:9 | Abstract command-center visualization for landing pages |
-| OG Background | `og-background/` | 16:9 | Dark textured background for Open Graph / social cards |
-| Icon Concept | `icon-concept/` | 1:1 | Geometric logo mark exploration |
-
-Each directory contains a `manifest.json` that drives the generation and stores state.
-
-## Running
+The declarative `pipeline.json` and `catalogue.json` run through the standalone
+`meshy-content-generator`; this monorepo contains no Meshy client.
```bash
-# Option 1: Export the key directly
-export MESHY_API_KEY="your-key-here"
-bash scripts/brand-assets/generate.sh
-
-# Option 2: Use Doppler to inject secrets
-doppler run -- bash scripts/brand-assets/generate.sh
+cp .env.example .env
+bash scripts/brand-assets/generate.sh --dry-run
+bash scripts/brand-assets/generate.sh agentic-hero
```
-The script iterates over every subdirectory that contains a `manifest.json` and runs the `brand-image` pipeline against it.
-
-## How Idempotent Manifests Work
-
-Each `manifest.json` starts as a plain asset description. When the pipeline runs:
-
-1. A deterministic `seed` is written into the manifest (first run only).
-2. The Meshy API task is created and polled until completion.
-3. Task state (`taskId`, `status`, `outputs`, `artifacts`) is persisted back into the manifest under the `tasks` key.
-4. Generated images are downloaded as `concept-0.png`, `concept-1.png`, etc.
-
-On subsequent runs the runner detects `"status": "SUCCEEDED"` in the manifest and skips the API call entirely. If an artifact file is missing on disk but the task succeeded, only the download step is re-executed.
-
-To force regeneration, delete the `tasks` key from the manifest and remove the local image files.
-
-## Customizing Prompts
-
-Edit the `textToImageTask.prompt` field in any `manifest.json`. Other tunable fields:
-
-- `aiModel` -- Meshy model variant (default: `nano-banana`)
-- `aspectRatio` -- `1:1`, `16:9`, `4:3`, etc.
-- `generateMultiView` -- set `true` for multi-view concept sheets
-
-After editing, re-run `generate.sh`. If the previous task state is still present in the manifest, delete the `tasks` key first so the pipeline treats it as a fresh run.
-
-## Adding New Assets
-
-1. Create a new subdirectory under `scripts/brand-assets/`.
-2. Add a `manifest.json` following the schema (must have `id`, `name`, `type`, and a `textToImageTask` block).
-3. Run `generate.sh` -- the new directory will be picked up automatically.
+`--dry-run` validates all three requests without reading the API key, making a
+network call, or writing output. The live route delegates credentials, retries,
+polling, errors, downloads and job sidecars to `vendor-fabric` through the
+standalone package. Generated images land under `generated/`.
diff --git a/scripts/brand-assets/catalogue.json b/scripts/brand-assets/catalogue.json
new file mode 100644
index 00000000..5e135b7e
--- /dev/null
+++ b/scripts/brand-assets/catalogue.json
@@ -0,0 +1,22 @@
+{
+ "assets": [
+ {
+ "id": "agentic-hero",
+ "prompt": "Abstract digital command center visualization, warm amber and deep orange energy streams connecting geometric nodes against a dark background, representing AI agent orchestration and fleet coordination, minimal clean tech aesthetic, dark moody atmosphere with amber glow highlights, no text, no faces, professional brand imagery",
+ "model": "nano-banana",
+ "aspect": "16:9"
+ },
+ {
+ "id": "agentic-icon",
+ "prompt": "Minimalist geometric logo mark for an AI orchestration platform called Agentic, central node with radiating connections to satellite nodes forming a command network, warm amber and deep orange on transparent dark background, flat vector style, clean precise lines, professional tech brand icon, single mark centered",
+ "model": "nano-banana",
+ "aspect": "1:1"
+ },
+ {
+ "id": "agentic-og-bg",
+ "prompt": "Abstract dark background texture with subtle amber and orange geometric patterns, hexagonal grid dissolving into warm light particles, dark near-black base with warm amber energy accents, suitable for text overlay, professional tech brand background, no text",
+ "model": "nano-banana",
+ "aspect": "16:9"
+ }
+ ]
+}
diff --git a/scripts/brand-assets/generate.sh b/scripts/brand-assets/generate.sh
index 2605d30a..67a52c68 100755
--- a/scripts/brand-assets/generate.sh
+++ b/scripts/brand-assets/generate.sh
@@ -3,31 +3,17 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
-MESHY_PKG="$REPO_ROOT/packages/meshy-content-generator"
-# Require MESHY_API_KEY
-if [ -z "${MESHY_API_KEY:-}" ]; then
- echo "Error: MESHY_API_KEY is required. Set it in your environment or via Doppler."
- echo " doppler run -- bash $0"
- exit 1
+ENV_ARGS=()
+if [ -f "$REPO_ROOT/.env" ]; then
+ ENV_ARGS=(--env-file "$REPO_ROOT/.env")
fi
-echo "=== Generating Agentic Brand Assets ==="
-echo ""
-
-for manifest_dir in "$SCRIPT_DIR"/*/; do
- [ -f "$manifest_dir/manifest.json" ] || continue
- name=$(basename "$manifest_dir")
- echo "--- Generating: $name ---"
-
- npx content-gen run brand-image "$manifest_dir" \
- --pipelines "$MESHY_PKG/pipelines/definitions" \
- --tasks "$MESHY_PKG/tasks/definitions" \
- --meshy-api-key "$MESHY_API_KEY"
-
- echo "--- Done: $name ---"
- echo ""
-done
+GENERATOR_SOURCE="meshy-content-generator==0.2.0"
+if [ -n "${MESHY_CONTENT_GENERATOR_SOURCE:-}" ]; then
+ GENERATOR_SOURCE="$MESHY_CONTENT_GENERATOR_SOURCE"
+fi
-echo "=== All brand assets generated ==="
-echo "Check scripts/brand-assets/*/concept-*.png for results"
+uvx "${ENV_ARGS[@]}" \
+ --from "$GENERATOR_SOURCE" \
+ content-gen run "$SCRIPT_DIR/pipeline.json" --root "$REPO_ROOT" "$@"
diff --git a/scripts/brand-assets/hero-image/manifest.json b/scripts/brand-assets/hero-image/manifest.json
deleted file mode 100644
index 21f5163e..00000000
--- a/scripts/brand-assets/hero-image/manifest.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "id": "agentic-hero",
- "name": "Agentic Hero Image",
- "type": "brand",
- "textToImageTask": {
- "prompt": "Abstract digital command center visualization, warm amber and deep orange energy streams connecting geometric nodes against a dark background, representing AI agent orchestration and fleet coordination, minimal clean tech aesthetic, dark moody atmosphere with amber glow highlights, no text, no faces, professional brand imagery",
- "aiModel": "nano-banana",
- "aspectRatio": "16:9"
- }
-}
diff --git a/scripts/brand-assets/icon-concept/manifest.json b/scripts/brand-assets/icon-concept/manifest.json
deleted file mode 100644
index 229f25c5..00000000
--- a/scripts/brand-assets/icon-concept/manifest.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "id": "agentic-icon",
- "name": "Agentic Icon Concept",
- "type": "brand",
- "textToImageTask": {
- "prompt": "Minimalist geometric logo mark for an AI orchestration platform called Agentic, central node with radiating connections to satellite nodes forming a command network, warm amber and deep orange on transparent dark background, flat vector style, clean precise lines, professional tech brand icon, single mark centered",
- "aiModel": "nano-banana",
- "aspectRatio": "1:1"
- }
-}
diff --git a/scripts/brand-assets/og-background/manifest.json b/scripts/brand-assets/og-background/manifest.json
deleted file mode 100644
index 2533b404..00000000
--- a/scripts/brand-assets/og-background/manifest.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "id": "agentic-og-bg",
- "name": "Agentic OG Image Background",
- "type": "brand",
- "textToImageTask": {
- "prompt": "Abstract dark background texture with subtle amber and orange geometric patterns, hexagonal grid dissolving into warm light particles, dark near-black base with warm amber energy accents, suitable for text overlay, professional tech brand background, no text",
- "aiModel": "nano-banana",
- "aspectRatio": "16:9"
- }
-}
diff --git a/scripts/brand-assets/pipeline.json b/scripts/brand-assets/pipeline.json
new file mode 100644
index 00000000..acf0bfc8
--- /dev/null
+++ b/scripts/brand-assets/pipeline.json
@@ -0,0 +1,14 @@
+{
+ "schema_version": 1,
+ "name": "agentic-brand-assets",
+ "source": "scripts/brand-assets/catalogue.json",
+ "records": "assets",
+ "generation": {
+ "id": "{id}",
+ "prompt": "{prompt}",
+ "model": "{model}",
+ "aspect_ratio": "{aspect}",
+ "output": "scripts/brand-assets/generated/{id}.png"
+ },
+ "postprocess": []
+}