agent-dj 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +139 -181
- package/dist/server.js +119 -179
- package/package.json +1 -1
- package/web/dist/assets/index-CVUo4o24.js +348 -0
- package/web/dist/assets/{index-C_p3GG7h.css → index-MHuCb1sM.css} +1 -1
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-DkpIwp3f.js +0 -348
package/dist/cli.js
CHANGED
|
@@ -124,6 +124,18 @@ var init_defaults = __esm({
|
|
|
124
124
|
ollama: {
|
|
125
125
|
default: "llama3.2",
|
|
126
126
|
options: ["llama3.2", "mistral", "codellama", "phi3"]
|
|
127
|
+
},
|
|
128
|
+
deepseek: {
|
|
129
|
+
default: "deepseek-chat",
|
|
130
|
+
options: ["deepseek-chat", "deepseek-reasoner"]
|
|
131
|
+
},
|
|
132
|
+
xai: {
|
|
133
|
+
default: "grok-3",
|
|
134
|
+
options: ["grok-3", "grok-3-mini", "grok-2", "grok-2-mini"]
|
|
135
|
+
},
|
|
136
|
+
mistral: {
|
|
137
|
+
default: "mistral-large-latest",
|
|
138
|
+
options: ["mistral-large-latest", "codestral-latest", "mistral-small-latest"]
|
|
127
139
|
}
|
|
128
140
|
};
|
|
129
141
|
}
|
|
@@ -519,14 +531,20 @@ var init_setup = __esm({
|
|
|
519
531
|
openai: "OpenAI (GPT)",
|
|
520
532
|
google: "Google (Gemini)",
|
|
521
533
|
groq: "Groq (fast inference)",
|
|
522
|
-
ollama: "Ollama (local, free)"
|
|
534
|
+
ollama: "Ollama (local, free)",
|
|
535
|
+
deepseek: "DeepSeek (cheap & strong)",
|
|
536
|
+
xai: "xAI (Grok)",
|
|
537
|
+
mistral: "Mistral AI"
|
|
523
538
|
};
|
|
524
539
|
API_KEY_HINTS = {
|
|
525
540
|
anthropic: "Get key at console.anthropic.com",
|
|
526
541
|
openai: "Get key at platform.openai.com",
|
|
527
542
|
google: "Get key at aistudio.google.com",
|
|
528
543
|
groq: "Get key at console.groq.com (free tier available)",
|
|
529
|
-
ollama: "No key needed \u2014 runs locally"
|
|
544
|
+
ollama: "No key needed \u2014 runs locally",
|
|
545
|
+
deepseek: "Get key at platform.deepseek.com",
|
|
546
|
+
xai: "Get key at console.x.ai",
|
|
547
|
+
mistral: "Get key at console.mistral.ai"
|
|
530
548
|
};
|
|
531
549
|
}
|
|
532
550
|
});
|
|
@@ -272727,6 +272745,24 @@ async function getOrCreateProvider(config) {
|
|
|
272727
272745
|
baseURL: config.baseUrl ?? "http://localhost:11434/v1"
|
|
272728
272746
|
});
|
|
272729
272747
|
break;
|
|
272748
|
+
case "deepseek":
|
|
272749
|
+
instance = createOpenAI({
|
|
272750
|
+
apiKey: config.apiKey,
|
|
272751
|
+
baseURL: "https://api.deepseek.com/v1"
|
|
272752
|
+
});
|
|
272753
|
+
break;
|
|
272754
|
+
case "xai":
|
|
272755
|
+
instance = createOpenAI({
|
|
272756
|
+
apiKey: config.apiKey,
|
|
272757
|
+
baseURL: "https://api.x.ai/v1"
|
|
272758
|
+
});
|
|
272759
|
+
break;
|
|
272760
|
+
case "mistral":
|
|
272761
|
+
instance = createOpenAI({
|
|
272762
|
+
apiKey: config.apiKey,
|
|
272763
|
+
baseURL: "https://api.mistral.ai/v1"
|
|
272764
|
+
});
|
|
272765
|
+
break;
|
|
272730
272766
|
default:
|
|
272731
272767
|
throw new Error(`Unsupported provider: ${config.provider}`);
|
|
272732
272768
|
}
|
|
@@ -272734,7 +272770,7 @@ async function getOrCreateProvider(config) {
|
|
|
272734
272770
|
return instance;
|
|
272735
272771
|
}
|
|
272736
272772
|
function getLanguageModel(config, modelId) {
|
|
272737
|
-
const model = modelId
|
|
272773
|
+
const model = modelId || config.model || getDefaultModel(config.provider);
|
|
272738
272774
|
if (config.provider === "anthropic" && config.authType === "session_token") {
|
|
272739
272775
|
_lastSessionTokenSupportsTools = false;
|
|
272740
272776
|
if (isClaudeCliAvailable()) {
|
|
@@ -272770,7 +272806,10 @@ function getDefaultModel(provider) {
|
|
|
272770
272806
|
openai: "gpt-4o",
|
|
272771
272807
|
google: "gemini-2.0-flash",
|
|
272772
272808
|
groq: "llama-3.3-70b-versatile",
|
|
272773
|
-
ollama: "llama3.2"
|
|
272809
|
+
ollama: "llama3.2",
|
|
272810
|
+
deepseek: "deepseek-chat",
|
|
272811
|
+
xai: "grok-3",
|
|
272812
|
+
mistral: "mistral-large-latest"
|
|
272774
272813
|
};
|
|
272775
272814
|
return defaults[provider];
|
|
272776
272815
|
}
|
|
@@ -273275,7 +273314,19 @@ var init_models = __esm({
|
|
|
273275
273314
|
{ id: "llama-3.1-8b-instant", name: "Llama 3.1 8B", provider: "groq", contextWindow: 128e3, costTier: "cheap", supportsTools: true, supportsVision: false },
|
|
273276
273315
|
// Ollama
|
|
273277
273316
|
{ id: "llama3.2", name: "Llama 3.2", provider: "ollama", contextWindow: 128e3, costTier: "cheap", supportsTools: true, supportsVision: false },
|
|
273278
|
-
{ id: "mistral", name: "Mistral", provider: "ollama", contextWindow: 32e3, costTier: "cheap", supportsTools: true, supportsVision: false }
|
|
273317
|
+
{ id: "mistral", name: "Mistral", provider: "ollama", contextWindow: 32e3, costTier: "cheap", supportsTools: true, supportsVision: false },
|
|
273318
|
+
// DeepSeek
|
|
273319
|
+
{ id: "deepseek-chat", name: "DeepSeek Chat", provider: "deepseek", contextWindow: 128e3, costTier: "cheap", supportsTools: true, supportsVision: true },
|
|
273320
|
+
{ id: "deepseek-reasoner", name: "DeepSeek Reasoner", provider: "deepseek", contextWindow: 128e3, costTier: "standard", supportsTools: false, supportsVision: false },
|
|
273321
|
+
// xAI
|
|
273322
|
+
{ id: "grok-3", name: "Grok 3", provider: "xai", contextWindow: 131072, costTier: "premium", supportsTools: true, supportsVision: true },
|
|
273323
|
+
{ id: "grok-3-mini", name: "Grok 3 Mini", provider: "xai", contextWindow: 131072, costTier: "standard", supportsTools: true, supportsVision: true },
|
|
273324
|
+
{ id: "grok-2", name: "Grok 2", provider: "xai", contextWindow: 131072, costTier: "standard", supportsTools: true, supportsVision: true },
|
|
273325
|
+
{ id: "grok-2-mini", name: "Grok 2 Mini", provider: "xai", contextWindow: 131072, costTier: "cheap", supportsTools: true, supportsVision: false },
|
|
273326
|
+
// Mistral
|
|
273327
|
+
{ id: "mistral-large-latest", name: "Mistral Large", provider: "mistral", contextWindow: 128e3, costTier: "standard", supportsTools: true, supportsVision: false },
|
|
273328
|
+
{ id: "codestral-latest", name: "Codestral", provider: "mistral", contextWindow: 256e3, costTier: "cheap", supportsTools: true, supportsVision: false },
|
|
273329
|
+
{ id: "mistral-small-latest", name: "Mistral Small", provider: "mistral", contextWindow: 128e3, costTier: "cheap", supportsTools: true, supportsVision: false }
|
|
273279
273330
|
];
|
|
273280
273331
|
}
|
|
273281
273332
|
});
|
|
@@ -274389,6 +274440,18 @@ var init_settings = __esm({
|
|
|
274389
274440
|
saveConfig(updated);
|
|
274390
274441
|
return c.json({ ok: true });
|
|
274391
274442
|
});
|
|
274443
|
+
settingsRoutes.delete("/providers/:name", (c) => {
|
|
274444
|
+
const name = c.req.param("name");
|
|
274445
|
+
const config = loadConfig();
|
|
274446
|
+
const idx = config.providers.findIndex((p2) => p2.provider === name);
|
|
274447
|
+
if (idx < 0) return c.json({ error: "Provider not found" }, 404);
|
|
274448
|
+
if (config.defaultProvider === name) {
|
|
274449
|
+
return c.json({ error: "Cannot delete the default provider. Set another as default first." }, 400);
|
|
274450
|
+
}
|
|
274451
|
+
config.providers.splice(idx, 1);
|
|
274452
|
+
saveConfig(config);
|
|
274453
|
+
return c.json({ ok: true });
|
|
274454
|
+
});
|
|
274392
274455
|
settingsRoutes.get("/system", (c) => {
|
|
274393
274456
|
const stats = getSystemStats();
|
|
274394
274457
|
return c.json(stats);
|
|
@@ -274465,214 +274528,109 @@ var init_catalog_default = __esm({
|
|
|
274465
274528
|
lastUpdated: (/* @__PURE__ */ new Date()).toISOString(),
|
|
274466
274529
|
apps: [
|
|
274467
274530
|
{
|
|
274468
|
-
id: "
|
|
274469
|
-
name: "
|
|
274470
|
-
bundleId: "com.
|
|
274471
|
-
version: "1.
|
|
274472
|
-
category: "
|
|
274473
|
-
description: "
|
|
274474
|
-
shortDescription: "AI-powered
|
|
274531
|
+
id: "tryonai",
|
|
274532
|
+
name: "Dressy - TryOnAI",
|
|
274533
|
+
bundleId: "com.tryonai.dzhumabaevs.app",
|
|
274534
|
+
version: "1.0.0",
|
|
274535
|
+
category: "lifestyle",
|
|
274536
|
+
description: "Virtual try-on powered by AI. Upload a photo and see how different outfits look on you before buying. Uses advanced AI to realistically overlay clothing onto your body with accurate fit and drape.",
|
|
274537
|
+
shortDescription: "AI-powered virtual clothing try-on",
|
|
274475
274538
|
developer: "Bakyt",
|
|
274476
|
-
iconUrl: "/
|
|
274539
|
+
iconUrl: "http://65.109.4.13/store/icons/tryonai.png",
|
|
274477
274540
|
screenshots: [],
|
|
274478
|
-
sizeMb:
|
|
274479
|
-
minIosVersion: "
|
|
274480
|
-
releaseDate: "
|
|
274541
|
+
sizeMb: 35,
|
|
274542
|
+
minIosVersion: "17.0",
|
|
274543
|
+
releaseDate: "2025-01-15",
|
|
274481
274544
|
lastUpdated: "2025-03-10",
|
|
274482
|
-
changelog: "
|
|
274545
|
+
changelog: "Initial release",
|
|
274483
274546
|
installMethods: ["quick_install", "altstore"],
|
|
274484
|
-
downloadUrl: "",
|
|
274547
|
+
downloadUrl: "http://65.109.4.13/store/ipas/tryonai-latest.ipa",
|
|
274485
274548
|
status: "available",
|
|
274486
|
-
tags: ["ai", "
|
|
274549
|
+
tags: ["ai", "fashion", "camera", "ar"]
|
|
274487
274550
|
},
|
|
274488
274551
|
{
|
|
274489
|
-
id: "
|
|
274490
|
-
name: "
|
|
274491
|
-
bundleId: "com.
|
|
274492
|
-
version: "2
|
|
274493
|
-
category: "health",
|
|
274494
|
-
description: "Snap a photo of your meal and instantly get calorie counts and macro breakdowns. Uses on-device AI to identify foods, portion sizes, and nutritional information. Track your daily intake with beautiful charts.",
|
|
274495
|
-
shortDescription: "AI calorie tracking from photos",
|
|
274496
|
-
developer: "Bakyt",
|
|
274497
|
-
iconUrl: "/api/apps/icon/caloriessnap",
|
|
274498
|
-
screenshots: [],
|
|
274499
|
-
sizeMb: 38,
|
|
274500
|
-
minIosVersion: "16.0",
|
|
274501
|
-
releaseDate: "2024-04-20",
|
|
274502
|
-
lastUpdated: "2025-02-28",
|
|
274503
|
-
changelog: "Improved food recognition, added meal history export",
|
|
274504
|
-
installMethods: ["quick_install", "altstore", "testflight"],
|
|
274505
|
-
downloadUrl: "",
|
|
274506
|
-
status: "available",
|
|
274507
|
-
tags: ["ai", "health", "nutrition", "camera"]
|
|
274508
|
-
},
|
|
274509
|
-
{
|
|
274510
|
-
id: "vibelens",
|
|
274511
|
-
name: "VibeLens",
|
|
274512
|
-
bundleId: "com.bakyt.vibelens",
|
|
274513
|
-
version: "1.5.0",
|
|
274514
|
-
category: "photography",
|
|
274515
|
-
description: "Transform your photos with AI-powered mood filters. VibeLens analyzes the emotional tone of your image and applies cinematic color grading to match. Choose from 30+ vibe presets or let AI pick the perfect one.",
|
|
274516
|
-
shortDescription: "AI mood-based photo filters",
|
|
274517
|
-
developer: "Bakyt",
|
|
274518
|
-
iconUrl: "/api/apps/icon/vibelens",
|
|
274519
|
-
screenshots: [],
|
|
274520
|
-
sizeMb: 52,
|
|
274521
|
-
minIosVersion: "16.0",
|
|
274522
|
-
releaseDate: "2024-08-01",
|
|
274523
|
-
lastUpdated: "2025-01-15",
|
|
274524
|
-
changelog: "New film grain presets, batch processing support",
|
|
274525
|
-
installMethods: ["quick_install", "altstore"],
|
|
274526
|
-
downloadUrl: "",
|
|
274527
|
-
status: "available",
|
|
274528
|
-
tags: ["ai", "photos", "filters", "creative"]
|
|
274529
|
-
},
|
|
274530
|
-
{
|
|
274531
|
-
id: "posescope",
|
|
274532
|
-
name: "PoseScope",
|
|
274533
|
-
bundleId: "com.bakyt.posescope",
|
|
274534
|
-
version: "1.1.0",
|
|
274535
|
-
category: "health",
|
|
274536
|
-
description: "Real-time pose analysis for yoga, workouts, and physical therapy. Uses your camera to track body position and provides instant feedback on form. Includes guided routines and progress tracking.",
|
|
274537
|
-
shortDescription: "AI pose analysis for fitness",
|
|
274538
|
-
developer: "Bakyt",
|
|
274539
|
-
iconUrl: "/api/apps/icon/posescope",
|
|
274540
|
-
screenshots: [],
|
|
274541
|
-
sizeMb: 41,
|
|
274542
|
-
minIosVersion: "16.0",
|
|
274543
|
-
releaseDate: "2024-09-12",
|
|
274544
|
-
lastUpdated: "2025-02-05",
|
|
274545
|
-
changelog: "Added 20 new yoga poses, improved joint detection",
|
|
274546
|
-
installMethods: ["quick_install", "altstore"],
|
|
274547
|
-
downloadUrl: "",
|
|
274548
|
-
status: "available",
|
|
274549
|
-
tags: ["ai", "fitness", "yoga", "camera", "health"]
|
|
274550
|
-
},
|
|
274551
|
-
{
|
|
274552
|
-
id: "soundsig",
|
|
274553
|
-
name: "SoundSig",
|
|
274554
|
-
bundleId: "com.bakyt.soundsig",
|
|
274555
|
-
version: "1.0.3",
|
|
274552
|
+
id: "fakecall",
|
|
274553
|
+
name: "Alibi",
|
|
274554
|
+
bundleId: "com.dzhumabaevs.fakecall",
|
|
274555
|
+
version: "1.2",
|
|
274556
274556
|
category: "utilities",
|
|
274557
|
-
description: "
|
|
274558
|
-
shortDescription: "
|
|
274557
|
+
description: "Schedule realistic fake phone calls to get out of awkward situations. Customize caller name, photo, ringtone, and timing. The call screen looks exactly like a real incoming call \u2014 nobody will know the difference.",
|
|
274558
|
+
shortDescription: "Realistic fake incoming calls on demand",
|
|
274559
274559
|
developer: "Bakyt",
|
|
274560
|
-
iconUrl: "/
|
|
274560
|
+
iconUrl: "http://65.109.4.13/store/icons/fakecall.png",
|
|
274561
274561
|
screenshots: [],
|
|
274562
|
-
sizeMb:
|
|
274563
|
-
minIosVersion: "
|
|
274562
|
+
sizeMb: 15,
|
|
274563
|
+
minIosVersion: "17.0",
|
|
274564
274564
|
releaseDate: "2024-11-01",
|
|
274565
|
-
lastUpdated: "2025-01-20",
|
|
274566
|
-
changelog: "Added 200+ new sound categories",
|
|
274567
|
-
installMethods: ["quick_install", "altstore"],
|
|
274568
|
-
downloadUrl: "",
|
|
274569
|
-
status: "available",
|
|
274570
|
-
tags: ["ai", "audio", "identification", "accessibility"]
|
|
274571
|
-
},
|
|
274572
|
-
{
|
|
274573
|
-
id: "aura",
|
|
274574
|
-
name: "Aura",
|
|
274575
|
-
bundleId: "com.bakyt.aura",
|
|
274576
|
-
version: "2.1.0",
|
|
274577
|
-
category: "lifestyle",
|
|
274578
|
-
description: "Your personal mood and energy tracker. Aura uses AI to analyze your daily patterns \u2014 sleep, activity, weather, and screen time \u2014 to predict your energy levels and suggest optimal times for focus, exercise, and rest.",
|
|
274579
|
-
shortDescription: "AI-powered mood & energy tracker",
|
|
274580
|
-
developer: "Bakyt",
|
|
274581
|
-
iconUrl: "/api/apps/icon/aura",
|
|
274582
|
-
screenshots: [],
|
|
274583
|
-
sizeMb: 22,
|
|
274584
|
-
minIosVersion: "16.0",
|
|
274585
|
-
releaseDate: "2024-03-05",
|
|
274586
|
-
lastUpdated: "2025-03-01",
|
|
274587
|
-
changelog: "New sleep quality insights, widget support",
|
|
274588
|
-
installMethods: ["quick_install", "altstore", "testflight"],
|
|
274589
|
-
downloadUrl: "",
|
|
274590
|
-
status: "available",
|
|
274591
|
-
tags: ["ai", "wellness", "mood", "tracking"]
|
|
274592
|
-
},
|
|
274593
|
-
{
|
|
274594
|
-
id: "sightx",
|
|
274595
|
-
name: "SightX",
|
|
274596
|
-
bundleId: "com.bakyt.sightx",
|
|
274597
|
-
version: "1.3.0",
|
|
274598
|
-
category: "utilities",
|
|
274599
|
-
description: "Point your camera at any object and get instant information. SightX identifies plants, animals, landmarks, products, and text in 40+ languages. Save discoveries to your personal visual encyclopedia.",
|
|
274600
|
-
shortDescription: "Visual search & object identification",
|
|
274601
|
-
developer: "Bakyt",
|
|
274602
|
-
iconUrl: "/api/apps/icon/sightx",
|
|
274603
|
-
screenshots: [],
|
|
274604
|
-
sizeMb: 56,
|
|
274605
|
-
minIosVersion: "16.0",
|
|
274606
|
-
releaseDate: "2024-05-18",
|
|
274607
274565
|
lastUpdated: "2025-02-20",
|
|
274608
|
-
changelog: "Added
|
|
274566
|
+
changelog: "v1.2: Added custom ringtones and contact photos",
|
|
274609
274567
|
installMethods: ["quick_install", "altstore"],
|
|
274610
|
-
downloadUrl: "",
|
|
274568
|
+
downloadUrl: "http://65.109.4.13/store/ipas/fakecall-latest.ipa",
|
|
274611
274569
|
status: "available",
|
|
274612
|
-
tags: ["
|
|
274570
|
+
tags: ["utility", "prank", "social"]
|
|
274613
274571
|
},
|
|
274614
274572
|
{
|
|
274615
|
-
id: "
|
|
274616
|
-
name: "
|
|
274617
|
-
bundleId: "com.
|
|
274618
|
-
version: "1.0.
|
|
274573
|
+
id: "soundvault",
|
|
274574
|
+
name: "SoundVault",
|
|
274575
|
+
bundleId: "com.dzhumabaevs.soundvault",
|
|
274576
|
+
version: "1.0.2",
|
|
274619
274577
|
category: "entertainment",
|
|
274620
|
-
description: "
|
|
274621
|
-
shortDescription: "
|
|
274578
|
+
description: "Your personal sound library and audio manager. Record, organize, and play back sounds with a beautiful interface. Create soundboards, tag your recordings, and access them instantly. Perfect for musicians, content creators, and sound enthusiasts.",
|
|
274579
|
+
shortDescription: "Personal sound library and audio manager",
|
|
274622
274580
|
developer: "Bakyt",
|
|
274623
|
-
iconUrl: "/
|
|
274581
|
+
iconUrl: "http://65.109.4.13/store/icons/soundvault.png",
|
|
274624
274582
|
screenshots: [],
|
|
274625
|
-
sizeMb:
|
|
274626
|
-
minIosVersion: "
|
|
274627
|
-
releaseDate: "
|
|
274628
|
-
lastUpdated: "2025-
|
|
274629
|
-
changelog: "
|
|
274583
|
+
sizeMb: 20,
|
|
274584
|
+
minIosVersion: "17.0",
|
|
274585
|
+
releaseDate: "2024-12-01",
|
|
274586
|
+
lastUpdated: "2025-01-15",
|
|
274587
|
+
changelog: "v1.0.2: Bug fixes and performance improvements",
|
|
274630
274588
|
installMethods: ["quick_install", "altstore"],
|
|
274631
|
-
downloadUrl: "",
|
|
274589
|
+
downloadUrl: "http://65.109.4.13/store/ipas/soundvault-latest.ipa",
|
|
274632
274590
|
status: "available",
|
|
274633
|
-
tags: ["
|
|
274591
|
+
tags: ["audio", "music", "recording", "creative"]
|
|
274634
274592
|
},
|
|
274635
274593
|
{
|
|
274636
|
-
id: "
|
|
274637
|
-
name: "
|
|
274638
|
-
bundleId: "com.
|
|
274639
|
-
version: "1.
|
|
274594
|
+
id: "pianomaster",
|
|
274595
|
+
name: "PianoMaster",
|
|
274596
|
+
bundleId: "com.dzhumabaevs.pianomaster",
|
|
274597
|
+
version: "1.0",
|
|
274640
274598
|
category: "education",
|
|
274641
|
-
description: "
|
|
274642
|
-
shortDescription: "
|
|
274599
|
+
description: "Learn to play piano with interactive lessons and real-time feedback. Follow along with guided tutorials, practice scales and chords, and track your progress. Features a beautiful on-screen keyboard with realistic sound.",
|
|
274600
|
+
shortDescription: "Interactive piano learning app",
|
|
274643
274601
|
developer: "Bakyt",
|
|
274644
|
-
iconUrl: "/
|
|
274602
|
+
iconUrl: "http://65.109.4.13/store/icons/pianomaster.png",
|
|
274645
274603
|
screenshots: [],
|
|
274646
|
-
sizeMb:
|
|
274647
|
-
minIosVersion: "
|
|
274648
|
-
releaseDate: "
|
|
274649
|
-
lastUpdated: "2025-
|
|
274650
|
-
changelog: "
|
|
274604
|
+
sizeMb: 25,
|
|
274605
|
+
minIosVersion: "17.0",
|
|
274606
|
+
releaseDate: "2025-02-01",
|
|
274607
|
+
lastUpdated: "2025-03-01",
|
|
274608
|
+
changelog: "Initial release",
|
|
274651
274609
|
installMethods: ["quick_install", "altstore"],
|
|
274652
|
-
downloadUrl: "",
|
|
274610
|
+
downloadUrl: "http://65.109.4.13/store/ipas/pianomaster-latest.ipa",
|
|
274653
274611
|
status: "available",
|
|
274654
|
-
tags: ["
|
|
274612
|
+
tags: ["music", "piano", "education", "learning"]
|
|
274655
274613
|
},
|
|
274656
274614
|
{
|
|
274657
|
-
id: "
|
|
274658
|
-
name: "
|
|
274659
|
-
bundleId: "com.
|
|
274660
|
-
version: "1.
|
|
274661
|
-
category: "
|
|
274662
|
-
description: "
|
|
274663
|
-
shortDescription: "
|
|
274615
|
+
id: "metaminor",
|
|
274616
|
+
name: "MetaMinor",
|
|
274617
|
+
bundleId: "com.dzhumabaevsz.metaminor",
|
|
274618
|
+
version: "1.0",
|
|
274619
|
+
category: "utilities",
|
|
274620
|
+
description: "View and edit metadata for your photos, videos, and files. MetaMinor lets you inspect EXIF data, GPS coordinates, timestamps, camera settings, and more. Batch edit metadata, strip location data for privacy, and export clean files.",
|
|
274621
|
+
shortDescription: "Photo & file metadata viewer and editor",
|
|
274664
274622
|
developer: "Bakyt",
|
|
274665
|
-
iconUrl: "/
|
|
274623
|
+
iconUrl: "http://65.109.4.13/store/icons/metaminor.png",
|
|
274666
274624
|
screenshots: [],
|
|
274667
|
-
sizeMb:
|
|
274668
|
-
minIosVersion: "
|
|
274669
|
-
releaseDate: "
|
|
274670
|
-
lastUpdated: "2025-
|
|
274671
|
-
changelog: "
|
|
274672
|
-
installMethods: ["quick_install", "altstore"
|
|
274673
|
-
downloadUrl: "",
|
|
274625
|
+
sizeMb: 12,
|
|
274626
|
+
minIosVersion: "17.0",
|
|
274627
|
+
releaseDate: "2025-01-20",
|
|
274628
|
+
lastUpdated: "2025-02-10",
|
|
274629
|
+
changelog: "Initial release",
|
|
274630
|
+
installMethods: ["quick_install", "altstore"],
|
|
274631
|
+
downloadUrl: "http://65.109.4.13/store/ipas/metaminor-latest.ipa",
|
|
274674
274632
|
status: "available",
|
|
274675
|
-
tags: ["
|
|
274633
|
+
tags: ["utility", "metadata", "photos", "privacy"]
|
|
274676
274634
|
}
|
|
274677
274635
|
]
|
|
274678
274636
|
};
|
|
@@ -274717,7 +274675,7 @@ var init_apps = __esm({
|
|
|
274717
274675
|
"use strict";
|
|
274718
274676
|
init_catalog_default();
|
|
274719
274677
|
appsRoutes = new Hono8();
|
|
274720
|
-
CATALOG_URL = process.env.DJAGENT_CATALOG_URL || "";
|
|
274678
|
+
CATALOG_URL = process.env.DJAGENT_CATALOG_URL || "http://65.109.4.13/store/catalog.json";
|
|
274721
274679
|
LOCAL_CATALOG_PATH = join8(homedir4(), ".agent-dj", "catalog.json");
|
|
274722
274680
|
cachedCatalog = DEFAULT_CATALOG;
|
|
274723
274681
|
lastFetchTime = 0;
|