@runtypelabs/cli 2.59.11 → 2.60.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/dist/{chunk-C3GmwZiH.js → chunk-4Ykx-xWg.js} +2 -2
- package/dist/{chunk-NXI76aJP.js → chunk-B5z7FcMZ.js} +1 -1
- package/dist/{chunk-DkaS_DNA.js → chunk-BWN6wf35.js} +1 -1
- package/dist/{chunk-2KHCZ1oX.js → chunk-BkptXLRJ.js} +2 -2
- package/dist/{chunk-BWWqiBjS.js → chunk-CD47z-l6.js} +1 -1
- package/dist/{chunk-BtpXwOCu.js → chunk-CG8J23-I.js} +3 -3
- package/dist/{chunk-CStXkNVU.js → chunk-CQPiMauP.js} +1 -1
- package/dist/{chunk-DGw-oea5.js → chunk-CQwXQ3jd.js} +1 -1
- package/dist/{chunk-C8DBcoRx.js → chunk-CcsI1Y8O.js} +2 -2
- package/dist/{chunk-BNt7L05l.js → chunk-CwrDbUsn.js} +2 -2
- package/dist/{chunk-daI6hXN9.js → chunk-D-hN0D5C.js} +41 -40
- package/dist/{chunk-XwPlN7Hv.js → chunk-DWj7uC90.js} +4 -4
- package/dist/{chunk-CS4tOg29.js → chunk-DxS1ac3j.js} +1 -1
- package/dist/{chunk-NaMByjdC.js → chunk-FfQFwZ7q.js} +1 -1
- package/dist/{chunk-Df2DiijP.js → chunk-_ILkTDew.js} +1 -1
- package/dist/{chunk-D5sr2-s-.js → chunk-hnOvAcZx.js} +1 -1
- package/dist/{chunk-DQabdDJ3.js → chunk-nTKUwz6t.js} +1 -1
- package/dist/{chunk-CrhwBwqZ.js → chunk-w76cMuXv.js} +195 -16
- package/dist/index.js +12 -12
- package/package.json +3 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { b as CredentialStore, t as isTTY } from "./index.js";
|
|
3
|
-
import { p as buildDashboardUrl } from "./chunk-
|
|
3
|
+
import { p as buildDashboardUrl } from "./chunk-BkptXLRJ.js";
|
|
4
4
|
import { i as getApiUrl, l as getRuntimeApiKey, n as ApiKeyValidationUnavailableError, r as createCliClient, s as getDashboardUrl, t as ApiKeyManager } from "./chunk-BW2fg46T.js";
|
|
5
5
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
6
6
|
import { a as printJson } from "./chunk-CcFCyqbB.js";
|
|
7
|
-
import { t as getCurrentAccountId } from "./chunk-
|
|
7
|
+
import { t as getCurrentAccountId } from "./chunk-_ILkTDew.js";
|
|
8
8
|
import { Command } from "commander";
|
|
9
9
|
import chalk from "chalk";
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
@@ -71,7 +71,7 @@ const initCommand = new Command("init").description("Set up Runtype CLI with gui
|
|
|
71
71
|
console.error(message);
|
|
72
72
|
process.exit(1);
|
|
73
73
|
}
|
|
74
|
-
const { InitApp } = await import("./chunk-
|
|
74
|
+
const { InitApp } = await import("./chunk-CQPiMauP.js");
|
|
75
75
|
const { waitUntilExit } = render(React.createElement(InitApp, {
|
|
76
76
|
apiUrl: options.apiUrl,
|
|
77
77
|
onComplete: () => {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { P as getRuntypeHomeDir, b as CredentialStore, t as isTTY } from "./index.js";
|
|
3
3
|
import { ConfirmPrompt, DataList, EntityCard, MutationResult, React, Text, mutationResultProps, render, useEffect, useMutationState, useState } from "./chunk-CoAWdSiE.js";
|
|
4
|
-
import { b as pkceCodeVerifierSchema, d as apiKeyFileSlug, f as apiKeyFileUsageHint, m as isForbiddenRequestedPermission, n as API_KEY_REQUEST_MAX_TTL_SECONDS, r as API_KEY_REQUEST_POLL_INTERVAL_MS, t as API_KEY_FILE_FORMAT, u as apiKeyFileSchema, y as pkceCodeChallengeSchema } from "./chunk-
|
|
4
|
+
import { b as pkceCodeVerifierSchema, d as apiKeyFileSlug, f as apiKeyFileUsageHint, m as isForbiddenRequestedPermission, n as API_KEY_REQUEST_MAX_TTL_SECONDS, r as API_KEY_REQUEST_POLL_INTERVAL_MS, t as API_KEY_FILE_FORMAT, u as apiKeyFileSchema, y as pkceCodeChallengeSchema } from "./chunk-BkptXLRJ.js";
|
|
5
5
|
import { i as getApiUrl, r as createCliClient } from "./chunk-BW2fg46T.js";
|
|
6
6
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
7
7
|
import { a as printJson, i as printDetail, r as getTotalCount } from "./chunk-CcFCyqbB.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as BuiltInToolGroup, S as BuiltInToolCategory, a as TextContentPartSchema, d as ToolAnnotationsSchema, f as modelVisibleToolName, g as extractionFieldSchema, h as stripTrailingChars, i as ReasoningContentPartSchema, m as crawlConfigSchema, n as ImageContentPartSchema, p as FILTER_OPERATORS, t as FileContentPartSchema, w as PRODUCT_SURFACE_TYPES } from "./chunk-
|
|
2
|
+
import { C as BuiltInToolGroup, S as BuiltInToolCategory, a as TextContentPartSchema, d as ToolAnnotationsSchema, f as modelVisibleToolName, g as extractionFieldSchema, h as stripTrailingChars, i as ReasoningContentPartSchema, m as crawlConfigSchema, n as ImageContentPartSchema, p as FILTER_OPERATORS, t as FileContentPartSchema, w as PRODUCT_SURFACE_TYPES } from "./chunk-D-hN0D5C.js";
|
|
3
3
|
import { C as unknown, S as union, T as toJSONSchema, _ as preprocess, a as _null, b as string, c as boolean, f as literal, h as object, i as _enum, m as number, s as array, u as discriminatedUnion, v as record } from "./chunk-BOpO6xE-.js";
|
|
4
4
|
import { i as number$1, r as jsonPatchSchema } from "./chunk-BJQv9Elp.js";
|
|
5
5
|
import { n as MCPServerCategory } from "./chunk-BVMhjGVe.js";
|
|
@@ -2517,7 +2517,7 @@ function loadBrandConfig(env) {
|
|
|
2517
2517
|
}
|
|
2518
2518
|
loadBrandConfig();
|
|
2519
2519
|
BRAND_CONFIGS[DEFAULT_BRAND_NAME];
|
|
2520
|
-
// ../shared/dist/chunk-
|
|
2520
|
+
// ../shared/dist/chunk-BH4LyiwO.mjs
|
|
2521
2521
|
const ARCHITECTURE_PREVIEW_SURFACE_TYPES = [
|
|
2522
2522
|
"chat",
|
|
2523
2523
|
"api",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { t as ModelPicker } from "./chunk-CrlqIfmb.js";
|
|
3
|
-
import { MarathonApp } from "./chunk-
|
|
3
|
+
import { MarathonApp } from "./chunk-CG8J23-I.js";
|
|
4
4
|
import { useEffect, useRef, useState } from "react";
|
|
5
5
|
import { Box, Text, useApp, useInput, useStdout } from "ink";
|
|
6
6
|
import { theme } from "@runtypelabs/ink-components";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { p as buildDashboardUrl } from "./chunk-
|
|
3
|
-
import { a as treeLogPathForStateFile, i as materializeAtHead, n as readSessionEventLog, r as loadTreeLog, t as getActiveDeploySandboxPreviewUrl } from "./chunk-
|
|
4
|
-
import { t as getCurrentAccountId } from "./chunk-
|
|
2
|
+
import { p as buildDashboardUrl } from "./chunk-BkptXLRJ.js";
|
|
3
|
+
import { a as treeLogPathForStateFile, i as materializeAtHead, n as readSessionEventLog, r as loadTreeLog, t as getActiveDeploySandboxPreviewUrl } from "./chunk-DWj7uC90.js";
|
|
4
|
+
import { t as getCurrentAccountId } from "./chunk-_ILkTDew.js";
|
|
5
5
|
import { t as ModelPicker } from "./chunk-CrlqIfmb.js";
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import * as fs$1 from "node:fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { b as CredentialStore } from "./index.js";
|
|
3
|
-
import { p as buildDashboardUrl, x as selectAccountId } from "./chunk-
|
|
3
|
+
import { p as buildDashboardUrl, x as selectAccountId } from "./chunk-BkptXLRJ.js";
|
|
4
4
|
import { s as getDashboardUrl, t as ApiKeyManager } from "./chunk-BW2fg46T.js";
|
|
5
5
|
import { n as browserLogin, r as orgMismatchWarning } from "./chunk-BnWhIqW1.js";
|
|
6
6
|
import { n as validateQuickStartUrl, t as createQuickStartProduct } from "./chunk-i7DwkvvD.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { c as TRACE_QUERY_DIMENSIONS, l as TRACE_SLICE_SPAN_KINDS } from "./chunk-
|
|
2
|
+
import { c as TRACE_QUERY_DIMENSIONS, l as TRACE_SLICE_SPAN_KINDS } from "./chunk-BkptXLRJ.js";
|
|
3
3
|
import { r as createCliClient } from "./chunk-BW2fg46T.js";
|
|
4
4
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
5
5
|
import { a as printJson } from "./chunk-CcFCyqbB.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { t as isTTY } from "./index.js";
|
|
3
3
|
import { ConfirmPrompt, DataList, EntityCard, MutationResult, React, render, useEffect, useState } from "./chunk-CoAWdSiE.js";
|
|
4
|
-
import "./chunk-
|
|
4
|
+
import "./chunk-D-hN0D5C.js";
|
|
5
5
|
import { n as addExecutionInputOptions, r as resolveExecutionInput, t as runExecution } from "./chunk-DrxtMway.js";
|
|
6
6
|
import { r as createCliClient } from "./chunk-BW2fg46T.js";
|
|
7
7
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
8
8
|
import { a as printJson, i as printDetail, n as buildListParams, r as getTotalCount, s as printNextCursorHint } from "./chunk-CcFCyqbB.js";
|
|
9
|
-
import { taskCommand } from "./chunk-
|
|
9
|
+
import { taskCommand } from "./chunk-DWj7uC90.js";
|
|
10
10
|
import { t as readJsonFile } from "./chunk-DGv7X9S_.js";
|
|
11
11
|
import { f as writePulledDefinition, o as agentSkillsCommand } from "./chunk-BirUxTtH.js";
|
|
12
12
|
import { r as describeAgentExportFailure, t as agentReleaseSelectorParams } from "./chunk-87nRnNRG.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { t as isTTY } from "./index.js";
|
|
3
3
|
import { DataList, EntityCard, MutationResult, React, render, useEffect, useState } from "./chunk-CoAWdSiE.js";
|
|
4
|
-
import { p as buildDashboardUrl } from "./chunk-
|
|
4
|
+
import { p as buildDashboardUrl } from "./chunk-BkptXLRJ.js";
|
|
5
5
|
import { r as createCliClient, s as getDashboardUrl } from "./chunk-BW2fg46T.js";
|
|
6
6
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
7
7
|
import { a as printJson, i as printDetail, n as buildListParams, r as getTotalCount, s as printNextCursorHint } from "./chunk-CcFCyqbB.js";
|
|
8
8
|
import { t as readJsonFile } from "./chunk-DGv7X9S_.js";
|
|
9
9
|
import { c as buildEntityPullCommand, d as productPullFpoCommand, r as PRODUCT_ENSURE_SPEC, s as buildEntityEnsureCommand, u as productEnsureFpoCommand } from "./chunk-BirUxTtH.js";
|
|
10
|
-
import { t as getCurrentAccountId } from "./chunk-
|
|
10
|
+
import { t as getCurrentAccountId } from "./chunk-_ILkTDew.js";
|
|
11
11
|
import { n as validateQuickStartUrl, t as createQuickStartProduct } from "./chunk-i7DwkvvD.js";
|
|
12
12
|
import { Command } from "commander";
|
|
13
13
|
import chalk from "chalk";
|
|
@@ -7401,7 +7401,7 @@ function modelVisibleToolName(toolId) {
|
|
|
7401
7401
|
function toolNamesCollideForAiSdk(left, right) {
|
|
7402
7402
|
return sanitizeToolNameForAiSdk(left) === sanitizeToolNameForAiSdk(right);
|
|
7403
7403
|
}
|
|
7404
|
-
// ../shared/dist/chunk-
|
|
7404
|
+
// ../shared/dist/chunk-DsEUZj_t.mjs
|
|
7405
7405
|
/**
|
|
7406
7406
|
* The reserved model-facing name of the agent state write tool
|
|
7407
7407
|
* (`packages/runtime/src/engine/state-write-tool.ts`). The model is told to call
|
|
@@ -7424,44 +7424,6 @@ function isReservedRuntypeToolName(name) {
|
|
|
7424
7424
|
function reservedToolNameMessage(subject, name) {
|
|
7425
7425
|
return `${subject} "${name}" collides with the reserved tool name "${RUNTYPE_SET_STATE_TOOL_NAME}" (the agent state write tool). Tool names are lowercased and non-alphanumeric characters become "_" before the model sees them, so every spelling that normalizes to it is reserved with it. "runtype_" is a reserved tool namespace. Rename the tool.`;
|
|
7426
7426
|
}
|
|
7427
|
-
/**
|
|
7428
|
-
* Owners whose provider-native tools force DIRECT routing: no gateway carries them,
|
|
7429
|
-
* so a gateway executor drops them or sends an inert function tool.
|
|
7430
|
-
*/
|
|
7431
|
-
const DIRECT_PROVIDER_TOOL_OWNERS = /* @__PURE__ */ new Set([
|
|
7432
|
-
"anthropic",
|
|
7433
|
-
"openai",
|
|
7434
|
-
"xai"
|
|
7435
|
-
]);
|
|
7436
|
-
/**
|
|
7437
|
-
* Owners whose provider-native tools reach the owner intact through the Vercel AI
|
|
7438
|
-
* Gateway as well as direct access, so routing must NOT be pinned for them.
|
|
7439
|
-
*/
|
|
7440
|
-
const GATEWAY_CARRIED_PROVIDER_TOOL_OWNERS = /* @__PURE__ */ new Set(["google"]);
|
|
7441
|
-
/** Every provider that owns provider-native tools, whichever lane carries them. */
|
|
7442
|
-
const PROVIDER_TOOL_OWNERS = /* @__PURE__ */ new Set([...DIRECT_PROVIDER_TOOL_OWNERS, ...GATEWAY_CARRIED_PROVIDER_TOOL_OWNERS]);
|
|
7443
|
-
function ownerOf(toolId) {
|
|
7444
|
-
const entry = getBuiltInToolById(parseToolInstanceId(toolId).baseId);
|
|
7445
|
-
if (entry?.executionHint !== "provider") return void 0;
|
|
7446
|
-
return entry.providers?.[0];
|
|
7447
|
-
}
|
|
7448
|
-
/**
|
|
7449
|
-
* The provider that must EXECUTE a catalog tool id, or undefined when the id is unknown,
|
|
7450
|
-
* not provider-native, or owned by a provider that owns no provider-native tools.
|
|
7451
|
-
* Strips the `#instance` suffix and the `builtin:` / `platform:` prefix and resolves aliases.
|
|
7452
|
-
*/
|
|
7453
|
-
function resolveProviderToolOwner(toolId) {
|
|
7454
|
-
const owner = ownerOf(toolId);
|
|
7455
|
-
return owner && PROVIDER_TOOL_OWNERS.has(owner) ? owner : void 0;
|
|
7456
|
-
}
|
|
7457
|
-
/**
|
|
7458
|
-
* The direct provider a catalog tool id must be ROUTED to, or undefined when no lane
|
|
7459
|
-
* pinning is required — an unknown / non-native id, or an owner a gateway carries.
|
|
7460
|
-
*/
|
|
7461
|
-
function resolveDirectProviderToolOwner(toolId) {
|
|
7462
|
-
const owner = ownerOf(toolId);
|
|
7463
|
-
return owner && DIRECT_PROVIDER_TOOL_OWNERS.has(owner) ? owner : void 0;
|
|
7464
|
-
}
|
|
7465
7427
|
// ../shared/dist/chunk-DaWm3aVW.mjs
|
|
7466
7428
|
/** Post-normalization metadata key shape. Mirrors the api's key-length cap (64). */
|
|
7467
7429
|
const RECORD_COLLECTION_FIELD_NAME_PATTERN = /^[a-z0-9_]{1,64}$/;
|
|
@@ -7616,6 +7578,45 @@ const CONTEXT_STEP_TYPES = [
|
|
|
7616
7578
|
"extract"
|
|
7617
7579
|
];
|
|
7618
7580
|
const FLOW_STEP_TYPES = ["prompt", ...CONTEXT_STEP_TYPES];
|
|
7581
|
+
// ../shared/dist/chunk-B5KySbj4.mjs
|
|
7582
|
+
/**
|
|
7583
|
+
* Owners whose provider-native tools force DIRECT routing: no gateway carries them,
|
|
7584
|
+
* so a gateway executor drops them or sends an inert function tool.
|
|
7585
|
+
*/
|
|
7586
|
+
const DIRECT_PROVIDER_TOOL_OWNERS = /* @__PURE__ */ new Set([
|
|
7587
|
+
"anthropic",
|
|
7588
|
+
"openai",
|
|
7589
|
+
"xai"
|
|
7590
|
+
]);
|
|
7591
|
+
/**
|
|
7592
|
+
* Owners whose provider-native tools reach the owner intact through the Vercel AI
|
|
7593
|
+
* Gateway as well as direct access, so routing must NOT be pinned for them.
|
|
7594
|
+
*/
|
|
7595
|
+
const GATEWAY_CARRIED_PROVIDER_TOOL_OWNERS = /* @__PURE__ */ new Set(["google"]);
|
|
7596
|
+
/** Every provider that owns provider-native tools, whichever lane carries them. */
|
|
7597
|
+
const PROVIDER_TOOL_OWNERS = /* @__PURE__ */ new Set([...DIRECT_PROVIDER_TOOL_OWNERS, ...GATEWAY_CARRIED_PROVIDER_TOOL_OWNERS]);
|
|
7598
|
+
function ownerOf(toolId) {
|
|
7599
|
+
const entry = getBuiltInToolById(parseToolInstanceId(toolId).baseId);
|
|
7600
|
+
if (entry?.executionHint !== "provider") return void 0;
|
|
7601
|
+
return entry.providers?.[0];
|
|
7602
|
+
}
|
|
7603
|
+
/**
|
|
7604
|
+
* The provider that must EXECUTE a catalog tool id, or undefined when the id is unknown,
|
|
7605
|
+
* not provider-native, or owned by a provider that owns no provider-native tools.
|
|
7606
|
+
* Strips the `#instance` suffix and the `builtin:` / `platform:` prefix and resolves aliases.
|
|
7607
|
+
*/
|
|
7608
|
+
function resolveProviderToolOwner(toolId) {
|
|
7609
|
+
const owner = ownerOf(toolId);
|
|
7610
|
+
return owner && PROVIDER_TOOL_OWNERS.has(owner) ? owner : void 0;
|
|
7611
|
+
}
|
|
7612
|
+
/**
|
|
7613
|
+
* The direct provider a catalog tool id must be ROUTED to, or undefined when no lane
|
|
7614
|
+
* pinning is required — an unknown / non-native id, or an owner a gateway carries.
|
|
7615
|
+
*/
|
|
7616
|
+
function resolveDirectProviderToolOwner(toolId) {
|
|
7617
|
+
const owner = ownerOf(toolId);
|
|
7618
|
+
return owner && DIRECT_PROVIDER_TOOL_OWNERS.has(owner) ? owner : void 0;
|
|
7619
|
+
}
|
|
7619
7620
|
// ../shared/dist/durable-poll-limits.mjs
|
|
7620
7621
|
/**
|
|
7621
7622
|
* Durable-poll budget limits shared between the api's Cloudflare Workflow poll loops and the author-time flow validator.
|
|
@@ -8027,7 +8028,7 @@ object({
|
|
|
8027
8028
|
externalId: string().min(1).max(500).optional().describe("The conversation id in the source system. Re-creating with the same system and externalId returns the existing conversation with imported: false instead of a duplicate."),
|
|
8028
8029
|
importedAt: string().datetime({ offset: true }).optional()
|
|
8029
8030
|
});
|
|
8030
|
-
// ../shared/dist/chunk-
|
|
8031
|
+
// ../shared/dist/chunk-TpsYwqxQ.mjs
|
|
8031
8032
|
/** Public schedule knobs shared by canonical, product-surface and FPO schedule writes. */
|
|
8032
8033
|
const scheduleExecutionOptionsSchema = object({
|
|
8033
8034
|
chunkSize: number().int().min(1).max(250).optional(),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { C as setMarathonTitle, F as getCliVersion, L as __require, N as getMarathonStateDir, P as getRuntypeHomeDir } from "./index.js";
|
|
3
3
|
import { React, enterAltScreen, loadUi, render } from "./chunk-CoAWdSiE.js";
|
|
4
|
-
import { _ as inferModelCreator, b as getBuiltInToolById, v as formatSystemToolId, x as isToolCompatibleWithModel, y as getAllBuiltInTools } from "./chunk-
|
|
5
|
-
import { h as isNonAIProvider } from "./chunk-
|
|
4
|
+
import { _ as inferModelCreator, b as getBuiltInToolById, v as formatSystemToolId, x as isToolCompatibleWithModel, y as getAllBuiltInTools } from "./chunk-D-hN0D5C.js";
|
|
5
|
+
import { h as isNonAIProvider } from "./chunk-BkptXLRJ.js";
|
|
6
6
|
import { c as getDevPlanOverride, i as getApiUrl, s as getDashboardUrl } from "./chunk-BW2fg46T.js";
|
|
7
7
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
8
8
|
import { a as printJson } from "./chunk-CcFCyqbB.js";
|
|
@@ -3768,8 +3768,8 @@ async function taskAction(agent, options) {
|
|
|
3768
3768
|
}
|
|
3769
3769
|
await loadUi();
|
|
3770
3770
|
const [{ MarathonApp }, { MarathonStartupShell }, { DEFAULT_MODELS: DEFAULT_STARTUP_MODELS }] = await Promise.all([
|
|
3771
|
-
import("./chunk-
|
|
3772
|
-
import("./chunk-
|
|
3771
|
+
import("./chunk-CG8J23-I.js"),
|
|
3772
|
+
import("./chunk-CD47z-l6.js"),
|
|
3773
3773
|
import("./chunk-CrlqIfmb.js").then((n) => n.n)
|
|
3774
3774
|
]);
|
|
3775
3775
|
const useStartupShell = canUseMarathonStartupShell(options);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { _ as managedDeploymentCreateRequestSchema } from "./chunk-
|
|
2
|
+
import { _ as managedDeploymentCreateRequestSchema } from "./chunk-BkptXLRJ.js";
|
|
3
3
|
import { r as createCliClient } from "./chunk-BW2fg46T.js";
|
|
4
4
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
5
5
|
import { a as printJson } from "./chunk-CcFCyqbB.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { c as mergeZodSchemaAndSemantic, l as validateFPO, o as coerceFullProductObjectForSemanticValidation, s as fullProductObjectSchema, u as validateFPOTemplate } from "./chunk-
|
|
2
|
+
import { c as mergeZodSchemaAndSemantic, l as validateFPO, o as coerceFullProductObjectForSemanticValidation, s as fullProductObjectSchema, u as validateFPOTemplate } from "./chunk-D-hN0D5C.js";
|
|
3
3
|
import { a as printJson } from "./chunk-CcFCyqbB.js";
|
|
4
4
|
import { Command, Option } from "commander";
|
|
5
5
|
import chalk from "chalk";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { b as CredentialStore } from "./index.js";
|
|
3
|
-
import { x as selectAccountId } from "./chunk-
|
|
3
|
+
import { x as selectAccountId } from "./chunk-BkptXLRJ.js";
|
|
4
4
|
import { t as ApiKeyManager } from "./chunk-BW2fg46T.js";
|
|
5
5
|
// src/lib/account-context.ts
|
|
6
6
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { t as isTTY } from "./index.js";
|
|
3
3
|
import { ConfirmPrompt, DataList, EntityCard, MutationResult, React, render, useEffect, useState } from "./chunk-CoAWdSiE.js";
|
|
4
|
-
import { v as neutralizeCsvFormula } from "./chunk-
|
|
4
|
+
import { v as neutralizeCsvFormula } from "./chunk-BkptXLRJ.js";
|
|
5
5
|
import { r as createCliClient } from "./chunk-BW2fg46T.js";
|
|
6
6
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
7
7
|
import { a as printJson, r as getTotalCount, s as printNextCursorHint } from "./chunk-CcFCyqbB.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as PRODUCT_EVENT_DEFAULT_NEXT_POLL_MS, g as isProductEventName, i as PRODUCT_EVENT_CURSOR_PATTERN, o as PRODUCT_EVENT_MAX_WAIT_MS, s as PRODUCT_EVENT_NAMES } from "./chunk-
|
|
2
|
+
import { a as PRODUCT_EVENT_DEFAULT_NEXT_POLL_MS, g as isProductEventName, i as PRODUCT_EVENT_CURSOR_PATTERN, o as PRODUCT_EVENT_MAX_WAIT_MS, s as PRODUCT_EVENT_NAMES } from "./chunk-BkptXLRJ.js";
|
|
3
3
|
import { i as getApiUrl, r as createCliClient } from "./chunk-BW2fg46T.js";
|
|
4
4
|
import { n as ensureAuth } from "./chunk-CJraEBVd.js";
|
|
5
5
|
import { Command } from "commander";
|
|
@@ -54,6 +54,11 @@ const selfReportedCostSchema = object({
|
|
|
54
54
|
"unknown"
|
|
55
55
|
])
|
|
56
56
|
});
|
|
57
|
+
/** One action a candidate's turn left for the user to take, such as an Approve button. */
|
|
58
|
+
const simPendingActionSchema = object({
|
|
59
|
+
id: string().min(1).max(64).regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]*$/),
|
|
60
|
+
label: string().min(1).max(120)
|
|
61
|
+
});
|
|
57
62
|
const simTerminationSchema = _enum([
|
|
58
63
|
"goal_met",
|
|
59
64
|
"gave_up",
|
|
@@ -118,7 +123,11 @@ const simMessageSchema = object({
|
|
|
118
123
|
]),
|
|
119
124
|
content: string(),
|
|
120
125
|
toolCalls: array(simToolCallSchema).optional(),
|
|
121
|
-
toolResults: array(simToolResultSchema).optional()
|
|
126
|
+
toolResults: array(simToolResultSchema).optional(),
|
|
127
|
+
/** On an assistant message: the actions a candidate's turn left for the user to take, such as an approval's buttons. */
|
|
128
|
+
pendingActions: array(simPendingActionSchema).max(8).optional(),
|
|
129
|
+
/** On a user message: the offered action the simulated user took with it. */
|
|
130
|
+
action: simPendingActionSchema.optional()
|
|
122
131
|
});
|
|
123
132
|
object({
|
|
124
133
|
message: string(),
|
|
@@ -128,9 +137,11 @@ object({
|
|
|
128
137
|
"gave_up"
|
|
129
138
|
]),
|
|
130
139
|
reason: string().nullable().optional(),
|
|
131
|
-
revealed: array(string()).optional()
|
|
140
|
+
revealed: array(string()).optional(),
|
|
141
|
+
/** The id of an action the assistant's last reply offered, taken with this message. */
|
|
142
|
+
action: string().nullable().optional()
|
|
132
143
|
});
|
|
133
|
-
// ../shared/dist/chunk-
|
|
144
|
+
// ../shared/dist/chunk-Bx51_zrp.mjs
|
|
134
145
|
/** Every change kind a scrub report can name; a leaf so the data-source contracts reach it without the scrubber. */
|
|
135
146
|
const METADATA_SCRUB_CHANGE_KIND_NAMES = [
|
|
136
147
|
"url_redirected",
|
|
@@ -238,7 +249,7 @@ const productKindSchema = _enum([
|
|
|
238
249
|
"external",
|
|
239
250
|
"spec_only"
|
|
240
251
|
]);
|
|
241
|
-
// ../shared/dist/chunk-
|
|
252
|
+
// ../shared/dist/chunk-CrBJszrn.mjs
|
|
242
253
|
/** The manifest file at the root of a candidate's source bundle. */
|
|
243
254
|
const CANDIDATE_MANIFEST_FILENAME = "runtype-candidate.json";
|
|
244
255
|
const candidateRuntimeSchema = _enum([
|
|
@@ -292,6 +303,16 @@ function parseCandidateManifest(text) {
|
|
|
292
303
|
error: `${issue?.path.join(".") || "runtype-candidate.json"}: ${issue?.message ?? "invalid"}`
|
|
293
304
|
};
|
|
294
305
|
}
|
|
306
|
+
/** The conformance check's steps, in the order they run (6.9 "The conformance check"). */
|
|
307
|
+
const CANDIDATE_CONFORMANCE_STEPS = [
|
|
308
|
+
"manifest",
|
|
309
|
+
"start",
|
|
310
|
+
"two_turn",
|
|
311
|
+
"recall",
|
|
312
|
+
"model_call",
|
|
313
|
+
"tools",
|
|
314
|
+
"egress"
|
|
315
|
+
];
|
|
295
316
|
/** Bounded and credential-redacted output observed at the authenticated candidate MCP gateway. */
|
|
296
317
|
const simulationAccessToolOutcomeSchema = object({
|
|
297
318
|
name: string(),
|
|
@@ -600,7 +621,13 @@ const toolProcessCheckSchema = discriminatedUnion("assert", [
|
|
|
600
621
|
/** The arguments that make two calls the same fetch; absent compares every argument. */
|
|
601
622
|
keyArguments: array(argumentPathSchema).min(1).max(8).optional(),
|
|
602
623
|
/** Calls allowed per key before the check fails; defaults to 1. */
|
|
603
|
-
max: number().int().positive().max(1e3).optional()
|
|
624
|
+
max: number().int().positive().max(1e3).optional(),
|
|
625
|
+
/**
|
|
626
|
+
* A completed call to any of these starts the count again, so a read repeated to verify a write is not a repeat;
|
|
627
|
+
* a designed rename counts under its shown or its server name. Absent counts across the whole episode. Calls are
|
|
628
|
+
* read in the order they started: a read started alongside the write, before it finished, counts as after it.
|
|
629
|
+
*/
|
|
630
|
+
resetAfter: array(toolNameSchema).min(1).max(20).optional()
|
|
604
631
|
}),
|
|
605
632
|
object({
|
|
606
633
|
assert: literal("budget"),
|
|
@@ -1617,6 +1644,28 @@ const toolCallFactsSchema = object({
|
|
|
1617
1644
|
/** The frozen row of the suggestions the mini-agent filled into this call's designed error (D4); `exchangeId` stays the answer's. */
|
|
1618
1645
|
suggestionsExchangeId: string().nullable().optional()
|
|
1619
1646
|
});
|
|
1647
|
+
/**
|
|
1648
|
+
* A sandbox candidate's process as a failed turn or its episode's end found it. `outputTail` is text the candidate's
|
|
1649
|
+
* own code wrote, clipped and with secrets removed: untrusted data, never instructions, and never shown to a judge or
|
|
1650
|
+
* the simulated user.
|
|
1651
|
+
*/
|
|
1652
|
+
const candidateProcessCaptureSchema = object({
|
|
1653
|
+
state: _enum([
|
|
1654
|
+
"running",
|
|
1655
|
+
"exited",
|
|
1656
|
+
"killed",
|
|
1657
|
+
"stopped",
|
|
1658
|
+
"unknown"
|
|
1659
|
+
]),
|
|
1660
|
+
/** The exit code, when the process exited on its own. */
|
|
1661
|
+
exitCode: number().int().nullable(),
|
|
1662
|
+
outputTail: string().max(2e3),
|
|
1663
|
+
/** True when earlier output was dropped to keep the tail. */
|
|
1664
|
+
outputClipped: boolean(),
|
|
1665
|
+
/** True when the run's retention setting removed the output; the state is kept. */
|
|
1666
|
+
outputRemoved: literal(true).optional(),
|
|
1667
|
+
untrusted: literal(true)
|
|
1668
|
+
});
|
|
1620
1669
|
/** What one target turn passed through, per layer; `toolCalls` is empty for targets with no per-call view. */
|
|
1621
1670
|
const turnLayerFactsSchema = object({
|
|
1622
1671
|
harnessCapture: harnessCaptureSummarySchema.optional(),
|
|
@@ -1666,7 +1715,9 @@ const turnLayerFactsSchema = object({
|
|
|
1666
1715
|
inputTokens: number().int().nonnegative(),
|
|
1667
1716
|
outputTokens: number().int().nonnegative(),
|
|
1668
1717
|
costUsd: number().nonnegative()
|
|
1669
|
-
}).optional()
|
|
1718
|
+
}).optional(),
|
|
1719
|
+
/** A sandbox candidate's process, kept when the turn failed or the process had stopped by the episode's end. */
|
|
1720
|
+
candidateProcess: candidateProcessCaptureSchema.optional()
|
|
1670
1721
|
});
|
|
1671
1722
|
const egressRefusalReasonSchema = _enum([
|
|
1672
1723
|
"internal_range",
|
|
@@ -1712,6 +1763,16 @@ const episodeMetricsSchema = object({
|
|
|
1712
1763
|
scoringFailed: literal(true).optional(),
|
|
1713
1764
|
/** Scoring failed because no goal-judge attempt returned a valid verdict: the judge, not the episode, gave no verdict. */
|
|
1714
1765
|
goalJudgeModelError: literal(true).optional(),
|
|
1766
|
+
/**
|
|
1767
|
+
* An interrupted, unscored episode's side-effect graders that wrote no score because its state could not be read.
|
|
1768
|
+
* `guarded` is true when one of them checks a write that must not happen. `reason` has secrets removed and is absent
|
|
1769
|
+
* under the `metrics` data policy.
|
|
1770
|
+
*/
|
|
1771
|
+
unreadSideEffects: object({
|
|
1772
|
+
graderIndexes: array(number().int().nonnegative()),
|
|
1773
|
+
guarded: boolean(),
|
|
1774
|
+
reason: string().optional()
|
|
1775
|
+
}).optional(),
|
|
1715
1776
|
turns: number().int().nonnegative(),
|
|
1716
1777
|
targetCostUsd: number().nullable(),
|
|
1717
1778
|
clientAgentCostUsd: number().nullable(),
|
|
@@ -1748,6 +1809,11 @@ const layerStatSchema = object({
|
|
|
1748
1809
|
costUsd: number().nullable(),
|
|
1749
1810
|
p50LatencyMs: number().nullable()
|
|
1750
1811
|
});
|
|
1812
|
+
/** Something in the plan the caller should know before starting the run. `code` is stable; new codes may be added. */
|
|
1813
|
+
const runEstimateWarningSchema = object({
|
|
1814
|
+
code: string(),
|
|
1815
|
+
message: string()
|
|
1816
|
+
});
|
|
1751
1817
|
/** The dry-run estimate (`estimateRun`); admission compares `costUsd.expected` with the cap. */
|
|
1752
1818
|
const runEstimateSchema = object({
|
|
1753
1819
|
episodes: number().int().nonnegative(),
|
|
@@ -1774,7 +1840,19 @@ const runEstimateSchema = object({
|
|
|
1774
1840
|
catalogReason: _enum(["no_history", "changed"]).optional(),
|
|
1775
1841
|
unpricedModels: array(string()),
|
|
1776
1842
|
maxSpendUsd: number(),
|
|
1777
|
-
overBudget: boolean()
|
|
1843
|
+
overBudget: boolean(),
|
|
1844
|
+
/** Absent when there is nothing to warn about. */
|
|
1845
|
+
warnings: array(runEstimateWarningSchema).optional(),
|
|
1846
|
+
/**
|
|
1847
|
+
* Per variant id: its conversations, the expected and high cost of one (means over its tasks), and the most its
|
|
1848
|
+
* product may spend in one conversation (its longest task at the turn limit).
|
|
1849
|
+
*/
|
|
1850
|
+
byVariant: record(string(), object({
|
|
1851
|
+
episodes: number().int().nonnegative(),
|
|
1852
|
+
expectedUsd: number(),
|
|
1853
|
+
highUsd: number(),
|
|
1854
|
+
targetHighUsd: number()
|
|
1855
|
+
})).optional()
|
|
1778
1856
|
});
|
|
1779
1857
|
/** One episode an inline run has started and not finished, with the agent turns it has completed so far. */
|
|
1780
1858
|
const simulationActiveEpisodeSchema = object({
|
|
@@ -1814,6 +1892,30 @@ const simulationRunSchema = object({
|
|
|
1814
1892
|
*/
|
|
1815
1893
|
activeEpisodes: array(simulationActiveEpisodeSchema).optional()
|
|
1816
1894
|
});
|
|
1895
|
+
/** A run's ended conversations, counted as they end: by ending, by why they were left out, and those not scored. */
|
|
1896
|
+
const simulationRunProgressSchema = object({
|
|
1897
|
+
/** Ended conversations by how they ended; one that ended but was not scored counts under `notScored` instead. */
|
|
1898
|
+
byTermination: partialRecord(simTerminationSchema, number().int().nonnegative()),
|
|
1899
|
+
/** Conversations that ran to their end but whose graders returned no score. */
|
|
1900
|
+
notScored: number().int().nonnegative(),
|
|
1901
|
+
/** Ended conversations left out of every pass rate, by reason. */
|
|
1902
|
+
byLeftOutReason: partialRecord(episodeLeftOutReasonSchema, number().int().nonnegative()),
|
|
1903
|
+
/** Conversations under `agent_error` that ended because the client model's provider stopped answering; left out. */
|
|
1904
|
+
clientModelStalls: number().int().nonnegative(),
|
|
1905
|
+
/** When the latest conversation ended; null until one has. */
|
|
1906
|
+
lastEndedAt: isoDate.nullable()
|
|
1907
|
+
});
|
|
1908
|
+
/**
|
|
1909
|
+
* What `repairSimulationRun` would do, from the same selection the run engine makes: grade `regrade` conversations
|
|
1910
|
+
* again from their stored transcripts, and play at least `replay` again, which spends credits. The engine can also play
|
|
1911
|
+
* a recording miss whose tool was recorded since, or a conversation it finished but never stored.
|
|
1912
|
+
*/
|
|
1913
|
+
const simulationRunRepairPreviewSchema = object({
|
|
1914
|
+
regrade: number().int().nonnegative(),
|
|
1915
|
+
replay: number().int().nonnegative(),
|
|
1916
|
+
/** Interrupted conversations repair keeps instead of playing again, because a safety check failed or went unread. */
|
|
1917
|
+
keptForSafety: number().int().nonnegative().optional()
|
|
1918
|
+
});
|
|
1817
1919
|
/** A saved episode, without its transcript. */
|
|
1818
1920
|
const simulationEpisodeSchema = object({
|
|
1819
1921
|
id: entityId$1,
|
|
@@ -1942,11 +2044,15 @@ const reportVariantSummarySchema = object({
|
|
|
1942
2044
|
passed: number().int(),
|
|
1943
2045
|
failed: number().int()
|
|
1944
2046
|
}).optional(),
|
|
1945
|
-
/**
|
|
2047
|
+
/**
|
|
2048
|
+
* Absent checks over the conversations that ran; `notRun` counts the ones with an absent check that didn't run, and
|
|
2049
|
+
* `unread` the interrupted ones that ran but whose state could not be read to check it.
|
|
2050
|
+
*/
|
|
1946
2051
|
writeGuards: object({
|
|
1947
2052
|
passed: number().int(),
|
|
1948
2053
|
failed: number().int(),
|
|
1949
|
-
notRun: number().int()
|
|
2054
|
+
notRun: number().int(),
|
|
2055
|
+
unread: number().int().optional()
|
|
1950
2056
|
}).optional(),
|
|
1951
2057
|
/** The exists, linked and in_quarantine checks over every scored conversation, including ones that didn't run. */
|
|
1952
2058
|
expectedWrites: object({
|
|
@@ -2263,6 +2369,8 @@ const investmentSectionSchema = object({
|
|
|
2263
2369
|
recordingMissPairsDropped: number().int().positive().optional(),
|
|
2264
2370
|
/** Pairs left out because either side stalled on its client model and neither missed; absent when none were. */
|
|
2265
2371
|
clientModelStallPairsDropped: number().int().positive().optional(),
|
|
2372
|
+
/** Pairs left out because either side could not be scored, and neither missed nor stalled; absent when none were. */
|
|
2373
|
+
scoringFailedPairsDropped: number().int().positive().optional(),
|
|
2266
2374
|
headline: _enum(["recommended", "indicative"]),
|
|
2267
2375
|
reason: string().nullable(),
|
|
2268
2376
|
/** Injection and write-guard checks the design's own conversations failed; absent when none. Never recommended then. */
|
|
@@ -2310,7 +2418,10 @@ const comparisonQualitySchema = object({
|
|
|
2310
2418
|
])),
|
|
2311
2419
|
missingGradeEpisodes: number().int().nonnegative(),
|
|
2312
2420
|
interruptedEpisodes: number().int().nonnegative(),
|
|
2313
|
-
/**
|
|
2421
|
+
/**
|
|
2422
|
+
* Unscored finished episodes other than `recording_miss`, client-model stalls, episodes that could not be scored and
|
|
2423
|
+
* `didnt_run`, which have their own counts.
|
|
2424
|
+
*/
|
|
2314
2425
|
unscoredEpisodes: number().int().nonnegative(),
|
|
2315
2426
|
/**
|
|
2316
2427
|
* Episodes that ended `recording_miss`. Each leaves the paired comparison with its partner; past
|
|
@@ -2324,6 +2435,15 @@ const comparisonQualitySchema = object({
|
|
|
2324
2435
|
clientModelStallEpisodes: number().int().nonnegative().optional(),
|
|
2325
2436
|
/** Pairs left out because either side stalled on its client model and neither ended `recording_miss`. */
|
|
2326
2437
|
clientModelStallPairsDropped: number().int().nonnegative().optional(),
|
|
2438
|
+
/**
|
|
2439
|
+
* Finished episodes that could not be scored: the graders threw or reached no verdict. Also counted in
|
|
2440
|
+
* `missingGradeEpisodes`. In a paired comparison each leaves with its partner and counts with recording misses and client-model
|
|
2441
|
+
* stalls toward `RECORDING_MISS_SHARE_CAP`; past it, or in a version with no comparison, the reason is
|
|
2442
|
+
* `incomplete_grading`. Absent when none.
|
|
2443
|
+
*/
|
|
2444
|
+
scoringFailedEpisodes: number().int().nonnegative().optional(),
|
|
2445
|
+
/** Pairs left out because either side could not be scored, and neither missed a recording nor stalled. */
|
|
2446
|
+
scoringFailedPairsDropped: number().int().nonnegative().optional(),
|
|
2327
2447
|
outcomeScope: _enum([
|
|
2328
2448
|
"task_completion",
|
|
2329
2449
|
"safety",
|
|
@@ -2474,6 +2594,8 @@ const simulationReportBodySchema = object({
|
|
|
2474
2594
|
/** Pairs left out because either side stalled on its client model and neither ended `recording_miss`. */
|
|
2475
2595
|
clientModelStallPairsDropped: number().int().nonnegative().optional(),
|
|
2476
2596
|
scoringFailedEpisodes: number().int().optional(),
|
|
2597
|
+
/** Pairs left out because either side could not be scored, and neither missed a recording nor stalled. */
|
|
2598
|
+
scoringFailedPairsDropped: number().int().nonnegative().optional(),
|
|
2477
2599
|
spendCapEpisodes: number().int().optional(),
|
|
2478
2600
|
engineErrorEpisodes: number().int().optional(),
|
|
2479
2601
|
didntRunEpisodes: number().int().nonnegative().optional(),
|
|
@@ -2767,6 +2889,41 @@ const simulationDesignBriefSchema = object({
|
|
|
2767
2889
|
trend: array(designBriefTrendPointSchema)
|
|
2768
2890
|
});
|
|
2769
2891
|
object({ briefs: array(simulationDesignBriefSchema) });
|
|
2892
|
+
const candidateConformanceStepSchema = _enum(CANDIDATE_CONFORMANCE_STEPS);
|
|
2893
|
+
/** A step's status; `skipped` is a step that did not apply or could not be verified. */
|
|
2894
|
+
const CANDIDATE_CONFORMANCE_STEP_STATUSES = [
|
|
2895
|
+
"passed",
|
|
2896
|
+
"failed",
|
|
2897
|
+
"skipped"
|
|
2898
|
+
];
|
|
2899
|
+
/** Where the check's tools came from: the one-tool fixture, or a variant's synthetic dataset stand-in. */
|
|
2900
|
+
const CANDIDATE_CONFORMANCE_TOOL_SOURCES = ["fixture", "stand_in"];
|
|
2901
|
+
/**
|
|
2902
|
+
* One step's outcome; `skipped` is a step that did not apply, such as recall for a `single_turn` candidate, or one
|
|
2903
|
+
* the sandbox could not verify, such as egress where no refusal record is kept.
|
|
2904
|
+
*/
|
|
2905
|
+
const candidateConformanceStepResultSchema = object({
|
|
2906
|
+
step: candidateConformanceStepSchema,
|
|
2907
|
+
status: _enum(CANDIDATE_CONFORMANCE_STEP_STATUSES),
|
|
2908
|
+
detail: string().max(1e3).nullable()
|
|
2909
|
+
});
|
|
2910
|
+
object({
|
|
2911
|
+
bundleSha256: string().regex(/^[a-f0-9]{64}$/),
|
|
2912
|
+
passed: boolean(),
|
|
2913
|
+
/** The first step that failed, or null when every step passed. */
|
|
2914
|
+
failedStep: candidateConformanceStepSchema.nullable(),
|
|
2915
|
+
steps: array(candidateConformanceStepResultSchema),
|
|
2916
|
+
/** Hosts off the allowlist the candidate tried to reach; a non-empty list fails the check. */
|
|
2917
|
+
blockedHosts: array(string().max(255)).max(50),
|
|
2918
|
+
startMs: number().nonnegative().nullable(),
|
|
2919
|
+
checkedAt: string().datetime({ offset: true }),
|
|
2920
|
+
/** Where the tools came from; absent on results stored before it, which used the fixture. */
|
|
2921
|
+
toolSource: _enum(CANDIDATE_CONFORMANCE_TOOL_SOURCES).optional(),
|
|
2922
|
+
/** The tools the candidate's MCP URL served when it listed them; empty when it never listed. */
|
|
2923
|
+
toolsListed: array(string().max(255)).max(500).optional(),
|
|
2924
|
+
/** Each tool the candidate called, once, in the order first called. */
|
|
2925
|
+
toolsCalled: array(string().max(255)).max(500).optional()
|
|
2926
|
+
});
|
|
2770
2927
|
const entityId = string().min(1).max(255);
|
|
2771
2928
|
/** Every list route's page envelope: `data` plus a keyset cursor. */
|
|
2772
2929
|
function simulationPageSchema(item) {
|
|
@@ -3088,15 +3245,25 @@ const simulationRunResponseSchema = object({
|
|
|
3088
3245
|
object({
|
|
3089
3246
|
/** Comma-separated server tools; the response then counts this run's live calls to each that the recorder kept. */
|
|
3090
3247
|
recordedCallsFor: string().max(4096).optional() });
|
|
3091
|
-
simulationRunResponseSchema.extend({
|
|
3092
|
-
/** Per tool named in `recordedCallsFor`: this run's live calls the recorder kept, 0 for a tool with none. */
|
|
3093
|
-
recordedCalls: record(string(), number().int()).optional()
|
|
3248
|
+
simulationRunResponseSchema.extend({
|
|
3249
|
+
/** Per tool named in `recordedCallsFor`: this run's live calls the recorder kept, 0 for a tool with none. */
|
|
3250
|
+
recordedCalls: record(string(), number().int()).optional(),
|
|
3251
|
+
/** The run's ended conversations counted by how they ended, current at the time of the read; omitted when unavailable. */
|
|
3252
|
+
progress: simulationRunProgressSchema.optional(),
|
|
3253
|
+
/** Present when a conversation was not scored and a repair can reopen the run: finished, not cancelled, budget left. */
|
|
3254
|
+
repairPreview: simulationRunRepairPreviewSchema.optional()
|
|
3255
|
+
});
|
|
3094
3256
|
object({ run: simulationRunSchema });
|
|
3095
3257
|
simulationRunResponseSchema.extend({ repair: object({
|
|
3096
3258
|
/** Episodes whose AI judge failed, graded again from their stored transcripts. */
|
|
3097
3259
|
regrading: number().int(),
|
|
3098
3260
|
/** Episodes the platform kept from running, and recording misses since recorded, played again under fresh ids. */
|
|
3099
|
-
replaying: number().int()
|
|
3261
|
+
replaying: number().int(),
|
|
3262
|
+
/**
|
|
3263
|
+
* Episodes interrupted mid-turn that repair kept instead of playing again: a side-effect or injection check failed
|
|
3264
|
+
* or could not be read, and a replay would delete that record. Absent when none.
|
|
3265
|
+
*/
|
|
3266
|
+
keptForSafety: number().int().optional()
|
|
3100
3267
|
}) });
|
|
3101
3268
|
simulationRunResponseSchema.extend({ advance: object({
|
|
3102
3269
|
/** Episodes this call finished; one it parked at the time budget resumes on the next call. */
|
|
@@ -3803,6 +3970,11 @@ function printConformance(result) {
|
|
|
3803
3970
|
const status = step.status === "passed" ? "" : ` ${step.status}`;
|
|
3804
3971
|
console.log(` ${STEP_MARK[step.status]} ${step.step}${status}${detail}`);
|
|
3805
3972
|
}
|
|
3973
|
+
if (result.toolsListed) {
|
|
3974
|
+
const source = result.toolSource === "stand_in" ? " (synthetic dataset stand-in)" : "";
|
|
3975
|
+
console.log(` ${chalk.gray(`Tools listed${source}:`)} ${result.toolsListed.join(", ") || "none"}`);
|
|
3976
|
+
}
|
|
3977
|
+
if (result.toolsCalled) console.log(` ${chalk.gray("Tools called:")} ${result.toolsCalled.join(", ") || "none"}`);
|
|
3806
3978
|
if (result.blockedHosts.length > 0) console.log(chalk.red(` Blocked hosts: ${result.blockedHosts.join(", ")}`));
|
|
3807
3979
|
}
|
|
3808
3980
|
function printPushSummary(uploaded, change, savedArchive) {
|
|
@@ -3819,11 +3991,15 @@ function printPushSummary(uploaded, change, savedArchive) {
|
|
|
3819
3991
|
console.log(`\n${chalk.cyan("Bundle for a sandbox_candidate target config:")}`);
|
|
3820
3992
|
console.log(JSON.stringify({ bundle: uploaded.bundle }, null, 2));
|
|
3821
3993
|
}
|
|
3994
|
+
/** Refuses option sets that cannot succeed, before anything is uploaded or created. */
|
|
3822
3995
|
function validatePushOptions(options) {
|
|
3823
3996
|
if (options.target !== void 0 && options.createTarget !== void 0) throw new CandidatePushError("INVALID_INPUT", "Pass either --target or --create-target, not both.");
|
|
3824
3997
|
const hasTarget = options.target !== void 0 || options.createTarget !== void 0;
|
|
3825
3998
|
if (options.mcpTarget !== void 0 && !hasTarget) throw new CandidatePushError("INVALID_INPUT", "--mcp-target needs --target or --create-target.");
|
|
3826
3999
|
if (options.conformance && !hasTarget) throw new CandidatePushError("INVALID_INPUT", "--conformance needs --target or --create-target: the check runs against a target.");
|
|
4000
|
+
if (options.simulation === void 0 !== (options.variant === void 0)) throw new CandidatePushError("INVALID_INPUT", "Pass --simulation and --variant together.");
|
|
4001
|
+
if (options.variant !== void 0 && !options.conformance) throw new CandidatePushError("INVALID_INPUT", "--simulation and --variant need --conformance.");
|
|
4002
|
+
if (options.variant !== void 0 && options.target === void 0) throw new CandidatePushError("INVALID_INPUT", "--variant needs --target: the check runs against the variant's own target, which a new target cannot be.");
|
|
3827
4003
|
}
|
|
3828
4004
|
async function runPush(path, options) {
|
|
3829
4005
|
validatePushOptions(options);
|
|
@@ -3859,7 +4035,10 @@ async function runPush(path, options) {
|
|
|
3859
4035
|
throw describeCandidateApiError(error, "upload");
|
|
3860
4036
|
});
|
|
3861
4037
|
const change = await pointTargetAtBundle(client, uploaded, options);
|
|
3862
|
-
const conformance = options.conformance && change ? await client.post(`/simulations/targets/${encodeURIComponent(change.target.id)}/conformance`,
|
|
4038
|
+
const conformance = options.conformance && change ? await client.post(`/simulations/targets/${encodeURIComponent(change.target.id)}/conformance`, options.variant !== void 0 ? {
|
|
4039
|
+
simulationId: options.simulation,
|
|
4040
|
+
variantId: options.variant
|
|
4041
|
+
} : {}).catch((error) => {
|
|
3863
4042
|
throw describeCandidateApiError(error, "conformance");
|
|
3864
4043
|
}) : void 0;
|
|
3865
4044
|
const savedArchive = input.kind === "directory" && options.out ? archive : void 0;
|
|
@@ -3902,7 +4081,7 @@ function reportFailure(error, json) {
|
|
|
3902
4081
|
}
|
|
3903
4082
|
const simulationsCommand = new Command("simulations").description("Simulations: sandbox candidates, recorded tool exchanges and reports");
|
|
3904
4083
|
registerToolMemoryCommands(simulationsCommand);
|
|
3905
|
-
simulationsCommand.command("candidate").description("Sandbox candidates: an agent run as real code in a Runtype sandbox").command("push <path>").description("Upload a candidate bundle: a directory with runtype-candidate.json at its root (packed reproducibly) or a .tgz / .tar.gz").option("--target <id>", "Point this sandbox_candidate target at the new bundle, keeping its other config").option("--create-target <name>", "Create a sandbox_candidate target for the new bundle").option("--mcp-target <id>", "With --target or --create-target: the external_mcp target whose tools episodes get (config.mcpTargetId)").option("--conformance", "Run the conformance check on the target after the push").option("--out <file>", "Also save the packed archive to this file (directory input only)").option("--json", "Output as JSON").action(async (path, options) => {
|
|
4084
|
+
simulationsCommand.command("candidate").description("Sandbox candidates: an agent run as real code in a Runtype sandbox").command("push <path>").description("Upload a candidate bundle: a directory with runtype-candidate.json at its root (packed reproducibly) or a .tgz / .tar.gz").option("--target <id>", "Point this sandbox_candidate target at the new bundle, keeping its other config").option("--create-target <name>", "Create a sandbox_candidate target for the new bundle").option("--mcp-target <id>", "With --target or --create-target: the external_mcp target whose tools episodes get (config.mcpTargetId)").option("--conformance", "Run the conformance check on the target after the push").option("--simulation <id>", "With --conformance and --variant: the simulation the variant belongs to").option("--variant <id>", "With --conformance and --target: check against this variant's synthetic dataset tools instead of the one-tool fixture").option("--out <file>", "Also save the packed archive to this file (directory input only)").option("--json", "Output as JSON").action(async (path, options) => {
|
|
3906
4085
|
let passed;
|
|
3907
4086
|
try {
|
|
3908
4087
|
passed = await runPush(path, options);
|
package/dist/index.js
CHANGED
|
@@ -71,7 +71,7 @@ const COMMAND_REGISTRY = [
|
|
|
71
71
|
name: "init",
|
|
72
72
|
term: "init [options]",
|
|
73
73
|
description: "Set up Runtype CLI with guided onboarding",
|
|
74
|
-
load: async () => (await import("./chunk-
|
|
74
|
+
load: async () => (await import("./chunk-B5z7FcMZ.js")).initCommand
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
name: "login",
|
|
@@ -107,7 +107,7 @@ const COMMAND_REGISTRY = [
|
|
|
107
107
|
name: "records",
|
|
108
108
|
term: "records",
|
|
109
109
|
description: "Manage records",
|
|
110
|
-
load: async () => (await import("./chunk-
|
|
110
|
+
load: async () => (await import("./chunk-hnOvAcZx.js")).recordsCommand
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
name: "collections",
|
|
@@ -143,7 +143,7 @@ const COMMAND_REGISTRY = [
|
|
|
143
143
|
name: "sandbox-deployments",
|
|
144
144
|
term: "sandbox-deployments",
|
|
145
145
|
description: "Author managed deployments using retained runtime profiles and uploaded source IDs",
|
|
146
|
-
load: async () => (await import("./chunk-
|
|
146
|
+
load: async () => (await import("./chunk-DxS1ac3j.js")).sandboxDeploymentsCommand
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
name: "tools",
|
|
@@ -167,7 +167,7 @@ const COMMAND_REGISTRY = [
|
|
|
167
167
|
name: "products",
|
|
168
168
|
term: "products",
|
|
169
169
|
description: "Manage products",
|
|
170
|
-
load: async () => (await import("./chunk-
|
|
170
|
+
load: async () => (await import("./chunk-CwrDbUsn.js")).productsCommand
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
name: "dispatch",
|
|
@@ -203,13 +203,13 @@ const COMMAND_REGISTRY = [
|
|
|
203
203
|
name: "traces",
|
|
204
204
|
term: "traces",
|
|
205
205
|
description: "Mine traces: aggregate runs, read a bounded slice of one trace, compare two runs or cohorts",
|
|
206
|
-
load: async () => (await import("./chunk-
|
|
206
|
+
load: async () => (await import("./chunk-CQwXQ3jd.js")).tracesCommand
|
|
207
207
|
},
|
|
208
208
|
{
|
|
209
209
|
name: "agents",
|
|
210
210
|
term: "agents",
|
|
211
211
|
description: "Manage agents",
|
|
212
|
-
load: async () => (await import("./chunk-
|
|
212
|
+
load: async () => (await import("./chunk-CcsI1Y8O.js")).agentsCommand
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
name: "models",
|
|
@@ -234,7 +234,7 @@ const COMMAND_REGISTRY = [
|
|
|
234
234
|
aliases: ["keys"],
|
|
235
235
|
term: "api-keys|keys",
|
|
236
236
|
description: "Manage API keys",
|
|
237
|
-
load: async () => (await import("./chunk-
|
|
237
|
+
load: async () => (await import("./chunk-BWN6wf35.js")).apiKeysCommand
|
|
238
238
|
},
|
|
239
239
|
{
|
|
240
240
|
name: "client-tokens",
|
|
@@ -246,7 +246,7 @@ const COMMAND_REGISTRY = [
|
|
|
246
246
|
name: "persona",
|
|
247
247
|
term: "persona",
|
|
248
248
|
description: "Set up Persona: create an agent, client token, and embed snippet",
|
|
249
|
-
load: async () => (await import("./chunk-
|
|
249
|
+
load: async () => (await import("./chunk-4Ykx-xWg.js")).personaCommand
|
|
250
250
|
},
|
|
251
251
|
{
|
|
252
252
|
name: "analytics",
|
|
@@ -276,7 +276,7 @@ const COMMAND_REGISTRY = [
|
|
|
276
276
|
name: "marathon",
|
|
277
277
|
term: "marathon [options] <agent>",
|
|
278
278
|
description: "Run a multi-session agent task (alias for agents task)",
|
|
279
|
-
load: async () => (await import("./chunk-
|
|
279
|
+
load: async () => (await import("./chunk-DWj7uC90.js")).createMarathonCommand()
|
|
280
280
|
},
|
|
281
281
|
{
|
|
282
282
|
name: "tail",
|
|
@@ -288,13 +288,13 @@ const COMMAND_REGISTRY = [
|
|
|
288
288
|
name: "events",
|
|
289
289
|
term: "events",
|
|
290
290
|
description: "Watch product events (failed executions, approvals, eval results, ...)",
|
|
291
|
-
load: async () => (await import("./chunk-
|
|
291
|
+
load: async () => (await import("./chunk-nTKUwz6t.js")).eventsCommand
|
|
292
292
|
},
|
|
293
293
|
{
|
|
294
294
|
name: "validate-product",
|
|
295
295
|
term: "validate-product [options] [input]",
|
|
296
296
|
description: "Validate a product (FPO) or FPO template locally (no API call)",
|
|
297
|
-
load: async () => (await import("./chunk-
|
|
297
|
+
load: async () => (await import("./chunk-FfQFwZ7q.js")).validateProductCommand
|
|
298
298
|
},
|
|
299
299
|
{
|
|
300
300
|
name: "deploy",
|
|
@@ -358,7 +358,7 @@ const COMMAND_REGISTRY = [
|
|
|
358
358
|
name: "simulations",
|
|
359
359
|
term: "simulations",
|
|
360
360
|
description: "Simulations: sandbox candidates, recorded tool exchanges and reports",
|
|
361
|
-
load: async () => (await import("./chunk-
|
|
361
|
+
load: async () => (await import("./chunk-w76cMuXv.js")).simulationsCommand
|
|
362
362
|
},
|
|
363
363
|
{
|
|
364
364
|
name: "apps",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runtypelabs/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.60.0",
|
|
4
4
|
"description": "Command-line interface for Runtype AI platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"@modelcontextprotocol/core": "2.3.1",
|
|
14
14
|
"@napi-rs/keyring": "2.1.0",
|
|
15
15
|
"@runtypelabs/ink-components": "0.3.15",
|
|
16
|
-
"@runtypelabs/sdk": "11.24.
|
|
16
|
+
"@runtypelabs/sdk": "11.24.2",
|
|
17
17
|
"@runtypelabs/terminal-animations": "0.2.4",
|
|
18
18
|
"add-mcp": "2.6.0",
|
|
19
19
|
"chalk": "^5.3.0",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@runtypelabs/mcp-cli": "0.4.1",
|
|
41
41
|
"@runtypelabs/model-execution": "0.42.2",
|
|
42
42
|
"@runtypelabs/persona": "4.38.1",
|
|
43
|
-
"@runtypelabs/shared": "3.
|
|
43
|
+
"@runtypelabs/shared": "3.124.0",
|
|
44
44
|
"@types/express": "^5.0.6",
|
|
45
45
|
"@types/micromatch": "^4.0.9",
|
|
46
46
|
"@types/node": "^25.3.3",
|