@letta-ai/letta-agent-sdk 0.7.8 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +23 -0
  2. package/dist/agent-creation.d.ts +2 -1
  3. package/dist/agent-creation.d.ts.map +1 -1
  4. package/dist/app-server-management.d.ts +1 -0
  5. package/dist/app-server-management.d.ts.map +1 -1
  6. package/dist/app-server-session.d.ts.map +1 -1
  7. package/dist/client-base.d.ts +12 -0
  8. package/dist/client-base.d.ts.map +1 -1
  9. package/dist/client-entry.d.ts +1 -0
  10. package/dist/client-entry.d.ts.map +1 -1
  11. package/dist/client-entry.js +515 -2679
  12. package/dist/client-entry.js.map +17 -15
  13. package/dist/client.d.ts +4 -0
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/cloud-management.d.ts +3 -2
  16. package/dist/cloud-management.d.ts.map +1 -1
  17. package/dist/cloud-session.d.ts +4 -1
  18. package/dist/cloud-session.d.ts.map +1 -1
  19. package/dist/index.d.ts +6 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +643 -2639
  22. package/dist/index.js.map +21 -18
  23. package/dist/management-types.d.ts +47 -1
  24. package/dist/management-types.d.ts.map +1 -1
  25. package/dist/management.d.ts +4 -2
  26. package/dist/management.d.ts.map +1 -1
  27. package/dist/query-types.d.ts +25 -0
  28. package/dist/query-types.d.ts.map +1 -0
  29. package/dist/query.d.ts +7 -0
  30. package/dist/query.d.ts.map +1 -0
  31. package/dist/remote-session-protocol.d.ts +11 -1
  32. package/dist/remote-session-protocol.d.ts.map +1 -1
  33. package/dist/remote-turn-coordinator.d.ts.map +1 -1
  34. package/dist/repository-types.d.ts +89 -0
  35. package/dist/repository-types.d.ts.map +1 -0
  36. package/dist/skill-loading.d.ts +84 -0
  37. package/dist/skill-loading.d.ts.map +1 -0
  38. package/dist/skill-node.d.ts +28 -0
  39. package/dist/skill-node.d.ts.map +1 -0
  40. package/dist/types.d.ts +17 -84
  41. package/dist/types.d.ts.map +1 -1
  42. package/package.json +2 -2
  43. package/src/agent-creation.ts +37 -1
  44. package/src/app-server-management.ts +8 -0
  45. package/src/app-server-session.ts +35 -2
  46. package/src/client-base.ts +138 -1
  47. package/src/client-entry.ts +1 -0
  48. package/src/client.ts +39 -0
  49. package/src/cloud-management.ts +60 -0
  50. package/src/cloud-session.ts +84 -16
  51. package/src/index.ts +18 -0
  52. package/src/local-app-server.ts +1 -1
  53. package/src/management-types.ts +58 -1
  54. package/src/management.ts +28 -1
  55. package/src/query-types.ts +40 -0
  56. package/src/query.ts +43 -0
  57. package/src/remote-client-session-core.ts +1 -1
  58. package/src/remote-session-protocol.ts +12 -1
  59. package/src/remote-turn-coordinator.ts +5 -1
  60. package/src/repository-types.ts +105 -0
  61. package/src/skill-loading.ts +194 -0
  62. package/src/skill-node.ts +139 -0
  63. package/src/types.ts +42 -100
@@ -1,4 +1,8 @@
1
1
  // Generated bundle. Canonical modules are published under src/ and maintained in the letta-agent-sdk repository.
2
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
3
+
4
+ // node_modules/@letta-ai/letta-code/dist/agent-presets-agent-presets.js
5
+ var init_agent_presets_agent_presets = () => {};
2
6
 
3
7
  // node_modules/@letta-ai/letta-client/internal/tslib.mjs
4
8
  function __classPrivateFieldSet(receiver, state, value, kind, f) {
@@ -20,13 +24,13 @@ function __classPrivateFieldGet(receiver, state, kind, f) {
20
24
 
21
25
  // node_modules/@letta-ai/letta-client/internal/utils/uuid.mjs
22
26
  var uuid4 = function() {
23
- const { crypto } = globalThis;
24
- if (crypto?.randomUUID) {
25
- uuid4 = crypto.randomUUID.bind(crypto);
26
- return crypto.randomUUID();
27
+ const { crypto: crypto2 } = globalThis;
28
+ if (crypto2?.randomUUID) {
29
+ uuid4 = crypto2.randomUUID.bind(crypto2);
30
+ return crypto2.randomUUID();
27
31
  }
28
32
  const u8 = new Uint8Array(1);
29
- const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => Math.random() * 255 & 255;
33
+ const randomByte = crypto2 ? () => crypto2.getRandomValues(u8)[0] : () => Math.random() * 255 & 255;
30
34
  return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16));
31
35
  };
32
36
 
@@ -2993,6 +2997,47 @@ class RepositoriesClient {
2993
2997
  }
2994
2998
  }
2995
2999
 
3000
+ // src/skill-loading.ts
3001
+ var SKILL_NAME_RE = /^[a-z0-9][a-z0-9._-]*$/;
3002
+ function assertValidSkillName(name) {
3003
+ if (!SKILL_NAME_RE.test(name)) {
3004
+ throw new Error(`Invalid skill name "${name}". Skill names are directory names: ` + `lowercase letters, digits, ".", "_", "-" (e.g. "generating-voice-memos").`);
3005
+ }
3006
+ }
3007
+ async function resolveSkillItems(items, loadDirectory) {
3008
+ if (!items || items.length === 0)
3009
+ return [];
3010
+ const resolved = [];
3011
+ for (const item of items) {
3012
+ if (typeof item === "string") {
3013
+ if (!loadDirectory) {
3014
+ throw new Error(`Skill directory paths ("${item}") require a Node.js runtime. ` + "Pass an inline skill ({ name, description, instructions }) instead.");
3015
+ }
3016
+ resolved.push(await loadDirectory(item));
3017
+ } else {
3018
+ assertValidSkillName(item.name);
3019
+ if (!item.instructions || item.instructions.trim().length === 0) {
3020
+ throw new Error(`Skill "${item.name}" has empty instructions.`);
3021
+ }
3022
+ if (!item.description || item.description.trim().length === 0) {
3023
+ throw new Error(`Skill "${item.name}" has no description. ` + `The description is the skill's trigger text; it is required.`);
3024
+ }
3025
+ resolved.push(item);
3026
+ }
3027
+ }
3028
+ const seen = new Set;
3029
+ for (const skill of resolved) {
3030
+ if (seen.has(skill.name)) {
3031
+ throw new Error(`Duplicate skill name: "${skill.name}".`);
3032
+ }
3033
+ seen.add(skill.name);
3034
+ }
3035
+ return resolved;
3036
+ }
3037
+ function skillsHaveSupportFiles(skills) {
3038
+ return skills.some((skill) => skill.files && Object.keys(skill.files).length > 0);
3039
+ }
3040
+
2996
3041
  // src/agent-repositories.ts
2997
3042
  var DEFAULT_VISIBILITY_TIMEOUT_MS = 1e4;
2998
3043
  var DEFAULT_VISIBILITY_POLL_INTERVAL_MS = 100;
@@ -3535,6 +3580,9 @@ class AppServerManagementTransport {
3535
3580
  }
3536
3581
  return { messages: response.messages };
3537
3582
  }
3583
+ enqueueConversationMessage() {
3584
+ return Promise.reject(new Error(`conversations.enqueue() is only available with backend: "cloud". App-server backends deliver messages through a session's send().`));
3585
+ }
3538
3586
  async request(type, body, responseType) {
3539
3587
  if (this.closingConnections.size > 0) {
3540
3588
  await Promise.all([...this.closingConnections]);
@@ -3619,6 +3667,7 @@ async function closeConnection(connection) {
3619
3667
  }
3620
3668
 
3621
3669
  // node_modules/@letta-ai/letta-code/dist/agent-presets.js
3670
+ init_agent_presets_agent_presets();
3622
3671
  var LETTA_CODE_ORIGIN_TAG = "origin:letta-code";
3623
3672
  var LETTA_CODE_SUBAGENT_TAG = "role:subagent";
3624
3673
  var GIT_MEMORY_ENABLED_TAG = "git-memory-enabled";
@@ -5459,2668 +5508,236 @@ async function getDefaultMemoryBlocks() {
5459
5508
  }
5460
5509
  return cachedMemoryBlocks;
5461
5510
  }
5462
- var models_default = {
5463
- models: [
5464
- {
5465
- id: "auto",
5466
- isDefault: true,
5467
- handle: "letta/auto",
5468
- label: "Auto",
5469
- description: "Automatically select the best model",
5470
- free: true,
5471
- updateArgs: {
5472
- context_window: 140000,
5473
- max_output_tokens: 28000,
5474
- parallel_tool_calls: true
5475
- },
5476
- isFeatured: true
5477
- },
5478
- {
5479
- id: "auto-fast",
5480
- handle: "letta/auto-fast",
5481
- label: "Auto Fast",
5482
- description: "Automatically select the best fast model",
5483
- free: true,
5484
- updateArgs: {
5485
- context_window: 140000,
5486
- max_output_tokens: 28000,
5487
- parallel_tool_calls: true
5488
- },
5489
- isFeatured: true
5490
- },
5491
- {
5492
- id: "auto-chat",
5493
- handle: "letta/auto-chat",
5494
- label: "Auto Chat",
5495
- description: "Automatically select the best model for chat",
5496
- free: true,
5497
- updateArgs: {
5498
- context_window: 140000,
5499
- max_output_tokens: 28000,
5500
- parallel_tool_calls: true
5501
- },
5502
- isFeatured: true
5503
- },
5504
- {
5505
- id: "glm",
5506
- handle: "letta/glm",
5507
- label: "Letta GLM",
5508
- description: "Route directly to Letta-hosted GLM 5.2",
5509
- free: true,
5510
- updateArgs: {
5511
- context_window: 200000,
5512
- max_output_tokens: 28000,
5513
- parallel_tool_calls: true
5514
- },
5515
- isFeatured: true
5516
- },
5517
- {
5518
- id: "gpt-5.6-sol-none",
5519
- handle: "openai/gpt-5.6-sol",
5520
- label: "GPT-5.6 Sol",
5521
- description: "OpenAI's most capable GPT-5.6 model (no reasoning)",
5522
- updateArgs: {
5523
- reasoning_effort: "none",
5524
- verbosity: "medium",
5525
- context_window: 350000,
5526
- max_output_tokens: 128000,
5527
- parallel_tool_calls: true
5528
- }
5529
- },
5530
- {
5531
- id: "gpt-5.6-sol-low",
5532
- handle: "openai/gpt-5.6-sol",
5533
- label: "GPT-5.6 Sol",
5534
- description: "OpenAI's most capable GPT-5.6 model (low reasoning)",
5535
- updateArgs: {
5536
- reasoning_effort: "low",
5537
- verbosity: "medium",
5538
- context_window: 350000,
5539
- max_output_tokens: 128000,
5540
- parallel_tool_calls: true
5541
- }
5542
- },
5543
- {
5544
- id: "gpt-5.6-sol-medium",
5545
- handle: "openai/gpt-5.6-sol",
5546
- label: "GPT-5.6 Sol",
5547
- description: "OpenAI's most capable GPT-5.6 model (med reasoning)",
5548
- updateArgs: {
5549
- reasoning_effort: "medium",
5550
- verbosity: "medium",
5551
- context_window: 350000,
5552
- max_output_tokens: 128000,
5553
- parallel_tool_calls: true
5554
- }
5555
- },
5556
- {
5557
- id: "gpt-5.6-sol",
5558
- handle: "openai/gpt-5.6-sol",
5559
- label: "GPT-5.6 Sol",
5560
- description: "OpenAI's most capable GPT-5.6 model (high reasoning)",
5561
- isFeatured: true,
5562
- updateArgs: {
5563
- reasoning_effort: "high",
5564
- verbosity: "medium",
5565
- context_window: 350000,
5566
- max_output_tokens: 128000,
5567
- parallel_tool_calls: true
5568
- }
5569
- },
5570
- {
5571
- id: "gpt-5.6-sol-xhigh",
5572
- handle: "openai/gpt-5.6-sol",
5573
- label: "GPT-5.6 Sol",
5574
- description: "OpenAI's most capable GPT-5.6 model (extra-high reasoning)",
5575
- updateArgs: {
5576
- reasoning_effort: "xhigh",
5577
- verbosity: "medium",
5578
- context_window: 350000,
5579
- max_output_tokens: 128000,
5580
- parallel_tool_calls: true
5581
- }
5582
- },
5583
- {
5584
- id: "gpt-5.6-sol-max",
5585
- handle: "openai/gpt-5.6-sol",
5586
- label: "GPT-5.6 Sol",
5587
- description: "OpenAI's most capable GPT-5.6 model (max reasoning)",
5588
- updateArgs: {
5589
- reasoning_effort: "max",
5590
- verbosity: "medium",
5591
- context_window: 350000,
5592
- max_output_tokens: 128000,
5593
- parallel_tool_calls: true
5594
- }
5595
- },
5596
- {
5597
- id: "gpt-5.6-sol-1m-none",
5598
- handle: "openai/gpt-5.6-sol",
5599
- label: "GPT-5.6 Sol 1M",
5600
- description: "GPT-5.6 Sol 1M (no reasoning)",
5601
- updateArgs: {
5602
- reasoning_effort: "none",
5603
- verbosity: "medium",
5604
- context_window: 1050000,
5605
- max_output_tokens: 128000,
5606
- parallel_tool_calls: true
5607
- }
5608
- },
5609
- {
5610
- id: "gpt-5.6-sol-1m-low",
5611
- handle: "openai/gpt-5.6-sol",
5612
- label: "GPT-5.6 Sol 1M",
5613
- description: "GPT-5.6 Sol 1M (low reasoning)",
5614
- updateArgs: {
5511
+ var models = [];
5512
+ var BUILTIN_MODEL_ALIASES = new Map([
5513
+ ["auto", "letta/auto"],
5514
+ ["auto-chat", "letta/auto-chat"],
5515
+ ["auto-fast", "letta/auto-fast"]
5516
+ ]);
5517
+ function resolveEstablishedCliAlias(modelIdentifier) {
5518
+ if (modelIdentifier === "haiku") {
5519
+ return models.find((model) => model.handle.includes("claude-haiku-4-5")) ?? null;
5520
+ }
5521
+ if (modelIdentifier === "sonnet-4.6-low") {
5522
+ const matchingModels = models.filter((model) => model.handle.includes("claude-sonnet-4-6"));
5523
+ const lowEffortModel = matchingModels.find((model) => model.updateArgs?.reasoning_effort === "low");
5524
+ if (lowEffortModel)
5525
+ return lowEffortModel;
5526
+ const baseModel = matchingModels[0];
5527
+ return baseModel ? {
5528
+ ...baseModel,
5529
+ id: modelIdentifier,
5530
+ updateArgs: {
5531
+ ...baseModel.updateArgs,
5615
5532
  reasoning_effort: "low",
5616
- verbosity: "medium",
5617
- context_window: 1050000,
5618
- max_output_tokens: 128000,
5619
- parallel_tool_calls: true
5620
- }
5621
- },
5622
- {
5623
- id: "gpt-5.6-sol-1m-medium",
5624
- handle: "openai/gpt-5.6-sol",
5625
- label: "GPT-5.6 Sol 1M",
5626
- description: "GPT-5.6 Sol 1M (med reasoning)",
5627
- updateArgs: {
5628
- reasoning_effort: "medium",
5629
- verbosity: "medium",
5630
- context_window: 1050000,
5631
- max_output_tokens: 128000,
5632
- parallel_tool_calls: true
5533
+ enable_reasoner: true
5633
5534
  }
5634
- },
5635
- {
5636
- id: "gpt-5.6-sol-1m",
5637
- handle: "openai/gpt-5.6-sol",
5638
- label: "GPT-5.6 Sol 1M",
5639
- description: "GPT-5.6 Sol with 1M token context window (high reasoning)",
5640
- updateArgs: {
5641
- reasoning_effort: "high",
5642
- verbosity: "medium",
5643
- context_window: 1050000,
5644
- max_output_tokens: 128000,
5645
- parallel_tool_calls: true
5535
+ } : null;
5536
+ }
5537
+ return null;
5538
+ }
5539
+ function resolveCatalogModel(modelIdentifier) {
5540
+ const byId = models.find((model) => model.id === modelIdentifier);
5541
+ if (byId)
5542
+ return byId;
5543
+ const byHandle = models.find((model) => model.handle === modelIdentifier);
5544
+ if (byHandle)
5545
+ return byHandle;
5546
+ const cliAlias = resolveEstablishedCliAlias(modelIdentifier);
5547
+ if (cliAlias)
5548
+ return cliAlias;
5549
+ const matches = models.filter((model) => model.handle.split("/").slice(1).join("/") === modelIdentifier);
5550
+ const matchingHandles = new Set(matches.map((model) => model.handle));
5551
+ return matchingHandles.size === 1 ? matches[0] ?? null : null;
5552
+ }
5553
+ function resolveModel(modelIdentifier) {
5554
+ const entry = resolveCatalogModel(modelIdentifier);
5555
+ if (entry)
5556
+ return entry.handle;
5557
+ const builtinHandle = BUILTIN_MODEL_ALIASES.get(modelIdentifier);
5558
+ if (builtinHandle)
5559
+ return builtinHandle;
5560
+ return modelIdentifier.includes("/") ? modelIdentifier : null;
5561
+ }
5562
+ function getDefaultModel() {
5563
+ if (models.length === 0)
5564
+ return "letta/auto";
5565
+ const autoModel = models.find((model) => model.id === "auto");
5566
+ if (autoModel)
5567
+ return autoModel.handle;
5568
+ const defaultModel = models.find((model) => model.isDefault);
5569
+ if (defaultModel)
5570
+ return defaultModel.handle;
5571
+ const firstModel = models[0];
5572
+ if (!firstModel) {
5573
+ throw new Error("Model catalog is unavailable.");
5574
+ }
5575
+ return firstModel.handle;
5576
+ }
5577
+ var PERSONALITY_OPTIONS = [
5578
+ {
5579
+ id: "memo",
5580
+ label: "Letta Code",
5581
+ description: "The memory-first agent"
5582
+ },
5583
+ {
5584
+ id: "tutorial",
5585
+ label: "Tutor",
5586
+ description: "I help with getting started with Letta. I can answer any questions about Letta, and also help you create and configure agents.",
5587
+ defaultMemoryFiles: [
5588
+ {
5589
+ path: "profile.png",
5590
+ assetId: "tutor-profile",
5591
+ commitMessage: "chore: set default Tutor profile picture"
5646
5592
  }
5593
+ ]
5594
+ },
5595
+ {
5596
+ id: "blank",
5597
+ label: "Blank",
5598
+ description: "Blank starter — you provide the personality"
5599
+ },
5600
+ {
5601
+ id: "linus",
5602
+ label: "Linus",
5603
+ description: "Code with a stern hand"
5604
+ },
5605
+ {
5606
+ id: "kawaii",
5607
+ label: "Letta-Chan",
5608
+ description: "sugoi~ (◕‿◕)✨",
5609
+ defaultModel: "auto-chat"
5610
+ },
5611
+ {
5612
+ id: "claude",
5613
+ label: "Letta Code",
5614
+ description: "Vanilla Claude flavors"
5615
+ },
5616
+ {
5617
+ id: "codex",
5618
+ label: "Letta Code",
5619
+ description: "Vanilla Codex flavors"
5620
+ }
5621
+ ];
5622
+ var PERSONALITY_TAG_PREFIX = "personality:";
5623
+ function buildPersonalityTag(personalityId) {
5624
+ return `${PERSONALITY_TAG_PREFIX}${personalityId}`;
5625
+ }
5626
+ function getPersonalityCreationTags(personalityId) {
5627
+ return getPersonalityDefaultMemoryFiles(personalityId).length > 0 ? [buildPersonalityTag(personalityId)] : [];
5628
+ }
5629
+ var ONBOARDING_PERSONALITIES = [
5630
+ "tutorial"
5631
+ ];
5632
+ function supportsOnboardingBlock(personalityId) {
5633
+ return ONBOARDING_PERSONALITIES.includes(personalityId);
5634
+ }
5635
+ var EDITABLE_FRONTMATTER_KEYS = [
5636
+ "description",
5637
+ "limit",
5638
+ "read_only"
5639
+ ];
5640
+ function ensureTrailingNewline(content) {
5641
+ return `${content.trimEnd()}
5642
+ `;
5643
+ }
5644
+ function getPromptTemplate(promptAssetName) {
5645
+ const rawPrompt = MEMORY_PROMPTS[promptAssetName];
5646
+ if (!rawPrompt) {
5647
+ throw new Error(`Missing built-in prompt content for ${promptAssetName}`);
5648
+ }
5649
+ return parseMdxFrontmatter(rawPrompt);
5650
+ }
5651
+ function getPromptBody(promptAssetName) {
5652
+ const { body } = getPromptTemplate(promptAssetName);
5653
+ if (!body.trim()) {
5654
+ throw new Error(`${promptAssetName} has empty body content`);
5655
+ }
5656
+ return ensureTrailingNewline(body);
5657
+ }
5658
+ function getEditablePromptFrontmatter(promptAssetName) {
5659
+ const { frontmatter } = getPromptTemplate(promptAssetName);
5660
+ return Object.fromEntries(Object.entries(frontmatter).filter(([key]) => EDITABLE_FRONTMATTER_KEYS.includes(key)));
5661
+ }
5662
+ function getSystemPromptById(systemPromptId) {
5663
+ const prompt = SYSTEM_PROMPTS.find((candidate) => candidate.id === systemPromptId);
5664
+ if (!prompt || !prompt.content.trim()) {
5665
+ throw new Error(`Missing built-in prompt content for ${systemPromptId}`);
5666
+ }
5667
+ return prompt.content;
5668
+ }
5669
+ function getPersonalityOption(personalityId) {
5670
+ const option = PERSONALITY_OPTIONS.find((candidate) => candidate.id === personalityId);
5671
+ if (!option) {
5672
+ throw new Error(`Unknown personality: ${personalityId}`);
5673
+ }
5674
+ return option;
5675
+ }
5676
+ function getPersonalityDefaultMemoryFiles(personalityId) {
5677
+ return getPersonalityOption(personalityId).defaultMemoryFiles ?? [];
5678
+ }
5679
+ function getPersonalityContent(personalityId) {
5680
+ if (personalityId === "memo") {
5681
+ return getPromptBody("persona_memo.mdx");
5682
+ }
5683
+ if (personalityId === "tutorial") {
5684
+ return getPromptBody("persona_tutorial.mdx");
5685
+ }
5686
+ if (personalityId === "blank") {
5687
+ return getPromptBody("persona_blank.mdx");
5688
+ }
5689
+ if (personalityId === "kawaii") {
5690
+ return getPromptBody("persona_kawaii.mdx");
5691
+ }
5692
+ if (personalityId === "codex") {
5693
+ return ensureTrailingNewline(getSystemPromptById("source-codex"));
5694
+ }
5695
+ if (personalityId === "linus") {
5696
+ return getPromptBody("persona_linus.mdx");
5697
+ }
5698
+ return ensureTrailingNewline(getSystemPromptById("source-claude"));
5699
+ }
5700
+ function getDefaultHumanContent() {
5701
+ return getPromptBody("human.mdx");
5702
+ }
5703
+ function getPersonalityHumanContent(personalityId) {
5704
+ if (personalityId === "memo") {
5705
+ return getPromptBody("human_memo.mdx");
5706
+ }
5707
+ if (personalityId === "tutorial") {
5708
+ return getPromptBody("human_tutorial.mdx");
5709
+ }
5710
+ if (personalityId === "linus") {
5711
+ return getPromptBody("human_linus.mdx");
5712
+ }
5713
+ if (personalityId === "kawaii") {
5714
+ return getPromptBody("human_kawaii.mdx");
5715
+ }
5716
+ if (personalityId === "blank") {
5717
+ return getDefaultHumanContent();
5718
+ }
5719
+ return getDefaultHumanContent();
5720
+ }
5721
+ function getPersonalityBlockDefinitions(personalityId, environment = "cloud") {
5722
+ const personaTemplatePromptAssetName = personalityId === "memo" ? "persona_memo.mdx" : personalityId === "tutorial" ? "persona_tutorial.mdx" : personalityId === "blank" ? "persona_blank.mdx" : personalityId === "kawaii" ? "persona_kawaii.mdx" : personalityId === "linus" ? "persona_linus.mdx" : "persona.mdx";
5723
+ const humanTemplatePromptAssetName = personalityId === "memo" ? "human_memo.mdx" : personalityId === "tutorial" ? "human_tutorial.mdx" : personalityId === "kawaii" ? "human_kawaii.mdx" : personalityId === "linus" ? "human_linus.mdx" : "human.mdx";
5724
+ const onboardingTemplatePromptAssetName = environment === "local" ? "onboarding_local.mdx" : "onboarding.mdx";
5725
+ return {
5726
+ persona: {
5727
+ value: getPersonalityContent(personalityId),
5728
+ description: getEditablePromptFrontmatter(personaTemplatePromptAssetName).description,
5729
+ templatePromptAssetName: personaTemplatePromptAssetName
5647
5730
  },
5648
- {
5649
- id: "gpt-5.6-sol-1m-xhigh",
5650
- handle: "openai/gpt-5.6-sol",
5651
- label: "GPT-5.6 Sol 1M",
5652
- description: "GPT-5.6 Sol 1M (extra-high reasoning)",
5653
- updateArgs: {
5654
- reasoning_effort: "xhigh",
5655
- verbosity: "medium",
5656
- context_window: 1050000,
5657
- max_output_tokens: 128000,
5658
- parallel_tool_calls: true
5659
- }
5731
+ human: {
5732
+ value: getPersonalityHumanContent(personalityId),
5733
+ description: getEditablePromptFrontmatter(humanTemplatePromptAssetName).description,
5734
+ templatePromptAssetName: humanTemplatePromptAssetName
5660
5735
  },
5661
- {
5662
- id: "gpt-5.6-sol-1m-max",
5663
- handle: "openai/gpt-5.6-sol",
5664
- label: "GPT-5.6 Sol 1M",
5665
- description: "GPT-5.6 Sol 1M (max reasoning)",
5666
- updateArgs: {
5667
- reasoning_effort: "max",
5668
- verbosity: "medium",
5669
- context_window: 1050000,
5670
- max_output_tokens: 128000,
5671
- parallel_tool_calls: true
5672
- }
5673
- },
5674
- {
5675
- id: "gpt-5.6-terra-none",
5676
- handle: "openai/gpt-5.6-terra",
5677
- label: "GPT-5.6 Terra",
5678
- description: "GPT-5.6 Terra (no reasoning)",
5679
- updateArgs: {
5680
- reasoning_effort: "none",
5681
- verbosity: "medium",
5682
- context_window: 350000,
5683
- max_output_tokens: 128000,
5684
- parallel_tool_calls: true
5685
- }
5686
- },
5687
- {
5688
- id: "gpt-5.6-terra-low",
5689
- handle: "openai/gpt-5.6-terra",
5690
- label: "GPT-5.6 Terra",
5691
- description: "GPT-5.6 Terra (low reasoning)",
5692
- updateArgs: {
5693
- reasoning_effort: "low",
5694
- verbosity: "medium",
5695
- context_window: 350000,
5696
- max_output_tokens: 128000,
5697
- parallel_tool_calls: true
5698
- }
5699
- },
5700
- {
5701
- id: "gpt-5.6-terra-medium",
5702
- handle: "openai/gpt-5.6-terra",
5703
- label: "GPT-5.6 Terra",
5704
- description: "GPT-5.6 Terra (med reasoning)",
5705
- updateArgs: {
5706
- reasoning_effort: "medium",
5707
- verbosity: "medium",
5708
- context_window: 350000,
5709
- max_output_tokens: 128000,
5710
- parallel_tool_calls: true
5711
- }
5712
- },
5713
- {
5714
- id: "gpt-5.6-terra",
5715
- handle: "openai/gpt-5.6-terra",
5716
- label: "GPT-5.6 Terra",
5717
- description: "GPT-5.6 Terra (high reasoning)",
5718
- isFeatured: true,
5719
- updateArgs: {
5720
- reasoning_effort: "high",
5721
- verbosity: "medium",
5722
- context_window: 350000,
5723
- max_output_tokens: 128000,
5724
- parallel_tool_calls: true
5725
- }
5726
- },
5727
- {
5728
- id: "gpt-5.6-terra-xhigh",
5729
- handle: "openai/gpt-5.6-terra",
5730
- label: "GPT-5.6 Terra",
5731
- description: "GPT-5.6 Terra (extra-high reasoning)",
5732
- updateArgs: {
5733
- reasoning_effort: "xhigh",
5734
- verbosity: "medium",
5735
- context_window: 350000,
5736
- max_output_tokens: 128000,
5737
- parallel_tool_calls: true
5738
- }
5739
- },
5740
- {
5741
- id: "gpt-5.6-terra-max",
5742
- handle: "openai/gpt-5.6-terra",
5743
- label: "GPT-5.6 Terra",
5744
- description: "GPT-5.6 Terra (max reasoning)",
5745
- updateArgs: {
5746
- reasoning_effort: "max",
5747
- verbosity: "medium",
5748
- context_window: 350000,
5749
- max_output_tokens: 128000,
5750
- parallel_tool_calls: true
5751
- }
5752
- },
5753
- {
5754
- id: "gpt-5.6-terra-1m-none",
5755
- handle: "openai/gpt-5.6-terra",
5756
- label: "GPT-5.6 Terra 1M",
5757
- description: "GPT-5.6 Terra 1M (no reasoning)",
5758
- updateArgs: {
5759
- reasoning_effort: "none",
5760
- verbosity: "medium",
5761
- context_window: 1050000,
5762
- max_output_tokens: 128000,
5763
- parallel_tool_calls: true
5764
- }
5765
- },
5766
- {
5767
- id: "gpt-5.6-terra-1m-low",
5768
- handle: "openai/gpt-5.6-terra",
5769
- label: "GPT-5.6 Terra 1M",
5770
- description: "GPT-5.6 Terra 1M (low reasoning)",
5771
- updateArgs: {
5772
- reasoning_effort: "low",
5773
- verbosity: "medium",
5774
- context_window: 1050000,
5775
- max_output_tokens: 128000,
5776
- parallel_tool_calls: true
5777
- }
5778
- },
5779
- {
5780
- id: "gpt-5.6-terra-1m-medium",
5781
- handle: "openai/gpt-5.6-terra",
5782
- label: "GPT-5.6 Terra 1M",
5783
- description: "GPT-5.6 Terra 1M (med reasoning)",
5784
- updateArgs: {
5785
- reasoning_effort: "medium",
5786
- verbosity: "medium",
5787
- context_window: 1050000,
5788
- max_output_tokens: 128000,
5789
- parallel_tool_calls: true
5790
- }
5791
- },
5792
- {
5793
- id: "gpt-5.6-terra-1m",
5794
- handle: "openai/gpt-5.6-terra",
5795
- label: "GPT-5.6 Terra 1M",
5796
- description: "GPT-5.6 Terra with 1M token context window (high reasoning)",
5797
- updateArgs: {
5798
- reasoning_effort: "high",
5799
- verbosity: "medium",
5800
- context_window: 1050000,
5801
- max_output_tokens: 128000,
5802
- parallel_tool_calls: true
5803
- }
5804
- },
5805
- {
5806
- id: "gpt-5.6-terra-1m-xhigh",
5807
- handle: "openai/gpt-5.6-terra",
5808
- label: "GPT-5.6 Terra 1M",
5809
- description: "GPT-5.6 Terra 1M (extra-high reasoning)",
5810
- updateArgs: {
5811
- reasoning_effort: "xhigh",
5812
- verbosity: "medium",
5813
- context_window: 1050000,
5814
- max_output_tokens: 128000,
5815
- parallel_tool_calls: true
5816
- }
5817
- },
5818
- {
5819
- id: "gpt-5.6-terra-1m-max",
5820
- handle: "openai/gpt-5.6-terra",
5821
- label: "GPT-5.6 Terra 1M",
5822
- description: "GPT-5.6 Terra 1M (max reasoning)",
5823
- updateArgs: {
5824
- reasoning_effort: "max",
5825
- verbosity: "medium",
5826
- context_window: 1050000,
5827
- max_output_tokens: 128000,
5828
- parallel_tool_calls: true
5829
- }
5830
- },
5831
- {
5832
- id: "gpt-5.6-luna-none",
5833
- handle: "openai/gpt-5.6-luna",
5834
- label: "GPT-5.6 Luna",
5835
- description: "GPT-5.6 Luna (no reasoning)",
5836
- updateArgs: {
5837
- reasoning_effort: "none",
5838
- verbosity: "medium",
5839
- context_window: 350000,
5840
- max_output_tokens: 128000,
5841
- parallel_tool_calls: true
5842
- }
5843
- },
5844
- {
5845
- id: "gpt-5.6-luna-low",
5846
- handle: "openai/gpt-5.6-luna",
5847
- label: "GPT-5.6 Luna",
5848
- description: "GPT-5.6 Luna (low reasoning)",
5849
- updateArgs: {
5850
- reasoning_effort: "low",
5851
- verbosity: "medium",
5852
- context_window: 350000,
5853
- max_output_tokens: 128000,
5854
- parallel_tool_calls: true
5855
- }
5856
- },
5857
- {
5858
- id: "gpt-5.6-luna-medium",
5859
- handle: "openai/gpt-5.6-luna",
5860
- label: "GPT-5.6 Luna",
5861
- description: "GPT-5.6 Luna (med reasoning)",
5862
- updateArgs: {
5863
- reasoning_effort: "medium",
5864
- verbosity: "medium",
5865
- context_window: 350000,
5866
- max_output_tokens: 128000,
5867
- parallel_tool_calls: true
5868
- }
5869
- },
5870
- {
5871
- id: "gpt-5.6-luna",
5872
- handle: "openai/gpt-5.6-luna",
5873
- label: "GPT-5.6 Luna",
5874
- description: "GPT-5.6 Luna (high reasoning)",
5875
- isFeatured: true,
5876
- updateArgs: {
5877
- reasoning_effort: "high",
5878
- verbosity: "medium",
5879
- context_window: 350000,
5880
- max_output_tokens: 128000,
5881
- parallel_tool_calls: true
5882
- }
5883
- },
5884
- {
5885
- id: "gpt-5.6-luna-xhigh",
5886
- handle: "openai/gpt-5.6-luna",
5887
- label: "GPT-5.6 Luna",
5888
- description: "GPT-5.6 Luna (extra-high reasoning)",
5889
- updateArgs: {
5890
- reasoning_effort: "xhigh",
5891
- verbosity: "medium",
5892
- context_window: 350000,
5893
- max_output_tokens: 128000,
5894
- parallel_tool_calls: true
5895
- }
5896
- },
5897
- {
5898
- id: "gpt-5.6-luna-max",
5899
- handle: "openai/gpt-5.6-luna",
5900
- label: "GPT-5.6 Luna",
5901
- description: "GPT-5.6 Luna (max reasoning)",
5902
- updateArgs: {
5903
- reasoning_effort: "max",
5904
- verbosity: "medium",
5905
- context_window: 350000,
5906
- max_output_tokens: 128000,
5907
- parallel_tool_calls: true
5908
- }
5909
- },
5910
- {
5911
- id: "gpt-5.6-luna-1m-none",
5912
- handle: "openai/gpt-5.6-luna",
5913
- label: "GPT-5.6 Luna 1M",
5914
- description: "GPT-5.6 Luna 1M (no reasoning)",
5915
- updateArgs: {
5916
- reasoning_effort: "none",
5917
- verbosity: "medium",
5918
- context_window: 1050000,
5919
- max_output_tokens: 128000,
5920
- parallel_tool_calls: true
5921
- }
5922
- },
5923
- {
5924
- id: "gpt-5.6-luna-1m-low",
5925
- handle: "openai/gpt-5.6-luna",
5926
- label: "GPT-5.6 Luna 1M",
5927
- description: "GPT-5.6 Luna 1M (low reasoning)",
5928
- updateArgs: {
5929
- reasoning_effort: "low",
5930
- verbosity: "medium",
5931
- context_window: 1050000,
5932
- max_output_tokens: 128000,
5933
- parallel_tool_calls: true
5934
- }
5935
- },
5936
- {
5937
- id: "gpt-5.6-luna-1m-medium",
5938
- handle: "openai/gpt-5.6-luna",
5939
- label: "GPT-5.6 Luna 1M",
5940
- description: "GPT-5.6 Luna 1M (med reasoning)",
5941
- updateArgs: {
5942
- reasoning_effort: "medium",
5943
- verbosity: "medium",
5944
- context_window: 1050000,
5945
- max_output_tokens: 128000,
5946
- parallel_tool_calls: true
5947
- }
5948
- },
5949
- {
5950
- id: "gpt-5.6-luna-1m",
5951
- handle: "openai/gpt-5.6-luna",
5952
- label: "GPT-5.6 Luna 1M",
5953
- description: "GPT-5.6 Luna with 1M token context window (high reasoning)",
5954
- updateArgs: {
5955
- reasoning_effort: "high",
5956
- verbosity: "medium",
5957
- context_window: 1050000,
5958
- max_output_tokens: 128000,
5959
- parallel_tool_calls: true
5960
- }
5961
- },
5962
- {
5963
- id: "gpt-5.6-luna-1m-xhigh",
5964
- handle: "openai/gpt-5.6-luna",
5965
- label: "GPT-5.6 Luna 1M",
5966
- description: "GPT-5.6 Luna 1M (extra-high reasoning)",
5967
- updateArgs: {
5968
- reasoning_effort: "xhigh",
5969
- verbosity: "medium",
5970
- context_window: 1050000,
5971
- max_output_tokens: 128000,
5972
- parallel_tool_calls: true
5973
- }
5974
- },
5975
- {
5976
- id: "gpt-5.6-luna-1m-max",
5977
- handle: "openai/gpt-5.6-luna",
5978
- label: "GPT-5.6 Luna 1M",
5979
- description: "GPT-5.6 Luna 1M (max reasoning)",
5980
- updateArgs: {
5981
- reasoning_effort: "max",
5982
- verbosity: "medium",
5983
- context_window: 1050000,
5984
- max_output_tokens: 128000,
5985
- parallel_tool_calls: true
5986
- }
5987
- },
5988
- {
5989
- id: "gpt-5.6-sol-plus-pro-none",
5990
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
5991
- label: "GPT-5.6 Sol (ChatGPT)",
5992
- description: "GPT-5.6 Sol (no reasoning) via ChatGPT Plus/Pro",
5993
- updateArgs: {
5994
- reasoning_effort: "none",
5995
- verbosity: "low",
5996
- context_window: 350000,
5997
- max_output_tokens: 128000,
5998
- parallel_tool_calls: true
5999
- }
6000
- },
6001
- {
6002
- id: "gpt-5.6-sol-plus-pro-low",
6003
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6004
- label: "GPT-5.6 Sol (ChatGPT)",
6005
- description: "GPT-5.6 Sol (low reasoning) via ChatGPT Plus/Pro",
6006
- updateArgs: {
6007
- reasoning_effort: "low",
6008
- verbosity: "low",
6009
- context_window: 350000,
6010
- max_output_tokens: 128000,
6011
- parallel_tool_calls: true
6012
- }
6013
- },
6014
- {
6015
- id: "gpt-5.6-sol-plus-pro-medium",
6016
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6017
- label: "GPT-5.6 Sol (ChatGPT)",
6018
- description: "GPT-5.6 Sol (med reasoning) via ChatGPT Plus/Pro",
6019
- updateArgs: {
6020
- reasoning_effort: "medium",
6021
- verbosity: "low",
6022
- context_window: 350000,
6023
- max_output_tokens: 128000,
6024
- parallel_tool_calls: true
6025
- }
6026
- },
6027
- {
6028
- id: "gpt-5.6-sol-plus-pro-high",
6029
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6030
- label: "GPT-5.6 Sol (ChatGPT)",
6031
- description: "GPT-5.6 Sol (high reasoning) via ChatGPT Plus/Pro",
6032
- updateArgs: {
6033
- reasoning_effort: "high",
6034
- verbosity: "low",
6035
- context_window: 350000,
6036
- max_output_tokens: 128000,
6037
- parallel_tool_calls: true
6038
- },
6039
- isFeatured: true
6040
- },
6041
- {
6042
- id: "gpt-5.6-sol-plus-pro-xhigh",
6043
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6044
- label: "GPT-5.6 Sol (ChatGPT)",
6045
- description: "GPT-5.6 Sol (extra-high reasoning) via ChatGPT Plus/Pro",
6046
- updateArgs: {
6047
- reasoning_effort: "xhigh",
6048
- verbosity: "low",
6049
- context_window: 350000,
6050
- max_output_tokens: 128000,
6051
- parallel_tool_calls: true
6052
- }
6053
- },
6054
- {
6055
- id: "gpt-5.6-sol-plus-pro-max",
6056
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6057
- label: "GPT-5.6 Sol (ChatGPT)",
6058
- description: "GPT-5.6 Sol (max reasoning) via ChatGPT Plus/Pro",
6059
- updateArgs: {
6060
- reasoning_effort: "max",
6061
- verbosity: "low",
6062
- context_window: 350000,
6063
- max_output_tokens: 128000,
6064
- parallel_tool_calls: true
6065
- }
6066
- },
6067
- {
6068
- id: "gpt-5.6-terra-plus-pro-none",
6069
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6070
- label: "GPT-5.6 Terra (ChatGPT)",
6071
- description: "GPT-5.6 Terra (no reasoning) via ChatGPT Plus/Pro",
6072
- updateArgs: {
6073
- reasoning_effort: "none",
6074
- verbosity: "low",
6075
- context_window: 350000,
6076
- max_output_tokens: 128000,
6077
- parallel_tool_calls: true
6078
- }
6079
- },
6080
- {
6081
- id: "gpt-5.6-terra-plus-pro-low",
6082
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6083
- label: "GPT-5.6 Terra (ChatGPT)",
6084
- description: "GPT-5.6 Terra (low reasoning) via ChatGPT Plus/Pro",
6085
- updateArgs: {
6086
- reasoning_effort: "low",
6087
- verbosity: "low",
6088
- context_window: 350000,
6089
- max_output_tokens: 128000,
6090
- parallel_tool_calls: true
6091
- }
6092
- },
6093
- {
6094
- id: "gpt-5.6-terra-plus-pro-medium",
6095
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6096
- label: "GPT-5.6 Terra (ChatGPT)",
6097
- description: "GPT-5.6 Terra (med reasoning) via ChatGPT Plus/Pro",
6098
- updateArgs: {
6099
- reasoning_effort: "medium",
6100
- verbosity: "low",
6101
- context_window: 350000,
6102
- max_output_tokens: 128000,
6103
- parallel_tool_calls: true
6104
- }
6105
- },
6106
- {
6107
- id: "gpt-5.6-terra-plus-pro-high",
6108
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6109
- label: "GPT-5.6 Terra (ChatGPT)",
6110
- description: "GPT-5.6 Terra (high reasoning) via ChatGPT Plus/Pro",
6111
- updateArgs: {
6112
- reasoning_effort: "high",
6113
- verbosity: "low",
6114
- context_window: 350000,
6115
- max_output_tokens: 128000,
6116
- parallel_tool_calls: true
6117
- },
6118
- isFeatured: true
6119
- },
6120
- {
6121
- id: "gpt-5.6-terra-plus-pro-xhigh",
6122
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6123
- label: "GPT-5.6 Terra (ChatGPT)",
6124
- description: "GPT-5.6 Terra (extra-high reasoning) via ChatGPT Plus/Pro",
6125
- updateArgs: {
6126
- reasoning_effort: "xhigh",
6127
- verbosity: "low",
6128
- context_window: 350000,
6129
- max_output_tokens: 128000,
6130
- parallel_tool_calls: true
6131
- }
6132
- },
6133
- {
6134
- id: "gpt-5.6-terra-plus-pro-max",
6135
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6136
- label: "GPT-5.6 Terra (ChatGPT)",
6137
- description: "GPT-5.6 Terra (max reasoning) via ChatGPT Plus/Pro",
6138
- updateArgs: {
6139
- reasoning_effort: "max",
6140
- verbosity: "low",
6141
- context_window: 350000,
6142
- max_output_tokens: 128000,
6143
- parallel_tool_calls: true
6144
- }
6145
- },
6146
- {
6147
- id: "gpt-5.6-luna-plus-pro-none",
6148
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6149
- label: "GPT-5.6 Luna (ChatGPT)",
6150
- description: "GPT-5.6 Luna (no reasoning) via ChatGPT Plus/Pro",
6151
- updateArgs: {
6152
- reasoning_effort: "none",
6153
- verbosity: "low",
6154
- context_window: 350000,
6155
- max_output_tokens: 128000,
6156
- parallel_tool_calls: true
6157
- }
6158
- },
6159
- {
6160
- id: "gpt-5.6-luna-plus-pro-low",
6161
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6162
- label: "GPT-5.6 Luna (ChatGPT)",
6163
- description: "GPT-5.6 Luna (low reasoning) via ChatGPT Plus/Pro",
6164
- updateArgs: {
6165
- reasoning_effort: "low",
6166
- verbosity: "low",
6167
- context_window: 350000,
6168
- max_output_tokens: 128000,
6169
- parallel_tool_calls: true
6170
- }
6171
- },
6172
- {
6173
- id: "gpt-5.6-luna-plus-pro-medium",
6174
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6175
- label: "GPT-5.6 Luna (ChatGPT)",
6176
- description: "GPT-5.6 Luna (med reasoning) via ChatGPT Plus/Pro",
6177
- updateArgs: {
6178
- reasoning_effort: "medium",
6179
- verbosity: "low",
6180
- context_window: 350000,
6181
- max_output_tokens: 128000,
6182
- parallel_tool_calls: true
6183
- }
6184
- },
6185
- {
6186
- id: "gpt-5.6-luna-plus-pro-high",
6187
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6188
- label: "GPT-5.6 Luna (ChatGPT)",
6189
- description: "GPT-5.6 Luna (high reasoning) via ChatGPT Plus/Pro",
6190
- updateArgs: {
6191
- reasoning_effort: "high",
6192
- verbosity: "low",
6193
- context_window: 350000,
6194
- max_output_tokens: 128000,
6195
- parallel_tool_calls: true
6196
- },
6197
- isFeatured: true
6198
- },
6199
- {
6200
- id: "gpt-5.6-luna-plus-pro-xhigh",
6201
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6202
- label: "GPT-5.6 Luna (ChatGPT)",
6203
- description: "GPT-5.6 Luna (extra-high reasoning) via ChatGPT Plus/Pro",
6204
- updateArgs: {
6205
- reasoning_effort: "xhigh",
6206
- verbosity: "low",
6207
- context_window: 350000,
6208
- max_output_tokens: 128000,
6209
- parallel_tool_calls: true
6210
- }
6211
- },
6212
- {
6213
- id: "gpt-5.6-luna-plus-pro-max",
6214
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6215
- label: "GPT-5.6 Luna (ChatGPT)",
6216
- description: "GPT-5.6 Luna (max reasoning) via ChatGPT Plus/Pro",
6217
- updateArgs: {
6218
- reasoning_effort: "max",
6219
- verbosity: "low",
6220
- context_window: 350000,
6221
- max_output_tokens: 128000,
6222
- parallel_tool_calls: true
6223
- }
6224
- },
6225
- {
6226
- id: "fable",
6227
- handle: "anthropic/claude-fable-5",
6228
- label: "Fable 5",
6229
- description: "Fable 5 (high reasoning)",
6230
- isFeatured: true,
6231
- updateArgs: {
6232
- context_window: 200000,
6233
- max_output_tokens: 128000,
6234
- enable_reasoner: true,
6235
- reasoning_effort: "high",
6236
- parallel_tool_calls: true
6237
- }
6238
- },
6239
- {
6240
- id: "fable-low",
6241
- handle: "anthropic/claude-fable-5",
6242
- label: "Fable 5",
6243
- description: "Fable 5 (low reasoning)",
6244
- updateArgs: {
6245
- context_window: 200000,
6246
- max_output_tokens: 128000,
6247
- enable_reasoner: true,
6248
- reasoning_effort: "low",
6249
- max_reasoning_tokens: 4000,
6250
- parallel_tool_calls: true
6251
- }
6252
- },
6253
- {
6254
- id: "fable-medium",
6255
- handle: "anthropic/claude-fable-5",
6256
- label: "Fable 5",
6257
- description: "Fable 5 (med reasoning)",
6258
- updateArgs: {
6259
- context_window: 200000,
6260
- max_output_tokens: 128000,
6261
- enable_reasoner: true,
6262
- reasoning_effort: "medium",
6263
- max_reasoning_tokens: 12000,
6264
- parallel_tool_calls: true
6265
- }
6266
- },
6267
- {
6268
- id: "fable-xhigh",
6269
- handle: "anthropic/claude-fable-5",
6270
- label: "Fable 5",
6271
- description: "Fable 5 (extra-high reasoning)",
6272
- updateArgs: {
6273
- context_window: 200000,
6274
- max_output_tokens: 128000,
6275
- enable_reasoner: true,
6276
- reasoning_effort: "xhigh",
6277
- parallel_tool_calls: true
6278
- }
6279
- },
6280
- {
6281
- id: "fable-max",
6282
- handle: "anthropic/claude-fable-5",
6283
- label: "Fable 5",
6284
- description: "Fable 5 (max reasoning)",
6285
- updateArgs: {
6286
- context_window: 200000,
6287
- max_output_tokens: 128000,
6288
- enable_reasoner: true,
6289
- reasoning_effort: "max",
6290
- parallel_tool_calls: true
6291
- }
6292
- },
6293
- {
6294
- id: "fable-1m",
6295
- handle: "anthropic/claude-fable-5",
6296
- label: "Fable 5 1M",
6297
- description: "Claude Fable 5 with 1M token context window (high reasoning)",
6298
- updateArgs: {
6299
- context_window: 950000,
6300
- max_output_tokens: 128000,
6301
- enable_reasoner: true,
6302
- reasoning_effort: "high",
6303
- parallel_tool_calls: true
6304
- }
6305
- },
6306
- {
6307
- id: "fable-1m-low",
6308
- handle: "anthropic/claude-fable-5",
6309
- label: "Fable 5 1M",
6310
- description: "Fable 5 1M (low reasoning)",
6311
- updateArgs: {
6312
- context_window: 950000,
6313
- max_output_tokens: 128000,
6314
- enable_reasoner: true,
6315
- reasoning_effort: "low",
6316
- max_reasoning_tokens: 4000,
6317
- parallel_tool_calls: true
6318
- }
6319
- },
6320
- {
6321
- id: "fable-1m-medium",
6322
- handle: "anthropic/claude-fable-5",
6323
- label: "Fable 5 1M",
6324
- description: "Fable 5 1M (med reasoning)",
6325
- updateArgs: {
6326
- context_window: 950000,
6327
- max_output_tokens: 128000,
6328
- enable_reasoner: true,
6329
- reasoning_effort: "medium",
6330
- max_reasoning_tokens: 12000,
6331
- parallel_tool_calls: true
6332
- }
6333
- },
6334
- {
6335
- id: "fable-1m-xhigh",
6336
- handle: "anthropic/claude-fable-5",
6337
- label: "Fable 5 1M",
6338
- description: "Fable 5 1M (extra-high reasoning)",
6339
- updateArgs: {
6340
- context_window: 950000,
6341
- max_output_tokens: 128000,
6342
- enable_reasoner: true,
6343
- reasoning_effort: "xhigh",
6344
- parallel_tool_calls: true
6345
- }
6346
- },
6347
- {
6348
- id: "fable-1m-max",
6349
- handle: "anthropic/claude-fable-5",
6350
- label: "Fable 5 1M",
6351
- description: "Fable 5 1M (max reasoning)",
6352
- updateArgs: {
6353
- context_window: 950000,
6354
- max_output_tokens: 128000,
6355
- enable_reasoner: true,
6356
- reasoning_effort: "max",
6357
- parallel_tool_calls: true
6358
- }
6359
- },
6360
- {
6361
- id: "opus-5",
6362
- handle: "anthropic/claude-opus-5",
6363
- label: "Opus 5",
6364
- description: "Opus 5 (high reasoning)",
6365
- updateArgs: {
6366
- context_window: 200000,
6367
- max_output_tokens: 128000,
6368
- enable_reasoner: true,
6369
- reasoning_effort: "high",
6370
- parallel_tool_calls: true
6371
- }
6372
- },
6373
- {
6374
- id: "opus-5-low",
6375
- handle: "anthropic/claude-opus-5",
6376
- label: "Opus 5",
6377
- description: "Opus 5 (low reasoning)",
6378
- updateArgs: {
6379
- context_window: 200000,
6380
- max_output_tokens: 128000,
6381
- enable_reasoner: true,
6382
- reasoning_effort: "low",
6383
- max_reasoning_tokens: 4000,
6384
- parallel_tool_calls: true
6385
- }
6386
- },
6387
- {
6388
- id: "opus-5-medium",
6389
- handle: "anthropic/claude-opus-5",
6390
- label: "Opus 5",
6391
- description: "Opus 5 (med reasoning)",
6392
- updateArgs: {
6393
- context_window: 200000,
6394
- max_output_tokens: 128000,
6395
- enable_reasoner: true,
6396
- reasoning_effort: "medium",
6397
- max_reasoning_tokens: 12000,
6398
- parallel_tool_calls: true
6399
- }
6400
- },
6401
- {
6402
- id: "opus-5-xhigh",
6403
- handle: "anthropic/claude-opus-5",
6404
- label: "Opus 5",
6405
- description: "Opus 5 (extra-high reasoning)",
6406
- updateArgs: {
6407
- context_window: 200000,
6408
- max_output_tokens: 128000,
6409
- enable_reasoner: true,
6410
- reasoning_effort: "xhigh",
6411
- parallel_tool_calls: true
6412
- }
6413
- },
6414
- {
6415
- id: "opus-5-max",
6416
- handle: "anthropic/claude-opus-5",
6417
- label: "Opus 5",
6418
- description: "Opus 5 (max reasoning)",
6419
- updateArgs: {
6420
- context_window: 200000,
6421
- max_output_tokens: 128000,
6422
- enable_reasoner: true,
6423
- reasoning_effort: "max",
6424
- parallel_tool_calls: true
6425
- }
6426
- },
6427
- {
6428
- id: "opus",
6429
- handle: "anthropic/claude-opus-4-8",
6430
- label: "Opus 4.8",
6431
- description: "Opus 4.8 (high reasoning)",
6432
- isFeatured: true,
6433
- updateArgs: {
6434
- context_window: 200000,
6435
- max_output_tokens: 128000,
6436
- reasoning_effort: "high",
6437
- enable_reasoner: true,
6438
- parallel_tool_calls: true
6439
- }
6440
- },
6441
- {
6442
- id: "opus-4.8-low",
6443
- handle: "anthropic/claude-opus-4-8",
6444
- label: "Opus 4.8",
6445
- description: "Opus 4.8 (low reasoning)",
6446
- updateArgs: {
6447
- context_window: 200000,
6448
- max_output_tokens: 128000,
6449
- reasoning_effort: "low",
6450
- enable_reasoner: true,
6451
- max_reasoning_tokens: 4000,
6452
- parallel_tool_calls: true
6453
- }
6454
- },
6455
- {
6456
- id: "opus-4.8-medium",
6457
- handle: "anthropic/claude-opus-4-8",
6458
- label: "Opus 4.8",
6459
- description: "Opus 4.8 (med reasoning)",
6460
- updateArgs: {
6461
- context_window: 200000,
6462
- max_output_tokens: 128000,
6463
- reasoning_effort: "medium",
6464
- enable_reasoner: true,
6465
- max_reasoning_tokens: 12000,
6466
- parallel_tool_calls: true
6467
- }
6468
- },
6469
- {
6470
- id: "opus-4.8-high",
6471
- handle: "anthropic/claude-opus-4-8",
6472
- label: "Opus 4.8",
6473
- description: "Opus 4.8 (high reasoning)",
6474
- updateArgs: {
6475
- context_window: 200000,
6476
- max_output_tokens: 128000,
6477
- reasoning_effort: "high",
6478
- enable_reasoner: true,
6479
- parallel_tool_calls: true
6480
- }
6481
- },
6482
- {
6483
- id: "opus-4.8-xhigh",
6484
- handle: "anthropic/claude-opus-4-8",
6485
- label: "Opus 4.8",
6486
- description: "Opus 4.8 (extra-high reasoning)",
6487
- updateArgs: {
6488
- context_window: 200000,
6489
- max_output_tokens: 128000,
6490
- reasoning_effort: "xhigh",
6491
- enable_reasoner: true,
6492
- parallel_tool_calls: true
6493
- }
6494
- },
6495
- {
6496
- id: "opus-4.8-max",
6497
- handle: "anthropic/claude-opus-4-8",
6498
- label: "Opus 4.8",
6499
- description: "Opus 4.8 (max reasoning)",
6500
- updateArgs: {
6501
- context_window: 200000,
6502
- max_output_tokens: 128000,
6503
- reasoning_effort: "max",
6504
- enable_reasoner: true,
6505
- parallel_tool_calls: true
6506
- }
6507
- },
6508
- {
6509
- id: "opus-4.8-1m",
6510
- handle: "anthropic/claude-opus-4-8",
6511
- label: "Opus 4.8 1M",
6512
- description: "Claude Opus 4.8 with 1M token context window (high reasoning)",
6513
- updateArgs: {
6514
- context_window: 950000,
6515
- max_output_tokens: 128000,
6516
- reasoning_effort: "high",
6517
- enable_reasoner: true,
6518
- parallel_tool_calls: true
6519
- }
6520
- },
6521
- {
6522
- id: "opus-4.8-1m-no-reasoning",
6523
- handle: "anthropic/claude-opus-4-8",
6524
- label: "Opus 4.8 1M",
6525
- description: "Opus 4.8 1M with no reasoning (faster)",
6526
- updateArgs: {
6527
- context_window: 950000,
6528
- max_output_tokens: 128000,
6529
- reasoning_effort: "none",
6530
- enable_reasoner: false,
6531
- parallel_tool_calls: true
6532
- }
6533
- },
6534
- {
6535
- id: "opus-4.8-1m-low",
6536
- handle: "anthropic/claude-opus-4-8",
6537
- label: "Opus 4.8 1M",
6538
- description: "Opus 4.8 1M (low reasoning)",
6539
- updateArgs: {
6540
- context_window: 950000,
6541
- max_output_tokens: 128000,
6542
- reasoning_effort: "low",
6543
- enable_reasoner: true,
6544
- parallel_tool_calls: true,
6545
- max_reasoning_tokens: 4000
6546
- }
6547
- },
6548
- {
6549
- id: "opus-4.8-1m-medium",
6550
- handle: "anthropic/claude-opus-4-8",
6551
- label: "Opus 4.8 1M",
6552
- description: "Opus 4.8 1M (med reasoning)",
6553
- updateArgs: {
6554
- context_window: 950000,
6555
- max_output_tokens: 128000,
6556
- reasoning_effort: "medium",
6557
- enable_reasoner: true,
6558
- parallel_tool_calls: true,
6559
- max_reasoning_tokens: 12000
6560
- }
6561
- },
6562
- {
6563
- id: "opus-4.8-1m-xhigh",
6564
- handle: "anthropic/claude-opus-4-8",
6565
- label: "Opus 4.8 1M",
6566
- description: "Opus 4.8 1M (max reasoning)",
6567
- updateArgs: {
6568
- context_window: 950000,
6569
- max_output_tokens: 128000,
6570
- reasoning_effort: "xhigh",
6571
- enable_reasoner: true,
6572
- parallel_tool_calls: true
6573
- }
6574
- },
6575
- {
6576
- id: "opus-1m",
6577
- handle: "anthropic/claude-opus-4-6",
6578
- label: "Opus 4.6 1M",
6579
- description: "Claude Opus 4.6 with 1M token context window (high reasoning)",
6580
- updateArgs: {
6581
- context_window: 950000,
6582
- max_output_tokens: 128000,
6583
- reasoning_effort: "high",
6584
- enable_reasoner: true,
6585
- parallel_tool_calls: true
6586
- }
6587
- },
6588
- {
6589
- id: "opus-1m-no-reasoning",
6590
- handle: "anthropic/claude-opus-4-6",
6591
- label: "Opus 4.6 1M",
6592
- description: "Opus 4.6 1M with no reasoning (faster)",
6593
- updateArgs: {
6594
- context_window: 950000,
6595
- max_output_tokens: 128000,
6596
- reasoning_effort: "none",
6597
- enable_reasoner: false,
6598
- parallel_tool_calls: true
6599
- }
6600
- },
6601
- {
6602
- id: "opus-1m-low",
6603
- handle: "anthropic/claude-opus-4-6",
6604
- label: "Opus 4.6 1M",
6605
- description: "Opus 4.6 1M (low reasoning)",
6606
- updateArgs: {
6607
- context_window: 950000,
6608
- max_output_tokens: 128000,
6609
- reasoning_effort: "low",
6610
- enable_reasoner: true,
6611
- max_reasoning_tokens: 4000,
6612
- parallel_tool_calls: true
6613
- }
6614
- },
6615
- {
6616
- id: "opus-1m-medium",
6617
- handle: "anthropic/claude-opus-4-6",
6618
- label: "Opus 4.6 1M",
6619
- description: "Opus 4.6 1M (med reasoning)",
6620
- updateArgs: {
6621
- context_window: 950000,
6622
- max_output_tokens: 128000,
6623
- reasoning_effort: "medium",
6624
- enable_reasoner: true,
6625
- max_reasoning_tokens: 12000,
6626
- parallel_tool_calls: true
6627
- }
6628
- },
6629
- {
6630
- id: "opus-1m-xhigh",
6631
- handle: "anthropic/claude-opus-4-6",
6632
- label: "Opus 4.6 1M",
6633
- description: "Opus 4.6 1M (max reasoning)",
6634
- updateArgs: {
6635
- context_window: 950000,
6636
- max_output_tokens: 128000,
6637
- reasoning_effort: "xhigh",
6638
- enable_reasoner: true,
6639
- parallel_tool_calls: true
6640
- }
6641
- },
6642
- {
6643
- id: "sonnet",
6644
- handle: "anthropic/claude-sonnet-5",
6645
- label: "Sonnet 5",
6646
- description: "Sonnet 5 (high reasoning)",
6647
- isFeatured: true,
6648
- updateArgs: {
6649
- context_window: 1e6,
6650
- max_output_tokens: 128000,
6651
- reasoning_effort: "high",
6652
- enable_reasoner: true,
6653
- parallel_tool_calls: true
6654
- }
6655
- },
6656
- {
6657
- id: "sonnet-5-no-reasoning",
6658
- handle: "anthropic/claude-sonnet-5",
6659
- label: "Sonnet 5",
6660
- description: "Sonnet 5 with no reasoning (faster)",
6661
- updateArgs: {
6662
- context_window: 1e6,
6663
- max_output_tokens: 128000,
6664
- reasoning_effort: "none",
6665
- enable_reasoner: false,
6666
- parallel_tool_calls: true
6667
- }
6668
- },
6669
- {
6670
- id: "sonnet-5-low",
6671
- handle: "anthropic/claude-sonnet-5",
6672
- label: "Sonnet 5",
6673
- description: "Sonnet 5 (low reasoning)",
6674
- updateArgs: {
6675
- context_window: 1e6,
6676
- max_output_tokens: 128000,
6677
- reasoning_effort: "low",
6678
- enable_reasoner: true,
6679
- max_reasoning_tokens: 4000,
6680
- parallel_tool_calls: true
6681
- }
6682
- },
6683
- {
6684
- id: "sonnet-5-medium",
6685
- handle: "anthropic/claude-sonnet-5",
6686
- label: "Sonnet 5",
6687
- description: "Sonnet 5 (med reasoning)",
6688
- updateArgs: {
6689
- context_window: 1e6,
6690
- max_output_tokens: 128000,
6691
- reasoning_effort: "medium",
6692
- enable_reasoner: true,
6693
- max_reasoning_tokens: 12000,
6694
- parallel_tool_calls: true
6695
- }
6696
- },
6697
- {
6698
- id: "sonnet-5-xhigh",
6699
- handle: "anthropic/claude-sonnet-5",
6700
- label: "Sonnet 5",
6701
- description: "Sonnet 5 (extra-high reasoning)",
6702
- updateArgs: {
6703
- context_window: 1e6,
6704
- max_output_tokens: 128000,
6705
- reasoning_effort: "xhigh",
6706
- enable_reasoner: true,
6707
- parallel_tool_calls: true
6708
- }
6709
- },
6710
- {
6711
- id: "sonnet-5-max",
6712
- handle: "anthropic/claude-sonnet-5",
6713
- label: "Sonnet 5",
6714
- description: "Sonnet 5 (max reasoning)",
6715
- updateArgs: {
6716
- context_window: 1e6,
6717
- max_output_tokens: 128000,
6718
- reasoning_effort: "max",
6719
- enable_reasoner: true,
6720
- parallel_tool_calls: true
6721
- }
6722
- },
6723
- {
6724
- id: "sonnet-4.6",
6725
- handle: "anthropic/claude-sonnet-4-6",
6726
- label: "Sonnet 4.6",
6727
- description: "Sonnet 4.6 (high reasoning)",
6728
- updateArgs: {
6729
- context_window: 200000,
6730
- max_output_tokens: 128000,
6731
- reasoning_effort: "high",
6732
- enable_reasoner: true,
6733
- parallel_tool_calls: true
6734
- }
6735
- },
6736
- {
6737
- id: "sonnet-4.6-no-reasoning",
6738
- handle: "anthropic/claude-sonnet-4-6",
6739
- label: "Sonnet 4.6",
6740
- description: "Sonnet 4.6 with no reasoning (faster)",
6741
- updateArgs: {
6742
- context_window: 200000,
6743
- max_output_tokens: 128000,
6744
- reasoning_effort: "none",
6745
- enable_reasoner: false,
6746
- parallel_tool_calls: true
6747
- }
6748
- },
6749
- {
6750
- id: "sonnet-4.6-low",
6751
- handle: "anthropic/claude-sonnet-4-6",
6752
- label: "Sonnet 4.6",
6753
- description: "Sonnet 4.6 (low reasoning)",
6754
- updateArgs: {
6755
- context_window: 200000,
6756
- max_output_tokens: 128000,
6757
- reasoning_effort: "low",
6758
- enable_reasoner: true,
6759
- max_reasoning_tokens: 4000,
6760
- parallel_tool_calls: true
6761
- }
6762
- },
6763
- {
6764
- id: "sonnet-4.6-medium",
6765
- handle: "anthropic/claude-sonnet-4-6",
6766
- label: "Sonnet 4.6",
6767
- description: "Sonnet 4.6 (med reasoning)",
6768
- updateArgs: {
6769
- context_window: 200000,
6770
- max_output_tokens: 128000,
6771
- reasoning_effort: "medium",
6772
- enable_reasoner: true,
6773
- max_reasoning_tokens: 12000,
6774
- parallel_tool_calls: true
6775
- }
6776
- },
6777
- {
6778
- id: "sonnet-4.6-xhigh",
6779
- handle: "anthropic/claude-sonnet-4-6",
6780
- label: "Sonnet 4.6",
6781
- description: "Sonnet 4.6 (max reasoning)",
6782
- updateArgs: {
6783
- context_window: 200000,
6784
- max_output_tokens: 128000,
6785
- reasoning_effort: "xhigh",
6786
- enable_reasoner: true,
6787
- parallel_tool_calls: true
6788
- }
6789
- },
6790
- {
6791
- id: "sonnet-1m",
6792
- handle: "anthropic/claude-sonnet-4-6",
6793
- label: "Sonnet 4.6 1M",
6794
- description: "Claude Sonnet 4.6 with 1M token context window (high reasoning)",
6795
- updateArgs: {
6796
- context_window: 9500000,
6797
- max_output_tokens: 128000,
6798
- reasoning_effort: "high",
6799
- enable_reasoner: true,
6800
- parallel_tool_calls: true
6801
- }
6802
- },
6803
- {
6804
- id: "sonnet-1m-no-reasoning",
6805
- handle: "anthropic/claude-sonnet-4-6",
6806
- label: "Sonnet 4.6 1M",
6807
- description: "Sonnet 4.6 1M with no reasoning (faster)",
6808
- updateArgs: {
6809
- context_window: 9500000,
6810
- max_output_tokens: 128000,
6811
- reasoning_effort: "none",
6812
- enable_reasoner: false,
6813
- parallel_tool_calls: true
6814
- }
6815
- },
6816
- {
6817
- id: "sonnet-1m-low",
6818
- handle: "anthropic/claude-sonnet-4-6",
6819
- label: "Sonnet 4.6 1M",
6820
- description: "Sonnet 4.6 1M (low reasoning)",
6821
- updateArgs: {
6822
- context_window: 9500000,
6823
- max_output_tokens: 128000,
6824
- reasoning_effort: "low",
6825
- enable_reasoner: true,
6826
- max_reasoning_tokens: 4000,
6827
- parallel_tool_calls: true
6828
- }
6829
- },
6830
- {
6831
- id: "sonnet-1m-medium",
6832
- handle: "anthropic/claude-sonnet-4-6",
6833
- label: "Sonnet 4.6 1M",
6834
- description: "Sonnet 4.6 1M (med reasoning)",
6835
- updateArgs: {
6836
- context_window: 9500000,
6837
- max_output_tokens: 128000,
6838
- reasoning_effort: "medium",
6839
- enable_reasoner: true,
6840
- max_reasoning_tokens: 12000,
6841
- parallel_tool_calls: true
6842
- }
6843
- },
6844
- {
6845
- id: "sonnet-1m-xhigh",
6846
- handle: "anthropic/claude-sonnet-4-6",
6847
- label: "Sonnet 4.6 1M",
6848
- description: "Sonnet 4.6 1M (max reasoning)",
6849
- updateArgs: {
6850
- context_window: 9500000,
6851
- max_output_tokens: 128000,
6852
- reasoning_effort: "xhigh",
6853
- enable_reasoner: true,
6854
- parallel_tool_calls: true
6855
- }
6856
- },
6857
- {
6858
- id: "opus-4.6-high",
6859
- handle: "anthropic/claude-opus-4-6",
6860
- label: "Opus 4.6",
6861
- description: "Opus 4.6 (high reasoning)",
6862
- updateArgs: {
6863
- context_window: 200000,
6864
- max_output_tokens: 128000,
6865
- reasoning_effort: "high",
6866
- enable_reasoner: true,
6867
- parallel_tool_calls: true
6868
- }
6869
- },
6870
- {
6871
- id: "opus-4.6-no-reasoning",
6872
- handle: "anthropic/claude-opus-4-6",
6873
- label: "Opus 4.6",
6874
- description: "Opus 4.6 with no reasoning (faster)",
6875
- updateArgs: {
6876
- context_window: 200000,
6877
- max_output_tokens: 128000,
6878
- reasoning_effort: "none",
6879
- enable_reasoner: false,
6880
- parallel_tool_calls: true
6881
- }
6882
- },
6883
- {
6884
- id: "opus-4.6-low",
6885
- handle: "anthropic/claude-opus-4-6",
6886
- label: "Opus 4.6",
6887
- description: "Opus 4.6 (low reasoning)",
6888
- updateArgs: {
6889
- context_window: 200000,
6890
- max_output_tokens: 128000,
6891
- reasoning_effort: "low",
6892
- enable_reasoner: true,
6893
- max_reasoning_tokens: 4000,
6894
- parallel_tool_calls: true
6895
- }
6896
- },
6897
- {
6898
- id: "opus-4.6-medium",
6899
- handle: "anthropic/claude-opus-4-6",
6900
- label: "Opus 4.6",
6901
- description: "Opus 4.6 (med reasoning)",
6902
- updateArgs: {
6903
- context_window: 200000,
6904
- max_output_tokens: 128000,
6905
- reasoning_effort: "medium",
6906
- enable_reasoner: true,
6907
- max_reasoning_tokens: 12000,
6908
- parallel_tool_calls: true
6909
- }
6910
- },
6911
- {
6912
- id: "opus-4.6-xhigh",
6913
- handle: "anthropic/claude-opus-4-6",
6914
- label: "Opus 4.6",
6915
- description: "Opus 4.6 (max reasoning)",
6916
- updateArgs: {
6917
- context_window: 200000,
6918
- max_output_tokens: 128000,
6919
- reasoning_effort: "xhigh",
6920
- enable_reasoner: true,
6921
- parallel_tool_calls: true
6922
- }
6923
- },
6924
- {
6925
- id: "opus-4.7-medium",
6926
- handle: "anthropic/claude-opus-4-7",
6927
- label: "Opus 4.7",
6928
- description: "Opus 4.7 (med reasoning)",
6929
- updateArgs: {
6930
- context_window: 200000,
6931
- max_output_tokens: 128000,
6932
- reasoning_effort: "medium",
6933
- enable_reasoner: true,
6934
- max_reasoning_tokens: 12000,
6935
- parallel_tool_calls: true
6936
- }
6937
- },
6938
- {
6939
- id: "opus-4.7-low",
6940
- handle: "anthropic/claude-opus-4-7",
6941
- label: "Opus 4.7",
6942
- description: "Opus 4.7 (low reasoning)",
6943
- updateArgs: {
6944
- context_window: 200000,
6945
- max_output_tokens: 128000,
6946
- reasoning_effort: "low",
6947
- enable_reasoner: true,
6948
- max_reasoning_tokens: 4000,
6949
- parallel_tool_calls: true
6950
- }
6951
- },
6952
- {
6953
- id: "opus-4.7-high",
6954
- handle: "anthropic/claude-opus-4-7",
6955
- label: "Opus 4.7",
6956
- description: "Opus 4.7 (high reasoning)",
6957
- updateArgs: {
6958
- context_window: 200000,
6959
- max_output_tokens: 128000,
6960
- reasoning_effort: "high",
6961
- enable_reasoner: true,
6962
- parallel_tool_calls: true
6963
- }
6964
- },
6965
- {
6966
- id: "opus-4.7-xhigh",
6967
- handle: "anthropic/claude-opus-4-7",
6968
- label: "Opus 4.7",
6969
- description: "Opus 4.7 (extra-high reasoning)",
6970
- updateArgs: {
6971
- context_window: 200000,
6972
- max_output_tokens: 128000,
6973
- reasoning_effort: "xhigh",
6974
- enable_reasoner: true,
6975
- parallel_tool_calls: true
6976
- }
6977
- },
6978
- {
6979
- id: "opus-4.7-max",
6980
- handle: "anthropic/claude-opus-4-7",
6981
- label: "Opus 4.7",
6982
- description: "Opus 4.7 (max reasoning)",
6983
- updateArgs: {
6984
- context_window: 200000,
6985
- max_output_tokens: 128000,
6986
- reasoning_effort: "max",
6987
- enable_reasoner: true,
6988
- parallel_tool_calls: true
6989
- }
6990
- },
6991
- {
6992
- id: "opus-4.5",
6993
- handle: "anthropic/claude-opus-4-5-20251101",
6994
- label: "Opus 4.5",
6995
- description: "Opus 4.5 (high reasoning)",
6996
- updateArgs: {
6997
- context_window: 180000,
6998
- max_output_tokens: 64000,
6999
- reasoning_effort: "high",
7000
- enable_reasoner: true,
7001
- max_reasoning_tokens: 31999,
7002
- parallel_tool_calls: true
7003
- }
7004
- },
7005
- {
7006
- id: "opus-4.5-no-reasoning",
7007
- handle: "anthropic/claude-opus-4-5-20251101",
7008
- label: "Opus 4.5",
7009
- description: "Opus 4.5 with no reasoning (faster)",
7010
- updateArgs: {
7011
- context_window: 180000,
7012
- max_output_tokens: 64000,
7013
- reasoning_effort: "none",
7014
- enable_reasoner: false,
7015
- parallel_tool_calls: true
7016
- }
7017
- },
7018
- {
7019
- id: "opus-4.5-low",
7020
- handle: "anthropic/claude-opus-4-5-20251101",
7021
- label: "Opus 4.5",
7022
- description: "Opus 4.5 (low reasoning)",
7023
- updateArgs: {
7024
- context_window: 180000,
7025
- max_output_tokens: 64000,
7026
- reasoning_effort: "low",
7027
- enable_reasoner: true,
7028
- max_reasoning_tokens: 4000,
7029
- parallel_tool_calls: true
7030
- }
7031
- },
7032
- {
7033
- id: "opus-4.5-medium",
7034
- handle: "anthropic/claude-opus-4-5-20251101",
7035
- label: "Opus 4.5",
7036
- description: "Opus 4.5 (med reasoning)",
7037
- updateArgs: {
7038
- context_window: 180000,
7039
- max_output_tokens: 64000,
7040
- reasoning_effort: "medium",
7041
- enable_reasoner: true,
7042
- max_reasoning_tokens: 12000,
7043
- parallel_tool_calls: true
7044
- }
7045
- },
7046
- {
7047
- id: "bedrock-opus-4.5",
7048
- handle: "bedrock/us.anthropic.claude-opus-4-5-20251101-v1:0",
7049
- label: "Bedrock Opus 4.5",
7050
- shortLabel: "Opus 4.5 BR",
7051
- description: "Opus 4.5 via AWS Bedrock",
7052
- updateArgs: {
7053
- context_window: 180000,
7054
- max_output_tokens: 64000,
7055
- max_reasoning_tokens: 31999,
7056
- parallel_tool_calls: true
7057
- }
7058
- },
7059
- {
7060
- id: "haiku",
7061
- handle: "anthropic/claude-haiku-4-5",
7062
- label: "Haiku 4.5",
7063
- description: "Haiku 4.5",
7064
- updateArgs: {
7065
- context_window: 180000,
7066
- max_output_tokens: 64000,
7067
- parallel_tool_calls: true
7068
- }
7069
- },
7070
- {
7071
- id: "gpt-5.5-plus-pro-none",
7072
- handle: "chatgpt-plus-pro/gpt-5.5",
7073
- label: "GPT-5.5 (ChatGPT)",
7074
- description: "GPT-5.5 (no reasoning) via ChatGPT Plus/Pro",
7075
- updateArgs: {
7076
- reasoning_effort: "none",
7077
- verbosity: "low",
7078
- context_window: 272000,
7079
- max_output_tokens: 128000,
7080
- parallel_tool_calls: true
7081
- }
7082
- },
7083
- {
7084
- id: "gpt-5.5-plus-pro-low",
7085
- handle: "chatgpt-plus-pro/gpt-5.5",
7086
- label: "GPT-5.5 (ChatGPT)",
7087
- description: "GPT-5.5 (low reasoning) via ChatGPT Plus/Pro",
7088
- updateArgs: {
7089
- reasoning_effort: "low",
7090
- verbosity: "low",
7091
- context_window: 272000,
7092
- max_output_tokens: 128000,
7093
- parallel_tool_calls: true
7094
- }
7095
- },
7096
- {
7097
- id: "gpt-5.5-plus-pro-medium",
7098
- handle: "chatgpt-plus-pro/gpt-5.5",
7099
- label: "GPT-5.5 (ChatGPT)",
7100
- description: "GPT-5.5 (med reasoning) via ChatGPT Plus/Pro",
7101
- updateArgs: {
7102
- reasoning_effort: "medium",
7103
- verbosity: "low",
7104
- context_window: 272000,
7105
- max_output_tokens: 128000,
7106
- parallel_tool_calls: true
7107
- }
7108
- },
7109
- {
7110
- id: "gpt-5.5-plus-pro-high",
7111
- handle: "chatgpt-plus-pro/gpt-5.5",
7112
- label: "GPT-5.5 (ChatGPT)",
7113
- description: "OpenAI's most capable model (high reasoning) via ChatGPT Plus/Pro",
7114
- updateArgs: {
7115
- reasoning_effort: "high",
7116
- verbosity: "low",
7117
- context_window: 272000,
7118
- max_output_tokens: 128000,
7119
- parallel_tool_calls: true
7120
- }
7121
- },
7122
- {
7123
- id: "gpt-5.5-plus-pro-xhigh",
7124
- handle: "chatgpt-plus-pro/gpt-5.5",
7125
- label: "GPT-5.5 (ChatGPT)",
7126
- description: "GPT-5.5 (max reasoning) via ChatGPT Plus/Pro",
7127
- updateArgs: {
7128
- reasoning_effort: "xhigh",
7129
- verbosity: "low",
7130
- context_window: 272000,
7131
- max_output_tokens: 128000,
7132
- parallel_tool_calls: true
7133
- }
7134
- },
7135
- {
7136
- id: "gpt-5.5-fast-plus-pro-none",
7137
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7138
- label: "GPT-5.5 Fast (ChatGPT)",
7139
- description: "GPT-5.5 Fast (no reasoning) via ChatGPT Plus/Pro",
7140
- updateArgs: {
7141
- reasoning_effort: "none",
7142
- verbosity: "low",
7143
- context_window: 272000,
7144
- max_output_tokens: 128000,
7145
- parallel_tool_calls: true
7146
- }
7147
- },
7148
- {
7149
- id: "gpt-5.5-fast-plus-pro-low",
7150
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7151
- label: "GPT-5.5 Fast (ChatGPT)",
7152
- description: "GPT-5.5 Fast (low reasoning) via ChatGPT Plus/Pro",
7153
- updateArgs: {
7154
- reasoning_effort: "low",
7155
- verbosity: "low",
7156
- context_window: 272000,
7157
- max_output_tokens: 128000,
7158
- parallel_tool_calls: true
7159
- }
7160
- },
7161
- {
7162
- id: "gpt-5.5-fast-plus-pro-medium",
7163
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7164
- label: "GPT-5.5 Fast (ChatGPT)",
7165
- description: "GPT-5.5 Fast (med reasoning) via ChatGPT Plus/Pro",
7166
- updateArgs: {
7167
- reasoning_effort: "medium",
7168
- verbosity: "low",
7169
- context_window: 272000,
7170
- max_output_tokens: 128000,
7171
- parallel_tool_calls: true
7172
- }
7173
- },
7174
- {
7175
- id: "gpt-5.5-fast-plus-pro-high",
7176
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7177
- label: "GPT-5.5 Fast (ChatGPT)",
7178
- description: "GPT-5.5 Fast (high reasoning) via ChatGPT Plus/Pro",
7179
- updateArgs: {
7180
- reasoning_effort: "high",
7181
- verbosity: "low",
7182
- context_window: 272000,
7183
- max_output_tokens: 128000,
7184
- parallel_tool_calls: true
7185
- }
7186
- },
7187
- {
7188
- id: "gpt-5.5-fast-plus-pro-xhigh",
7189
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7190
- label: "GPT-5.5 Fast (ChatGPT)",
7191
- description: "GPT-5.5 Fast (max reasoning) via ChatGPT Plus/Pro",
7192
- updateArgs: {
7193
- reasoning_effort: "xhigh",
7194
- verbosity: "low",
7195
- context_window: 272000,
7196
- max_output_tokens: 128000,
7197
- parallel_tool_calls: true
7198
- }
7199
- },
7200
- {
7201
- id: "gpt-5.4-plus-pro-none",
7202
- handle: "chatgpt-plus-pro/gpt-5.4",
7203
- label: "GPT-5.4 (ChatGPT)",
7204
- description: "GPT-5.4 (no reasoning) via ChatGPT Plus/Pro",
7205
- updateArgs: {
7206
- reasoning_effort: "none",
7207
- verbosity: "low",
7208
- context_window: 272000,
7209
- max_output_tokens: 128000,
7210
- parallel_tool_calls: true
7211
- }
7212
- },
7213
- {
7214
- id: "gpt-5.4-plus-pro-low",
7215
- handle: "chatgpt-plus-pro/gpt-5.4",
7216
- label: "GPT-5.4 (ChatGPT)",
7217
- description: "GPT-5.4 (low reasoning) via ChatGPT Plus/Pro",
7218
- updateArgs: {
7219
- reasoning_effort: "low",
7220
- verbosity: "low",
7221
- context_window: 272000,
7222
- max_output_tokens: 128000,
7223
- parallel_tool_calls: true
7224
- }
7225
- },
7226
- {
7227
- id: "gpt-5.4-plus-pro-medium",
7228
- handle: "chatgpt-plus-pro/gpt-5.4",
7229
- label: "GPT-5.4 (ChatGPT)",
7230
- description: "GPT-5.4 (med reasoning) via ChatGPT Plus/Pro",
7231
- updateArgs: {
7232
- reasoning_effort: "medium",
7233
- verbosity: "low",
7234
- context_window: 272000,
7235
- max_output_tokens: 128000,
7236
- parallel_tool_calls: true
7237
- }
7238
- },
7239
- {
7240
- id: "gpt-5.4-plus-pro-high",
7241
- handle: "chatgpt-plus-pro/gpt-5.4",
7242
- label: "GPT-5.4 (ChatGPT)",
7243
- description: "OpenAI's most capable model (high reasoning) via ChatGPT Plus/Pro",
7244
- updateArgs: {
7245
- reasoning_effort: "high",
7246
- verbosity: "low",
7247
- context_window: 272000,
7248
- max_output_tokens: 128000,
7249
- parallel_tool_calls: true
7250
- }
7251
- },
7252
- {
7253
- id: "gpt-5.4-plus-pro-xhigh",
7254
- handle: "chatgpt-plus-pro/gpt-5.4",
7255
- label: "GPT-5.4 (ChatGPT)",
7256
- description: "GPT-5.4 (max reasoning) via ChatGPT Plus/Pro",
7257
- updateArgs: {
7258
- reasoning_effort: "xhigh",
7259
- verbosity: "low",
7260
- context_window: 272000,
7261
- max_output_tokens: 128000,
7262
- parallel_tool_calls: true
7263
- }
7264
- },
7265
- {
7266
- id: "gpt-5.4-pro-plus-pro-medium",
7267
- handle: "chatgpt-plus-pro/gpt-5.4-pro",
7268
- label: "GPT-5.4 Pro (ChatGPT)",
7269
- description: "GPT-5.4 Pro (med reasoning) via ChatGPT Plus/Pro",
7270
- updateArgs: {
7271
- reasoning_effort: "medium",
7272
- verbosity: "low",
7273
- context_window: 272000,
7274
- max_output_tokens: 128000,
7275
- parallel_tool_calls: true
7276
- }
7277
- },
7278
- {
7279
- id: "gpt-5.4-pro-plus-pro-high",
7280
- handle: "chatgpt-plus-pro/gpt-5.4-pro",
7281
- label: "GPT-5.4 Pro (ChatGPT)",
7282
- description: "GPT-5.4 Pro (high reasoning) via ChatGPT Plus/Pro",
7283
- updateArgs: {
7284
- reasoning_effort: "high",
7285
- verbosity: "low",
7286
- context_window: 272000,
7287
- max_output_tokens: 128000,
7288
- parallel_tool_calls: true
7289
- }
7290
- },
7291
- {
7292
- id: "gpt-5.4-pro-plus-pro-xhigh",
7293
- handle: "chatgpt-plus-pro/gpt-5.4-pro",
7294
- label: "GPT-5.4 Pro (ChatGPT)",
7295
- description: "GPT-5.4 Pro (max reasoning) via ChatGPT Plus/Pro",
7296
- updateArgs: {
7297
- reasoning_effort: "xhigh",
7298
- verbosity: "low",
7299
- context_window: 272000,
7300
- max_output_tokens: 128000,
7301
- parallel_tool_calls: true
7302
- }
7303
- },
7304
- {
7305
- id: "gpt-5.4-fast-plus-pro-none",
7306
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7307
- label: "GPT-5.4 Fast (ChatGPT)",
7308
- description: "GPT-5.4 Fast (no reasoning) via ChatGPT Plus/Pro",
7309
- updateArgs: {
7310
- reasoning_effort: "none",
7311
- verbosity: "low",
7312
- context_window: 272000,
7313
- max_output_tokens: 128000,
7314
- parallel_tool_calls: true
7315
- }
7316
- },
7317
- {
7318
- id: "gpt-5.4-fast-plus-pro-low",
7319
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7320
- label: "GPT-5.4 Fast (ChatGPT)",
7321
- description: "GPT-5.4 Fast (low reasoning) via ChatGPT Plus/Pro",
7322
- updateArgs: {
7323
- reasoning_effort: "low",
7324
- verbosity: "low",
7325
- context_window: 272000,
7326
- max_output_tokens: 128000,
7327
- parallel_tool_calls: true
7328
- }
7329
- },
7330
- {
7331
- id: "gpt-5.4-fast-plus-pro-medium",
7332
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7333
- label: "GPT-5.4 Fast (ChatGPT)",
7334
- description: "GPT-5.4 Fast (med reasoning) via ChatGPT Plus/Pro",
7335
- updateArgs: {
7336
- reasoning_effort: "medium",
7337
- verbosity: "low",
7338
- context_window: 272000,
7339
- max_output_tokens: 128000,
7340
- parallel_tool_calls: true
7341
- }
7342
- },
7343
- {
7344
- id: "gpt-5.4-fast-plus-pro-high",
7345
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7346
- label: "GPT-5.4 Fast (ChatGPT)",
7347
- description: "GPT-5.4 Fast (high reasoning) via ChatGPT Plus/Pro",
7348
- updateArgs: {
7349
- reasoning_effort: "high",
7350
- verbosity: "low",
7351
- context_window: 272000,
7352
- max_output_tokens: 128000,
7353
- parallel_tool_calls: true
7354
- }
7355
- },
7356
- {
7357
- id: "gpt-5.4-fast-plus-pro-xhigh",
7358
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7359
- label: "GPT-5.4 Fast (ChatGPT)",
7360
- description: "GPT-5.4 Fast (max reasoning) via ChatGPT Plus/Pro",
7361
- updateArgs: {
7362
- reasoning_effort: "xhigh",
7363
- verbosity: "low",
7364
- context_window: 272000,
7365
- max_output_tokens: 128000,
7366
- parallel_tool_calls: true
7367
- }
7368
- },
7369
- {
7370
- id: "gpt-5.4-mini-plus-pro-none",
7371
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7372
- label: "GPT-5.4 Mini (ChatGPT)",
7373
- description: "GPT-5.4 Mini (no reasoning) via ChatGPT Plus/Pro",
7374
- updateArgs: {
7375
- reasoning_effort: "none",
7376
- verbosity: "low",
7377
- context_window: 272000,
7378
- max_output_tokens: 128000,
7379
- parallel_tool_calls: true
7380
- }
7381
- },
7382
- {
7383
- id: "gpt-5.4-mini-plus-pro-low",
7384
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7385
- label: "GPT-5.4 Mini (ChatGPT)",
7386
- description: "GPT-5.4 Mini (low reasoning) via ChatGPT Plus/Pro",
7387
- updateArgs: {
7388
- reasoning_effort: "low",
7389
- verbosity: "low",
7390
- context_window: 272000,
7391
- max_output_tokens: 128000,
7392
- parallel_tool_calls: true
7393
- }
7394
- },
7395
- {
7396
- id: "gpt-5.4-mini-plus-pro-medium",
7397
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7398
- label: "GPT-5.4 Mini (ChatGPT)",
7399
- description: "GPT-5.4 Mini (med reasoning) via ChatGPT Plus/Pro",
7400
- updateArgs: {
7401
- reasoning_effort: "medium",
7402
- verbosity: "low",
7403
- context_window: 272000,
7404
- max_output_tokens: 128000,
7405
- parallel_tool_calls: true
7406
- }
7407
- },
7408
- {
7409
- id: "gpt-5.4-mini-plus-pro-high",
7410
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7411
- label: "GPT-5.4 Mini (ChatGPT)",
7412
- description: "GPT-5.4 Mini (high reasoning) via ChatGPT Plus/Pro",
7413
- updateArgs: {
7414
- reasoning_effort: "high",
7415
- verbosity: "low",
7416
- context_window: 272000,
7417
- max_output_tokens: 128000,
7418
- parallel_tool_calls: true
7419
- }
7420
- },
7421
- {
7422
- id: "gpt-5.4-mini-plus-pro-xhigh",
7423
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7424
- label: "GPT-5.4 Mini (ChatGPT)",
7425
- description: "GPT-5.4 Mini (max reasoning) via ChatGPT Plus/Pro",
7426
- updateArgs: {
7427
- reasoning_effort: "xhigh",
7428
- verbosity: "low",
7429
- context_window: 272000,
7430
- max_output_tokens: 128000,
7431
- parallel_tool_calls: true
7432
- }
7433
- },
7434
- {
7435
- id: "gpt-5.3-codex-spark-plus-pro-none",
7436
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7437
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7438
- description: "GPT-5.3 Codex Spark (no reasoning) via ChatGPT Plus/Pro",
7439
- updateArgs: {
7440
- reasoning_effort: "none",
7441
- verbosity: "low",
7442
- context_window: 128000,
7443
- max_output_tokens: 128000,
7444
- parallel_tool_calls: true
7445
- }
7446
- },
7447
- {
7448
- id: "gpt-5.3-codex-spark-plus-pro-low",
7449
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7450
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7451
- description: "GPT-5.3 Codex Spark (low reasoning) via ChatGPT Plus/Pro",
7452
- updateArgs: {
7453
- reasoning_effort: "low",
7454
- verbosity: "low",
7455
- context_window: 128000,
7456
- max_output_tokens: 128000,
7457
- parallel_tool_calls: true
7458
- }
7459
- },
7460
- {
7461
- id: "gpt-5.3-codex-spark-plus-pro-medium",
7462
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7463
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7464
- description: "GPT-5.3 Codex Spark (med reasoning) via ChatGPT Plus/Pro",
7465
- updateArgs: {
7466
- reasoning_effort: "medium",
7467
- verbosity: "low",
7468
- context_window: 128000,
7469
- max_output_tokens: 128000,
7470
- parallel_tool_calls: true
7471
- }
7472
- },
7473
- {
7474
- id: "gpt-5.3-codex-spark-plus-pro-high",
7475
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7476
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7477
- description: "GPT-5.3 Codex Spark (high reasoning) via ChatGPT Plus/Pro",
7478
- updateArgs: {
7479
- reasoning_effort: "high",
7480
- verbosity: "low",
7481
- context_window: 128000,
7482
- max_output_tokens: 128000,
7483
- parallel_tool_calls: true
7484
- }
7485
- },
7486
- {
7487
- id: "gpt-5.3-codex-spark-plus-pro-xhigh",
7488
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7489
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7490
- description: "GPT-5.3 Codex Spark (max reasoning) via ChatGPT Plus/Pro",
7491
- updateArgs: {
7492
- reasoning_effort: "xhigh",
7493
- verbosity: "low",
7494
- context_window: 128000,
7495
- max_output_tokens: 128000,
7496
- parallel_tool_calls: true
7497
- }
7498
- },
7499
- {
7500
- id: "gpt-5.5-none",
7501
- handle: "openai/gpt-5.5",
7502
- label: "GPT-5.5",
7503
- description: "OpenAI's most capable model (no reasoning)",
7504
- updateArgs: {
7505
- reasoning_effort: "none",
7506
- verbosity: "medium",
7507
- context_window: 272000,
7508
- max_output_tokens: 128000,
7509
- parallel_tool_calls: true
7510
- }
7511
- },
7512
- {
7513
- id: "gpt-5.5-low",
7514
- handle: "openai/gpt-5.5",
7515
- label: "GPT-5.5",
7516
- description: "OpenAI's most capable model (low reasoning)",
7517
- updateArgs: {
7518
- reasoning_effort: "low",
7519
- verbosity: "medium",
7520
- context_window: 272000,
7521
- max_output_tokens: 128000,
7522
- parallel_tool_calls: true
7523
- }
7524
- },
7525
- {
7526
- id: "gpt-5.5-medium",
7527
- handle: "openai/gpt-5.5",
7528
- label: "GPT-5.5",
7529
- description: "OpenAI's most capable model (med reasoning)",
7530
- updateArgs: {
7531
- reasoning_effort: "medium",
7532
- verbosity: "medium",
7533
- context_window: 272000,
7534
- max_output_tokens: 128000,
7535
- parallel_tool_calls: true
7536
- }
7537
- },
7538
- {
7539
- id: "gpt-5.5-high",
7540
- handle: "openai/gpt-5.5",
7541
- label: "GPT-5.5",
7542
- description: "OpenAI's most capable model (high reasoning)",
7543
- updateArgs: {
7544
- reasoning_effort: "high",
7545
- verbosity: "medium",
7546
- context_window: 272000,
7547
- max_output_tokens: 128000,
7548
- parallel_tool_calls: true
7549
- }
7550
- },
7551
- {
7552
- id: "gpt-5.5-xhigh",
7553
- handle: "openai/gpt-5.5",
7554
- label: "GPT-5.5",
7555
- description: "OpenAI's most capable model (max reasoning)",
7556
- updateArgs: {
7557
- reasoning_effort: "xhigh",
7558
- verbosity: "medium",
7559
- context_window: 272000,
7560
- max_output_tokens: 128000,
7561
- parallel_tool_calls: true
7562
- }
7563
- },
7564
- {
7565
- id: "gpt-5.4-none",
7566
- handle: "openai/gpt-5.4",
7567
- label: "GPT-5.4",
7568
- description: "OpenAI's most capable model (no reasoning)",
7569
- updateArgs: {
7570
- reasoning_effort: "none",
7571
- verbosity: "medium",
7572
- context_window: 272000,
7573
- max_output_tokens: 128000,
7574
- parallel_tool_calls: true
7575
- }
7576
- },
7577
- {
7578
- id: "gpt-5.4-low",
7579
- handle: "openai/gpt-5.4",
7580
- label: "GPT-5.4",
7581
- description: "OpenAI's most capable model (low reasoning)",
7582
- updateArgs: {
7583
- reasoning_effort: "low",
7584
- verbosity: "medium",
7585
- context_window: 272000,
7586
- max_output_tokens: 128000,
7587
- parallel_tool_calls: true
7588
- }
7589
- },
7590
- {
7591
- id: "gpt-5.4-medium",
7592
- handle: "openai/gpt-5.4",
7593
- label: "GPT-5.4",
7594
- description: "OpenAI's most capable model (med reasoning)",
7595
- updateArgs: {
7596
- reasoning_effort: "medium",
7597
- verbosity: "medium",
7598
- context_window: 272000,
7599
- max_output_tokens: 128000,
7600
- parallel_tool_calls: true
7601
- }
7602
- },
7603
- {
7604
- id: "gpt-5.4-high",
7605
- handle: "openai/gpt-5.4",
7606
- label: "GPT-5.4",
7607
- description: "OpenAI's most capable model (high reasoning)",
7608
- updateArgs: {
7609
- reasoning_effort: "high",
7610
- verbosity: "medium",
7611
- context_window: 272000,
7612
- max_output_tokens: 128000,
7613
- parallel_tool_calls: true
7614
- }
7615
- },
7616
- {
7617
- id: "gpt-5.4-xhigh",
7618
- handle: "openai/gpt-5.4",
7619
- label: "GPT-5.4",
7620
- description: "OpenAI's most capable model (max reasoning)",
7621
- updateArgs: {
7622
- reasoning_effort: "xhigh",
7623
- verbosity: "medium",
7624
- context_window: 272000,
7625
- max_output_tokens: 128000,
7626
- parallel_tool_calls: true
7627
- }
7628
- },
7629
- {
7630
- id: "gpt-5.4-fast-none",
7631
- handle: "openai/gpt-5.4-fast",
7632
- label: "GPT-5.4 Fast",
7633
- description: "GPT-5.4 with priority service tier (no reasoning)",
7634
- updateArgs: {
7635
- reasoning_effort: "none",
7636
- verbosity: "medium",
7637
- context_window: 272000,
7638
- max_output_tokens: 128000,
7639
- parallel_tool_calls: true
7640
- }
7641
- },
7642
- {
7643
- id: "gpt-5.4-fast-low",
7644
- handle: "openai/gpt-5.4-fast",
7645
- label: "GPT-5.4 Fast",
7646
- description: "GPT-5.4 with priority service tier (low reasoning)",
7647
- updateArgs: {
7648
- reasoning_effort: "low",
7649
- verbosity: "medium",
7650
- context_window: 272000,
7651
- max_output_tokens: 128000,
7652
- parallel_tool_calls: true
7653
- }
7654
- },
7655
- {
7656
- id: "gpt-5.4-fast-medium",
7657
- handle: "openai/gpt-5.4-fast",
7658
- label: "GPT-5.4 Fast",
7659
- description: "GPT-5.4 with priority service tier (med reasoning)",
7660
- updateArgs: {
7661
- reasoning_effort: "medium",
7662
- verbosity: "medium",
7663
- context_window: 272000,
7664
- max_output_tokens: 128000,
7665
- parallel_tool_calls: true
7666
- }
7667
- },
7668
- {
7669
- id: "gpt-5.4-fast-high",
7670
- handle: "openai/gpt-5.4-fast",
7671
- label: "GPT-5.4 Fast",
7672
- description: "GPT-5.4 with priority service tier (high reasoning)",
7673
- updateArgs: {
7674
- reasoning_effort: "high",
7675
- verbosity: "medium",
7676
- context_window: 272000,
7677
- max_output_tokens: 128000,
7678
- parallel_tool_calls: true
7679
- }
7680
- },
7681
- {
7682
- id: "gpt-5.4-fast-xhigh",
7683
- handle: "openai/gpt-5.4-fast",
7684
- label: "GPT-5.4 Fast",
7685
- description: "GPT-5.4 with priority service tier (max reasoning)",
7686
- updateArgs: {
7687
- reasoning_effort: "xhigh",
7688
- verbosity: "medium",
7689
- context_window: 272000,
7690
- max_output_tokens: 128000,
7691
- parallel_tool_calls: true
7692
- }
7693
- },
7694
- {
7695
- id: "gpt-5.4-mini-none",
7696
- handle: "openai/gpt-5.4-mini",
7697
- label: "GPT-5.4 Mini",
7698
- description: "Fast, efficient GPT-5.4 variant (no reasoning)",
7699
- updateArgs: {
7700
- reasoning_effort: "none",
7701
- verbosity: "low",
7702
- context_window: 272000,
7703
- max_output_tokens: 128000,
7704
- parallel_tool_calls: true
7705
- }
7706
- },
7707
- {
7708
- id: "gpt-5.4-mini-low",
7709
- handle: "openai/gpt-5.4-mini",
7710
- label: "GPT-5.4 Mini",
7711
- description: "Fast, efficient GPT-5.4 variant (low reasoning)",
7712
- updateArgs: {
7713
- reasoning_effort: "low",
7714
- verbosity: "low",
7715
- context_window: 272000,
7716
- max_output_tokens: 128000,
7717
- parallel_tool_calls: true
7718
- }
7719
- },
7720
- {
7721
- id: "gpt-5.4-mini-medium",
7722
- handle: "openai/gpt-5.4-mini",
7723
- label: "GPT-5.4 Mini",
7724
- description: "Fast, efficient GPT-5.4 variant (med reasoning)",
7725
- updateArgs: {
7726
- reasoning_effort: "medium",
7727
- verbosity: "low",
7728
- context_window: 272000,
7729
- max_output_tokens: 128000,
7730
- parallel_tool_calls: true
7731
- }
7732
- },
7733
- {
7734
- id: "gpt-5.4-mini-high",
7735
- handle: "openai/gpt-5.4-mini",
7736
- label: "GPT-5.4 Mini",
7737
- description: "Fast, efficient GPT-5.4 variant (high reasoning)",
7738
- updateArgs: {
7739
- reasoning_effort: "high",
7740
- verbosity: "low",
7741
- context_window: 272000,
7742
- max_output_tokens: 128000,
7743
- parallel_tool_calls: true
7744
- }
7745
- },
7746
- {
7747
- id: "gpt-5.4-mini-xhigh",
7748
- handle: "openai/gpt-5.4-mini",
7749
- label: "GPT-5.4 Mini",
7750
- description: "Fast, efficient GPT-5.4 variant (max reasoning)",
7751
- updateArgs: {
7752
- reasoning_effort: "xhigh",
7753
- verbosity: "low",
7754
- context_window: 272000,
7755
- max_output_tokens: 128000,
7756
- parallel_tool_calls: true
7757
- }
7758
- },
7759
- {
7760
- id: "gpt-5.3-codex-none",
7761
- handle: "openai/gpt-5.3-codex",
7762
- label: "GPT-5.3-Codex",
7763
- description: "GPT-5.3 variant (no reasoning) optimized for coding",
7764
- updateArgs: {
7765
- reasoning_effort: "none",
7766
- verbosity: "medium",
7767
- context_window: 272000,
7768
- max_output_tokens: 128000,
7769
- parallel_tool_calls: true
7770
- }
7771
- },
7772
- {
7773
- id: "gpt-5.3-codex-low",
7774
- handle: "openai/gpt-5.3-codex",
7775
- label: "GPT-5.3-Codex",
7776
- description: "GPT-5.3 variant (low reasoning) optimized for coding",
7777
- updateArgs: {
7778
- reasoning_effort: "low",
7779
- verbosity: "medium",
7780
- context_window: 272000,
7781
- max_output_tokens: 128000,
7782
- parallel_tool_calls: true
7783
- }
7784
- },
7785
- {
7786
- id: "gpt-5.3-codex-medium",
7787
- handle: "openai/gpt-5.3-codex",
7788
- label: "GPT-5.3-Codex",
7789
- description: "GPT-5.3 variant (med reasoning) optimized for coding",
7790
- updateArgs: {
7791
- reasoning_effort: "medium",
7792
- verbosity: "medium",
7793
- context_window: 272000,
7794
- max_output_tokens: 128000,
7795
- parallel_tool_calls: true
7796
- }
7797
- },
7798
- {
7799
- id: "gpt-5.3-codex-high",
7800
- handle: "openai/gpt-5.3-codex",
7801
- label: "GPT-5.3-Codex",
7802
- description: "OpenAI's best coding model (high reasoning)",
7803
- updateArgs: {
7804
- reasoning_effort: "high",
7805
- verbosity: "medium",
7806
- context_window: 272000,
7807
- max_output_tokens: 128000,
7808
- parallel_tool_calls: true
7809
- }
7810
- },
7811
- {
7812
- id: "gpt-5.3-codex-xhigh",
7813
- handle: "openai/gpt-5.3-codex",
7814
- label: "GPT-5.3-Codex",
7815
- description: "GPT-5.3 variant (max reasoning) optimized for coding",
7816
- updateArgs: {
7817
- reasoning_effort: "xhigh",
7818
- verbosity: "medium",
7819
- context_window: 272000,
7820
- max_output_tokens: 128000,
7821
- parallel_tool_calls: true
7822
- }
7823
- },
7824
- {
7825
- id: "grok-4.5",
7826
- handle: "xai/grok-4.5",
7827
- label: "Grok 4.5",
7828
- description: "xAI's Grok 4.5 model via the direct xAI API",
7829
- isFeatured: true,
7830
- updateArgs: {
7831
- context_window: 500000,
7832
- max_output_tokens: 16384,
7833
- parallel_tool_calls: true
7834
- }
7835
- },
7836
- {
7837
- id: "glm-5.2",
7838
- handle: "zai/glm-5.2",
7839
- label: "GLM-5.2",
7840
- description: "zAI's latest reasoning and coding model with 1M context",
7841
- isFeatured: true,
7842
- free: true,
7843
- updateArgs: {
7844
- context_window: 1e6,
7845
- max_output_tokens: 131072,
7846
- parallel_tool_calls: true
7847
- }
7848
- },
7849
- {
7850
- id: "glm-5.1",
7851
- handle: "zai/glm-5.1",
7852
- label: "GLM-5.1",
7853
- description: "zAI's coding model",
7854
- isFeatured: false,
7855
- free: true,
7856
- updateArgs: {
7857
- context_window: 180000,
7858
- max_output_tokens: 16000,
7859
- parallel_tool_calls: true
7860
- }
7861
- },
7862
- {
7863
- id: "minimax-m3",
7864
- handle: "minimax/MiniMax-M3",
7865
- label: "MiniMax M3",
7866
- description: "MiniMax's frontier M-series model for agentic reasoning, tool use, coding, multimodal chat input, and long-context tasks",
7867
- isFeatured: true,
7868
- updateArgs: {
7869
- context_window: 500000,
7870
- parallel_tool_calls: true
7871
- }
7872
- },
7873
- {
7874
- id: "minimax-m2.7",
7875
- handle: "minimax/MiniMax-M2.7",
7876
- label: "MiniMax 2.7",
7877
- description: "MiniMax's M2.7 coding model",
7878
- free: true,
7879
- updateArgs: {
7880
- context_window: 160000,
7881
- max_output_tokens: 64000,
7882
- parallel_tool_calls: true
7883
- }
7884
- },
7885
- {
7886
- id: "kimi-k3",
7887
- handle: "moonshot/kimi-k3",
7888
- label: "Kimi K3",
7889
- description: "Moonshot AI's Kimi K3 model for long-context agentic coding and reasoning tasks",
7890
- isFeatured: true,
7891
- updateArgs: {
7892
- context_window: 1048576,
7893
- max_output_tokens: 131072,
7894
- parallel_tool_calls: true
7895
- }
7896
- },
7897
- {
7898
- id: "gemini-3.1",
7899
- handle: "google_ai/gemini-3.1-pro-preview",
7900
- label: "Gemini 3.1 Pro",
7901
- description: "Google's latest and smartest model",
7902
- isFeatured: true,
7903
- updateArgs: {
7904
- context_window: 180000,
7905
- temperature: 1,
7906
- parallel_tool_calls: true
7907
- }
7908
- },
7909
- {
7910
- id: "gemini-3.5-flash",
7911
- handle: "google_ai/gemini-3.5-flash",
7912
- label: "Gemini 3.5 Flash",
7913
- description: "Google's Gemini 3.5 Flash model",
7914
- updateArgs: {
7915
- context_window: 1048576,
7916
- temperature: 1,
7917
- parallel_tool_calls: true
7918
- }
7919
- },
7920
- {
7921
- id: "gemini-3.6-flash",
7922
- handle: "google_ai/gemini-3.6-flash",
7923
- label: "Gemini 3.6 Flash",
7924
- description: "Google's Gemini 3.6 Flash model",
7925
- isFeatured: true,
7926
- updateArgs: {
7927
- context_window: 1048576,
7928
- temperature: 1,
7929
- parallel_tool_calls: true
7930
- }
7931
- }
7932
- ]
7933
- };
7934
- var models = models_default.models;
7935
- function resolveModel(modelIdentifier) {
7936
- const byId = models.find((m) => m.id === modelIdentifier);
7937
- if (byId)
7938
- return byId.handle;
7939
- const byHandle = models.find((m) => m.handle === modelIdentifier);
7940
- if (byHandle)
7941
- return byHandle.handle;
7942
- if (modelIdentifier.includes("/")) {
7943
- return modelIdentifier;
7944
- }
7945
- return null;
7946
- }
7947
- function getDefaultModel() {
7948
- const autoModel = resolveModel("auto");
7949
- if (autoModel)
7950
- return autoModel;
7951
- const defaultModel = models.find((m) => m.isDefault);
7952
- if (defaultModel)
7953
- return defaultModel.handle;
7954
- const firstModel = models[0];
7955
- if (!firstModel) {
7956
- throw new Error("No models available in models.json");
7957
- }
7958
- return firstModel.handle;
7959
- }
7960
- var PERSONALITY_OPTIONS = [
7961
- {
7962
- id: "memo",
7963
- label: "Letta Code",
7964
- description: "The memory-first agent"
7965
- },
7966
- {
7967
- id: "tutorial",
7968
- label: "Tutor",
7969
- description: "I help with getting started with Letta. I can answer any questions about Letta, and also help you create and configure agents.",
7970
- defaultMemoryFiles: [
7971
- {
7972
- path: "profile.png",
7973
- assetId: "tutor-profile",
7974
- commitMessage: "chore: set default Tutor profile picture"
7975
- }
7976
- ]
7977
- },
7978
- {
7979
- id: "blank",
7980
- label: "Blank",
7981
- description: "Blank starter — you provide the personality"
7982
- },
7983
- {
7984
- id: "linus",
7985
- label: "Linus",
7986
- description: "Code with a stern hand"
7987
- },
7988
- {
7989
- id: "kawaii",
7990
- label: "Letta-Chan",
7991
- description: "sugoi~ (◕‿◕)✨",
7992
- defaultModel: "auto-chat"
7993
- },
7994
- {
7995
- id: "claude",
7996
- label: "Letta Code",
7997
- description: "Vanilla Claude flavors"
7998
- },
7999
- {
8000
- id: "codex",
8001
- label: "Letta Code",
8002
- description: "Vanilla Codex flavors"
8003
- }
8004
- ];
8005
- var PERSONALITY_TAG_PREFIX = "personality:";
8006
- function buildPersonalityTag(personalityId) {
8007
- return `${PERSONALITY_TAG_PREFIX}${personalityId}`;
8008
- }
8009
- function getPersonalityCreationTags(personalityId) {
8010
- return getPersonalityDefaultMemoryFiles(personalityId).length > 0 ? [buildPersonalityTag(personalityId)] : [];
8011
- }
8012
- var ONBOARDING_PERSONALITIES = [
8013
- "tutorial"
8014
- ];
8015
- function supportsOnboardingBlock(personalityId) {
8016
- return ONBOARDING_PERSONALITIES.includes(personalityId);
8017
- }
8018
- var EDITABLE_FRONTMATTER_KEYS = [
8019
- "description",
8020
- "limit",
8021
- "read_only"
8022
- ];
8023
- function ensureTrailingNewline(content) {
8024
- return `${content.trimEnd()}
8025
- `;
8026
- }
8027
- function getPromptTemplate(promptAssetName) {
8028
- const rawPrompt = MEMORY_PROMPTS[promptAssetName];
8029
- if (!rawPrompt) {
8030
- throw new Error(`Missing built-in prompt content for ${promptAssetName}`);
8031
- }
8032
- return parseMdxFrontmatter(rawPrompt);
8033
- }
8034
- function getPromptBody(promptAssetName) {
8035
- const { body } = getPromptTemplate(promptAssetName);
8036
- if (!body.trim()) {
8037
- throw new Error(`${promptAssetName} has empty body content`);
8038
- }
8039
- return ensureTrailingNewline(body);
8040
- }
8041
- function getEditablePromptFrontmatter(promptAssetName) {
8042
- const { frontmatter } = getPromptTemplate(promptAssetName);
8043
- return Object.fromEntries(Object.entries(frontmatter).filter(([key]) => EDITABLE_FRONTMATTER_KEYS.includes(key)));
8044
- }
8045
- function getSystemPromptById(systemPromptId) {
8046
- const prompt = SYSTEM_PROMPTS.find((candidate) => candidate.id === systemPromptId);
8047
- if (!prompt || !prompt.content.trim()) {
8048
- throw new Error(`Missing built-in prompt content for ${systemPromptId}`);
8049
- }
8050
- return prompt.content;
8051
- }
8052
- function getPersonalityOption(personalityId) {
8053
- const option = PERSONALITY_OPTIONS.find((candidate) => candidate.id === personalityId);
8054
- if (!option) {
8055
- throw new Error(`Unknown personality: ${personalityId}`);
8056
- }
8057
- return option;
8058
- }
8059
- function getPersonalityDefaultMemoryFiles(personalityId) {
8060
- return getPersonalityOption(personalityId).defaultMemoryFiles ?? [];
8061
- }
8062
- function getPersonalityContent(personalityId) {
8063
- if (personalityId === "memo") {
8064
- return getPromptBody("persona_memo.mdx");
8065
- }
8066
- if (personalityId === "tutorial") {
8067
- return getPromptBody("persona_tutorial.mdx");
8068
- }
8069
- if (personalityId === "blank") {
8070
- return getPromptBody("persona_blank.mdx");
8071
- }
8072
- if (personalityId === "kawaii") {
8073
- return getPromptBody("persona_kawaii.mdx");
8074
- }
8075
- if (personalityId === "codex") {
8076
- return ensureTrailingNewline(getSystemPromptById("source-codex"));
8077
- }
8078
- if (personalityId === "linus") {
8079
- return getPromptBody("persona_linus.mdx");
8080
- }
8081
- return ensureTrailingNewline(getSystemPromptById("source-claude"));
8082
- }
8083
- function getDefaultHumanContent() {
8084
- return getPromptBody("human.mdx");
8085
- }
8086
- function getPersonalityHumanContent(personalityId) {
8087
- if (personalityId === "memo") {
8088
- return getPromptBody("human_memo.mdx");
8089
- }
8090
- if (personalityId === "tutorial") {
8091
- return getPromptBody("human_tutorial.mdx");
8092
- }
8093
- if (personalityId === "linus") {
8094
- return getPromptBody("human_linus.mdx");
8095
- }
8096
- if (personalityId === "kawaii") {
8097
- return getPromptBody("human_kawaii.mdx");
8098
- }
8099
- if (personalityId === "blank") {
8100
- return getDefaultHumanContent();
8101
- }
8102
- return getDefaultHumanContent();
8103
- }
8104
- function getPersonalityBlockDefinitions(personalityId, environment = "cloud") {
8105
- const personaTemplatePromptAssetName = personalityId === "memo" ? "persona_memo.mdx" : personalityId === "tutorial" ? "persona_tutorial.mdx" : personalityId === "blank" ? "persona_blank.mdx" : personalityId === "kawaii" ? "persona_kawaii.mdx" : personalityId === "linus" ? "persona_linus.mdx" : "persona.mdx";
8106
- const humanTemplatePromptAssetName = personalityId === "memo" ? "human_memo.mdx" : personalityId === "tutorial" ? "human_tutorial.mdx" : personalityId === "kawaii" ? "human_kawaii.mdx" : personalityId === "linus" ? "human_linus.mdx" : "human.mdx";
8107
- const onboardingTemplatePromptAssetName = environment === "local" ? "onboarding_local.mdx" : "onboarding.mdx";
8108
- return {
8109
- persona: {
8110
- value: getPersonalityContent(personalityId),
8111
- description: getEditablePromptFrontmatter(personaTemplatePromptAssetName).description,
8112
- templatePromptAssetName: personaTemplatePromptAssetName
8113
- },
8114
- human: {
8115
- value: getPersonalityHumanContent(personalityId),
8116
- description: getEditablePromptFrontmatter(humanTemplatePromptAssetName).description,
8117
- templatePromptAssetName: humanTemplatePromptAssetName
8118
- },
8119
- ...supportsOnboardingBlock(personalityId) ? {
8120
- onboarding: {
8121
- value: getPromptBody(onboardingTemplatePromptAssetName),
8122
- description: getEditablePromptFrontmatter(onboardingTemplatePromptAssetName).description,
8123
- templatePromptAssetName: onboardingTemplatePromptAssetName
5736
+ ...supportsOnboardingBlock(personalityId) ? {
5737
+ onboarding: {
5738
+ value: getPromptBody(onboardingTemplatePromptAssetName),
5739
+ description: getEditablePromptFrontmatter(onboardingTemplatePromptAssetName).description,
5740
+ templatePromptAssetName: onboardingTemplatePromptAssetName
8124
5741
  }
8125
5742
  } : {}
8126
5743
  };
@@ -8239,8 +5856,15 @@ function assertCreateAgentOptionsSupported(options) {
8239
5856
  throw new Error("App-server createAgent() does not yet support dreaming.behavior overrides.");
8240
5857
  }
8241
5858
  }
8242
- async function createAgentBody(options) {
5859
+ async function createAgentBody(options, resolvedSkills) {
8243
5860
  assertCreateAgentOptionsSupported(options);
5861
+ const skills = resolvedSkills ?? await resolveSkillItems(options.skills);
5862
+ if (skills.length > 0 && options.memfs === false) {
5863
+ throw new Error("createAgent() skills require the memory filesystem; remove memfs: false.");
5864
+ }
5865
+ if (resolvedSkills === undefined && skillsHaveSupportFiles(skills)) {
5866
+ throw new Error("This backend does not yet support skill support files (scripts/, " + "references/). Use the Cloud backend, or pass a skill with only SKILL.md.");
5867
+ }
8244
5868
  let system;
8245
5869
  if (options.systemPrompt !== undefined) {
8246
5870
  if (typeof options.systemPrompt !== "string" || isPresetSystemPrompt(options.systemPrompt)) {
@@ -8266,7 +5890,14 @@ async function createAgentBody(options) {
8266
5890
  if (options.human !== undefined) {
8267
5891
  memoryBlocks.push({ label: "human", value: options.human });
8268
5892
  }
8269
- const hasMemoryConfiguration = options.memory !== undefined || options.persona !== undefined || options.human !== undefined;
5893
+ for (const skill of skills) {
5894
+ memoryBlocks.push({
5895
+ label: `skills/${skill.name}`,
5896
+ value: skill.instructions,
5897
+ description: skill.description
5898
+ });
5899
+ }
5900
+ const hasMemoryConfiguration = options.memory !== undefined || options.persona !== undefined || options.human !== undefined || skills.length > 0;
8270
5901
  return buildCreateAgentRequest({
8271
5902
  personalityId: options.personality,
8272
5903
  name: options.name,
@@ -9251,11 +6882,12 @@ class RemoteTurnCoordinator {
9251
6882
  });
9252
6883
  const success = turn.success !== undefined ? turn.success && !approvalConflict && !isFailureStopReason(stopReason) : !approvalConflict && !isFailureStopReason(stopReason);
9253
6884
  const errorCode = approvalConflict ? "approval_conflict" : turn.errorCode ?? toSdkErrorCode(stopReason);
6885
+ const publicError = errorCode && errorCode !== "error" ? errorCode : turn.detail ?? stopReason ?? "error";
9254
6886
  return {
9255
6887
  type: "result",
9256
6888
  success,
9257
6889
  result: success ? tracker?.assistantText || undefined : undefined,
9258
- error: success ? undefined : errorCode ?? stopReason ?? "error",
6890
+ error: success ? undefined : publicError,
9259
6891
  errorCode: success ? undefined : errorCode ?? "error",
9260
6892
  approvalConflict: approvalConflict || undefined,
9261
6893
  recoverable: approvalConflict ? true : success ? undefined : turn.recoverable ?? false,
@@ -9359,7 +6991,7 @@ class RemoteClientSessionCore {
9359
6991
  this.runtime = init.runtime;
9360
6992
  this._agentId = init.runtime.agent_id;
9361
6993
  this._conversationId = init.runtime.conversation_id;
9362
- this._sessionId = `${init.runtime.agent_id}:${init.runtime.conversation_id}`;
6994
+ this._sessionId = init.runtime.agent_id ? `${init.runtime.agent_id}:${init.runtime.conversation_id}` : init.runtime.conversation_id;
9363
6995
  this._modelSettings = init.modelSettings ?? null;
9364
6996
  this._model = typeof init.model === "string" ? init.model : typeof this._modelSettings?.model === "string" ? this._modelSettings.model : "";
9365
6997
  this.toolNames = init.tools;
@@ -10334,8 +7966,8 @@ class AppServerSession extends RemoteClientSessionCore {
10334
7966
  return {
10335
7967
  controller: new AppServerRuntimeController(client, this.remoteOptions, allowedTools, clientToolset),
10336
7968
  runtime: response.runtime,
10337
- model: typeof response.agent?.model === "string" ? response.agent.model : "",
10338
- modelSettings: objectRecord(response.agent?.model_settings) ?? null,
7969
+ model: typeof response.agent?.model === "string" ? response.agent.model : typeof response.conversation?.model === "string" ? response.conversation.model : "",
7970
+ modelSettings: objectRecord(response.agent?.model_settings) ?? objectRecord(response.conversation?.model_settings) ?? null,
10339
7971
  ...availableTools !== undefined ? { tools: availableTools } : {},
10340
7972
  ...skillSources !== undefined ? { skillSources: [...skillSources] } : {}
10341
7973
  };
@@ -10416,6 +8048,24 @@ class AppServerSession extends RemoteClientSessionCore {
10416
8048
  };
10417
8049
  return command;
10418
8050
  }
8051
+ if (this.mode.kind === "agent-free") {
8052
+ if (this.mode.createConversation) {
8053
+ const create = this.mode.createConversation;
8054
+ command.create_conversation = {
8055
+ body: {
8056
+ model: create.model,
8057
+ system: create.system,
8058
+ ...create.modelSettings !== undefined ? { model_settings: create.modelSettings } : {},
8059
+ ...create.contextWindowLimit !== undefined ? { context_window_limit: create.contextWindowLimit } : {}
8060
+ }
8061
+ };
8062
+ } else if (this.mode.conversationId) {
8063
+ command.conversation_id = this.mode.conversationId;
8064
+ } else {
8065
+ throw new Error("Agent-free sessions require a conversation to create or resume.");
8066
+ }
8067
+ return command;
8068
+ }
10419
8069
  if (this.mode.agentId) {
10420
8070
  command.agent_id = this.mode.agentId;
10421
8071
  if (this.mode.newConversation) {
@@ -10481,6 +8131,20 @@ function cloudModelEntry(raw) {
10481
8131
  function isNotFound(error) {
10482
8132
  return error instanceof APIError && error.status === 404;
10483
8133
  }
8134
+ function asEnqueueMessageResult(body) {
8135
+ if (!body || typeof body !== "object" || Array.isArray(body)) {
8136
+ throw new Error("Cloud enqueue message response was not an object.");
8137
+ }
8138
+ const response = body;
8139
+ if (typeof response.client_message_id !== "string" || typeof response.workflow_id !== "string" || typeof response.super_run_id !== "string") {
8140
+ throw new Error("Cloud enqueue message response did not include client_message_id, workflow_id, and super_run_id.");
8141
+ }
8142
+ return {
8143
+ clientMessageId: response.client_message_id,
8144
+ workflowId: response.workflow_id,
8145
+ superRunId: response.super_run_id
8146
+ };
8147
+ }
10484
8148
  function toOrderRelativeCursors(query) {
10485
8149
  if ((query.order ?? "desc") !== "desc")
10486
8150
  return query;
@@ -10572,6 +8236,28 @@ class CloudManagementTransport {
10572
8236
  const page = await this.client.conversations.messages.list(conversationId, toOrderRelativeCursors(query));
10573
8237
  return { messages: page.items };
10574
8238
  }
8239
+ async enqueueConversationMessage(conversationId, message, options) {
8240
+ const clientMessageId = options.clientMessageId ?? crypto.randomUUID();
8241
+ const settings = {
8242
+ ...options.workingDirectory !== undefined ? { working_directory: options.workingDirectory } : {},
8243
+ ...options.permissionMode !== undefined ? { permission_mode: options.permissionMode } : {}
8244
+ };
8245
+ const body = await this.client.post(`/v1/conversations/${encodeURIComponent(conversationId)}/messages/enqueue`, {
8246
+ body: {
8247
+ ...options.agentId !== undefined ? { agent_id: options.agentId } : {},
8248
+ messages: [
8249
+ {
8250
+ role: "user",
8251
+ content: message,
8252
+ client_message_id: clientMessageId
8253
+ }
8254
+ ],
8255
+ client_message_id: clientMessageId,
8256
+ ...Object.keys(settings).length > 0 ? { settings } : {}
8257
+ }
8258
+ });
8259
+ return asEnqueueMessageResult(body);
8260
+ }
10575
8261
  }
10576
8262
 
10577
8263
  // src/remote.ts
@@ -11099,7 +8785,8 @@ function buildCloudStatusWebSocketUrl(params) {
11099
8785
  throw new Error(`Unsupported cloud apiBaseUrl protocol: ${base.protocol}`);
11100
8786
  }
11101
8787
  base.pathname = `/v1/environments/${encodeURIComponent(params.connectionId)}/status/ws`;
11102
- base.searchParams.set("agentId", params.agentId);
8788
+ if (params.agentId)
8789
+ base.searchParams.set("agentId", params.agentId);
11103
8790
  base.searchParams.set("conversationId", params.conversationId);
11104
8791
  base.searchParams.set("channel", "stream");
11105
8792
  if (params.authMode === "query" && params.apiKey) {
@@ -11130,12 +8817,23 @@ function externalToolsByName(tools) {
11130
8817
  }
11131
8818
  return result;
11132
8819
  }
11133
- async function createCloudAgent(client, agentOptions) {
11134
- const body = await createAgentBody(agentOptions);
8820
+ async function createCloudAgent(client, agentOptions, pushSkillSupportFiles) {
8821
+ const skills = await resolveSkillItems(agentOptions.skills);
8822
+ const hasSupportFiles = skillsHaveSupportFiles(skills);
8823
+ if (hasSupportFiles && pushSkillSupportFiles === undefined) {
8824
+ throw new Error("Skill support files (scripts/, references/) require the Node.js " + "package root; the portable client seeds SKILL.md-only skills.");
8825
+ }
8826
+ const body = await createAgentBody(agentOptions, skills);
11135
8827
  const agent = await client.agents.create(body);
11136
8828
  if (typeof agent.id !== "string" || agent.id.length === 0) {
11137
8829
  throw new Error("Cloud create agent response did not include an agent id.");
11138
8830
  }
8831
+ if (hasSupportFiles && pushSkillSupportFiles) {
8832
+ if (typeof client.apiKey !== "string" || client.apiKey.length === 0) {
8833
+ throw new Error(`Agent ${agent.id} was created, but skill support files need an API ` + "key to push to the agent's memory repo and none is configured.");
8834
+ }
8835
+ await pushSkillSupportFiles({ apiBaseUrl: client.baseURL, apiKey: client.apiKey, agentId: agent.id }, skills);
8836
+ }
11139
8837
  return agent.id;
11140
8838
  }
11141
8839
  function assertCloudSessionOptionsSupported(action, options) {
@@ -11185,7 +8883,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11185
8883
  this.sandboxLifecycleClosing = false;
11186
8884
  const resolved = await this.resolveRuntime();
11187
8885
  const connection = await this.resolveConnectionForRuntime(resolved.runtime).catch(async (error) => {
11188
- await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8886
+ if (resolved.runtime.agent_id) {
8887
+ await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8888
+ }
11189
8889
  throw error;
11190
8890
  });
11191
8891
  this.connectionId = connection.connectionId;
@@ -11202,7 +8902,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11202
8902
  } catch (error) {
11203
8903
  await this.closeMcpBridge();
11204
8904
  await this.cleanupManagedSandbox();
11205
- await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8905
+ if (resolved.runtime.agent_id) {
8906
+ await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8907
+ }
11206
8908
  throw error;
11207
8909
  }
11208
8910
  }
@@ -11226,8 +8928,8 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11226
8928
  requestTimeoutMs: this.cloudOptions.requestTimeoutMs ?? DEFAULT_TURN_TIMEOUT_MS
11227
8929
  }, allowedTools, clientToolset),
11228
8930
  runtime: response.runtime,
11229
- model: typeof response.agent?.model === "string" ? response.agent.model : "",
11230
- modelSettings: response.agent?.model_settings ?? null,
8931
+ model: typeof response.agent?.model === "string" ? response.agent.model : typeof response.conversation?.model === "string" ? response.conversation.model : "",
8932
+ modelSettings: response.agent?.model_settings ?? response.conversation?.model_settings ?? null,
11231
8933
  ...availableTools !== undefined ? { tools: availableTools } : {},
11232
8934
  ...skillSources !== undefined ? { skillSources: [...skillSources] } : {}
11233
8935
  };
@@ -11340,11 +9042,12 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11340
9042
  name: SDK_AGENT_ORIGIN,
11341
9043
  title: "Letta Agent SDK"
11342
9044
  },
11343
- agent_id: runtime.agent_id,
11344
9045
  conversation_id: runtime.conversation_id,
11345
9046
  recover_approvals: false,
11346
9047
  force_device_status: true
11347
9048
  };
9049
+ if (runtime.agent_id)
9050
+ command.agent_id = runtime.agent_id;
11348
9051
  const mode = mapPermissionMode(options.permissionMode);
11349
9052
  if (mode)
11350
9053
  command.mode = mode;
@@ -11415,6 +9118,17 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11415
9118
  return bridge?.close() ?? Promise.resolve();
11416
9119
  }
11417
9120
  async resolveRuntime() {
9121
+ if (this.cloudMode.kind === "agent-free") {
9122
+ if (!this.cloudMode.conversationId) {
9123
+ throw new Error("Cloud agent-free sessions require a conversation id.");
9124
+ }
9125
+ return {
9126
+ runtime: {
9127
+ agent_id: null,
9128
+ conversation_id: this.cloudMode.conversationId
9129
+ }
9130
+ };
9131
+ }
11418
9132
  let agentId = this.cloudMode.agentId;
11419
9133
  let conversationId = this.cloudMode.conversationId;
11420
9134
  if (!agentId && conversationId) {
@@ -11560,6 +9274,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11560
9274
  return { connectionId: resolved.connectionId };
11561
9275
  }
11562
9276
  async createManagedSandboxConnection(runtime) {
9277
+ if (!runtime.agent_id) {
9278
+ throw new Error("Agent-free queries require an explicit Cloud computer; managed sandboxes are agent-scoped.");
9279
+ }
11563
9280
  const conversationId = runtime.conversation_id && runtime.conversation_id !== "default" ? runtime.conversation_id : undefined;
11564
9281
  const sandbox = await this.createManagedSandbox(runtime.agent_id, conversationId);
11565
9282
  this.managedSandbox = sandbox;
@@ -11845,10 +9562,53 @@ function createConversationsClient(transport) {
11845
9562
  }
11846
9563
  return await transport().forkConversation(sourceConversationId, conversationForkQuery(options));
11847
9564
  },
11848
- listMessages: (conversationId, options = {}) => transport().listConversationMessages(conversationId, conversationMessagesQuery(options))
9565
+ listMessages: (conversationId, options = {}) => transport().listConversationMessages(conversationId, conversationMessagesQuery(options)),
9566
+ enqueue: async (conversationId, message, options = {}) => {
9567
+ assertNonEmptyId2(conversationId, "conversation id");
9568
+ if (conversationId.trim() === "default" && !options.agentId) {
9569
+ throw new Error('enqueue("default", ...) requires options.agentId to identify the agent.');
9570
+ }
9571
+ if (options.agentId !== undefined) {
9572
+ assertNonEmptyId2(options.agentId, "agent id");
9573
+ }
9574
+ if (options.clientMessageId !== undefined) {
9575
+ assertNonEmptyId2(options.clientMessageId, "client message id");
9576
+ }
9577
+ return await transport().enqueueConversationMessage(conversationId, message, options);
9578
+ }
11849
9579
  };
11850
9580
  }
11851
9581
 
9582
+ // src/query.ts
9583
+ function createQuery(createSession, params) {
9584
+ let session = null;
9585
+ let closed = false;
9586
+ const iterator = async function* runQuery() {
9587
+ try {
9588
+ session = await createSession(params.options);
9589
+ if (closed)
9590
+ return;
9591
+ await session.send(params.prompt);
9592
+ yield* session.stream();
9593
+ } finally {
9594
+ closed = true;
9595
+ session?.close();
9596
+ }
9597
+ }();
9598
+ return Object.assign(iterator, {
9599
+ async interrupt() {
9600
+ await session?.abort();
9601
+ },
9602
+ close() {
9603
+ if (closed)
9604
+ return;
9605
+ closed = true;
9606
+ session?.close();
9607
+ iterator.return();
9608
+ }
9609
+ });
9610
+ }
9611
+
11852
9612
  // src/validation.ts
11853
9613
  var VALID_SKILL_SOURCES = [
11854
9614
  "bundled",
@@ -12074,6 +9834,24 @@ function hasCreateAgentEnvironment(options) {
12074
9834
  function looksLikeConversationId(id) {
12075
9835
  return id.startsWith("conv-") || id.startsWith("local-conv-");
12076
9836
  }
9837
+ function agentFreeSessionOptions(options) {
9838
+ const {
9839
+ system: _system,
9840
+ modelSettings: _modelSettings,
9841
+ contextWindowLimit: _contextWindowLimit,
9842
+ ...sessionOptions
9843
+ } = options;
9844
+ return sessionOptions;
9845
+ }
9846
+ function validateAgentFreeQueryOptions(options) {
9847
+ if (typeof options.model !== "string" || options.model.length === 0) {
9848
+ throw new Error("query() requires a non-empty model.");
9849
+ }
9850
+ if (typeof options.system !== "string") {
9851
+ throw new Error("query() requires a system prompt.");
9852
+ }
9853
+ validateCreateSessionOptions(agentFreeSessionOptions(options));
9854
+ }
12077
9855
 
12078
9856
  class LettaAgentClientBase {
12079
9857
  backend;
@@ -12148,6 +9926,11 @@ class LettaAgentClientBase {
12148
9926
  throw new Error("createAgent() does not accept environment. Set a client default or pass environment to resumeSession()/createSession().");
12149
9927
  }
12150
9928
  validateCreateAgentOptions(options);
9929
+ if (options.skills !== undefined && options.skills.length > 0) {
9930
+ const nodeSupport = this.skillNodeSupport();
9931
+ const skills = await resolveSkillItems(options.skills, nodeSupport?.loadSkillDirectory);
9932
+ options = { ...options, skills };
9933
+ }
12151
9934
  if (this.backend === "remote") {
12152
9935
  const session = new AppServerSession(this.appServerSessionOptions(), {
12153
9936
  kind: "create-agent",
@@ -12155,10 +9938,13 @@ class LettaAgentClientBase {
12155
9938
  });
12156
9939
  const initMsg = await session.initialize();
12157
9940
  session.close();
9941
+ if (!initMsg.agentId) {
9942
+ throw new Error("App Server agent creation did not return an agent id.");
9943
+ }
12158
9944
  return initMsg.agentId;
12159
9945
  }
12160
9946
  if (this.backend === "cloud") {
12161
- return createCloudAgent(this.getCloudClient(), options);
9947
+ return createCloudAgent(this.getCloudClient(), options, this.skillNodeSupport()?.pushSkillSupportFiles);
12162
9948
  }
12163
9949
  return this.createLocalAgent(options);
12164
9950
  }
@@ -12231,6 +10017,50 @@ class LettaAgentClientBase {
12231
10017
  session.close();
12232
10018
  }
12233
10019
  }
10020
+ query(params) {
10021
+ validateAgentFreeQueryOptions(params.options);
10022
+ return createQuery((options) => this.createAgentFreeSession(options), params);
10023
+ }
10024
+ async createAgentFreeSession(options) {
10025
+ validateAgentFreeQueryOptions(options);
10026
+ const sessionOptions = agentFreeSessionOptions(options);
10027
+ this.assertSessionBackend("query", sessionOptions);
10028
+ if (this.backend === "remote") {
10029
+ return new AppServerSession(this.appServerSessionOptions(), {
10030
+ kind: "agent-free",
10031
+ createConversation: {
10032
+ model: options.model,
10033
+ system: options.system,
10034
+ ...options.modelSettings !== undefined ? { modelSettings: options.modelSettings } : {},
10035
+ ...options.contextWindowLimit !== undefined ? { contextWindowLimit: options.contextWindowLimit } : {}
10036
+ },
10037
+ options: sessionOptions
10038
+ });
10039
+ }
10040
+ if (this.backend === "cloud") {
10041
+ const computer = options.computer ?? options.environment ?? this.computer;
10042
+ if (computer === undefined) {
10043
+ throw new Error("Cloud query() requires an explicit computer; managed sandboxes are agent-scoped.");
10044
+ }
10045
+ const conversation = await this.getCloudClient().post("/v1/conversations/ephemeral", {
10046
+ body: {
10047
+ model: options.model,
10048
+ system: options.system,
10049
+ ...options.modelSettings !== undefined ? { model_settings: options.modelSettings } : {},
10050
+ ...options.contextWindowLimit !== undefined ? { context_window_limit: options.contextWindowLimit } : {}
10051
+ }
10052
+ });
10053
+ if (!conversation || typeof conversation !== "object" || typeof conversation.id !== "string") {
10054
+ throw new Error("Cloud ephemeral conversation response did not include a conversation id.");
10055
+ }
10056
+ return new CloudEnvironmentSession(this.cloudOptions(), {
10057
+ kind: "agent-free",
10058
+ conversationId: conversation.id,
10059
+ options: sessionOptions
10060
+ }, this.getCloudClient());
10061
+ }
10062
+ return this.createLocalAgentFreeSession(options, sessionOptions);
10063
+ }
12234
10064
  assertSessionBackend(action, options) {
12235
10065
  if (options.computer !== undefined && options.environment !== undefined) {
12236
10066
  throw new Error(`${action}() cannot specify both computer and deprecated environment.`);
@@ -12295,9 +10125,15 @@ class LettaAgentClientBase {
12295
10125
  createLocalAgent(_options) {
12296
10126
  throw this.localBackendUnavailableError();
12297
10127
  }
10128
+ skillNodeSupport() {
10129
+ return;
10130
+ }
12298
10131
  createLocalSession(_agentId, _options) {
12299
10132
  throw this.localBackendUnavailableError();
12300
10133
  }
10134
+ createLocalAgentFreeSession(_queryOptions, _sessionOptions) {
10135
+ throw this.localBackendUnavailableError();
10136
+ }
12301
10137
  resumeLocalSession(_id, _options) {
12302
10138
  throw this.localBackendUnavailableError();
12303
10139
  }
@@ -12894,4 +10730,4 @@ export {
12894
10730
  CloudManagedSandboxExpiredError
12895
10731
  };
12896
10732
 
12897
- //# debugId=02750F72F2B016D564756E2164756E21
10733
+ //# debugId=1BC83E9AF5BBAD2864756E2164756E21