@perstack/core 0.0.23 → 0.0.25

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/README.md CHANGED
@@ -72,7 +72,7 @@ export const apiExpertSchema = expertSchema.omit({
72
72
  | `Run` | Single Expert execution within a Job. |
73
73
  | `Checkpoint` | Snapshot at step end within a Run. |
74
74
 
75
- For the full hierarchy and execution model, see [State Management](https://docs.perstack.ai/using-experts/state-management).
75
+ For the full hierarchy and execution model, see [State Management](https://github.com/perstack-ai/perstack/blob/main/docs/using-experts/state-management.md).
76
76
 
77
77
  ### What Core Should NOT Contain
78
78
 
@@ -723,9 +723,9 @@ declare const messageSchema: z.ZodUnion<readonly [z.ZodObject<{
723
723
  cache: z.ZodOptional<z.ZodBoolean>;
724
724
  }, z.core.$strip>]>;
725
725
 
726
- type RuntimeName = "perstack" | "cursor" | "claude-code" | "gemini" | "docker";
726
+ type RuntimeName = "local" | "cursor" | "claude-code" | "gemini" | "docker";
727
727
  declare const runtimeNameSchema: z.ZodEnum<{
728
- perstack: "perstack";
728
+ local: "local";
729
729
  cursor: "cursor";
730
730
  "claude-code": "claude-code";
731
731
  gemini: "gemini";
@@ -1156,7 +1156,7 @@ declare const checkpointSchema: z.ZodObject<{
1156
1156
  }, z.core.$strip>>>;
1157
1157
  metadata: z.ZodOptional<z.ZodObject<{
1158
1158
  runtime: z.ZodOptional<z.ZodEnum<{
1159
- perstack: "perstack";
1159
+ local: "local";
1160
1160
  cursor: "cursor";
1161
1161
  "claude-code": "claude-code";
1162
1162
  gemini: "gemini";
@@ -1421,7 +1421,7 @@ declare const perstackConfigSchema: z.ZodObject<{
1421
1421
  model: z.ZodOptional<z.ZodString>;
1422
1422
  temperature: z.ZodOptional<z.ZodNumber>;
1423
1423
  runtime: z.ZodOptional<z.ZodEnum<{
1424
- perstack: "perstack";
1424
+ local: "local";
1425
1425
  cursor: "cursor";
1426
1426
  "claude-code": "claude-code";
1427
1427
  gemini: "gemini";
@@ -2074,7 +2074,7 @@ interface RunSetting {
2074
2074
  /** Temperature for generation (0-1) */
2075
2075
  temperature: number;
2076
2076
  /** Maximum steps before stopping (applies to Job's totalSteps) */
2077
- maxSteps?: number;
2077
+ maxSteps: number;
2078
2078
  /** Maximum retries on generation failure */
2079
2079
  maxRetries: number;
2080
2080
  /** Timeout per generation in milliseconds */
@@ -2093,6 +2093,8 @@ interface RunSetting {
2093
2093
  env: Record<string, string>;
2094
2094
  /** HTTP proxy URL for API requests */
2095
2095
  proxyUrl?: string;
2096
+ /** Enable verbose output for build processes */
2097
+ verbose?: boolean;
2096
2098
  }
2097
2099
  /** Parameters for starting a run */
2098
2100
  interface RunParams {
@@ -2132,6 +2134,7 @@ type RunParamsInput = {
2132
2134
  perstackBaseSkillCommand?: string[];
2133
2135
  env?: Record<string, string>;
2134
2136
  proxyUrl?: string;
2137
+ verbose?: boolean;
2135
2138
  };
2136
2139
  checkpoint?: Checkpoint;
2137
2140
  };
@@ -2306,7 +2309,7 @@ declare const runSettingSchema: z.ZodObject<{
2306
2309
  tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
2307
2310
  }, z.core.$strip>>;
2308
2311
  temperature: z.ZodNumber;
2309
- maxSteps: z.ZodOptional<z.ZodNumber>;
2312
+ maxSteps: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
2310
2313
  maxRetries: z.ZodNumber;
2311
2314
  timeout: z.ZodNumber;
2312
2315
  startedAt: z.ZodNumber;
@@ -2316,6 +2319,7 @@ declare const runSettingSchema: z.ZodObject<{
2316
2319
  perstackBaseSkillCommand: z.ZodOptional<z.ZodArray<z.ZodString>>;
2317
2320
  env: z.ZodRecord<z.ZodString, z.ZodString>;
2318
2321
  proxyUrl: z.ZodOptional<z.ZodString>;
2322
+ verbose: z.ZodOptional<z.ZodBoolean>;
2319
2323
  }, z.core.$strip>;
2320
2324
  declare const runParamsSchema: z.ZodObject<{
2321
2325
  setting: z.ZodObject<{
@@ -2575,7 +2579,7 @@ declare const runParamsSchema: z.ZodObject<{
2575
2579
  description?: string | undefined;
2576
2580
  }>>>;
2577
2581
  temperature: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
2578
- maxSteps: z.ZodOptional<z.ZodNumber>;
2582
+ maxSteps: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
2579
2583
  maxRetries: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
2580
2584
  timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
2581
2585
  startedAt: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
@@ -2585,6 +2589,7 @@ declare const runParamsSchema: z.ZodObject<{
2585
2589
  perstackBaseSkillCommand: z.ZodOptional<z.ZodArray<z.ZodString>>;
2586
2590
  env: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
2587
2591
  proxyUrl: z.ZodOptional<z.ZodString>;
2592
+ verbose: z.ZodOptional<z.ZodBoolean>;
2588
2593
  }, z.core.$strip>;
2589
2594
  checkpoint: z.ZodOptional<z.ZodObject<{
2590
2595
  id: z.ZodString;
@@ -2799,7 +2804,7 @@ declare const runParamsSchema: z.ZodObject<{
2799
2804
  }, z.core.$strip>>>;
2800
2805
  metadata: z.ZodOptional<z.ZodObject<{
2801
2806
  runtime: z.ZodOptional<z.ZodEnum<{
2802
- perstack: "perstack";
2807
+ local: "local";
2803
2808
  cursor: "cursor";
2804
2809
  "claude-code": "claude-code";
2805
2810
  gemini: "gemini";
@@ -3150,6 +3155,9 @@ type RuntimeEventPayloads = {
3150
3155
  };
3151
3156
  connectDurationMs?: number;
3152
3157
  totalDurationMs?: number;
3158
+ spawnDurationMs?: number;
3159
+ handshakeDurationMs?: number;
3160
+ toolDiscoveryDurationMs?: number;
3153
3161
  };
3154
3162
  skillStderr: {
3155
3163
  skillName: string;
@@ -3161,6 +3169,26 @@ type RuntimeEventPayloads = {
3161
3169
  streamingText: {
3162
3170
  text: string;
3163
3171
  };
3172
+ /** Docker build progress event */
3173
+ dockerBuildProgress: {
3174
+ stage: "pulling" | "building" | "complete" | "error";
3175
+ service: string;
3176
+ message: string;
3177
+ progress?: number;
3178
+ };
3179
+ /** Docker container status event */
3180
+ dockerContainerStatus: {
3181
+ status: "starting" | "running" | "healthy" | "unhealthy" | "stopped" | "error";
3182
+ service: string;
3183
+ message?: string;
3184
+ };
3185
+ /** Proxy access event (allow/block) */
3186
+ proxyAccess: {
3187
+ action: "allowed" | "blocked";
3188
+ domain: string;
3189
+ port: number;
3190
+ reason?: string;
3191
+ };
3164
3192
  };
3165
3193
  /** All runtime event types */
3166
3194
  type RuntimeEventType = keyof RuntimeEventPayloads;
@@ -3184,6 +3212,9 @@ type AdapterRunParams = {
3184
3212
  eventListener?: (event: RunEvent | RuntimeEvent) => void;
3185
3213
  storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>;
3186
3214
  retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>;
3215
+ workspace?: string;
3216
+ /** Additional environment variable names to pass to Docker runtime */
3217
+ additionalEnvKeys?: string[];
3187
3218
  };
3188
3219
  type AdapterRunResult = {
3189
3220
  checkpoint: Checkpoint;
@@ -3238,6 +3269,7 @@ type CreateCheckpointParams = {
3238
3269
  runtime: RuntimeName;
3239
3270
  };
3240
3271
  declare function createNormalizedCheckpoint(params: CreateCheckpointParams): Checkpoint;
3272
+ declare function createStartRunEvent(jobId: string, runId: string, expertKey: string, checkpoint: Checkpoint): RunEvent;
3241
3273
  declare function createRuntimeInitEvent(jobId: string, runId: string, expertName: string, runtime: RuntimeName, version: string, query?: string): RuntimeEvent;
3242
3274
  declare function createCompleteRunEvent(jobId: string, runId: string, expertKey: string, checkpoint: Checkpoint, output: string, startedAt?: number): RunEvent;
3243
3275
  declare function createStreamingTextEvent(jobId: string, runId: string, text: string): RuntimeEvent;
@@ -3267,7 +3299,7 @@ declare const maxExpertSkillItems = 255;
3267
3299
  declare const maxExpertDelegateItems = 255;
3268
3300
  declare const maxExpertTagItems = 8;
3269
3301
  declare const defaultTemperature = 0;
3270
- declare const defaultMaxSteps: undefined;
3302
+ declare const defaultMaxSteps = 100;
3271
3303
  declare const defaultMaxRetries = 5;
3272
3304
  declare const defaultTimeout: number;
3273
3305
  declare const maxExpertJobQueryLength: number;
@@ -3359,6 +3391,8 @@ interface CommandOptions {
3359
3391
  runId?: string;
3360
3392
  /** Paths to .env files */
3361
3393
  envPath?: string[];
3394
+ /** Environment variable names to pass to Docker runtime */
3395
+ env?: string[];
3362
3396
  /** Enable verbose logging */
3363
3397
  verbose?: boolean;
3364
3398
  /** Continue most recent job */
@@ -3371,6 +3405,8 @@ interface CommandOptions {
3371
3405
  interactiveToolCallResult?: boolean;
3372
3406
  /** Execution runtime */
3373
3407
  runtime?: RuntimeName;
3408
+ /** Workspace directory for Docker runtime */
3409
+ workspace?: string;
3374
3410
  }
3375
3411
  /** Input for the `perstack run` command */
3376
3412
  interface RunCommandInput {
@@ -3403,19 +3439,21 @@ declare const runCommandInputSchema: z.ZodObject<{
3403
3439
  timeout: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
3404
3440
  jobId: z.ZodOptional<z.ZodString>;
3405
3441
  runId: z.ZodOptional<z.ZodString>;
3406
- envPath: z.ZodOptional<z.ZodArray<z.ZodString>>;
3442
+ envPath: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
3443
+ env: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
3407
3444
  verbose: z.ZodOptional<z.ZodBoolean>;
3408
3445
  continue: z.ZodOptional<z.ZodBoolean>;
3409
3446
  continueJob: z.ZodOptional<z.ZodString>;
3410
3447
  resumeFrom: z.ZodOptional<z.ZodString>;
3411
3448
  interactiveToolCallResult: z.ZodOptional<z.ZodBoolean>;
3412
3449
  runtime: z.ZodOptional<z.ZodEnum<{
3413
- perstack: "perstack";
3450
+ local: "local";
3414
3451
  cursor: "cursor";
3415
3452
  "claude-code": "claude-code";
3416
3453
  gemini: "gemini";
3417
3454
  docker: "docker";
3418
3455
  }>>;
3456
+ workspace: z.ZodOptional<z.ZodString>;
3419
3457
  }, z.core.$strip>;
3420
3458
  }, z.core.$strip>;
3421
3459
  /** Input for the `perstack start` command */
@@ -3449,19 +3487,21 @@ declare const startCommandInputSchema: z.ZodObject<{
3449
3487
  timeout: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
3450
3488
  jobId: z.ZodOptional<z.ZodString>;
3451
3489
  runId: z.ZodOptional<z.ZodString>;
3452
- envPath: z.ZodOptional<z.ZodArray<z.ZodString>>;
3490
+ envPath: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
3491
+ env: z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>;
3453
3492
  verbose: z.ZodOptional<z.ZodBoolean>;
3454
3493
  continue: z.ZodOptional<z.ZodBoolean>;
3455
3494
  continueJob: z.ZodOptional<z.ZodString>;
3456
3495
  resumeFrom: z.ZodOptional<z.ZodString>;
3457
3496
  interactiveToolCallResult: z.ZodOptional<z.ZodBoolean>;
3458
3497
  runtime: z.ZodOptional<z.ZodEnum<{
3459
- perstack: "perstack";
3498
+ local: "local";
3460
3499
  cursor: "cursor";
3461
3500
  "claude-code": "claude-code";
3462
3501
  gemini: "gemini";
3463
3502
  docker: "docker";
3464
3503
  }>>;
3504
+ workspace: z.ZodOptional<z.ZodString>;
3465
3505
  }, z.core.$strip>;
3466
3506
  }, z.core.$strip>;
3467
3507
 
@@ -3527,7 +3567,10 @@ type Resource = {
3527
3567
  blob?: string;
3528
3568
  };
3529
3569
 
3570
+ declare const SAFE_ENV_VARS: string[];
3571
+ declare function getFilteredEnv(additional?: Record<string, string>): Record<string, string>;
3572
+
3530
3573
  declare function formatZodError(error: ZodError): string;
3531
3574
  declare function parseWithFriendlyError<T>(schema: ZodSchema<T>, data: unknown, context?: string): T;
3532
3575
 
3533
- export { type AdapterRunParams, type AdapterRunResult, type AmazonBedrockProviderConfig, type AnthropicProviderConfig, type AzureOpenAiProviderConfig, BaseAdapter, type BaseEvent, type BasePart, type CallToolResultContent, type Checkpoint, type CheckpointStatus, type CommandOptions, type CreateCheckpointParams, type DeepseekProviderConfig, type DelegateSkillManagerParams, type DelegationTarget, type EventForType, type EventType, type ExecResult, type Expert, type ExpertMessage, type FileBinaryPart, type FileInlinePart, type FileUrlPart, type GoogleGenerativeAiProviderConfig, type GoogleVertexProviderConfig, type Headers, type ImageBinaryPart, type ImageInlinePart, type ImageUrlPart, type InstructionMessage, type InteractiveSkill, type InteractiveSkillManagerParams, type InteractiveTool, type Job, type JobStatus, type McpSkillManagerParams, type McpSseSkill, type McpStdioSkill, type Message, type MessagePart, type OllamaProviderConfig, type OpenAiProviderConfig, type PerstackConfig, type PerstackConfigExpert, type PerstackConfigSkill, type PrerequisiteError, type PrerequisiteResult, type ProviderConfig, type ProviderName, type ProviderTable, type Resource, type RunCommandInput, type RunEvent, type RunInput, type RunParams, type RunParamsInput, type RunSetting, type RuntimeAdapter, type RuntimeEvent, type RuntimeEventForType, type RuntimeEventType, type RuntimeExpertConfig, type RuntimeName, type Skill, type SkillManagerParams, type SkillType, type StartCommandInput, type Step, type TextPart, type ToolCall, type ToolCallPart, type ToolDefinition, type ToolMessage, type ToolResult, type ToolResultPart, type Usage, type UserMessage, amazonBedrockProviderConfigSchema, anthropicProviderConfigSchema, attemptCompletion, azureOpenAiProviderConfigSchema, basePartSchema, callDelegate, callInteractiveTool, callTools, checkpointSchema, checkpointStatusSchema, completeRun, continueToNextStep, createCallToolsEvent, createCompleteRunEvent, createEmptyUsage, createEvent, createNormalizedCheckpoint, createResolveToolResultsEvent, createRuntimeEvent, createRuntimeInitEvent, createStreamingTextEvent, createToolMessage, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, delegationTargetSchema, domainPatternSchema, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, getAdapter, getRegisteredRuntimes, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, isAdapterAvailable, jobSchema, jobStatusSchema, knownModels, maxApplicationNameLength, maxCheckpointToolCallIdLength, maxEnvNameLength, maxExpertDelegateItems, maxExpertDescriptionLength, maxExpertInstructionLength, maxExpertJobFileNameLength, maxExpertJobQueryLength, maxExpertKeyLength, maxExpertNameLength, maxExpertSkillItems, maxExpertTagItems, maxExpertVersionTagLength, maxOrganizationNameLength, maxSkillDescriptionLength, maxSkillEndpointLength, maxSkillInputJsonSchemaLength, maxSkillNameLength, maxSkillPickOmitItems, maxSkillRequiredEnvItems, maxSkillRuleLength, maxSkillToolItems, maxSkillToolNameLength, mcpSseSkillSchema, mcpStdioSkillSchema, messagePartSchema, messageSchema, ollamaProviderConfigSchema, openAiProviderConfigSchema, organizationNameRegex, packageWithVersionRegex, parseExpertKey, parseWithFriendlyError, perstackConfigSchema, providerConfigSchema, providerNameSchema, providerTableSchema, registerAdapter, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, runtimeNameSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
3576
+ export { type AdapterRunParams, type AdapterRunResult, type AmazonBedrockProviderConfig, type AnthropicProviderConfig, type AzureOpenAiProviderConfig, BaseAdapter, type BaseEvent, type BasePart, type CallToolResultContent, type Checkpoint, type CheckpointStatus, type CommandOptions, type CreateCheckpointParams, type DeepseekProviderConfig, type DelegateSkillManagerParams, type DelegationTarget, type EventForType, type EventType, type ExecResult, type Expert, type ExpertMessage, type FileBinaryPart, type FileInlinePart, type FileUrlPart, type GoogleGenerativeAiProviderConfig, type GoogleVertexProviderConfig, type Headers, type ImageBinaryPart, type ImageInlinePart, type ImageUrlPart, type InstructionMessage, type InteractiveSkill, type InteractiveSkillManagerParams, type InteractiveTool, type Job, type JobStatus, type McpSkillManagerParams, type McpSseSkill, type McpStdioSkill, type Message, type MessagePart, type OllamaProviderConfig, type OpenAiProviderConfig, type PerstackConfig, type PerstackConfigExpert, type PerstackConfigSkill, type PrerequisiteError, type PrerequisiteResult, type ProviderConfig, type ProviderName, type ProviderTable, type Resource, type RunCommandInput, type RunEvent, type RunInput, type RunParams, type RunParamsInput, type RunSetting, type RuntimeAdapter, type RuntimeEvent, type RuntimeEventForType, type RuntimeEventType, type RuntimeExpertConfig, type RuntimeName, SAFE_ENV_VARS, type Skill, type SkillManagerParams, type SkillType, type StartCommandInput, type Step, type TextPart, type ToolCall, type ToolCallPart, type ToolDefinition, type ToolMessage, type ToolResult, type ToolResultPart, type Usage, type UserMessage, amazonBedrockProviderConfigSchema, anthropicProviderConfigSchema, attemptCompletion, azureOpenAiProviderConfigSchema, basePartSchema, callDelegate, callInteractiveTool, callTools, checkpointSchema, checkpointStatusSchema, completeRun, continueToNextStep, createCallToolsEvent, createCompleteRunEvent, createEmptyUsage, createEvent, createNormalizedCheckpoint, createResolveToolResultsEvent, createRuntimeEvent, createRuntimeInitEvent, createStartRunEvent, createStreamingTextEvent, createToolMessage, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, delegationTargetSchema, domainPatternSchema, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, getAdapter, getFilteredEnv, getRegisteredRuntimes, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, isAdapterAvailable, jobSchema, jobStatusSchema, knownModels, maxApplicationNameLength, maxCheckpointToolCallIdLength, maxEnvNameLength, maxExpertDelegateItems, maxExpertDescriptionLength, maxExpertInstructionLength, maxExpertJobFileNameLength, maxExpertJobQueryLength, maxExpertKeyLength, maxExpertNameLength, maxExpertSkillItems, maxExpertTagItems, maxExpertVersionTagLength, maxOrganizationNameLength, maxSkillDescriptionLength, maxSkillEndpointLength, maxSkillInputJsonSchemaLength, maxSkillNameLength, maxSkillPickOmitItems, maxSkillRequiredEnvItems, maxSkillRuleLength, maxSkillToolItems, maxSkillToolNameLength, mcpSseSkillSchema, mcpStdioSkillSchema, messagePartSchema, messageSchema, ollamaProviderConfigSchema, openAiProviderConfigSchema, organizationNameRegex, packageWithVersionRegex, parseExpertKey, parseWithFriendlyError, perstackConfigSchema, providerConfigSchema, providerNameSchema, providerTableSchema, registerAdapter, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, runtimeNameSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
package/dist/src/index.js CHANGED
@@ -85,6 +85,19 @@ function createNormalizedCheckpoint(params) {
85
85
  metadata: { runtime }
86
86
  };
87
87
  }
88
+ function createStartRunEvent(jobId, runId, expertKey, checkpoint) {
89
+ return {
90
+ type: "startRun",
91
+ id: createId(),
92
+ expertKey,
93
+ timestamp: Date.now(),
94
+ jobId,
95
+ runId,
96
+ stepNumber: checkpoint.stepNumber,
97
+ initialCheckpoint: checkpoint,
98
+ inputMessages: []
99
+ };
100
+ }
88
101
  function createRuntimeInitEvent(jobId, runId, expertName, runtime, version, query) {
89
102
  return {
90
103
  type: "initializeRuntime",
@@ -220,7 +233,7 @@ var maxExpertSkillItems = 255;
220
233
  var maxExpertDelegateItems = 255;
221
234
  var maxExpertTagItems = 8;
222
235
  var defaultTemperature = 0;
223
- var defaultMaxSteps = void 0;
236
+ var defaultMaxSteps = 100;
224
237
  var defaultMaxRetries = 5;
225
238
  var defaultTimeout = 5 * 1e3 * 60;
226
239
  var maxExpertJobQueryLength = 1024 * 20;
@@ -529,7 +542,7 @@ var messageSchema = z.union([
529
542
  expertMessageSchema,
530
543
  toolMessageSchema
531
544
  ]);
532
- var runtimeNameSchema = z.enum(["perstack", "cursor", "claude-code", "gemini", "docker"]);
545
+ var runtimeNameSchema = z.enum(["local", "cursor", "claude-code", "gemini", "docker"]);
533
546
  var toolCallSchema = z.object({
534
547
  id: z.string().min(1).max(255),
535
548
  skillName: z.string().min(1).max(maxSkillNameLength),
@@ -602,6 +615,46 @@ var checkpointSchema = z.object({
602
615
  runtime: runtimeNameSchema.optional()
603
616
  }).passthrough().optional()
604
617
  });
618
+ function isPrivateOrLocalIP(hostname) {
619
+ if (hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname === "0.0.0.0") {
620
+ return true;
621
+ }
622
+ const ipv4Match = hostname.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
623
+ if (ipv4Match) {
624
+ const a = Number(ipv4Match[1]);
625
+ const b = Number(ipv4Match[2]);
626
+ if (a === 10) return true;
627
+ if (a === 172 && b >= 16 && b <= 31) return true;
628
+ if (a === 192 && b === 168) return true;
629
+ if (a === 169 && b === 254) return true;
630
+ if (a === 127) return true;
631
+ }
632
+ if (hostname.includes(":")) {
633
+ if (hostname.startsWith("fe80:") || hostname.startsWith("fc") || hostname.startsWith("fd")) {
634
+ return true;
635
+ }
636
+ }
637
+ if (hostname.startsWith("::ffff:")) {
638
+ const ipv4Part = hostname.slice(7);
639
+ if (isPrivateOrLocalIP(ipv4Part)) {
640
+ return true;
641
+ }
642
+ }
643
+ return false;
644
+ }
645
+ var sseEndpointSchema = z.string().url().refine(
646
+ (url) => {
647
+ try {
648
+ const parsed = new URL(url);
649
+ if (parsed.protocol !== "https:") return false;
650
+ if (isPrivateOrLocalIP(parsed.hostname)) return false;
651
+ return true;
652
+ } catch {
653
+ return false;
654
+ }
655
+ },
656
+ { message: "Endpoint must be a public HTTPS URL" }
657
+ );
605
658
  var mcpStdioSkillSchema = z.object({
606
659
  type: z.literal("mcpStdioSkill"),
607
660
  name: z.string(),
@@ -622,7 +675,7 @@ var mcpSseSkillSchema = z.object({
622
675
  rule: z.string().optional(),
623
676
  pick: z.array(z.string()).optional().default([]),
624
677
  omit: z.array(z.string()).optional().default([]),
625
- endpoint: z.string()
678
+ endpoint: sseEndpointSchema
626
679
  });
627
680
  var interactiveToolSchema = z.object({
628
681
  name: z.string(),
@@ -785,19 +838,63 @@ var providerConfigSchema = z.discriminatedUnion("providerName", [
785
838
 
786
839
  // src/schemas/perstack-toml.ts
787
840
  var domainPatternRegex = /^(\*\.)?[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$/;
841
+ var punycodeRegex = /(?:^|\.)(xn--)/i;
788
842
  var domainPatternSchema = z.string().regex(domainPatternRegex, {
789
843
  message: "Invalid domain pattern. Use exact domain (example.com) or wildcard prefix (*.example.com)"
844
+ }).refine((domain) => !punycodeRegex.test(domain), {
845
+ message: "Punycode domains (xn--) are not allowed to prevent homograph attacks. Use ASCII domains only."
790
846
  });
847
+ function isPrivateOrLocalIP2(hostname) {
848
+ if (hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname === "0.0.0.0") {
849
+ return true;
850
+ }
851
+ const ipv4Match = hostname.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
852
+ if (ipv4Match) {
853
+ const a = Number(ipv4Match[1]);
854
+ const b = Number(ipv4Match[2]);
855
+ if (a === 10) return true;
856
+ if (a === 172 && b >= 16 && b <= 31) return true;
857
+ if (a === 192 && b === 168) return true;
858
+ if (a === 169 && b === 254) return true;
859
+ if (a === 127) return true;
860
+ }
861
+ if (hostname.includes(":")) {
862
+ if (hostname.startsWith("fe80:") || hostname.startsWith("fc") || hostname.startsWith("fd")) {
863
+ return true;
864
+ }
865
+ }
866
+ if (hostname.startsWith("::ffff:")) {
867
+ const ipv4Part = hostname.slice(7);
868
+ if (isPrivateOrLocalIP2(ipv4Part)) {
869
+ return true;
870
+ }
871
+ }
872
+ return false;
873
+ }
874
+ var sseEndpointSchema2 = z.string().url().refine(
875
+ (url) => {
876
+ try {
877
+ const parsed = new URL(url);
878
+ if (parsed.protocol !== "https:") return false;
879
+ if (isPrivateOrLocalIP2(parsed.hostname)) return false;
880
+ return true;
881
+ } catch {
882
+ return false;
883
+ }
884
+ },
885
+ { message: "SSE endpoint must be a public HTTPS URL" }
886
+ );
887
+ var httpsUrlSchema = z.string().url().refine((url) => url.startsWith("https://"), { message: "URL must use HTTPS" });
791
888
  var anthropicSettingSchema = z.object({
792
- baseUrl: z.string().optional(),
889
+ baseUrl: httpsUrlSchema.optional(),
793
890
  headers: headersSchema
794
891
  });
795
892
  var googleSettingSchema = z.object({
796
- baseUrl: z.string().optional(),
893
+ baseUrl: httpsUrlSchema.optional(),
797
894
  headers: headersSchema
798
895
  });
799
896
  var openAiSettingSchema = z.object({
800
- baseUrl: z.string().optional(),
897
+ baseUrl: httpsUrlSchema.optional(),
801
898
  organization: z.string().optional(),
802
899
  project: z.string().optional(),
803
900
  name: z.string().optional(),
@@ -810,7 +907,7 @@ var ollamaSettingSchema = z.object({
810
907
  var azureOpenAiSettingSchema = z.object({
811
908
  resourceName: z.string().optional(),
812
909
  apiVersion: z.string().optional(),
813
- baseUrl: z.string().optional(),
910
+ baseUrl: httpsUrlSchema.optional(),
814
911
  headers: headersSchema,
815
912
  useDeploymentBasedUrls: z.boolean().optional()
816
913
  });
@@ -820,11 +917,11 @@ var amazonBedrockSettingSchema = z.object({
820
917
  var googleVertexSettingSchema = z.object({
821
918
  project: z.string().optional(),
822
919
  location: z.string().optional(),
823
- baseUrl: z.string().optional(),
920
+ baseUrl: httpsUrlSchema.optional(),
824
921
  headers: headersSchema
825
922
  });
826
923
  var deepseekSettingSchema = z.object({
827
- baseUrl: z.string().optional(),
924
+ baseUrl: httpsUrlSchema.optional(),
828
925
  headers: headersSchema
829
926
  });
830
927
  var providerTableSchema = z.discriminatedUnion("providerName", [
@@ -897,7 +994,7 @@ var perstackConfigSchema = z.object({
897
994
  rule: z.string().optional(),
898
995
  pick: z.array(z.string()).optional(),
899
996
  omit: z.array(z.string()).optional(),
900
- endpoint: z.string(),
997
+ endpoint: sseEndpointSchema2,
901
998
  allowedDomains: z.array(domainPatternSchema).optional()
902
999
  }),
903
1000
  z.object({
@@ -918,7 +1015,7 @@ var perstackConfigSchema = z.object({
918
1015
  tags: z.array(z.string()).optional()
919
1016
  })
920
1017
  ).optional(),
921
- perstackApiBaseUrl: z.url().optional(),
1018
+ perstackApiBaseUrl: z.url().refine((url) => url.startsWith("https://"), { message: "perstackApiBaseUrl must use HTTPS" }).optional(),
922
1019
  perstackBaseSkillCommand: z.array(z.string()).optional(),
923
1020
  envPath: z.array(z.string()).optional()
924
1021
  });
@@ -952,13 +1049,15 @@ var commandOptionsSchema = z.object({
952
1049
  }),
953
1050
  jobId: z.string().optional(),
954
1051
  runId: z.string().optional(),
955
- envPath: z.array(z.string()).optional(),
1052
+ envPath: z.array(z.string()).optional().transform((value) => value && value.length > 0 ? value : void 0),
1053
+ env: z.array(z.string()).optional().transform((value) => value && value.length > 0 ? value : void 0),
956
1054
  verbose: z.boolean().optional(),
957
1055
  continue: z.boolean().optional(),
958
1056
  continueJob: z.string().optional(),
959
1057
  resumeFrom: z.string().optional(),
960
1058
  interactiveToolCallResult: z.boolean().optional(),
961
- runtime: runtimeNameSchema.optional()
1059
+ runtime: runtimeNameSchema.optional(),
1060
+ workspace: z.string().optional()
962
1061
  });
963
1062
  var runCommandInputSchema = z.object({
964
1063
  expertKey: z.string(),
@@ -998,7 +1097,7 @@ var runSettingSchema = z.object({
998
1097
  }),
999
1098
  experts: z.record(z.string(), expertSchema),
1000
1099
  temperature: z.number().min(0).max(1),
1001
- maxSteps: z.number().min(1).optional(),
1100
+ maxSteps: z.number().min(1).optional().default(defaultMaxSteps),
1002
1101
  maxRetries: z.number().min(0),
1003
1102
  timeout: z.number().min(0),
1004
1103
  startedAt: z.number(),
@@ -1007,7 +1106,8 @@ var runSettingSchema = z.object({
1007
1106
  perstackApiKey: z.string().optional(),
1008
1107
  perstackBaseSkillCommand: z.array(z.string()).optional(),
1009
1108
  env: z.record(z.string(), z.string()),
1010
- proxyUrl: z.string().optional()
1109
+ proxyUrl: z.string().optional(),
1110
+ verbose: z.boolean().optional()
1011
1111
  });
1012
1112
  var runParamsSchema = z.object({
1013
1113
  setting: z.object({
@@ -1037,7 +1137,7 @@ var runParamsSchema = z.object({
1037
1137
  )
1038
1138
  ),
1039
1139
  temperature: z.number().min(0).max(1).optional().default(defaultTemperature),
1040
- maxSteps: z.number().min(1).optional(),
1140
+ maxSteps: z.number().min(1).optional().default(defaultMaxSteps),
1041
1141
  maxRetries: z.number().min(0).optional().default(defaultMaxRetries),
1042
1142
  timeout: z.number().min(0).optional().default(defaultTimeout),
1043
1143
  startedAt: z.number().optional().default(Date.now()),
@@ -1046,7 +1146,8 @@ var runParamsSchema = z.object({
1046
1146
  perstackApiKey: z.string().optional(),
1047
1147
  perstackBaseSkillCommand: z.array(z.string()).optional(),
1048
1148
  env: z.record(z.string(), z.string()).optional().default({}),
1049
- proxyUrl: z.string().optional()
1149
+ proxyUrl: z.string().optional(),
1150
+ verbose: z.boolean().optional()
1050
1151
  }),
1051
1152
  checkpoint: checkpointSchema.optional()
1052
1153
  });
@@ -1104,6 +1205,56 @@ var stepSchema = z.object({
1104
1205
  finishedAt: z.number().optional()
1105
1206
  });
1106
1207
 
1208
+ // src/utils/env-filter.ts
1209
+ var SAFE_ENV_VARS = [
1210
+ // System
1211
+ "PATH",
1212
+ "HOME",
1213
+ "SHELL",
1214
+ "TERM",
1215
+ "NODE_PATH",
1216
+ // Proxy
1217
+ "HTTP_PROXY",
1218
+ "HTTPS_PROXY",
1219
+ "http_proxy",
1220
+ "https_proxy",
1221
+ "NO_PROXY",
1222
+ "no_proxy",
1223
+ "PERSTACK_PROXY_URL",
1224
+ "NPM_CONFIG_PROXY",
1225
+ "NPM_CONFIG_HTTPS_PROXY"
1226
+ ];
1227
+ var PROTECTED_ENV_VARS = /* @__PURE__ */ new Set([
1228
+ "PATH",
1229
+ "HOME",
1230
+ "SHELL",
1231
+ "NODE_PATH",
1232
+ "LD_PRELOAD",
1233
+ "LD_LIBRARY_PATH",
1234
+ "DYLD_INSERT_LIBRARIES",
1235
+ "DYLD_LIBRARY_PATH",
1236
+ "NODE_OPTIONS",
1237
+ "PYTHONPATH",
1238
+ "PERL5LIB",
1239
+ "RUBYLIB"
1240
+ ]);
1241
+ function getFilteredEnv(additional) {
1242
+ const filtered = {};
1243
+ for (const key of SAFE_ENV_VARS) {
1244
+ if (process.env[key]) {
1245
+ filtered[key] = process.env[key];
1246
+ }
1247
+ }
1248
+ if (additional) {
1249
+ for (const [key, value] of Object.entries(additional)) {
1250
+ if (!PROTECTED_ENV_VARS.has(key.toUpperCase())) {
1251
+ filtered[key] = value;
1252
+ }
1253
+ }
1254
+ }
1255
+ return filtered;
1256
+ }
1257
+
1107
1258
  // src/utils/zod-error.ts
1108
1259
  function formatZodError(error) {
1109
1260
  const issues = error.issues.map((issue) => {
@@ -1122,6 +1273,6 @@ function parseWithFriendlyError(schema, data, context) {
1122
1273
  throw new Error(`${prefix}${formatZodError(result.error)}`);
1123
1274
  }
1124
1275
 
1125
- export { BaseAdapter, amazonBedrockProviderConfigSchema, anthropicProviderConfigSchema, attemptCompletion, azureOpenAiProviderConfigSchema, basePartSchema, callDelegate, callInteractiveTool, callTools, checkpointSchema, checkpointStatusSchema, completeRun, continueToNextStep, createCallToolsEvent, createCompleteRunEvent, createEmptyUsage, createEvent, createNormalizedCheckpoint, createResolveToolResultsEvent, createRuntimeEvent, createRuntimeInitEvent, createStreamingTextEvent, createToolMessage, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, delegationTargetSchema, domainPatternSchema, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, getAdapter, getRegisteredRuntimes, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, isAdapterAvailable, jobSchema, jobStatusSchema, knownModels, maxApplicationNameLength, maxCheckpointToolCallIdLength, maxEnvNameLength, maxExpertDelegateItems, maxExpertDescriptionLength, maxExpertInstructionLength, maxExpertJobFileNameLength, maxExpertJobQueryLength, maxExpertKeyLength, maxExpertNameLength, maxExpertSkillItems, maxExpertTagItems, maxExpertVersionTagLength, maxOrganizationNameLength, maxSkillDescriptionLength, maxSkillEndpointLength, maxSkillInputJsonSchemaLength, maxSkillNameLength, maxSkillPickOmitItems, maxSkillRequiredEnvItems, maxSkillRuleLength, maxSkillToolItems, maxSkillToolNameLength, mcpSseSkillSchema, mcpStdioSkillSchema, messagePartSchema, messageSchema, ollamaProviderConfigSchema, openAiProviderConfigSchema, organizationNameRegex, packageWithVersionRegex, parseExpertKey, parseWithFriendlyError, perstackConfigSchema, providerConfigSchema, providerNameSchema, providerTableSchema, registerAdapter, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, runtimeNameSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
1276
+ export { BaseAdapter, SAFE_ENV_VARS, amazonBedrockProviderConfigSchema, anthropicProviderConfigSchema, attemptCompletion, azureOpenAiProviderConfigSchema, basePartSchema, callDelegate, callInteractiveTool, callTools, checkpointSchema, checkpointStatusSchema, completeRun, continueToNextStep, createCallToolsEvent, createCompleteRunEvent, createEmptyUsage, createEvent, createNormalizedCheckpoint, createResolveToolResultsEvent, createRuntimeEvent, createRuntimeInitEvent, createStartRunEvent, createStreamingTextEvent, createToolMessage, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, delegationTargetSchema, domainPatternSchema, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, getAdapter, getFilteredEnv, getRegisteredRuntimes, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, isAdapterAvailable, jobSchema, jobStatusSchema, knownModels, maxApplicationNameLength, maxCheckpointToolCallIdLength, maxEnvNameLength, maxExpertDelegateItems, maxExpertDescriptionLength, maxExpertInstructionLength, maxExpertJobFileNameLength, maxExpertJobQueryLength, maxExpertKeyLength, maxExpertNameLength, maxExpertSkillItems, maxExpertTagItems, maxExpertVersionTagLength, maxOrganizationNameLength, maxSkillDescriptionLength, maxSkillEndpointLength, maxSkillInputJsonSchemaLength, maxSkillNameLength, maxSkillPickOmitItems, maxSkillRequiredEnvItems, maxSkillRuleLength, maxSkillToolItems, maxSkillToolNameLength, mcpSseSkillSchema, mcpStdioSkillSchema, messagePartSchema, messageSchema, ollamaProviderConfigSchema, openAiProviderConfigSchema, organizationNameRegex, packageWithVersionRegex, parseExpertKey, parseWithFriendlyError, perstackConfigSchema, providerConfigSchema, providerNameSchema, providerTableSchema, registerAdapter, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, runtimeNameSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
1126
1277
  //# sourceMappingURL=index.js.map
1127
1278
  //# sourceMappingURL=index.js.map
@@ -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/zod-error.ts"],"names":["z","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 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 = undefined\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 = \"perstack\" | \"cursor\" | \"claude-code\" | \"gemini\" | \"docker\"\n\nexport const runtimeNameSchema = z.enum([\"perstack\", \"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\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: z.string(),\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])?)*$/\nexport const domainPatternSchema = z.string().regex(domainPatternRegex, {\n message:\n \"Invalid domain pattern. Use exact domain (example.com) or wildcard prefix (*.example.com)\",\n})\n\nconst anthropicSettingSchema = z.object({\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\n\nconst googleSettingSchema = z.object({\n baseUrl: z.string().optional(),\n headers: headersSchema,\n})\n\nconst openAiSettingSchema = z.object({\n baseUrl: z.string().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: z.string().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: z.string().optional(),\n headers: headersSchema,\n})\n\nconst deepseekSettingSchema = z.object({\n baseUrl: z.string().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: z.string(),\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.url().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}\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.array(z.string()).optional(),\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})\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 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}\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 }\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(),\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})\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(),\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 }),\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}\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","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(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 /** 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.23",
3
+ "version": "0.0.25",
4
4
  "description": "Perstack Core",
5
5
  "author": "Wintermute Technologies, Inc.",
6
6
  "license": "Apache-2.0",