@nodaro/shared 1.17.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodaro/shared",
3
- "version": "1.17.0",
3
+ "version": "1.18.0",
4
4
  "description": "Shared types, model catalog, wire contracts, and structural vocabularies for the Nodaro platform and SDK.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -25,7 +25,7 @@ import { PIPELINE_PINNABLE_SCRIPT_LLMS } from "../pipeline-types.js"
25
25
  // ---------------------------------------------------------------------------
26
26
  describe("LLM_MODELS data integrity", () => {
27
27
  it("should have exactly 15 models", () => {
28
- expect(LLM_MODELS).toHaveLength(15)
28
+ expect(LLM_MODELS).toHaveLength(16)
29
29
  })
30
30
 
31
31
  it("each model has all required fields", () => {
@@ -60,14 +60,14 @@ describe("LLM_MODELS data integrity", () => {
60
60
  expect(new Set(ids).size).toBe(ids.length)
61
61
  })
62
62
 
63
- it("has 4 economy, 4 standard, 7 premium models", () => {
63
+ it("has 4 economy, 4 standard, 8 premium models", () => {
64
64
  const tierCounts: Record<LlmTier, number> = { economy: 0, standard: 0, premium: 0 }
65
65
  for (const model of LLM_MODELS) {
66
66
  tierCounts[model.tier]++
67
67
  }
68
68
  expect(tierCounts.economy).toBe(4)
69
69
  expect(tierCounts.standard).toBe(4)
70
- expect(tierCounts.premium).toBe(7)
70
+ expect(tierCounts.premium).toBe(8)
71
71
  })
72
72
 
73
73
  it("all three kieFormats are represented", () => {
@@ -121,6 +121,7 @@ describe("LLM_MODEL_IDS", () => {
121
121
  "gpt-5.6-sol",
122
122
  "claude-sonnet-5",
123
123
  "claude-opus-4.8",
124
+ "claude-opus-5",
124
125
  "claude-fable-5",
125
126
  ]
126
127
  expect(LLM_MODEL_IDS).toEqual(expected)
@@ -399,11 +400,11 @@ describe("LLM_FEATURE_DEFAULTS", () => {
399
400
  expect(getLlmTier(LLM_FEATURE_DEFAULTS["ai-writer"])).toBe("standard")
400
401
  })
401
402
 
402
- it('"describe-to-picker" defaults to "claude-opus-4.7" (premium vision)', () => {
403
- expect(LLM_FEATURE_DEFAULTS["describe-to-picker"]).toBe("claude-opus-4.7")
403
+ it('"describe-to-picker" defaults to "claude-opus-5" (premium vision)', () => {
404
+ expect(LLM_FEATURE_DEFAULTS["describe-to-picker"]).toBe("claude-opus-5")
404
405
  expect(getLlmTier(LLM_FEATURE_DEFAULTS["describe-to-picker"])).toBe("premium")
405
406
  // The default MUST be an accepted analyzer model (vision + structured output).
406
- expect(STRUCTURED_VISION_MODELS.map((m) => m.id)).toContain("claude-opus-4.7")
407
+ expect(STRUCTURED_VISION_MODELS.map((m) => m.id)).toContain("claude-opus-5")
407
408
  })
408
409
 
409
410
  it('"generate-script" defaults to "gemini-3.6-flash" (economy)', () => {
@@ -465,6 +466,7 @@ describe("STRUCTURED_VISION_MODELS", () => {
465
466
  "gemini-3.1-pro",
466
467
  "claude-sonnet-5",
467
468
  "claude-opus-4.8",
469
+ "claude-opus-5",
468
470
  "claude-fable-5",
469
471
  // responses-format GPTs — KIE text.format json_schema live-verified
470
472
  // 2026-07-14 (text AND vision inputs).
package/src/llm-models.ts CHANGED
@@ -245,7 +245,7 @@ export const LLM_MODELS: readonly LlmModelDef[] = [
245
245
  {
246
246
  id: "claude-opus-4.8",
247
247
  displayName: "Claude Opus 4.8",
248
- desc: "Most capable Claude, long-horizon work",
248
+ desc: "Previous-gen Opus, long-horizon work",
249
249
  tier: "premium",
250
250
  kieFormat: "messages",
251
251
  kieSlugOrModel: "claude-opus-4-8",
@@ -258,6 +258,25 @@ export const LLM_MODELS: readonly LlmModelDef[] = [
258
258
  supportsTemperature: false,
259
259
  preferKie: true,
260
260
  },
261
+ {
262
+ id: "claude-opus-5",
263
+ displayName: "Claude Opus 5",
264
+ desc: "Latest Opus, deepest agentic reasoning",
265
+ tier: "premium",
266
+ kieFormat: "messages",
267
+ // KIE serves Opus 5 on the Claude-native messages dialect under the plain
268
+ // id (docs.kie.ai/market/claude/claude-opus-5.md) — same path shape as
269
+ // claude-opus-4-8 / claude-fable-5.
270
+ kieSlugOrModel: "claude-opus-5",
271
+ vendor: "anthropic",
272
+ structuredOutputMode: "anthropic-tool",
273
+ supportsImages: true,
274
+ maxOutputTokens: 16384,
275
+ directFallbackModel: "claude-opus-5",
276
+ reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
277
+ supportsTemperature: false,
278
+ preferKie: true,
279
+ },
261
280
  {
262
281
  id: "claude-fable-5",
263
282
  displayName: "Claude Fable 5",
@@ -323,7 +342,7 @@ export const LLM_FEATURE_DEFAULTS: Record<LlmFeature, string> = {
323
342
  "lottie-overlay": "claude-sonnet-4.6",
324
343
  "3d-title": "claude-sonnet-4.6",
325
344
  "image-to-text": "claude-sonnet-4.6",
326
- "describe-to-picker": "claude-opus-4.7",
345
+ "describe-to-picker": "claude-opus-5",
327
346
  "qa-check": "gemini-3.6-flash",
328
347
  "generate-script": "gemini-3.6-flash",
329
348
  "translate": "gemini-3.6-flash",
@@ -354,6 +373,7 @@ export const LLM_MODALITY_CAPS: Record<string, { image: boolean; video: boolean;
354
373
  "gpt-5.6-sol": { image: true, video: false, audio: false },
355
374
  "claude-sonnet-5": { image: true, video: false, audio: false },
356
375
  "claude-opus-4.8": { image: true, video: false, audio: false },
376
+ "claude-opus-5": { image: true, video: false, audio: false },
357
377
  "claude-fable-5": { image: true, video: false, audio: false },
358
378
  }
359
379
 
@@ -84,6 +84,7 @@ export const PIPELINE_PINNABLE_SCRIPT_LLMS = [
84
84
  "claude-haiku-4-5",
85
85
  "claude-sonnet-4-6",
86
86
  "claude-opus-4-7",
87
+ "claude-opus-5",
87
88
  ] as const
88
89
  export type PipelinePinnableScriptLlm = (typeof PIPELINE_PINNABLE_SCRIPT_LLMS)[number]
89
90