@runtypelabs/cli 2.25.0 → 2.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +250 -19
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -15566,7 +15566,7 @@ function resolveFallback(parsed, context, tracking) {
15566
15566
  }
15567
15567
  var templateEngine = new SimpleTemplateEngine();
15568
15568
 
15569
- // ../shared/dist/chunk-CNO2UJFO.mjs
15569
+ // ../shared/dist/chunk-54HZCG2Y.mjs
15570
15570
  var tokensSchema = external_exports.object({ input: external_exports.number(), output: external_exports.number() });
15571
15571
  var wireStopReasonSchema = external_exports.enum([
15572
15572
  "end_turn",
@@ -15916,12 +15916,15 @@ var unifiedAwaitEventSchema = external_exports.object({
15916
15916
  origin: external_exports.enum(["webmcp", "sdk"]).optional(),
15917
15917
  pageOrigin: external_exports.string().optional(),
15918
15918
  // Discriminates an AUTO-RESUMING durable pause (`crawl_pending` /
15919
- // `durable_poll`, resumed server-side by the crawl / wait-until
15920
- // Workflow) from a CLIENT-RESOLVABLE local-tool / WebMCP await (absent), so a
15921
- // streaming consumer does not render a "resume" prompt for a pause that
15922
- // resumes itself. Mirrors the JSON `pausedReason` discriminator
15923
- // (execution-pipeline.ts); the server-resumed pauses carry `crawlId` /
15924
- // `stepId` instead of the tool fields. UX context; never a control signal.
15919
+ // `durable_poll`, resumed server-side by the crawl / wait-until Workflow;
15920
+ // `detached`, a Claude Managed watch-budget detach — the stream ends but
15921
+ // the execution continues server-side, so the consumer should hold its
15922
+ // reconnect handle and render "still working") from a CLIENT-RESOLVABLE
15923
+ // local-tool / WebMCP await (absent), so a streaming consumer does not
15924
+ // render a "resume" prompt for a pause that resumes itself. Mirrors the
15925
+ // JSON `pausedReason` discriminator (execution-pipeline.ts); the
15926
+ // server-resumed pauses carry `crawlId` / `stepId` instead of the tool
15927
+ // fields. UX context; never a control signal.
15925
15928
  awaitReason: external_exports.string().optional(),
15926
15929
  crawlId: external_exports.string().optional(),
15927
15930
  stepId: external_exports.string().optional()
@@ -16428,12 +16431,15 @@ var flowAwaitEventSchema = external_exports.object({
16428
16431
  origin: external_exports.enum(["webmcp", "sdk"]).optional(),
16429
16432
  pageOrigin: external_exports.string().optional(),
16430
16433
  // Discriminates an AUTO-RESUMING durable pause (`crawl_pending` /
16431
- // `durable_poll`, resumed server-side by the crawl / wait-until
16432
- // Workflow) from a CLIENT-RESOLVABLE local-tool / WebMCP await (absent). The
16433
- // server-resumed pauses carry `crawlId` / `stepId` instead of the tool fields.
16434
- // Open `z.string()` (not an enum) for forward-compat — kept in lockstep with
16435
- // the JSON `pausedReason` discriminator in execution-pipeline.ts. UX context;
16436
- // never a control signal.
16434
+ // `durable_poll`, resumed server-side by the crawl / wait-until Workflow;
16435
+ // `detached`, a Claude Managed watch-budget detach — the stream ends but the
16436
+ // execution continues server-side and the headless finalize stamps the real
16437
+ // terminal for `?after=` replay) from a CLIENT-RESOLVABLE local-tool /
16438
+ // WebMCP await (absent). The server-resumed pauses carry `crawlId` /
16439
+ // `stepId` instead of the tool fields. Open `z.string()` (not an enum) for
16440
+ // forward-compat — kept in lockstep with the JSON `pausedReason`
16441
+ // discriminator in execution-pipeline.ts. UX context; never a control
16442
+ // signal.
16437
16443
  awaitReason: external_exports.string().optional(),
16438
16444
  crawlId: external_exports.string().optional(),
16439
16445
  stepId: external_exports.string().optional(),
@@ -16715,6 +16721,117 @@ function neutralizeCsvFormula(value) {
16715
16721
  if (STRICT_NUMBER.test(value)) return value;
16716
16722
  return `'${value}`;
16717
16723
  }
16724
+ var agUiRoleSchema = external_exports.enum(["developer", "system", "assistant", "user", "tool"]);
16725
+ var runStartedEventSchema = external_exports.object({
16726
+ type: external_exports.literal("RUN_STARTED"),
16727
+ threadId: external_exports.string(),
16728
+ runId: external_exports.string()
16729
+ });
16730
+ var runFinishedEventSchema = external_exports.object({
16731
+ type: external_exports.literal("RUN_FINISHED"),
16732
+ threadId: external_exports.string(),
16733
+ runId: external_exports.string(),
16734
+ result: external_exports.unknown().optional()
16735
+ });
16736
+ var runErrorEventSchema = external_exports.object({
16737
+ type: external_exports.literal("RUN_ERROR"),
16738
+ message: external_exports.string(),
16739
+ code: external_exports.string().optional()
16740
+ });
16741
+ var stepStartedEventSchema = external_exports.object({
16742
+ type: external_exports.literal("STEP_STARTED"),
16743
+ stepName: external_exports.string()
16744
+ });
16745
+ var stepFinishedEventSchema = external_exports.object({
16746
+ type: external_exports.literal("STEP_FINISHED"),
16747
+ stepName: external_exports.string()
16748
+ });
16749
+ var textMessageStartEventSchema = external_exports.object({
16750
+ type: external_exports.literal("TEXT_MESSAGE_START"),
16751
+ messageId: external_exports.string(),
16752
+ role: agUiRoleSchema
16753
+ });
16754
+ var textMessageContentEventSchema = external_exports.object({
16755
+ type: external_exports.literal("TEXT_MESSAGE_CONTENT"),
16756
+ messageId: external_exports.string(),
16757
+ /** Non-empty incremental text. */
16758
+ delta: external_exports.string()
16759
+ });
16760
+ var textMessageEndEventSchema = external_exports.object({
16761
+ type: external_exports.literal("TEXT_MESSAGE_END"),
16762
+ messageId: external_exports.string()
16763
+ });
16764
+ var toolCallStartEventSchema = external_exports.object({
16765
+ type: external_exports.literal("TOOL_CALL_START"),
16766
+ toolCallId: external_exports.string(),
16767
+ toolCallName: external_exports.string(),
16768
+ parentMessageId: external_exports.string().optional()
16769
+ });
16770
+ var toolCallArgsEventSchema = external_exports.object({
16771
+ type: external_exports.literal("TOOL_CALL_ARGS"),
16772
+ toolCallId: external_exports.string(),
16773
+ /** Incremental (or, for non-streaming providers, complete) JSON-text of args. */
16774
+ delta: external_exports.string()
16775
+ });
16776
+ var toolCallEndEventSchema = external_exports.object({
16777
+ type: external_exports.literal("TOOL_CALL_END"),
16778
+ toolCallId: external_exports.string()
16779
+ });
16780
+ var toolCallResultEventSchema = external_exports.object({
16781
+ type: external_exports.literal("TOOL_CALL_RESULT"),
16782
+ messageId: external_exports.string(),
16783
+ toolCallId: external_exports.string(),
16784
+ content: external_exports.string(),
16785
+ role: external_exports.literal("tool").optional()
16786
+ });
16787
+ var reasoningStartEventSchema = external_exports.object({
16788
+ type: external_exports.literal("REASONING_START"),
16789
+ messageId: external_exports.string()
16790
+ });
16791
+ var reasoningMessageStartEventSchema = external_exports.object({
16792
+ type: external_exports.literal("REASONING_MESSAGE_START"),
16793
+ messageId: external_exports.string(),
16794
+ role: external_exports.literal("reasoning")
16795
+ });
16796
+ var reasoningMessageContentEventSchema = external_exports.object({
16797
+ type: external_exports.literal("REASONING_MESSAGE_CONTENT"),
16798
+ messageId: external_exports.string(),
16799
+ /** Non-empty incremental reasoning text. */
16800
+ delta: external_exports.string()
16801
+ });
16802
+ var reasoningMessageEndEventSchema = external_exports.object({
16803
+ type: external_exports.literal("REASONING_MESSAGE_END"),
16804
+ messageId: external_exports.string()
16805
+ });
16806
+ var reasoningEndEventSchema = external_exports.object({
16807
+ type: external_exports.literal("REASONING_END"),
16808
+ messageId: external_exports.string()
16809
+ });
16810
+ var customEventSchema = external_exports.object({
16811
+ type: external_exports.literal("CUSTOM"),
16812
+ name: external_exports.string(),
16813
+ value: external_exports.unknown()
16814
+ });
16815
+ var agUiSSEEventSchema = external_exports.discriminatedUnion("type", [
16816
+ runStartedEventSchema,
16817
+ runFinishedEventSchema,
16818
+ runErrorEventSchema,
16819
+ stepStartedEventSchema,
16820
+ stepFinishedEventSchema,
16821
+ textMessageStartEventSchema,
16822
+ textMessageContentEventSchema,
16823
+ textMessageEndEventSchema,
16824
+ toolCallStartEventSchema,
16825
+ toolCallArgsEventSchema,
16826
+ toolCallEndEventSchema,
16827
+ toolCallResultEventSchema,
16828
+ reasoningStartEventSchema,
16829
+ reasoningMessageStartEventSchema,
16830
+ reasoningMessageContentEventSchema,
16831
+ reasoningMessageEndEventSchema,
16832
+ reasoningEndEventSchema,
16833
+ customEventSchema
16834
+ ]);
16718
16835
  var AGENT_CONTENT_CONFIG_KEYS = {
16719
16836
  model: true,
16720
16837
  systemPrompt: true,
@@ -21429,13 +21546,13 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
21429
21546
  { stepIndex }
21430
21547
  );
21431
21548
  for (const issue2 of codeResult.issues) {
21432
- const location = issue2.line ? ` (line ${issue2.line}, column ${issue2.column})` : "";
21549
+ const location2 = issue2.line ? ` (line ${issue2.line}, column ${issue2.column})` : "";
21433
21550
  const issueCode = issue2.code === "SYNTAX_ERROR" ? "CODE_SYNTAX_ERROR" : `CODE_${issue2.code}`;
21434
21551
  addIssue(
21435
21552
  issue2.severity,
21436
21553
  {
21437
21554
  code: issueCode,
21438
- message: `${issue2.message}${location}`,
21555
+ message: `${issue2.message}${location2}`,
21439
21556
  path: `flowSteps[${stepIndex}].config.script`,
21440
21557
  step: stepRef,
21441
21558
  details: {
@@ -38055,12 +38172,48 @@ var aiGraderSchema = external_exports.object({
38055
38172
  criteria: external_exports.string().min(1),
38056
38173
  /** Reference-guided when the case has `expected`. */
38057
38174
  useExpected: external_exports.boolean().default(false),
38058
- /** Defaults to a cheap routed model (e.g. claude-haiku-4-5) at execution time. */
38175
+ /** Defaults to the Runtype Eval Judge flow's model pair (`EVAL_JUDGE_MODEL` with a cross-provider fallback) at execution time. Ignored when `judgeFlowId` is set (the flow's own steps pin their models). */
38059
38176
  model: external_exports.string().optional(),
38177
+ /**
38178
+ * Custom judge flow — the escape hatch when the platform judge prompt isn't
38179
+ * enough (extensions plan §1.2.5). The referenced flow (owned by the
38180
+ * evaluating account) is executed through the normal flow pipeline as the
38181
+ * judge for this grader: it receives the four `EvalJudgeVariables`
38182
+ * (`criteria` / `caseName` / `expected` / `transcript`, see
38183
+ * `eval-judge-flow.ts`) as inputs and its final output must be the same
38184
+ * verdict JSON contract the platform judge returns. Validated at run time:
38185
+ * a missing/inaccessible flow, a failed run, or malformed output resolves to
38186
+ * an `insufficient_evidence` outcome with a visible grader error — a
38187
+ * miswired custom judge warns, it never decides cases.
38188
+ */
38189
+ judgeFlowId: external_exports.string().min(1).optional(),
38060
38190
  /** Pass cutoff for the 1-5 scale. */
38061
38191
  threshold: external_exports.number().min(1).max(5).optional(),
38192
+ /**
38193
+ * The platform judge-prompt version that produced this grader's most recent
38194
+ * outcome. Stamped by `grader-executor.ts` at grade time into
38195
+ * `eval_case_scores.grader_snapshot` (design decision: the judge is a
38196
+ * versioned platform prompt, not a persisted flow) — not settable by
38197
+ * callers; any caller-supplied value is overwritten before scoring (or
38198
+ * stripped entirely for `judgeFlowId` graders, whose outcomes the platform
38199
+ * prompt did not produce).
38200
+ */
38201
+ judgePromptVersion: external_exports.number().int().positive().optional(),
38062
38202
  ...severityFields
38063
38203
  });
38204
+ var JUDGE_VERDICTS = ["pass", "fail", "insufficient_evidence"];
38205
+ var judgeVerdictSchema = external_exports.enum(JUDGE_VERDICTS);
38206
+ var JUDGE_EVIDENCE_KINDS = ["message", "tool_call"];
38207
+ var judgeEvidenceSchema = external_exports.object({
38208
+ kind: external_exports.enum(JUDGE_EVIDENCE_KINDS),
38209
+ /**
38210
+ * Position in the transcript the judge was shown: an index into
38211
+ * `GradingTrace.steps` for `kind: 'message'`, or `GradingTrace.toolCalls`
38212
+ * for `kind: 'tool_call'` — the same ordering the transcript renderer
38213
+ * numbered when building the judge prompt.
38214
+ */
38215
+ index: external_exports.number().int().nonnegative()
38216
+ });
38064
38217
  var graderConfigSchema = external_exports.union([checkGraderSchema, aiGraderSchema]);
38065
38218
  var gradersSchema = external_exports.array(graderConfigSchema);
38066
38219
  var caseExpectedSchema = external_exports.object({
@@ -38068,6 +38221,8 @@ var caseExpectedSchema = external_exports.object({
38068
38221
  json: external_exports.unknown().optional(),
38069
38222
  facts: external_exports.array(external_exports.string()).optional()
38070
38223
  });
38224
+ var EVAL_CASE_ORIGINS = ["manual", "saved_from_run", "generated", "imported", "fpo"];
38225
+ var evalCaseOriginSchema = external_exports.enum(EVAL_CASE_ORIGINS);
38071
38226
  var DEFAULT_MODELS_FOR_NEW_ACCOUNTS = [
38072
38227
  // Mixlayer models
38073
38228
  {
@@ -38201,6 +38356,45 @@ function renderDefaultModelStrengthsGuide() {
38201
38356
  (m2) => `- \`${m2.modelId}\`${m2.isDefault ? " (account default)" : ""} \u2014 ${m2.strengths}`
38202
38357
  ).join("\n");
38203
38358
  }
38359
+ var EVAL_JUDGE_SYSTEM_PROMPT = [
38360
+ "You are Runtype's evaluation expert: a rigorous, impartial judge of AI agent and flow behavior. Your job is to decide whether ONE run of an AI system met ONE plain-language criterion written by the system's builder.",
38361
+ "",
38362
+ 'You are given the criterion (what this flow or agent is supposed to do \u2014 the only standard you grade against), the case name, an optional expected answer for reference, and the run transcript: an indexed record of the steps that ran and every tool call with its inputs and outputs (labeled "[message N]" and "[tool_call N]"), followed by the final output.',
38363
+ "",
38364
+ "How to judge:",
38365
+ '1. Read the criterion first and decide what evidence it demands. A process criterion ("confirms X before Y", "never calls Z", "asks first") is judged on the trajectory \u2014 what the system actually did. An outcome criterion ("answers the question", "matches the expected answer", "right tone") is judged on the final output. Many criteria need both.',
38366
+ "2. Judge actions, not claims. If the output says a refund was issued but no refund tool call appears in the trajectory, the action did not happen.",
38367
+ "3. Judge whether a required action occurred when it mattered. Never demand a rigid, exact step ordering unless the criterion explicitly requires one; incidental extra steps or interleaved calls are not failures.",
38368
+ "4. Grade only the criterion you were given. Do not reward or punish anything outside it: not verbosity or brevity, not style, not parts of the run the criterion doesn't mention, and not whether you would have approached the task differently.",
38369
+ "5. When the transcript is truncated or no trajectory was captured, judge what you can see. If what you can see cannot settle the criterion, decline \u2014 do not guess in either direction.",
38370
+ "",
38371
+ "Reason first, then decide: in one paragraph, walk through the specific evidence for and against the criterion BEFORE settling on a verdict, and never rewrite your reasoning to justify a verdict you already picked.",
38372
+ "",
38373
+ "Then return exactly one verdict:",
38374
+ '- "pass" \u2014 the criterion is clearly met on the evidence shown.',
38375
+ '- "fail" \u2014 the criterion is clearly not met on the evidence shown.',
38376
+ '- "insufficient_evidence" \u2014 what you were shown cannot settle this criterion. This is the honest answer, not a failure; use it instead of guessing.',
38377
+ "",
38378
+ 'Cite the transcript entries your verdict rests on as an array of {"kind": "message"|"tool_call", "index": N}, using the exact labeled indices. An empty array is correct when the final output alone (which has no labeled index) is the evidence.',
38379
+ "",
38380
+ 'Return ONLY a JSON object of the form {"reasoning": "<one paragraph>", "verdict": "pass"|"fail"|"insufficient_evidence", "evidence": [{"kind": "message"|"tool_call", "index": <integer>}]}. Do not include any text outside the JSON object.',
38381
+ "",
38382
+ "Format examples only \u2014 never carry facts from these into a real case:",
38383
+ '{"reasoning": "The agent called verify_identity before issue_refund, satisfying the criterion.", "verdict": "pass", "evidence": [{"kind": "tool_call", "index": 0}, {"kind": "tool_call", "index": 1}]}',
38384
+ '{"reasoning": "The criterion forbids promising a delivery date, but the final output commits to delivery by Friday.", "verdict": "fail", "evidence": []}'
38385
+ ].join("\n");
38386
+ var EVAL_JUDGE_USER_PROMPT_TEMPLATE = [
38387
+ "Case: {{caseName}}",
38388
+ "",
38389
+ "Criterion (what this flow/agent is supposed to do):",
38390
+ "{{criteria}}",
38391
+ "",
38392
+ 'Expected answer (reference; the output should convey the same facts and conclusion, wording may differ; "(none provided)" when there is no reference):',
38393
+ "{{expected}}",
38394
+ "",
38395
+ "Run transcript (trajectory and final output):",
38396
+ "{{transcript}}"
38397
+ ].join("\n");
38204
38398
  var userProfileFeaturesSchema = external_exports.object({
38205
38399
  enableAgentSkills: external_exports.boolean(),
38206
38400
  // Gates the WebMCP-powered dashboard assistant (copilot panel + chat
@@ -41371,6 +41565,7 @@ var surfaceSchema = external_exports.object({
41371
41565
  "messaging",
41372
41566
  "telegram",
41373
41567
  "a2a",
41568
+ "ag-ui",
41374
41569
  "hosted-page",
41375
41570
  "chrome_extension"
41376
41571
  ]),
@@ -42873,7 +43068,8 @@ var PLATFORM_CATALOG = {
42873
43068
  "messaging",
42874
43069
  "telegram",
42875
43070
  "a2a",
42876
- "chrome_extension"
43071
+ "chrome_extension",
43072
+ "ag-ui"
42877
43073
  ],
42878
43074
  availableFlowPrimitives: FLOW_STEP_TYPES.map((stepType) => {
42879
43075
  const meta3 = FLOW_STEP_TYPE_METADATA[stepType];
@@ -42917,6 +43113,11 @@ var PLATFORM_CATALOG = {
42917
43113
  restBase: "/v1/skills"
42918
43114
  }
42919
43115
  };
43116
+ function publicSurfaceTypeMetadata() {
43117
+ return Object.fromEntries(
43118
+ Object.entries(SURFACE_TYPE_METADATA).filter(([, info]) => !info.hiddenFromCatalog)
43119
+ );
43120
+ }
42920
43121
  var SURFACE_TYPE_METADATA = {
42921
43122
  chat: {
42922
43123
  description: "Website widget, support bots, conversational interfaces. Uses Persona and can optionally accept WebMCP page tools discovered from document.modelContext.",
@@ -43312,6 +43513,30 @@ var SURFACE_TYPE_METADATA = {
43312
43513
  executionHint: "You are running inside a Chrome extension side panel. You may have browser tools (chrome:*) to read the current page, interact with forms, and manage tabs \u2014 use them when the user asks about or wants to act on the page they are viewing. Mutating actions (clicking, filling, navigating) ask the user for confirmation before running."
43313
43514
  },
43314
43515
  behaviorTypeRef: "runtype://types/surface-configs"
43516
+ },
43517
+ "ag-ui": {
43518
+ description: "AG-UI protocol endpoint (agent-to-user event stream over SSE)",
43519
+ useCases: ["custom agent frontends", "CopilotKit / AG-UI clients", "embedded agent UIs"],
43520
+ examples: ["CopilotKit app", "Custom React agent UI", "AG-UI dojo client"],
43521
+ // Staging-test phase (`enable-ag-ui-surface` flag): keep the type out of
43522
+ // agent-facing catalogs until GA. Runtime trait lookups still resolve.
43523
+ hiddenFromCatalog: true,
43524
+ traits: {
43525
+ streaming: "required",
43526
+ messagesMutable: false,
43527
+ deliveryModel: "real_time",
43528
+ mediaSupport: "none",
43529
+ textMediaDelivery: "none",
43530
+ interactiveUI: "none",
43531
+ inboundMediaSupport: false,
43532
+ consumerType: "machine",
43533
+ reasoningVisibility: "pass_through",
43534
+ markdownDialect: "markdown",
43535
+ threadModel: "flat",
43536
+ senderIdentity: "authenticated",
43537
+ maxResponseLength: null,
43538
+ executionHint: null
43539
+ }
43315
43540
  }
43316
43541
  };
43317
43542
  var EMAIL_HTML_CAPABILITY_HINT = [
@@ -43320,7 +43545,7 @@ var EMAIL_HTML_CAPABILITY_HINT = [
43320
43545
  '- Images: embed an image with `<img src="https://..." alt="...">` and it renders inline in the email. (Some clients ask the recipient to load remote images.)'
43321
43546
  ].join("\n");
43322
43547
  var SURFACE_TYPE_GUIDE = (() => {
43323
- const lines = Object.entries(SURFACE_TYPE_METADATA).map(([type, info]) => {
43548
+ const lines = Object.entries(publicSurfaceTypeMetadata()).map(([type, info]) => {
43324
43549
  return `- **${type}**: ${info.description}`;
43325
43550
  });
43326
43551
  return `## Surface Type Guide
@@ -49317,6 +49542,9 @@ logsCommand.command("list").description("Query persisted logs with filtering, se
49317
49542
  printJson(res);
49318
49543
  return;
49319
49544
  }
49545
+ if (res.data?.degraded) {
49546
+ console.error(chalk14.yellow("Warning: historical logs are temporarily unavailable; showing recent entries only"));
49547
+ }
49320
49548
  const entries = res.data?.entries ?? [];
49321
49549
  if (entries.length === 0) {
49322
49550
  console.log(chalk14.gray("No logs found"));
@@ -49409,6 +49637,9 @@ logsCommand.command("stats").description("Aggregate log stats: totals, counts by
49409
49637
  return;
49410
49638
  }
49411
49639
  const stats = res.data;
49640
+ if (stats?.degraded) {
49641
+ console.error(chalk14.yellow("Warning: historical log storage is temporarily unavailable; counts cover recent entries only"));
49642
+ }
49412
49643
  printDetail("Log Stats", [
49413
49644
  { label: "Total", value: stats.total },
49414
49645
  { label: "By Level", value: formatCounts(stats.byLevel ?? {}) },
@@ -69676,7 +69907,7 @@ function workerPackageJson(name, runtimeDep) {
69676
69907
  "@runtypelabs/runtime": runtimeDep
69677
69908
  },
69678
69909
  devDependencies: {
69679
- "@cloudflare/workers-types": "^4.0.0",
69910
+ "@cloudflare/workers-types": "^5.0.0",
69680
69911
  typescript: "^5.3.3",
69681
69912
  wrangler: "^4.0.0"
69682
69913
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runtypelabs/cli",
3
- "version": "2.25.0",
3
+ "version": "2.25.2",
4
4
  "description": "Command-line interface for Runtype AI platform",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,7 +24,7 @@
24
24
  "rosie-skills": "0.8.1",
25
25
  "yaml": "^2.9.0",
26
26
  "@runtypelabs/ink-components": "0.3.4",
27
- "@runtypelabs/sdk": "5.8.0",
27
+ "@runtypelabs/sdk": "5.9.0",
28
28
  "@runtypelabs/terminal-animations": "0.2.1"
29
29
  },
30
30
  "devDependencies": {
@@ -39,7 +39,7 @@
39
39
  "tsx": "^4.7.1",
40
40
  "typescript": "^6.0.3",
41
41
  "vitest": "^4.1.0",
42
- "@runtypelabs/shared": "1.45.0"
42
+ "@runtypelabs/shared": "1.46.0"
43
43
  },
44
44
  "engines": {
45
45
  "node": ">=22.12.0"