@perstack/runtime 0.0.52 → 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/index.js +29 -24
- package/dist/src/index.js.map +1 -1
- package/package.json +3 -3
package/dist/src/index.js
CHANGED
|
@@ -21,7 +21,7 @@ import { ApiV1Client } from '@perstack/api-client/v1';
|
|
|
21
21
|
|
|
22
22
|
// package.json
|
|
23
23
|
var package_default = {
|
|
24
|
-
version: "0.0.
|
|
24
|
+
version: "0.0.54"};
|
|
25
25
|
function getModel(modelId, providerConfig) {
|
|
26
26
|
switch (providerConfig.providerName) {
|
|
27
27
|
case "anthropic": {
|
|
@@ -661,9 +661,8 @@ async function getSkillManagers(expert, experts, setting, eventListener) {
|
|
|
661
661
|
return skillManagers;
|
|
662
662
|
}
|
|
663
663
|
async function closeSkillManagers(skillManagers) {
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
}
|
|
664
|
+
await Promise.all(Object.values(skillManagers).map((m) => m.close().catch(() => {
|
|
665
|
+
})));
|
|
667
666
|
}
|
|
668
667
|
async function getSkillManagerByToolName(skillManagers, toolName) {
|
|
669
668
|
for (const skillManager of Object.values(skillManagers)) {
|
|
@@ -1358,16 +1357,19 @@ async function resolvingImageFileLogic({
|
|
|
1358
1357
|
continue;
|
|
1359
1358
|
}
|
|
1360
1359
|
const { path: path2, mimeType, size } = imageInfo;
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1360
|
+
try {
|
|
1361
|
+
const buffer = await readFile(path2);
|
|
1362
|
+
files.push({
|
|
1363
|
+
type: "imageInlinePart",
|
|
1364
|
+
encodedData: buffer.toString("base64"),
|
|
1365
|
+
mimeType
|
|
1366
|
+
});
|
|
1367
|
+
} catch (error) {
|
|
1368
|
+
files.push({
|
|
1369
|
+
type: "textPart",
|
|
1370
|
+
text: `Failed to read image file "${path2}": ${error instanceof Error ? error.message : String(error)}`
|
|
1371
|
+
});
|
|
1372
|
+
}
|
|
1371
1373
|
}
|
|
1372
1374
|
return finishToolCall(setting, checkpoint, {
|
|
1373
1375
|
newMessages: [
|
|
@@ -1406,16 +1408,19 @@ async function resolvingPdfFileLogic({
|
|
|
1406
1408
|
continue;
|
|
1407
1409
|
}
|
|
1408
1410
|
const { path: path2, mimeType, size } = pdfInfo;
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1411
|
+
try {
|
|
1412
|
+
const buffer = await readFile(path2);
|
|
1413
|
+
files.push({
|
|
1414
|
+
type: "fileInlinePart",
|
|
1415
|
+
encodedData: buffer.toString("base64"),
|
|
1416
|
+
mimeType
|
|
1417
|
+
});
|
|
1418
|
+
} catch (error) {
|
|
1419
|
+
files.push({
|
|
1420
|
+
type: "textPart",
|
|
1421
|
+
text: `Failed to read PDF file "${path2}": ${error instanceof Error ? error.message : String(error)}`
|
|
1422
|
+
});
|
|
1423
|
+
}
|
|
1419
1424
|
}
|
|
1420
1425
|
return finishToolCall(setting, checkpoint, {
|
|
1421
1426
|
newMessages: [
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../package.json","../../src/model.ts","../../src/usage.ts","../../src/checkpoint-helpers.ts","../../src/run-setting-store.ts","../../src/default-store.ts","../../src/events/event-emitter.ts","../../src/skill-manager/base.ts","../../src/skill-manager/delegate.ts","../../src/skill-manager/interactive.ts","../../src/skill-manager/mcp.ts","../../src/skill-manager/helpers.ts","../../src/states/calling-delegate.ts","../../src/states/calling-interactive-tool.ts","../../src/states/calling-tool.ts","../../src/states/finishing-step.ts","../../src/messages/message.ts","../../src/states/generating-run-result.ts","../../src/states/generating-tool-call.ts","../../src/messages/instruction-message.ts","../../src/states/init.ts","../../src/states/preparing-for-step.ts","../../src/states/resolving-image-file.ts","../../src/states/resolving-pdf-file.ts","../../src/states/resolving-tool-result.ts","../../src/states/resolving-thought.ts","../../src/runtime-state-machine.ts","../../src/execute-state-machine.ts","../../src/resolve-expert-to-run.ts","../../src/setup-experts.ts","../../src/runtime.ts","../../src/index.ts"],"names":["tool","McpClient","createId","part","generateText","retry","dedent","path","readFile","finishToolCall","skillManagers","resolveExpertToRun","createRuntimeEvent"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"@perstack/runtime\",\n \"version\": \"0.0.52\",\n \"description\": \"Perstack Runtime\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \".\": \"./dist/src/index.js\"\n },\n \"types\": {\n \".\": \"./dist/src/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup --config ../../tsup.config.ts\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@ai-sdk/amazon-bedrock\": \"^3.0.62\",\n \"@ai-sdk/anthropic\": \"^2.0.50\",\n \"@ai-sdk/azure\": \"^2.0.77\",\n \"@ai-sdk/deepseek\": \"^1.0.16\",\n \"@ai-sdk/google\": \"^2.0.44\",\n \"@ai-sdk/google-vertex\": \"^3.0.24\",\n \"@ai-sdk/openai\": \"^2.0.75\",\n \"@modelcontextprotocol/sdk\": \"^1.23.0\",\n \"@paralleldrive/cuid2\": \"^3.0.4\",\n \"@perstack/api-client\": \"workspace:*\",\n \"@perstack/core\": \"workspace:*\",\n \"ai\": \"^5.0.104\",\n \"ollama-ai-provider-v2\": \"^1.5.5\",\n \"ts-dedent\": \"^2.2.0\",\n \"xstate\": \"^5.24.0\"\n },\n \"devDependencies\": {\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/node\": \"^24.10.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.14\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import { createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\"\nimport { createAnthropic } from \"@ai-sdk/anthropic\"\nimport { createAzure } from \"@ai-sdk/azure\"\nimport { createDeepSeek } from \"@ai-sdk/deepseek\"\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\"\nimport { createVertex } from \"@ai-sdk/google-vertex\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\nimport { knownModels, type ProviderConfig, type ProviderName, type Usage } from \"@perstack/core\"\nimport type { LanguageModel } from \"ai\"\nimport { createOllama } from \"ollama-ai-provider-v2\"\n\nexport function getModel(modelId: string, providerConfig: ProviderConfig): LanguageModel {\n switch (providerConfig.providerName) {\n case \"anthropic\": {\n const anthropic = createAnthropic({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return anthropic(modelId)\n }\n case \"google\": {\n const google = createGoogleGenerativeAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return google(modelId)\n }\n case \"openai\": {\n const openai = createOpenAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n organization: providerConfig.organization,\n project: providerConfig.project,\n name: providerConfig.name,\n headers: providerConfig.headers,\n })\n return openai(modelId)\n }\n case \"ollama\": {\n const ollama = createOllama({\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return ollama(modelId)\n }\n case \"azure-openai\": {\n const azure = createAzure({\n apiKey: providerConfig.apiKey,\n resourceName: providerConfig.resourceName,\n apiVersion: providerConfig.apiVersion,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n useDeploymentBasedUrls: providerConfig.useDeploymentBasedUrls,\n })\n return azure(modelId)\n }\n case \"amazon-bedrock\": {\n const amazonBedrock = createAmazonBedrock({\n accessKeyId: providerConfig.accessKeyId,\n secretAccessKey: providerConfig.secretAccessKey,\n region: providerConfig.region,\n sessionToken: providerConfig.sessionToken,\n })\n return amazonBedrock(modelId)\n }\n case \"google-vertex\": {\n const vertex = createVertex({\n project: providerConfig.project,\n location: providerConfig.location,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return vertex(modelId)\n }\n case \"deepseek\": {\n const deepseek = createDeepSeek({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return deepseek(modelId)\n }\n }\n}\n\nexport function getContextWindow(providerName: ProviderName, modelId: string): number | undefined {\n const modelConfig = knownModels\n .find((model) => model.provider === providerName)\n ?.models.find((model) => model.name === modelId)\n return modelConfig?.contextWindow\n}\n\nexport function calculateContextWindowUsage(usage: Usage, contextWindow: number): number {\n return (usage.inputTokens + usage.cachedInputTokens + usage.outputTokens) / contextWindow\n}\n","import type { Usage } from \"@perstack/core\"\nimport type { GenerateTextResult, ToolSet } from \"ai\"\n\nexport function createEmptyUsage(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n }\n}\n\nexport function usageFromGenerateTextResult(result: GenerateTextResult<ToolSet, never>): Usage {\n return {\n inputTokens: result.usage.inputTokens || 0,\n outputTokens: result.usage.outputTokens || 0,\n reasoningTokens: result.usage.reasoningTokens || 0,\n totalTokens: result.usage.totalTokens || 0,\n cachedInputTokens: result.usage.cachedInputTokens || 0,\n }\n}\n\nexport function sumUsage(a: Usage, b: Usage): Usage {\n return {\n inputTokens: a.inputTokens + b.inputTokens,\n outputTokens: a.outputTokens + b.outputTokens,\n reasoningTokens: a.reasoningTokens + b.reasoningTokens,\n totalTokens: a.totalTokens + b.totalTokens,\n cachedInputTokens: a.cachedInputTokens + b.cachedInputTokens,\n }\n}\n","import type { Checkpoint, Expert, RunSetting } from \"@perstack/core\"\nimport { createEmptyUsage } from \"./usage.js\"\n\nexport type CreateInitialCheckpointParams = {\n runId: string\n expertKey: string\n expert: Pick<Expert, \"name\" | \"version\">\n contextWindow: number | undefined\n}\n\nexport function createInitialCheckpoint(\n checkpointId: string,\n params: CreateInitialCheckpointParams,\n): Checkpoint {\n return {\n id: checkpointId,\n runId: params.runId,\n expert: {\n key: params.expertKey,\n name: params.expert.name,\n version: params.expert.version,\n },\n stepNumber: 1,\n status: \"init\",\n messages: [],\n usage: createEmptyUsage(),\n contextWindow: params.contextWindow,\n contextWindowUsage: params.contextWindow ? 0.0 : undefined,\n }\n}\n\nexport function createNextStepCheckpoint(checkpointId: string, checkpoint: Checkpoint): Checkpoint {\n return {\n ...checkpoint,\n id: checkpointId,\n stepNumber: checkpoint.stepNumber + 1,\n }\n}\n\nexport type DelegationStateResult = {\n setting: RunSetting\n checkpoint: Checkpoint\n}\n\nexport function buildDelegationReturnState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n const { messages, delegatedBy } = resultCheckpoint\n if (!delegatedBy) {\n throw new Error(\"delegatedBy is required for buildDelegationReturnState\")\n }\n const delegateResultMessage = messages[messages.length - 1]\n if (!delegateResultMessage || delegateResultMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n const delegateText = delegateResultMessage.contents.find((content) => content.type === \"textPart\")\n if (!delegateText) {\n throw new Error(\"Delegation error: delegation result message does not contain a text\")\n }\n const { expert, toolCallId, toolName } = delegatedBy\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n text: delegateText.text,\n },\n },\n },\n checkpoint: {\n ...parentCheckpoint,\n stepNumber: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n },\n }\n}\n\nexport function buildDelegateToState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n currentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n): DelegationStateResult {\n const { delegateTo } = resultCheckpoint\n if (!delegateTo) {\n throw new Error(\"delegateTo is required for buildDelegateToState\")\n }\n const { expert, toolCallId, toolName, query } = delegateTo\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n text: query,\n },\n },\n checkpoint: {\n ...resultCheckpoint,\n status: \"init\",\n messages: [],\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: currentExpert.key,\n name: currentExpert.name,\n version: currentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: resultCheckpoint.id,\n },\n usage: resultCheckpoint.usage,\n },\n }\n}\n","import path from \"node:path\"\nimport type { RunSetting } from \"@perstack/core\"\n\nexport type FileSystem = {\n existsSync: (path: string) => boolean\n mkdir: (path: string, options: { recursive: boolean }) => Promise<void>\n readFile: (path: string, encoding: BufferEncoding) => Promise<string>\n writeFile: (path: string, data: string, encoding: BufferEncoding) => Promise<void>\n}\n\nexport type GetRunDirFn = (runId: string) => string\n\nexport async function createDefaultFileSystem(): Promise<FileSystem> {\n const fs = await import(\"node:fs\")\n const fsPromises = await import(\"node:fs/promises\")\n return {\n existsSync: fs.existsSync,\n mkdir: async (p, options) => {\n await fsPromises.mkdir(p, options)\n },\n readFile: fsPromises.readFile,\n writeFile: fsPromises.writeFile,\n }\n}\n\nexport function defaultGetRunDir(runId: string): string {\n return `${process.cwd()}/perstack/runs/${runId}`\n}\n\nexport async function storeRunSetting(\n setting: RunSetting,\n fs?: FileSystem,\n getRunDir: GetRunDirFn = defaultGetRunDir,\n): Promise<void> {\n const fileSystem = fs ?? (await createDefaultFileSystem())\n const runDir = getRunDir(setting.runId)\n if (fileSystem.existsSync(runDir)) {\n const runSettingPath = path.resolve(runDir, \"run-setting.json\")\n const runSetting = JSON.parse(await fileSystem.readFile(runSettingPath, \"utf-8\")) as RunSetting\n runSetting.updatedAt = Date.now()\n await fileSystem.writeFile(runSettingPath, JSON.stringify(runSetting), \"utf-8\")\n } else {\n await fileSystem.mkdir(runDir, { recursive: true })\n await fileSystem.writeFile(\n path.resolve(runDir, \"run-setting.json\"),\n JSON.stringify(setting),\n \"utf-8\",\n )\n }\n}\n","import { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\"\nimport type { RunEvent } from \"@perstack/core\"\nimport { type Checkpoint, checkpointSchema } from \"@perstack/core\"\nimport { defaultGetRunDir as getRunDir } from \"./run-setting-store.js\"\n\nexport async function defaultRetrieveCheckpoint(\n runId: string,\n checkpointId: string,\n): Promise<Checkpoint> {\n const runDir = getRunDir(runId)\n const checkpointFiles = await readdir(runDir, { withFileTypes: true }).then((files) =>\n files.filter((file) => file.isFile() && file.name.startsWith(\"checkpoint-\")),\n )\n const checkpointFile = checkpointFiles.find((file) => file.name.endsWith(`-${checkpointId}.json`))\n if (!checkpointFile) {\n throw new Error(`checkpoint not found: ${runId} ${checkpointId}`)\n }\n const checkpointPath = `${runDir}/${checkpointFile.name}`\n const checkpoint = await readFile(checkpointPath, \"utf8\")\n return checkpointSchema.parse(JSON.parse(checkpoint))\n}\n\nexport async function defaultStoreCheckpoint(\n checkpoint: Checkpoint,\n timestamp: number,\n): Promise<void> {\n const { id, runId, stepNumber } = checkpoint\n const runDir = getRunDir(runId)\n const checkpointPath = `${runDir}/checkpoint-${timestamp}-${stepNumber}-${id}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(checkpointPath, JSON.stringify(checkpoint))\n}\n\nexport async function defaultStoreEvent(event: RunEvent): Promise<void> {\n const { timestamp, runId, stepNumber, type } = event\n const runDir = getRunDir(runId)\n const eventPath = `${runDir}/event-${timestamp}-${stepNumber}-${type}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(eventPath, JSON.stringify(event))\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent } from \"@perstack/core\"\n\nexport class RunEventEmitter {\n private listeners: ((event: RunEvent) => Promise<void>)[] = []\n\n subscribe(listener: (event: RunEvent) => Promise<void>) {\n this.listeners.push(listener)\n }\n\n async emit(event: RunEvent) {\n for (const listener of this.listeners) {\n await listener({\n ...event,\n id: createId(),\n timestamp: Date.now(),\n })\n }\n }\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n ToolDefinition,\n} from \"@perstack/core\"\n\nexport abstract class BaseSkillManager {\n protected _toolDefinitions: ToolDefinition[] = []\n protected _initialized = false\n protected _initializing?: Promise<void>\n abstract readonly name: string\n abstract readonly type: SkillType\n abstract readonly lazyInit: boolean\n readonly skill?: McpStdioSkill | McpSseSkill\n readonly interactiveSkill?: InteractiveSkill\n readonly expert?: Expert\n protected _runId: string\n protected _eventListener?: (event: RunEvent | RuntimeEvent) => void\n\n constructor(runId: string, eventListener?: (event: RunEvent | RuntimeEvent) => void) {\n this._runId = runId\n this._eventListener = eventListener\n }\n\n async init(): Promise<void> {\n if (this._initialized) {\n throw new Error(`Skill ${this.name} is already initialized`)\n }\n if (this._initializing) {\n throw new Error(`Skill ${this.name} is already initializing`)\n }\n const initPromise = this._performInit()\n this._initializing = initPromise\n if (!this.lazyInit) {\n try {\n await initPromise\n } catch (error) {\n this._initialized = false\n this._initializing = undefined\n throw error\n }\n }\n }\n\n isInitialized(): boolean {\n return this._initialized\n }\n\n protected async _performInit(): Promise<void> {\n await this._doInit()\n this._initialized = true\n this._initializing = undefined\n }\n\n protected abstract _doInit(): Promise<void>\n\n abstract close(): Promise<void>\n\n async getToolDefinitions(): Promise<ToolDefinition[]> {\n if (!this.isInitialized() && !this.lazyInit) {\n throw new Error(`Skill ${this.name} is not initialized`)\n }\n if (!this.isInitialized() && this.lazyInit) {\n return []\n }\n return this._filterTools(this._toolDefinitions)\n }\n\n protected _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n return tools\n }\n\n abstract callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>>\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class DelegateSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"delegate\"\n readonly lazyInit = false\n override readonly expert: Expert\n\n constructor(\n expert: Expert,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(runId, eventListener)\n this.name = expert.name\n this.expert = expert\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = [\n {\n skillName: this.expert.name,\n name: this.expert.name.split(\"/\").pop() ?? this.expert.name,\n description: this.expert.description,\n inputSchema: {\n type: \"object\",\n properties: { query: { type: \"string\" } },\n required: [\"query\"],\n },\n interactive: false,\n },\n ]\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","import type {\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class InteractiveSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"interactive\"\n readonly lazyInit = false\n override readonly interactiveSkill: InteractiveSkill\n\n constructor(\n interactiveSkill: InteractiveSkill,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(runId, eventListener)\n this.name = interactiveSkill.name\n this.interactiveSkill = interactiveSkill\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = Object.values(this.interactiveSkill.tools).map((tool) => ({\n skillName: this.interactiveSkill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n interactive: true,\n }))\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","import { Client as McpClient } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\"\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { type CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport type {\n CallToolResultContent,\n FileInlinePart,\n ImageInlinePart,\n McpSseSkill,\n McpStdioSkill,\n Resource,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n ToolDefinition,\n} from \"@perstack/core\"\nimport { createRuntimeEvent } from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class McpSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"mcp\"\n readonly lazyInit: boolean\n override readonly skill: McpStdioSkill | McpSseSkill\n private _mcpClient?: McpClient\n private _env: Record<string, string>\n\n constructor(\n skill: McpStdioSkill | McpSseSkill,\n env: Record<string, string>,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(runId, eventListener)\n this.name = skill.name\n this.skill = skill\n this._env = env\n this.lazyInit =\n skill.type === \"mcpStdioSkill\" && skill.lazyInit && skill.name !== \"@perstack/base\"\n }\n\n protected override async _doInit(): Promise<void> {\n this._mcpClient = new McpClient({\n name: `${this.skill.name}-mcp-client`,\n version: \"1.0.0\",\n })\n if (this.skill.type === \"mcpStdioSkill\") {\n await this._initStdio(this.skill)\n } else {\n await this._initSse(this.skill)\n }\n const { tools } = await this._mcpClient.listTools()\n this._toolDefinitions = tools.map((tool) => ({\n skillName: this.skill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n interactive: false,\n }))\n }\n\n private async _initStdio(skill: McpStdioSkill): Promise<void> {\n if (!skill.command) {\n throw new Error(`Skill ${skill.name} has no command`)\n }\n const env: Record<string, string> = {}\n for (const envName of skill.requiredEnv) {\n if (!this._env[envName]) {\n throw new Error(`Skill ${skill.name} requires environment variable ${envName}`)\n }\n env[envName] = this._env[envName]\n }\n const { command, args } = this._getCommandArgs(skill)\n const transport = new StdioClientTransport({ command, args, env, stderr: \"ignore\" })\n await this._mcpClient!.connect(transport)\n if (this._eventListener) {\n const serverInfo = this._mcpClient!.getServerVersion()\n const event = createRuntimeEvent(\"skillConnected\", this._runId, {\n skillName: skill.name,\n serverInfo: serverInfo ? { name: serverInfo.name, version: serverInfo.version } : undefined,\n })\n this._eventListener(event)\n }\n }\n\n private async _initSse(skill: McpSseSkill): Promise<void> {\n if (!skill.endpoint) {\n throw new Error(`Skill ${skill.name} has no endpoint`)\n }\n const transport = new SSEClientTransport(new URL(skill.endpoint))\n await this._mcpClient!.connect(transport)\n }\n\n private _getCommandArgs(skill: McpStdioSkill): { command: string; args: string[] } {\n const { name, command, packageName, args } = skill\n if (!packageName && (!args || args.length === 0)) {\n throw new Error(`Skill ${name} has no packageName or args. Please provide one of them.`)\n }\n if (packageName && args && args.length > 0) {\n throw new Error(\n `Skill ${name} has both packageName and args. Please provide only one of them.`,\n )\n }\n let newArgs = args && args.length > 0 ? args : [packageName!]\n if (command === \"npx\" && !newArgs.includes(\"-y\")) {\n newArgs = [\"-y\", ...newArgs]\n }\n return { command, args: newArgs }\n }\n\n override async close(): Promise<void> {\n if (this._mcpClient) {\n await this._mcpClient.close()\n if (this._eventListener && this.skill) {\n const event = createRuntimeEvent(\"skillDisconnected\", this._runId, {\n skillName: this.skill.name,\n })\n this._eventListener(event)\n }\n }\n }\n\n protected override _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n const omit = this.skill.omit ?? []\n const pick = this.skill.pick ?? []\n return tools\n .filter((tool) => (omit.length > 0 ? !omit.includes(tool.name) : true))\n .filter((tool) => (pick.length > 0 ? pick.includes(tool.name) : true))\n }\n\n override async callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n if (!this.isInitialized() || !this._mcpClient) {\n throw new Error(`${this.name} is not initialized`)\n }\n try {\n const result = (await this._mcpClient.callTool({\n name: toolName,\n arguments: input,\n })) as CallToolResult\n return this._convertToolResult(result, toolName, input)\n } catch (error) {\n return this._handleToolError(error, toolName)\n }\n }\n\n private _handleToolError(error: unknown, toolName: string): Array<TextPart> {\n if (error instanceof McpError) {\n return [\n {\n type: \"textPart\",\n text: `Error calling tool ${toolName}: ${error.message}`,\n id: createId(),\n },\n ]\n }\n throw error\n }\n\n private _convertToolResult(\n result: CallToolResult,\n toolName: string,\n input: Record<string, unknown>,\n ): Array<TextPart | ImageInlinePart | FileInlinePart> {\n if (!result.content || result.content.length === 0) {\n return [\n {\n type: \"textPart\",\n text: `Tool ${toolName} returned nothing with arguments: ${JSON.stringify(input)}`,\n id: createId(),\n },\n ]\n }\n return result.content\n .filter((part) => part.type !== \"audio\" && part.type !== \"resource_link\")\n .map((part) => this._convertPart(part as CallToolResultContent))\n }\n\n private _convertPart(part: CallToolResultContent): TextPart | ImageInlinePart | FileInlinePart {\n switch (part.type) {\n case \"text\":\n if (!part.text || part.text === \"\") {\n return { type: \"textPart\", text: \"Error: No content\", id: createId() }\n }\n return { type: \"textPart\", text: part.text, id: createId() }\n case \"image\":\n if (!part.data || !part.mimeType) {\n throw new Error(\"Image part must have both data and mimeType\")\n }\n return {\n type: \"imageInlinePart\",\n encodedData: part.data,\n mimeType: part.mimeType,\n id: createId(),\n }\n case \"resource\":\n if (!part.resource) {\n throw new Error(\"Resource part must have resource content\")\n }\n return this._convertResource(part.resource)\n }\n }\n\n private _convertResource(resource: Resource): TextPart | FileInlinePart {\n if (!resource.mimeType) {\n throw new Error(`Resource ${JSON.stringify(resource)} has no mimeType`)\n }\n if (resource.text && typeof resource.text === \"string\") {\n return { type: \"textPart\", text: resource.text, id: createId() }\n }\n if (resource.blob && typeof resource.blob === \"string\") {\n return {\n type: \"fileInlinePart\",\n encodedData: resource.blob,\n mimeType: resource.mimeType,\n id: createId(),\n }\n }\n throw new Error(`Unsupported resource type: ${JSON.stringify(resource)}`)\n }\n}\n","import type { Expert, RunEvent, RunSetting, RuntimeEvent } from \"@perstack/core\"\nimport { jsonSchema, type ToolSet, tool } from \"ai\"\nimport type { BaseSkillManager } from \"./base.js\"\nimport { DelegateSkillManager } from \"./delegate.js\"\nimport { InteractiveSkillManager } from \"./interactive.js\"\nimport { McpSkillManager } from \"./mcp.js\"\n\nasync function initSkillManagersWithCleanup(\n managers: BaseSkillManager[],\n allManagers: BaseSkillManager[],\n): Promise<void> {\n const results = await Promise.allSettled(managers.map((m) => m.init()))\n const firstRejected = results.find((r) => r.status === \"rejected\")\n if (firstRejected) {\n await Promise.all(allManagers.map((m) => m.close().catch(() => {})))\n throw (firstRejected as PromiseRejectedResult).reason\n }\n}\n\nexport async function getSkillManagers(\n expert: Expert,\n experts: Record<string, Expert>,\n setting: RunSetting,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n): Promise<Record<string, BaseSkillManager>> {\n const { perstackBaseSkillCommand, env, runId } = setting\n const { skills } = expert\n if (!skills[\"@perstack/base\"]) {\n throw new Error(\"Base skill is not defined\")\n }\n const allManagers: BaseSkillManager[] = []\n const mcpSkills = Object.values(skills).filter(\n (skill) => skill.type === \"mcpStdioSkill\" || skill.type === \"mcpSseSkill\",\n )\n for (const skill of mcpSkills) {\n if (perstackBaseSkillCommand && skill.type === \"mcpStdioSkill\") {\n const matchesBaseByPackage = skill.command === \"npx\" && skill.packageName === \"@perstack/base\"\n const matchesBaseByArgs =\n skill.command === \"npx\" &&\n Array.isArray(skill.args) &&\n skill.args.includes(\"@perstack/base\")\n if (matchesBaseByPackage || matchesBaseByArgs) {\n const [overrideCommand, ...overrideArgs] = perstackBaseSkillCommand\n if (!overrideCommand) {\n throw new Error(\"perstackBaseSkillCommand must have at least one element\")\n }\n skill.command = overrideCommand\n skill.packageName = undefined\n skill.args = overrideArgs\n skill.lazyInit = false\n }\n }\n }\n const mcpSkillManagers = mcpSkills.map((skill) => {\n const manager = new McpSkillManager(skill, env, runId, eventListener)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(mcpSkillManagers, allManagers)\n const interactiveSkills = Object.values(skills).filter(\n (skill) => skill.type === \"interactiveSkill\",\n )\n const interactiveSkillManagers = interactiveSkills.map((interactiveSkill) => {\n const manager = new InteractiveSkillManager(interactiveSkill, runId, eventListener)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(interactiveSkillManagers, allManagers)\n const delegateSkillManagers = expert.delegates.map((delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n const manager = new DelegateSkillManager(delegate, runId, eventListener)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(delegateSkillManagers, allManagers)\n const skillManagers: Record<string, BaseSkillManager> = {}\n for (const manager of allManagers) {\n skillManagers[manager.name] = manager\n }\n return skillManagers\n}\n\nexport async function closeSkillManagers(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<void> {\n for (const skillManager of Object.values(skillManagers)) {\n await skillManager.close()\n }\n}\n\nexport async function getSkillManagerByToolName(\n skillManagers: Record<string, BaseSkillManager>,\n toolName: string,\n): Promise<BaseSkillManager> {\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n if (toolDefinition.name === toolName) {\n return skillManager\n }\n }\n }\n throw new Error(`Tool ${toolName} not found`)\n}\n\nexport async function getToolSet(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ToolSet> {\n const tools: ToolSet = {}\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n tools[toolDefinition.name] = tool({\n description: toolDefinition.description,\n inputSchema: jsonSchema(toolDefinition.inputSchema),\n })\n }\n }\n return tools\n}\n","import { type RunEvent, stopRunByDelegate } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/index.js\"\n\nexport async function callingDelegateLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (!skillManager.expert) {\n throw new Error(`Delegation error: skill manager \"${toolName}\" not found`)\n }\n if (!args || !args.query || typeof args.query !== \"string\") {\n throw new Error(\"Delegation error: query is undefined\")\n }\n return stopRunByDelegate(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByDelegate\",\n delegateTo: {\n expert: {\n key: skillManager.expert.key,\n name: skillManager.expert.name,\n version: skillManager.expert.version,\n },\n toolCallId: id,\n toolName,\n query: args.query,\n },\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import { type RunEvent, stopRunByInteractiveTool } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function callingInteractiveToolLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return stopRunByInteractiveTool(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByInteractiveTool\",\n },\n step: {\n ...step,\n finishedAt: new Date().getTime(),\n },\n })\n}\n","import {\n attemptCompletion,\n type RunEvent,\n resolveImageFile,\n resolvePdfFile,\n resolveThought,\n resolveToolResult,\n type ToolResult,\n} from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/index.js\"\n\nexport async function callingToolLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, skillName, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (skillManager.type !== \"mcp\") {\n throw new Error(`Incorrect SkillType, required MCP, got ${skillManager.type}`)\n }\n const result = await skillManager.callTool(toolName, args)\n const toolResult: ToolResult = { id, skillName, toolName, result }\n if (skillName === \"@perstack/base\") {\n if (toolName === \"think\") {\n return resolveThought(setting, checkpoint, { toolResult })\n }\n if (toolName === \"attemptCompletion\") {\n return attemptCompletion(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readPdfFile\") {\n return resolvePdfFile(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readImageFile\") {\n return resolveImageFile(setting, checkpoint, { toolResult })\n }\n }\n return resolveToolResult(setting, checkpoint, { toolResult })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { continueToNextStep, type RunEvent, stopRunByExceededMaxSteps } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function finishingStepLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (setting.maxSteps !== undefined && checkpoint.stepNumber >= setting.maxSteps) {\n return stopRunByExceededMaxSteps(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByExceededMaxSteps\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n }\n return continueToNextStep(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n nextCheckpoint: {\n ...checkpoint,\n id: createId(),\n stepNumber: checkpoint.stepNumber + 1,\n },\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n ExpertMessage,\n FileBinaryPart,\n FileInlinePart,\n FileUrlPart,\n ImageBinaryPart,\n ImageInlinePart,\n ImageUrlPart,\n InstructionMessage,\n Message,\n TextPart,\n ToolCallPart,\n ToolMessage,\n ToolResultPart,\n UserMessage,\n} from \"@perstack/core\"\nimport type {\n AssistantModelMessage,\n FilePart as FileModelPart,\n ImagePart as ImageModelPart,\n ModelMessage,\n SystemModelMessage,\n TextPart as TextModelPart,\n ToolCallPart as ToolCallModelPart,\n ToolModelMessage,\n ToolResultPart as ToolResultModelPart,\n UserModelMessage,\n} from \"ai\"\nimport { dedent } from \"ts-dedent\"\n\nexport function createUserMessage(\n contents: Array<\n | Omit<TextPart, \"id\">\n | Omit<ImageUrlPart, \"id\">\n | Omit<ImageInlinePart, \"id\">\n | Omit<ImageBinaryPart, \"id\">\n | Omit<FileUrlPart, \"id\">\n | Omit<FileInlinePart, \"id\">\n | Omit<FileBinaryPart, \"id\">\n >,\n): UserMessage {\n return {\n type: \"userMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createExpertMessage(\n contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">>,\n): ExpertMessage {\n return {\n type: \"expertMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createToolMessage(\n contents: Array<\n Omit<ToolResultPart, \"id\" | \"contents\"> & {\n contents: Array<Omit<TextPart, \"id\"> | Omit<ImageInlinePart, \"id\">>\n }\n >,\n): ToolMessage {\n return {\n type: \"toolMessage\",\n contents: contents.map((part) => ({\n ...part,\n contents: part.contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function messageToCoreMessage(message: Message): ModelMessage {\n switch (message.type) {\n case \"instructionMessage\":\n return {\n role: \"system\",\n content: instructionContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"userMessage\":\n return {\n role: \"user\",\n content: userContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"expertMessage\":\n return {\n role: \"assistant\",\n content: expertContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"toolMessage\":\n return {\n role: \"tool\",\n content: toolContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n }\n}\nfunction instructionContentsToCoreContent(\n contents: InstructionMessage[\"contents\"],\n): SystemModelMessage[\"content\"] {\n return contents.reduce((acc, part) => {\n return dedent`\n ${acc}\n ${part.text}\n `.trim()\n }, \"\" as string)\n}\nfunction userContentsToCoreContent(contents: UserMessage[\"contents\"]): UserModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"imageUrlPart\":\n return imageUrlPartToCoreImagePart(part)\n case \"imageInlinePart\":\n return imageInlinePartToCoreImagePart(part)\n case \"imageBinaryPart\":\n return imageBinaryPartToCoreImagePart(part)\n case \"fileUrlPart\":\n return fileUrlPartToCoreFilePart(part)\n case \"fileInlinePart\":\n return fileInlinePartToCoreFilePart(part)\n case \"fileBinaryPart\":\n return fileBinaryPartToCoreFilePart(part)\n }\n })\n}\nfunction expertContentsToCoreContent(\n contents: ExpertMessage[\"contents\"],\n): AssistantModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"toolCallPart\":\n return toolCallPartToCoreToolCallPart(part)\n }\n })\n}\nfunction toolContentsToCoreContent(contents: ToolMessage[\"contents\"]): ToolModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"toolResultPart\":\n return toolResultPartToCoreToolResultPart(part)\n }\n })\n}\nfunction textPartToCoreTextPart(part: TextPart): TextModelPart {\n return {\n type: \"text\",\n text: part.text,\n }\n}\nfunction imageUrlPartToCoreImagePart(part: ImageUrlPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction imageInlinePartToCoreImagePart(part: ImageInlinePart): ImageModelPart {\n return {\n type: \"image\",\n image: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction imageBinaryPartToCoreImagePart(part: ImageBinaryPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction fileUrlPartToCoreFilePart(part: FileUrlPart): FileModelPart {\n return {\n type: \"file\",\n data: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction fileInlinePartToCoreFilePart(part: FileInlinePart): FileModelPart {\n return {\n type: \"file\",\n data: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction fileBinaryPartToCoreFilePart(part: FileBinaryPart): FileModelPart {\n return {\n type: \"file\",\n data: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction toolCallPartToCoreToolCallPart(part: ToolCallPart): ToolCallModelPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.args,\n }\n}\nfunction toolResultPartToCoreToolResultPart(part: ToolResultPart): ToolResultModelPart {\n const { contents } = part\n if (contents.length === 1 && contents[0].type === \"textPart\") {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"text\" as const, value: contents[0].text },\n }\n }\n const contentValue = contents.map((content) =>\n content.type === \"textPart\"\n ? { type: \"text\" as const, text: content.text }\n : { type: \"media\" as const, data: content.encodedData, mediaType: content.mimeType },\n )\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"content\" as const, value: contentValue },\n }\n}\n","import { type RunEvent, completeRun, retry } from \"@perstack/core\"\nimport { type GenerateTextResult, type ToolSet, generateText } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { calculateContextWindowUsage, getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { createEmptyUsage, sumUsage, usageFromGenerateTextResult } from \"../usage.js\"\n\nexport async function generatingRunResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const toolMessage = createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ])\n const model = getModel(setting.model, setting.providerConfig)\n const { messages } = checkpoint\n let generationResult: GenerateTextResult<ToolSet, never>\n try {\n generationResult = await generateText({\n model,\n messages: [...messages, toolMessage].map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [toolMessage, createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(generationResult)\n const { text } = generationResult\n const newMessages = [toolMessage, createExpertMessage(text ? [{ type: \"textPart\", text }] : [])]\n return completeRun(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n messages: [...messages, ...newMessages],\n usage: sumUsage(checkpoint.usage, usage),\n contextWindowUsage: checkpoint.contextWindow\n ? calculateContextWindowUsage(usage, checkpoint.contextWindow)\n : undefined,\n status: \"completed\",\n },\n step: {\n ...step,\n newMessages: [...step.newMessages, ...newMessages],\n finishedAt: new Date().getTime(),\n usage: sumUsage(step.usage, usage),\n },\n text,\n usage,\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n callDelegate,\n callInteractiveTool,\n callTool,\n type RunEvent,\n retry,\n type TextPart,\n type ToolCallPart,\n} from \"@perstack/core\"\nimport { type GenerateTextResult, generateText, type ToolSet } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { getSkillManagerByToolName, getToolSet } from \"../skill-manager/index.js\"\nimport { createEmptyUsage, usageFromGenerateTextResult } from \"../usage.js\"\n\nexport async function generatingToolCallLogic({\n setting,\n checkpoint,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { messages } = checkpoint\n const model = getModel(setting.model, setting.providerConfig)\n let result: GenerateTextResult<ToolSet, never>\n try {\n result = await generateText({\n model,\n messages: messages.map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n tools: await getToolSet(skillManagers),\n toolChoice: \"required\",\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(result)\n const { text, toolCalls, finishReason } = result\n const toolCall = toolCalls[0]\n if (!toolCall) {\n const reason = JSON.stringify({\n error: \"Error: No tool call generated\",\n message: \"You must generate a tool call. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage,\n })\n }\n const contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">> = [\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.input,\n },\n ]\n if (text) {\n contents.push({\n type: \"textPart\",\n text,\n })\n }\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n const eventPayload = {\n newMessage: createExpertMessage(contents),\n toolCall: {\n id: toolCall.toolCallId,\n skillName: skillManager.name,\n toolName: toolCall.toolName,\n args: toolCall.input,\n },\n usage,\n }\n if (finishReason === \"tool-calls\" || finishReason === \"stop\") {\n switch (skillManager.type) {\n case \"mcp\":\n return callTool(setting, checkpoint, eventPayload)\n case \"interactive\":\n return callInteractiveTool(setting, checkpoint, eventPayload)\n case \"delegate\":\n return callDelegate(setting, checkpoint, eventPayload)\n }\n }\n if (finishReason === \"length\") {\n const reason = JSON.stringify({\n error: \"Error: Tool call generation failed\",\n message: \"Generation length exceeded. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [\n createExpertMessage([\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.input,\n },\n ]),\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n contents: [{ type: \"textPart\", text: reason }],\n },\n ]),\n ],\n toolCall: eventPayload.toolCall,\n toolResult: {\n id: toolCall.toolCallId,\n skillName: skillManager.name,\n toolName: toolCall.toolName,\n result: [{ type: \"textPart\", id: createId(), text: reason }],\n },\n usage,\n })\n }\n throw new Error(`Unexpected finish reason: ${finishReason}`)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Expert, InstructionMessage } from \"@perstack/core\"\nimport { dedent } from \"ts-dedent\"\n\nconst metaInstruction = dedent`\n IMPORTANT:\n Based on the user's initial message, you must determine what needs to be done.\n You must iterate through hypothesis and verification to fulfill the task.\n YOU MUST CONTINUE TO CALL TOOLS UNTIL THE TASK IS COMPLETE.\n If you do not call tools, the task will be considered complete, and the agent loop will end.\n\n You operate in an agent loop, iteratively completing tasks through these steps:\n 1. Analyze Events: Understand user needs and current state through the event stream, focusing on the latest user messages and execution results\n 2. Select Tools: Choose the next tool call based on current state, task planning, relevant knowledge, and available data APIs\n 3. Wait for Execution: The selected tool action will be executed by the sandbox environment with new observations added to the event stream\n 4. Iterate: Choose only one tool call per iteration, patiently repeat the above steps until task completion\n 5. Notify Task Completion: Call the attemptCompletion tool to inform the user when the task is complete\n 6. Generate Final Results: Produce a final result that clearly describes each task you performed, step by step\n\n Conditions for ending the agent loop:\n If any of the following apply, **immediately call the attemptCompletion tool**.\n When the agent loop must end, calling any tool other than attemptCompletion is highly dangerous.\n Under all circumstances, strictly follow this rule.\n - When the task is complete\n - When the user's request is outside your expertise\n - When the user's request is unintelligible\n\n Rules for requests outside your area of expertise:\n - Tell your area of expertise to the user in final results\n\n Environment information:\n - Current time is ${new Date().toISOString()}\n - Current working directory is ${process.cwd()}\n`\n\nexport function createInstructionMessage(\n expert: Expert,\n experts: Record<string, Expert>,\n): InstructionMessage {\n const instruction = dedent`\n You are Perstack, an AI expert that tackles tasks requested by users by utilizing all available tools.\n\n (The following information describes your nature and role as an AI, the mechanisms of the AI system, and other meta-cognitive aspects.)\n\n ${metaInstruction}\n\n ---\n (The following describes the objective, steps, rules, etc. regarding your expert task.)\n\n ${expert.instruction}\n\n ---\n (The following is an overview of each skill and the rules for calling tools.)\n\n ${getSkillRules(expert)}\n\n ---\n (The following is an overview of each delegate expert and the rules for calling tools.)\n\n You can delegate tasks to the following experts by calling delegate expert name as a tool:\n\n ${getDelegateRules(expert, experts)}\n `\n return {\n type: \"instructionMessage\",\n contents: [\n {\n id: createId(),\n type: \"textPart\",\n text: instruction,\n },\n ],\n id: createId(),\n cache: true,\n }\n}\n\nfunction getSkillRules(expert: Expert): string {\n return Object.values(expert.skills).reduce((acc, skill) => {\n if (!skill.rule) {\n return acc\n }\n return dedent`\n ${acc}\n\n \"${skill.name}\" skill rules:\n ${skill.rule}\n `.trim()\n }, \"\" as string)\n}\n\nfunction getDelegateRules(expert: Expert, experts: Record<string, Expert>): string {\n return expert.delegates.reduce((acc, delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n if (!delegate) {\n return acc\n }\n return dedent`\n ${acc}\n\n About \"${delegate.name}\":\n ${delegate.description}\n `.trim()\n }, \"\" as string)\n}\n","import { type RunEvent, startRun } from \"@perstack/core\"\nimport { createInstructionMessage } from \"../messages/instruction-message.js\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function initLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { expertKey, experts } = setting\n const expert = experts[expertKey]\n switch (checkpoint.status) {\n case \"init\": {\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createInstructionMessage(expert, experts),\n createUserMessage([{ type: \"textPart\", text: setting.input.text }]),\n ],\n })\n }\n case \"stoppedByDelegate\":\n case \"stoppedByInteractiveTool\": {\n if (!setting.input.interactiveToolCallResult) {\n throw new Error(\"Interactive tool call result is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: setting.input.interactiveToolCallResult.toolCallId,\n toolName: setting.input.interactiveToolCallResult.toolName,\n contents: [{ type: \"textPart\", text: setting.input.interactiveToolCallResult.text }],\n },\n ]),\n ],\n })\n }\n default:\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [createUserMessage([{ type: \"textPart\", text: setting.input.text }])],\n })\n }\n}\n","import { type RunEvent, startGeneration } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function preparingForStepLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // TODO: add logic to count tokens and check if it's exceeded the limit\n return startGeneration(setting, checkpoint, {\n messages: checkpoint.messages,\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { type ImageInlinePart, type RunEvent, type TextPart, finishToolCall } from \"@perstack/core\"\nimport { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\ntype ReadImageFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingImageFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<ImageInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let imageInfo: ReadImageFileResult | undefined\n try {\n imageInfo = JSON.parse(textPart.text) as ReadImageFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = imageInfo\n const file = await readFile(path).then((buffer) => ({\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n size,\n }))\n files.push({\n type: \"imageInlinePart\",\n encodedData: file.encodedData,\n mimeType: file.mimeType,\n })\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: files,\n },\n ]),\n ],\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { type FileInlinePart, type RunEvent, type TextPart, finishToolCall } from \"@perstack/core\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\ntype ReadPdfFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingPdfFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<FileInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let pdfInfo: ReadPdfFileResult | undefined\n try {\n pdfInfo = JSON.parse(textPart.text) as ReadPdfFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = pdfInfo\n const file = await readFile(path).then((buffer) => ({\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n size,\n }))\n files.push({\n type: \"fileInlinePart\",\n encodedData: file.encodedData,\n mimeType: file.mimeType,\n })\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: [\n {\n type: \"textPart\",\n text: \"User uploads PDF file as follows.\",\n },\n ],\n },\n ]),\n createUserMessage(files),\n ],\n })\n}\n","import { type RunEvent, finishToolCall } from \"@perstack/core\"\nimport { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function resolvingToolResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ]),\n ],\n })\n}\n","import type { RunEvent } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { resolvingToolResultLogic } from \"./resolving-tool-result.js\"\n\nexport async function resolvingThoughtLogic(context: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return resolvingToolResultLogic(context)\n}\n","import type { Checkpoint, RunEvent, RunSetting, Step } from \"@perstack/core\"\nimport { type ActorRefFrom, assign, type SnapshotFrom, setup } from \"xstate\"\nimport { calculateContextWindowUsage } from \"./model.js\"\nimport type { BaseSkillManager } from \"./skill-manager/index.js\"\nimport { callingDelegateLogic } from \"./states/calling-delegate.js\"\nimport { callingInteractiveToolLogic } from \"./states/calling-interactive-tool.js\"\nimport { callingToolLogic } from \"./states/calling-tool.js\"\nimport { finishingStepLogic } from \"./states/finishing-step.js\"\nimport { generatingRunResultLogic } from \"./states/generating-run-result.js\"\nimport { generatingToolCallLogic } from \"./states/generating-tool-call.js\"\nimport { initLogic } from \"./states/init.js\"\nimport { preparingForStepLogic } from \"./states/preparing-for-step.js\"\nimport { resolvingImageFileLogic } from \"./states/resolving-image-file.js\"\nimport { resolvingPdfFileLogic } from \"./states/resolving-pdf-file.js\"\nimport { resolvingThoughtLogic } from \"./states/resolving-thought.js\"\nimport { resolvingToolResultLogic } from \"./states/resolving-tool-result.js\"\nimport { createEmptyUsage, sumUsage } from \"./usage.js\"\n\nexport const runtimeStateMachine = setup({\n types: {\n input: {} as {\n setting: RunSetting\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n context: {} as {\n setting: RunSetting\n step: Step\n checkpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n events: {} as RunEvent,\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QCUCuA7AdASXQSwBcBiWAgQwCcC10BtABgF1FQAHAe1kL3fRZAAeiAKz0AzJgDsAJgAsksZNlixs+gDZZAGhABPRIszCAjGIAcY4crPHhJyQF8HOmpgAKFMK0p50UAGLsFADKBF4k5FQA4mDoYBRkBDx0TPwcXEm8-EIIZmaymPRK8saSopL00tI6+gjq9JjSltLG9HnqZkqdTi4YmDFxCUl+ACrs7AA2AMJkExNEngQUugzMSCDp3FnrOcam0pgAnHbS9GeSZsIq6jWIh2KHUsYd9MbSwl2S6j0grgPxiV8UDGkxmcyIAGNZhMQRNVmlOFs+DtEPt1Jg3odpGVbFcrLcENIzOjbGYipIZMpnmYfn9YgDhsDxtNoZDobgwgkIUkAG5gWHw9abTLI0C7ImSTDqYTY2S45TCCwE54HUr1WRXSqHcRVWl9f5DIGwsHzKFzAAiYAmYCgiTAgrYiJF2VRYnoj1ehwskkOZTEz2EBMMJnMFnezxUF2+zl+fRNRuZCzgkz5sOQcFQEwIDo2TuSLoQpWJUvowl9Flk0sqBLlZik2Mkpjyan90d6WHjo0TnlgKf5AAt2KgoP3s6khXntmLUT6JL6PkoFJX1MZtHoRKIpdrK3sqorpG3Yx3oQnJknexM+W4IAAzfx4a054X5lGFn2PMTYlSyWQH32WAl1DKKV1Q6L1V1EWQ9WPOZT3mHs+2wABbMgYHvR9x0dDIX2nN8zEeOVjGORsmgsMQCTJYRMGJORwP9MwDxpGNXE7Jkz0SMIkNYAgpnYLjrRFJ9J1FQQZzJTBPxUfDDjlN1OgJIkSUVUtDlXCpsUPVx0wvHk4O0zNiBvXw8FgftjWhITsKnUTCU-SU92JMlfSaGtjDrGQKSbfJxGeaDMG0lMjUHYdRyIIz8FM8y5kspECyabFGneRz3RkN011qOwGnUbcVzeJKDz8gLLyBa87wfMAwuMyLmRNGLnVfeL7KSl5nPI9c6mA9RQPwmwNVLQrk2KvxkNQsB0Iq8KTLMmqLMw3MrJEnJGsSxUWtSgkfSU-JDmIqNKj8g1AT8Gh9KzSE+NYASwBoOqcJs+K61sDo5SKBifwU4tSRUtTKi+KDmLjE9hvQTkyG5PBU0TUh2FYGgACFdA5AFwchyZbus3YyklYRst-DUlDEaU2tqFUMS+NyPmlPZDiAvzWMta1bTCCIYfh3QGZtO10cWmcLiOQnG3qHHiSDbGvM-Ex1EjYk-PvCL+yBUJwghXhhlQfl2AAOTAAQCCV1hubiqxjCMRUZXMGSvVUZV6A1LcuorDp8I0WWqoVvx9ZZ2GMARgBRAQITASBIAAWTIAR9dgQ2Gs0Ki8nyK4bCuDVRZNzRwxse4GK6pwY3QdgIDgfgaARBaCxUBosU0cw5TLUiCQAWlkR4nPdbVCeyld-vbHB8AIUvYtfRQ6yr6xa6xcwCTLaiadj1dKxk1phD8jwvB8PxAhCMJWAH+rcKAyuyVaa5Wi+KeW9njV59xpeDvpQ0u1BaFd7u3Y2keDpO7LW2FDLc+Z6AnsPEO4ZYAxghMOCL8MaojsJKYi8cHZ5C9EGNoRg1CdH3GcZeYD-KDV0o-CYp1+4TjLg1cQkp-SfjDE9Ew1R2o-hNnsUs1MfR-UuANHSQUhwjmIVhQeuFTg-ilF8GUblTgKDoRlBQhQJEaiJMnfCHDAp+FKuNKBPNCSlgaOIeQttWxS0DO1bKdY9HvH9D+FotMcFFXwVAEaaFyrqLirbBo1M7KvFUDJCiRJGgalUM3LEMk5R30GEdKAJ0MxZicWQlQEklAyillWVoZgUF1isG0MoDEsF0yBnYkGyNeQa0mNE3CtgiIYnEEBToFwvS+mVPkU20l8JWG1OIHJsE-AcyZmAEpNlbBqEwLo7yVRbY3HatPfCXUOgfCsGSTQmk+hyymorbevSloykeFYCkrxfqrmJiIaRRQ7JbP8Q8PyoQYasEgGsxA2JWiNB-jjdQTRqb1IkP6OwRF8KMSAbnBwQA */\n id: \"Run\",\n initial: \"Init\",\n context: ({ input }) => ({\n setting: input.setting,\n checkpoint: input.initialCheckpoint,\n step: {\n stepNumber: input.initialCheckpoint.stepNumber,\n inputMessages: [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: Date.now(),\n },\n eventListener: input.eventListener,\n skillManagers: input.skillManagers,\n }),\n states: {\n Init: {\n on: {\n startRun: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n status: \"proceeding\",\n messages: [...context.checkpoint.messages, ...event.inputMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n inputMessages: event.inputMessages,\n }) satisfies Step,\n }),\n },\n },\n },\n\n PreparingForStep: {\n on: {\n startGeneration: {\n target: \"GeneratingToolCall\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: context.step.inputMessages ?? [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: event.timestamp,\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingToolCall: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCall: event.toolCall,\n toolResult: event.toolResult,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callTool: {\n target: \"CallingTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callInteractiveTool: {\n target: \"CallingInteractiveTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callDelegate: {\n target: \"CallingDelegate\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n },\n },\n\n CallingTool: {\n on: {\n resolveToolResult: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveThought: {\n target: \"ResolvingThought\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolvePdfFile: {\n target: \"ResolvingPdfFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveImageFile: {\n target: \"ResolvingImageFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n attemptCompletion: {\n target: \"GeneratingRunResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingToolResult: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingThought: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingPdfFile: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingImageFile: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingRunResult: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCall: event.toolCall,\n toolResult: event.toolResult,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingInteractiveTool: {\n on: {\n stopRunByInteractiveTool: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingDelegate: {\n on: {\n stopRunByDelegate: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n FinishingStep: {\n on: {\n continueToNextStep: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ event }) => event.nextCheckpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n reenter: true,\n },\n stopRunByExceededMaxSteps: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n Stopped: {\n type: \"final\",\n },\n },\n})\n\nexport const StateMachineLogics: Record<\n Exclude<RunSnapshot[\"value\"], \"Stopped\">,\n (context: RunSnapshot[\"context\"]) => Promise<RunEvent>\n> = {\n Init: initLogic,\n PreparingForStep: preparingForStepLogic,\n GeneratingToolCall: generatingToolCallLogic,\n CallingTool: callingToolLogic,\n ResolvingToolResult: resolvingToolResultLogic,\n ResolvingThought: resolvingThoughtLogic,\n ResolvingPdfFile: resolvingPdfFileLogic,\n ResolvingImageFile: resolvingImageFileLogic,\n GeneratingRunResult: generatingRunResultLogic,\n CallingInteractiveTool: callingInteractiveToolLogic,\n CallingDelegate: callingDelegateLogic,\n FinishingStep: finishingStepLogic,\n}\n\nexport type RunActor = ActorRefFrom<typeof runtimeStateMachine>\nexport type RunSnapshot = SnapshotFrom<typeof runtimeStateMachine>\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport { createActor } from \"xstate\"\nimport type { RunEventEmitter } from \"./events/event-emitter.js\"\nimport { runtimeStateMachine, StateMachineLogics } from \"./runtime-state-machine.js\"\nimport { type BaseSkillManager, closeSkillManagers } from \"./skill-manager/index.js\"\n\nexport type ExecuteStateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint, timestamp: number) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\nexport async function executeStateMachine(params: ExecuteStateMachineParams): Promise<Checkpoint> {\n const {\n setting,\n initialCheckpoint,\n eventListener,\n skillManagers,\n eventEmitter,\n storeCheckpoint,\n shouldContinueRun,\n } = params\n const runActor = createActor(runtimeStateMachine, {\n input: {\n setting,\n initialCheckpoint,\n eventListener,\n skillManagers,\n },\n })\n return new Promise<Checkpoint>((resolve, reject) => {\n runActor.subscribe(async (runState) => {\n try {\n if (runState.value === \"Stopped\") {\n const { checkpoint, skillManagers } = runState.context\n if (!checkpoint) {\n throw new Error(\"Checkpoint is undefined\")\n }\n await closeSkillManagers(skillManagers)\n resolve(checkpoint)\n } else {\n const event = await StateMachineLogics[runState.value](runState.context)\n if (\"checkpoint\" in event) {\n await storeCheckpoint(event.checkpoint, event.timestamp)\n }\n await eventEmitter.emit(event)\n if (shouldContinueRun) {\n const shouldContinue = await shouldContinueRun(\n runState.context.setting,\n runState.context.checkpoint,\n runState.context.step,\n )\n if (!shouldContinue) {\n runActor.stop()\n await closeSkillManagers(runState.context.skillManagers)\n resolve(runState.context.checkpoint)\n return\n }\n }\n runActor.send(event)\n }\n } catch (error) {\n await closeSkillManagers(skillManagers).catch(() => {})\n reject(error)\n }\n })\n runActor.start()\n })\n}\n","import { type ApiRegistryExpert, ApiV1Client } from \"@perstack/api-client/v1\"\nimport type { Expert, Skill } from \"@perstack/core\"\n\nexport async function resolveExpertToRun(\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: {\n perstackApiBaseUrl: string\n perstackApiKey?: string\n },\n): Promise<Expert> {\n if (experts[expertKey]) {\n return experts[expertKey]\n }\n const client = new ApiV1Client({\n baseUrl: clientOptions.perstackApiBaseUrl,\n apiKey: clientOptions.perstackApiKey,\n })\n const { expert } = await client.registry.experts.get({ expertKey })\n experts[expertKey] = toRuntimeExpert(expert)\n return experts[expertKey]\n}\n\nfunction toRuntimeExpert(expert: ApiRegistryExpert): Expert {\n const skills: Record<string, Skill> = Object.fromEntries(\n Object.entries(expert.skills).map(([name, skill]) => {\n switch (skill.type) {\n case \"mcpStdioSkill\":\n return [name, { ...skill, name }]\n case \"mcpSseSkill\":\n return [name, { ...skill, name }]\n case \"interactiveSkill\":\n return [name, { ...skill, name }]\n default: {\n throw new Error(`Unknown skill type: ${(skill as { type: string }).type}`)\n }\n }\n }),\n )\n return { ...expert, skills }\n}\n","import type { Expert, RunSetting } from \"@perstack/core\"\nimport { resolveExpertToRun as defaultResolveExpertToRun } from \"./resolve-expert-to-run.js\"\n\nexport type ResolveExpertToRunFn = (\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: { perstackApiBaseUrl: string; perstackApiKey?: string },\n) => Promise<Expert>\n\nexport type SetupExpertsResult = {\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\nexport async function setupExperts(\n setting: RunSetting,\n resolveExpertToRun: ResolveExpertToRunFn = defaultResolveExpertToRun,\n): Promise<SetupExpertsResult> {\n const { expertKey } = setting\n const experts = { ...setting.experts }\n const clientOptions = {\n perstackApiBaseUrl: setting.perstackApiBaseUrl,\n perstackApiKey: setting.perstackApiKey,\n }\n const expertToRun = await resolveExpertToRun(expertKey, experts, clientOptions)\n for (const delegateName of expertToRun.delegates) {\n const delegate = await resolveExpertToRun(delegateName, experts, clientOptions)\n if (!delegate) {\n throw new Error(`Delegate ${delegateName} not found`)\n }\n }\n return { expertToRun, experts }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n type Checkpoint,\n createRuntimeEvent,\n type RunEvent,\n type RunParamsInput,\n type RunSetting,\n type RuntimeEvent,\n runParamsSchema,\n type Step,\n} from \"@perstack/core\"\nimport pkg from \"../package.json\" with { type: \"json\" }\nimport {\n buildDelegateToState,\n buildDelegationReturnState,\n createInitialCheckpoint,\n createNextStepCheckpoint,\n} from \"./checkpoint-helpers.js\"\nimport {\n defaultRetrieveCheckpoint,\n defaultStoreCheckpoint,\n defaultStoreEvent,\n} from \"./default-store.js\"\nimport { RunEventEmitter } from \"./events/event-emitter.js\"\nimport { executeStateMachine } from \"./execute-state-machine.js\"\nimport { getContextWindow } from \"./model.js\"\nimport {\n defaultGetRunDir,\n type FileSystem,\n type GetRunDirFn,\n storeRunSetting,\n} from \"./run-setting-store.js\"\nimport { type ResolveExpertToRunFn, setupExperts } from \"./setup-experts.js\"\nimport { getSkillManagers } from \"./skill-manager/index.js\"\n\nexport async function run(\n runInput: RunParamsInput,\n options?: {\n shouldContinueRun?: (\n setting: RunSetting,\n checkpoint: Checkpoint,\n step: Step,\n ) => Promise<boolean>\n retrieveCheckpoint?: (runId: string, checkpointId: string) => Promise<Checkpoint>\n storeCheckpoint?: (checkpoint: Checkpoint, timestamp: number) => Promise<void>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n fileSystem?: FileSystem\n getRunDir?: GetRunDirFn\n },\n): Promise<Checkpoint> {\n const runParams = runParamsSchema.parse(runInput)\n const eventListener = getEventListener(options)\n const retrieveCheckpoint = options?.retrieveCheckpoint ?? defaultRetrieveCheckpoint\n const storeCheckpoint = options?.storeCheckpoint ?? defaultStoreCheckpoint\n const eventEmitter = new RunEventEmitter()\n eventEmitter.subscribe(eventListener)\n let { setting, checkpoint } = runParams\n const contextWindow = getContextWindow(setting.providerConfig.providerName, setting.model)\n const getRunDir = options?.getRunDir ?? defaultGetRunDir\n await storeRunSetting(setting, options?.fileSystem, getRunDir)\n while (true) {\n const { expertToRun, experts } = await setupExperts(setting, options?.resolveExpertToRun)\n if (options?.eventListener) {\n const initEvent = createRuntimeEvent(\"initializeRuntime\", setting.runId, {\n runtimeVersion: pkg.version,\n expertName: expertToRun.name,\n experts: Object.keys(experts),\n model: setting.model,\n temperature: setting.temperature,\n maxSteps: setting.maxSteps,\n maxRetries: setting.maxRetries,\n timeout: setting.timeout,\n query: setting.input.text,\n interactiveToolCall: setting.input.interactiveToolCallResult,\n })\n options.eventListener(initEvent)\n }\n const skillManagers = await getSkillManagers(\n expertToRun,\n experts,\n setting,\n options?.eventListener,\n )\n const initialCheckpoint = checkpoint\n ? createNextStepCheckpoint(createId(), checkpoint)\n : createInitialCheckpoint(createId(), {\n runId: setting.runId,\n expertKey: setting.expertKey,\n expert: expertToRun,\n contextWindow,\n })\n const runResultCheckpoint = await executeStateMachine({\n setting: { ...setting, experts },\n initialCheckpoint,\n eventListener,\n skillManagers,\n eventEmitter,\n storeCheckpoint,\n shouldContinueRun: options?.shouldContinueRun,\n })\n switch (runResultCheckpoint.status) {\n case \"completed\": {\n if (runResultCheckpoint.delegatedBy) {\n const parentCheckpoint = await retrieveCheckpoint(\n setting.runId,\n runResultCheckpoint.delegatedBy.checkpointId,\n )\n const result = buildDelegationReturnState(setting, runResultCheckpoint, parentCheckpoint)\n setting = result.setting\n checkpoint = result.checkpoint\n break\n }\n return runResultCheckpoint\n }\n case \"stoppedByInteractiveTool\": {\n return runResultCheckpoint\n }\n case \"stoppedByDelegate\": {\n const result = buildDelegateToState(setting, runResultCheckpoint, expertToRun)\n setting = result.setting\n checkpoint = result.checkpoint\n break\n }\n case \"stoppedByExceededMaxSteps\": {\n return runResultCheckpoint\n }\n case \"stoppedByError\": {\n return runResultCheckpoint\n }\n default:\n throw new Error(\"Run stopped by unknown reason\")\n }\n }\n}\n\nfunction getEventListener(options?: { eventListener?: (event: RunEvent | RuntimeEvent) => void }) {\n const listener =\n options?.eventListener ?? ((e: RunEvent | RuntimeEvent) => console.log(JSON.stringify(e)))\n return async (event: RunEvent | RuntimeEvent) => {\n if (\"stepNumber\" in event) {\n await defaultStoreEvent(event)\n }\n listener(event)\n }\n}\n\nexport { defaultGetRunDir as getRunDir }\n","import pkg from \"../package.json\" with { type: \"json\" }\n\nexport * from \"./model.js\"\nexport * from \"./runtime.js\"\nexport * from \"./runtime-state-machine.js\"\nexport const runtimeVersion = pkg.version\n"]}
|
|
1
|
+
{"version":3,"sources":["../../package.json","../../src/model.ts","../../src/usage.ts","../../src/checkpoint-helpers.ts","../../src/run-setting-store.ts","../../src/default-store.ts","../../src/events/event-emitter.ts","../../src/skill-manager/base.ts","../../src/skill-manager/delegate.ts","../../src/skill-manager/interactive.ts","../../src/skill-manager/mcp.ts","../../src/skill-manager/helpers.ts","../../src/states/calling-delegate.ts","../../src/states/calling-interactive-tool.ts","../../src/states/calling-tool.ts","../../src/states/finishing-step.ts","../../src/messages/message.ts","../../src/states/generating-run-result.ts","../../src/states/generating-tool-call.ts","../../src/messages/instruction-message.ts","../../src/states/init.ts","../../src/states/preparing-for-step.ts","../../src/states/resolving-image-file.ts","../../src/states/resolving-pdf-file.ts","../../src/states/resolving-tool-result.ts","../../src/states/resolving-thought.ts","../../src/runtime-state-machine.ts","../../src/execute-state-machine.ts","../../src/resolve-expert-to-run.ts","../../src/setup-experts.ts","../../src/runtime.ts","../../src/index.ts"],"names":["tool","McpClient","createId","part","generateText","retry","dedent","path","readFile","finishToolCall","skillManagers","resolveExpertToRun","createRuntimeEvent"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"@perstack/runtime\",\n \"version\": \"0.0.54\",\n \"description\": \"Perstack Runtime\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \".\": \"./dist/src/index.js\"\n },\n \"types\": {\n \".\": \"./dist/src/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup --config ../../tsup.config.ts\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@ai-sdk/amazon-bedrock\": \"^3.0.62\",\n \"@ai-sdk/anthropic\": \"^2.0.50\",\n \"@ai-sdk/azure\": \"^2.0.77\",\n \"@ai-sdk/deepseek\": \"^1.0.16\",\n \"@ai-sdk/google\": \"^2.0.44\",\n \"@ai-sdk/google-vertex\": \"^3.0.24\",\n \"@ai-sdk/openai\": \"^2.0.75\",\n \"@modelcontextprotocol/sdk\": \"^1.23.0\",\n \"@paralleldrive/cuid2\": \"^3.0.4\",\n \"@perstack/api-client\": \"workspace:*\",\n \"@perstack/core\": \"workspace:*\",\n \"ai\": \"^5.0.104\",\n \"ollama-ai-provider-v2\": \"^1.5.5\",\n \"ts-dedent\": \"^2.2.0\",\n \"xstate\": \"^5.24.0\"\n },\n \"devDependencies\": {\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/node\": \"^24.10.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.14\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import { createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\"\nimport { createAnthropic } from \"@ai-sdk/anthropic\"\nimport { createAzure } from \"@ai-sdk/azure\"\nimport { createDeepSeek } from \"@ai-sdk/deepseek\"\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\"\nimport { createVertex } from \"@ai-sdk/google-vertex\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\nimport { knownModels, type ProviderConfig, type ProviderName, type Usage } from \"@perstack/core\"\nimport type { LanguageModel } from \"ai\"\nimport { createOllama } from \"ollama-ai-provider-v2\"\n\nexport function getModel(modelId: string, providerConfig: ProviderConfig): LanguageModel {\n switch (providerConfig.providerName) {\n case \"anthropic\": {\n const anthropic = createAnthropic({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return anthropic(modelId)\n }\n case \"google\": {\n const google = createGoogleGenerativeAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return google(modelId)\n }\n case \"openai\": {\n const openai = createOpenAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n organization: providerConfig.organization,\n project: providerConfig.project,\n name: providerConfig.name,\n headers: providerConfig.headers,\n })\n return openai(modelId)\n }\n case \"ollama\": {\n const ollama = createOllama({\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return ollama(modelId)\n }\n case \"azure-openai\": {\n const azure = createAzure({\n apiKey: providerConfig.apiKey,\n resourceName: providerConfig.resourceName,\n apiVersion: providerConfig.apiVersion,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n useDeploymentBasedUrls: providerConfig.useDeploymentBasedUrls,\n })\n return azure(modelId)\n }\n case \"amazon-bedrock\": {\n const amazonBedrock = createAmazonBedrock({\n accessKeyId: providerConfig.accessKeyId,\n secretAccessKey: providerConfig.secretAccessKey,\n region: providerConfig.region,\n sessionToken: providerConfig.sessionToken,\n })\n return amazonBedrock(modelId)\n }\n case \"google-vertex\": {\n const vertex = createVertex({\n project: providerConfig.project,\n location: providerConfig.location,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return vertex(modelId)\n }\n case \"deepseek\": {\n const deepseek = createDeepSeek({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n })\n return deepseek(modelId)\n }\n }\n}\n\nexport function getContextWindow(providerName: ProviderName, modelId: string): number | undefined {\n const modelConfig = knownModels\n .find((model) => model.provider === providerName)\n ?.models.find((model) => model.name === modelId)\n return modelConfig?.contextWindow\n}\n\nexport function calculateContextWindowUsage(usage: Usage, contextWindow: number): number {\n return (usage.inputTokens + usage.cachedInputTokens + usage.outputTokens) / contextWindow\n}\n","import type { Usage } from \"@perstack/core\"\nimport type { GenerateTextResult, ToolSet } from \"ai\"\n\nexport function createEmptyUsage(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n }\n}\n\nexport function usageFromGenerateTextResult(result: GenerateTextResult<ToolSet, never>): Usage {\n return {\n inputTokens: result.usage.inputTokens || 0,\n outputTokens: result.usage.outputTokens || 0,\n reasoningTokens: result.usage.reasoningTokens || 0,\n totalTokens: result.usage.totalTokens || 0,\n cachedInputTokens: result.usage.cachedInputTokens || 0,\n }\n}\n\nexport function sumUsage(a: Usage, b: Usage): Usage {\n return {\n inputTokens: a.inputTokens + b.inputTokens,\n outputTokens: a.outputTokens + b.outputTokens,\n reasoningTokens: a.reasoningTokens + b.reasoningTokens,\n totalTokens: a.totalTokens + b.totalTokens,\n cachedInputTokens: a.cachedInputTokens + b.cachedInputTokens,\n }\n}\n","import type { Checkpoint, Expert, RunSetting } from \"@perstack/core\"\nimport { createEmptyUsage } from \"./usage.js\"\n\nexport type CreateInitialCheckpointParams = {\n runId: string\n expertKey: string\n expert: Pick<Expert, \"name\" | \"version\">\n contextWindow: number | undefined\n}\n\nexport function createInitialCheckpoint(\n checkpointId: string,\n params: CreateInitialCheckpointParams,\n): Checkpoint {\n return {\n id: checkpointId,\n runId: params.runId,\n expert: {\n key: params.expertKey,\n name: params.expert.name,\n version: params.expert.version,\n },\n stepNumber: 1,\n status: \"init\",\n messages: [],\n usage: createEmptyUsage(),\n contextWindow: params.contextWindow,\n contextWindowUsage: params.contextWindow ? 0.0 : undefined,\n }\n}\n\nexport function createNextStepCheckpoint(checkpointId: string, checkpoint: Checkpoint): Checkpoint {\n return {\n ...checkpoint,\n id: checkpointId,\n stepNumber: checkpoint.stepNumber + 1,\n }\n}\n\nexport type DelegationStateResult = {\n setting: RunSetting\n checkpoint: Checkpoint\n}\n\nexport function buildDelegationReturnState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n const { messages, delegatedBy } = resultCheckpoint\n if (!delegatedBy) {\n throw new Error(\"delegatedBy is required for buildDelegationReturnState\")\n }\n const delegateResultMessage = messages[messages.length - 1]\n if (!delegateResultMessage || delegateResultMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n const delegateText = delegateResultMessage.contents.find((content) => content.type === \"textPart\")\n if (!delegateText) {\n throw new Error(\"Delegation error: delegation result message does not contain a text\")\n }\n const { expert, toolCallId, toolName } = delegatedBy\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n text: delegateText.text,\n },\n },\n },\n checkpoint: {\n ...parentCheckpoint,\n stepNumber: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n },\n }\n}\n\nexport function buildDelegateToState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n currentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n): DelegationStateResult {\n const { delegateTo } = resultCheckpoint\n if (!delegateTo) {\n throw new Error(\"delegateTo is required for buildDelegateToState\")\n }\n const { expert, toolCallId, toolName, query } = delegateTo\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n text: query,\n },\n },\n checkpoint: {\n ...resultCheckpoint,\n status: \"init\",\n messages: [],\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: currentExpert.key,\n name: currentExpert.name,\n version: currentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: resultCheckpoint.id,\n },\n usage: resultCheckpoint.usage,\n },\n }\n}\n","import path from \"node:path\"\nimport type { RunSetting } from \"@perstack/core\"\n\nexport type FileSystem = {\n existsSync: (path: string) => boolean\n mkdir: (path: string, options: { recursive: boolean }) => Promise<void>\n readFile: (path: string, encoding: BufferEncoding) => Promise<string>\n writeFile: (path: string, data: string, encoding: BufferEncoding) => Promise<void>\n}\n\nexport type GetRunDirFn = (runId: string) => string\n\nexport async function createDefaultFileSystem(): Promise<FileSystem> {\n const fs = await import(\"node:fs\")\n const fsPromises = await import(\"node:fs/promises\")\n return {\n existsSync: fs.existsSync,\n mkdir: async (p, options) => {\n await fsPromises.mkdir(p, options)\n },\n readFile: fsPromises.readFile,\n writeFile: fsPromises.writeFile,\n }\n}\n\nexport function defaultGetRunDir(runId: string): string {\n return `${process.cwd()}/perstack/runs/${runId}`\n}\n\nexport async function storeRunSetting(\n setting: RunSetting,\n fs?: FileSystem,\n getRunDir: GetRunDirFn = defaultGetRunDir,\n): Promise<void> {\n const fileSystem = fs ?? (await createDefaultFileSystem())\n const runDir = getRunDir(setting.runId)\n if (fileSystem.existsSync(runDir)) {\n const runSettingPath = path.resolve(runDir, \"run-setting.json\")\n const runSetting = JSON.parse(await fileSystem.readFile(runSettingPath, \"utf-8\")) as RunSetting\n runSetting.updatedAt = Date.now()\n await fileSystem.writeFile(runSettingPath, JSON.stringify(runSetting), \"utf-8\")\n } else {\n await fileSystem.mkdir(runDir, { recursive: true })\n await fileSystem.writeFile(\n path.resolve(runDir, \"run-setting.json\"),\n JSON.stringify(setting),\n \"utf-8\",\n )\n }\n}\n","import { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\"\nimport type { RunEvent } from \"@perstack/core\"\nimport { type Checkpoint, checkpointSchema } from \"@perstack/core\"\nimport { defaultGetRunDir as getRunDir } from \"./run-setting-store.js\"\n\nexport async function defaultRetrieveCheckpoint(\n runId: string,\n checkpointId: string,\n): Promise<Checkpoint> {\n const runDir = getRunDir(runId)\n const checkpointFiles = await readdir(runDir, { withFileTypes: true }).then((files) =>\n files.filter((file) => file.isFile() && file.name.startsWith(\"checkpoint-\")),\n )\n const checkpointFile = checkpointFiles.find((file) => file.name.endsWith(`-${checkpointId}.json`))\n if (!checkpointFile) {\n throw new Error(`checkpoint not found: ${runId} ${checkpointId}`)\n }\n const checkpointPath = `${runDir}/${checkpointFile.name}`\n const checkpoint = await readFile(checkpointPath, \"utf8\")\n return checkpointSchema.parse(JSON.parse(checkpoint))\n}\n\nexport async function defaultStoreCheckpoint(\n checkpoint: Checkpoint,\n timestamp: number,\n): Promise<void> {\n const { id, runId, stepNumber } = checkpoint\n const runDir = getRunDir(runId)\n const checkpointPath = `${runDir}/checkpoint-${timestamp}-${stepNumber}-${id}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(checkpointPath, JSON.stringify(checkpoint))\n}\n\nexport async function defaultStoreEvent(event: RunEvent): Promise<void> {\n const { timestamp, runId, stepNumber, type } = event\n const runDir = getRunDir(runId)\n const eventPath = `${runDir}/event-${timestamp}-${stepNumber}-${type}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(eventPath, JSON.stringify(event))\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent } from \"@perstack/core\"\n\nexport class RunEventEmitter {\n private listeners: ((event: RunEvent) => Promise<void>)[] = []\n\n subscribe(listener: (event: RunEvent) => Promise<void>) {\n this.listeners.push(listener)\n }\n\n async emit(event: RunEvent) {\n for (const listener of this.listeners) {\n await listener({\n ...event,\n id: createId(),\n timestamp: Date.now(),\n })\n }\n }\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n ToolDefinition,\n} from \"@perstack/core\"\n\nexport abstract class BaseSkillManager {\n protected _toolDefinitions: ToolDefinition[] = []\n protected _initialized = false\n protected _initializing?: Promise<void>\n abstract readonly name: string\n abstract readonly type: SkillType\n abstract readonly lazyInit: boolean\n readonly skill?: McpStdioSkill | McpSseSkill\n readonly interactiveSkill?: InteractiveSkill\n readonly expert?: Expert\n protected _runId: string\n protected _eventListener?: (event: RunEvent | RuntimeEvent) => void\n\n constructor(runId: string, eventListener?: (event: RunEvent | RuntimeEvent) => void) {\n this._runId = runId\n this._eventListener = eventListener\n }\n\n async init(): Promise<void> {\n if (this._initialized) {\n throw new Error(`Skill ${this.name} is already initialized`)\n }\n if (this._initializing) {\n throw new Error(`Skill ${this.name} is already initializing`)\n }\n const initPromise = this._performInit()\n this._initializing = initPromise\n if (!this.lazyInit) {\n try {\n await initPromise\n } catch (error) {\n this._initialized = false\n this._initializing = undefined\n throw error\n }\n }\n }\n\n isInitialized(): boolean {\n return this._initialized\n }\n\n protected async _performInit(): Promise<void> {\n await this._doInit()\n this._initialized = true\n this._initializing = undefined\n }\n\n protected abstract _doInit(): Promise<void>\n\n abstract close(): Promise<void>\n\n async getToolDefinitions(): Promise<ToolDefinition[]> {\n if (!this.isInitialized() && !this.lazyInit) {\n throw new Error(`Skill ${this.name} is not initialized`)\n }\n if (!this.isInitialized() && this.lazyInit) {\n return []\n }\n return this._filterTools(this._toolDefinitions)\n }\n\n protected _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n return tools\n }\n\n abstract callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>>\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class DelegateSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"delegate\"\n readonly lazyInit = false\n override readonly expert: Expert\n\n constructor(\n expert: Expert,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(runId, eventListener)\n this.name = expert.name\n this.expert = expert\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = [\n {\n skillName: this.expert.name,\n name: this.expert.name.split(\"/\").pop() ?? this.expert.name,\n description: this.expert.description,\n inputSchema: {\n type: \"object\",\n properties: { query: { type: \"string\" } },\n required: [\"query\"],\n },\n interactive: false,\n },\n ]\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","import type {\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class InteractiveSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"interactive\"\n readonly lazyInit = false\n override readonly interactiveSkill: InteractiveSkill\n\n constructor(\n interactiveSkill: InteractiveSkill,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(runId, eventListener)\n this.name = interactiveSkill.name\n this.interactiveSkill = interactiveSkill\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = Object.values(this.interactiveSkill.tools).map((tool) => ({\n skillName: this.interactiveSkill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n interactive: true,\n }))\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","import { Client as McpClient } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\"\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { type CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport type {\n CallToolResultContent,\n FileInlinePart,\n ImageInlinePart,\n McpSseSkill,\n McpStdioSkill,\n Resource,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n ToolDefinition,\n} from \"@perstack/core\"\nimport { createRuntimeEvent } from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class McpSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"mcp\"\n readonly lazyInit: boolean\n override readonly skill: McpStdioSkill | McpSseSkill\n private _mcpClient?: McpClient\n private _env: Record<string, string>\n\n constructor(\n skill: McpStdioSkill | McpSseSkill,\n env: Record<string, string>,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(runId, eventListener)\n this.name = skill.name\n this.skill = skill\n this._env = env\n this.lazyInit =\n skill.type === \"mcpStdioSkill\" && skill.lazyInit && skill.name !== \"@perstack/base\"\n }\n\n protected override async _doInit(): Promise<void> {\n this._mcpClient = new McpClient({\n name: `${this.skill.name}-mcp-client`,\n version: \"1.0.0\",\n })\n if (this.skill.type === \"mcpStdioSkill\") {\n await this._initStdio(this.skill)\n } else {\n await this._initSse(this.skill)\n }\n const { tools } = await this._mcpClient.listTools()\n this._toolDefinitions = tools.map((tool) => ({\n skillName: this.skill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n interactive: false,\n }))\n }\n\n private async _initStdio(skill: McpStdioSkill): Promise<void> {\n if (!skill.command) {\n throw new Error(`Skill ${skill.name} has no command`)\n }\n const env: Record<string, string> = {}\n for (const envName of skill.requiredEnv) {\n if (!this._env[envName]) {\n throw new Error(`Skill ${skill.name} requires environment variable ${envName}`)\n }\n env[envName] = this._env[envName]\n }\n const { command, args } = this._getCommandArgs(skill)\n const transport = new StdioClientTransport({ command, args, env, stderr: \"ignore\" })\n await this._mcpClient!.connect(transport)\n if (this._eventListener) {\n const serverInfo = this._mcpClient!.getServerVersion()\n const event = createRuntimeEvent(\"skillConnected\", this._runId, {\n skillName: skill.name,\n serverInfo: serverInfo ? { name: serverInfo.name, version: serverInfo.version } : undefined,\n })\n this._eventListener(event)\n }\n }\n\n private async _initSse(skill: McpSseSkill): Promise<void> {\n if (!skill.endpoint) {\n throw new Error(`Skill ${skill.name} has no endpoint`)\n }\n const transport = new SSEClientTransport(new URL(skill.endpoint))\n await this._mcpClient!.connect(transport)\n }\n\n private _getCommandArgs(skill: McpStdioSkill): { command: string; args: string[] } {\n const { name, command, packageName, args } = skill\n if (!packageName && (!args || args.length === 0)) {\n throw new Error(`Skill ${name} has no packageName or args. Please provide one of them.`)\n }\n if (packageName && args && args.length > 0) {\n throw new Error(\n `Skill ${name} has both packageName and args. Please provide only one of them.`,\n )\n }\n let newArgs = args && args.length > 0 ? args : [packageName!]\n if (command === \"npx\" && !newArgs.includes(\"-y\")) {\n newArgs = [\"-y\", ...newArgs]\n }\n return { command, args: newArgs }\n }\n\n override async close(): Promise<void> {\n if (this._mcpClient) {\n await this._mcpClient.close()\n if (this._eventListener && this.skill) {\n const event = createRuntimeEvent(\"skillDisconnected\", this._runId, {\n skillName: this.skill.name,\n })\n this._eventListener(event)\n }\n }\n }\n\n protected override _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n const omit = this.skill.omit ?? []\n const pick = this.skill.pick ?? []\n return tools\n .filter((tool) => (omit.length > 0 ? !omit.includes(tool.name) : true))\n .filter((tool) => (pick.length > 0 ? pick.includes(tool.name) : true))\n }\n\n override async callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n if (!this.isInitialized() || !this._mcpClient) {\n throw new Error(`${this.name} is not initialized`)\n }\n try {\n const result = (await this._mcpClient.callTool({\n name: toolName,\n arguments: input,\n })) as CallToolResult\n return this._convertToolResult(result, toolName, input)\n } catch (error) {\n return this._handleToolError(error, toolName)\n }\n }\n\n private _handleToolError(error: unknown, toolName: string): Array<TextPart> {\n if (error instanceof McpError) {\n return [\n {\n type: \"textPart\",\n text: `Error calling tool ${toolName}: ${error.message}`,\n id: createId(),\n },\n ]\n }\n throw error\n }\n\n private _convertToolResult(\n result: CallToolResult,\n toolName: string,\n input: Record<string, unknown>,\n ): Array<TextPart | ImageInlinePart | FileInlinePart> {\n if (!result.content || result.content.length === 0) {\n return [\n {\n type: \"textPart\",\n text: `Tool ${toolName} returned nothing with arguments: ${JSON.stringify(input)}`,\n id: createId(),\n },\n ]\n }\n return result.content\n .filter((part) => part.type !== \"audio\" && part.type !== \"resource_link\")\n .map((part) => this._convertPart(part as CallToolResultContent))\n }\n\n private _convertPart(part: CallToolResultContent): TextPart | ImageInlinePart | FileInlinePart {\n switch (part.type) {\n case \"text\":\n if (!part.text || part.text === \"\") {\n return { type: \"textPart\", text: \"Error: No content\", id: createId() }\n }\n return { type: \"textPart\", text: part.text, id: createId() }\n case \"image\":\n if (!part.data || !part.mimeType) {\n throw new Error(\"Image part must have both data and mimeType\")\n }\n return {\n type: \"imageInlinePart\",\n encodedData: part.data,\n mimeType: part.mimeType,\n id: createId(),\n }\n case \"resource\":\n if (!part.resource) {\n throw new Error(\"Resource part must have resource content\")\n }\n return this._convertResource(part.resource)\n }\n }\n\n private _convertResource(resource: Resource): TextPart | FileInlinePart {\n if (!resource.mimeType) {\n throw new Error(`Resource ${JSON.stringify(resource)} has no mimeType`)\n }\n if (resource.text && typeof resource.text === \"string\") {\n return { type: \"textPart\", text: resource.text, id: createId() }\n }\n if (resource.blob && typeof resource.blob === \"string\") {\n return {\n type: \"fileInlinePart\",\n encodedData: resource.blob,\n mimeType: resource.mimeType,\n id: createId(),\n }\n }\n throw new Error(`Unsupported resource type: ${JSON.stringify(resource)}`)\n }\n}\n","import type { Expert, RunEvent, RunSetting, RuntimeEvent } from \"@perstack/core\"\nimport { jsonSchema, type ToolSet, tool } from \"ai\"\nimport type { BaseSkillManager } from \"./base.js\"\nimport { DelegateSkillManager } from \"./delegate.js\"\nimport { InteractiveSkillManager } from \"./interactive.js\"\nimport { McpSkillManager } from \"./mcp.js\"\n\nasync function initSkillManagersWithCleanup(\n managers: BaseSkillManager[],\n allManagers: BaseSkillManager[],\n): Promise<void> {\n const results = await Promise.allSettled(managers.map((m) => m.init()))\n const firstRejected = results.find((r) => r.status === \"rejected\")\n if (firstRejected) {\n await Promise.all(allManagers.map((m) => m.close().catch(() => {})))\n throw (firstRejected as PromiseRejectedResult).reason\n }\n}\n\nexport async function getSkillManagers(\n expert: Expert,\n experts: Record<string, Expert>,\n setting: RunSetting,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n): Promise<Record<string, BaseSkillManager>> {\n const { perstackBaseSkillCommand, env, runId } = setting\n const { skills } = expert\n if (!skills[\"@perstack/base\"]) {\n throw new Error(\"Base skill is not defined\")\n }\n const allManagers: BaseSkillManager[] = []\n const mcpSkills = Object.values(skills).filter(\n (skill) => skill.type === \"mcpStdioSkill\" || skill.type === \"mcpSseSkill\",\n )\n for (const skill of mcpSkills) {\n if (perstackBaseSkillCommand && skill.type === \"mcpStdioSkill\") {\n const matchesBaseByPackage = skill.command === \"npx\" && skill.packageName === \"@perstack/base\"\n const matchesBaseByArgs =\n skill.command === \"npx\" &&\n Array.isArray(skill.args) &&\n skill.args.includes(\"@perstack/base\")\n if (matchesBaseByPackage || matchesBaseByArgs) {\n const [overrideCommand, ...overrideArgs] = perstackBaseSkillCommand\n if (!overrideCommand) {\n throw new Error(\"perstackBaseSkillCommand must have at least one element\")\n }\n skill.command = overrideCommand\n skill.packageName = undefined\n skill.args = overrideArgs\n skill.lazyInit = false\n }\n }\n }\n const mcpSkillManagers = mcpSkills.map((skill) => {\n const manager = new McpSkillManager(skill, env, runId, eventListener)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(mcpSkillManagers, allManagers)\n const interactiveSkills = Object.values(skills).filter(\n (skill) => skill.type === \"interactiveSkill\",\n )\n const interactiveSkillManagers = interactiveSkills.map((interactiveSkill) => {\n const manager = new InteractiveSkillManager(interactiveSkill, runId, eventListener)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(interactiveSkillManagers, allManagers)\n const delegateSkillManagers = expert.delegates.map((delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n const manager = new DelegateSkillManager(delegate, runId, eventListener)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(delegateSkillManagers, allManagers)\n const skillManagers: Record<string, BaseSkillManager> = {}\n for (const manager of allManagers) {\n skillManagers[manager.name] = manager\n }\n return skillManagers\n}\n\nexport async function closeSkillManagers(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<void> {\n await Promise.all(Object.values(skillManagers).map((m) => m.close().catch(() => {})))\n}\n\nexport async function getSkillManagerByToolName(\n skillManagers: Record<string, BaseSkillManager>,\n toolName: string,\n): Promise<BaseSkillManager> {\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n if (toolDefinition.name === toolName) {\n return skillManager\n }\n }\n }\n throw new Error(`Tool ${toolName} not found`)\n}\n\nexport async function getToolSet(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ToolSet> {\n const tools: ToolSet = {}\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n tools[toolDefinition.name] = tool({\n description: toolDefinition.description,\n inputSchema: jsonSchema(toolDefinition.inputSchema),\n })\n }\n }\n return tools\n}\n","import { type RunEvent, stopRunByDelegate } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/index.js\"\n\nexport async function callingDelegateLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (!skillManager.expert) {\n throw new Error(`Delegation error: skill manager \"${toolName}\" not found`)\n }\n if (!args || !args.query || typeof args.query !== \"string\") {\n throw new Error(\"Delegation error: query is undefined\")\n }\n return stopRunByDelegate(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByDelegate\",\n delegateTo: {\n expert: {\n key: skillManager.expert.key,\n name: skillManager.expert.name,\n version: skillManager.expert.version,\n },\n toolCallId: id,\n toolName,\n query: args.query,\n },\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import { type RunEvent, stopRunByInteractiveTool } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function callingInteractiveToolLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return stopRunByInteractiveTool(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByInteractiveTool\",\n },\n step: {\n ...step,\n finishedAt: new Date().getTime(),\n },\n })\n}\n","import {\n attemptCompletion,\n type RunEvent,\n resolveImageFile,\n resolvePdfFile,\n resolveThought,\n resolveToolResult,\n type ToolResult,\n} from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/index.js\"\n\nexport async function callingToolLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, skillName, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (skillManager.type !== \"mcp\") {\n throw new Error(`Incorrect SkillType, required MCP, got ${skillManager.type}`)\n }\n const result = await skillManager.callTool(toolName, args)\n const toolResult: ToolResult = { id, skillName, toolName, result }\n if (skillName === \"@perstack/base\") {\n if (toolName === \"think\") {\n return resolveThought(setting, checkpoint, { toolResult })\n }\n if (toolName === \"attemptCompletion\") {\n return attemptCompletion(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readPdfFile\") {\n return resolvePdfFile(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readImageFile\") {\n return resolveImageFile(setting, checkpoint, { toolResult })\n }\n }\n return resolveToolResult(setting, checkpoint, { toolResult })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { continueToNextStep, type RunEvent, stopRunByExceededMaxSteps } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function finishingStepLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (setting.maxSteps !== undefined && checkpoint.stepNumber >= setting.maxSteps) {\n return stopRunByExceededMaxSteps(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByExceededMaxSteps\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n }\n return continueToNextStep(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n nextCheckpoint: {\n ...checkpoint,\n id: createId(),\n stepNumber: checkpoint.stepNumber + 1,\n },\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n ExpertMessage,\n FileBinaryPart,\n FileInlinePart,\n FileUrlPart,\n ImageBinaryPart,\n ImageInlinePart,\n ImageUrlPart,\n InstructionMessage,\n Message,\n TextPart,\n ToolCallPart,\n ToolMessage,\n ToolResultPart,\n UserMessage,\n} from \"@perstack/core\"\nimport type {\n AssistantModelMessage,\n FilePart as FileModelPart,\n ImagePart as ImageModelPart,\n ModelMessage,\n SystemModelMessage,\n TextPart as TextModelPart,\n ToolCallPart as ToolCallModelPart,\n ToolModelMessage,\n ToolResultPart as ToolResultModelPart,\n UserModelMessage,\n} from \"ai\"\nimport { dedent } from \"ts-dedent\"\n\nexport function createUserMessage(\n contents: Array<\n | Omit<TextPart, \"id\">\n | Omit<ImageUrlPart, \"id\">\n | Omit<ImageInlinePart, \"id\">\n | Omit<ImageBinaryPart, \"id\">\n | Omit<FileUrlPart, \"id\">\n | Omit<FileInlinePart, \"id\">\n | Omit<FileBinaryPart, \"id\">\n >,\n): UserMessage {\n return {\n type: \"userMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createExpertMessage(\n contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">>,\n): ExpertMessage {\n return {\n type: \"expertMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createToolMessage(\n contents: Array<\n Omit<ToolResultPart, \"id\" | \"contents\"> & {\n contents: Array<Omit<TextPart, \"id\"> | Omit<ImageInlinePart, \"id\">>\n }\n >,\n): ToolMessage {\n return {\n type: \"toolMessage\",\n contents: contents.map((part) => ({\n ...part,\n contents: part.contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function messageToCoreMessage(message: Message): ModelMessage {\n switch (message.type) {\n case \"instructionMessage\":\n return {\n role: \"system\",\n content: instructionContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"userMessage\":\n return {\n role: \"user\",\n content: userContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"expertMessage\":\n return {\n role: \"assistant\",\n content: expertContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"toolMessage\":\n return {\n role: \"tool\",\n content: toolContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n }\n}\nfunction instructionContentsToCoreContent(\n contents: InstructionMessage[\"contents\"],\n): SystemModelMessage[\"content\"] {\n return contents.reduce((acc, part) => {\n return dedent`\n ${acc}\n ${part.text}\n `.trim()\n }, \"\" as string)\n}\nfunction userContentsToCoreContent(contents: UserMessage[\"contents\"]): UserModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"imageUrlPart\":\n return imageUrlPartToCoreImagePart(part)\n case \"imageInlinePart\":\n return imageInlinePartToCoreImagePart(part)\n case \"imageBinaryPart\":\n return imageBinaryPartToCoreImagePart(part)\n case \"fileUrlPart\":\n return fileUrlPartToCoreFilePart(part)\n case \"fileInlinePart\":\n return fileInlinePartToCoreFilePart(part)\n case \"fileBinaryPart\":\n return fileBinaryPartToCoreFilePart(part)\n }\n })\n}\nfunction expertContentsToCoreContent(\n contents: ExpertMessage[\"contents\"],\n): AssistantModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"toolCallPart\":\n return toolCallPartToCoreToolCallPart(part)\n }\n })\n}\nfunction toolContentsToCoreContent(contents: ToolMessage[\"contents\"]): ToolModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"toolResultPart\":\n return toolResultPartToCoreToolResultPart(part)\n }\n })\n}\nfunction textPartToCoreTextPart(part: TextPart): TextModelPart {\n return {\n type: \"text\",\n text: part.text,\n }\n}\nfunction imageUrlPartToCoreImagePart(part: ImageUrlPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction imageInlinePartToCoreImagePart(part: ImageInlinePart): ImageModelPart {\n return {\n type: \"image\",\n image: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction imageBinaryPartToCoreImagePart(part: ImageBinaryPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction fileUrlPartToCoreFilePart(part: FileUrlPart): FileModelPart {\n return {\n type: \"file\",\n data: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction fileInlinePartToCoreFilePart(part: FileInlinePart): FileModelPart {\n return {\n type: \"file\",\n data: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction fileBinaryPartToCoreFilePart(part: FileBinaryPart): FileModelPart {\n return {\n type: \"file\",\n data: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction toolCallPartToCoreToolCallPart(part: ToolCallPart): ToolCallModelPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.args,\n }\n}\nfunction toolResultPartToCoreToolResultPart(part: ToolResultPart): ToolResultModelPart {\n const { contents } = part\n if (contents.length === 1 && contents[0].type === \"textPart\") {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"text\" as const, value: contents[0].text },\n }\n }\n const contentValue = contents.map((content) =>\n content.type === \"textPart\"\n ? { type: \"text\" as const, text: content.text }\n : { type: \"media\" as const, data: content.encodedData, mediaType: content.mimeType },\n )\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"content\" as const, value: contentValue },\n }\n}\n","import { type RunEvent, completeRun, retry } from \"@perstack/core\"\nimport { type GenerateTextResult, type ToolSet, generateText } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { calculateContextWindowUsage, getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { createEmptyUsage, sumUsage, usageFromGenerateTextResult } from \"../usage.js\"\n\nexport async function generatingRunResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const toolMessage = createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ])\n const model = getModel(setting.model, setting.providerConfig)\n const { messages } = checkpoint\n let generationResult: GenerateTextResult<ToolSet, never>\n try {\n generationResult = await generateText({\n model,\n messages: [...messages, toolMessage].map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [toolMessage, createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(generationResult)\n const { text } = generationResult\n const newMessages = [toolMessage, createExpertMessage(text ? [{ type: \"textPart\", text }] : [])]\n return completeRun(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n messages: [...messages, ...newMessages],\n usage: sumUsage(checkpoint.usage, usage),\n contextWindowUsage: checkpoint.contextWindow\n ? calculateContextWindowUsage(usage, checkpoint.contextWindow)\n : undefined,\n status: \"completed\",\n },\n step: {\n ...step,\n newMessages: [...step.newMessages, ...newMessages],\n finishedAt: new Date().getTime(),\n usage: sumUsage(step.usage, usage),\n },\n text,\n usage,\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n callDelegate,\n callInteractiveTool,\n callTool,\n type RunEvent,\n retry,\n type TextPart,\n type ToolCallPart,\n} from \"@perstack/core\"\nimport { type GenerateTextResult, generateText, type ToolSet } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { getSkillManagerByToolName, getToolSet } from \"../skill-manager/index.js\"\nimport { createEmptyUsage, usageFromGenerateTextResult } from \"../usage.js\"\n\nexport async function generatingToolCallLogic({\n setting,\n checkpoint,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { messages } = checkpoint\n const model = getModel(setting.model, setting.providerConfig)\n let result: GenerateTextResult<ToolSet, never>\n try {\n result = await generateText({\n model,\n messages: messages.map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n tools: await getToolSet(skillManagers),\n toolChoice: \"required\",\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(result)\n const { text, toolCalls, finishReason } = result\n const toolCall = toolCalls[0]\n if (!toolCall) {\n const reason = JSON.stringify({\n error: \"Error: No tool call generated\",\n message: \"You must generate a tool call. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage,\n })\n }\n const contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">> = [\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.input,\n },\n ]\n if (text) {\n contents.push({\n type: \"textPart\",\n text,\n })\n }\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n const eventPayload = {\n newMessage: createExpertMessage(contents),\n toolCall: {\n id: toolCall.toolCallId,\n skillName: skillManager.name,\n toolName: toolCall.toolName,\n args: toolCall.input,\n },\n usage,\n }\n if (finishReason === \"tool-calls\" || finishReason === \"stop\") {\n switch (skillManager.type) {\n case \"mcp\":\n return callTool(setting, checkpoint, eventPayload)\n case \"interactive\":\n return callInteractiveTool(setting, checkpoint, eventPayload)\n case \"delegate\":\n return callDelegate(setting, checkpoint, eventPayload)\n }\n }\n if (finishReason === \"length\") {\n const reason = JSON.stringify({\n error: \"Error: Tool call generation failed\",\n message: \"Generation length exceeded. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [\n createExpertMessage([\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.input,\n },\n ]),\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n contents: [{ type: \"textPart\", text: reason }],\n },\n ]),\n ],\n toolCall: eventPayload.toolCall,\n toolResult: {\n id: toolCall.toolCallId,\n skillName: skillManager.name,\n toolName: toolCall.toolName,\n result: [{ type: \"textPart\", id: createId(), text: reason }],\n },\n usage,\n })\n }\n throw new Error(`Unexpected finish reason: ${finishReason}`)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Expert, InstructionMessage } from \"@perstack/core\"\nimport { dedent } from \"ts-dedent\"\n\nconst metaInstruction = dedent`\n IMPORTANT:\n Based on the user's initial message, you must determine what needs to be done.\n You must iterate through hypothesis and verification to fulfill the task.\n YOU MUST CONTINUE TO CALL TOOLS UNTIL THE TASK IS COMPLETE.\n If you do not call tools, the task will be considered complete, and the agent loop will end.\n\n You operate in an agent loop, iteratively completing tasks through these steps:\n 1. Analyze Events: Understand user needs and current state through the event stream, focusing on the latest user messages and execution results\n 2. Select Tools: Choose the next tool call based on current state, task planning, relevant knowledge, and available data APIs\n 3. Wait for Execution: The selected tool action will be executed by the sandbox environment with new observations added to the event stream\n 4. Iterate: Choose only one tool call per iteration, patiently repeat the above steps until task completion\n 5. Notify Task Completion: Call the attemptCompletion tool to inform the user when the task is complete\n 6. Generate Final Results: Produce a final result that clearly describes each task you performed, step by step\n\n Conditions for ending the agent loop:\n If any of the following apply, **immediately call the attemptCompletion tool**.\n When the agent loop must end, calling any tool other than attemptCompletion is highly dangerous.\n Under all circumstances, strictly follow this rule.\n - When the task is complete\n - When the user's request is outside your expertise\n - When the user's request is unintelligible\n\n Rules for requests outside your area of expertise:\n - Tell your area of expertise to the user in final results\n\n Environment information:\n - Current time is ${new Date().toISOString()}\n - Current working directory is ${process.cwd()}\n`\n\nexport function createInstructionMessage(\n expert: Expert,\n experts: Record<string, Expert>,\n): InstructionMessage {\n const instruction = dedent`\n You are Perstack, an AI expert that tackles tasks requested by users by utilizing all available tools.\n\n (The following information describes your nature and role as an AI, the mechanisms of the AI system, and other meta-cognitive aspects.)\n\n ${metaInstruction}\n\n ---\n (The following describes the objective, steps, rules, etc. regarding your expert task.)\n\n ${expert.instruction}\n\n ---\n (The following is an overview of each skill and the rules for calling tools.)\n\n ${getSkillRules(expert)}\n\n ---\n (The following is an overview of each delegate expert and the rules for calling tools.)\n\n You can delegate tasks to the following experts by calling delegate expert name as a tool:\n\n ${getDelegateRules(expert, experts)}\n `\n return {\n type: \"instructionMessage\",\n contents: [\n {\n id: createId(),\n type: \"textPart\",\n text: instruction,\n },\n ],\n id: createId(),\n cache: true,\n }\n}\n\nfunction getSkillRules(expert: Expert): string {\n return Object.values(expert.skills).reduce((acc, skill) => {\n if (!skill.rule) {\n return acc\n }\n return dedent`\n ${acc}\n\n \"${skill.name}\" skill rules:\n ${skill.rule}\n `.trim()\n }, \"\" as string)\n}\n\nfunction getDelegateRules(expert: Expert, experts: Record<string, Expert>): string {\n return expert.delegates.reduce((acc, delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n if (!delegate) {\n return acc\n }\n return dedent`\n ${acc}\n\n About \"${delegate.name}\":\n ${delegate.description}\n `.trim()\n }, \"\" as string)\n}\n","import { type RunEvent, startRun } from \"@perstack/core\"\nimport { createInstructionMessage } from \"../messages/instruction-message.js\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function initLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { expertKey, experts } = setting\n const expert = experts[expertKey]\n switch (checkpoint.status) {\n case \"init\": {\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createInstructionMessage(expert, experts),\n createUserMessage([{ type: \"textPart\", text: setting.input.text }]),\n ],\n })\n }\n case \"stoppedByDelegate\":\n case \"stoppedByInteractiveTool\": {\n if (!setting.input.interactiveToolCallResult) {\n throw new Error(\"Interactive tool call result is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: setting.input.interactiveToolCallResult.toolCallId,\n toolName: setting.input.interactiveToolCallResult.toolName,\n contents: [{ type: \"textPart\", text: setting.input.interactiveToolCallResult.text }],\n },\n ]),\n ],\n })\n }\n default:\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [createUserMessage([{ type: \"textPart\", text: setting.input.text }])],\n })\n }\n}\n","import { type RunEvent, startGeneration } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function preparingForStepLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // TODO: add logic to count tokens and check if it's exceeded the limit\n return startGeneration(setting, checkpoint, {\n messages: checkpoint.messages,\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { type ImageInlinePart, type RunEvent, type TextPart, finishToolCall } from \"@perstack/core\"\nimport { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\ntype ReadImageFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingImageFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<ImageInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let imageInfo: ReadImageFileResult | undefined\n try {\n imageInfo = JSON.parse(textPart.text) as ReadImageFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = imageInfo\n try {\n const buffer = await readFile(path)\n files.push({\n type: \"imageInlinePart\",\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n } catch (error) {\n files.push({\n type: \"textPart\",\n text: `Failed to read image file \"${path}\": ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: files,\n },\n ]),\n ],\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { type FileInlinePart, type RunEvent, type TextPart, finishToolCall } from \"@perstack/core\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\ntype ReadPdfFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingPdfFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<FileInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let pdfInfo: ReadPdfFileResult | undefined\n try {\n pdfInfo = JSON.parse(textPart.text) as ReadPdfFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = pdfInfo\n try {\n const buffer = await readFile(path)\n files.push({\n type: \"fileInlinePart\",\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n } catch (error) {\n files.push({\n type: \"textPart\",\n text: `Failed to read PDF file \"${path}\": ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: [\n {\n type: \"textPart\",\n text: \"User uploads PDF file as follows.\",\n },\n ],\n },\n ]),\n createUserMessage(files),\n ],\n })\n}\n","import { type RunEvent, finishToolCall } from \"@perstack/core\"\nimport { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\n\nexport async function resolvingToolResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCall || !step.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ]),\n ],\n })\n}\n","import type { RunEvent } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { resolvingToolResultLogic } from \"./resolving-tool-result.js\"\n\nexport async function resolvingThoughtLogic(context: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return resolvingToolResultLogic(context)\n}\n","import type { Checkpoint, RunEvent, RunSetting, Step } from \"@perstack/core\"\nimport { type ActorRefFrom, assign, type SnapshotFrom, setup } from \"xstate\"\nimport { calculateContextWindowUsage } from \"./model.js\"\nimport type { BaseSkillManager } from \"./skill-manager/index.js\"\nimport { callingDelegateLogic } from \"./states/calling-delegate.js\"\nimport { callingInteractiveToolLogic } from \"./states/calling-interactive-tool.js\"\nimport { callingToolLogic } from \"./states/calling-tool.js\"\nimport { finishingStepLogic } from \"./states/finishing-step.js\"\nimport { generatingRunResultLogic } from \"./states/generating-run-result.js\"\nimport { generatingToolCallLogic } from \"./states/generating-tool-call.js\"\nimport { initLogic } from \"./states/init.js\"\nimport { preparingForStepLogic } from \"./states/preparing-for-step.js\"\nimport { resolvingImageFileLogic } from \"./states/resolving-image-file.js\"\nimport { resolvingPdfFileLogic } from \"./states/resolving-pdf-file.js\"\nimport { resolvingThoughtLogic } from \"./states/resolving-thought.js\"\nimport { resolvingToolResultLogic } from \"./states/resolving-tool-result.js\"\nimport { createEmptyUsage, sumUsage } from \"./usage.js\"\n\nexport const runtimeStateMachine = setup({\n types: {\n input: {} as {\n setting: RunSetting\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n context: {} as {\n setting: RunSetting\n step: Step\n checkpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n events: {} as RunEvent,\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QCUCuA7AdASXQSwBcBiWAgQwCcC10BtABgF1FQAHAe1kL3fRZAAeiAKz0AzJgDsAJgAsksZNlixs+gDZZAGhABPRIszCAjGIAcY4crPHhJyQF8HOmpgAKFMK0p50UAGLsFADKBF4k5FQA4mDoYBRkBDx0TPwcXEm8-EIIZmaymPRK8saSopL00tI6+gjq9JjSltLG9HnqZkqdTi4YmDFxCUl+ACrs7AA2AMJkExNEngQUugzMSCDp3FnrOcam0pgAnHbS9GeSZsIq6jWIh2KHUsYd9MbSwl2S6j0grgPxiV8UDGkxmcyIAGNZhMQRNVmlOFs+DtEPt1Jg3odpGVbFcrLcENIzOjbGYipIZMpnmYfn9YgDhsDxtNoZDobgwgkIUkAG5gWHw9abTLI0C7ImSTDqYTY2S45TCCwE54HUr1WRXSqHcRVWl9f5DIGwsHzKFzAAiYAmYCgiTAgrYiJF2VRYnoj1ehwskkOZTEz2EBMMJnMFnezxUF2+zl+fRNRuZCzgkz5sOQcFQEwIDo2TuSLoQpWJUvowl9Flk0sqBLlZik2Mkpjyan90d6WHjo0TnlgKf5AAt2KgoP3s6khXntmLUT6JL6PkoFJX1MZtHoRKIpdrK3sqorpG3Yx3oQnJknexM+W4IAAzfx4a054X5lGFn2PMTYlSyWQH32WAl1DKKV1Q6L1V1EWQ9WPOZT3mHs+2wABbMgYHvR9x0dDIX2nN8zEeOVjGORsmgsMQCTJYRMGJORwP9MwDxpGNXE7Jkz0SMIkNYAgpnYLjrRFJ9J1FQQZzJTBPxUfDDjlN1OgJIkSUVUtDlXCpsUPVx0wvHk4O0zNiBvXw8FgftjWhITsKnUTCU-SU92JMlfSaGtjDrGQKSbfJxGeaDMG0lMjUHYdRyIIz8FM8y5kspECyabFGneRz3RkN011qOwGnUbcVzeJKDz8gLLyBa87wfMAwuMyLmRNGLnVfeL7KSl5nPI9c6mA9RQPwmwNVLQrk2KvxkNQsB0Iq8KTLMmqLMw3MrJEnJGsSxUWtSgkfSU-JDmIqNKj8g1AT8Gh9KzSE+NYASwBoOqcJs+K61sDo5SKBifwU4tSRUtTKi+KDmLjE9hvQTkyG5PBU0TUh2FYGgACFdA5AFwchyZbus3YyklYRst-DUlDEaU2tqFUMS+NyPmlPZDiAvzWMta1bTCCIYfh3QGZtO10cWmcLiOQnG3qHHiSDbGvM-Ex1EjYk-PvCL+yBUJwghXhhlQfl2AAOTAAQCCV1hubiqxjCMRUZXMGSvVUZV6A1LcuorDp8I0WWqoVvx9ZZ2GMARgBRAQITASBIAAWTIAR9dgQ2Gs0Ki8nyK4bCuDVRZNzRwxse4GK6pwY3QdgIDgfgaARBaCxUBosU0cw5TLUiCQAWlkR4nPdbVCeyld-vbHB8AIUvYtfRQ6yr6xa6xcwCTLaiadj1dKxk1phD8jwvB8PxAhCMJWAH+rcKAyuyVaa5Wi+KeW9njV59xpeDvpQ0u1BaFd7u3Y2keDpO7LW2FDLc+Z6AnsPEO4ZYAxghMOCL8MaojsJKYi8cHZ5C9EGNoRg1CdH3GcZeYD-KDV0o-CYp1+4TjLg1cQkp-SfjDE9Ew1R2o-hNnsUs1MfR-UuANHSQUhwjmIVhQeuFTg-ilF8GUblTgKDoRlBQhQJEaiJMnfCHDAp+FKuNKBPNCSlgaOIeQttWxS0DO1bKdY9HvH9D+FotMcFFXwVAEaaFyrqLirbBo1M7KvFUDJCiRJGgalUM3LEMk5R30GEdKAJ0MxZicWQlQEklAyillWVoZgUF1isG0MoDEsF0yBnYkGyNeQa0mNE3CtgiIYnEEBToFwvS+mVPkU20l8JWG1OIHJsE-AcyZmAEpNlbBqEwLo7yVRbY3HatPfCXUOgfCsGSTQmk+hyymorbevSloykeFYCkrxfqrmJiIaRRQ7JbP8Q8PyoQYasEgGsxA2JWiNB-jjdQTRqb1IkP6OwRF8KMSAbnBwQA */\n id: \"Run\",\n initial: \"Init\",\n context: ({ input }) => ({\n setting: input.setting,\n checkpoint: input.initialCheckpoint,\n step: {\n stepNumber: input.initialCheckpoint.stepNumber,\n inputMessages: [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: Date.now(),\n },\n eventListener: input.eventListener,\n skillManagers: input.skillManagers,\n }),\n states: {\n Init: {\n on: {\n startRun: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n status: \"proceeding\",\n messages: [...context.checkpoint.messages, ...event.inputMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n inputMessages: event.inputMessages,\n }) satisfies Step,\n }),\n },\n },\n },\n\n PreparingForStep: {\n on: {\n startGeneration: {\n target: \"GeneratingToolCall\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: context.step.inputMessages ?? [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: event.timestamp,\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingToolCall: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCall: event.toolCall,\n toolResult: event.toolResult,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callTool: {\n target: \"CallingTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callInteractiveTool: {\n target: \"CallingInteractiveTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callDelegate: {\n target: \"CallingDelegate\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n },\n },\n\n CallingTool: {\n on: {\n resolveToolResult: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveThought: {\n target: \"ResolvingThought\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolvePdfFile: {\n target: \"ResolvingPdfFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveImageFile: {\n target: \"ResolvingImageFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n attemptCompletion: {\n target: \"GeneratingRunResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingToolResult: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingThought: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingPdfFile: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingImageFile: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingRunResult: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCall: event.toolCall,\n toolResult: event.toolResult,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingInteractiveTool: {\n on: {\n stopRunByInteractiveTool: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingDelegate: {\n on: {\n stopRunByDelegate: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n FinishingStep: {\n on: {\n continueToNextStep: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ event }) => event.nextCheckpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n reenter: true,\n },\n stopRunByExceededMaxSteps: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n Stopped: {\n type: \"final\",\n },\n },\n})\n\nexport const StateMachineLogics: Record<\n Exclude<RunSnapshot[\"value\"], \"Stopped\">,\n (context: RunSnapshot[\"context\"]) => Promise<RunEvent>\n> = {\n Init: initLogic,\n PreparingForStep: preparingForStepLogic,\n GeneratingToolCall: generatingToolCallLogic,\n CallingTool: callingToolLogic,\n ResolvingToolResult: resolvingToolResultLogic,\n ResolvingThought: resolvingThoughtLogic,\n ResolvingPdfFile: resolvingPdfFileLogic,\n ResolvingImageFile: resolvingImageFileLogic,\n GeneratingRunResult: generatingRunResultLogic,\n CallingInteractiveTool: callingInteractiveToolLogic,\n CallingDelegate: callingDelegateLogic,\n FinishingStep: finishingStepLogic,\n}\n\nexport type RunActor = ActorRefFrom<typeof runtimeStateMachine>\nexport type RunSnapshot = SnapshotFrom<typeof runtimeStateMachine>\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport { createActor } from \"xstate\"\nimport type { RunEventEmitter } from \"./events/event-emitter.js\"\nimport { runtimeStateMachine, StateMachineLogics } from \"./runtime-state-machine.js\"\nimport { type BaseSkillManager, closeSkillManagers } from \"./skill-manager/index.js\"\n\nexport type ExecuteStateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint, timestamp: number) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\nexport async function executeStateMachine(params: ExecuteStateMachineParams): Promise<Checkpoint> {\n const {\n setting,\n initialCheckpoint,\n eventListener,\n skillManagers,\n eventEmitter,\n storeCheckpoint,\n shouldContinueRun,\n } = params\n const runActor = createActor(runtimeStateMachine, {\n input: {\n setting,\n initialCheckpoint,\n eventListener,\n skillManagers,\n },\n })\n return new Promise<Checkpoint>((resolve, reject) => {\n runActor.subscribe(async (runState) => {\n try {\n if (runState.value === \"Stopped\") {\n const { checkpoint, skillManagers } = runState.context\n if (!checkpoint) {\n throw new Error(\"Checkpoint is undefined\")\n }\n await closeSkillManagers(skillManagers)\n resolve(checkpoint)\n } else {\n const event = await StateMachineLogics[runState.value](runState.context)\n if (\"checkpoint\" in event) {\n await storeCheckpoint(event.checkpoint, event.timestamp)\n }\n await eventEmitter.emit(event)\n if (shouldContinueRun) {\n const shouldContinue = await shouldContinueRun(\n runState.context.setting,\n runState.context.checkpoint,\n runState.context.step,\n )\n if (!shouldContinue) {\n runActor.stop()\n await closeSkillManagers(runState.context.skillManagers)\n resolve(runState.context.checkpoint)\n return\n }\n }\n runActor.send(event)\n }\n } catch (error) {\n await closeSkillManagers(skillManagers).catch(() => {})\n reject(error)\n }\n })\n runActor.start()\n })\n}\n","import { type ApiRegistryExpert, ApiV1Client } from \"@perstack/api-client/v1\"\nimport type { Expert, Skill } from \"@perstack/core\"\n\nexport async function resolveExpertToRun(\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: {\n perstackApiBaseUrl: string\n perstackApiKey?: string\n },\n): Promise<Expert> {\n if (experts[expertKey]) {\n return experts[expertKey]\n }\n const client = new ApiV1Client({\n baseUrl: clientOptions.perstackApiBaseUrl,\n apiKey: clientOptions.perstackApiKey,\n })\n const { expert } = await client.registry.experts.get({ expertKey })\n experts[expertKey] = toRuntimeExpert(expert)\n return experts[expertKey]\n}\n\nfunction toRuntimeExpert(expert: ApiRegistryExpert): Expert {\n const skills: Record<string, Skill> = Object.fromEntries(\n Object.entries(expert.skills).map(([name, skill]) => {\n switch (skill.type) {\n case \"mcpStdioSkill\":\n return [name, { ...skill, name }]\n case \"mcpSseSkill\":\n return [name, { ...skill, name }]\n case \"interactiveSkill\":\n return [name, { ...skill, name }]\n default: {\n throw new Error(`Unknown skill type: ${(skill as { type: string }).type}`)\n }\n }\n }),\n )\n return { ...expert, skills }\n}\n","import type { Expert, RunSetting } from \"@perstack/core\"\nimport { resolveExpertToRun as defaultResolveExpertToRun } from \"./resolve-expert-to-run.js\"\n\nexport type ResolveExpertToRunFn = (\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: { perstackApiBaseUrl: string; perstackApiKey?: string },\n) => Promise<Expert>\n\nexport type SetupExpertsResult = {\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\nexport async function setupExperts(\n setting: RunSetting,\n resolveExpertToRun: ResolveExpertToRunFn = defaultResolveExpertToRun,\n): Promise<SetupExpertsResult> {\n const { expertKey } = setting\n const experts = { ...setting.experts }\n const clientOptions = {\n perstackApiBaseUrl: setting.perstackApiBaseUrl,\n perstackApiKey: setting.perstackApiKey,\n }\n const expertToRun = await resolveExpertToRun(expertKey, experts, clientOptions)\n for (const delegateName of expertToRun.delegates) {\n const delegate = await resolveExpertToRun(delegateName, experts, clientOptions)\n if (!delegate) {\n throw new Error(`Delegate ${delegateName} not found`)\n }\n }\n return { expertToRun, experts }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n type Checkpoint,\n createRuntimeEvent,\n type RunEvent,\n type RunParamsInput,\n type RunSetting,\n type RuntimeEvent,\n runParamsSchema,\n type Step,\n} from \"@perstack/core\"\nimport pkg from \"../package.json\" with { type: \"json\" }\nimport {\n buildDelegateToState,\n buildDelegationReturnState,\n createInitialCheckpoint,\n createNextStepCheckpoint,\n} from \"./checkpoint-helpers.js\"\nimport {\n defaultRetrieveCheckpoint,\n defaultStoreCheckpoint,\n defaultStoreEvent,\n} from \"./default-store.js\"\nimport { RunEventEmitter } from \"./events/event-emitter.js\"\nimport { executeStateMachine } from \"./execute-state-machine.js\"\nimport { getContextWindow } from \"./model.js\"\nimport {\n defaultGetRunDir,\n type FileSystem,\n type GetRunDirFn,\n storeRunSetting,\n} from \"./run-setting-store.js\"\nimport { type ResolveExpertToRunFn, setupExperts } from \"./setup-experts.js\"\nimport { getSkillManagers } from \"./skill-manager/index.js\"\n\nexport async function run(\n runInput: RunParamsInput,\n options?: {\n shouldContinueRun?: (\n setting: RunSetting,\n checkpoint: Checkpoint,\n step: Step,\n ) => Promise<boolean>\n retrieveCheckpoint?: (runId: string, checkpointId: string) => Promise<Checkpoint>\n storeCheckpoint?: (checkpoint: Checkpoint, timestamp: number) => Promise<void>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n fileSystem?: FileSystem\n getRunDir?: GetRunDirFn\n },\n): Promise<Checkpoint> {\n const runParams = runParamsSchema.parse(runInput)\n const eventListener = getEventListener(options)\n const retrieveCheckpoint = options?.retrieveCheckpoint ?? defaultRetrieveCheckpoint\n const storeCheckpoint = options?.storeCheckpoint ?? defaultStoreCheckpoint\n const eventEmitter = new RunEventEmitter()\n eventEmitter.subscribe(eventListener)\n let { setting, checkpoint } = runParams\n const contextWindow = getContextWindow(setting.providerConfig.providerName, setting.model)\n const getRunDir = options?.getRunDir ?? defaultGetRunDir\n await storeRunSetting(setting, options?.fileSystem, getRunDir)\n while (true) {\n const { expertToRun, experts } = await setupExperts(setting, options?.resolveExpertToRun)\n if (options?.eventListener) {\n const initEvent = createRuntimeEvent(\"initializeRuntime\", setting.runId, {\n runtimeVersion: pkg.version,\n expertName: expertToRun.name,\n experts: Object.keys(experts),\n model: setting.model,\n temperature: setting.temperature,\n maxSteps: setting.maxSteps,\n maxRetries: setting.maxRetries,\n timeout: setting.timeout,\n query: setting.input.text,\n interactiveToolCall: setting.input.interactiveToolCallResult,\n })\n options.eventListener(initEvent)\n }\n const skillManagers = await getSkillManagers(\n expertToRun,\n experts,\n setting,\n options?.eventListener,\n )\n const initialCheckpoint = checkpoint\n ? createNextStepCheckpoint(createId(), checkpoint)\n : createInitialCheckpoint(createId(), {\n runId: setting.runId,\n expertKey: setting.expertKey,\n expert: expertToRun,\n contextWindow,\n })\n const runResultCheckpoint = await executeStateMachine({\n setting: { ...setting, experts },\n initialCheckpoint,\n eventListener,\n skillManagers,\n eventEmitter,\n storeCheckpoint,\n shouldContinueRun: options?.shouldContinueRun,\n })\n switch (runResultCheckpoint.status) {\n case \"completed\": {\n if (runResultCheckpoint.delegatedBy) {\n const parentCheckpoint = await retrieveCheckpoint(\n setting.runId,\n runResultCheckpoint.delegatedBy.checkpointId,\n )\n const result = buildDelegationReturnState(setting, runResultCheckpoint, parentCheckpoint)\n setting = result.setting\n checkpoint = result.checkpoint\n break\n }\n return runResultCheckpoint\n }\n case \"stoppedByInteractiveTool\": {\n return runResultCheckpoint\n }\n case \"stoppedByDelegate\": {\n const result = buildDelegateToState(setting, runResultCheckpoint, expertToRun)\n setting = result.setting\n checkpoint = result.checkpoint\n break\n }\n case \"stoppedByExceededMaxSteps\": {\n return runResultCheckpoint\n }\n case \"stoppedByError\": {\n return runResultCheckpoint\n }\n default:\n throw new Error(\"Run stopped by unknown reason\")\n }\n }\n}\n\nfunction getEventListener(options?: { eventListener?: (event: RunEvent | RuntimeEvent) => void }) {\n const listener =\n options?.eventListener ?? ((e: RunEvent | RuntimeEvent) => console.log(JSON.stringify(e)))\n return async (event: RunEvent | RuntimeEvent) => {\n if (\"stepNumber\" in event) {\n await defaultStoreEvent(event)\n }\n listener(event)\n }\n}\n\nexport { defaultGetRunDir as getRunDir }\n","import pkg from \"../package.json\" with { type: \"json\" }\n\nexport * from \"./model.js\"\nexport * from \"./runtime.js\"\nexport * from \"./runtime-state-machine.js\"\nexport const runtimeVersion = pkg.version\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perstack/runtime",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.54",
|
|
4
4
|
"description": "Perstack Runtime",
|
|
5
5
|
"author": "Wintermute Technologies, Inc.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"ollama-ai-provider-v2": "^1.5.5",
|
|
29
29
|
"ts-dedent": "^2.2.0",
|
|
30
30
|
"xstate": "^5.24.0",
|
|
31
|
-
"@perstack/
|
|
32
|
-
"@perstack/
|
|
31
|
+
"@perstack/core": "0.0.17",
|
|
32
|
+
"@perstack/api-client": "0.0.28"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@tsconfig/node22": "^22.0.5",
|