@perstack/core 0.0.24 → 0.0.26
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/src/index.d.ts +11 -0
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/package.json +4 -4
package/dist/src/index.d.ts
CHANGED
|
@@ -1299,6 +1299,7 @@ type PerstackConfigSkill = {
|
|
|
1299
1299
|
args?: string[];
|
|
1300
1300
|
requiredEnv?: string[];
|
|
1301
1301
|
allowedDomains?: string[];
|
|
1302
|
+
lazyInit?: boolean;
|
|
1302
1303
|
} | {
|
|
1303
1304
|
type: "mcpSseSkill";
|
|
1304
1305
|
description?: string;
|
|
@@ -1446,6 +1447,7 @@ declare const perstackConfigSchema: z.ZodObject<{
|
|
|
1446
1447
|
args: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1447
1448
|
requiredEnv: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1448
1449
|
allowedDomains: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1450
|
+
lazyInit: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
1449
1451
|
}, z.core.$strip>, z.ZodObject<{
|
|
1450
1452
|
type: z.ZodLiteral<"mcpSseSkill">;
|
|
1451
1453
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -3155,6 +3157,9 @@ type RuntimeEventPayloads = {
|
|
|
3155
3157
|
};
|
|
3156
3158
|
connectDurationMs?: number;
|
|
3157
3159
|
totalDurationMs?: number;
|
|
3160
|
+
spawnDurationMs?: number;
|
|
3161
|
+
handshakeDurationMs?: number;
|
|
3162
|
+
toolDiscoveryDurationMs?: number;
|
|
3158
3163
|
};
|
|
3159
3164
|
skillStderr: {
|
|
3160
3165
|
skillName: string;
|
|
@@ -3210,6 +3215,8 @@ type AdapterRunParams = {
|
|
|
3210
3215
|
storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>;
|
|
3211
3216
|
retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>;
|
|
3212
3217
|
workspace?: string;
|
|
3218
|
+
/** Additional environment variable names to pass to Docker runtime */
|
|
3219
|
+
additionalEnvKeys?: string[];
|
|
3213
3220
|
};
|
|
3214
3221
|
type AdapterRunResult = {
|
|
3215
3222
|
checkpoint: Checkpoint;
|
|
@@ -3386,6 +3393,8 @@ interface CommandOptions {
|
|
|
3386
3393
|
runId?: string;
|
|
3387
3394
|
/** Paths to .env files */
|
|
3388
3395
|
envPath?: string[];
|
|
3396
|
+
/** Environment variable names to pass to Docker runtime */
|
|
3397
|
+
env?: string[];
|
|
3389
3398
|
/** Enable verbose logging */
|
|
3390
3399
|
verbose?: boolean;
|
|
3391
3400
|
/** Continue most recent job */
|
|
@@ -3433,6 +3442,7 @@ declare const runCommandInputSchema: z.ZodObject<{
|
|
|
3433
3442
|
jobId: z.ZodOptional<z.ZodString>;
|
|
3434
3443
|
runId: z.ZodOptional<z.ZodString>;
|
|
3435
3444
|
envPath: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
|
|
3445
|
+
env: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
|
|
3436
3446
|
verbose: z.ZodOptional<z.ZodBoolean>;
|
|
3437
3447
|
continue: z.ZodOptional<z.ZodBoolean>;
|
|
3438
3448
|
continueJob: z.ZodOptional<z.ZodString>;
|
|
@@ -3480,6 +3490,7 @@ declare const startCommandInputSchema: z.ZodObject<{
|
|
|
3480
3490
|
jobId: z.ZodOptional<z.ZodString>;
|
|
3481
3491
|
runId: z.ZodOptional<z.ZodString>;
|
|
3482
3492
|
envPath: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
|
|
3493
|
+
env: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
|
|
3483
3494
|
verbose: z.ZodOptional<z.ZodBoolean>;
|
|
3484
3495
|
continue: z.ZodOptional<z.ZodBoolean>;
|
|
3485
3496
|
continueJob: z.ZodOptional<z.ZodString>;
|
package/dist/src/index.js
CHANGED
|
@@ -666,7 +666,7 @@ var mcpStdioSkillSchema = z.object({
|
|
|
666
666
|
packageName: z.string().optional(),
|
|
667
667
|
args: z.array(z.string()).optional().default([]),
|
|
668
668
|
requiredEnv: z.array(z.string()).optional().default([]),
|
|
669
|
-
lazyInit: z.boolean().optional().default(
|
|
669
|
+
lazyInit: z.boolean().optional().default(false)
|
|
670
670
|
});
|
|
671
671
|
var mcpSseSkillSchema = z.object({
|
|
672
672
|
type: z.literal("mcpSseSkill"),
|
|
@@ -986,7 +986,8 @@ var perstackConfigSchema = z.object({
|
|
|
986
986
|
packageName: z.string().optional(),
|
|
987
987
|
args: z.array(z.string()).optional(),
|
|
988
988
|
requiredEnv: z.array(z.string()).optional(),
|
|
989
|
-
allowedDomains: z.array(domainPatternSchema).optional()
|
|
989
|
+
allowedDomains: z.array(domainPatternSchema).optional(),
|
|
990
|
+
lazyInit: z.boolean().optional().default(false)
|
|
990
991
|
}),
|
|
991
992
|
z.object({
|
|
992
993
|
type: z.literal("mcpSseSkill"),
|
|
@@ -1050,6 +1051,7 @@ var commandOptionsSchema = z.object({
|
|
|
1050
1051
|
jobId: z.string().optional(),
|
|
1051
1052
|
runId: z.string().optional(),
|
|
1052
1053
|
envPath: z.array(z.string()).optional().transform((value) => value && value.length > 0 ? value : void 0),
|
|
1054
|
+
env: z.array(z.string()).optional().transform((value) => value && value.length > 0 ? value : void 0),
|
|
1053
1055
|
verbose: z.boolean().optional(),
|
|
1054
1056
|
continue: z.boolean().optional(),
|
|
1055
1057
|
continueJob: z.string().optional(),
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/base-adapter.ts","../../src/adapters/event-creators.ts","../../src/adapters/registry.ts","../../src/constants/constants.ts","../../src/known-models/index.ts","../../src/schemas/message-part.ts","../../src/schemas/message.ts","../../src/schemas/runtime-name.ts","../../src/schemas/tool-call.ts","../../src/schemas/tool-result.ts","../../src/schemas/usage.ts","../../src/schemas/checkpoint.ts","../../src/schemas/skill.ts","../../src/schemas/expert.ts","../../src/schemas/job.ts","../../src/schemas/provider-config.ts","../../src/schemas/perstack-toml.ts","../../src/schemas/run-command.ts","../../src/schemas/runtime.ts","../../src/schemas/step.ts","../../src/utils/env-filter.ts","../../src/utils/zod-error.ts"],"names":["z","isPrivateOrLocalIP","sseEndpointSchema","createId"],"mappings":"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","file":"index.js","sourcesContent":["import type { ChildProcess } from \"node:child_process\"\nimport { spawn } from \"node:child_process\"\nimport type { Expert } from \"../schemas/expert.js\"\nimport type {\n AdapterRunParams,\n AdapterRunResult,\n PrerequisiteResult,\n RuntimeAdapter,\n RuntimeExpertConfig,\n} from \"./types.js\"\n\nexport type ExecResult = {\n stdout: string\n stderr: string\n exitCode: number\n}\n\nexport abstract class BaseAdapter implements RuntimeAdapter {\n abstract readonly name: string\n abstract checkPrerequisites(): Promise<PrerequisiteResult>\n abstract run(params: AdapterRunParams): Promise<AdapterRunResult>\n\n convertExpert(expert: Expert): RuntimeExpertConfig {\n return { instruction: expert.instruction }\n }\n\n protected execCommand(args: string[]): Promise<ExecResult> {\n return new Promise((resolve) => {\n const [cmd, ...cmdArgs] = args\n if (!cmd) {\n resolve({ stdout: \"\", stderr: \"\", exitCode: 127 })\n return\n }\n const proc = spawn(cmd, cmdArgs, { cwd: process.cwd(), stdio: [\"pipe\", \"pipe\", \"pipe\"] })\n let stdout = \"\"\n let stderr = \"\"\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString()\n })\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString()\n })\n proc.on(\"close\", (code) => {\n resolve({ stdout, stderr, exitCode: code ?? 127 })\n })\n proc.on(\"error\", () => {\n resolve({ stdout: \"\", stderr: \"\", exitCode: 127 })\n })\n })\n }\n\n protected executeWithTimeout(proc: ChildProcess, timeout: number): Promise<ExecResult> {\n return new Promise((resolve, reject) => {\n let stdout = \"\"\n let stderr = \"\"\n const timer = setTimeout(() => {\n proc.kill(\"SIGTERM\")\n reject(new Error(`${this.name} timed out after ${timeout}ms`))\n }, timeout)\n proc.stdout?.on(\"data\", (data) => {\n stdout += data.toString()\n })\n proc.stderr?.on(\"data\", (data) => {\n stderr += data.toString()\n })\n proc.on(\"close\", (code) => {\n clearTimeout(timer)\n resolve({ stdout, stderr, exitCode: code ?? 127 })\n })\n proc.on(\"error\", (err) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Checkpoint } from \"../schemas/checkpoint.js\"\nimport type { ExpertMessage, ToolMessage } from \"../schemas/message.js\"\nimport type { RunEvent, RuntimeEvent } from \"../schemas/runtime.js\"\nimport type { RuntimeName } from \"../schemas/runtime-name.js\"\nimport type { ToolCall } from \"../schemas/tool-call.js\"\nimport type { ToolResult } from \"../schemas/tool-result.js\"\nimport type { Usage } from \"../schemas/usage.js\"\n\nexport function createEmptyUsage(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n }\n}\n\nexport type CreateCheckpointParams = {\n jobId: string\n runId: string\n expertKey: string\n expert: { key: string; name: string; version: string }\n output: string\n runtime: RuntimeName\n}\n\nexport function createNormalizedCheckpoint(params: CreateCheckpointParams): Checkpoint {\n const { jobId, runId, expert, output, runtime } = params\n const checkpointId = createId()\n const expertMessage: ExpertMessage = {\n id: createId(),\n type: \"expertMessage\",\n contents: [{ type: \"textPart\", id: createId(), text: output }],\n }\n return {\n id: checkpointId,\n jobId,\n runId,\n status: \"completed\",\n stepNumber: 1,\n messages: [expertMessage],\n expert: { key: expert.key, name: expert.name, version: expert.version },\n usage: createEmptyUsage(),\n metadata: { runtime },\n }\n}\n\nexport function createStartRunEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n checkpoint: Checkpoint,\n): RunEvent {\n return {\n type: \"startRun\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber: checkpoint.stepNumber,\n initialCheckpoint: checkpoint,\n inputMessages: [],\n }\n}\n\nexport function createRuntimeInitEvent(\n jobId: string,\n runId: string,\n expertName: string,\n runtime: RuntimeName,\n version: string,\n query?: string,\n): RuntimeEvent {\n return {\n type: \"initializeRuntime\",\n id: createId(),\n timestamp: Date.now(),\n jobId,\n runId,\n runtimeVersion: version,\n runtime,\n expertName,\n experts: [],\n model: `${runtime}:default`,\n temperature: 0,\n maxRetries: 0,\n timeout: 0,\n query,\n }\n}\n\nexport function createCompleteRunEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n checkpoint: Checkpoint,\n output: string,\n startedAt?: number,\n): RunEvent {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n return {\n type: \"completeRun\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber: checkpoint.stepNumber,\n checkpoint,\n step: {\n stepNumber: checkpoint.stepNumber,\n newMessages: lastMessage ? [lastMessage] : [],\n usage: createEmptyUsage(),\n startedAt: startedAt ?? Date.now(),\n },\n text: output,\n usage: createEmptyUsage(),\n }\n}\n\nexport function createStreamingTextEvent(jobId: string, runId: string, text: string): RuntimeEvent {\n return {\n type: \"streamingText\",\n id: createId(),\n timestamp: Date.now(),\n jobId,\n runId,\n text,\n }\n}\n\nexport function createCallToolsEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n stepNumber: number,\n toolCalls: ToolCall[],\n _checkpoint: Checkpoint,\n): RunEvent {\n const expertMessage: ExpertMessage = {\n id: createId(),\n type: \"expertMessage\",\n contents: [],\n }\n return {\n type: \"callTools\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber,\n newMessage: expertMessage,\n toolCalls,\n usage: createEmptyUsage(),\n }\n}\n\nexport function createResolveToolResultsEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n stepNumber: number,\n toolResults: ToolResult[],\n): RunEvent {\n return {\n type: \"resolveToolResults\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber,\n toolResults,\n }\n}\n\nexport function createToolMessage(\n toolCallId: string,\n toolName: string,\n resultText: string,\n): ToolMessage {\n return {\n id: createId(),\n type: \"toolMessage\",\n contents: [\n {\n type: \"toolResultPart\",\n id: createId(),\n toolCallId,\n toolName,\n contents: [{ type: \"textPart\", id: createId(), text: resultText }],\n },\n ],\n }\n}\n","import type { RuntimeName } from \"../schemas/runtime-name.js\"\nimport type { RuntimeAdapter } from \"./types.js\"\n\nconst adapters: Map<RuntimeName, () => RuntimeAdapter> = new Map()\n\nexport function registerAdapter(runtime: RuntimeName, factory: () => RuntimeAdapter): void {\n adapters.set(runtime, factory)\n}\n\nexport function getAdapter(runtime: RuntimeName): RuntimeAdapter {\n const factory = adapters.get(runtime)\n if (!factory) {\n throw new Error(\n `Runtime \"${runtime}\" is not registered. Available runtimes: ${Array.from(adapters.keys()).join(\", \")}`,\n )\n }\n return factory()\n}\n\nexport function isAdapterAvailable(runtime: RuntimeName): boolean {\n return adapters.has(runtime)\n}\n\nexport function getRegisteredRuntimes(): RuntimeName[] {\n return Array.from(adapters.keys())\n}\n","export const defaultPerstackApiBaseUrl = \"https://api.perstack.ai\"\n\n// Organization\nexport const organizationNameRegex = /^[a-z0-9][a-z0-9_.-]*$/\nexport const maxOrganizationNameLength = 128\n\n// Application\nexport const maxApplicationNameLength = 255\n\n// Expert\nexport const expertKeyRegex =\n /^((?:@[a-z0-9][a-z0-9_.-]*\\/)?[a-z0-9][a-z0-9_.-]*)(?:@((?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?)|@([a-z0-9][a-z0-9_.-]*))?$/\nexport const expertNameRegex = /^(@[a-z0-9][a-z0-9_-]*\\/)?[a-z0-9][a-z0-9_-]*$/\nexport const expertVersionRegex =\n /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?$/\nexport const tagNameRegex = /^[a-z0-9][a-z0-9_-]*$/\nexport const maxExpertNameLength = 255\nexport const maxExpertVersionTagLength = 255\nexport const maxExpertKeyLength = 511\nexport const maxExpertDescriptionLength = 1024 * 2\nexport const maxExpertInstructionLength = 1024 * 20\nexport const maxExpertSkillItems = 255\nexport const maxExpertDelegateItems = 255\nexport const maxExpertTagItems = 8\nexport const defaultTemperature = 0.0\nexport const defaultMaxSteps = 100\nexport const defaultMaxRetries = 5\nexport const defaultTimeout = 5 * 1000 * 60\n\n// ExpertJob\nexport const maxExpertJobQueryLength = 1024 * 20\nexport const maxExpertJobFileNameLength = 1024 * 10\n\n// Skill\nexport const packageWithVersionRegex =\n /^(?:@[a-z0-9][a-z0-9_.-]*\\/)?[a-z0-9][a-z0-9_.-]*(?:@(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?|@[a-z0-9][a-z0-9_.-]*)?$/\nexport const urlSafeRegex = /^[a-z0-9][a-z0-9_-]*$/\nexport const maxSkillNameLength = 255\nexport const maxSkillDescriptionLength = 1024 * 2\nexport const maxSkillRuleLength = 1024 * 2\nexport const maxSkillPickOmitItems = 255\nexport const maxSkillRequiredEnvItems = 255\nexport const maxSkillToolNameLength = 255\nexport const maxSkillEndpointLength = 1024 * 2\nexport const maxSkillInputJsonSchemaLength = 1024 * 20\nexport const maxSkillToolItems = 255\n\n// Checkpoint\nexport const maxCheckpointToolCallIdLength = 255\n\n// Workspace\nexport const envNameRegex = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/\nexport const maxEnvNameLength = 255\n","export const knownModels = [\n {\n provider: \"anthropic\",\n models: [\n // https://docs.claude.com/en/docs/about-claude/models/overview#model-comparison-table\n {\n name: \"claude-opus-4-5\",\n contextWindow: 200_000,\n maxOutputTokens: 32_000,\n },\n {\n name: \"claude-opus-4-1\",\n contextWindow: 200_000,\n maxOutputTokens: 32_000,\n },\n {\n name: \"claude-opus-4-20250514\",\n contextWindow: 200_000,\n maxOutputTokens: 32_000,\n },\n {\n name: \"claude-sonnet-4-5\",\n contextWindow: 200_000,\n maxOutputTokens: 64_000,\n },\n {\n name: \"claude-sonnet-4-20250514\",\n contextWindow: 200_000,\n maxOutputTokens: 64_000,\n },\n {\n name: \"claude-3-7-sonnet-20250219\",\n contextWindow: 200_000,\n maxOutputTokens: 64_000,\n },\n {\n name: \"claude-haiku-4-5\",\n contextWindow: 200_000,\n maxOutputTokens: 8_192,\n },\n {\n name: \"claude-3-5-haiku-latest\",\n contextWindow: 200_000,\n maxOutputTokens: 8_192,\n },\n ],\n },\n {\n provider: \"google\",\n models: [\n // https://ai.google.dev/gemini-api/docs/models#gemini-3-pro\n {\n name: \"gemini-3-pro-preview\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n // https://ai.google.dev/gemini-api/docs/models#gemini-2.5-pro\n {\n name: \"gemini-2.5-pro\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n // https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash\n {\n name: \"gemini-2.5-flash\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n // https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-lite\n {\n name: \"gemini-2.5-flash-lite\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n ],\n },\n {\n provider: \"openai\",\n models: [\n // https://platform.openai.com/docs/models/gpt-5\n {\n name: \"gpt-5\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n },\n // https://platform.openai.com/docs/models/gpt-5-mini\n {\n name: \"gpt-5-mini\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n },\n // https://platform.openai.com/docs/models/gpt-5-nano\n {\n name: \"gpt-5-nano\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n },\n // https://platform.openai.com/docs/models/gpt-5-chat-latest\n {\n name: \"gpt-5-chat-latest\",\n contextWindow: 128_000,\n maxOutputTokens: 16_384,\n },\n // https://platform.openai.com/docs/models/o4-mini\n {\n name: \"o4-mini\",\n contextWindow: 200_000,\n maxOutputTokens: 100_000,\n },\n // https://platform.openai.com/docs/models/o3\n {\n name: \"o3\",\n contextWindow: 200_000,\n maxOutputTokens: 10_000,\n },\n // https://platform.openai.com/docs/models/o3-mini\n {\n name: \"o3-mini\",\n contextWindow: 200_000,\n maxOutputTokens: 10_000,\n },\n // https://platform.openai.com/docs/models/gpt-4.1\n {\n name: \"gpt-4.1\",\n contextWindow: 1_047_576,\n maxOutputTokens: 32_768,\n },\n ],\n },\n {\n provider: \"deepseek\",\n models: [\n {\n name: \"deepseek-chat\",\n contextWindow: 128_000,\n maxOutputTokens: 8_192,\n },\n {\n name: \"deepseek-reasoner\",\n contextWindow: 128_000,\n maxOutputTokens: 64_000,\n },\n ],\n },\n {\n provider: \"ollama\",\n models: [\n // https://platform.openai.com/docs/models/gpt-oss-20b\n {\n name: \"gpt-oss:20b\",\n contextWindow: 131_072,\n maxOutputTokens: 131_072,\n },\n // https://platform.openai.com/docs/models/gpt-oss-120b\n {\n name: \"gpt-oss:120b\",\n contextWindow: 131_072,\n maxOutputTokens: 131_072,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:1b\",\n contextWindow: 32_000,\n maxOutputTokens: 32_000,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:4b\",\n contextWindow: 128_000,\n maxOutputTokens: 128_000,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:12b\",\n contextWindow: 128_000,\n maxOutputTokens: 128_000,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:27b\",\n contextWindow: 128_000,\n maxOutputTokens: 128_000,\n },\n ],\n },\n]\n","import { z } from \"zod\"\n\n/** Base properties shared by all message parts */\nexport interface BasePart {\n /** Unique identifier for this part */\n id: string\n}\n\nexport const basePartSchema = z.object({\n id: z.string(),\n})\nbasePartSchema satisfies z.ZodType<BasePart>\n\n/** Plain text content */\nexport interface TextPart extends BasePart {\n type: \"textPart\"\n /** The text content */\n text: string\n}\n\nexport const textPartSchema = basePartSchema.extend({\n type: z.literal(\"textPart\"),\n text: z.string(),\n})\ntextPartSchema satisfies z.ZodType<TextPart>\n\n/** Image referenced by URL */\nexport interface ImageUrlPart extends BasePart {\n type: \"imageUrlPart\"\n /** URL to the image */\n url: string\n /** MIME type of the image */\n mimeType: string\n}\n\nexport const imageUrlPartSchema = basePartSchema.extend({\n type: z.literal(\"imageUrlPart\"),\n url: z.url(),\n mimeType: z.string(),\n})\nimageUrlPartSchema satisfies z.ZodType<ImageUrlPart>\n\n/** Image with base64-encoded inline data */\nexport interface ImageInlinePart extends BasePart {\n type: \"imageInlinePart\"\n /** Base64-encoded image data */\n encodedData: string\n /** MIME type of the image */\n mimeType: string\n}\n\nexport const imageInlinePartSchema = basePartSchema.extend({\n type: z.literal(\"imageInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nimageInlinePartSchema satisfies z.ZodType<ImageInlinePart>\n\n/** Image with binary data (internal use) */\nexport interface ImageBinaryPart extends BasePart {\n type: \"imageBinaryPart\"\n /** Binary data as string */\n data: string\n /** MIME type of the image */\n mimeType: string\n}\n\nexport const imageBinaryPartSchema = basePartSchema.extend({\n type: z.literal(\"imageBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nimageBinaryPartSchema satisfies z.ZodType<ImageBinaryPart>\n\n/** File referenced by URL */\nexport interface FileUrlPart extends BasePart {\n type: \"fileUrlPart\"\n /** URL to the file */\n url: string\n /** MIME type of the file */\n mimeType: string\n}\n\nexport const fileUrlPartSchema = basePartSchema.extend({\n type: z.literal(\"fileUrlPart\"),\n url: z.string().url(),\n mimeType: z.string(),\n})\nfileUrlPartSchema satisfies z.ZodType<FileUrlPart>\n\n/** File with base64-encoded inline data */\nexport interface FileInlinePart extends BasePart {\n type: \"fileInlinePart\"\n /** Base64-encoded file data */\n encodedData: string\n /** MIME type of the file */\n mimeType: string\n}\n\nexport const fileInlinePartSchema = basePartSchema.extend({\n type: z.literal(\"fileInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nfileInlinePartSchema satisfies z.ZodType<FileInlinePart>\n\n/** File with binary data (internal use) */\nexport interface FileBinaryPart extends BasePart {\n type: \"fileBinaryPart\"\n /** Binary data as string */\n data: string\n /** MIME type of the file */\n mimeType: string\n}\n\nexport const fileBinaryPartSchema = basePartSchema.extend({\n type: z.literal(\"fileBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nfileBinaryPartSchema satisfies z.ZodType<FileBinaryPart>\n\n/** A tool call request from the Expert */\nexport interface ToolCallPart extends BasePart {\n type: \"toolCallPart\"\n /** Unique identifier for this tool call */\n toolCallId: string\n /** Name of the tool to call */\n toolName: string\n /** Arguments to pass to the tool */\n args: unknown\n}\n\nexport const toolCallPartSchema = basePartSchema.extend({\n type: z.literal(\"toolCallPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n args: z.unknown(),\n})\ntoolCallPartSchema satisfies z.ZodType<ToolCallPart>\n\n/** Result of a tool call */\nexport interface ToolResultPart extends BasePart {\n type: \"toolResultPart\"\n /** ID of the tool call this result corresponds to */\n toolCallId: string\n /** Name of the tool that was called */\n toolName: string\n /** Content of the tool result */\n contents: (TextPart | ImageInlinePart | FileInlinePart)[]\n /** Whether the tool call resulted in an error */\n isError?: boolean\n}\n\nexport const toolResultPartSchema = basePartSchema.extend({\n type: z.literal(\"toolResultPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n contents: z.array(z.union([textPartSchema, imageInlinePartSchema, fileInlinePartSchema])),\n isError: z.boolean().optional(),\n})\ntoolResultPartSchema satisfies z.ZodType<ToolResultPart>\n\n/** All possible message part types */\nexport type MessagePart =\n | TextPart\n | ImageUrlPart\n | ImageInlinePart\n | ImageBinaryPart\n | FileUrlPart\n | FileInlinePart\n | FileBinaryPart\n | ToolCallPart\n | ToolResultPart\n\nexport const messagePartSchema = z.discriminatedUnion(\"type\", [\n textPartSchema,\n imageUrlPartSchema,\n imageInlinePartSchema,\n imageBinaryPartSchema,\n fileUrlPartSchema,\n fileInlinePartSchema,\n fileBinaryPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n])\n","import { z } from \"zod\"\nimport type {\n FileBinaryPart,\n FileInlinePart,\n FileUrlPart,\n ImageBinaryPart,\n ImageInlinePart,\n ImageUrlPart,\n TextPart,\n ToolCallPart,\n ToolResultPart,\n} from \"./message-part.js\"\nimport {\n fileBinaryPartSchema,\n fileInlinePartSchema,\n fileUrlPartSchema,\n imageBinaryPartSchema,\n imageInlinePartSchema,\n imageUrlPartSchema,\n textPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n} from \"./message-part.js\"\n\n/** Base properties shared by all messages */\ninterface BaseMessage {\n /** Unique identifier for this message */\n id: string\n}\n\nconst baseMessageSchema = z.object({\n id: z.string(),\n})\n\n/** System instruction message sent at the start of a conversation */\nexport interface InstructionMessage extends BaseMessage {\n type: \"instructionMessage\"\n /** Text content of the instruction */\n contents: TextPart[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const instructionMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"instructionMessage\"),\n contents: z.array(textPartSchema),\n cache: z.boolean().optional(),\n})\ninstructionMessageSchema satisfies z.ZodType<InstructionMessage>\n\n/** Message from the user (human or system providing input) */\nexport interface UserMessage extends BaseMessage {\n type: \"userMessage\"\n /** Content of the user message (text, images, or files) */\n contents: (\n | TextPart\n | ImageUrlPart\n | ImageInlinePart\n | ImageBinaryPart\n | FileUrlPart\n | FileInlinePart\n | FileBinaryPart\n )[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const userMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"userMessage\"),\n contents: z.array(\n z.union([\n textPartSchema,\n imageUrlPartSchema,\n imageInlinePartSchema,\n imageBinaryPartSchema,\n fileUrlPartSchema,\n fileInlinePartSchema,\n fileBinaryPartSchema,\n ]),\n ),\n cache: z.boolean().optional(),\n})\nuserMessageSchema satisfies z.ZodType<UserMessage>\n\n/** Message generated by the Expert (LLM response) */\nexport interface ExpertMessage extends BaseMessage {\n type: \"expertMessage\"\n /** Content generated by the Expert (text or tool calls) */\n contents: (TextPart | ToolCallPart)[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const expertMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"expertMessage\"),\n contents: z.array(z.union([textPartSchema, toolCallPartSchema])),\n cache: z.boolean().optional(),\n})\nexpertMessageSchema satisfies z.ZodType<ExpertMessage>\n\n/** Message containing tool execution results */\nexport interface ToolMessage extends BaseMessage {\n type: \"toolMessage\"\n /** Tool result contents */\n contents: ToolResultPart[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const toolMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"toolMessage\"),\n contents: z.array(toolResultPartSchema),\n cache: z.boolean().optional(),\n})\ntoolMessageSchema satisfies z.ZodType<ToolMessage>\n\n/** All possible message types */\nexport type Message = InstructionMessage | UserMessage | ExpertMessage | ToolMessage\n\nexport const messageSchema = z.union([\n instructionMessageSchema,\n userMessageSchema,\n expertMessageSchema,\n toolMessageSchema,\n])\n","import { z } from \"zod\"\n\nexport type RuntimeName = \"local\" | \"cursor\" | \"claude-code\" | \"gemini\" | \"docker\"\n\nexport const runtimeNameSchema = z.enum([\"local\", \"cursor\", \"claude-code\", \"gemini\", \"docker\"])\n","import { z } from \"zod\"\nimport { maxSkillNameLength, maxSkillToolNameLength } from \"../constants/constants.js\"\n\n/** A tool call made by an Expert during execution */\nexport interface ToolCall {\n /** Unique identifier for this tool call */\n id: string\n /** Name of the skill providing the tool */\n skillName: string\n /** Name of the tool being called */\n toolName: string\n /** Arguments passed to the tool */\n args: Record<string, unknown>\n}\n\nexport const toolCallSchema = z.object({\n id: z.string().min(1).max(255),\n skillName: z.string().min(1).max(maxSkillNameLength),\n toolName: z.string().min(1).max(maxSkillToolNameLength),\n args: z.record(z.string().min(1), z.unknown()),\n})\ntoolCallSchema satisfies z.ZodType<ToolCall>\n","import { z } from \"zod\"\nimport { maxSkillNameLength, maxSkillToolNameLength } from \"../constants/constants.js\"\nimport type { MessagePart } from \"./message-part.js\"\nimport { messagePartSchema } from \"./message-part.js\"\n\n/** Result returned from a tool call */\nexport interface ToolResult {\n /** Unique identifier for this result */\n id: string\n /** Name of the skill that provided the tool */\n skillName: string\n /** Name of the tool that was called */\n toolName: string\n /** Content parts returned by the tool */\n result: MessagePart[]\n}\n\nexport const toolResultSchema = z.object({\n id: z.string().min(1).max(255),\n skillName: z.string().min(1).max(maxSkillNameLength),\n toolName: z.string().min(1).max(maxSkillToolNameLength),\n result: z.array(messagePartSchema),\n})\ntoolResultSchema satisfies z.ZodType<ToolResult>\n","import { z } from \"zod\"\n\n/** Token usage statistics for a single step or run */\nexport interface Usage {\n /** Number of tokens in the input prompt */\n inputTokens: number\n /** Number of tokens generated in the response */\n outputTokens: number\n /** Number of tokens used for reasoning (extended thinking) */\n reasoningTokens: number\n /** Total tokens (input + output) */\n totalTokens: number\n /** Number of input tokens served from cache */\n cachedInputTokens: number\n}\n\nexport const usageSchema = z.object({\n inputTokens: z.number(),\n outputTokens: z.number(),\n reasoningTokens: z.number(),\n totalTokens: z.number(),\n cachedInputTokens: z.number(),\n})\nusageSchema satisfies z.ZodType<Usage>\n","import { z } from \"zod\"\nimport type { Message } from \"./message.js\"\nimport { messageSchema } from \"./message.js\"\nimport type { RuntimeName } from \"./runtime-name.js\"\nimport { runtimeNameSchema } from \"./runtime-name.js\"\nimport type { ToolCall } from \"./tool-call.js\"\nimport { toolCallSchema } from \"./tool-call.js\"\nimport type { ToolResult } from \"./tool-result.js\"\nimport { toolResultSchema } from \"./tool-result.js\"\nimport type { Usage } from \"./usage.js\"\nimport { usageSchema } from \"./usage.js\"\n\n/** Status of a checkpoint in the execution lifecycle */\nexport type CheckpointStatus =\n | \"init\"\n | \"proceeding\"\n | \"completed\"\n | \"stoppedByInteractiveTool\"\n | \"stoppedByDelegate\"\n | \"stoppedByExceededMaxSteps\"\n | \"stoppedByError\"\n\nexport const checkpointStatusSchema = z.enum([\n \"init\",\n \"proceeding\",\n \"completed\",\n \"stoppedByInteractiveTool\",\n \"stoppedByDelegate\",\n \"stoppedByExceededMaxSteps\",\n \"stoppedByError\",\n])\n\n/** Information about a delegation target */\nexport interface DelegationTarget {\n expert: {\n key: string\n name: string\n version: string\n }\n toolCallId: string\n toolName: string\n query: string\n}\n\n/**\n * A checkpoint represents a point-in-time snapshot of an Expert's execution state.\n * Used for resuming, debugging, and observability.\n */\nexport interface Checkpoint {\n /** Unique identifier for this checkpoint */\n id: string\n /** Job ID this checkpoint belongs to */\n jobId: string\n /** Run ID this checkpoint belongs to */\n runId: string\n /** Current execution status */\n status: CheckpointStatus\n /** Current step number within this Run */\n stepNumber: number\n /** All messages in the conversation so far */\n messages: Message[]\n /** Expert executing this checkpoint */\n expert: {\n /** Expert key (e.g., \"my-expert@1.0.0\") */\n key: string\n /** Expert name */\n name: string\n /** Expert version */\n version: string\n }\n /** If delegating, information about the target Expert(s) - supports parallel delegation */\n delegateTo?: DelegationTarget[]\n /** If delegated, information about the parent Expert */\n delegatedBy?: {\n /** The parent Expert that delegated */\n expert: {\n key: string\n name: string\n version: string\n }\n /** Tool call ID from the parent */\n toolCallId: string\n /** Name of the delegation tool */\n toolName: string\n /** Checkpoint ID of the parent */\n checkpointId: string\n }\n /** Accumulated token usage */\n usage: Usage\n /** Model's context window size in tokens */\n contextWindow?: number\n /** Context window usage ratio (0-1) */\n contextWindowUsage?: number\n /** Tool calls waiting to be processed (for resume after delegate/interactive) */\n pendingToolCalls?: ToolCall[]\n /** Partial tool results collected before stopping (for resume) */\n partialToolResults?: ToolResult[]\n /** Optional metadata for runtime-specific information */\n metadata?: {\n /** Runtime that executed this checkpoint */\n runtime?: RuntimeName\n /** Additional runtime-specific data */\n [key: string]: unknown\n }\n}\n\nexport const delegationTargetSchema = z.object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n query: z.string(),\n})\ndelegationTargetSchema satisfies z.ZodType<DelegationTarget>\n\nexport const checkpointSchema = z.object({\n id: z.string(),\n jobId: z.string(),\n runId: z.string(),\n status: checkpointStatusSchema,\n stepNumber: z.number(),\n messages: z.array(messageSchema),\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n delegateTo: z.array(delegationTargetSchema).optional(),\n delegatedBy: z\n .object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n checkpointId: z.string(),\n })\n .optional(),\n usage: usageSchema,\n contextWindow: z.number().optional(),\n contextWindowUsage: z.number().optional(),\n pendingToolCalls: z.array(toolCallSchema).optional(),\n partialToolResults: z.array(toolResultSchema).optional(),\n metadata: z\n .object({\n runtime: runtimeNameSchema.optional(),\n })\n .passthrough()\n .optional(),\n})\ncheckpointSchema satisfies z.ZodType<Checkpoint>\n","import { z } from \"zod\"\n\nfunction isPrivateOrLocalIP(hostname: string): boolean {\n if (\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"0.0.0.0\"\n ) {\n return true\n }\n const ipv4Match = hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)\n if (ipv4Match) {\n const a = Number(ipv4Match[1])\n const b = Number(ipv4Match[2])\n if (a === 10) return true\n if (a === 172 && b >= 16 && b <= 31) return true\n if (a === 192 && b === 168) return true\n if (a === 169 && b === 254) return true\n if (a === 127) return true\n }\n if (hostname.includes(\":\")) {\n if (hostname.startsWith(\"fe80:\") || hostname.startsWith(\"fc\") || hostname.startsWith(\"fd\")) {\n return true\n }\n }\n if (hostname.startsWith(\"::ffff:\")) {\n const ipv4Part = hostname.slice(7)\n if (isPrivateOrLocalIP(ipv4Part)) {\n return true\n }\n }\n return false\n}\nconst sseEndpointSchema = z\n .string()\n .url()\n .refine(\n (url) => {\n try {\n const parsed = new URL(url)\n if (parsed.protocol !== \"https:\") return false\n if (isPrivateOrLocalIP(parsed.hostname)) return false\n return true\n } catch {\n return false\n }\n },\n { message: \"Endpoint must be a public HTTPS URL\" },\n )\n\n/** MCP skill using stdio transport */\nexport interface McpStdioSkill {\n type: \"mcpStdioSkill\"\n /** Skill name (derived from key) */\n name: string\n /** Human-readable description */\n description?: string\n /** Usage rules for the LLM */\n rule?: string\n /** Tool names to include (whitelist) */\n pick: string[]\n /** Tool names to exclude (blacklist) */\n omit: string[]\n /** Command to execute (e.g., \"npx\") */\n command: string\n /** Package name for npx/uvx */\n packageName?: string\n /** Additional arguments */\n args: string[]\n /** Environment variables required by this skill */\n requiredEnv: string[]\n /** Whether to delay initialization until first use */\n lazyInit: boolean\n}\n\nexport const mcpStdioSkillSchema = z.object({\n type: z.literal(\"mcpStdioSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional().default([]),\n requiredEnv: z.array(z.string()).optional().default([]),\n lazyInit: z.boolean().optional().default(true),\n})\nmcpStdioSkillSchema satisfies z.ZodType<McpStdioSkill>\n\n/** MCP skill using SSE transport */\nexport interface McpSseSkill {\n type: \"mcpSseSkill\"\n /** Skill name (derived from key) */\n name: string\n /** Human-readable description */\n description?: string\n /** Usage rules for the LLM */\n rule?: string\n /** Tool names to include (whitelist) */\n pick: string[]\n /** Tool names to exclude (blacklist) */\n omit: string[]\n /** SSE endpoint URL */\n endpoint: string\n}\n\nexport const mcpSseSkillSchema = z.object({\n type: z.literal(\"mcpSseSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n endpoint: sseEndpointSchema,\n})\nmcpSseSkillSchema satisfies z.ZodType<McpSseSkill>\n\n/** Definition of an interactive tool within an interactive skill */\nexport interface InteractiveTool {\n /** Tool name */\n name: string\n /** Human-readable description */\n description?: string\n /** JSON Schema for tool input as a string */\n inputJsonSchema: string\n}\n\nexport const interactiveToolSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n})\ninteractiveToolSchema satisfies z.ZodType<InteractiveTool>\n\n/** Skill that requires human interaction to complete tool calls */\nexport interface InteractiveSkill {\n type: \"interactiveSkill\"\n /** Skill name (derived from key) */\n name: string\n /** Human-readable description */\n description?: string\n /** Usage rules for the LLM */\n rule?: string\n /** Map of tool name to tool definition */\n tools: Record<string, InteractiveTool>\n}\n\nexport const interactiveSkillSchema = z.object({\n type: z.literal(\"interactiveSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(z.string(), interactiveToolSchema.omit({ name: true })).transform((tools) => {\n return Object.fromEntries(\n Object.entries(tools).map(([key, toolWithoutName]) => [\n key,\n interactiveToolSchema.parse({ ...toolWithoutName, name: key }),\n ]),\n )\n }),\n})\n\n/** All possible skill types */\nexport type Skill = McpStdioSkill | McpSseSkill | InteractiveSkill\n\nexport const skillSchema = z.discriminatedUnion(\"type\", [\n mcpStdioSkillSchema,\n mcpSseSkillSchema,\n interactiveSkillSchema,\n])\n","import { z } from \"zod\"\nimport {\n expertKeyRegex,\n expertNameRegex,\n expertVersionRegex,\n maxExpertNameLength,\n tagNameRegex,\n} from \"../constants/constants.js\"\nimport type { InteractiveSkill, McpSseSkill, McpStdioSkill, Skill } from \"./skill.js\"\nimport { interactiveSkillSchema, mcpSseSkillSchema, mcpStdioSkillSchema } from \"./skill.js\"\n\n/**\n * An Expert definition - an AI agent with specific skills and instructions.\n * Experts can delegate to other Experts and use MCP tools.\n */\nexport interface Expert {\n /** Unique key identifying this Expert (e.g., \"my-expert\" or \"my-expert@1.0.0\") */\n key: string\n /** Display name for the Expert */\n name: string\n /** Semantic version string */\n version: string\n /** Human-readable description of what this Expert does */\n description?: string\n /** System instruction defining the Expert's behavior */\n instruction: string\n /** Map of skill name to skill configuration */\n skills: Record<string, Skill>\n /** List of Expert keys this Expert can delegate to */\n delegates: string[]\n /** Tags for categorization and discovery */\n tags: string[]\n}\n\ntype SkillWithoutName =\n | Omit<McpStdioSkill, \"name\">\n | Omit<McpSseSkill, \"name\">\n | Omit<InteractiveSkill, \"name\">\n\nexport const expertSchema = z.object({\n key: z.string().regex(expertKeyRegex).min(1),\n name: z.string().regex(expertNameRegex).min(1).max(maxExpertNameLength),\n version: z.string().regex(expertVersionRegex),\n description: z\n .string()\n .min(1)\n .max(1024 * 2)\n .optional(),\n instruction: z\n .string()\n .min(1)\n .max(1024 * 20),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n mcpStdioSkillSchema.omit({ name: true }),\n mcpSseSkillSchema.omit({ name: true }),\n interactiveSkillSchema.omit({ name: true }),\n ]),\n )\n .optional()\n .default({\n \"@perstack/base\": {\n type: \"mcpStdioSkill\",\n description: \"Base skill\",\n command: \"npx\",\n args: [\"-y\", \"@perstack/base\"],\n pick: [],\n omit: [],\n requiredEnv: [],\n lazyInit: false,\n } satisfies SkillWithoutName,\n })\n .transform((skills) => {\n return Object.fromEntries(\n Object.entries(skills).map(([key, skillWithoutName]) => [\n key,\n z\n .discriminatedUnion(\"type\", [\n mcpStdioSkillSchema,\n mcpSseSkillSchema,\n interactiveSkillSchema,\n ])\n .parse({ ...skillWithoutName, name: key }),\n ]),\n )\n }),\n delegates: z.array(z.string().regex(expertKeyRegex).min(1)).optional().default([]),\n tags: z.array(z.string().regex(tagNameRegex).min(1)).optional().default([]),\n})\n","import { z } from \"zod\"\nimport type { Usage } from \"./usage.js\"\nimport { usageSchema } from \"./usage.js\"\n\nexport type JobStatus =\n | \"running\"\n | \"completed\"\n | \"stoppedByMaxSteps\"\n | \"stoppedByInteractiveTool\"\n | \"stoppedByError\"\n\nexport const jobStatusSchema = z.enum([\n \"running\",\n \"completed\",\n \"stoppedByMaxSteps\",\n \"stoppedByInteractiveTool\",\n \"stoppedByError\",\n])\n\nexport interface Job {\n id: string\n status: JobStatus\n coordinatorExpertKey: string\n totalSteps: number\n maxSteps?: number\n usage: Usage\n startedAt: number\n finishedAt?: number\n}\n\nexport const jobSchema = z.object({\n id: z.string(),\n status: jobStatusSchema,\n coordinatorExpertKey: z.string(),\n totalSteps: z.number(),\n maxSteps: z.number().optional(),\n usage: usageSchema,\n startedAt: z.number(),\n finishedAt: z.number().optional(),\n})\njobSchema satisfies z.ZodType<Job>\n","import { z } from \"zod\"\n\n/** HTTP headers for API requests */\nexport type Headers = Record<string, string> | undefined\n\nexport const headersSchema = z.record(z.string(), z.string()).optional()\n\n/** Supported LLM provider names */\nexport type ProviderName =\n | \"anthropic\"\n | \"google\"\n | \"openai\"\n | \"ollama\"\n | \"azure-openai\"\n | \"amazon-bedrock\"\n | \"google-vertex\"\n | \"deepseek\"\n\nexport const providerNameSchema = z.enum([\n \"anthropic\",\n \"google\",\n \"openai\",\n \"ollama\",\n \"azure-openai\",\n \"amazon-bedrock\",\n \"google-vertex\",\n \"deepseek\",\n])\n\n/** Anthropic provider configuration */\nexport interface AnthropicProviderConfig {\n providerName: \"anthropic\"\n /** API key for Anthropic */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const anthropicProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.anthropic),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\nanthropicProviderConfigSchema satisfies z.ZodType<AnthropicProviderConfig>\n\n/** Google Generative AI provider configuration */\nexport interface GoogleGenerativeAiProviderConfig {\n providerName: \"google\"\n /** API key for Google */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const googleGenerativeAiProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.google),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\ngoogleGenerativeAiProviderConfigSchema satisfies z.ZodType<GoogleGenerativeAiProviderConfig>\n\n/** OpenAI provider configuration */\nexport interface OpenAiProviderConfig {\n providerName: \"openai\"\n /** API key for OpenAI */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Organization ID */\n organization?: string\n /** Project ID */\n project?: string\n /** Custom name for the provider instance */\n name?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const openAiProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.openai),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n organization: z.string().optional(),\n project: z.string().optional(),\n name: z.string().optional(),\n headers: headersSchema,\n})\nopenAiProviderConfigSchema satisfies z.ZodType<OpenAiProviderConfig>\n\n/** Ollama provider configuration */\nexport interface OllamaProviderConfig {\n providerName: \"ollama\"\n /** Custom base URL (defaults to localhost) */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const ollamaProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.ollama),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\nollamaProviderConfigSchema satisfies z.ZodType<OllamaProviderConfig>\n\n/** Azure OpenAI provider configuration */\nexport interface AzureOpenAiProviderConfig {\n providerName: \"azure-openai\"\n /** API key for Azure */\n apiKey: string\n /** Azure resource name */\n resourceName?: string\n /** API version */\n apiVersion?: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n /** Use deployment-based URLs */\n useDeploymentBasedUrls?: boolean\n}\n\nexport const azureOpenAiProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum[\"azure-openai\"]),\n apiKey: z.string(),\n resourceName: z.string().optional(),\n apiVersion: z.string().optional(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n useDeploymentBasedUrls: z.boolean().optional(),\n})\nazureOpenAiProviderConfigSchema satisfies z.ZodType<AzureOpenAiProviderConfig>\n\n/** Amazon Bedrock provider configuration */\nexport interface AmazonBedrockProviderConfig {\n providerName: \"amazon-bedrock\"\n /** AWS access key ID */\n accessKeyId: string\n /** AWS secret access key */\n secretAccessKey: string\n /** AWS region */\n region: string\n /** AWS session token (for temporary credentials) */\n sessionToken?: string\n}\n\nexport const amazonBedrockProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum[\"amazon-bedrock\"]),\n accessKeyId: z.string(),\n secretAccessKey: z.string(),\n region: z.string(),\n sessionToken: z.string().optional(),\n})\namazonBedrockProviderConfigSchema satisfies z.ZodType<AmazonBedrockProviderConfig>\n\n/** Google Vertex AI provider configuration */\nexport interface GoogleVertexProviderConfig {\n providerName: \"google-vertex\"\n /** GCP project ID */\n project?: string\n /** GCP location */\n location?: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const googleVertexProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum[\"google-vertex\"]),\n project: z.string().optional(),\n location: z.string().optional(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\ngoogleVertexProviderConfigSchema satisfies z.ZodType<GoogleVertexProviderConfig>\n\n/** DeepSeek provider configuration */\nexport interface DeepseekProviderConfig {\n providerName: \"deepseek\"\n /** API key for DeepSeek */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const deepseekProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.deepseek),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\ndeepseekProviderConfigSchema satisfies z.ZodType<DeepseekProviderConfig>\n\n/** Union of all provider configurations */\nexport type ProviderConfig =\n | AnthropicProviderConfig\n | GoogleGenerativeAiProviderConfig\n | OpenAiProviderConfig\n | OllamaProviderConfig\n | AzureOpenAiProviderConfig\n | AmazonBedrockProviderConfig\n | GoogleVertexProviderConfig\n | DeepseekProviderConfig\n\nexport const providerConfigSchema = z.discriminatedUnion(\"providerName\", [\n anthropicProviderConfigSchema,\n googleGenerativeAiProviderConfigSchema,\n openAiProviderConfigSchema,\n ollamaProviderConfigSchema,\n azureOpenAiProviderConfigSchema,\n amazonBedrockProviderConfigSchema,\n googleVertexProviderConfigSchema,\n deepseekProviderConfigSchema,\n])\n","import { z } from \"zod\"\nimport { headersSchema } from \"./provider-config.js\"\nimport type { RuntimeName } from \"./runtime-name.js\"\nimport { runtimeNameSchema } from \"./runtime-name.js\"\n\nconst domainPatternRegex =\n /^(\\*\\.)?[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$/\nconst punycodeRegex = /(?:^|\\.)(xn--)/i\nexport const domainPatternSchema = z\n .string()\n .regex(domainPatternRegex, {\n message:\n \"Invalid domain pattern. Use exact domain (example.com) or wildcard prefix (*.example.com)\",\n })\n .refine((domain) => !punycodeRegex.test(domain), {\n message:\n \"Punycode domains (xn--) are not allowed to prevent homograph attacks. Use ASCII domains only.\",\n })\n\nfunction isPrivateOrLocalIP(hostname: string): boolean {\n if (\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"0.0.0.0\"\n ) {\n return true\n }\n const ipv4Match = hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)\n if (ipv4Match) {\n const a = Number(ipv4Match[1])\n const b = Number(ipv4Match[2])\n if (a === 10) return true\n if (a === 172 && b >= 16 && b <= 31) return true\n if (a === 192 && b === 168) return true\n if (a === 169 && b === 254) return true\n if (a === 127) return true\n }\n if (hostname.includes(\":\")) {\n if (hostname.startsWith(\"fe80:\") || hostname.startsWith(\"fc\") || hostname.startsWith(\"fd\")) {\n return true\n }\n }\n if (hostname.startsWith(\"::ffff:\")) {\n const ipv4Part = hostname.slice(7)\n if (isPrivateOrLocalIP(ipv4Part)) {\n return true\n }\n }\n return false\n}\n\nconst sseEndpointSchema = z\n .string()\n .url()\n .refine(\n (url) => {\n try {\n const parsed = new URL(url)\n if (parsed.protocol !== \"https:\") return false\n if (isPrivateOrLocalIP(parsed.hostname)) return false\n return true\n } catch {\n return false\n }\n },\n { message: \"SSE endpoint must be a public HTTPS URL\" },\n )\n\nconst httpsUrlSchema = z\n .string()\n .url()\n .refine((url) => url.startsWith(\"https://\"), { message: \"URL must use HTTPS\" })\n\nconst anthropicSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\nconst googleSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\nconst openAiSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n organization: z.string().optional(),\n project: z.string().optional(),\n name: z.string().optional(),\n headers: headersSchema,\n})\n\nconst ollamaSettingSchema = z.object({\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\n\nconst azureOpenAiSettingSchema = z.object({\n resourceName: z.string().optional(),\n apiVersion: z.string().optional(),\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n useDeploymentBasedUrls: z.boolean().optional(),\n})\n\nconst amazonBedrockSettingSchema = z.object({\n region: z.string().optional(),\n})\n\nconst googleVertexSettingSchema = z.object({\n project: z.string().optional(),\n location: z.string().optional(),\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\nconst deepseekSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\n/** Provider configuration in perstack.toml */\nexport type ProviderTable =\n | { providerName: \"anthropic\"; setting?: z.infer<typeof anthropicSettingSchema> }\n | { providerName: \"google\"; setting?: z.infer<typeof googleSettingSchema> }\n | { providerName: \"openai\"; setting?: z.infer<typeof openAiSettingSchema> }\n | { providerName: \"ollama\"; setting?: z.infer<typeof ollamaSettingSchema> }\n | { providerName: \"azure-openai\"; setting?: z.infer<typeof azureOpenAiSettingSchema> }\n | { providerName: \"amazon-bedrock\"; setting?: z.infer<typeof amazonBedrockSettingSchema> }\n | { providerName: \"google-vertex\"; setting?: z.infer<typeof googleVertexSettingSchema> }\n | { providerName: \"deepseek\"; setting?: z.infer<typeof deepseekSettingSchema> }\n\nexport const providerTableSchema = z.discriminatedUnion(\"providerName\", [\n z.object({\n providerName: z.literal(\"anthropic\"),\n setting: anthropicSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"google\"),\n setting: googleSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"openai\"),\n setting: openAiSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"ollama\"),\n setting: ollamaSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"azure-openai\"),\n setting: azureOpenAiSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"amazon-bedrock\"),\n setting: amazonBedrockSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"google-vertex\"),\n setting: googleVertexSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"deepseek\"),\n setting: deepseekSettingSchema.optional(),\n }),\n])\n\n/** Skill configuration in perstack.toml */\nexport type PerstackConfigSkill =\n | {\n type: \"mcpStdioSkill\"\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n command: string\n packageName?: string\n args?: string[]\n requiredEnv?: string[]\n allowedDomains?: string[]\n }\n | {\n type: \"mcpSseSkill\"\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n endpoint: string\n allowedDomains?: string[]\n }\n | {\n type: \"interactiveSkill\"\n description?: string\n rule?: string\n tools: Record<string, { description?: string; inputJsonSchema: string }>\n }\n\n/** Expert definition in perstack.toml (simplified from full Expert) */\nexport interface PerstackConfigExpert {\n /** Semantic version */\n version?: string\n /** Minimum runtime version required */\n minRuntimeVersion?: string\n /** Description of the Expert */\n description?: string\n /** System instruction */\n instruction: string\n /** Skills configuration */\n skills?: Record<string, PerstackConfigSkill>\n /** Delegates list */\n delegates?: string[]\n /** Tags for categorization */\n tags?: string[]\n}\n\n/**\n * Configuration loaded from perstack.toml.\n * This is the primary configuration file for Perstack projects.\n */\nexport interface PerstackConfig {\n /** Default provider configuration */\n provider?: ProviderTable\n /** Default model name */\n model?: string\n /** Default temperature (0-1) */\n temperature?: number\n /** Default execution runtime */\n runtime?: RuntimeName\n /** Maximum steps per run */\n maxSteps?: number\n /** Maximum retries on generation failure */\n maxRetries?: number\n /** Timeout per generation in milliseconds */\n timeout?: number\n /** Expert definitions */\n experts?: Record<string, PerstackConfigExpert>\n /** Custom Perstack API base URL */\n perstackApiBaseUrl?: string\n /** Custom command for @perstack/base skill */\n perstackBaseSkillCommand?: string[]\n /** Paths to .env files */\n envPath?: string[]\n}\n\nexport const perstackConfigSchema = z.object({\n provider: providerTableSchema.optional(),\n model: z.string().optional(),\n temperature: z.number().optional(),\n runtime: runtimeNameSchema.optional(),\n maxSteps: z.number().optional(),\n maxRetries: z.number().optional(),\n timeout: z.number().optional(),\n experts: z\n .record(\n z.string(),\n z.object({\n version: z.string().optional(),\n minRuntimeVersion: z.string().optional(),\n description: z.string().optional(),\n instruction: z.string(),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"mcpStdioSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional(),\n requiredEnv: z.array(z.string()).optional(),\n allowedDomains: z.array(domainPatternSchema).optional(),\n }),\n z.object({\n type: z.literal(\"mcpSseSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n endpoint: sseEndpointSchema,\n allowedDomains: z.array(domainPatternSchema).optional(),\n }),\n z.object({\n type: z.literal(\"interactiveSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(\n z.string(),\n z.object({\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n }),\n ),\n }),\n ]),\n )\n .optional(),\n delegates: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n }),\n )\n .optional(),\n perstackApiBaseUrl: z\n .url()\n .refine((url) => url.startsWith(\"https://\"), { message: \"perstackApiBaseUrl must use HTTPS\" })\n .optional(),\n perstackBaseSkillCommand: z.array(z.string()).optional(),\n envPath: z.array(z.string()).optional(),\n})\n","import { z } from \"zod\"\nimport type { ProviderName } from \"./provider-config.js\"\nimport { providerNameSchema } from \"./provider-config.js\"\nimport type { RuntimeName } from \"./runtime-name.js\"\nimport { runtimeNameSchema } from \"./runtime-name.js\"\n\n/** Parsed command options after transformation */\nexport interface CommandOptions {\n /** Path to perstack.toml config file */\n config?: string\n /** LLM provider to use */\n provider?: ProviderName\n /** Model name */\n model?: string\n /** Temperature (0-1) */\n temperature?: number\n /** Maximum steps */\n maxSteps?: number\n /** Maximum retries */\n maxRetries?: number\n /** Timeout in milliseconds */\n timeout?: number\n /** Custom job ID */\n jobId?: string\n /** Custom run ID */\n runId?: string\n /** Paths to .env files */\n envPath?: string[]\n /** Enable verbose logging */\n verbose?: boolean\n /** Continue most recent job */\n continue?: boolean\n /** Continue specific job by ID */\n continueJob?: string\n /** Resume from specific checkpoint (requires --continue or --continue-job) */\n resumeFrom?: string\n /** Query is interactive tool call result */\n interactiveToolCallResult?: boolean\n /** Execution runtime */\n runtime?: RuntimeName\n /** Workspace directory for Docker runtime */\n workspace?: string\n}\n\nconst commandOptionsSchema = z.object({\n config: z.string().optional(),\n provider: providerNameSchema.optional(),\n model: z.string().optional(),\n temperature: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseFloat(value)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n maxSteps: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseInt(value, 10)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n maxRetries: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseInt(value, 10)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n timeout: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseInt(value, 10)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n jobId: z.string().optional(),\n runId: z.string().optional(),\n envPath: z\n .array(z.string())\n .optional()\n .transform((value) => (value && value.length > 0 ? value : undefined)),\n verbose: z.boolean().optional(),\n continue: z.boolean().optional(),\n continueJob: z.string().optional(),\n resumeFrom: z.string().optional(),\n interactiveToolCallResult: z.boolean().optional(),\n runtime: runtimeNameSchema.optional(),\n workspace: z.string().optional(),\n})\n\n/** Input for the `perstack run` command */\nexport interface RunCommandInput {\n /** Expert key to run */\n expertKey: string\n /** Query or prompt */\n query: string\n /** Command options */\n options: CommandOptions\n}\n\nexport const runCommandInputSchema = z.object({\n expertKey: z.string(),\n query: z.string(),\n options: commandOptionsSchema,\n})\n\n/** Input for the `perstack start` command */\nexport interface StartCommandInput {\n /** Expert key to run (optional, prompts if not provided) */\n expertKey?: string\n /** Query or prompt (optional, prompts if not provided) */\n query?: string\n /** Command options */\n options: CommandOptions\n}\n\nexport const startCommandInputSchema = z.object({\n expertKey: z.string().optional(),\n query: z.string().optional(),\n options: commandOptionsSchema,\n})\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { z } from \"zod\"\nimport {\n defaultMaxRetries,\n defaultMaxSteps,\n defaultPerstackApiBaseUrl,\n defaultTemperature,\n defaultTimeout,\n expertKeyRegex,\n} from \"../constants/constants.js\"\nimport type { Checkpoint } from \"./checkpoint.js\"\nimport { checkpointSchema } from \"./checkpoint.js\"\nimport type { Expert } from \"./expert.js\"\nimport { expertSchema } from \"./expert.js\"\nimport type {\n ExpertMessage,\n InstructionMessage,\n Message,\n ToolMessage,\n UserMessage,\n} from \"./message.js\"\nimport type { PerstackConfigSkill } from \"./perstack-toml.js\"\nimport type { ProviderConfig } from \"./provider-config.js\"\nimport { providerConfigSchema } from \"./provider-config.js\"\nimport type { Step } from \"./step.js\"\nimport type { ToolCall } from \"./tool-call.js\"\nimport type { ToolResult } from \"./tool-result.js\"\nimport type { Usage } from \"./usage.js\"\n\n/** Parse an expert key into its components */\nexport function parseExpertKey(expertKey: string): {\n key: string\n name: string\n version?: string\n tag?: string\n} {\n const match = expertKey.match(expertKeyRegex)\n if (!match) {\n throw new Error(`Invalid expert key format: ${expertKey}`)\n }\n const [key, name, version, tag] = match\n if (!name) {\n throw new Error(`Invalid expert key format: ${expertKey}`)\n }\n return { key, name, version, tag }\n}\n\n/** Input for a run (text or interactive tool call result) */\nexport interface RunInput {\n /** Text query */\n text?: string\n /** Interactive tool call result (when continuing from interactive tool) */\n interactiveToolCallResult?: {\n toolCallId: string\n toolName: string\n skillName: string\n text: string\n }\n}\n\n/** Runtime settings for an Expert run */\nexport interface RunSetting {\n /** Model name to use */\n model: string\n /** Provider configuration */\n providerConfig: ProviderConfig\n /** Job ID this run belongs to */\n jobId: string\n /** Unique run identifier */\n runId: string\n /** Expert key to run */\n expertKey: string\n /** Input for the run */\n input: RunInput\n /** Map of expert keys to Expert definitions */\n experts: Record<string, Expert>\n /** Temperature for generation (0-1) */\n temperature: number\n /** Maximum steps before stopping (applies to Job's totalSteps) */\n maxSteps: number\n /** Maximum retries on generation failure */\n maxRetries: number\n /** Timeout per generation in milliseconds */\n timeout: number\n /** Unix timestamp when run started */\n startedAt: number\n /** Unix timestamp of last update */\n updatedAt: number\n /** Perstack API base URL */\n perstackApiBaseUrl: string\n /** Perstack API key */\n perstackApiKey?: string\n /** Custom command for @perstack/base */\n perstackBaseSkillCommand?: string[]\n /** Environment variables to pass to skills */\n env: Record<string, string>\n /** HTTP proxy URL for API requests */\n proxyUrl?: string\n /** Enable verbose output for build processes */\n verbose?: boolean\n}\n\n/** Parameters for starting a run */\nexport interface RunParams {\n /** Run settings */\n setting: RunSetting\n /** Optional checkpoint to resume from */\n checkpoint?: Checkpoint\n}\n\n/** Expert input type before schema transformation (skills without name, optional fields) */\ntype ExpertInput = {\n name: string\n version: string\n description?: string\n instruction: string\n skills?: Record<string, PerstackConfigSkill>\n delegates?: string[]\n tags?: string[]\n}\n\n/** Input type for runParamsSchema (before defaults/transforms) */\nexport type RunParamsInput = {\n setting: {\n model: string\n providerConfig: ProviderConfig\n jobId?: string\n runId?: string\n expertKey: string\n input: RunInput\n experts?: Record<string, ExpertInput>\n temperature?: number\n maxSteps?: number\n maxRetries?: number\n timeout?: number\n startedAt?: number\n updatedAt?: number\n perstackApiBaseUrl?: string\n perstackApiKey?: string\n perstackBaseSkillCommand?: string[]\n env?: Record<string, string>\n proxyUrl?: string\n verbose?: boolean\n }\n checkpoint?: Checkpoint\n}\n\nexport const runSettingSchema = z.object({\n model: z.string(),\n providerConfig: providerConfigSchema,\n jobId: z.string(),\n runId: z.string(),\n expertKey: z.string().min(1).regex(expertKeyRegex),\n input: z.object({\n text: z.string().optional(),\n interactiveToolCallResult: z\n .object({\n toolCallId: z.string(),\n toolName: z.string(),\n skillName: z.string(),\n text: z.string(),\n })\n .optional(),\n }),\n experts: z.record(z.string(), expertSchema),\n temperature: z.number().min(0).max(1),\n maxSteps: z.number().min(1).optional().default(defaultMaxSteps),\n maxRetries: z.number().min(0),\n timeout: z.number().min(0),\n startedAt: z.number(),\n updatedAt: z.number(),\n perstackApiBaseUrl: z.string().url(),\n perstackApiKey: z.string().optional(),\n perstackBaseSkillCommand: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()),\n proxyUrl: z.string().optional(),\n verbose: z.boolean().optional(),\n})\n\nexport const runParamsSchema = z.object({\n setting: z.object({\n model: z.string(),\n providerConfig: providerConfigSchema,\n jobId: z\n .string()\n .optional()\n .default(() => createId()),\n runId: z\n .string()\n .optional()\n .default(() => createId()),\n expertKey: z.string().min(1).regex(expertKeyRegex),\n input: z.object({\n text: z.string().optional(),\n interactiveToolCallResult: z\n .object({\n toolCallId: z.string(),\n toolName: z.string(),\n skillName: z.string(),\n text: z.string(),\n })\n .optional(),\n }),\n experts: z\n .record(z.string().min(1).regex(expertKeyRegex), expertSchema.omit({ key: true }))\n .optional()\n .default({})\n .transform((experts) =>\n Object.fromEntries(\n Object.entries(experts).map(([key, expertWithoutKey]) => [\n key,\n expertSchema.parse({\n ...expertWithoutKey,\n key,\n }),\n ]),\n ),\n ),\n temperature: z.number().min(0).max(1).optional().default(defaultTemperature),\n maxSteps: z.number().min(1).optional().default(defaultMaxSteps),\n maxRetries: z.number().min(0).optional().default(defaultMaxRetries),\n timeout: z.number().min(0).optional().default(defaultTimeout),\n startedAt: z.number().optional().default(Date.now()),\n updatedAt: z.number().optional().default(Date.now()),\n perstackApiBaseUrl: z.url().optional().default(defaultPerstackApiBaseUrl),\n perstackApiKey: z.string().optional(),\n perstackBaseSkillCommand: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional().default({}),\n proxyUrl: z.string().optional(),\n verbose: z.boolean().optional(),\n }),\n checkpoint: checkpointSchema.optional(),\n})\n\n/**\n * Expert run events - emitted during execution for observability.\n * All events contain deeply serializable properties for checkpoint storage.\n */\ntype ExpertEventPayloads = {\n startRun: {\n initialCheckpoint: Checkpoint\n inputMessages: (InstructionMessage | UserMessage | ToolMessage)[]\n }\n startGeneration: {\n messages: Message[]\n }\n retry: {\n reason: string\n newMessages: (UserMessage | ExpertMessage | ToolMessage)[]\n toolCalls?: ToolCall[]\n toolResults?: ToolResult[]\n usage: Usage\n }\n callTools: {\n newMessage: ExpertMessage\n toolCalls: ToolCall[]\n usage: Usage\n }\n callInteractiveTool: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n callDelegate: {\n newMessage: ExpertMessage\n toolCalls: ToolCall[]\n usage: Usage\n }\n resolveToolResults: {\n toolResults: ToolResult[]\n }\n resolveThought: {\n toolResult: ToolResult\n }\n attemptCompletion: {\n toolResult: ToolResult\n }\n finishToolCall: {\n newMessages: (UserMessage | ToolMessage)[]\n }\n resumeToolCalls: {\n pendingToolCalls: ToolCall[]\n partialToolResults: ToolResult[]\n }\n finishAllToolCalls: {\n newMessages: (UserMessage | ToolMessage)[]\n }\n continueToNextStep: {\n checkpoint: Checkpoint\n step: Step\n nextCheckpoint: Checkpoint\n }\n stopRunByInteractiveTool: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByDelegate: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByExceededMaxSteps: {\n checkpoint: Checkpoint\n step: Step\n }\n completeRun: {\n checkpoint: Checkpoint\n step: Step\n text: string\n usage: Usage\n }\n}\n\n/** Base properties for all run events */\nexport interface BaseEvent {\n /** Unique event ID */\n id: string\n /** Expert key that emitted this event */\n expertKey: string\n /** Unix timestamp when event was emitted */\n timestamp: number\n /** Job ID this event belongs to */\n jobId: string\n /** Run ID this event belongs to */\n runId: string\n /** Step number when event was emitted */\n stepNumber: number\n}\n\n/** All possible event types */\nexport type EventType = keyof ExpertEventPayloads\n\n/** Union type of all run events */\nexport type RunEvent = {\n [K in EventType]: BaseEvent & { type: K } & ExpertEventPayloads[K]\n}[EventType]\n\n/** Extract a specific event type */\nexport type EventForType<T extends EventType> = Extract<RunEvent, { type: T }>\n\n/** Factory function to create typed events */\nexport function createEvent<T extends EventType>(type: T) {\n return (\n setting: RunSetting,\n checkpoint: Checkpoint,\n data: Omit<\n EventForType<T>,\n \"type\" | \"id\" | \"expertKey\" | \"timestamp\" | \"jobId\" | \"runId\" | \"stepNumber\"\n >,\n ): EventForType<T> => {\n return {\n type,\n id: createId(),\n expertKey: checkpoint.expert.key,\n timestamp: Date.now(),\n jobId: setting.jobId,\n runId: setting.runId,\n stepNumber: checkpoint.stepNumber,\n ...data,\n } as EventForType<T>\n }\n}\n\nexport const startRun = createEvent(\"startRun\")\nexport const startGeneration = createEvent(\"startGeneration\")\nexport const retry = createEvent(\"retry\")\nexport const callTools = createEvent(\"callTools\")\nexport const callInteractiveTool = createEvent(\"callInteractiveTool\")\nexport const callDelegate = createEvent(\"callDelegate\")\nexport const resolveToolResults = createEvent(\"resolveToolResults\")\nexport const resolveThought = createEvent(\"resolveThought\")\nexport const attemptCompletion = createEvent(\"attemptCompletion\")\nexport const finishToolCall = createEvent(\"finishToolCall\")\nexport const resumeToolCalls = createEvent(\"resumeToolCalls\")\nexport const finishAllToolCalls = createEvent(\"finishAllToolCalls\")\nexport const completeRun = createEvent(\"completeRun\")\nexport const stopRunByInteractiveTool = createEvent(\"stopRunByInteractiveTool\")\nexport const stopRunByDelegate = createEvent(\"stopRunByDelegate\")\nexport const stopRunByExceededMaxSteps = createEvent(\"stopRunByExceededMaxSteps\")\nexport const continueToNextStep = createEvent(\"continueToNextStep\")\n\n/** Base properties for runtime events */\ninterface BaseRuntimeEvent {\n /** Unique event ID */\n id: string\n /** Unix timestamp */\n timestamp: number\n /** Job ID */\n jobId: string\n /** Run ID */\n runId: string\n}\n\n/** Runtime event payloads (infrastructure-level events) */\ntype RuntimeEventPayloads = {\n initializeRuntime: {\n runtimeVersion: string\n runtime?: string\n expertName: string\n experts: string[]\n model: string\n temperature: number\n maxSteps?: number\n maxRetries: number\n timeout: number\n query?: string\n interactiveToolCall?: {\n toolName: string\n toolCallId: string\n text: string\n }\n }\n skillStarting: {\n skillName: string\n command: string\n args: string[]\n }\n skillConnected: {\n skillName: string\n serverInfo?: {\n name: string\n version: string\n }\n connectDurationMs?: number\n totalDurationMs?: number\n }\n skillStderr: {\n skillName: string\n message: string\n }\n skillDisconnected: {\n skillName: string\n }\n streamingText: {\n text: string\n }\n /** Docker build progress event */\n dockerBuildProgress: {\n stage: \"pulling\" | \"building\" | \"complete\" | \"error\"\n service: string\n message: string\n progress?: number\n }\n /** Docker container status event */\n dockerContainerStatus: {\n status: \"starting\" | \"running\" | \"healthy\" | \"unhealthy\" | \"stopped\" | \"error\"\n service: string\n message?: string\n }\n /** Proxy access event (allow/block) */\n proxyAccess: {\n action: \"allowed\" | \"blocked\"\n domain: string\n port: number\n reason?: string\n }\n}\n\n/** All runtime event types */\nexport type RuntimeEventType = keyof RuntimeEventPayloads\n\n/** Union type of all runtime events */\nexport type RuntimeEvent = {\n [K in RuntimeEventType]: BaseRuntimeEvent & { type: K } & RuntimeEventPayloads[K]\n}[RuntimeEventType]\n\n/** Extract a specific runtime event type */\nexport type RuntimeEventForType<T extends RuntimeEventType> = Extract<RuntimeEvent, { type: T }>\n\n/** Factory function to create runtime events */\nexport function createRuntimeEvent<T extends RuntimeEventType>(\n type: T,\n jobId: string,\n runId: string,\n data: Omit<RuntimeEventForType<T>, \"type\" | \"id\" | \"timestamp\" | \"jobId\" | \"runId\">,\n): RuntimeEventForType<T> {\n return {\n type,\n id: createId(),\n timestamp: Date.now(),\n jobId,\n runId,\n ...data,\n } as RuntimeEventForType<T>\n}\n","import { z } from \"zod\"\nimport type { InstructionMessage, Message, ToolMessage, UserMessage } from \"./message.js\"\nimport {\n instructionMessageSchema,\n messageSchema,\n toolMessageSchema,\n userMessageSchema,\n} from \"./message.js\"\nimport type { ToolCall } from \"./tool-call.js\"\nimport { toolCallSchema } from \"./tool-call.js\"\nimport type { ToolResult } from \"./tool-result.js\"\nimport { toolResultSchema } from \"./tool-result.js\"\nimport type { Usage } from \"./usage.js\"\nimport { usageSchema } from \"./usage.js\"\n\n/**\n * A single execution step in an Expert run.\n * Each step represents one LLM generation cycle, optionally followed by tool calls.\n */\nexport interface Step {\n /** Sequential step number (1-indexed) */\n stepNumber: number\n /** Messages sent to the LLM for this step */\n inputMessages?: (InstructionMessage | UserMessage | ToolMessage)[]\n /** Messages generated during this step */\n newMessages: Message[]\n /** Tool calls made during this step, if any */\n toolCalls?: ToolCall[]\n /** Results of the tool calls, if any */\n toolResults?: ToolResult[]\n /** Tool calls waiting to be processed (sorted: MCP → Delegate → Interactive) */\n pendingToolCalls?: ToolCall[]\n /** Partial tool results collected so far (used during mixed tool call processing) */\n partialToolResults?: ToolResult[]\n /** Token usage for this step */\n usage: Usage\n /** Unix timestamp (ms) when step started */\n startedAt: number\n /** Unix timestamp (ms) when step finished */\n finishedAt?: number\n}\n\nexport const stepSchema = z.object({\n stepNumber: z.number(),\n inputMessages: z\n .array(z.union([instructionMessageSchema, userMessageSchema, toolMessageSchema]))\n .optional(),\n newMessages: z.array(messageSchema),\n toolCalls: z.array(toolCallSchema).optional(),\n toolResults: z.array(toolResultSchema).optional(),\n pendingToolCalls: z.array(toolCallSchema).optional(),\n partialToolResults: z.array(toolResultSchema).optional(),\n usage: usageSchema,\n startedAt: z.number(),\n finishedAt: z.number().optional(),\n})\nstepSchema satisfies z.ZodType<Step>\n","const SAFE_ENV_VARS = [\n // System\n \"PATH\",\n \"HOME\",\n \"SHELL\",\n \"TERM\",\n \"NODE_PATH\",\n // Proxy\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"http_proxy\",\n \"https_proxy\",\n \"NO_PROXY\",\n \"no_proxy\",\n \"PERSTACK_PROXY_URL\",\n \"NPM_CONFIG_PROXY\",\n \"NPM_CONFIG_HTTPS_PROXY\",\n]\nconst PROTECTED_ENV_VARS = new Set([\n \"PATH\",\n \"HOME\",\n \"SHELL\",\n \"NODE_PATH\",\n \"LD_PRELOAD\",\n \"LD_LIBRARY_PATH\",\n \"DYLD_INSERT_LIBRARIES\",\n \"DYLD_LIBRARY_PATH\",\n \"NODE_OPTIONS\",\n \"PYTHONPATH\",\n \"PERL5LIB\",\n \"RUBYLIB\",\n])\nexport function getFilteredEnv(additional?: Record<string, string>): Record<string, string> {\n const filtered: Record<string, string> = {}\n for (const key of SAFE_ENV_VARS) {\n if (process.env[key]) {\n filtered[key] = process.env[key]\n }\n }\n if (additional) {\n for (const [key, value] of Object.entries(additional)) {\n if (!PROTECTED_ENV_VARS.has(key.toUpperCase())) {\n filtered[key] = value\n }\n }\n }\n return filtered\n}\nexport { SAFE_ENV_VARS }\n","import type { ZodError, ZodSchema } from \"zod\"\n\nexport function formatZodError(error: ZodError): string {\n const issues = error.issues.map((issue) => {\n const path = issue.path.length > 0 ? `${issue.path.join(\".\")}: ` : \"\"\n return ` - ${path}${issue.message}`\n })\n return `Validation failed:\\n${issues.join(\"\\n\")}`\n}\n\nexport function parseWithFriendlyError<T>(\n schema: ZodSchema<T>,\n data: unknown,\n context?: string,\n): T {\n const result = schema.safeParse(data)\n if (result.success) {\n return result.data\n }\n const prefix = context ? `${context}: ` : \"\"\n throw new Error(`${prefix}${formatZodError(result.error)}`)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/base-adapter.ts","../../src/adapters/event-creators.ts","../../src/adapters/registry.ts","../../src/constants/constants.ts","../../src/known-models/index.ts","../../src/schemas/message-part.ts","../../src/schemas/message.ts","../../src/schemas/runtime-name.ts","../../src/schemas/tool-call.ts","../../src/schemas/tool-result.ts","../../src/schemas/usage.ts","../../src/schemas/checkpoint.ts","../../src/schemas/skill.ts","../../src/schemas/expert.ts","../../src/schemas/job.ts","../../src/schemas/provider-config.ts","../../src/schemas/perstack-toml.ts","../../src/schemas/run-command.ts","../../src/schemas/runtime.ts","../../src/schemas/step.ts","../../src/utils/env-filter.ts","../../src/utils/zod-error.ts"],"names":["z","isPrivateOrLocalIP","sseEndpointSchema","createId"],"mappings":"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","file":"index.js","sourcesContent":["import type { ChildProcess } from \"node:child_process\"\nimport { spawn } from \"node:child_process\"\nimport type { Expert } from \"../schemas/expert.js\"\nimport type {\n AdapterRunParams,\n AdapterRunResult,\n PrerequisiteResult,\n RuntimeAdapter,\n RuntimeExpertConfig,\n} from \"./types.js\"\n\nexport type ExecResult = {\n stdout: string\n stderr: string\n exitCode: number\n}\n\nexport abstract class BaseAdapter implements RuntimeAdapter {\n abstract readonly name: string\n abstract checkPrerequisites(): Promise<PrerequisiteResult>\n abstract run(params: AdapterRunParams): Promise<AdapterRunResult>\n\n convertExpert(expert: Expert): RuntimeExpertConfig {\n return { instruction: expert.instruction }\n }\n\n protected execCommand(args: string[]): Promise<ExecResult> {\n return new Promise((resolve) => {\n const [cmd, ...cmdArgs] = args\n if (!cmd) {\n resolve({ stdout: \"\", stderr: \"\", exitCode: 127 })\n return\n }\n const proc = spawn(cmd, cmdArgs, { cwd: process.cwd(), stdio: [\"pipe\", \"pipe\", \"pipe\"] })\n let stdout = \"\"\n let stderr = \"\"\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString()\n })\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString()\n })\n proc.on(\"close\", (code) => {\n resolve({ stdout, stderr, exitCode: code ?? 127 })\n })\n proc.on(\"error\", () => {\n resolve({ stdout: \"\", stderr: \"\", exitCode: 127 })\n })\n })\n }\n\n protected executeWithTimeout(proc: ChildProcess, timeout: number): Promise<ExecResult> {\n return new Promise((resolve, reject) => {\n let stdout = \"\"\n let stderr = \"\"\n const timer = setTimeout(() => {\n proc.kill(\"SIGTERM\")\n reject(new Error(`${this.name} timed out after ${timeout}ms`))\n }, timeout)\n proc.stdout?.on(\"data\", (data) => {\n stdout += data.toString()\n })\n proc.stderr?.on(\"data\", (data) => {\n stderr += data.toString()\n })\n proc.on(\"close\", (code) => {\n clearTimeout(timer)\n resolve({ stdout, stderr, exitCode: code ?? 127 })\n })\n proc.on(\"error\", (err) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Checkpoint } from \"../schemas/checkpoint.js\"\nimport type { ExpertMessage, ToolMessage } from \"../schemas/message.js\"\nimport type { RunEvent, RuntimeEvent } from \"../schemas/runtime.js\"\nimport type { RuntimeName } from \"../schemas/runtime-name.js\"\nimport type { ToolCall } from \"../schemas/tool-call.js\"\nimport type { ToolResult } from \"../schemas/tool-result.js\"\nimport type { Usage } from \"../schemas/usage.js\"\n\nexport function createEmptyUsage(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n }\n}\n\nexport type CreateCheckpointParams = {\n jobId: string\n runId: string\n expertKey: string\n expert: { key: string; name: string; version: string }\n output: string\n runtime: RuntimeName\n}\n\nexport function createNormalizedCheckpoint(params: CreateCheckpointParams): Checkpoint {\n const { jobId, runId, expert, output, runtime } = params\n const checkpointId = createId()\n const expertMessage: ExpertMessage = {\n id: createId(),\n type: \"expertMessage\",\n contents: [{ type: \"textPart\", id: createId(), text: output }],\n }\n return {\n id: checkpointId,\n jobId,\n runId,\n status: \"completed\",\n stepNumber: 1,\n messages: [expertMessage],\n expert: { key: expert.key, name: expert.name, version: expert.version },\n usage: createEmptyUsage(),\n metadata: { runtime },\n }\n}\n\nexport function createStartRunEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n checkpoint: Checkpoint,\n): RunEvent {\n return {\n type: \"startRun\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber: checkpoint.stepNumber,\n initialCheckpoint: checkpoint,\n inputMessages: [],\n }\n}\n\nexport function createRuntimeInitEvent(\n jobId: string,\n runId: string,\n expertName: string,\n runtime: RuntimeName,\n version: string,\n query?: string,\n): RuntimeEvent {\n return {\n type: \"initializeRuntime\",\n id: createId(),\n timestamp: Date.now(),\n jobId,\n runId,\n runtimeVersion: version,\n runtime,\n expertName,\n experts: [],\n model: `${runtime}:default`,\n temperature: 0,\n maxRetries: 0,\n timeout: 0,\n query,\n }\n}\n\nexport function createCompleteRunEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n checkpoint: Checkpoint,\n output: string,\n startedAt?: number,\n): RunEvent {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n return {\n type: \"completeRun\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber: checkpoint.stepNumber,\n checkpoint,\n step: {\n stepNumber: checkpoint.stepNumber,\n newMessages: lastMessage ? [lastMessage] : [],\n usage: createEmptyUsage(),\n startedAt: startedAt ?? Date.now(),\n },\n text: output,\n usage: createEmptyUsage(),\n }\n}\n\nexport function createStreamingTextEvent(jobId: string, runId: string, text: string): RuntimeEvent {\n return {\n type: \"streamingText\",\n id: createId(),\n timestamp: Date.now(),\n jobId,\n runId,\n text,\n }\n}\n\nexport function createCallToolsEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n stepNumber: number,\n toolCalls: ToolCall[],\n _checkpoint: Checkpoint,\n): RunEvent {\n const expertMessage: ExpertMessage = {\n id: createId(),\n type: \"expertMessage\",\n contents: [],\n }\n return {\n type: \"callTools\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber,\n newMessage: expertMessage,\n toolCalls,\n usage: createEmptyUsage(),\n }\n}\n\nexport function createResolveToolResultsEvent(\n jobId: string,\n runId: string,\n expertKey: string,\n stepNumber: number,\n toolResults: ToolResult[],\n): RunEvent {\n return {\n type: \"resolveToolResults\",\n id: createId(),\n expertKey,\n timestamp: Date.now(),\n jobId,\n runId,\n stepNumber,\n toolResults,\n }\n}\n\nexport function createToolMessage(\n toolCallId: string,\n toolName: string,\n resultText: string,\n): ToolMessage {\n return {\n id: createId(),\n type: \"toolMessage\",\n contents: [\n {\n type: \"toolResultPart\",\n id: createId(),\n toolCallId,\n toolName,\n contents: [{ type: \"textPart\", id: createId(), text: resultText }],\n },\n ],\n }\n}\n","import type { RuntimeName } from \"../schemas/runtime-name.js\"\nimport type { RuntimeAdapter } from \"./types.js\"\n\nconst adapters: Map<RuntimeName, () => RuntimeAdapter> = new Map()\n\nexport function registerAdapter(runtime: RuntimeName, factory: () => RuntimeAdapter): void {\n adapters.set(runtime, factory)\n}\n\nexport function getAdapter(runtime: RuntimeName): RuntimeAdapter {\n const factory = adapters.get(runtime)\n if (!factory) {\n throw new Error(\n `Runtime \"${runtime}\" is not registered. Available runtimes: ${Array.from(adapters.keys()).join(\", \")}`,\n )\n }\n return factory()\n}\n\nexport function isAdapterAvailable(runtime: RuntimeName): boolean {\n return adapters.has(runtime)\n}\n\nexport function getRegisteredRuntimes(): RuntimeName[] {\n return Array.from(adapters.keys())\n}\n","export const defaultPerstackApiBaseUrl = \"https://api.perstack.ai\"\n\n// Organization\nexport const organizationNameRegex = /^[a-z0-9][a-z0-9_.-]*$/\nexport const maxOrganizationNameLength = 128\n\n// Application\nexport const maxApplicationNameLength = 255\n\n// Expert\nexport const expertKeyRegex =\n /^((?:@[a-z0-9][a-z0-9_.-]*\\/)?[a-z0-9][a-z0-9_.-]*)(?:@((?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?)|@([a-z0-9][a-z0-9_.-]*))?$/\nexport const expertNameRegex = /^(@[a-z0-9][a-z0-9_-]*\\/)?[a-z0-9][a-z0-9_-]*$/\nexport const expertVersionRegex =\n /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?$/\nexport const tagNameRegex = /^[a-z0-9][a-z0-9_-]*$/\nexport const maxExpertNameLength = 255\nexport const maxExpertVersionTagLength = 255\nexport const maxExpertKeyLength = 511\nexport const maxExpertDescriptionLength = 1024 * 2\nexport const maxExpertInstructionLength = 1024 * 20\nexport const maxExpertSkillItems = 255\nexport const maxExpertDelegateItems = 255\nexport const maxExpertTagItems = 8\nexport const defaultTemperature = 0.0\nexport const defaultMaxSteps = 100\nexport const defaultMaxRetries = 5\nexport const defaultTimeout = 5 * 1000 * 60\n\n// ExpertJob\nexport const maxExpertJobQueryLength = 1024 * 20\nexport const maxExpertJobFileNameLength = 1024 * 10\n\n// Skill\nexport const packageWithVersionRegex =\n /^(?:@[a-z0-9][a-z0-9_.-]*\\/)?[a-z0-9][a-z0-9_.-]*(?:@(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?|@[a-z0-9][a-z0-9_.-]*)?$/\nexport const urlSafeRegex = /^[a-z0-9][a-z0-9_-]*$/\nexport const maxSkillNameLength = 255\nexport const maxSkillDescriptionLength = 1024 * 2\nexport const maxSkillRuleLength = 1024 * 2\nexport const maxSkillPickOmitItems = 255\nexport const maxSkillRequiredEnvItems = 255\nexport const maxSkillToolNameLength = 255\nexport const maxSkillEndpointLength = 1024 * 2\nexport const maxSkillInputJsonSchemaLength = 1024 * 20\nexport const maxSkillToolItems = 255\n\n// Checkpoint\nexport const maxCheckpointToolCallIdLength = 255\n\n// Workspace\nexport const envNameRegex = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/\nexport const maxEnvNameLength = 255\n","export const knownModels = [\n {\n provider: \"anthropic\",\n models: [\n // https://docs.claude.com/en/docs/about-claude/models/overview#model-comparison-table\n {\n name: \"claude-opus-4-5\",\n contextWindow: 200_000,\n maxOutputTokens: 32_000,\n },\n {\n name: \"claude-opus-4-1\",\n contextWindow: 200_000,\n maxOutputTokens: 32_000,\n },\n {\n name: \"claude-opus-4-20250514\",\n contextWindow: 200_000,\n maxOutputTokens: 32_000,\n },\n {\n name: \"claude-sonnet-4-5\",\n contextWindow: 200_000,\n maxOutputTokens: 64_000,\n },\n {\n name: \"claude-sonnet-4-20250514\",\n contextWindow: 200_000,\n maxOutputTokens: 64_000,\n },\n {\n name: \"claude-3-7-sonnet-20250219\",\n contextWindow: 200_000,\n maxOutputTokens: 64_000,\n },\n {\n name: \"claude-haiku-4-5\",\n contextWindow: 200_000,\n maxOutputTokens: 8_192,\n },\n {\n name: \"claude-3-5-haiku-latest\",\n contextWindow: 200_000,\n maxOutputTokens: 8_192,\n },\n ],\n },\n {\n provider: \"google\",\n models: [\n // https://ai.google.dev/gemini-api/docs/models#gemini-3-pro\n {\n name: \"gemini-3-pro-preview\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n // https://ai.google.dev/gemini-api/docs/models#gemini-2.5-pro\n {\n name: \"gemini-2.5-pro\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n // https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash\n {\n name: \"gemini-2.5-flash\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n // https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-lite\n {\n name: \"gemini-2.5-flash-lite\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n },\n ],\n },\n {\n provider: \"openai\",\n models: [\n // https://platform.openai.com/docs/models/gpt-5\n {\n name: \"gpt-5\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n },\n // https://platform.openai.com/docs/models/gpt-5-mini\n {\n name: \"gpt-5-mini\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n },\n // https://platform.openai.com/docs/models/gpt-5-nano\n {\n name: \"gpt-5-nano\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n },\n // https://platform.openai.com/docs/models/gpt-5-chat-latest\n {\n name: \"gpt-5-chat-latest\",\n contextWindow: 128_000,\n maxOutputTokens: 16_384,\n },\n // https://platform.openai.com/docs/models/o4-mini\n {\n name: \"o4-mini\",\n contextWindow: 200_000,\n maxOutputTokens: 100_000,\n },\n // https://platform.openai.com/docs/models/o3\n {\n name: \"o3\",\n contextWindow: 200_000,\n maxOutputTokens: 10_000,\n },\n // https://platform.openai.com/docs/models/o3-mini\n {\n name: \"o3-mini\",\n contextWindow: 200_000,\n maxOutputTokens: 10_000,\n },\n // https://platform.openai.com/docs/models/gpt-4.1\n {\n name: \"gpt-4.1\",\n contextWindow: 1_047_576,\n maxOutputTokens: 32_768,\n },\n ],\n },\n {\n provider: \"deepseek\",\n models: [\n {\n name: \"deepseek-chat\",\n contextWindow: 128_000,\n maxOutputTokens: 8_192,\n },\n {\n name: \"deepseek-reasoner\",\n contextWindow: 128_000,\n maxOutputTokens: 64_000,\n },\n ],\n },\n {\n provider: \"ollama\",\n models: [\n // https://platform.openai.com/docs/models/gpt-oss-20b\n {\n name: \"gpt-oss:20b\",\n contextWindow: 131_072,\n maxOutputTokens: 131_072,\n },\n // https://platform.openai.com/docs/models/gpt-oss-120b\n {\n name: \"gpt-oss:120b\",\n contextWindow: 131_072,\n maxOutputTokens: 131_072,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:1b\",\n contextWindow: 32_000,\n maxOutputTokens: 32_000,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:4b\",\n contextWindow: 128_000,\n maxOutputTokens: 128_000,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:12b\",\n contextWindow: 128_000,\n maxOutputTokens: 128_000,\n },\n // https://ai.google.dev/gemma/docs/core/model_card_3\n {\n name: \"gemma3:27b\",\n contextWindow: 128_000,\n maxOutputTokens: 128_000,\n },\n ],\n },\n]\n","import { z } from \"zod\"\n\n/** Base properties shared by all message parts */\nexport interface BasePart {\n /** Unique identifier for this part */\n id: string\n}\n\nexport const basePartSchema = z.object({\n id: z.string(),\n})\nbasePartSchema satisfies z.ZodType<BasePart>\n\n/** Plain text content */\nexport interface TextPart extends BasePart {\n type: \"textPart\"\n /** The text content */\n text: string\n}\n\nexport const textPartSchema = basePartSchema.extend({\n type: z.literal(\"textPart\"),\n text: z.string(),\n})\ntextPartSchema satisfies z.ZodType<TextPart>\n\n/** Image referenced by URL */\nexport interface ImageUrlPart extends BasePart {\n type: \"imageUrlPart\"\n /** URL to the image */\n url: string\n /** MIME type of the image */\n mimeType: string\n}\n\nexport const imageUrlPartSchema = basePartSchema.extend({\n type: z.literal(\"imageUrlPart\"),\n url: z.url(),\n mimeType: z.string(),\n})\nimageUrlPartSchema satisfies z.ZodType<ImageUrlPart>\n\n/** Image with base64-encoded inline data */\nexport interface ImageInlinePart extends BasePart {\n type: \"imageInlinePart\"\n /** Base64-encoded image data */\n encodedData: string\n /** MIME type of the image */\n mimeType: string\n}\n\nexport const imageInlinePartSchema = basePartSchema.extend({\n type: z.literal(\"imageInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nimageInlinePartSchema satisfies z.ZodType<ImageInlinePart>\n\n/** Image with binary data (internal use) */\nexport interface ImageBinaryPart extends BasePart {\n type: \"imageBinaryPart\"\n /** Binary data as string */\n data: string\n /** MIME type of the image */\n mimeType: string\n}\n\nexport const imageBinaryPartSchema = basePartSchema.extend({\n type: z.literal(\"imageBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nimageBinaryPartSchema satisfies z.ZodType<ImageBinaryPart>\n\n/** File referenced by URL */\nexport interface FileUrlPart extends BasePart {\n type: \"fileUrlPart\"\n /** URL to the file */\n url: string\n /** MIME type of the file */\n mimeType: string\n}\n\nexport const fileUrlPartSchema = basePartSchema.extend({\n type: z.literal(\"fileUrlPart\"),\n url: z.string().url(),\n mimeType: z.string(),\n})\nfileUrlPartSchema satisfies z.ZodType<FileUrlPart>\n\n/** File with base64-encoded inline data */\nexport interface FileInlinePart extends BasePart {\n type: \"fileInlinePart\"\n /** Base64-encoded file data */\n encodedData: string\n /** MIME type of the file */\n mimeType: string\n}\n\nexport const fileInlinePartSchema = basePartSchema.extend({\n type: z.literal(\"fileInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nfileInlinePartSchema satisfies z.ZodType<FileInlinePart>\n\n/** File with binary data (internal use) */\nexport interface FileBinaryPart extends BasePart {\n type: \"fileBinaryPart\"\n /** Binary data as string */\n data: string\n /** MIME type of the file */\n mimeType: string\n}\n\nexport const fileBinaryPartSchema = basePartSchema.extend({\n type: z.literal(\"fileBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nfileBinaryPartSchema satisfies z.ZodType<FileBinaryPart>\n\n/** A tool call request from the Expert */\nexport interface ToolCallPart extends BasePart {\n type: \"toolCallPart\"\n /** Unique identifier for this tool call */\n toolCallId: string\n /** Name of the tool to call */\n toolName: string\n /** Arguments to pass to the tool */\n args: unknown\n}\n\nexport const toolCallPartSchema = basePartSchema.extend({\n type: z.literal(\"toolCallPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n args: z.unknown(),\n})\ntoolCallPartSchema satisfies z.ZodType<ToolCallPart>\n\n/** Result of a tool call */\nexport interface ToolResultPart extends BasePart {\n type: \"toolResultPart\"\n /** ID of the tool call this result corresponds to */\n toolCallId: string\n /** Name of the tool that was called */\n toolName: string\n /** Content of the tool result */\n contents: (TextPart | ImageInlinePart | FileInlinePart)[]\n /** Whether the tool call resulted in an error */\n isError?: boolean\n}\n\nexport const toolResultPartSchema = basePartSchema.extend({\n type: z.literal(\"toolResultPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n contents: z.array(z.union([textPartSchema, imageInlinePartSchema, fileInlinePartSchema])),\n isError: z.boolean().optional(),\n})\ntoolResultPartSchema satisfies z.ZodType<ToolResultPart>\n\n/** All possible message part types */\nexport type MessagePart =\n | TextPart\n | ImageUrlPart\n | ImageInlinePart\n | ImageBinaryPart\n | FileUrlPart\n | FileInlinePart\n | FileBinaryPart\n | ToolCallPart\n | ToolResultPart\n\nexport const messagePartSchema = z.discriminatedUnion(\"type\", [\n textPartSchema,\n imageUrlPartSchema,\n imageInlinePartSchema,\n imageBinaryPartSchema,\n fileUrlPartSchema,\n fileInlinePartSchema,\n fileBinaryPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n])\n","import { z } from \"zod\"\nimport type {\n FileBinaryPart,\n FileInlinePart,\n FileUrlPart,\n ImageBinaryPart,\n ImageInlinePart,\n ImageUrlPart,\n TextPart,\n ToolCallPart,\n ToolResultPart,\n} from \"./message-part.js\"\nimport {\n fileBinaryPartSchema,\n fileInlinePartSchema,\n fileUrlPartSchema,\n imageBinaryPartSchema,\n imageInlinePartSchema,\n imageUrlPartSchema,\n textPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n} from \"./message-part.js\"\n\n/** Base properties shared by all messages */\ninterface BaseMessage {\n /** Unique identifier for this message */\n id: string\n}\n\nconst baseMessageSchema = z.object({\n id: z.string(),\n})\n\n/** System instruction message sent at the start of a conversation */\nexport interface InstructionMessage extends BaseMessage {\n type: \"instructionMessage\"\n /** Text content of the instruction */\n contents: TextPart[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const instructionMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"instructionMessage\"),\n contents: z.array(textPartSchema),\n cache: z.boolean().optional(),\n})\ninstructionMessageSchema satisfies z.ZodType<InstructionMessage>\n\n/** Message from the user (human or system providing input) */\nexport interface UserMessage extends BaseMessage {\n type: \"userMessage\"\n /** Content of the user message (text, images, or files) */\n contents: (\n | TextPart\n | ImageUrlPart\n | ImageInlinePart\n | ImageBinaryPart\n | FileUrlPart\n | FileInlinePart\n | FileBinaryPart\n )[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const userMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"userMessage\"),\n contents: z.array(\n z.union([\n textPartSchema,\n imageUrlPartSchema,\n imageInlinePartSchema,\n imageBinaryPartSchema,\n fileUrlPartSchema,\n fileInlinePartSchema,\n fileBinaryPartSchema,\n ]),\n ),\n cache: z.boolean().optional(),\n})\nuserMessageSchema satisfies z.ZodType<UserMessage>\n\n/** Message generated by the Expert (LLM response) */\nexport interface ExpertMessage extends BaseMessage {\n type: \"expertMessage\"\n /** Content generated by the Expert (text or tool calls) */\n contents: (TextPart | ToolCallPart)[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const expertMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"expertMessage\"),\n contents: z.array(z.union([textPartSchema, toolCallPartSchema])),\n cache: z.boolean().optional(),\n})\nexpertMessageSchema satisfies z.ZodType<ExpertMessage>\n\n/** Message containing tool execution results */\nexport interface ToolMessage extends BaseMessage {\n type: \"toolMessage\"\n /** Tool result contents */\n contents: ToolResultPart[]\n /** Whether to cache this message for prompt caching */\n cache?: boolean\n}\n\nexport const toolMessageSchema = baseMessageSchema.extend({\n type: z.literal(\"toolMessage\"),\n contents: z.array(toolResultPartSchema),\n cache: z.boolean().optional(),\n})\ntoolMessageSchema satisfies z.ZodType<ToolMessage>\n\n/** All possible message types */\nexport type Message = InstructionMessage | UserMessage | ExpertMessage | ToolMessage\n\nexport const messageSchema = z.union([\n instructionMessageSchema,\n userMessageSchema,\n expertMessageSchema,\n toolMessageSchema,\n])\n","import { z } from \"zod\"\n\nexport type RuntimeName = \"local\" | \"cursor\" | \"claude-code\" | \"gemini\" | \"docker\"\n\nexport const runtimeNameSchema = z.enum([\"local\", \"cursor\", \"claude-code\", \"gemini\", \"docker\"])\n","import { z } from \"zod\"\nimport { maxSkillNameLength, maxSkillToolNameLength } from \"../constants/constants.js\"\n\n/** A tool call made by an Expert during execution */\nexport interface ToolCall {\n /** Unique identifier for this tool call */\n id: string\n /** Name of the skill providing the tool */\n skillName: string\n /** Name of the tool being called */\n toolName: string\n /** Arguments passed to the tool */\n args: Record<string, unknown>\n}\n\nexport const toolCallSchema = z.object({\n id: z.string().min(1).max(255),\n skillName: z.string().min(1).max(maxSkillNameLength),\n toolName: z.string().min(1).max(maxSkillToolNameLength),\n args: z.record(z.string().min(1), z.unknown()),\n})\ntoolCallSchema satisfies z.ZodType<ToolCall>\n","import { z } from \"zod\"\nimport { maxSkillNameLength, maxSkillToolNameLength } from \"../constants/constants.js\"\nimport type { MessagePart } from \"./message-part.js\"\nimport { messagePartSchema } from \"./message-part.js\"\n\n/** Result returned from a tool call */\nexport interface ToolResult {\n /** Unique identifier for this result */\n id: string\n /** Name of the skill that provided the tool */\n skillName: string\n /** Name of the tool that was called */\n toolName: string\n /** Content parts returned by the tool */\n result: MessagePart[]\n}\n\nexport const toolResultSchema = z.object({\n id: z.string().min(1).max(255),\n skillName: z.string().min(1).max(maxSkillNameLength),\n toolName: z.string().min(1).max(maxSkillToolNameLength),\n result: z.array(messagePartSchema),\n})\ntoolResultSchema satisfies z.ZodType<ToolResult>\n","import { z } from \"zod\"\n\n/** Token usage statistics for a single step or run */\nexport interface Usage {\n /** Number of tokens in the input prompt */\n inputTokens: number\n /** Number of tokens generated in the response */\n outputTokens: number\n /** Number of tokens used for reasoning (extended thinking) */\n reasoningTokens: number\n /** Total tokens (input + output) */\n totalTokens: number\n /** Number of input tokens served from cache */\n cachedInputTokens: number\n}\n\nexport const usageSchema = z.object({\n inputTokens: z.number(),\n outputTokens: z.number(),\n reasoningTokens: z.number(),\n totalTokens: z.number(),\n cachedInputTokens: z.number(),\n})\nusageSchema satisfies z.ZodType<Usage>\n","import { z } from \"zod\"\nimport type { Message } from \"./message.js\"\nimport { messageSchema } from \"./message.js\"\nimport type { RuntimeName } from \"./runtime-name.js\"\nimport { runtimeNameSchema } from \"./runtime-name.js\"\nimport type { ToolCall } from \"./tool-call.js\"\nimport { toolCallSchema } from \"./tool-call.js\"\nimport type { ToolResult } from \"./tool-result.js\"\nimport { toolResultSchema } from \"./tool-result.js\"\nimport type { Usage } from \"./usage.js\"\nimport { usageSchema } from \"./usage.js\"\n\n/** Status of a checkpoint in the execution lifecycle */\nexport type CheckpointStatus =\n | \"init\"\n | \"proceeding\"\n | \"completed\"\n | \"stoppedByInteractiveTool\"\n | \"stoppedByDelegate\"\n | \"stoppedByExceededMaxSteps\"\n | \"stoppedByError\"\n\nexport const checkpointStatusSchema = z.enum([\n \"init\",\n \"proceeding\",\n \"completed\",\n \"stoppedByInteractiveTool\",\n \"stoppedByDelegate\",\n \"stoppedByExceededMaxSteps\",\n \"stoppedByError\",\n])\n\n/** Information about a delegation target */\nexport interface DelegationTarget {\n expert: {\n key: string\n name: string\n version: string\n }\n toolCallId: string\n toolName: string\n query: string\n}\n\n/**\n * A checkpoint represents a point-in-time snapshot of an Expert's execution state.\n * Used for resuming, debugging, and observability.\n */\nexport interface Checkpoint {\n /** Unique identifier for this checkpoint */\n id: string\n /** Job ID this checkpoint belongs to */\n jobId: string\n /** Run ID this checkpoint belongs to */\n runId: string\n /** Current execution status */\n status: CheckpointStatus\n /** Current step number within this Run */\n stepNumber: number\n /** All messages in the conversation so far */\n messages: Message[]\n /** Expert executing this checkpoint */\n expert: {\n /** Expert key (e.g., \"my-expert@1.0.0\") */\n key: string\n /** Expert name */\n name: string\n /** Expert version */\n version: string\n }\n /** If delegating, information about the target Expert(s) - supports parallel delegation */\n delegateTo?: DelegationTarget[]\n /** If delegated, information about the parent Expert */\n delegatedBy?: {\n /** The parent Expert that delegated */\n expert: {\n key: string\n name: string\n version: string\n }\n /** Tool call ID from the parent */\n toolCallId: string\n /** Name of the delegation tool */\n toolName: string\n /** Checkpoint ID of the parent */\n checkpointId: string\n }\n /** Accumulated token usage */\n usage: Usage\n /** Model's context window size in tokens */\n contextWindow?: number\n /** Context window usage ratio (0-1) */\n contextWindowUsage?: number\n /** Tool calls waiting to be processed (for resume after delegate/interactive) */\n pendingToolCalls?: ToolCall[]\n /** Partial tool results collected before stopping (for resume) */\n partialToolResults?: ToolResult[]\n /** Optional metadata for runtime-specific information */\n metadata?: {\n /** Runtime that executed this checkpoint */\n runtime?: RuntimeName\n /** Additional runtime-specific data */\n [key: string]: unknown\n }\n}\n\nexport const delegationTargetSchema = z.object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n query: z.string(),\n})\ndelegationTargetSchema satisfies z.ZodType<DelegationTarget>\n\nexport const checkpointSchema = z.object({\n id: z.string(),\n jobId: z.string(),\n runId: z.string(),\n status: checkpointStatusSchema,\n stepNumber: z.number(),\n messages: z.array(messageSchema),\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n delegateTo: z.array(delegationTargetSchema).optional(),\n delegatedBy: z\n .object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n checkpointId: z.string(),\n })\n .optional(),\n usage: usageSchema,\n contextWindow: z.number().optional(),\n contextWindowUsage: z.number().optional(),\n pendingToolCalls: z.array(toolCallSchema).optional(),\n partialToolResults: z.array(toolResultSchema).optional(),\n metadata: z\n .object({\n runtime: runtimeNameSchema.optional(),\n })\n .passthrough()\n .optional(),\n})\ncheckpointSchema satisfies z.ZodType<Checkpoint>\n","import { z } from \"zod\"\n\nfunction isPrivateOrLocalIP(hostname: string): boolean {\n if (\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"0.0.0.0\"\n ) {\n return true\n }\n const ipv4Match = hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)\n if (ipv4Match) {\n const a = Number(ipv4Match[1])\n const b = Number(ipv4Match[2])\n if (a === 10) return true\n if (a === 172 && b >= 16 && b <= 31) return true\n if (a === 192 && b === 168) return true\n if (a === 169 && b === 254) return true\n if (a === 127) return true\n }\n if (hostname.includes(\":\")) {\n if (hostname.startsWith(\"fe80:\") || hostname.startsWith(\"fc\") || hostname.startsWith(\"fd\")) {\n return true\n }\n }\n if (hostname.startsWith(\"::ffff:\")) {\n const ipv4Part = hostname.slice(7)\n if (isPrivateOrLocalIP(ipv4Part)) {\n return true\n }\n }\n return false\n}\nconst sseEndpointSchema = z\n .string()\n .url()\n .refine(\n (url) => {\n try {\n const parsed = new URL(url)\n if (parsed.protocol !== \"https:\") return false\n if (isPrivateOrLocalIP(parsed.hostname)) return false\n return true\n } catch {\n return false\n }\n },\n { message: \"Endpoint must be a public HTTPS URL\" },\n )\n\n/** MCP skill using stdio transport */\nexport interface McpStdioSkill {\n type: \"mcpStdioSkill\"\n /** Skill name (derived from key) */\n name: string\n /** Human-readable description */\n description?: string\n /** Usage rules for the LLM */\n rule?: string\n /** Tool names to include (whitelist) */\n pick: string[]\n /** Tool names to exclude (blacklist) */\n omit: string[]\n /** Command to execute (e.g., \"npx\") */\n command: string\n /** Package name for npx/uvx */\n packageName?: string\n /** Additional arguments */\n args: string[]\n /** Environment variables required by this skill */\n requiredEnv: string[]\n /** Whether to delay initialization until first use */\n lazyInit: boolean\n}\n\nexport const mcpStdioSkillSchema = z.object({\n type: z.literal(\"mcpStdioSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional().default([]),\n requiredEnv: z.array(z.string()).optional().default([]),\n lazyInit: z.boolean().optional().default(false),\n})\nmcpStdioSkillSchema satisfies z.ZodType<McpStdioSkill>\n\n/** MCP skill using SSE transport */\nexport interface McpSseSkill {\n type: \"mcpSseSkill\"\n /** Skill name (derived from key) */\n name: string\n /** Human-readable description */\n description?: string\n /** Usage rules for the LLM */\n rule?: string\n /** Tool names to include (whitelist) */\n pick: string[]\n /** Tool names to exclude (blacklist) */\n omit: string[]\n /** SSE endpoint URL */\n endpoint: string\n}\n\nexport const mcpSseSkillSchema = z.object({\n type: z.literal(\"mcpSseSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n endpoint: sseEndpointSchema,\n})\nmcpSseSkillSchema satisfies z.ZodType<McpSseSkill>\n\n/** Definition of an interactive tool within an interactive skill */\nexport interface InteractiveTool {\n /** Tool name */\n name: string\n /** Human-readable description */\n description?: string\n /** JSON Schema for tool input as a string */\n inputJsonSchema: string\n}\n\nexport const interactiveToolSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n})\ninteractiveToolSchema satisfies z.ZodType<InteractiveTool>\n\n/** Skill that requires human interaction to complete tool calls */\nexport interface InteractiveSkill {\n type: \"interactiveSkill\"\n /** Skill name (derived from key) */\n name: string\n /** Human-readable description */\n description?: string\n /** Usage rules for the LLM */\n rule?: string\n /** Map of tool name to tool definition */\n tools: Record<string, InteractiveTool>\n}\n\nexport const interactiveSkillSchema = z.object({\n type: z.literal(\"interactiveSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(z.string(), interactiveToolSchema.omit({ name: true })).transform((tools) => {\n return Object.fromEntries(\n Object.entries(tools).map(([key, toolWithoutName]) => [\n key,\n interactiveToolSchema.parse({ ...toolWithoutName, name: key }),\n ]),\n )\n }),\n})\n\n/** All possible skill types */\nexport type Skill = McpStdioSkill | McpSseSkill | InteractiveSkill\n\nexport const skillSchema = z.discriminatedUnion(\"type\", [\n mcpStdioSkillSchema,\n mcpSseSkillSchema,\n interactiveSkillSchema,\n])\n","import { z } from \"zod\"\nimport {\n expertKeyRegex,\n expertNameRegex,\n expertVersionRegex,\n maxExpertNameLength,\n tagNameRegex,\n} from \"../constants/constants.js\"\nimport type { InteractiveSkill, McpSseSkill, McpStdioSkill, Skill } from \"./skill.js\"\nimport { interactiveSkillSchema, mcpSseSkillSchema, mcpStdioSkillSchema } from \"./skill.js\"\n\n/**\n * An Expert definition - an AI agent with specific skills and instructions.\n * Experts can delegate to other Experts and use MCP tools.\n */\nexport interface Expert {\n /** Unique key identifying this Expert (e.g., \"my-expert\" or \"my-expert@1.0.0\") */\n key: string\n /** Display name for the Expert */\n name: string\n /** Semantic version string */\n version: string\n /** Human-readable description of what this Expert does */\n description?: string\n /** System instruction defining the Expert's behavior */\n instruction: string\n /** Map of skill name to skill configuration */\n skills: Record<string, Skill>\n /** List of Expert keys this Expert can delegate to */\n delegates: string[]\n /** Tags for categorization and discovery */\n tags: string[]\n}\n\ntype SkillWithoutName =\n | Omit<McpStdioSkill, \"name\">\n | Omit<McpSseSkill, \"name\">\n | Omit<InteractiveSkill, \"name\">\n\nexport const expertSchema = z.object({\n key: z.string().regex(expertKeyRegex).min(1),\n name: z.string().regex(expertNameRegex).min(1).max(maxExpertNameLength),\n version: z.string().regex(expertVersionRegex),\n description: z\n .string()\n .min(1)\n .max(1024 * 2)\n .optional(),\n instruction: z\n .string()\n .min(1)\n .max(1024 * 20),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n mcpStdioSkillSchema.omit({ name: true }),\n mcpSseSkillSchema.omit({ name: true }),\n interactiveSkillSchema.omit({ name: true }),\n ]),\n )\n .optional()\n .default({\n \"@perstack/base\": {\n type: \"mcpStdioSkill\",\n description: \"Base skill\",\n command: \"npx\",\n args: [\"-y\", \"@perstack/base\"],\n pick: [],\n omit: [],\n requiredEnv: [],\n lazyInit: false,\n } satisfies SkillWithoutName,\n })\n .transform((skills) => {\n return Object.fromEntries(\n Object.entries(skills).map(([key, skillWithoutName]) => [\n key,\n z\n .discriminatedUnion(\"type\", [\n mcpStdioSkillSchema,\n mcpSseSkillSchema,\n interactiveSkillSchema,\n ])\n .parse({ ...skillWithoutName, name: key }),\n ]),\n )\n }),\n delegates: z.array(z.string().regex(expertKeyRegex).min(1)).optional().default([]),\n tags: z.array(z.string().regex(tagNameRegex).min(1)).optional().default([]),\n})\n","import { z } from \"zod\"\nimport type { Usage } from \"./usage.js\"\nimport { usageSchema } from \"./usage.js\"\n\nexport type JobStatus =\n | \"running\"\n | \"completed\"\n | \"stoppedByMaxSteps\"\n | \"stoppedByInteractiveTool\"\n | \"stoppedByError\"\n\nexport const jobStatusSchema = z.enum([\n \"running\",\n \"completed\",\n \"stoppedByMaxSteps\",\n \"stoppedByInteractiveTool\",\n \"stoppedByError\",\n])\n\nexport interface Job {\n id: string\n status: JobStatus\n coordinatorExpertKey: string\n totalSteps: number\n maxSteps?: number\n usage: Usage\n startedAt: number\n finishedAt?: number\n}\n\nexport const jobSchema = z.object({\n id: z.string(),\n status: jobStatusSchema,\n coordinatorExpertKey: z.string(),\n totalSteps: z.number(),\n maxSteps: z.number().optional(),\n usage: usageSchema,\n startedAt: z.number(),\n finishedAt: z.number().optional(),\n})\njobSchema satisfies z.ZodType<Job>\n","import { z } from \"zod\"\n\n/** HTTP headers for API requests */\nexport type Headers = Record<string, string> | undefined\n\nexport const headersSchema = z.record(z.string(), z.string()).optional()\n\n/** Supported LLM provider names */\nexport type ProviderName =\n | \"anthropic\"\n | \"google\"\n | \"openai\"\n | \"ollama\"\n | \"azure-openai\"\n | \"amazon-bedrock\"\n | \"google-vertex\"\n | \"deepseek\"\n\nexport const providerNameSchema = z.enum([\n \"anthropic\",\n \"google\",\n \"openai\",\n \"ollama\",\n \"azure-openai\",\n \"amazon-bedrock\",\n \"google-vertex\",\n \"deepseek\",\n])\n\n/** Anthropic provider configuration */\nexport interface AnthropicProviderConfig {\n providerName: \"anthropic\"\n /** API key for Anthropic */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const anthropicProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.anthropic),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\nanthropicProviderConfigSchema satisfies z.ZodType<AnthropicProviderConfig>\n\n/** Google Generative AI provider configuration */\nexport interface GoogleGenerativeAiProviderConfig {\n providerName: \"google\"\n /** API key for Google */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const googleGenerativeAiProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.google),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\ngoogleGenerativeAiProviderConfigSchema satisfies z.ZodType<GoogleGenerativeAiProviderConfig>\n\n/** OpenAI provider configuration */\nexport interface OpenAiProviderConfig {\n providerName: \"openai\"\n /** API key for OpenAI */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Organization ID */\n organization?: string\n /** Project ID */\n project?: string\n /** Custom name for the provider instance */\n name?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const openAiProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.openai),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n organization: z.string().optional(),\n project: z.string().optional(),\n name: z.string().optional(),\n headers: headersSchema,\n})\nopenAiProviderConfigSchema satisfies z.ZodType<OpenAiProviderConfig>\n\n/** Ollama provider configuration */\nexport interface OllamaProviderConfig {\n providerName: \"ollama\"\n /** Custom base URL (defaults to localhost) */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const ollamaProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.ollama),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\nollamaProviderConfigSchema satisfies z.ZodType<OllamaProviderConfig>\n\n/** Azure OpenAI provider configuration */\nexport interface AzureOpenAiProviderConfig {\n providerName: \"azure-openai\"\n /** API key for Azure */\n apiKey: string\n /** Azure resource name */\n resourceName?: string\n /** API version */\n apiVersion?: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n /** Use deployment-based URLs */\n useDeploymentBasedUrls?: boolean\n}\n\nexport const azureOpenAiProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum[\"azure-openai\"]),\n apiKey: z.string(),\n resourceName: z.string().optional(),\n apiVersion: z.string().optional(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n useDeploymentBasedUrls: z.boolean().optional(),\n})\nazureOpenAiProviderConfigSchema satisfies z.ZodType<AzureOpenAiProviderConfig>\n\n/** Amazon Bedrock provider configuration */\nexport interface AmazonBedrockProviderConfig {\n providerName: \"amazon-bedrock\"\n /** AWS access key ID */\n accessKeyId: string\n /** AWS secret access key */\n secretAccessKey: string\n /** AWS region */\n region: string\n /** AWS session token (for temporary credentials) */\n sessionToken?: string\n}\n\nexport const amazonBedrockProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum[\"amazon-bedrock\"]),\n accessKeyId: z.string(),\n secretAccessKey: z.string(),\n region: z.string(),\n sessionToken: z.string().optional(),\n})\namazonBedrockProviderConfigSchema satisfies z.ZodType<AmazonBedrockProviderConfig>\n\n/** Google Vertex AI provider configuration */\nexport interface GoogleVertexProviderConfig {\n providerName: \"google-vertex\"\n /** GCP project ID */\n project?: string\n /** GCP location */\n location?: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const googleVertexProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum[\"google-vertex\"]),\n project: z.string().optional(),\n location: z.string().optional(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\ngoogleVertexProviderConfigSchema satisfies z.ZodType<GoogleVertexProviderConfig>\n\n/** DeepSeek provider configuration */\nexport interface DeepseekProviderConfig {\n providerName: \"deepseek\"\n /** API key for DeepSeek */\n apiKey: string\n /** Custom base URL */\n baseUrl?: string\n /** Custom headers */\n headers?: Headers\n}\n\nexport const deepseekProviderConfigSchema = z.object({\n providerName: z.literal(providerNameSchema.enum.deepseek),\n apiKey: z.string(),\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\ndeepseekProviderConfigSchema satisfies z.ZodType<DeepseekProviderConfig>\n\n/** Union of all provider configurations */\nexport type ProviderConfig =\n | AnthropicProviderConfig\n | GoogleGenerativeAiProviderConfig\n | OpenAiProviderConfig\n | OllamaProviderConfig\n | AzureOpenAiProviderConfig\n | AmazonBedrockProviderConfig\n | GoogleVertexProviderConfig\n | DeepseekProviderConfig\n\nexport const providerConfigSchema = z.discriminatedUnion(\"providerName\", [\n anthropicProviderConfigSchema,\n googleGenerativeAiProviderConfigSchema,\n openAiProviderConfigSchema,\n ollamaProviderConfigSchema,\n azureOpenAiProviderConfigSchema,\n amazonBedrockProviderConfigSchema,\n googleVertexProviderConfigSchema,\n deepseekProviderConfigSchema,\n])\n","import { z } from \"zod\"\nimport { headersSchema } from \"./provider-config.js\"\nimport type { RuntimeName } from \"./runtime-name.js\"\nimport { runtimeNameSchema } from \"./runtime-name.js\"\n\nconst domainPatternRegex =\n /^(\\*\\.)?[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$/\nconst punycodeRegex = /(?:^|\\.)(xn--)/i\nexport const domainPatternSchema = z\n .string()\n .regex(domainPatternRegex, {\n message:\n \"Invalid domain pattern. Use exact domain (example.com) or wildcard prefix (*.example.com)\",\n })\n .refine((domain) => !punycodeRegex.test(domain), {\n message:\n \"Punycode domains (xn--) are not allowed to prevent homograph attacks. Use ASCII domains only.\",\n })\n\nfunction isPrivateOrLocalIP(hostname: string): boolean {\n if (\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"0.0.0.0\"\n ) {\n return true\n }\n const ipv4Match = hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)\n if (ipv4Match) {\n const a = Number(ipv4Match[1])\n const b = Number(ipv4Match[2])\n if (a === 10) return true\n if (a === 172 && b >= 16 && b <= 31) return true\n if (a === 192 && b === 168) return true\n if (a === 169 && b === 254) return true\n if (a === 127) return true\n }\n if (hostname.includes(\":\")) {\n if (hostname.startsWith(\"fe80:\") || hostname.startsWith(\"fc\") || hostname.startsWith(\"fd\")) {\n return true\n }\n }\n if (hostname.startsWith(\"::ffff:\")) {\n const ipv4Part = hostname.slice(7)\n if (isPrivateOrLocalIP(ipv4Part)) {\n return true\n }\n }\n return false\n}\n\nconst sseEndpointSchema = z\n .string()\n .url()\n .refine(\n (url) => {\n try {\n const parsed = new URL(url)\n if (parsed.protocol !== \"https:\") return false\n if (isPrivateOrLocalIP(parsed.hostname)) return false\n return true\n } catch {\n return false\n }\n },\n { message: \"SSE endpoint must be a public HTTPS URL\" },\n )\n\nconst httpsUrlSchema = z\n .string()\n .url()\n .refine((url) => url.startsWith(\"https://\"), { message: \"URL must use HTTPS\" })\n\nconst anthropicSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\nconst googleSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\nconst openAiSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n organization: z.string().optional(),\n project: z.string().optional(),\n name: z.string().optional(),\n headers: headersSchema,\n})\n\nconst ollamaSettingSchema = z.object({\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\n\nconst azureOpenAiSettingSchema = z.object({\n resourceName: z.string().optional(),\n apiVersion: z.string().optional(),\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n useDeploymentBasedUrls: z.boolean().optional(),\n})\n\nconst amazonBedrockSettingSchema = z.object({\n region: z.string().optional(),\n})\n\nconst googleVertexSettingSchema = z.object({\n project: z.string().optional(),\n location: z.string().optional(),\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\nconst deepseekSettingSchema = z.object({\n baseUrl: httpsUrlSchema.optional(),\n headers: headersSchema,\n})\n\n/** Provider configuration in perstack.toml */\nexport type ProviderTable =\n | { providerName: \"anthropic\"; setting?: z.infer<typeof anthropicSettingSchema> }\n | { providerName: \"google\"; setting?: z.infer<typeof googleSettingSchema> }\n | { providerName: \"openai\"; setting?: z.infer<typeof openAiSettingSchema> }\n | { providerName: \"ollama\"; setting?: z.infer<typeof ollamaSettingSchema> }\n | { providerName: \"azure-openai\"; setting?: z.infer<typeof azureOpenAiSettingSchema> }\n | { providerName: \"amazon-bedrock\"; setting?: z.infer<typeof amazonBedrockSettingSchema> }\n | { providerName: \"google-vertex\"; setting?: z.infer<typeof googleVertexSettingSchema> }\n | { providerName: \"deepseek\"; setting?: z.infer<typeof deepseekSettingSchema> }\n\nexport const providerTableSchema = z.discriminatedUnion(\"providerName\", [\n z.object({\n providerName: z.literal(\"anthropic\"),\n setting: anthropicSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"google\"),\n setting: googleSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"openai\"),\n setting: openAiSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"ollama\"),\n setting: ollamaSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"azure-openai\"),\n setting: azureOpenAiSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"amazon-bedrock\"),\n setting: amazonBedrockSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"google-vertex\"),\n setting: googleVertexSettingSchema.optional(),\n }),\n z.object({\n providerName: z.literal(\"deepseek\"),\n setting: deepseekSettingSchema.optional(),\n }),\n])\n\n/** Skill configuration in perstack.toml */\nexport type PerstackConfigSkill =\n | {\n type: \"mcpStdioSkill\"\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n command: string\n packageName?: string\n args?: string[]\n requiredEnv?: string[]\n allowedDomains?: string[]\n lazyInit?: boolean\n }\n | {\n type: \"mcpSseSkill\"\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n endpoint: string\n allowedDomains?: string[]\n }\n | {\n type: \"interactiveSkill\"\n description?: string\n rule?: string\n tools: Record<string, { description?: string; inputJsonSchema: string }>\n }\n\n/** Expert definition in perstack.toml (simplified from full Expert) */\nexport interface PerstackConfigExpert {\n /** Semantic version */\n version?: string\n /** Minimum runtime version required */\n minRuntimeVersion?: string\n /** Description of the Expert */\n description?: string\n /** System instruction */\n instruction: string\n /** Skills configuration */\n skills?: Record<string, PerstackConfigSkill>\n /** Delegates list */\n delegates?: string[]\n /** Tags for categorization */\n tags?: string[]\n}\n\n/**\n * Configuration loaded from perstack.toml.\n * This is the primary configuration file for Perstack projects.\n */\nexport interface PerstackConfig {\n /** Default provider configuration */\n provider?: ProviderTable\n /** Default model name */\n model?: string\n /** Default temperature (0-1) */\n temperature?: number\n /** Default execution runtime */\n runtime?: RuntimeName\n /** Maximum steps per run */\n maxSteps?: number\n /** Maximum retries on generation failure */\n maxRetries?: number\n /** Timeout per generation in milliseconds */\n timeout?: number\n /** Expert definitions */\n experts?: Record<string, PerstackConfigExpert>\n /** Custom Perstack API base URL */\n perstackApiBaseUrl?: string\n /** Custom command for @perstack/base skill */\n perstackBaseSkillCommand?: string[]\n /** Paths to .env files */\n envPath?: string[]\n}\n\nexport const perstackConfigSchema = z.object({\n provider: providerTableSchema.optional(),\n model: z.string().optional(),\n temperature: z.number().optional(),\n runtime: runtimeNameSchema.optional(),\n maxSteps: z.number().optional(),\n maxRetries: z.number().optional(),\n timeout: z.number().optional(),\n experts: z\n .record(\n z.string(),\n z.object({\n version: z.string().optional(),\n minRuntimeVersion: z.string().optional(),\n description: z.string().optional(),\n instruction: z.string(),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"mcpStdioSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional(),\n requiredEnv: z.array(z.string()).optional(),\n allowedDomains: z.array(domainPatternSchema).optional(),\n lazyInit: z.boolean().optional().default(false),\n }),\n z.object({\n type: z.literal(\"mcpSseSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n endpoint: sseEndpointSchema,\n allowedDomains: z.array(domainPatternSchema).optional(),\n }),\n z.object({\n type: z.literal(\"interactiveSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(\n z.string(),\n z.object({\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n }),\n ),\n }),\n ]),\n )\n .optional(),\n delegates: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n }),\n )\n .optional(),\n perstackApiBaseUrl: z\n .url()\n .refine((url) => url.startsWith(\"https://\"), { message: \"perstackApiBaseUrl must use HTTPS\" })\n .optional(),\n perstackBaseSkillCommand: z.array(z.string()).optional(),\n envPath: z.array(z.string()).optional(),\n})\n","import { z } from \"zod\"\nimport type { ProviderName } from \"./provider-config.js\"\nimport { providerNameSchema } from \"./provider-config.js\"\nimport type { RuntimeName } from \"./runtime-name.js\"\nimport { runtimeNameSchema } from \"./runtime-name.js\"\n\n/** Parsed command options after transformation */\nexport interface CommandOptions {\n /** Path to perstack.toml config file */\n config?: string\n /** LLM provider to use */\n provider?: ProviderName\n /** Model name */\n model?: string\n /** Temperature (0-1) */\n temperature?: number\n /** Maximum steps */\n maxSteps?: number\n /** Maximum retries */\n maxRetries?: number\n /** Timeout in milliseconds */\n timeout?: number\n /** Custom job ID */\n jobId?: string\n /** Custom run ID */\n runId?: string\n /** Paths to .env files */\n envPath?: string[]\n /** Environment variable names to pass to Docker runtime */\n env?: string[]\n /** Enable verbose logging */\n verbose?: boolean\n /** Continue most recent job */\n continue?: boolean\n /** Continue specific job by ID */\n continueJob?: string\n /** Resume from specific checkpoint (requires --continue or --continue-job) */\n resumeFrom?: string\n /** Query is interactive tool call result */\n interactiveToolCallResult?: boolean\n /** Execution runtime */\n runtime?: RuntimeName\n /** Workspace directory for Docker runtime */\n workspace?: string\n}\n\nconst commandOptionsSchema = z.object({\n config: z.string().optional(),\n provider: providerNameSchema.optional(),\n model: z.string().optional(),\n temperature: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseFloat(value)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n maxSteps: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseInt(value, 10)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n maxRetries: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseInt(value, 10)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n timeout: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) return undefined\n const parsedValue = Number.parseInt(value, 10)\n if (Number.isNaN(parsedValue)) return undefined\n return parsedValue\n }),\n jobId: z.string().optional(),\n runId: z.string().optional(),\n envPath: z\n .array(z.string())\n .optional()\n .transform((value) => (value && value.length > 0 ? value : undefined)),\n env: z\n .array(z.string())\n .optional()\n .transform((value) => (value && value.length > 0 ? value : undefined)),\n verbose: z.boolean().optional(),\n continue: z.boolean().optional(),\n continueJob: z.string().optional(),\n resumeFrom: z.string().optional(),\n interactiveToolCallResult: z.boolean().optional(),\n runtime: runtimeNameSchema.optional(),\n workspace: z.string().optional(),\n})\n\n/** Input for the `perstack run` command */\nexport interface RunCommandInput {\n /** Expert key to run */\n expertKey: string\n /** Query or prompt */\n query: string\n /** Command options */\n options: CommandOptions\n}\n\nexport const runCommandInputSchema = z.object({\n expertKey: z.string(),\n query: z.string(),\n options: commandOptionsSchema,\n})\n\n/** Input for the `perstack start` command */\nexport interface StartCommandInput {\n /** Expert key to run (optional, prompts if not provided) */\n expertKey?: string\n /** Query or prompt (optional, prompts if not provided) */\n query?: string\n /** Command options */\n options: CommandOptions\n}\n\nexport const startCommandInputSchema = z.object({\n expertKey: z.string().optional(),\n query: z.string().optional(),\n options: commandOptionsSchema,\n})\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { z } from \"zod\"\nimport {\n defaultMaxRetries,\n defaultMaxSteps,\n defaultPerstackApiBaseUrl,\n defaultTemperature,\n defaultTimeout,\n expertKeyRegex,\n} from \"../constants/constants.js\"\nimport type { Checkpoint } from \"./checkpoint.js\"\nimport { checkpointSchema } from \"./checkpoint.js\"\nimport type { Expert } from \"./expert.js\"\nimport { expertSchema } from \"./expert.js\"\nimport type {\n ExpertMessage,\n InstructionMessage,\n Message,\n ToolMessage,\n UserMessage,\n} from \"./message.js\"\nimport type { PerstackConfigSkill } from \"./perstack-toml.js\"\nimport type { ProviderConfig } from \"./provider-config.js\"\nimport { providerConfigSchema } from \"./provider-config.js\"\nimport type { Step } from \"./step.js\"\nimport type { ToolCall } from \"./tool-call.js\"\nimport type { ToolResult } from \"./tool-result.js\"\nimport type { Usage } from \"./usage.js\"\n\n/** Parse an expert key into its components */\nexport function parseExpertKey(expertKey: string): {\n key: string\n name: string\n version?: string\n tag?: string\n} {\n const match = expertKey.match(expertKeyRegex)\n if (!match) {\n throw new Error(`Invalid expert key format: ${expertKey}`)\n }\n const [key, name, version, tag] = match\n if (!name) {\n throw new Error(`Invalid expert key format: ${expertKey}`)\n }\n return { key, name, version, tag }\n}\n\n/** Input for a run (text or interactive tool call result) */\nexport interface RunInput {\n /** Text query */\n text?: string\n /** Interactive tool call result (when continuing from interactive tool) */\n interactiveToolCallResult?: {\n toolCallId: string\n toolName: string\n skillName: string\n text: string\n }\n}\n\n/** Runtime settings for an Expert run */\nexport interface RunSetting {\n /** Model name to use */\n model: string\n /** Provider configuration */\n providerConfig: ProviderConfig\n /** Job ID this run belongs to */\n jobId: string\n /** Unique run identifier */\n runId: string\n /** Expert key to run */\n expertKey: string\n /** Input for the run */\n input: RunInput\n /** Map of expert keys to Expert definitions */\n experts: Record<string, Expert>\n /** Temperature for generation (0-1) */\n temperature: number\n /** Maximum steps before stopping (applies to Job's totalSteps) */\n maxSteps: number\n /** Maximum retries on generation failure */\n maxRetries: number\n /** Timeout per generation in milliseconds */\n timeout: number\n /** Unix timestamp when run started */\n startedAt: number\n /** Unix timestamp of last update */\n updatedAt: number\n /** Perstack API base URL */\n perstackApiBaseUrl: string\n /** Perstack API key */\n perstackApiKey?: string\n /** Custom command for @perstack/base */\n perstackBaseSkillCommand?: string[]\n /** Environment variables to pass to skills */\n env: Record<string, string>\n /** HTTP proxy URL for API requests */\n proxyUrl?: string\n /** Enable verbose output for build processes */\n verbose?: boolean\n}\n\n/** Parameters for starting a run */\nexport interface RunParams {\n /** Run settings */\n setting: RunSetting\n /** Optional checkpoint to resume from */\n checkpoint?: Checkpoint\n}\n\n/** Expert input type before schema transformation (skills without name, optional fields) */\ntype ExpertInput = {\n name: string\n version: string\n description?: string\n instruction: string\n skills?: Record<string, PerstackConfigSkill>\n delegates?: string[]\n tags?: string[]\n}\n\n/** Input type for runParamsSchema (before defaults/transforms) */\nexport type RunParamsInput = {\n setting: {\n model: string\n providerConfig: ProviderConfig\n jobId?: string\n runId?: string\n expertKey: string\n input: RunInput\n experts?: Record<string, ExpertInput>\n temperature?: number\n maxSteps?: number\n maxRetries?: number\n timeout?: number\n startedAt?: number\n updatedAt?: number\n perstackApiBaseUrl?: string\n perstackApiKey?: string\n perstackBaseSkillCommand?: string[]\n env?: Record<string, string>\n proxyUrl?: string\n verbose?: boolean\n }\n checkpoint?: Checkpoint\n}\n\nexport const runSettingSchema = z.object({\n model: z.string(),\n providerConfig: providerConfigSchema,\n jobId: z.string(),\n runId: z.string(),\n expertKey: z.string().min(1).regex(expertKeyRegex),\n input: z.object({\n text: z.string().optional(),\n interactiveToolCallResult: z\n .object({\n toolCallId: z.string(),\n toolName: z.string(),\n skillName: z.string(),\n text: z.string(),\n })\n .optional(),\n }),\n experts: z.record(z.string(), expertSchema),\n temperature: z.number().min(0).max(1),\n maxSteps: z.number().min(1).optional().default(defaultMaxSteps),\n maxRetries: z.number().min(0),\n timeout: z.number().min(0),\n startedAt: z.number(),\n updatedAt: z.number(),\n perstackApiBaseUrl: z.string().url(),\n perstackApiKey: z.string().optional(),\n perstackBaseSkillCommand: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()),\n proxyUrl: z.string().optional(),\n verbose: z.boolean().optional(),\n})\n\nexport const runParamsSchema = z.object({\n setting: z.object({\n model: z.string(),\n providerConfig: providerConfigSchema,\n jobId: z\n .string()\n .optional()\n .default(() => createId()),\n runId: z\n .string()\n .optional()\n .default(() => createId()),\n expertKey: z.string().min(1).regex(expertKeyRegex),\n input: z.object({\n text: z.string().optional(),\n interactiveToolCallResult: z\n .object({\n toolCallId: z.string(),\n toolName: z.string(),\n skillName: z.string(),\n text: z.string(),\n })\n .optional(),\n }),\n experts: z\n .record(z.string().min(1).regex(expertKeyRegex), expertSchema.omit({ key: true }))\n .optional()\n .default({})\n .transform((experts) =>\n Object.fromEntries(\n Object.entries(experts).map(([key, expertWithoutKey]) => [\n key,\n expertSchema.parse({\n ...expertWithoutKey,\n key,\n }),\n ]),\n ),\n ),\n temperature: z.number().min(0).max(1).optional().default(defaultTemperature),\n maxSteps: z.number().min(1).optional().default(defaultMaxSteps),\n maxRetries: z.number().min(0).optional().default(defaultMaxRetries),\n timeout: z.number().min(0).optional().default(defaultTimeout),\n startedAt: z.number().optional().default(Date.now()),\n updatedAt: z.number().optional().default(Date.now()),\n perstackApiBaseUrl: z.url().optional().default(defaultPerstackApiBaseUrl),\n perstackApiKey: z.string().optional(),\n perstackBaseSkillCommand: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional().default({}),\n proxyUrl: z.string().optional(),\n verbose: z.boolean().optional(),\n }),\n checkpoint: checkpointSchema.optional(),\n})\n\n/**\n * Expert run events - emitted during execution for observability.\n * All events contain deeply serializable properties for checkpoint storage.\n */\ntype ExpertEventPayloads = {\n startRun: {\n initialCheckpoint: Checkpoint\n inputMessages: (InstructionMessage | UserMessage | ToolMessage)[]\n }\n startGeneration: {\n messages: Message[]\n }\n retry: {\n reason: string\n newMessages: (UserMessage | ExpertMessage | ToolMessage)[]\n toolCalls?: ToolCall[]\n toolResults?: ToolResult[]\n usage: Usage\n }\n callTools: {\n newMessage: ExpertMessage\n toolCalls: ToolCall[]\n usage: Usage\n }\n callInteractiveTool: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n callDelegate: {\n newMessage: ExpertMessage\n toolCalls: ToolCall[]\n usage: Usage\n }\n resolveToolResults: {\n toolResults: ToolResult[]\n }\n resolveThought: {\n toolResult: ToolResult\n }\n attemptCompletion: {\n toolResult: ToolResult\n }\n finishToolCall: {\n newMessages: (UserMessage | ToolMessage)[]\n }\n resumeToolCalls: {\n pendingToolCalls: ToolCall[]\n partialToolResults: ToolResult[]\n }\n finishAllToolCalls: {\n newMessages: (UserMessage | ToolMessage)[]\n }\n continueToNextStep: {\n checkpoint: Checkpoint\n step: Step\n nextCheckpoint: Checkpoint\n }\n stopRunByInteractiveTool: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByDelegate: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByExceededMaxSteps: {\n checkpoint: Checkpoint\n step: Step\n }\n completeRun: {\n checkpoint: Checkpoint\n step: Step\n text: string\n usage: Usage\n }\n}\n\n/** Base properties for all run events */\nexport interface BaseEvent {\n /** Unique event ID */\n id: string\n /** Expert key that emitted this event */\n expertKey: string\n /** Unix timestamp when event was emitted */\n timestamp: number\n /** Job ID this event belongs to */\n jobId: string\n /** Run ID this event belongs to */\n runId: string\n /** Step number when event was emitted */\n stepNumber: number\n}\n\n/** All possible event types */\nexport type EventType = keyof ExpertEventPayloads\n\n/** Union type of all run events */\nexport type RunEvent = {\n [K in EventType]: BaseEvent & { type: K } & ExpertEventPayloads[K]\n}[EventType]\n\n/** Extract a specific event type */\nexport type EventForType<T extends EventType> = Extract<RunEvent, { type: T }>\n\n/** Factory function to create typed events */\nexport function createEvent<T extends EventType>(type: T) {\n return (\n setting: RunSetting,\n checkpoint: Checkpoint,\n data: Omit<\n EventForType<T>,\n \"type\" | \"id\" | \"expertKey\" | \"timestamp\" | \"jobId\" | \"runId\" | \"stepNumber\"\n >,\n ): EventForType<T> => {\n return {\n type,\n id: createId(),\n expertKey: checkpoint.expert.key,\n timestamp: Date.now(),\n jobId: setting.jobId,\n runId: setting.runId,\n stepNumber: checkpoint.stepNumber,\n ...data,\n } as EventForType<T>\n }\n}\n\nexport const startRun = createEvent(\"startRun\")\nexport const startGeneration = createEvent(\"startGeneration\")\nexport const retry = createEvent(\"retry\")\nexport const callTools = createEvent(\"callTools\")\nexport const callInteractiveTool = createEvent(\"callInteractiveTool\")\nexport const callDelegate = createEvent(\"callDelegate\")\nexport const resolveToolResults = createEvent(\"resolveToolResults\")\nexport const resolveThought = createEvent(\"resolveThought\")\nexport const attemptCompletion = createEvent(\"attemptCompletion\")\nexport const finishToolCall = createEvent(\"finishToolCall\")\nexport const resumeToolCalls = createEvent(\"resumeToolCalls\")\nexport const finishAllToolCalls = createEvent(\"finishAllToolCalls\")\nexport const completeRun = createEvent(\"completeRun\")\nexport const stopRunByInteractiveTool = createEvent(\"stopRunByInteractiveTool\")\nexport const stopRunByDelegate = createEvent(\"stopRunByDelegate\")\nexport const stopRunByExceededMaxSteps = createEvent(\"stopRunByExceededMaxSteps\")\nexport const continueToNextStep = createEvent(\"continueToNextStep\")\n\n/** Base properties for runtime events */\ninterface BaseRuntimeEvent {\n /** Unique event ID */\n id: string\n /** Unix timestamp */\n timestamp: number\n /** Job ID */\n jobId: string\n /** Run ID */\n runId: string\n}\n\n/** Runtime event payloads (infrastructure-level events) */\ntype RuntimeEventPayloads = {\n initializeRuntime: {\n runtimeVersion: string\n runtime?: string\n expertName: string\n experts: string[]\n model: string\n temperature: number\n maxSteps?: number\n maxRetries: number\n timeout: number\n query?: string\n interactiveToolCall?: {\n toolName: string\n toolCallId: string\n text: string\n }\n }\n skillStarting: {\n skillName: string\n command: string\n args: string[]\n }\n skillConnected: {\n skillName: string\n serverInfo?: {\n name: string\n version: string\n }\n connectDurationMs?: number\n totalDurationMs?: number\n spawnDurationMs?: number\n handshakeDurationMs?: number\n toolDiscoveryDurationMs?: number\n }\n skillStderr: {\n skillName: string\n message: string\n }\n skillDisconnected: {\n skillName: string\n }\n streamingText: {\n text: string\n }\n /** Docker build progress event */\n dockerBuildProgress: {\n stage: \"pulling\" | \"building\" | \"complete\" | \"error\"\n service: string\n message: string\n progress?: number\n }\n /** Docker container status event */\n dockerContainerStatus: {\n status: \"starting\" | \"running\" | \"healthy\" | \"unhealthy\" | \"stopped\" | \"error\"\n service: string\n message?: string\n }\n /** Proxy access event (allow/block) */\n proxyAccess: {\n action: \"allowed\" | \"blocked\"\n domain: string\n port: number\n reason?: string\n }\n}\n\n/** All runtime event types */\nexport type RuntimeEventType = keyof RuntimeEventPayloads\n\n/** Union type of all runtime events */\nexport type RuntimeEvent = {\n [K in RuntimeEventType]: BaseRuntimeEvent & { type: K } & RuntimeEventPayloads[K]\n}[RuntimeEventType]\n\n/** Extract a specific runtime event type */\nexport type RuntimeEventForType<T extends RuntimeEventType> = Extract<RuntimeEvent, { type: T }>\n\n/** Factory function to create runtime events */\nexport function createRuntimeEvent<T extends RuntimeEventType>(\n type: T,\n jobId: string,\n runId: string,\n data: Omit<RuntimeEventForType<T>, \"type\" | \"id\" | \"timestamp\" | \"jobId\" | \"runId\">,\n): RuntimeEventForType<T> {\n return {\n type,\n id: createId(),\n timestamp: Date.now(),\n jobId,\n runId,\n ...data,\n } as RuntimeEventForType<T>\n}\n","import { z } from \"zod\"\nimport type { InstructionMessage, Message, ToolMessage, UserMessage } from \"./message.js\"\nimport {\n instructionMessageSchema,\n messageSchema,\n toolMessageSchema,\n userMessageSchema,\n} from \"./message.js\"\nimport type { ToolCall } from \"./tool-call.js\"\nimport { toolCallSchema } from \"./tool-call.js\"\nimport type { ToolResult } from \"./tool-result.js\"\nimport { toolResultSchema } from \"./tool-result.js\"\nimport type { Usage } from \"./usage.js\"\nimport { usageSchema } from \"./usage.js\"\n\n/**\n * A single execution step in an Expert run.\n * Each step represents one LLM generation cycle, optionally followed by tool calls.\n */\nexport interface Step {\n /** Sequential step number (1-indexed) */\n stepNumber: number\n /** Messages sent to the LLM for this step */\n inputMessages?: (InstructionMessage | UserMessage | ToolMessage)[]\n /** Messages generated during this step */\n newMessages: Message[]\n /** Tool calls made during this step, if any */\n toolCalls?: ToolCall[]\n /** Results of the tool calls, if any */\n toolResults?: ToolResult[]\n /** Tool calls waiting to be processed (sorted: MCP → Delegate → Interactive) */\n pendingToolCalls?: ToolCall[]\n /** Partial tool results collected so far (used during mixed tool call processing) */\n partialToolResults?: ToolResult[]\n /** Token usage for this step */\n usage: Usage\n /** Unix timestamp (ms) when step started */\n startedAt: number\n /** Unix timestamp (ms) when step finished */\n finishedAt?: number\n}\n\nexport const stepSchema = z.object({\n stepNumber: z.number(),\n inputMessages: z\n .array(z.union([instructionMessageSchema, userMessageSchema, toolMessageSchema]))\n .optional(),\n newMessages: z.array(messageSchema),\n toolCalls: z.array(toolCallSchema).optional(),\n toolResults: z.array(toolResultSchema).optional(),\n pendingToolCalls: z.array(toolCallSchema).optional(),\n partialToolResults: z.array(toolResultSchema).optional(),\n usage: usageSchema,\n startedAt: z.number(),\n finishedAt: z.number().optional(),\n})\nstepSchema satisfies z.ZodType<Step>\n","const SAFE_ENV_VARS = [\n // System\n \"PATH\",\n \"HOME\",\n \"SHELL\",\n \"TERM\",\n \"NODE_PATH\",\n // Proxy\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"http_proxy\",\n \"https_proxy\",\n \"NO_PROXY\",\n \"no_proxy\",\n \"PERSTACK_PROXY_URL\",\n \"NPM_CONFIG_PROXY\",\n \"NPM_CONFIG_HTTPS_PROXY\",\n]\nconst PROTECTED_ENV_VARS = new Set([\n \"PATH\",\n \"HOME\",\n \"SHELL\",\n \"NODE_PATH\",\n \"LD_PRELOAD\",\n \"LD_LIBRARY_PATH\",\n \"DYLD_INSERT_LIBRARIES\",\n \"DYLD_LIBRARY_PATH\",\n \"NODE_OPTIONS\",\n \"PYTHONPATH\",\n \"PERL5LIB\",\n \"RUBYLIB\",\n])\nexport function getFilteredEnv(additional?: Record<string, string>): Record<string, string> {\n const filtered: Record<string, string> = {}\n for (const key of SAFE_ENV_VARS) {\n if (process.env[key]) {\n filtered[key] = process.env[key]\n }\n }\n if (additional) {\n for (const [key, value] of Object.entries(additional)) {\n if (!PROTECTED_ENV_VARS.has(key.toUpperCase())) {\n filtered[key] = value\n }\n }\n }\n return filtered\n}\nexport { SAFE_ENV_VARS }\n","import type { ZodError, ZodSchema } from \"zod\"\n\nexport function formatZodError(error: ZodError): string {\n const issues = error.issues.map((issue) => {\n const path = issue.path.length > 0 ? `${issue.path.join(\".\")}: ` : \"\"\n return ` - ${path}${issue.message}`\n })\n return `Validation failed:\\n${issues.join(\"\\n\")}`\n}\n\nexport function parseWithFriendlyError<T>(\n schema: ZodSchema<T>,\n data: unknown,\n context?: string,\n): T {\n const result = schema.safeParse(data)\n if (result.success) {\n return result.data\n }\n const prefix = context ? `${context}: ` : \"\"\n throw new Error(`${prefix}${formatZodError(result.error)}`)\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perstack/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"description": "Perstack Core",
|
|
5
5
|
"author": "Wintermute Technologies, Inc.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@paralleldrive/cuid2": "^3.0.4",
|
|
19
|
-
"zod": "^4.1
|
|
19
|
+
"zod": "^4.2.1"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@tsconfig/node22": "^22.0.5",
|
|
23
|
-
"@types/node": "^
|
|
23
|
+
"@types/node": "^25.0.3",
|
|
24
24
|
"tsup": "^8.5.1",
|
|
25
25
|
"typescript": "^5.9.3",
|
|
26
|
-
"vitest": "^4.0.
|
|
26
|
+
"vitest": "^4.0.16"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
29
|
"clean": "rm -rf dist",
|