diff --git a/package.json b/package.json
index a541e3f..73c7426 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "figma-ai-plugin",
- "version": "0.1.11",
+ "version": "0.1.12",
"private": true,
"dependencies": {
"@create-figma-plugin/ui": "^4.0.3",
diff --git a/src/apinex-models.ts b/src/apinex-models.ts
new file mode 100644
index 0000000..4852ab0
--- /dev/null
+++ b/src/apinex-models.ts
@@ -0,0 +1,33 @@
+// Auto-generated from apinex /v1/models (bundled; Figma plugin sandbox has no network egress).
+export const APINEX_MODELS: string[] = [
+ "claude-fable-5.1",
+ "claude-opus-5",
+ "claude-sonnet-5",
+ "deepseek-v4-flash",
+ "deepseek-v4-pro",
+ "deepseek-v4.1-flash",
+ "free/claude-opus-4.6",
+ "free/claude-sonnet-4.6",
+ "free/deepseek-v4-flash-0731",
+ "free/deepseek-v4-pro-0813",
+ "free/deepseek-v4.1-flash",
+ "free/glm-5.3-flash",
+ "free/gemini-3.1-pro",
+ "free/gemini-3.8-flash",
+ "free/gpt-5.6-luna",
+ "free/hy4",
+ "free/kimi-k3",
+ "free/mimo-v2.5",
+ "free/muse-spark-1.3",
+ "free/qwen-3.8-max",
+ "gemini-3.1-pro",
+ "gemini-3.8-flash",
+ "kimi-k3",
+ "gpt-5.6-luna",
+ "gpt-5.6-sol",
+ "gpt-5.6-terra",
+ "gpt-6-astra",
+ "glm-5.3",
+ "glm-5.3-flash",
+ "grok-4.6"
+]
diff --git a/src/settings.ts b/src/settings.ts
index deca9ce..22ca1cf 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -3,6 +3,8 @@
// No server auth yet — everything lives on the Figma file locally. Backup/restore
// is just a JSON export/import of this same document. (Server auth comes later.)
+import { APINEX_MODELS } from './apinex-models'
+
export type ProviderType = 'apinex'
export interface ProviderConfig {
@@ -47,7 +49,7 @@ export function createApinexProvider (): ProviderConfig {
baseUrl: APINEX_BASE_URL,
apiKey: '',
defaultModel: '',
- models: []
+ models: APINEX_MODELS
}
}
diff --git a/src/ui.tsx b/src/ui.tsx
index d19e8c4..d54de82 100644
--- a/src/ui.tsx
+++ b/src/ui.tsx
@@ -22,6 +22,7 @@ import { h, Fragment, Component } from 'preact'
import { useState, useEffect, useRef } from 'preact/hooks'
import MenuItem from './MenuItem'
import { type Settings, type ProviderConfig, defaultSettings, loadSettings, saveSettings, settingsToJSON, settingsFromJSON, APINEX_BASE_URL } from './settings'
+import { APINEX_MODELS } from './apinex-models'
const MIN_WINDOW_SIZE = { width: 320, height: 200 }
// No static max: "maximize" targets the whole viewport (maxViewport from main),
@@ -29,7 +30,7 @@ const MIN_WINDOW_SIZE = { width: 320, height: 200 }
// very high — actual clamp is done by main via clampWindowSize (bounds*zoom).
// Full plugin version shown in the footer status bar. Keep in sync with package.json "version".
-const PLUGIN_VERSION = '0.1.11'
+const PLUGIN_VERSION = '0.1.12'
const fieldStyle = {
display: 'flex',
@@ -121,7 +122,7 @@ function SettingsPanel (props: { settings: Settings, setSettings: (s: Settings)
: 'Failed to load models'
logEvent(' error: ' + msg)
if (payload.raw != null) logEvent(' RAW: ' + String(payload.raw).slice(0, 1000))
- setModelsError(msg)
+ setModelsError('Live fetch unavailable (sandbox has no internet) — using bundled list')
return
}
logEvent(' models parsed=' + (payload.models ? payload.models.length : 0))
@@ -197,6 +198,8 @@ function SettingsPanel (props: { settings: Settings, setSettings: (s: Settings)
return