@perstack/core 0.0.21 → 0.0.22

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
@@ -47,13 +47,26 @@ export const apiExpertSchema = expertSchema.omit({
47
47
  - `Message`, `ToolCall`, `ToolResult` - Runtime execution types
48
48
 
49
49
  2. **Domain Common Types**: Types that represent core domain concepts used throughout the system, for example:
50
+ - `Job` - Top-level execution unit containing Runs
51
+ - `Run` - Single Expert execution within a Job
50
52
  - `Checkpoint` - Execution state snapshots
51
53
  - `Usage` - Resource usage tracking
52
54
  - `ProviderConfig` - LLM provider configurations
53
55
 
54
56
  3. **Configuration Schemas**: System-wide configuration structures, for example:
55
57
  - `PerstackToml` - Project configuration file schema
56
- - `RunCommand` - Runtime execution parameters
58
+ - `JobSetting` - Job execution parameters
59
+ - `RunSetting` - Run execution parameters
60
+
61
+ ### Execution Hierarchy
62
+
63
+ | Schema | Description |
64
+ | ------------ | --------------------------------------------------- |
65
+ | `Job` | Top-level execution unit. Contains all Runs. |
66
+ | `Run` | Single Expert execution within a Job. |
67
+ | `Checkpoint` | Snapshot at step end within a Run. |
68
+
69
+ For the full hierarchy and execution model, see [State Management](https://docs.perstack.ai/using-experts/state-management).
57
70
 
58
71
  ### What Core Should NOT Contain
59
72
 
@@ -617,6 +617,17 @@ declare const checkpointStatusSchema: z.ZodEnum<{
617
617
  stoppedByExceededMaxSteps: "stoppedByExceededMaxSteps";
618
618
  stoppedByError: "stoppedByError";
619
619
  }>;
620
+ /** Information about a delegation target */
621
+ interface DelegationTarget {
622
+ expert: {
623
+ key: string;
624
+ name: string;
625
+ version: string;
626
+ };
627
+ toolCallId: string;
628
+ toolName: string;
629
+ query: string;
630
+ }
620
631
  /**
621
632
  * A checkpoint represents a point-in-time snapshot of an Expert's execution state.
622
633
  * Used for resuming, debugging, and observability.
@@ -624,11 +635,13 @@ declare const checkpointStatusSchema: z.ZodEnum<{
624
635
  interface Checkpoint {
625
636
  /** Unique identifier for this checkpoint */
626
637
  id: string;
638
+ /** Job ID this checkpoint belongs to */
639
+ jobId: string;
627
640
  /** Run ID this checkpoint belongs to */
628
641
  runId: string;
629
642
  /** Current execution status */
630
643
  status: CheckpointStatus;
631
- /** Current step number */
644
+ /** Current step number within this Run */
632
645
  stepNumber: number;
633
646
  /** All messages in the conversation so far */
634
647
  messages: Message[];
@@ -641,21 +654,8 @@ interface Checkpoint {
641
654
  /** Expert version */
642
655
  version: string;
643
656
  };
644
- /** If delegating, information about the target Expert */
645
- delegateTo?: {
646
- /** The Expert being delegated to */
647
- expert: {
648
- key: string;
649
- name: string;
650
- version: string;
651
- };
652
- /** Tool call ID that triggered delegation */
653
- toolCallId: string;
654
- /** Name of the delegation tool */
655
- toolName: string;
656
- /** Query passed to the delegate */
657
- query: string;
658
- };
657
+ /** If delegating, information about the target Expert(s) - supports parallel delegation */
658
+ delegateTo?: DelegationTarget[];
659
659
  /** If delegated, information about the parent Expert */
660
660
  delegatedBy?: {
661
661
  /** The parent Expert that delegated */
@@ -682,8 +682,19 @@ interface Checkpoint {
682
682
  /** Partial tool results collected before stopping (for resume) */
683
683
  partialToolResults?: ToolResult[];
684
684
  }
685
+ declare const delegationTargetSchema: z.ZodObject<{
686
+ expert: z.ZodObject<{
687
+ key: z.ZodString;
688
+ name: z.ZodString;
689
+ version: z.ZodString;
690
+ }, z.core.$strip>;
691
+ toolCallId: z.ZodString;
692
+ toolName: z.ZodString;
693
+ query: z.ZodString;
694
+ }, z.core.$strip>;
685
695
  declare const checkpointSchema: z.ZodObject<{
686
696
  id: z.ZodString;
697
+ jobId: z.ZodString;
687
698
  runId: z.ZodString;
688
699
  status: z.ZodEnum<{
689
700
  init: "init";
@@ -790,7 +801,7 @@ declare const checkpointSchema: z.ZodObject<{
790
801
  name: z.ZodString;
791
802
  version: z.ZodString;
792
803
  }, z.core.$strip>;
793
- delegateTo: z.ZodOptional<z.ZodObject<{
804
+ delegateTo: z.ZodOptional<z.ZodArray<z.ZodObject<{
794
805
  expert: z.ZodObject<{
795
806
  key: z.ZodString;
796
807
  name: z.ZodString;
@@ -799,7 +810,7 @@ declare const checkpointSchema: z.ZodObject<{
799
810
  toolCallId: z.ZodString;
800
811
  toolName: z.ZodString;
801
812
  query: z.ZodString;
802
- }, z.core.$strip>>;
813
+ }, z.core.$strip>>>;
803
814
  delegatedBy: z.ZodOptional<z.ZodObject<{
804
815
  expert: z.ZodObject<{
805
816
  key: z.ZodString;
@@ -1174,6 +1185,47 @@ declare const expertSchema: z.ZodObject<{
1174
1185
  tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
1175
1186
  }, z.core.$strip>;
1176
1187
 
1188
+ type JobStatus = "running" | "completed" | "stoppedByMaxSteps" | "stoppedByInteractiveTool" | "stoppedByError";
1189
+ declare const jobStatusSchema: z.ZodEnum<{
1190
+ completed: "completed";
1191
+ stoppedByInteractiveTool: "stoppedByInteractiveTool";
1192
+ stoppedByError: "stoppedByError";
1193
+ running: "running";
1194
+ stoppedByMaxSteps: "stoppedByMaxSteps";
1195
+ }>;
1196
+ interface Job {
1197
+ id: string;
1198
+ status: JobStatus;
1199
+ coordinatorExpertKey: string;
1200
+ totalSteps: number;
1201
+ maxSteps?: number;
1202
+ usage: Usage;
1203
+ startedAt: number;
1204
+ finishedAt?: number;
1205
+ }
1206
+ declare const jobSchema: z.ZodObject<{
1207
+ id: z.ZodString;
1208
+ status: z.ZodEnum<{
1209
+ completed: "completed";
1210
+ stoppedByInteractiveTool: "stoppedByInteractiveTool";
1211
+ stoppedByError: "stoppedByError";
1212
+ running: "running";
1213
+ stoppedByMaxSteps: "stoppedByMaxSteps";
1214
+ }>;
1215
+ coordinatorExpertKey: z.ZodString;
1216
+ totalSteps: z.ZodNumber;
1217
+ maxSteps: z.ZodOptional<z.ZodNumber>;
1218
+ usage: z.ZodObject<{
1219
+ inputTokens: z.ZodNumber;
1220
+ outputTokens: z.ZodNumber;
1221
+ reasoningTokens: z.ZodNumber;
1222
+ totalTokens: z.ZodNumber;
1223
+ cachedInputTokens: z.ZodNumber;
1224
+ }, z.core.$strip>;
1225
+ startedAt: z.ZodNumber;
1226
+ finishedAt: z.ZodOptional<z.ZodNumber>;
1227
+ }, z.core.$strip>;
1228
+
1177
1229
  declare const anthropicSettingSchema: z.ZodObject<{
1178
1230
  baseUrl: z.ZodOptional<z.ZodString>;
1179
1231
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -1697,17 +1749,19 @@ interface CommandOptions {
1697
1749
  maxRetries?: number;
1698
1750
  /** Timeout in milliseconds */
1699
1751
  timeout?: number;
1752
+ /** Custom job ID */
1753
+ jobId?: string;
1700
1754
  /** Custom run ID */
1701
1755
  runId?: string;
1702
1756
  /** Paths to .env files */
1703
1757
  envPath?: string[];
1704
1758
  /** Enable verbose logging */
1705
1759
  verbose?: boolean;
1706
- /** Continue most recent run */
1760
+ /** Continue most recent job */
1707
1761
  continue?: boolean;
1708
- /** Continue specific run by ID */
1709
- continueRun?: string;
1710
- /** Resume from specific checkpoint */
1762
+ /** Continue specific job by ID */
1763
+ continueJob?: string;
1764
+ /** Resume from specific checkpoint (requires --continue or --continue-job) */
1711
1765
  resumeFrom?: string;
1712
1766
  /** Query is interactive tool call result */
1713
1767
  interactiveToolCallResult?: boolean;
@@ -1741,11 +1795,12 @@ declare const runCommandInputSchema: z.ZodObject<{
1741
1795
  maxSteps: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
1742
1796
  maxRetries: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
1743
1797
  timeout: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
1798
+ jobId: z.ZodOptional<z.ZodString>;
1744
1799
  runId: z.ZodOptional<z.ZodString>;
1745
1800
  envPath: z.ZodOptional<z.ZodArray<z.ZodString>>;
1746
1801
  verbose: z.ZodOptional<z.ZodBoolean>;
1747
1802
  continue: z.ZodOptional<z.ZodBoolean>;
1748
- continueRun: z.ZodOptional<z.ZodString>;
1803
+ continueJob: z.ZodOptional<z.ZodString>;
1749
1804
  resumeFrom: z.ZodOptional<z.ZodString>;
1750
1805
  interactiveToolCallResult: z.ZodOptional<z.ZodBoolean>;
1751
1806
  }, z.core.$strip>;
@@ -1779,11 +1834,12 @@ declare const startCommandInputSchema: z.ZodObject<{
1779
1834
  maxSteps: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
1780
1835
  maxRetries: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
1781
1836
  timeout: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number | undefined, string | undefined>>;
1837
+ jobId: z.ZodOptional<z.ZodString>;
1782
1838
  runId: z.ZodOptional<z.ZodString>;
1783
1839
  envPath: z.ZodOptional<z.ZodArray<z.ZodString>>;
1784
1840
  verbose: z.ZodOptional<z.ZodBoolean>;
1785
1841
  continue: z.ZodOptional<z.ZodBoolean>;
1786
- continueRun: z.ZodOptional<z.ZodString>;
1842
+ continueJob: z.ZodOptional<z.ZodString>;
1787
1843
  resumeFrom: z.ZodOptional<z.ZodString>;
1788
1844
  interactiveToolCallResult: z.ZodOptional<z.ZodBoolean>;
1789
1845
  }, z.core.$strip>;
@@ -2154,6 +2210,7 @@ interface RunInput {
2154
2210
  interactiveToolCallResult?: {
2155
2211
  toolCallId: string;
2156
2212
  toolName: string;
2213
+ skillName: string;
2157
2214
  text: string;
2158
2215
  };
2159
2216
  }
@@ -2163,6 +2220,8 @@ interface RunSetting {
2163
2220
  model: string;
2164
2221
  /** Provider configuration */
2165
2222
  providerConfig: ProviderConfig;
2223
+ /** Job ID this run belongs to */
2224
+ jobId: string;
2166
2225
  /** Unique run identifier */
2167
2226
  runId: string;
2168
2227
  /** Expert key to run */
@@ -2173,7 +2232,7 @@ interface RunSetting {
2173
2232
  experts: Record<string, Expert>;
2174
2233
  /** Temperature for generation (0-1) */
2175
2234
  temperature: number;
2176
- /** Maximum steps before stopping */
2235
+ /** Maximum steps before stopping (applies to Job's totalSteps) */
2177
2236
  maxSteps?: number;
2178
2237
  /** Maximum retries on generation failure */
2179
2238
  maxRetries: number;
@@ -2214,6 +2273,7 @@ type RunParamsInput = {
2214
2273
  setting: {
2215
2274
  model: string;
2216
2275
  providerConfig: ProviderConfig;
2276
+ jobId?: string;
2217
2277
  runId?: string;
2218
2278
  expertKey: string;
2219
2279
  input: RunInput;
@@ -2281,6 +2341,7 @@ declare const runSettingSchema: z.ZodObject<{
2281
2341
  baseUrl: z.ZodOptional<z.ZodString>;
2282
2342
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2283
2343
  }, z.core.$strip>], "providerName">;
2344
+ jobId: z.ZodString;
2284
2345
  runId: z.ZodString;
2285
2346
  expertKey: z.ZodString;
2286
2347
  input: z.ZodObject<{
@@ -2288,6 +2349,7 @@ declare const runSettingSchema: z.ZodObject<{
2288
2349
  interactiveToolCallResult: z.ZodOptional<z.ZodObject<{
2289
2350
  toolCallId: z.ZodString;
2290
2351
  toolName: z.ZodString;
2352
+ skillName: z.ZodString;
2291
2353
  text: z.ZodString;
2292
2354
  }, z.core.$strip>>;
2293
2355
  }, z.core.$strip>;
@@ -2461,6 +2523,7 @@ declare const runParamsSchema: z.ZodObject<{
2461
2523
  baseUrl: z.ZodOptional<z.ZodString>;
2462
2524
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2463
2525
  }, z.core.$strip>], "providerName">;
2526
+ jobId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
2464
2527
  runId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
2465
2528
  expertKey: z.ZodString;
2466
2529
  input: z.ZodObject<{
@@ -2468,6 +2531,7 @@ declare const runParamsSchema: z.ZodObject<{
2468
2531
  interactiveToolCallResult: z.ZodOptional<z.ZodObject<{
2469
2532
  toolCallId: z.ZodString;
2470
2533
  toolName: z.ZodString;
2534
+ skillName: z.ZodString;
2471
2535
  text: z.ZodString;
2472
2536
  }, z.core.$strip>>;
2473
2537
  }, z.core.$strip>;
@@ -2678,6 +2742,7 @@ declare const runParamsSchema: z.ZodObject<{
2678
2742
  }, z.core.$strip>;
2679
2743
  checkpoint: z.ZodOptional<z.ZodObject<{
2680
2744
  id: z.ZodString;
2745
+ jobId: z.ZodString;
2681
2746
  runId: z.ZodString;
2682
2747
  status: z.ZodEnum<{
2683
2748
  init: "init";
@@ -2784,7 +2849,7 @@ declare const runParamsSchema: z.ZodObject<{
2784
2849
  name: z.ZodString;
2785
2850
  version: z.ZodString;
2786
2851
  }, z.core.$strip>;
2787
- delegateTo: z.ZodOptional<z.ZodObject<{
2852
+ delegateTo: z.ZodOptional<z.ZodArray<z.ZodObject<{
2788
2853
  expert: z.ZodObject<{
2789
2854
  key: z.ZodString;
2790
2855
  name: z.ZodString;
@@ -2793,7 +2858,7 @@ declare const runParamsSchema: z.ZodObject<{
2793
2858
  toolCallId: z.ZodString;
2794
2859
  toolName: z.ZodString;
2795
2860
  query: z.ZodString;
2796
- }, z.core.$strip>>;
2861
+ }, z.core.$strip>>>;
2797
2862
  delegatedBy: z.ZodOptional<z.ZodObject<{
2798
2863
  expert: z.ZodObject<{
2799
2864
  key: z.ZodString;
@@ -2919,7 +2984,7 @@ type ExpertEventPayloads = {
2919
2984
  };
2920
2985
  callDelegate: {
2921
2986
  newMessage: ExpertMessage;
2922
- toolCall: ToolCall;
2987
+ toolCalls: ToolCall[];
2923
2988
  usage: Usage;
2924
2989
  };
2925
2990
  resolveToolResults: {
@@ -2973,6 +3038,8 @@ interface BaseEvent {
2973
3038
  expertKey: string;
2974
3039
  /** Unix timestamp when event was emitted */
2975
3040
  timestamp: number;
3041
+ /** Job ID this event belongs to */
3042
+ jobId: string;
2976
3043
  /** Run ID this event belongs to */
2977
3044
  runId: string;
2978
3045
  /** Step number when event was emitted */
@@ -2991,13 +3058,13 @@ type EventForType<T extends EventType> = Extract<RunEvent, {
2991
3058
  type: T;
2992
3059
  }>;
2993
3060
  /** Factory function to create typed events */
2994
- declare function createEvent<T extends EventType>(type: T): (setting: RunSetting, checkpoint: Checkpoint, data: Omit<EventForType<T>, "type" | "id" | "expertKey" | "timestamp" | "runId" | "stepNumber">) => EventForType<T>;
3061
+ declare function createEvent<T extends EventType>(type: T): (setting: RunSetting, checkpoint: Checkpoint, data: Omit<EventForType<T>, "type" | "id" | "expertKey" | "timestamp" | "jobId" | "runId" | "stepNumber">) => EventForType<T>;
2995
3062
  declare const startRun: (setting: RunSetting, checkpoint: Checkpoint, data: Omit<BaseEvent & {
2996
3063
  type: "startRun";
2997
3064
  } & {
2998
3065
  initialCheckpoint: Checkpoint;
2999
3066
  inputMessages: (InstructionMessage | UserMessage | ToolMessage)[];
3000
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3067
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3001
3068
  type: "startRun";
3002
3069
  } & {
3003
3070
  initialCheckpoint: Checkpoint;
@@ -3007,7 +3074,7 @@ declare const startGeneration: (setting: RunSetting, checkpoint: Checkpoint, dat
3007
3074
  type: "startGeneration";
3008
3075
  } & {
3009
3076
  messages: Message[];
3010
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3077
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3011
3078
  type: "startGeneration";
3012
3079
  } & {
3013
3080
  messages: Message[];
@@ -3020,7 +3087,7 @@ declare const retry: (setting: RunSetting, checkpoint: Checkpoint, data: Omit<Ba
3020
3087
  toolCalls?: ToolCall[];
3021
3088
  toolResults?: ToolResult[];
3022
3089
  usage: Usage;
3023
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3090
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3024
3091
  type: "retry";
3025
3092
  } & {
3026
3093
  reason: string;
@@ -3035,7 +3102,7 @@ declare const callTools: (setting: RunSetting, checkpoint: Checkpoint, data: Omi
3035
3102
  newMessage: ExpertMessage;
3036
3103
  toolCalls: ToolCall[];
3037
3104
  usage: Usage;
3038
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3105
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3039
3106
  type: "callTools";
3040
3107
  } & {
3041
3108
  newMessage: ExpertMessage;
@@ -3048,7 +3115,7 @@ declare const callInteractiveTool: (setting: RunSetting, checkpoint: Checkpoint,
3048
3115
  newMessage: ExpertMessage;
3049
3116
  toolCall: ToolCall;
3050
3117
  usage: Usage;
3051
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3118
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3052
3119
  type: "callInteractiveTool";
3053
3120
  } & {
3054
3121
  newMessage: ExpertMessage;
@@ -3059,20 +3126,20 @@ declare const callDelegate: (setting: RunSetting, checkpoint: Checkpoint, data:
3059
3126
  type: "callDelegate";
3060
3127
  } & {
3061
3128
  newMessage: ExpertMessage;
3062
- toolCall: ToolCall;
3129
+ toolCalls: ToolCall[];
3063
3130
  usage: Usage;
3064
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3131
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3065
3132
  type: "callDelegate";
3066
3133
  } & {
3067
3134
  newMessage: ExpertMessage;
3068
- toolCall: ToolCall;
3135
+ toolCalls: ToolCall[];
3069
3136
  usage: Usage;
3070
3137
  };
3071
3138
  declare const resolveToolResults: (setting: RunSetting, checkpoint: Checkpoint, data: Omit<BaseEvent & {
3072
3139
  type: "resolveToolResults";
3073
3140
  } & {
3074
3141
  toolResults: ToolResult[];
3075
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3142
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3076
3143
  type: "resolveToolResults";
3077
3144
  } & {
3078
3145
  toolResults: ToolResult[];
@@ -3081,7 +3148,7 @@ declare const resolveThought: (setting: RunSetting, checkpoint: Checkpoint, data
3081
3148
  type: "resolveThought";
3082
3149
  } & {
3083
3150
  toolResult: ToolResult;
3084
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3151
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3085
3152
  type: "resolveThought";
3086
3153
  } & {
3087
3154
  toolResult: ToolResult;
@@ -3090,7 +3157,7 @@ declare const attemptCompletion: (setting: RunSetting, checkpoint: Checkpoint, d
3090
3157
  type: "attemptCompletion";
3091
3158
  } & {
3092
3159
  toolResult: ToolResult;
3093
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3160
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3094
3161
  type: "attemptCompletion";
3095
3162
  } & {
3096
3163
  toolResult: ToolResult;
@@ -3099,7 +3166,7 @@ declare const finishToolCall: (setting: RunSetting, checkpoint: Checkpoint, data
3099
3166
  type: "finishToolCall";
3100
3167
  } & {
3101
3168
  newMessages: (UserMessage | ToolMessage)[];
3102
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3169
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3103
3170
  type: "finishToolCall";
3104
3171
  } & {
3105
3172
  newMessages: (UserMessage | ToolMessage)[];
@@ -3109,7 +3176,7 @@ declare const resumeToolCalls: (setting: RunSetting, checkpoint: Checkpoint, dat
3109
3176
  } & {
3110
3177
  pendingToolCalls: ToolCall[];
3111
3178
  partialToolResults: ToolResult[];
3112
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3179
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3113
3180
  type: "resumeToolCalls";
3114
3181
  } & {
3115
3182
  pendingToolCalls: ToolCall[];
@@ -3119,7 +3186,7 @@ declare const finishAllToolCalls: (setting: RunSetting, checkpoint: Checkpoint,
3119
3186
  type: "finishAllToolCalls";
3120
3187
  } & {
3121
3188
  newMessages: (UserMessage | ToolMessage)[];
3122
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3189
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3123
3190
  type: "finishAllToolCalls";
3124
3191
  } & {
3125
3192
  newMessages: (UserMessage | ToolMessage)[];
@@ -3131,7 +3198,7 @@ declare const completeRun: (setting: RunSetting, checkpoint: Checkpoint, data: O
3131
3198
  step: Step;
3132
3199
  text: string;
3133
3200
  usage: Usage;
3134
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3201
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3135
3202
  type: "completeRun";
3136
3203
  } & {
3137
3204
  checkpoint: Checkpoint;
@@ -3144,7 +3211,7 @@ declare const stopRunByInteractiveTool: (setting: RunSetting, checkpoint: Checkp
3144
3211
  } & {
3145
3212
  checkpoint: Checkpoint;
3146
3213
  step: Step;
3147
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3214
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3148
3215
  type: "stopRunByInteractiveTool";
3149
3216
  } & {
3150
3217
  checkpoint: Checkpoint;
@@ -3155,7 +3222,7 @@ declare const stopRunByDelegate: (setting: RunSetting, checkpoint: Checkpoint, d
3155
3222
  } & {
3156
3223
  checkpoint: Checkpoint;
3157
3224
  step: Step;
3158
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3225
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3159
3226
  type: "stopRunByDelegate";
3160
3227
  } & {
3161
3228
  checkpoint: Checkpoint;
@@ -3166,7 +3233,7 @@ declare const stopRunByExceededMaxSteps: (setting: RunSetting, checkpoint: Check
3166
3233
  } & {
3167
3234
  checkpoint: Checkpoint;
3168
3235
  step: Step;
3169
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3236
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3170
3237
  type: "stopRunByExceededMaxSteps";
3171
3238
  } & {
3172
3239
  checkpoint: Checkpoint;
@@ -3178,7 +3245,7 @@ declare const continueToNextStep: (setting: RunSetting, checkpoint: Checkpoint,
3178
3245
  checkpoint: Checkpoint;
3179
3246
  step: Step;
3180
3247
  nextCheckpoint: Checkpoint;
3181
- }, "id" | "type" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3248
+ }, "id" | "type" | "jobId" | "runId" | "stepNumber" | "expertKey" | "timestamp">) => BaseEvent & {
3182
3249
  type: "continueToNextStep";
3183
3250
  } & {
3184
3251
  checkpoint: Checkpoint;
@@ -3191,6 +3258,8 @@ interface BaseRuntimeEvent {
3191
3258
  id: string;
3192
3259
  /** Unix timestamp */
3193
3260
  timestamp: number;
3261
+ /** Job ID */
3262
+ jobId: string;
3194
3263
  /** Run ID */
3195
3264
  runId: string;
3196
3265
  }
@@ -3247,7 +3316,7 @@ type RuntimeEventForType<T extends RuntimeEventType> = Extract<RuntimeEvent, {
3247
3316
  type: T;
3248
3317
  }>;
3249
3318
  /** Factory function to create runtime events */
3250
- declare function createRuntimeEvent<T extends RuntimeEventType>(type: T, runId: string, data: Omit<RuntimeEventForType<T>, "type" | "id" | "timestamp" | "runId">): RuntimeEventForType<T>;
3319
+ declare function createRuntimeEvent<T extends RuntimeEventType>(type: T, jobId: string, runId: string, data: Omit<RuntimeEventForType<T>, "type" | "id" | "timestamp" | "jobId" | "runId">): RuntimeEventForType<T>;
3251
3320
 
3252
3321
  /** Discriminator for skill manager types */
3253
3322
  type SkillType = "mcp" | "interactive" | "delegate";
@@ -3314,4 +3383,4 @@ type Resource = {
3314
3383
  declare function formatZodError(error: ZodError): string;
3315
3384
  declare function parseWithFriendlyError<T>(schema: ZodSchema<T>, data: unknown, context?: string): T;
3316
3385
 
3317
- export { type AmazonBedrockProviderConfig, type AnthropicProviderConfig, type AzureOpenAiProviderConfig, type BaseEvent, type BasePart, type CallToolResultContent, type Checkpoint, type CheckpointStatus, type CommandOptions, type DeepseekProviderConfig, type DelegateSkillManagerParams, type EventForType, type EventType, 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 McpSkillManagerParams, type McpSseSkill, type McpStdioSkill, type Message, type MessagePart, type OllamaProviderConfig, type OpenAiProviderConfig, type PerstackConfig, type PerstackConfigExpert, type PerstackConfigSkill, type ProviderConfig, type ProviderName, type ProviderTable, type Resource, type RunCommandInput, type RunEvent, type RunInput, type RunParams, type RunParamsInput, type RunSetting, type RuntimeEvent, type RuntimeEventForType, type RuntimeEventType, 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, createEvent, createRuntimeEvent, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, 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, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
3386
+ export { type AmazonBedrockProviderConfig, type AnthropicProviderConfig, type AzureOpenAiProviderConfig, type BaseEvent, type BasePart, type CallToolResultContent, type Checkpoint, type CheckpointStatus, type CommandOptions, type DeepseekProviderConfig, type DelegateSkillManagerParams, type DelegationTarget, type EventForType, type EventType, 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 ProviderConfig, type ProviderName, type ProviderTable, type Resource, type RunCommandInput, type RunEvent, type RunInput, type RunParams, type RunParamsInput, type RunSetting, type RuntimeEvent, type RuntimeEventForType, type RuntimeEventType, 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, createEvent, createRuntimeEvent, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, delegationTargetSchema, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, 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, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
package/dist/src/index.js CHANGED
@@ -358,8 +358,19 @@ var checkpointStatusSchema = z.enum([
358
358
  "stoppedByExceededMaxSteps",
359
359
  "stoppedByError"
360
360
  ]);
361
+ var delegationTargetSchema = z.object({
362
+ expert: z.object({
363
+ key: z.string(),
364
+ name: z.string(),
365
+ version: z.string()
366
+ }),
367
+ toolCallId: z.string(),
368
+ toolName: z.string(),
369
+ query: z.string()
370
+ });
361
371
  var checkpointSchema = z.object({
362
372
  id: z.string(),
373
+ jobId: z.string(),
363
374
  runId: z.string(),
364
375
  status: checkpointStatusSchema,
365
376
  stepNumber: z.number(),
@@ -369,16 +380,7 @@ var checkpointSchema = z.object({
369
380
  name: z.string(),
370
381
  version: z.string()
371
382
  }),
372
- delegateTo: z.object({
373
- expert: z.object({
374
- key: z.string(),
375
- name: z.string(),
376
- version: z.string()
377
- }),
378
- toolCallId: z.string(),
379
- toolName: z.string(),
380
- query: z.string()
381
- }).optional(),
383
+ delegateTo: z.array(delegationTargetSchema).optional(),
382
384
  delegatedBy: z.object({
383
385
  expert: z.object({
384
386
  key: z.string(),
@@ -482,6 +484,23 @@ var expertSchema = z.object({
482
484
  delegates: z.array(z.string().regex(expertKeyRegex).min(1)).optional().default([]),
483
485
  tags: z.array(z.string().regex(tagNameRegex).min(1)).optional().default([])
484
486
  });
487
+ var jobStatusSchema = z.enum([
488
+ "running",
489
+ "completed",
490
+ "stoppedByMaxSteps",
491
+ "stoppedByInteractiveTool",
492
+ "stoppedByError"
493
+ ]);
494
+ var jobSchema = z.object({
495
+ id: z.string(),
496
+ status: jobStatusSchema,
497
+ coordinatorExpertKey: z.string(),
498
+ totalSteps: z.number(),
499
+ maxSteps: z.number().optional(),
500
+ usage: usageSchema,
501
+ startedAt: z.number(),
502
+ finishedAt: z.number().optional()
503
+ });
485
504
  var headersSchema = z.record(z.string(), z.string()).optional();
486
505
  var providerNameSchema = z.enum([
487
506
  "anthropic",
@@ -719,11 +738,12 @@ var commandOptionsSchema = z.object({
719
738
  if (Number.isNaN(parsedValue)) return void 0;
720
739
  return parsedValue;
721
740
  }),
741
+ jobId: z.string().optional(),
722
742
  runId: z.string().optional(),
723
743
  envPath: z.array(z.string()).optional(),
724
744
  verbose: z.boolean().optional(),
725
745
  continue: z.boolean().optional(),
726
- continueRun: z.string().optional(),
746
+ continueJob: z.string().optional(),
727
747
  resumeFrom: z.string().optional(),
728
748
  interactiveToolCallResult: z.boolean().optional()
729
749
  });
@@ -751,6 +771,7 @@ function parseExpertKey(expertKey) {
751
771
  var runSettingSchema = z.object({
752
772
  model: z.string(),
753
773
  providerConfig: providerConfigSchema,
774
+ jobId: z.string(),
754
775
  runId: z.string(),
755
776
  expertKey: z.string().min(1).regex(expertKeyRegex),
756
777
  input: z.object({
@@ -758,6 +779,7 @@ var runSettingSchema = z.object({
758
779
  interactiveToolCallResult: z.object({
759
780
  toolCallId: z.string(),
760
781
  toolName: z.string(),
782
+ skillName: z.string(),
761
783
  text: z.string()
762
784
  }).optional()
763
785
  }),
@@ -777,13 +799,15 @@ var runParamsSchema = z.object({
777
799
  setting: z.object({
778
800
  model: z.string(),
779
801
  providerConfig: providerConfigSchema,
780
- runId: z.string().optional().default(createId()),
802
+ jobId: z.string().optional().default(() => createId()),
803
+ runId: z.string().optional().default(() => createId()),
781
804
  expertKey: z.string().min(1).regex(expertKeyRegex),
782
805
  input: z.object({
783
806
  text: z.string().optional(),
784
807
  interactiveToolCallResult: z.object({
785
808
  toolCallId: z.string(),
786
809
  toolName: z.string(),
810
+ skillName: z.string(),
787
811
  text: z.string()
788
812
  }).optional()
789
813
  }),
@@ -818,6 +842,7 @@ function createEvent(type) {
818
842
  id: createId(),
819
843
  expertKey: checkpoint.expert.key,
820
844
  timestamp: Date.now(),
845
+ jobId: setting.jobId,
821
846
  runId: setting.runId,
822
847
  stepNumber: checkpoint.stepNumber,
823
848
  ...data
@@ -841,11 +866,12 @@ var stopRunByInteractiveTool = createEvent("stopRunByInteractiveTool");
841
866
  var stopRunByDelegate = createEvent("stopRunByDelegate");
842
867
  var stopRunByExceededMaxSteps = createEvent("stopRunByExceededMaxSteps");
843
868
  var continueToNextStep = createEvent("continueToNextStep");
844
- function createRuntimeEvent(type, runId, data) {
869
+ function createRuntimeEvent(type, jobId, runId, data) {
845
870
  return {
846
871
  type,
847
872
  id: createId(),
848
873
  timestamp: Date.now(),
874
+ jobId,
849
875
  runId,
850
876
  ...data
851
877
  };
@@ -881,6 +907,6 @@ function parseWithFriendlyError(schema, data, context) {
881
907
  throw new Error(`${prefix}${formatZodError(result.error)}`);
882
908
  }
883
909
 
884
- export { amazonBedrockProviderConfigSchema, anthropicProviderConfigSchema, attemptCompletion, azureOpenAiProviderConfigSchema, basePartSchema, callDelegate, callInteractiveTool, callTools, checkpointSchema, checkpointStatusSchema, completeRun, continueToNextStep, createEvent, createRuntimeEvent, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, 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, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
910
+ export { amazonBedrockProviderConfigSchema, anthropicProviderConfigSchema, attemptCompletion, azureOpenAiProviderConfigSchema, basePartSchema, callDelegate, callInteractiveTool, callTools, checkpointSchema, checkpointStatusSchema, completeRun, continueToNextStep, createEvent, createRuntimeEvent, deepseekProviderConfigSchema, defaultMaxRetries, defaultMaxSteps, defaultPerstackApiBaseUrl, defaultTemperature, defaultTimeout, delegationTargetSchema, envNameRegex, expertKeyRegex, expertMessageSchema, expertNameRegex, expertSchema, expertVersionRegex, fileBinaryPartSchema, fileInlinePartSchema, fileUrlPartSchema, finishAllToolCalls, finishToolCall, formatZodError, googleGenerativeAiProviderConfigSchema, googleVertexProviderConfigSchema, headersSchema, imageBinaryPartSchema, imageInlinePartSchema, imageUrlPartSchema, instructionMessageSchema, interactiveSkillSchema, interactiveToolSchema, 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, resolveThought, resolveToolResults, resumeToolCalls, retry, runCommandInputSchema, runParamsSchema, runSettingSchema, skillSchema, startCommandInputSchema, startGeneration, startRun, stepSchema, stopRunByDelegate, stopRunByExceededMaxSteps, stopRunByInteractiveTool, tagNameRegex, textPartSchema, toolCallPartSchema, toolCallSchema, toolMessageSchema, toolResultPartSchema, toolResultSchema, urlSafeRegex, usageSchema, userMessageSchema };
885
911
  //# sourceMappingURL=index.js.map
886
912
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/constants/constants.ts","../../src/known-models/index.ts","../../src/schemas/message-part.ts","../../src/schemas/message.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/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"],"mappings":"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","file":"index.js","sourcesContent":["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\"\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 { 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/**\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 /** Run ID this checkpoint belongs to */\n runId: string\n /** Current execution status */\n status: CheckpointStatus\n /** Current step number */\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 */\n delegateTo?: {\n /** The Expert being delegated to */\n expert: {\n key: string\n name: string\n version: string\n }\n /** Tool call ID that triggered delegation */\n toolCallId: string\n /** Name of the delegation tool */\n toolName: string\n /** Query passed to the delegate */\n query: string\n }\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}\n\nexport const checkpointSchema = z.object({\n id: 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\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 query: z.string(),\n })\n .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})\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\"\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\"\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 }\n | {\n type: \"mcpSseSkill\"\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n endpoint: 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 /** 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 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 }),\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 }),\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\"\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 run ID */\n runId?: string\n /** Paths to .env files */\n envPath?: string[]\n /** Enable verbose logging */\n verbose?: boolean\n /** Continue most recent run */\n continue?: boolean\n /** Continue specific run by ID */\n continueRun?: string\n /** Resume from specific checkpoint */\n resumeFrom?: string\n /** Query is interactive tool call result */\n interactiveToolCallResult?: boolean\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 runId: z.string().optional(),\n envPath: z.array(z.string()).optional(),\n verbose: z.boolean().optional(),\n continue: z.boolean().optional(),\n continueRun: z.string().optional(),\n resumeFrom: z.string().optional(),\n interactiveToolCallResult: z.boolean().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 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 /** 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 */\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}\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 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 }\n checkpoint?: Checkpoint\n}\n\nexport const runSettingSchema = z.object({\n model: z.string(),\n providerConfig: providerConfigSchema,\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 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})\n\nexport const runParamsSchema = z.object({\n setting: z.object({\n model: z.string(),\n providerConfig: providerConfigSchema,\n runId: z.string().optional().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 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 }),\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 toolCall: 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 /** 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<EventForType<T>, \"type\" | \"id\" | \"expertKey\" | \"timestamp\" | \"runId\" | \"stepNumber\">,\n ): EventForType<T> => {\n return {\n type,\n id: createId(),\n expertKey: checkpoint.expert.key,\n timestamp: Date.now(),\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 /** Run ID */\n runId: string\n}\n\n/** Runtime event payloads (infrastructure-level events) */\ntype RuntimeEventPayloads = {\n initializeRuntime: {\n runtimeVersion: 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}\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 runId: string,\n data: Omit<RuntimeEventForType<T>, \"type\" | \"id\" | \"timestamp\" | \"runId\">,\n): RuntimeEventForType<T> {\n return {\n type,\n id: createId(),\n timestamp: Date.now(),\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/constants/constants.ts","../../src/known-models/index.ts","../../src/schemas/message-part.ts","../../src/schemas/message.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"],"mappings":"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","file":"index.js","sourcesContent":["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\"\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 { 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}\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})\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\"\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 }\n | {\n type: \"mcpSseSkill\"\n description?: string\n rule?: string\n pick?: string[]\n omit?: string[]\n endpoint: 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 /** 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 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 }),\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 }),\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\"\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}\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})\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}\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 }\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})\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 }),\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 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}\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perstack/core",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "description": "Perstack Core",
5
5
  "author": "Wintermute Technologies, Inc.",
6
6
  "license": "Apache-2.0",