@perstack/core 0.0.53 → 0.0.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/adapters/event-creators.d.ts +26 -0
- package/dist/src/adapters/event-creators.d.ts.map +1 -0
- package/dist/src/adapters/event-creators.js +126 -0
- package/dist/src/adapters/event-creators.js.map +1 -0
- package/dist/src/adapters/index.d.ts +2 -0
- package/dist/src/adapters/index.d.ts.map +1 -0
- package/dist/src/adapters/index.js +2 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/constants.d.ts +11 -0
- package/dist/src/constants/constants.d.ts.map +1 -0
- package/dist/src/constants/constants.js +13 -0
- package/dist/src/constants/constants.js.map +1 -0
- package/dist/src/errors.d.ts +4 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +7 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +28 -6357
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +28 -1972
- package/dist/src/index.js.map +1 -1
- package/dist/src/known-models/index.d.ts +9 -0
- package/dist/src/known-models/index.d.ts.map +1 -0
- package/dist/src/known-models/index.js +216 -0
- package/dist/src/known-models/index.js.map +1 -0
- package/dist/src/schemas/activity.d.ts +2159 -0
- package/dist/src/schemas/activity.d.ts.map +1 -0
- package/dist/src/schemas/activity.js +209 -0
- package/dist/src/schemas/activity.js.map +1 -0
- package/dist/src/schemas/checkpoint.d.ts +338 -0
- package/dist/src/schemas/checkpoint.d.ts.map +1 -0
- package/dist/src/schemas/checkpoint.js +69 -0
- package/dist/src/schemas/checkpoint.js.map +1 -0
- package/dist/src/schemas/expert.d.ts +309 -0
- package/dist/src/schemas/expert.d.ts.map +1 -0
- package/dist/src/schemas/expert.js +70 -0
- package/dist/src/schemas/expert.js.map +1 -0
- package/dist/src/schemas/job.d.ts +44 -0
- package/dist/src/schemas/job.d.ts.map +1 -0
- package/dist/src/schemas/job.js +22 -0
- package/dist/src/schemas/job.js.map +1 -0
- package/dist/src/schemas/lockfile.d.ts +143 -0
- package/dist/src/schemas/lockfile.d.ts.map +1 -0
- package/dist/src/schemas/lockfile.js +26 -0
- package/dist/src/schemas/lockfile.js.map +1 -0
- package/dist/src/schemas/message-part.d.ts +239 -0
- package/dist/src/schemas/message-part.d.ts.map +1 -0
- package/dist/src/schemas/message-part.js +80 -0
- package/dist/src/schemas/message-part.js.map +1 -0
- package/dist/src/schemas/message.d.ts +236 -0
- package/dist/src/schemas/message.d.ts.map +1 -0
- package/dist/src/schemas/message.js +44 -0
- package/dist/src/schemas/message.js.map +1 -0
- package/dist/src/schemas/perstack-toml.d.ts +366 -0
- package/dist/src/schemas/perstack-toml.d.ts.map +1 -0
- package/dist/src/schemas/perstack-toml.js +175 -0
- package/dist/src/schemas/perstack-toml.js.map +1 -0
- package/dist/src/schemas/provider-config.d.ts +216 -0
- package/dist/src/schemas/provider-config.d.ts.map +1 -0
- package/dist/src/schemas/provider-config.js +86 -0
- package/dist/src/schemas/provider-config.js.map +1 -0
- package/dist/src/schemas/provider-tools.d.ts +93 -0
- package/dist/src/schemas/provider-tools.d.ts.map +1 -0
- package/dist/src/schemas/provider-tools.js +60 -0
- package/dist/src/schemas/provider-tools.js.map +1 -0
- package/dist/src/schemas/run-command.d.ts +127 -0
- package/dist/src/schemas/run-command.d.ts.map +1 -0
- package/dist/src/schemas/run-command.js +82 -0
- package/dist/src/schemas/run-command.js.map +1 -0
- package/dist/src/schemas/runtime-version.d.ts +4 -0
- package/dist/src/schemas/runtime-version.d.ts.map +1 -0
- package/dist/src/schemas/runtime-version.js +6 -0
- package/dist/src/schemas/runtime-version.js.map +1 -0
- package/dist/src/schemas/runtime.d.ts +1317 -0
- package/dist/src/schemas/runtime.d.ts.map +1 -0
- package/dist/src/schemas/runtime.js +205 -0
- package/dist/src/schemas/runtime.js.map +1 -0
- package/dist/src/schemas/skill-manager.d.ts +64 -0
- package/dist/src/schemas/skill-manager.d.ts.map +1 -0
- package/dist/src/schemas/skill-manager.js +2 -0
- package/dist/src/schemas/skill-manager.js.map +1 -0
- package/dist/src/schemas/skill.d.ts +147 -0
- package/dist/src/schemas/skill.d.ts.map +1 -0
- package/dist/src/schemas/skill.js +99 -0
- package/dist/src/schemas/skill.js.map +1 -0
- package/dist/src/schemas/step.d.ts +370 -0
- package/dist/src/schemas/step.d.ts.map +1 -0
- package/dist/src/schemas/step.js +21 -0
- package/dist/src/schemas/step.js.map +1 -0
- package/dist/src/schemas/tool-call.d.ts +19 -0
- package/dist/src/schemas/tool-call.d.ts.map +1 -0
- package/dist/src/schemas/tool-call.js +10 -0
- package/dist/src/schemas/tool-call.js.map +1 -0
- package/dist/src/schemas/tool-result.d.ts +86 -0
- package/dist/src/schemas/tool-result.d.ts.map +1 -0
- package/dist/src/schemas/tool-result.js +11 -0
- package/dist/src/schemas/tool-result.js.map +1 -0
- package/dist/src/schemas/usage.d.ts +22 -0
- package/dist/src/schemas/usage.d.ts.map +1 -0
- package/dist/src/schemas/usage.js +10 -0
- package/dist/src/schemas/usage.js.map +1 -0
- package/dist/src/utils/activity.d.ts +20 -0
- package/dist/src/utils/activity.d.ts.map +1 -0
- package/dist/src/utils/activity.js +449 -0
- package/dist/src/utils/activity.js.map +1 -0
- package/dist/src/utils/env-filter.d.ts +4 -0
- package/dist/src/utils/env-filter.d.ts.map +1 -0
- package/dist/src/utils/env-filter.js +50 -0
- package/dist/src/utils/env-filter.js.map +1 -0
- package/dist/src/utils/event-filter.d.ts +16 -0
- package/dist/src/utils/event-filter.d.ts.map +1 -0
- package/dist/src/utils/event-filter.js +31 -0
- package/dist/src/utils/event-filter.js.map +1 -0
- package/dist/src/utils/expert-type.d.ts +38 -0
- package/dist/src/utils/expert-type.d.ts.map +1 -0
- package/dist/src/utils/expert-type.js +88 -0
- package/dist/src/utils/expert-type.js.map +1 -0
- package/dist/src/utils/zod-error.d.ts +4 -0
- package/dist/src/utils/zod-error.d.ts.map +1 -0
- package/dist/src/utils/zod-error.js +17 -0
- package/dist/src/utils/zod-error.js.map +1 -0
- package/package.json +18 -16
- package/LICENSE +0 -202
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
export const BASE_SKILL_PREFIX = "@perstack/base";
|
|
2
|
+
/**
|
|
3
|
+
* Extracts reasoning from Step.newMessages by finding thinkingParts.
|
|
4
|
+
*/
|
|
5
|
+
function extractReasoning(newMessages) {
|
|
6
|
+
const thinkingParts = [];
|
|
7
|
+
for (const message of newMessages) {
|
|
8
|
+
for (const content of message.contents) {
|
|
9
|
+
if (content.type === "thinkingPart") {
|
|
10
|
+
thinkingParts.push(content);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
if (thinkingParts.length === 0)
|
|
15
|
+
return undefined;
|
|
16
|
+
return thinkingParts.map((p) => p.thinking).join("\n\n");
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wraps multiple activities into a ParallelActivitiesGroup when they share reasoning.
|
|
20
|
+
* Single activities are returned as-is.
|
|
21
|
+
*/
|
|
22
|
+
function wrapInGroupIfParallel(activities, reasoning, expertKey, runId, stepNumber) {
|
|
23
|
+
if (activities.length <= 1) {
|
|
24
|
+
// Single activity - return as-is with reasoning
|
|
25
|
+
return activities;
|
|
26
|
+
}
|
|
27
|
+
// Multiple activities - wrap in a group with shared reasoning
|
|
28
|
+
// Remove reasoning from individual activities since it's on the group
|
|
29
|
+
const activitiesWithoutReasoning = activities.map((a) => {
|
|
30
|
+
const { reasoning: _, ...rest } = a;
|
|
31
|
+
return rest;
|
|
32
|
+
});
|
|
33
|
+
const group = {
|
|
34
|
+
type: "parallelGroup",
|
|
35
|
+
id: `parallel-${runId}-step${stepNumber}`,
|
|
36
|
+
expertKey,
|
|
37
|
+
runId,
|
|
38
|
+
reasoning,
|
|
39
|
+
activities: activitiesWithoutReasoning,
|
|
40
|
+
};
|
|
41
|
+
return [group];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Computes activities from a checkpoint and step.
|
|
45
|
+
* Returns an array of activities or activity groups, supporting parallel tool calls and delegations.
|
|
46
|
+
* When multiple activities are produced from a single step, they are wrapped in a ParallelActivitiesGroup
|
|
47
|
+
* with shared reasoning.
|
|
48
|
+
*/
|
|
49
|
+
export function getActivities(params) {
|
|
50
|
+
const { checkpoint, step } = params;
|
|
51
|
+
const { status, delegateTo, runId, stepNumber } = checkpoint;
|
|
52
|
+
const expertKey = checkpoint.expert.key;
|
|
53
|
+
const reasoning = extractReasoning(step.newMessages);
|
|
54
|
+
// Generate QueryActivity for first step (parity with processRunEventToActivity)
|
|
55
|
+
let queryActivity;
|
|
56
|
+
if (stepNumber === 1 && step.inputMessages) {
|
|
57
|
+
const userMessage = step.inputMessages.find((m) => m.type === "userMessage");
|
|
58
|
+
if (userMessage) {
|
|
59
|
+
const textPart = userMessage.contents.find((c) => c.type === "textPart");
|
|
60
|
+
if (textPart && "text" in textPart) {
|
|
61
|
+
queryActivity = {
|
|
62
|
+
type: "query",
|
|
63
|
+
id: "",
|
|
64
|
+
expertKey,
|
|
65
|
+
runId,
|
|
66
|
+
text: textPart.text,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const prependQuery = (result) => queryActivity ? [queryActivity, ...result] : result;
|
|
72
|
+
// Error status - use checkpoint error information
|
|
73
|
+
if (status === "stoppedByError") {
|
|
74
|
+
return prependQuery([createErrorActivity(checkpoint, reasoning)]);
|
|
75
|
+
}
|
|
76
|
+
// Parallel delegate activities - each delegation becomes a separate activity
|
|
77
|
+
if (status === "stoppedByDelegate") {
|
|
78
|
+
if (!delegateTo || delegateTo.length === 0) {
|
|
79
|
+
return prependQuery([
|
|
80
|
+
createRetryActivity(step.newMessages, reasoning, "Delegate status but no delegation targets"),
|
|
81
|
+
]);
|
|
82
|
+
}
|
|
83
|
+
const delegateActivities = delegateTo.map((d) => createDelegateActivity(d, reasoning));
|
|
84
|
+
return prependQuery(wrapInGroupIfParallel(delegateActivities, reasoning, expertKey, runId, stepNumber));
|
|
85
|
+
}
|
|
86
|
+
// Interactive tool activities - may be parallel
|
|
87
|
+
if (status === "stoppedByInteractiveTool") {
|
|
88
|
+
const toolCalls = step.toolCalls ?? [];
|
|
89
|
+
if (toolCalls.length === 0) {
|
|
90
|
+
return prependQuery([createRetryActivity(step.newMessages, reasoning)]);
|
|
91
|
+
}
|
|
92
|
+
const interactiveActivities = toolCalls.map((tc) => createInteractiveToolActivity(tc.skillName, tc.toolName, tc, reasoning));
|
|
93
|
+
return prependQuery(wrapInGroupIfParallel(interactiveActivities, reasoning, expertKey, runId, stepNumber));
|
|
94
|
+
}
|
|
95
|
+
// Normal tool activities - may be parallel
|
|
96
|
+
const toolCalls = step.toolCalls ?? [];
|
|
97
|
+
const toolResults = step.toolResults ?? [];
|
|
98
|
+
// For completed status with no tool calls, return CompleteActivity only
|
|
99
|
+
if (toolCalls.length === 0) {
|
|
100
|
+
if (status === "completed") {
|
|
101
|
+
return prependQuery([createCompleteActivity(step.newMessages, reasoning)]);
|
|
102
|
+
}
|
|
103
|
+
if (status === "proceeding" || status === "init") {
|
|
104
|
+
return prependQuery([]);
|
|
105
|
+
}
|
|
106
|
+
return prependQuery([createRetryActivity(step.newMessages, reasoning)]);
|
|
107
|
+
}
|
|
108
|
+
const toolActivities = [];
|
|
109
|
+
for (const toolCall of toolCalls) {
|
|
110
|
+
const toolResult = toolResults.find((tr) => tr.id === toolCall.id);
|
|
111
|
+
if (!toolResult) {
|
|
112
|
+
// No result yet for this tool call, skip
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const { skillName, toolName } = toolCall;
|
|
116
|
+
if (skillName.startsWith(BASE_SKILL_PREFIX)) {
|
|
117
|
+
toolActivities.push(createBaseToolActivity(toolName, toolCall, toolResult, reasoning));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
toolActivities.push(createGeneralToolActivity(skillName, toolName, toolCall, toolResult, reasoning));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (toolActivities.length === 0) {
|
|
124
|
+
if (status === "completed") {
|
|
125
|
+
return prependQuery([createCompleteActivity(step.newMessages, reasoning)]);
|
|
126
|
+
}
|
|
127
|
+
if (status === "proceeding" || status === "init") {
|
|
128
|
+
return prependQuery([]);
|
|
129
|
+
}
|
|
130
|
+
return prependQuery([createRetryActivity(step.newMessages, reasoning)]);
|
|
131
|
+
}
|
|
132
|
+
const result = wrapInGroupIfParallel(toolActivities, reasoning, expertKey, runId, stepNumber);
|
|
133
|
+
// Append CompleteActivity for completed status
|
|
134
|
+
if (status === "completed") {
|
|
135
|
+
result.push(createCompleteActivity(step.newMessages, undefined));
|
|
136
|
+
}
|
|
137
|
+
return prependQuery(result);
|
|
138
|
+
}
|
|
139
|
+
function createCompleteActivity(newMessages, reasoning) {
|
|
140
|
+
// Extract final text from the last expertMessage's textPart
|
|
141
|
+
const lastExpertMessage = [...newMessages].reverse().find((m) => m.type === "expertMessage");
|
|
142
|
+
const textPart = lastExpertMessage?.contents.find((c) => c.type === "textPart");
|
|
143
|
+
return {
|
|
144
|
+
type: "complete",
|
|
145
|
+
id: "",
|
|
146
|
+
expertKey: "",
|
|
147
|
+
runId: "",
|
|
148
|
+
reasoning,
|
|
149
|
+
text: textPart?.text ?? "",
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function createDelegateActivity(delegate, reasoning) {
|
|
153
|
+
return {
|
|
154
|
+
type: "delegate",
|
|
155
|
+
id: "",
|
|
156
|
+
expertKey: "",
|
|
157
|
+
runId: "",
|
|
158
|
+
reasoning,
|
|
159
|
+
delegateExpertKey: delegate.expert.key,
|
|
160
|
+
query: delegate.query,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function createInteractiveToolActivity(skillName, toolName, toolCall, reasoning) {
|
|
164
|
+
return {
|
|
165
|
+
type: "interactiveTool",
|
|
166
|
+
id: "",
|
|
167
|
+
expertKey: "",
|
|
168
|
+
runId: "",
|
|
169
|
+
reasoning,
|
|
170
|
+
skillName,
|
|
171
|
+
toolName,
|
|
172
|
+
args: toolCall.args,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function createRetryActivity(newMessages, reasoning, customError) {
|
|
176
|
+
const lastMessage = newMessages[newMessages.length - 1];
|
|
177
|
+
const textPart = lastMessage?.contents.find((c) => c.type === "textPart");
|
|
178
|
+
return {
|
|
179
|
+
type: "retry",
|
|
180
|
+
id: "",
|
|
181
|
+
expertKey: "",
|
|
182
|
+
runId: "",
|
|
183
|
+
reasoning,
|
|
184
|
+
error: customError ?? "No tool call or result found",
|
|
185
|
+
message: textPart?.text ?? "",
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function createErrorActivity(checkpoint, reasoning) {
|
|
189
|
+
const error = checkpoint.error;
|
|
190
|
+
return {
|
|
191
|
+
type: "error",
|
|
192
|
+
id: "",
|
|
193
|
+
expertKey: "",
|
|
194
|
+
runId: "",
|
|
195
|
+
reasoning,
|
|
196
|
+
error: error?.message ?? "Unknown error",
|
|
197
|
+
errorName: error?.name,
|
|
198
|
+
isRetryable: error?.isRetryable,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
export function createBaseToolActivity(toolName, toolCall, toolResult, reasoning) {
|
|
202
|
+
const args = toolCall.args;
|
|
203
|
+
const resultContents = toolResult.result;
|
|
204
|
+
const errorText = getErrorFromResult(resultContents);
|
|
205
|
+
const baseFields = { id: "", expertKey: "", runId: "", reasoning };
|
|
206
|
+
switch (toolName) {
|
|
207
|
+
case "attemptCompletion": {
|
|
208
|
+
const remainingTodos = parseRemainingTodosFromResult(resultContents);
|
|
209
|
+
return {
|
|
210
|
+
type: "attemptCompletion",
|
|
211
|
+
...baseFields,
|
|
212
|
+
remainingTodos,
|
|
213
|
+
error: errorText,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
case "todo": {
|
|
217
|
+
const todos = parseTodosFromResult(resultContents);
|
|
218
|
+
return {
|
|
219
|
+
type: "todo",
|
|
220
|
+
...baseFields,
|
|
221
|
+
newTodos: Array.isArray(args["newTodos"]) ? args["newTodos"].map(String) : undefined,
|
|
222
|
+
completedTodos: Array.isArray(args["completedTodos"])
|
|
223
|
+
? args["completedTodos"].map(Number)
|
|
224
|
+
: undefined,
|
|
225
|
+
todos,
|
|
226
|
+
error: errorText,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
case "clearTodo":
|
|
230
|
+
return {
|
|
231
|
+
type: "clearTodo",
|
|
232
|
+
...baseFields,
|
|
233
|
+
error: errorText,
|
|
234
|
+
};
|
|
235
|
+
case "readImageFile":
|
|
236
|
+
return {
|
|
237
|
+
type: "readImageFile",
|
|
238
|
+
...baseFields,
|
|
239
|
+
path: String(args["path"] ?? ""),
|
|
240
|
+
mimeType: parseStringField(resultContents, "mimeType"),
|
|
241
|
+
size: parseNumberField(resultContents, "size"),
|
|
242
|
+
error: errorText,
|
|
243
|
+
};
|
|
244
|
+
case "readPdfFile":
|
|
245
|
+
return {
|
|
246
|
+
type: "readPdfFile",
|
|
247
|
+
...baseFields,
|
|
248
|
+
path: String(args["path"] ?? ""),
|
|
249
|
+
mimeType: parseStringField(resultContents, "mimeType"),
|
|
250
|
+
size: parseNumberField(resultContents, "size"),
|
|
251
|
+
error: errorText,
|
|
252
|
+
};
|
|
253
|
+
case "readTextFile":
|
|
254
|
+
return {
|
|
255
|
+
type: "readTextFile",
|
|
256
|
+
...baseFields,
|
|
257
|
+
path: String(args["path"] ?? ""),
|
|
258
|
+
content: parseStringField(resultContents, "content"),
|
|
259
|
+
from: typeof args["from"] === "number" ? args["from"] : undefined,
|
|
260
|
+
to: typeof args["to"] === "number" ? args["to"] : undefined,
|
|
261
|
+
error: errorText,
|
|
262
|
+
};
|
|
263
|
+
case "editTextFile":
|
|
264
|
+
return {
|
|
265
|
+
type: "editTextFile",
|
|
266
|
+
...baseFields,
|
|
267
|
+
path: String(args["path"] ?? ""),
|
|
268
|
+
newText: String(args["newText"] ?? ""),
|
|
269
|
+
oldText: String(args["oldText"] ?? ""),
|
|
270
|
+
error: errorText,
|
|
271
|
+
};
|
|
272
|
+
case "writeTextFile":
|
|
273
|
+
return {
|
|
274
|
+
type: "writeTextFile",
|
|
275
|
+
...baseFields,
|
|
276
|
+
path: String(args["path"] ?? ""),
|
|
277
|
+
text: String(args["text"] ?? ""),
|
|
278
|
+
error: errorText,
|
|
279
|
+
};
|
|
280
|
+
case "exec":
|
|
281
|
+
return {
|
|
282
|
+
type: "exec",
|
|
283
|
+
...baseFields,
|
|
284
|
+
command: String(args["command"] ?? ""),
|
|
285
|
+
args: Array.isArray(args["args"]) ? args["args"].map(String) : [],
|
|
286
|
+
cwd: String(args["cwd"] ?? ""),
|
|
287
|
+
output: parseStringField(resultContents, "output"),
|
|
288
|
+
error: errorText,
|
|
289
|
+
stdout: parseStringField(resultContents, "stdout"),
|
|
290
|
+
stderr: parseStringField(resultContents, "stderr"),
|
|
291
|
+
};
|
|
292
|
+
case "addSkill":
|
|
293
|
+
return {
|
|
294
|
+
type: "addSkill",
|
|
295
|
+
...baseFields,
|
|
296
|
+
name: String(args["name"] ?? ""),
|
|
297
|
+
skillType: String(args["type"] ?? ""),
|
|
298
|
+
tools: parseStringArrayField(resultContents, "tools"),
|
|
299
|
+
error: errorText,
|
|
300
|
+
};
|
|
301
|
+
case "removeSkill":
|
|
302
|
+
return {
|
|
303
|
+
type: "removeSkill",
|
|
304
|
+
...baseFields,
|
|
305
|
+
skillName: String(args["skillName"] ?? ""),
|
|
306
|
+
error: errorText,
|
|
307
|
+
};
|
|
308
|
+
case "addDelegate":
|
|
309
|
+
return {
|
|
310
|
+
type: "addDelegate",
|
|
311
|
+
...baseFields,
|
|
312
|
+
targetExpertKey: String(args["expertKey"] ?? ""),
|
|
313
|
+
delegateToolName: parseStringField(resultContents, "delegateToolName"),
|
|
314
|
+
error: errorText,
|
|
315
|
+
};
|
|
316
|
+
case "removeDelegate":
|
|
317
|
+
return {
|
|
318
|
+
type: "removeDelegate",
|
|
319
|
+
...baseFields,
|
|
320
|
+
expertName: String(args["expertName"] ?? ""),
|
|
321
|
+
error: errorText,
|
|
322
|
+
};
|
|
323
|
+
case "createExpert":
|
|
324
|
+
return {
|
|
325
|
+
type: "createExpert",
|
|
326
|
+
...baseFields,
|
|
327
|
+
targetKey: String(args["key"] ?? ""),
|
|
328
|
+
description: typeof args["description"] === "string" ? args["description"] : undefined,
|
|
329
|
+
resultExpertKey: parseStringField(resultContents, "expertKey"),
|
|
330
|
+
error: errorText,
|
|
331
|
+
};
|
|
332
|
+
default:
|
|
333
|
+
// Use actual skillName from toolCall, not the constant
|
|
334
|
+
return createGeneralToolActivity(toolCall.skillName, toolName, toolCall, toolResult, reasoning);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
export function createGeneralToolActivity(skillName, toolName, toolCall, toolResult, reasoning) {
|
|
338
|
+
const errorText = getErrorFromResult(toolResult.result);
|
|
339
|
+
return {
|
|
340
|
+
type: "generalTool",
|
|
341
|
+
id: "",
|
|
342
|
+
expertKey: "",
|
|
343
|
+
runId: "",
|
|
344
|
+
reasoning,
|
|
345
|
+
skillName,
|
|
346
|
+
toolName,
|
|
347
|
+
args: toolCall.args,
|
|
348
|
+
result: toolResult.result,
|
|
349
|
+
error: errorText,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
function getErrorFromResult(result) {
|
|
353
|
+
const textPart = result.find((p) => p.type === "textPart");
|
|
354
|
+
if (!textPart?.text)
|
|
355
|
+
return undefined;
|
|
356
|
+
try {
|
|
357
|
+
const parsed = JSON.parse(textPart.text);
|
|
358
|
+
if (typeof parsed.error === "string") {
|
|
359
|
+
return parsed.error;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
catch {
|
|
363
|
+
// Not JSON - only treat as error if it starts with "Error:" or "error:"
|
|
364
|
+
// This avoids false positives from text containing "error" in other contexts
|
|
365
|
+
const trimmed = textPart.text.trim();
|
|
366
|
+
if (trimmed.toLowerCase().startsWith("error:") || trimmed.toLowerCase().startsWith("error ")) {
|
|
367
|
+
return textPart.text;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return undefined;
|
|
371
|
+
}
|
|
372
|
+
function parseStringField(result, field) {
|
|
373
|
+
const textPart = result.find((p) => p.type === "textPart");
|
|
374
|
+
if (!textPart?.text)
|
|
375
|
+
return undefined;
|
|
376
|
+
try {
|
|
377
|
+
const parsed = JSON.parse(textPart.text);
|
|
378
|
+
return typeof parsed[field] === "string" ? parsed[field] : undefined;
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return undefined;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
function parseNumberField(result, field) {
|
|
385
|
+
const textPart = result.find((p) => p.type === "textPart");
|
|
386
|
+
if (!textPart?.text)
|
|
387
|
+
return undefined;
|
|
388
|
+
try {
|
|
389
|
+
const parsed = JSON.parse(textPart.text);
|
|
390
|
+
return typeof parsed[field] === "number" ? parsed[field] : undefined;
|
|
391
|
+
}
|
|
392
|
+
catch {
|
|
393
|
+
return undefined;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
function parseStringArrayField(result, field) {
|
|
397
|
+
const textPart = result.find((p) => p.type === "textPart");
|
|
398
|
+
if (!textPart?.text)
|
|
399
|
+
return undefined;
|
|
400
|
+
try {
|
|
401
|
+
const parsed = JSON.parse(textPart.text);
|
|
402
|
+
if (Array.isArray(parsed[field])) {
|
|
403
|
+
return parsed[field].map(String);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
// Ignore parse errors
|
|
408
|
+
}
|
|
409
|
+
return undefined;
|
|
410
|
+
}
|
|
411
|
+
function parseRemainingTodosFromResult(result) {
|
|
412
|
+
const textPart = result.find((p) => p.type === "textPart");
|
|
413
|
+
if (!textPart?.text)
|
|
414
|
+
return undefined;
|
|
415
|
+
try {
|
|
416
|
+
const parsed = JSON.parse(textPart.text);
|
|
417
|
+
if (Array.isArray(parsed.remainingTodos)) {
|
|
418
|
+
return parsed.remainingTodos.map((t, i) => ({
|
|
419
|
+
id: typeof t.id === "number" ? t.id : i,
|
|
420
|
+
title: typeof t.title === "string" ? t.title : "",
|
|
421
|
+
completed: typeof t.completed === "boolean" ? t.completed : false,
|
|
422
|
+
}));
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
// Ignore parse errors
|
|
427
|
+
}
|
|
428
|
+
return undefined;
|
|
429
|
+
}
|
|
430
|
+
function parseTodosFromResult(result) {
|
|
431
|
+
const textPart = result.find((p) => p.type === "textPart");
|
|
432
|
+
if (!textPart?.text)
|
|
433
|
+
return [];
|
|
434
|
+
try {
|
|
435
|
+
const parsed = JSON.parse(textPart.text);
|
|
436
|
+
if (Array.isArray(parsed.todos)) {
|
|
437
|
+
return parsed.todos.map((t, i) => ({
|
|
438
|
+
id: typeof t.id === "number" ? t.id : i,
|
|
439
|
+
title: typeof t.title === "string" ? t.title : "",
|
|
440
|
+
completed: typeof t.completed === "boolean" ? t.completed : false,
|
|
441
|
+
}));
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
// Ignore parse errors
|
|
446
|
+
}
|
|
447
|
+
return [];
|
|
448
|
+
}
|
|
449
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/utils/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-filter.d.ts","sourceRoot":"","sources":["../../../src/utils/env-filter.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,aAAa,UAiBlB,CAAA;AAeD,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe1F;AACD,OAAO,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const SAFE_ENV_VARS = [
|
|
2
|
+
// System
|
|
3
|
+
"PATH",
|
|
4
|
+
"HOME",
|
|
5
|
+
"SHELL",
|
|
6
|
+
"TERM",
|
|
7
|
+
"NODE_PATH",
|
|
8
|
+
// Proxy
|
|
9
|
+
"HTTP_PROXY",
|
|
10
|
+
"HTTPS_PROXY",
|
|
11
|
+
"http_proxy",
|
|
12
|
+
"https_proxy",
|
|
13
|
+
"NO_PROXY",
|
|
14
|
+
"no_proxy",
|
|
15
|
+
"PERSTACK_PROXY_URL",
|
|
16
|
+
"NPM_CONFIG_PROXY",
|
|
17
|
+
"NPM_CONFIG_HTTPS_PROXY",
|
|
18
|
+
];
|
|
19
|
+
const PROTECTED_ENV_VARS = new Set([
|
|
20
|
+
"PATH",
|
|
21
|
+
"HOME",
|
|
22
|
+
"SHELL",
|
|
23
|
+
"NODE_PATH",
|
|
24
|
+
"LD_PRELOAD",
|
|
25
|
+
"LD_LIBRARY_PATH",
|
|
26
|
+
"DYLD_INSERT_LIBRARIES",
|
|
27
|
+
"DYLD_LIBRARY_PATH",
|
|
28
|
+
"NODE_OPTIONS",
|
|
29
|
+
"PYTHONPATH",
|
|
30
|
+
"PERL5LIB",
|
|
31
|
+
"RUBYLIB",
|
|
32
|
+
]);
|
|
33
|
+
export function getFilteredEnv(additional) {
|
|
34
|
+
const filtered = {};
|
|
35
|
+
for (const key of SAFE_ENV_VARS) {
|
|
36
|
+
if (process.env[key]) {
|
|
37
|
+
filtered[key] = process.env[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (additional) {
|
|
41
|
+
for (const [key, value] of Object.entries(additional)) {
|
|
42
|
+
if (!PROTECTED_ENV_VARS.has(key.toUpperCase())) {
|
|
43
|
+
filtered[key] = value;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return filtered;
|
|
48
|
+
}
|
|
49
|
+
export { SAFE_ENV_VARS };
|
|
50
|
+
//# sourceMappingURL=env-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-filter.js","sourceRoot":"","sources":["../../../src/utils/env-filter.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG;IACpB,SAAS;IACT,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,UAAU;IACV,UAAU;IACV,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;CACzB,CAAA;AACD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM;IACN,MAAM;IACN,OAAO;IACP,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,uBAAuB;IACvB,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,UAAU;IACV,SAAS;CACV,CAAC,CAAA;AACF,MAAM,UAAU,cAAc,CAAC,UAAmC;IAChE,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAC3C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC/C,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AACD,OAAO,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PerstackEvent } from "../schemas/runtime.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validate and parse event filter option
|
|
4
|
+
* @param filter - Array of event type strings to validate
|
|
5
|
+
* @returns The validated filter array
|
|
6
|
+
* @throws Error if any event type is invalid
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateEventFilter(filter: string[]): string[];
|
|
9
|
+
/**
|
|
10
|
+
* Create a filtered event listener that only emits events of allowed types
|
|
11
|
+
* @param listener - The original event listener to wrap
|
|
12
|
+
* @param allowedTypes - Set of event types to allow through
|
|
13
|
+
* @returns A filtered event listener
|
|
14
|
+
*/
|
|
15
|
+
export declare function createFilteredEventListener(listener: (event: PerstackEvent) => void, allowedTypes: Set<string>): (event: PerstackEvent) => void;
|
|
16
|
+
//# sourceMappingURL=event-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-filter.d.ts","sourceRoot":"","sources":["../../../src/utils/event-filter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAG1D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAY9D;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EACxC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAMhC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { PerstackError } from "../errors.js";
|
|
2
|
+
import { isValidEventType, isValidRuntimeEventType } from "../schemas/runtime.js";
|
|
3
|
+
/**
|
|
4
|
+
* Validate and parse event filter option
|
|
5
|
+
* @param filter - Array of event type strings to validate
|
|
6
|
+
* @returns The validated filter array
|
|
7
|
+
* @throws Error if any event type is invalid
|
|
8
|
+
*/
|
|
9
|
+
export function validateEventFilter(filter) {
|
|
10
|
+
const invalid = filter.filter((type) => !isValidEventType(type) && !isValidRuntimeEventType(type));
|
|
11
|
+
if (invalid.length > 0) {
|
|
12
|
+
throw new PerstackError(`Invalid event type(s): ${invalid.join(", ")}. ` +
|
|
13
|
+
"Valid event types are: startRun, completeRun, stopRunByError, callTools, etc. " +
|
|
14
|
+
"See documentation for full list.");
|
|
15
|
+
}
|
|
16
|
+
return filter;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a filtered event listener that only emits events of allowed types
|
|
20
|
+
* @param listener - The original event listener to wrap
|
|
21
|
+
* @param allowedTypes - Set of event types to allow through
|
|
22
|
+
* @returns A filtered event listener
|
|
23
|
+
*/
|
|
24
|
+
export function createFilteredEventListener(listener, allowedTypes) {
|
|
25
|
+
return (event) => {
|
|
26
|
+
if (allowedTypes.has(event.type)) {
|
|
27
|
+
listener(event);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=event-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-filter.js","sourceRoot":"","sources":["../../../src/utils/event-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAgB;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAA;IAElG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,aAAa,CACrB,0BAA0B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC9C,gFAAgF;YAChF,kCAAkC,CACrC,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAAwC,EACxC,YAAyB;IAEzB,OAAO,CAAC,KAAoB,EAAE,EAAE;QAC9B,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type ExpertType = "coordinator" | "delegate";
|
|
2
|
+
export declare function getExpertType(expertName: string): ExpertType;
|
|
3
|
+
export declare function isCoordinatorExpert(expertName: string): boolean;
|
|
4
|
+
export declare function isDelegateExpert(expertName: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Returns the scope of an expert.
|
|
7
|
+
* Handles both bare names and versioned keys (with @version/@tag suffix).
|
|
8
|
+
* - Coordinator "game-producer" -> "game-producer"
|
|
9
|
+
* - Coordinator "game-producer@1.0.0" -> "game-producer"
|
|
10
|
+
* - Delegate "@game-producer/designer" -> "game-producer"
|
|
11
|
+
* - Delegate "@game-producer/designer@1.0.0" -> "game-producer"
|
|
12
|
+
*/
|
|
13
|
+
export declare function getExpertScope(expertName: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the short name of an expert.
|
|
16
|
+
* Handles both bare names and versioned keys (with @version/@tag suffix).
|
|
17
|
+
* - Coordinator "game-producer" -> "game-producer"
|
|
18
|
+
* - Coordinator "game-producer@1.0.0" -> "game-producer"
|
|
19
|
+
* - Delegate "@game-producer/designer" -> "designer"
|
|
20
|
+
* - Delegate "@game-producer/designer@1.0.0" -> "designer"
|
|
21
|
+
*/
|
|
22
|
+
export declare function getExpertShortName(expertName: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Validates whether a delegation from source to target is allowed.
|
|
25
|
+
* Returns null if valid, an error message string if invalid.
|
|
26
|
+
*
|
|
27
|
+
* Rules:
|
|
28
|
+
* - No self-delegation
|
|
29
|
+
* - If target is a delegate (@scope/name), source must be in the same scope
|
|
30
|
+
* - A delegate cannot delegate to its own coordinator
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateDelegation(source: string, target: string): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Validates all delegations for an expert.
|
|
35
|
+
* Returns an array of error messages (empty if all valid).
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateAllDelegations(expertName: string, delegates: string[]): string[];
|
|
38
|
+
//# sourceMappingURL=expert-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expert-type.d.ts","sourceRoot":"","sources":["../../../src/utils/expert-type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,UAAU,CAAA;AAEnD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyBhF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CASxF"}
|