@standardagents/builder 0.12.5 → 0.12.7

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/packing/metadata-service.ts","../src/packing/ast-utils.ts","../src/packing/packing-service.ts","../src/packing/discovery.ts","../src/packing/unpacking-service.ts"],"names":["path","fs","patch","path3","fs3","path4","fs4","ts2","pkgJsonPath"],"mappings":"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","file":"packing.js","sourcesContent":["/**\n * Metadata service for Standard Agents packing.\n *\n * Manages .standardagent/{agent-name}.json files that store package metadata\n * (packageName, version, license, etc.) for preservation across pack/unpack cycles.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { PackageMetadata } from './types.js';\n\n/**\n * Service for managing package metadata in .standardagent/ directory.\n */\nexport class MetadataService {\n private metadataDir: string;\n\n /**\n * Create a new MetadataService.\n *\n * @param agentsDir - Path to the agents/ directory\n */\n constructor(agentsDir: string) {\n this.metadataDir = path.join(agentsDir, '.standardagent');\n }\n\n /**\n * Read metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @returns Metadata if found, null otherwise\n */\n async read(agentName: string): Promise<PackageMetadata | null> {\n const filePath = this.getMetadataPath(agentName);\n\n if (!fs.existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n return JSON.parse(content) as PackageMetadata;\n } catch {\n return null;\n }\n }\n\n /**\n * Write metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @param metadata - Metadata to write\n */\n async write(agentName: string, metadata: PackageMetadata): Promise<void> {\n // Ensure directory exists\n if (!fs.existsSync(this.metadataDir)) {\n fs.mkdirSync(this.metadataDir, { recursive: true });\n }\n\n const filePath = this.getMetadataPath(agentName);\n fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2));\n }\n\n /**\n * Delete metadata for an agent.\n *\n * @param agentName - Name of the agent\n */\n async delete(agentName: string): Promise<void> {\n const filePath = this.getMetadataPath(agentName);\n\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n\n /**\n * Get the next version by incrementing the patch number.\n *\n * @param currentVersion - Current semver version (e.g., \"1.0.0\")\n * @returns Incremented version (e.g., \"1.0.1\")\n */\n getNextVersion(currentVersion: string): string {\n const parts = currentVersion.split('.');\n\n if (parts.length < 3) {\n // Invalid semver, return as-is with .1 appended\n return `${currentVersion}.1`;\n }\n\n // Handle prerelease versions (e.g., \"1.0.0-beta.1\")\n const patchPart = parts[2];\n const prereleaseIndex = patchPart.indexOf('-');\n\n if (prereleaseIndex > -1) {\n // Has prerelease suffix, just increment patch\n const patch = parseInt(patchPart.substring(0, prereleaseIndex), 10);\n const prerelease = patchPart.substring(prereleaseIndex);\n return `${parts[0]}.${parts[1]}.${patch + 1}${prerelease}`;\n }\n\n // Standard semver - increment patch\n const patch = parseInt(patchPart, 10);\n return `${parts[0]}.${parts[1]}.${patch + 1}`;\n }\n\n /**\n * Validate a semver version string.\n *\n * @param version - Version string to validate\n * @returns true if valid semver format\n */\n isValidVersion(version: string): boolean {\n // Basic semver pattern: X.Y.Z or X.Y.Z-prerelease\n const semverPattern = /^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$/;\n return semverPattern.test(version);\n }\n\n /**\n * Validate an npm package name.\n *\n * @param name - Package name to validate\n * @returns Object with valid flag and optional error message\n */\n validatePackageName(name: string): { valid: boolean; error?: string } {\n if (!name) {\n return { valid: false, error: 'Package name is required' };\n }\n\n if (name.length > 214) {\n return { valid: false, error: 'Package name must be 214 characters or less' };\n }\n\n if (name.startsWith('.') || name.startsWith('_')) {\n return { valid: false, error: 'Package name cannot start with . or _' };\n }\n\n if (name !== name.toLowerCase()) {\n return { valid: false, error: 'Package name must be lowercase' };\n }\n\n // Allow scoped packages (@scope/name) or regular packages\n const validPattern = /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n if (!validPattern.test(name)) {\n return {\n valid: false,\n error: 'Package name can only contain lowercase letters, numbers, hyphens, underscores, and dots',\n };\n }\n\n return { valid: true };\n }\n\n /**\n * Generate a suggested package name from project ID and agent name.\n *\n * @param projectId - Project identifier (optional)\n * @param agentName - Agent name\n * @returns Suggested npm package name\n */\n suggestPackageName(projectId: string | undefined, agentName: string): string {\n // Normalize agent name: lowercase, replace underscores with hyphens\n const normalizedAgent = agentName.toLowerCase().replace(/_/g, '-');\n\n if (projectId) {\n const normalizedProject = projectId.toLowerCase().replace(/_/g, '-');\n return `standardagent-${normalizedProject}-${normalizedAgent}`;\n }\n\n return `standardagent-${normalizedAgent}`;\n }\n\n /**\n * Get the file path for an agent's metadata.\n */\n private getMetadataPath(agentName: string): string {\n return path.join(this.metadataDir, `${agentName}.json`);\n }\n}\n","/**\n * AST utilities for analyzing agent code during packing.\n *\n * Uses TypeScript's compiler API to extract information from\n * define* calls and tool execute functions.\n *\n * @module\n */\n\nimport * as ts from 'typescript';\nimport * as fs from 'node:fs';\nimport MagicString from 'magic-string';\n\n/**\n * Result of extracting uses from a tool definition.\n */\nexport interface ExtractUsesResult {\n /** Array of tool/prompt/agent names in the uses list */\n uses: string[];\n /** Whether the uses property was found */\n found: boolean;\n /** Line number where uses was found (1-indexed) */\n line?: number;\n}\n\n/**\n * Result of extracting tools from a prompt definition.\n */\nexport interface ExtractPromptToolsResult {\n /** Tool names in the tools array */\n tools: string[];\n /** Whether it's a mix of strings and objects */\n hasSubpromptConfigs: boolean;\n}\n\n/**\n * Extract the `uses` array from a defineTool call in source code.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Extraction result with uses array and metadata\n *\n * @example\n * ```typescript\n * const result = extractToolUses(`\n * export default defineTool({\n * description: 'My tool',\n * uses: ['helper_tool', 'other_agent:main'],\n * execute: async (state, args) => { ... }\n * });\n * `);\n * // result.uses = ['helper_tool', 'other_agent:main']\n * ```\n */\nexport function extractToolUses(sourceCode: string): ExtractUsesResult {\n const sourceFile = ts.createSourceFile(\n 'tool.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractUsesResult = {\n uses: [],\n found: false,\n };\n\n function visit(node: ts.Node): void {\n // Look for defineTool({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineTool' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'uses' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'uses' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n result.found = true;\n result.line = sourceFile.getLineAndCharacterOfPosition(prop.getStart()).line + 1;\n\n // Extract string values from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.uses.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the `tools` array from a definePrompt call.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Array of tool names\n */\nexport function extractPromptTools(sourceCode: string): ExtractPromptToolsResult {\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractPromptToolsResult = {\n tools: [],\n hasSubpromptConfigs: false,\n };\n\n function visit(node: ts.Node): void {\n // Look for definePrompt({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'tools' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'tools' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n // Extract tool names from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.tools.push(element.text);\n } else if (ts.isObjectLiteralExpression(element)) {\n // SubpromptConfig object - look for 'name' property\n result.hasSubpromptConfigs = true;\n for (const objProp of element.properties) {\n if (\n ts.isPropertyAssignment(objProp) &&\n ts.isIdentifier(objProp.name) &&\n objProp.name.text === 'name' &&\n ts.isStringLiteral(objProp.initializer)\n ) {\n result.tools.push(objProp.initializer.text);\n }\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the model name from a definePrompt call.\n */\nexport function extractPromptModel(sourceCode: string): string | null {\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let model: string | null = null;\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'model' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n model = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return model;\n}\n\n/**\n * Extract included prompts from a prompt's 'includes' array or structured prompt.\n */\nexport function extractPromptIncludes(sourceCode: string): string[] {\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const includes: string[] = [];\n\n function extractFromStructuredPrompt(arr: ts.ArrayLiteralExpression): void {\n for (const element of arr.elements) {\n if (ts.isObjectLiteralExpression(element)) {\n // Look for { type: 'include', name: '...' }\n let hasIncludeType = false;\n let includeName: string | null = null;\n\n for (const prop of element.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'type' &&\n ts.isStringLiteral(prop.initializer) &&\n prop.initializer.text === 'include'\n ) {\n hasIncludeType = true;\n }\n if (\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n includeName = prop.initializer.text;\n }\n }\n }\n\n if (hasIncludeType && includeName && !includes.includes(includeName)) {\n includes.push(includeName);\n }\n }\n }\n }\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n // Check 'prompt' property for structured prompts\n if (\n prop.name.text === 'prompt' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n extractFromStructuredPrompt(prop.initializer);\n }\n\n // Also check 'includes' array if present\n if (\n prop.name.text === 'includes' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element) && !includes.includes(element.text)) {\n includes.push(element.text);\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return includes;\n}\n\n/**\n * Extract the prompt name from an agent's sideA or sideB configuration.\n */\nexport function extractAgentPrompts(sourceCode: string): { sideA?: string; sideB?: string } {\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: { sideA?: string; sideB?: string } = {};\n\n function extractPromptFromSide(obj: ts.ObjectLiteralExpression): string | undefined {\n for (const prop of obj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'prompt' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n return prop.initializer.text;\n }\n }\n return undefined;\n }\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'sideA' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideA = extractPromptFromSide(prop.initializer);\n }\n if (\n prop.name.text === 'sideB' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideB = extractPromptFromSide(prop.initializer);\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the 'description' property from a defineAgent call.\n */\nexport function extractAgentDescription(sourceCode: string): string | null {\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let description: string | null = null;\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'description' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n description = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return description;\n}\n\n/**\n * Extract the 'name' property value from a define* call.\n */\nexport function extractDefinitionName(sourceCode: string): string | null {\n const sourceFile = ts.createSourceFile(\n 'def.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let name: string | null = null;\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n (node.expression.text === 'defineTool' ||\n node.expression.text === 'definePrompt' ||\n node.expression.text === 'defineAgent' ||\n node.expression.text === 'defineModel' ||\n node.expression.text === 'defineHook') &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n name = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return name;\n}\n\n/**\n * Extract the fallbacks array from a defineModel call.\n */\nexport function extractModelFallbacks(sourceCode: string): string[] {\n const sourceFile = ts.createSourceFile(\n 'model.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const fallbacks: string[] = [];\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineModel' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'fallbacks' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n fallbacks.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return fallbacks;\n}\n\n// Note: injectPackageSignature was removed as part of the packed agent architecture redesign.\n// Packed packages now use a single index.ts with inline definitions instead of individual\n// transformed files with __package metadata.\n\n/**\n * Transform a bundled JavaScript file back to TypeScript export format.\n *\n * Converts bundled format:\n * ```javascript\n * // Bundled from: agents/agents/test.ts\n * // Local dependencies have been inlined\n *\n * import { defineAgent } from '@standardagents/builder';\n *\n * var test_agent = defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n *\n * export { test_agent as default };\n * ```\n *\n * To TypeScript export format:\n * ```typescript\n * import { defineAgent } from '@standardagents/builder';\n *\n * export default defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n * ```\n *\n * Uses TypeScript AST parsing + magic-string for safe, precise transformations.\n *\n * @param code - Bundled JavaScript source code\n * @returns Transformed TypeScript source code\n */\nexport function transformBundledJs(code: string): string {\n const s = new MagicString(code);\n const sourceFile = ts.createSourceFile(\n 'file.js',\n code,\n ts.ScriptTarget.ESNext,\n true\n );\n\n // Find the first import statement to determine where real code starts\n let firstImportStart = -1;\n\n // Track what to remove and transform\n let varStatementInfo: {\n start: number;\n varNameEnd: number;\n fullStart: number;\n } | null = null;\n\n function visit(node: ts.Node): void {\n // Find first import statement\n if (ts.isImportDeclaration(node) && firstImportStart === -1) {\n firstImportStart = node.getStart();\n }\n\n // Find: var NAME = defineX({...})\n if (ts.isVariableStatement(node)) {\n const decl = node.declarationList.declarations[0];\n if (\n decl &&\n decl.initializer &&\n ts.isCallExpression(decl.initializer)\n ) {\n const callExpr = decl.initializer.expression;\n if (\n ts.isIdentifier(callExpr) &&\n (callExpr.text === 'defineAgent' ||\n callExpr.text === 'definePrompt' ||\n callExpr.text === 'defineTool' ||\n callExpr.text === 'defineModel' ||\n callExpr.text === 'defineHook')\n ) {\n varStatementInfo = {\n fullStart: node.getFullStart(),\n start: node.getStart(),\n varNameEnd: decl.initializer.getStart(),\n };\n\n // Replace \"var NAME = \" with \"export default \"\n s.overwrite(varStatementInfo.start, varStatementInfo.varNameEnd, 'export default ');\n }\n }\n }\n\n // Find and remove: export { NAME as default };\n if (ts.isExportDeclaration(node)) {\n const exportClause = node.exportClause;\n if (exportClause && ts.isNamedExports(exportClause)) {\n for (const element of exportClause.elements) {\n // Check if this is \"NAME as default\"\n if (\n element.propertyName &&\n ts.isIdentifier(element.name) &&\n element.name.text === 'default'\n ) {\n // Remove the entire export statement\n s.remove(node.getFullStart(), node.getEnd());\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n // Remove leading comments before the first import\n if (firstImportStart > 0) {\n s.remove(0, firstImportStart);\n }\n\n return s.toString().trim() + '\\n';\n}\n\n/**\n * Metadata to inject into an agent definition.\n */\nexport interface AgentMetadata {\n packageName?: string;\n version?: string;\n author?: string;\n license?: string;\n}\n\n/**\n * Inject metadata properties into a defineAgent call.\n *\n * This function finds the defineAgent({ ... }) call in the TypeScript code\n * and inserts metadata properties (packageName, version, author, license)\n * after the name property.\n *\n * @param tsCode - TypeScript source code containing a defineAgent call\n * @param metadata - Metadata to inject\n * @returns Modified TypeScript code with metadata injected\n *\n * @example\n * ```typescript\n * const code = `export default defineAgent({\n * name: \"test_agent\",\n * type: \"ai_human\",\n * ...\n * });`;\n *\n * const result = injectAgentMetadata(code, {\n * packageName: 'standardagent-test',\n * version: '1.2.3',\n * author: 'Test Co',\n * license: 'MIT'\n * });\n *\n * // Result:\n * // export default defineAgent({\n * // name: \"test_agent\",\n * // packageName: \"standardagent-test\",\n * // version: \"1.2.3\",\n * // author: \"Test Co\",\n * // license: \"MIT\",\n * // type: \"ai_human\",\n * // ...\n * // });\n * ```\n */\nexport function injectAgentMetadata(tsCode: string, metadata: AgentMetadata): string {\n // Skip if no metadata to inject\n if (!metadata.packageName && !metadata.version && !metadata.author && !metadata.license) {\n return tsCode;\n }\n\n const s = new MagicString(tsCode);\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n tsCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n function visit(node: ts.Node): void {\n // Look for defineAgent({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'name' property to insert after it\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name'\n ) {\n // Build the metadata properties string\n const metadataProps: string[] = [];\n\n if (metadata.packageName) {\n metadataProps.push(`packageName: ${JSON.stringify(metadata.packageName)}`);\n }\n if (metadata.version) {\n metadataProps.push(`version: ${JSON.stringify(metadata.version)}`);\n }\n if (metadata.author) {\n metadataProps.push(`author: ${JSON.stringify(metadata.author)}`);\n }\n if (metadata.license) {\n metadataProps.push(`license: ${JSON.stringify(metadata.license)}`);\n }\n\n if (metadataProps.length > 0) {\n // Get the position right after the name property\n const propEnd = prop.getEnd();\n const afterProp = tsCode.substring(propEnd, propEnd + 1);\n\n // Insert metadata properties after the name property\n // If there's already a comma after name, insert after the comma\n // Otherwise, add a comma and then the metadata\n if (afterProp === ',') {\n // Insert after the comma (propEnd + 1)\n const insertText = `\\n ${metadataProps.join(',\\n ')},`;\n s.appendRight(propEnd + 1, insertText);\n } else {\n // No comma after name, add one along with metadata\n const insertText = `,\\n ${metadataProps.join(',\\n ')}`;\n s.appendRight(propEnd, insertText);\n }\n }\n\n return; // Found and processed, no need to continue\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n return s.toString();\n}\n","/**\n * Packing service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze agents and their dependencies\n * - Pack agents with all constituents using Rollup bundling\n * - Generate npm-ready package structures with TypeScript definitions\n *\n * The new Rollup-based approach:\n * - Preserves imports, constants, and helper functions\n * - Bundles local dependencies inline\n * - Keeps npm packages as external dependencies\n * - Creates separate files per constituent with re-exports in index.ts\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n// Rollup imports are done dynamically in bundleFile() to avoid loading\n// Node.js-only dependencies during Vite dev server startup\nimport type { Plugin, RollupOptions } from 'rollup';\nimport type {\n PackingAnalysis,\n ConstituentItem,\n PackingOptions,\n PackingResult,\n PackedMeta,\n ItemSelection,\n PackageMetadata,\n} from './types.js';\nimport { MetadataService } from './metadata-service.js';\nimport {\n extractToolUses,\n extractPromptTools,\n extractPromptModel,\n extractPromptIncludes,\n extractAgentPrompts,\n extractDefinitionName,\n extractModelFallbacks,\n extractAgentDescription,\n} from './ast-utils.js';\n\n/**\n * Service for packing agents with their dependencies.\n */\nexport class PackingService {\n /**\n * Resolve the version of an npm package from node_modules.\n *\n * @param pkgName - Package name (e.g., '@standardagents/spec')\n * @param rootDir - Root directory of the project\n * @returns Version specifier (e.g., '^1.2.3') or '*' if not found\n */\n protected resolvePackageVersion(pkgName: string, rootDir: string): string {\n const pkgJsonPath = path.join(rootDir, 'node_modules', pkgName, 'package.json');\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n return `^${pkgJson.version}`;\n } catch {\n // Fallback - use wildcard if we can't resolve\n return '*';\n }\n }\n /**\n * Analyze an agent to discover all its constituents.\n *\n * This performs static analysis on the agent definition and all\n * referenced prompts, tools, models, and hooks.\n *\n * @param agentName - Name of the agent to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with all discovered constituents\n */\n async analyzeAgent(agentName: string, rootDir: string): Promise<PackingAnalysis> {\n const agentsDir = path.join(rootDir, 'agents');\n const analysis: PackingAnalysis = {\n agent: agentName,\n primaryPrompt: '',\n constituents: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n agents: [],\n },\n shared: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n },\n warnings: [],\n errors: [],\n };\n\n // Load the agent file\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.errors.push(`Agent file not found: ${agentName}`);\n return analysis;\n }\n\n // Add agent to constituents\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n });\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt (primary)\n if (agentPrompts.sideA) {\n analysis.primaryPrompt = agentPrompts.sideA;\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Check for shared items (used by other agents)\n await this.checkSharedItems(agentsDir, analysis);\n\n return analysis;\n }\n\n /**\n * Generate a README for an analyzed agent.\n *\n * This is used during analysis to provide a pre-populated README\n * that can be edited in the PackModal before packing.\n *\n * @param analysis - The packing analysis result\n * @param rootDir - Root directory of the project\n * @returns Object with generatedReadme and agentDescription\n */\n generateReadmeForAnalysis(\n analysis: PackingAnalysis,\n rootDir: string\n ): { generatedReadme: string; agentDescription?: string } {\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n\n // Try to extract description from agent file\n let agentDescription: string | undefined;\n const agentItem = analysis.constituents.agents.find(a => a.name === analysis.agent);\n if (agentItem?.filePath) {\n try {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = extractAgentDescription(agentSource) || undefined;\n } catch {\n // Ignore errors reading agent file\n }\n }\n\n // Get suggested package name\n const suggestedPackageName = metadataService.suggestPackageName(undefined, analysis.agent);\n\n // Generate the README\n const generatedReadme = this.generateReadme(\n suggestedPackageName,\n analysis.agent,\n '1.0.0', // Default version, will be replaced in modal\n 'MIT', // Default license\n agentDescription\n );\n\n return { generatedReadme, agentDescription };\n }\n\n /**\n * Recursively analyze a prompt and its dependencies.\n */\n private async analyzePrompt(\n promptName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const promptFilePath = this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) {\n analysis.warnings.push(`Prompt file not found: ${promptName}`);\n return;\n }\n\n const thisKey = `prompt:${promptName}`;\n\n // Add prompt to constituents (allow duplicates with different parentKey for tree display)\n // Use name+parentKey to avoid exact duplicates\n if (!analysis.constituents.prompts.some(p => p.name === promptName && p.parentKey === parentKey)) {\n analysis.constituents.prompts.push({\n name: promptName,\n filePath: promptFilePath,\n discoveredVia: 'agent-prompt',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`prompt:${promptName}`)) {\n return;\n }\n visited.add(`prompt:${promptName}`);\n\n // Read and analyze the prompt file\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n // Extract and analyze model\n const modelName = extractPromptModel(promptSource);\n if (modelName) {\n await this.analyzeModel(modelName, agentsDir, analysis, visited, thisKey);\n }\n\n // Extract and analyze tools\n const { tools: toolNames } = extractPromptTools(promptSource);\n for (const toolName of toolNames) {\n await this.analyzeTool(toolName, agentsDir, analysis, visited, 'prompt-tools', thisKey);\n }\n\n // Extract and analyze included prompts\n const includedPrompts = extractPromptIncludes(promptSource);\n for (const includedPrompt of includedPrompts) {\n const item = analysis.constituents.prompts.find(p => p.name === includedPrompt);\n if (item) {\n if (item.discoveredVia === 'agent-prompt') {\n item.discoveredVia = 'prompt-includes';\n }\n }\n await this.analyzePrompt(includedPrompt, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a tool and its dependencies.\n * This also handles prompts-as-tools and agents-as-tools (handoffs).\n */\n private async analyzeTool(\n toolName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n discoveredVia: ConstituentItem['discoveredVia'],\n parentKey?: string\n ): Promise<void> {\n const thisKey = `tool:${toolName}`;\n\n // Check if it's a prompt being used as a tool\n const promptFilePath = this.findFile(path.join(agentsDir, 'prompts'), toolName);\n if (promptFilePath) {\n // It's a prompt, analyze it (with parent tracking)\n await this.analyzePrompt(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n // Check if it's an agent being used as a tool (handoff)\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), toolName);\n if (agentFilePath) {\n // It's an agent handoff, analyze it recursively\n await this.analyzeNestedAgent(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n const toolFilePath = this.findFile(path.join(agentsDir, 'tools'), toolName);\n if (!toolFilePath) {\n analysis.warnings.push(`Tool file not found: ${toolName}`);\n return;\n }\n\n // Add tool to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.tools.some(t => t.name === toolName && t.parentKey === parentKey)) {\n analysis.constituents.tools.push({\n name: toolName,\n filePath: toolFilePath,\n discoveredVia,\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`tool:${toolName}`)) {\n return;\n }\n visited.add(`tool:${toolName}`);\n\n // Read and analyze the tool file\n const toolSource = fs.readFileSync(toolFilePath, 'utf-8');\n\n // Extract uses array - this is the definitive list of tool dependencies\n // Since tools must declare their dependencies in `uses`, we rely on this\n // rather than trying to detect queueTool/invokeTool calls via AST\n const { uses } = extractToolUses(toolSource);\n for (const usedItem of uses) {\n // Determine if it's a tool, prompt, or agent\n await this.analyzeTool(usedItem, agentsDir, analysis, visited, 'uses', thisKey);\n }\n }\n\n /**\n * Analyze a nested agent (used as a handoff target).\n */\n private async analyzeNestedAgent(\n agentName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.warnings.push(`Agent file not found: ${agentName}`);\n return;\n }\n\n const thisKey = `agent:${agentName}`;\n\n // Add agent to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.agents.some(a => a.name === agentName && a.parentKey === parentKey)) {\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'uses',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`agent:${agentName}`)) {\n return;\n }\n visited.add(`agent:${agentName}`);\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt\n if (agentPrompts.sideA) {\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, visited, thisKey);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a model and its fallbacks.\n */\n private async analyzeModel(\n modelName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const modelFilePath = this.findFile(path.join(agentsDir, 'models'), modelName);\n if (!modelFilePath) {\n analysis.warnings.push(`Model file not found: ${modelName}`);\n return;\n }\n\n const thisKey = `model:${modelName}`;\n\n // Add model to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.models.some(m => m.name === modelName && m.parentKey === parentKey)) {\n analysis.constituents.models.push({\n name: modelName,\n filePath: modelFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`model:${modelName}`)) {\n return;\n }\n visited.add(`model:${modelName}`);\n\n // Read and analyze the model file for fallbacks\n const modelSource = fs.readFileSync(modelFilePath, 'utf-8');\n const fallbacks = extractModelFallbacks(modelSource);\n\n // Recursively analyze fallback models\n for (const fallbackName of fallbacks) {\n await this.analyzeModel(fallbackName, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Check which items are shared with other agents.\n */\n private async checkSharedItems(\n agentsDir: string,\n analysis: PackingAnalysis\n ): Promise<void> {\n const agentsPath = path.join(agentsDir, 'agents');\n if (!fs.existsSync(agentsPath)) return;\n\n const agentFiles = fs.readdirSync(agentsPath).filter(f => f.endsWith('.ts'));\n\n for (const agentFile of agentFiles) {\n const otherAgentName = agentFile.replace('.ts', '');\n if (otherAgentName === analysis.agent) continue;\n\n // Analyze the other agent to see what it uses\n const otherAnalysis = await this.analyzeAgentLight(otherAgentName, path.dirname(agentsDir));\n\n // Check prompts\n for (const prompt of analysis.constituents.prompts) {\n if (otherAnalysis.prompts.includes(prompt.name)) {\n prompt.sharedWith.push(otherAgentName);\n if (!analysis.shared.prompts.includes(prompt.name)) {\n analysis.shared.prompts.push(prompt.name);\n }\n }\n }\n\n // Check tools\n for (const tool of analysis.constituents.tools) {\n if (otherAnalysis.tools.includes(tool.name)) {\n tool.sharedWith.push(otherAgentName);\n if (!analysis.shared.tools.includes(tool.name)) {\n analysis.shared.tools.push(tool.name);\n }\n }\n }\n\n // Check models\n for (const model of analysis.constituents.models) {\n if (otherAnalysis.models.includes(model.name)) {\n model.sharedWith.push(otherAgentName);\n if (!analysis.shared.models.includes(model.name)) {\n analysis.shared.models.push(model.name);\n }\n }\n }\n }\n }\n\n /**\n * Light analysis of an agent - just get the names of used items.\n */\n private async analyzeAgentLight(\n agentName: string,\n rootDir: string\n ): Promise<{ prompts: string[]; tools: string[]; models: string[] }> {\n const result = { prompts: [] as string[], tools: [] as string[], models: [] as string[] };\n const agentsDir = path.join(rootDir, 'agents');\n const visited = new Set<string>();\n\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) return result;\n\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = extractAgentPrompts(agentSource);\n\n const analyzePromptLight = (promptName: string) => {\n if (visited.has(promptName)) return;\n visited.add(promptName);\n\n result.prompts.push(promptName);\n\n const promptFilePath = this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) return;\n\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n const modelName = extractPromptModel(promptSource);\n if (modelName && !result.models.includes(modelName)) {\n result.models.push(modelName);\n }\n\n const { tools } = extractPromptTools(promptSource);\n for (const tool of tools) {\n if (!result.tools.includes(tool)) {\n result.tools.push(tool);\n }\n }\n\n const includes = extractPromptIncludes(promptSource);\n for (const inc of includes) {\n analyzePromptLight(inc);\n }\n };\n\n if (agentPrompts.sideA) analyzePromptLight(agentPrompts.sideA);\n if (agentPrompts.sideB) analyzePromptLight(agentPrompts.sideB);\n\n return result;\n }\n\n /**\n * Pack an agent with all its dependencies using Rollup bundling.\n *\n * The packing format creates:\n * - dist/{type}/{name}.js - Individual bundled files per constituent\n * - dist/index.js - Re-exports and lazy loaders\n * - dist/index.d.ts - TypeScript type definitions\n * - package.json - With standardagent field and dependencies\n * - tsconfig.json - For building\n *\n * @param options - Packing options\n * @returns Packing result\n */\n async pack(options: PackingOptions): Promise<PackingResult> {\n const {\n agentName,\n rootDir,\n outputDir,\n version = '1.0.0',\n removeOriginals = false,\n packageId = `standardagent-${agentName.replace(/_/g, '-')}`,\n packageName,\n license,\n licenseOwner,\n itemSelections,\n readme,\n } = options;\n\n // Use packageName if provided, otherwise fall back to packageId\n const finalPackageName = packageName || packageId;\n\n const packedAt = Date.now();\n const meta: PackedMeta = {\n packageId,\n version,\n entryAgents: [agentName],\n packedAt,\n };\n\n const result: PackingResult = {\n success: false,\n packageId,\n outputPath: '',\n meta,\n filesCreated: [],\n warnings: [],\n };\n\n try {\n // Analyze the agent\n const analysis = await this.analyzeAgent(agentName, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n result.warnings = analysis.warnings;\n return result;\n }\n\n result.warnings = analysis.warnings;\n\n // Create output directory structure\n const pkgOutputDir = path.join(outputDir, packageId);\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'agents'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'prompts'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'tools'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'models'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'hooks'), { recursive: true });\n\n // Collect all items to bundle (deduplicate by name since constituents may have\n // multiple entries with different parentKeys for tree display purposes)\n const seenItems = new Set<string>();\n const allItems: Array<ConstituentItem & { type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook' }> = [];\n\n for (const a of analysis.constituents.agents) {\n const key = `agent:${a.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...a, type: 'agent' });\n }\n }\n for (const p of analysis.constituents.prompts) {\n const key = `prompt:${p.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...p, type: 'prompt' });\n }\n }\n for (const t of analysis.constituents.tools) {\n const key = `tool:${t.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...t, type: 'tool' });\n }\n }\n for (const m of analysis.constituents.models) {\n const key = `model:${m.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...m, type: 'model' });\n }\n }\n for (const h of analysis.constituents.hooks) {\n const key = `hook:${h.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...h, type: 'hook' });\n }\n }\n\n // Track external dependencies\n const externalDeps = new Map<string, string>();\n\n // Bundle each constituent file with Rollup\n for (const item of allItems) {\n // Input path for bundleFile (it will output .js)\n const outputPath = path.join(\n pkgOutputDir,\n 'dist',\n this.getTypeDir(item.type),\n `${item.name}.js`\n );\n\n const deps = await this.bundleFile(item.filePath, outputPath, rootDir);\n\n // Collect external dependencies\n for (const [depName, depVersion] of deps) {\n if (!externalDeps.has(depName)) {\n externalDeps.set(depName, depVersion);\n }\n }\n\n result.filesCreated.push(outputPath);\n }\n\n // Generate dist/index.js with re-exports\n const indexJs = this.generateReExportIndex(analysis, meta);\n const indexJsPath = path.join(pkgOutputDir, 'dist', 'index.js');\n fs.writeFileSync(indexJsPath, indexJs);\n result.filesCreated.push(indexJsPath);\n\n // Generate dist/index.d.ts with type definitions\n const indexDts = this.generateIndexDts(analysis);\n const indexDtsPath = path.join(pkgOutputDir, 'dist', 'index.d.ts');\n fs.writeFileSync(indexDtsPath, indexDts);\n result.filesCreated.push(indexDtsPath);\n\n // Generate package.json with collected dependencies\n const pkgJson = this.generatePackageJson(\n finalPackageName,\n version,\n agentName,\n externalDeps,\n rootDir,\n license,\n licenseOwner\n );\n const pkgJsonPath = path.join(pkgOutputDir, 'package.json');\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));\n result.filesCreated.push(pkgJsonPath);\n\n // Generate LICENSE file if license is specified\n if (license) {\n const licenseContent = this.generateLicenseFile(license, licenseOwner);\n const licensePath = path.join(pkgOutputDir, 'LICENSE');\n fs.writeFileSync(licensePath, licenseContent);\n result.filesCreated.push(licensePath);\n }\n\n // Generate README.md\n // If custom readme provided, use it; otherwise generate from agent description\n let readmeContent = readme;\n if (!readmeContent) {\n // Try to extract description from agent file\n const agentItem = analysis.constituents.agents.find(a => a.name === agentName);\n let agentDescription: string | undefined;\n if (agentItem?.filePath) {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = extractAgentDescription(agentSource) || undefined;\n }\n readmeContent = this.generateReadme(\n finalPackageName,\n agentName,\n version,\n license,\n agentDescription\n );\n }\n const readmePath = path.join(pkgOutputDir, 'README.md');\n fs.writeFileSync(readmePath, readmeContent);\n result.filesCreated.push(readmePath);\n\n // Handle original files based on user selection or removeOriginals flag\n if (removeOriginals || itemSelections) {\n result.filesRemoved = [];\n\n for (const item of allItems) {\n // Check if user specified extraction for this item\n const selection = itemSelections?.find(s => s.name === item.name && s.type === item.type);\n const shouldRemove = selection\n ? selection.mode === 'extract'\n : (removeOriginals && item.sharedWith.length === 0);\n\n if (shouldRemove && fs.existsSync(item.filePath)) {\n fs.unlinkSync(item.filePath);\n result.filesRemoved.push(item.filePath);\n }\n }\n }\n\n // Save metadata for future pack/unpack cycles\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n const metadata: PackageMetadata = {\n packageName: finalPackageName,\n version,\n license: license || '',\n licenseOwner: licenseOwner || '',\n lastPackedAt: new Date().toISOString(),\n };\n await metadataService.write(agentName, metadata);\n\n result.success = true;\n result.outputPath = pkgOutputDir;\n result.meta = meta;\n\n return result;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n return result;\n }\n }\n\n /**\n * Bundle a single source file with its local dependencies using Rollup.\n *\n * Local files (from the same agents/ directory) are inlined.\n * npm packages are kept as external dependencies.\n * Output is bundled JavaScript with all local deps inlined.\n *\n * @returns Map of external dependencies (name -> version specifier)\n */\n protected async bundleFile(\n inputPath: string,\n outputPath: string,\n rootDir: string\n ): Promise<Map<string, string>> {\n // Dynamic imports to avoid loading Node.js-only dependencies at module init time\n const { rollup } = await import('rollup');\n const nodeResolve = (await import('@rollup/plugin-node-resolve')).default;\n const commonjs = (await import('@rollup/plugin-commonjs')).default;\n const esbuild = (await import('rollup-plugin-esbuild')).default;\n\n const externalDeps = new Map<string, string>();\n const agentsDir = path.join(rootDir, 'agents');\n // Capture method reference for use inside Rollup plugin\n const resolveVersion = this.resolvePackageVersion.bind(this);\n\n // Create a Rollup plugin to track and externalize non-local imports\n const trackExternalsPlugin: Plugin = {\n name: 'track-externals',\n resolveId(source, importer) {\n // Entry point (no importer) - let Rollup handle it\n if (!importer) {\n return null;\n }\n\n // Handle relative imports - these might be local agent files\n if (source.startsWith('./') || source.startsWith('../')) {\n const resolved = path.resolve(path.dirname(importer), source);\n // Try to find the file with .ts extension\n let tsResolved = resolved;\n if (!resolved.endsWith('.ts') && !resolved.endsWith('.js')) {\n if (fs.existsSync(`${resolved}.ts`)) {\n tsResolved = `${resolved}.ts`;\n } else if (fs.existsSync(`${resolved}.js`)) {\n tsResolved = `${resolved}.js`;\n } else if (fs.existsSync(`${resolved}/index.ts`)) {\n tsResolved = `${resolved}/index.ts`;\n }\n }\n // If it's within the agents directory, bundle it\n if (tsResolved.includes(agentsDir) || resolved.includes(agentsDir)) {\n return null; // Let Rollup resolve it normally (will be bundled)\n }\n return null;\n }\n\n // Absolute paths within agents dir - bundle them\n if (source.startsWith('/') && source.includes(agentsDir)) {\n return null;\n }\n\n // All non-relative imports are external (npm packages)\n // Track the dependency\n const pkgName = source.startsWith('@')\n ? source.split('/').slice(0, 2).join('/')\n : source.split('/')[0];\n\n // Determine version specifier based on package\n if (pkgName.startsWith('@standardagents/')) {\n externalDeps.set(pkgName, resolveVersion(pkgName, rootDir));\n } else if (pkgName === 'zod') {\n externalDeps.set(pkgName, '^4.0.0');\n } else {\n externalDeps.set(pkgName, '*');\n }\n\n return { id: source, external: true };\n },\n };\n\n const rollupOptions: RollupOptions = {\n input: inputPath,\n plugins: [\n trackExternalsPlugin,\n nodeResolve({\n extensions: ['.ts', '.js'],\n }),\n commonjs(),\n esbuild({\n target: 'es2022',\n sourceMap: false,\n }),\n ],\n onwarn(warning, warn) {\n // Suppress certain warnings\n if (warning.code === 'UNRESOLVED_IMPORT') return;\n if (warning.code === 'CIRCULAR_DEPENDENCY') return;\n warn(warning);\n },\n };\n\n const bundle = await rollup(rollupOptions);\n\n try {\n const { output } = await bundle.generate({\n format: 'esm',\n exports: 'named',\n });\n\n // The output is bundled JS with all local dependencies inlined\n // and external npm packages preserved as imports\n const bundledCode = output[0].code;\n\n // Add a header comment showing the original source\n const header = `// Bundled from: ${path.relative(rootDir, inputPath)}\\n// Local dependencies have been inlined\\n\\n`;\n\n // Write the bundled JS output\n fs.writeFileSync(outputPath, header + bundledCode);\n\n await bundle.close();\n } catch (error) {\n await bundle.close();\n throw error;\n }\n\n return externalDeps;\n }\n\n /**\n * Get the directory name for a constituent type.\n */\n private getTypeDir(type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook'): string {\n switch (type) {\n case 'agent': return 'agents';\n case 'prompt': return 'prompts';\n case 'tool': return 'tools';\n case 'model': return 'models';\n case 'hook': return 'hooks';\n }\n }\n\n /**\n * Deduplicate constituents by name (for packing, not for tree display).\n */\n private deduplicateConstituents(analysis: PackingAnalysis): {\n agents: ConstituentItem[];\n prompts: ConstituentItem[];\n tools: ConstituentItem[];\n models: ConstituentItem[];\n hooks: ConstituentItem[];\n } {\n const dedupe = <T extends { name: string }>(items: T[]): T[] => {\n const seen = new Set<string>();\n return items.filter(item => {\n if (seen.has(item.name)) return false;\n seen.add(item.name);\n return true;\n });\n };\n\n return {\n agents: dedupe(analysis.constituents.agents),\n prompts: dedupe(analysis.constituents.prompts),\n tools: dedupe(analysis.constituents.tools),\n models: dedupe(analysis.constituents.models),\n hooks: dedupe(analysis.constituents.hooks),\n };\n }\n\n /**\n * Check if a name is a valid JavaScript/TypeScript identifier.\n */\n private isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n }\n\n /**\n * Quote a property/export name if it contains non-identifier characters.\n * JavaScript identifiers must start with a letter, underscore, or dollar sign,\n * and contain only letters, digits, underscores, or dollar signs.\n */\n private quoteName(name: string): string {\n if (this.isValidIdentifier(name)) {\n return name;\n }\n // Quote names with special characters (like hyphens)\n return `'${name}'`;\n }\n\n /**\n * Generate the dist/index.js file with re-exports and lazy loaders.\n */\n private generateReExportIndex(analysis: PackingAnalysis, meta: PackedMeta): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n '// Packed agent: ' + analysis.agent,\n '// Generated by @standardagents/builder',\n '',\n ];\n\n // Generate direct re-exports\n for (const agent of constituents.agents) {\n lines.push(`export { default as ${this.quoteName(agent.name)} } from './agents/${agent.name}.js';`);\n }\n for (const prompt of constituents.prompts) {\n lines.push(`export { default as ${this.quoteName(prompt.name)} } from './prompts/${prompt.name}.js';`);\n }\n for (const tool of constituents.tools) {\n lines.push(`export { default as ${this.quoteName(tool.name)} } from './tools/${tool.name}.js';`);\n }\n for (const model of constituents.models) {\n lines.push(`export { default as ${this.quoteName(model.name)} } from './models/${model.name}.js';`);\n }\n for (const hook of constituents.hooks) {\n lines.push(`export { default as ${this.quoteName(hook.name)} } from './hooks/${hook.name}.js';`);\n }\n\n lines.push('');\n\n // Generate agents registry with lazy loaders\n lines.push('// Registry exports for lazy loading');\n lines.push('export const agents = {');\n for (const agent of constituents.agents) {\n lines.push(` ${this.quoteName(agent.name)}: async () => (await import('./agents/${agent.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts registry\n lines.push('export const prompts = {');\n for (const prompt of constituents.prompts) {\n lines.push(` ${this.quoteName(prompt.name)}: async () => (await import('./prompts/${prompt.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools registry\n lines.push('export const tools = {');\n for (const tool of constituents.tools) {\n lines.push(` ${this.quoteName(tool.name)}: async () => (await import('./tools/${tool.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models registry\n lines.push('export const models = {');\n for (const model of constituents.models) {\n lines.push(` ${this.quoteName(model.name)}: async () => (await import('./models/${model.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks registry\n lines.push('export const hooks = {');\n for (const hook of constituents.hooks) {\n lines.push(` ${this.quoteName(hook.name)}: async () => (await import('./hooks/${hook.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate __meta export\n lines.push('export const __meta = ' + JSON.stringify(meta, null, 2) + ';');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the dist/index.d.ts file with type definitions.\n */\n private generateIndexDts(analysis: PackingAnalysis): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n 'import type {',\n ' AgentDefinition,',\n ' PromptDefinition,',\n ' ToolDefinition,',\n ' ModelDefinition,',\n ' PackedMeta,',\n \"} from '@standardagents/spec';\",\n '',\n 'type DefinitionLoader<T> = () => Promise<T>;',\n '',\n ];\n\n // Generate direct exports (only for valid identifiers)\n for (const agent of constituents.agents) {\n if (this.isValidIdentifier(agent.name)) {\n lines.push(`export declare const ${agent.name}: AgentDefinition;`);\n }\n }\n for (const prompt of constituents.prompts) {\n if (this.isValidIdentifier(prompt.name)) {\n lines.push(`export declare const ${prompt.name}: PromptDefinition;`);\n }\n }\n for (const tool of constituents.tools) {\n if (this.isValidIdentifier(tool.name)) {\n lines.push(`export declare const ${tool.name}: ToolDefinition<unknown, any, any>;`);\n }\n }\n for (const model of constituents.models) {\n if (this.isValidIdentifier(model.name)) {\n lines.push(`export declare const ${model.name}: ModelDefinition;`);\n }\n }\n for (const hook of constituents.hooks) {\n if (this.isValidIdentifier(hook.name)) {\n lines.push(`export declare const ${hook.name}: unknown;`);\n }\n }\n lines.push('');\n\n // Generate agents type\n lines.push('export declare const agents: {');\n for (const agent of constituents.agents) {\n lines.push(` readonly ${this.quoteName(agent.name)}: DefinitionLoader<AgentDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts type\n lines.push('export declare const prompts: {');\n for (const prompt of constituents.prompts) {\n lines.push(` readonly ${this.quoteName(prompt.name)}: DefinitionLoader<PromptDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools type\n lines.push('export declare const tools: {');\n for (const tool of constituents.tools) {\n lines.push(` readonly ${this.quoteName(tool.name)}: DefinitionLoader<ToolDefinition<unknown, any, any>>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models type\n lines.push('export declare const models: {');\n for (const model of constituents.models) {\n lines.push(` readonly ${this.quoteName(model.name)}: DefinitionLoader<ModelDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks type\n lines.push('export declare const hooks: {');\n for (const hook of constituents.hooks) {\n lines.push(` readonly ${this.quoteName(hook.name)}: DefinitionLoader<unknown>;`);\n }\n lines.push('};');\n lines.push('');\n\n lines.push('export declare const __meta: PackedMeta;');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the package.json file with dependencies.\n */\n private generatePackageJson(\n packageName: string,\n version: string,\n agentName: string,\n externalDeps: Map<string, string>,\n rootDir: string,\n license?: string,\n licenseOwner?: string\n ): Record<string, unknown> {\n // Build dependencies object, ensuring @standardagents/spec is included\n const dependencies: Record<string, string> = {\n '@standardagents/spec': this.resolvePackageVersion('@standardagents/spec', rootDir),\n };\n\n for (const [name, ver] of externalDeps) {\n dependencies[name] = ver;\n }\n\n const pkgJson: Record<string, unknown> = {\n name: packageName,\n version,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n },\n keywords: ['standardagent'],\n standardagent: {\n entryAgents: [agentName],\n },\n files: license ? ['dist', 'LICENSE', 'README.md'] : ['dist', 'README.md'],\n dependencies,\n };\n\n // Add license if specified\n if (license) {\n pkgJson.license = license;\n }\n\n // Add author if license owner specified\n if (licenseOwner) {\n pkgJson.author = licenseOwner;\n }\n\n return pkgJson;\n }\n\n /**\n * Generate LICENSE file content for common licenses.\n */\n private generateLicenseFile(license: string, owner?: string): string {\n const year = new Date().getFullYear();\n const copyrightHolder = owner || '[COPYRIGHT HOLDER]';\n\n switch (license) {\n case 'MIT':\n return `MIT License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n\n case 'Apache-2.0':\n return ` Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n Copyright ${year} ${copyrightHolder}\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n`;\n\n case 'ISC':\n return `ISC License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n`;\n\n case 'GPL-3.0':\n return `GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (c) ${year} ${copyrightHolder}\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>.\n`;\n\n case 'BSD-3-Clause':\n return `BSD 3-Clause License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n`;\n\n case 'Unlicensed':\n case 'UNLICENSED':\n return `Copyright (c) ${year} ${copyrightHolder}\n\nAll Rights Reserved.\n\nThis software and associated documentation files (the \"Software\") are\nproprietary and confidential. Unauthorized copying, modification, distribution,\nor use of the Software, via any medium, is strictly prohibited.\n`;\n\n default:\n return `${license}\n\nCopyright (c) ${year} ${copyrightHolder}\n`;\n }\n }\n\n /**\n * Get information about a packed package.\n *\n * Reads the package.json and README.md from a packed package directory.\n * Used by the packed-info API endpoint to show package details before publishing.\n *\n * @param packageId - The package directory name (e.g., 'standardagent-my-agent')\n * @param rootDir - Root directory of the project\n * @returns Package info or null if not found\n */\n getPackedInfo(\n packageId: string,\n rootDir: string\n ): {\n packageName: string;\n version: string;\n license?: string;\n author?: string;\n entryAgents: string[];\n readme?: string;\n } | null {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n\n // Try to find the package directory\n let packageDir = path.join(packedDir, packageId);\n\n if (!fs.existsSync(packageDir)) {\n // Try alternate naming conventions\n if (!fs.existsSync(packedDir)) {\n return null;\n }\n\n const dirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n const matchingDir = dirs.find(d =>\n d === packageId ||\n d === `standardagent-${packageId}` ||\n d === `standardagent-${packageId.replace(/_/g, '-')}`\n );\n\n if (!matchingDir) {\n return null;\n }\n\n packageDir = path.join(packedDir, matchingDir);\n }\n\n // Read package.json\n const pkgJsonPath = path.join(packageDir, 'package.json');\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Read README.md if it exists\n let readme: string | undefined;\n const readmePath = path.join(packageDir, 'README.md');\n if (fs.existsSync(readmePath)) {\n readme = fs.readFileSync(readmePath, 'utf-8');\n }\n\n return {\n packageName: pkgJson.name,\n version: pkgJson.version,\n license: pkgJson.license,\n author: pkgJson.author,\n entryAgents: pkgJson.standardagent?.entryAgents || [],\n readme,\n };\n }\n\n /**\n * List all packed packages in the workspace.\n *\n * @param rootDir - Root directory of the project\n * @returns Array of package directory names\n */\n listPackedPackages(rootDir: string): string[] {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n if (!fs.existsSync(packedDir)) {\n return [];\n }\n\n return fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n }\n\n /**\n * Generate README.md content for a packed agent.\n *\n * @param packageName - The npm package name\n * @param agentName - The agent name\n * @param version - The package version\n * @param license - The license type\n * @param description - Optional description from the agent definition\n * @returns README markdown content\n */\n generateReadme(\n packageName: string,\n agentName: string,\n version: string,\n license?: string,\n description?: string\n ): string {\n const desc = description || 'A Standard Agent package.';\n\n return `# ${packageName}\n\n${desc}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${packageName}\n\\`\\`\\`\n\n## Usage\n\nThis is a [Standard Agent](https://standardagentbuilder.com) package. To use it:\n\n1. Install in your Standard Agents project\n2. The agent will be automatically discovered and available\n\n\\`\\`\\`typescript\n// Create a thread with this agent\nconst thread = await client.createThread({\n agent_id: '${packageName}/${agentName}'\n});\n\\`\\`\\`\n\n## License\n\n${license || 'See LICENSE file'}\n`;\n }\n\n /**\n * Find a file by name in a directory.\n */\n private findFile(dir: string, name: string): string | null {\n if (!fs.existsSync(dir)) {\n return null;\n }\n\n // Try exact match with .ts extension\n const exactPath = path.join(dir, `${name}.ts`);\n if (fs.existsSync(exactPath)) {\n return exactPath;\n }\n\n // Try finding by name property in files\n const files = fs.readdirSync(dir).filter(f => f.endsWith('.ts'));\n for (const file of files) {\n const filePath = path.join(dir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const extractedName = extractDefinitionName(source);\n if (extractedName === name) {\n return filePath;\n }\n }\n\n return null;\n }\n\n /**\n * List all agents in the workspace.\n */\n listAgents(rootDir: string): string[] {\n const agentsDir = path.join(rootDir, 'agents', 'agents');\n if (!fs.existsSync(agentsDir)) {\n return [];\n }\n\n const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.ts'));\n const agents: string[] = [];\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const name = extractDefinitionName(source);\n if (name) {\n agents.push(name);\n } else {\n agents.push(file.replace('.ts', ''));\n }\n }\n\n return agents;\n }\n}\n","/**\n * Package discovery service for Standard Agents.\n *\n * Discovers packed agent packages from:\n * - npm packages (by keyword, naming convention, or standardagent field)\n * - Local agents/packed/ directory\n *\n * Packages are detected by checking for the `standardagent` field in\n * package.json, not by looking for manifest.json.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { DiscoveredPackage, PackageSignature } from './types.js';\n\n/**\n * Configuration for package discovery.\n */\nexport interface DiscoveryConfig {\n /** Root directory of the project */\n rootDir: string;\n /** Directory for local packed agents (default: agents/packed) */\n packedDir?: string;\n /** Whether to scan npm packages (default: true) */\n scanNpm?: boolean;\n /** Whether to scan local packed directory (default: true) */\n scanLocal?: boolean;\n}\n\n/**\n * Service for discovering packed agent packages.\n */\nexport class PackageDiscoveryService {\n private config: Required<DiscoveryConfig>;\n\n constructor(config: DiscoveryConfig) {\n this.config = {\n rootDir: config.rootDir,\n packedDir: config.packedDir ?? path.join(config.rootDir, 'agents', 'packed'),\n scanNpm: config.scanNpm ?? true,\n scanLocal: config.scanLocal ?? true,\n };\n }\n\n /**\n * Discover all packed agent packages.\n *\n * @returns Array of discovered packages\n */\n async discoverPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (this.config.scanNpm) {\n const npmPackages = await this.discoverNpmPackages();\n packages.push(...npmPackages);\n }\n\n if (this.config.scanLocal) {\n const localPackages = await this.discoverLocalPackages();\n packages.push(...localPackages);\n }\n\n return packages;\n }\n\n /**\n * Discover npm packages that are Standard Agents packages.\n *\n * Looks for packages with:\n * - \"standardagent\" keyword in package.json\n * - \"standardagent-*\" prefix in name\n * - \"@standardagents/*\" scope\n * - \"standardagent\" field in package.json\n */\n private async discoverNpmPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n const nodeModulesDir = path.join(this.config.rootDir, 'node_modules');\n\n if (!fs.existsSync(nodeModulesDir)) {\n return packages;\n }\n\n // Scan root level packages\n const rootEntries = await this.scanDirectory(nodeModulesDir);\n for (const entry of rootEntries) {\n if (entry.startsWith('.')) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package - scan contents\n const scopeDir = path.join(nodeModulesDir, entry);\n const scopeEntries = await this.scanDirectory(scopeDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const pkgDir = path.join(scopeDir, scopedPkg);\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkNpmPackage(pkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkgDir = path.join(nodeModulesDir, entry);\n const pkg = await this.checkNpmPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if an npm package is a Standard Agent package.\n *\n * Detection is based on the `standardagent` field in package.json,\n * which must contain `entryAgents` array.\n */\n private async checkNpmPackage(\n pkgDir: string,\n pkgName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Check if this is a Standard Agent package\n const isStandardAgent =\n // Has \"standardagent\" keyword\n pkgJson.keywords?.includes('standardagent') ||\n // Has \"standardagent-*\" prefix\n pkgName.startsWith('standardagent-') ||\n // Has \"@standardagents/*\" scope\n pkgName.startsWith('@standardagents/') ||\n // Has \"standardagent\" field\n pkgJson.standardagent !== undefined;\n\n if (!isStandardAgent) {\n return null;\n }\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n // Might be a different kind of standardagent package\n // (like @standardagents/builder itself)\n return null;\n }\n\n return {\n packageId: pkgJson.name || pkgName,\n version: pkgJson.version || '0.0.0',\n source: 'npm',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading npm package ${pkgName}:`, error);\n return null;\n }\n }\n\n /**\n * Discover local packed agents from agents/packed/ directory.\n * Handles both regular packages and scoped packages (@scope/name).\n */\n private async discoverLocalPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (!fs.existsSync(this.config.packedDir)) {\n return packages;\n }\n\n const entries = await this.scanDirectory(this.config.packedDir);\n\n for (const entry of entries) {\n if (entry.startsWith('.')) continue;\n\n const pkgDir = path.join(this.config.packedDir, entry);\n const stat = fs.statSync(pkgDir);\n\n if (!stat.isDirectory()) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package directory - scan contents for actual packages\n const scopeEntries = await this.scanDirectory(pkgDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const scopedPkgDir = path.join(pkgDir, scopedPkg);\n const scopedStat = fs.statSync(scopedPkgDir);\n\n if (!scopedStat.isDirectory()) continue;\n\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkLocalPackage(scopedPkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkg = await this.checkLocalPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if a local directory is a packed agent package.\n *\n * Detection is based on the `standardagent` field in package.json.\n */\n private async checkLocalPackage(\n pkgDir: string,\n dirName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n return null;\n }\n\n return {\n packageId: pkgJson.name || dirName,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading local package ${dirName}:`, error);\n return null;\n }\n }\n\n /**\n * Scan a directory and return entry names.\n */\n private async scanDirectory(dir: string): Promise<string[]> {\n if (!fs.existsSync(dir)) {\n return [];\n }\n\n const entries = fs.readdirSync(dir);\n return entries;\n }\n\n /**\n * Validate a standardagent field structure in package.json.\n */\n static validateStandardAgentField(field: unknown): field is { entryAgents: string[] } {\n if (typeof field !== 'object' || field === null) {\n return false;\n }\n\n const f = field as Record<string, unknown>;\n\n return (\n Array.isArray(f.entryAgents) &&\n f.entryAgents.length > 0 &&\n f.entryAgents.every((e: unknown) => typeof e === 'string')\n );\n }\n\n /**\n * Get a package by ID.\n */\n async getPackage(packageId: string): Promise<DiscoveredPackage | null> {\n const packages = await this.discoverPackages();\n return packages.find(p => p.packageId === packageId) ?? null;\n }\n\n /**\n * Create a package signature from a discovered package.\n *\n * Note: packedAt is set to current time since it's no longer\n * stored in a manifest file.\n */\n static createSignature(pkg: DiscoveredPackage): PackageSignature {\n return {\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n packedAt: Date.now(),\n };\n }\n}\n\n/**\n * Convenience function to discover all packages.\n */\nexport async function discoverPackages(rootDir: string): Promise<DiscoveredPackage[]> {\n const service = new PackageDiscoveryService({ rootDir });\n return service.discoverPackages();\n}\n","/**\n * Unpacking service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze packed packages to discover exportable items\n * - Transform bundled JavaScript back to TypeScript source files\n * - Restore packed agents to editable source files\n *\n * Uses AST-based transformation (TypeScript Compiler API + magic-string)\n * to accurately preserve all code including Zod schemas and execute functions.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as ts from 'typescript';\nimport type {\n UnpackOptions,\n UnpackResult,\n UnpackAnalysis,\n UnpackableItem,\n UnpackItemSelection,\n DiscoveredPackage,\n} from './types.js';\nimport { PackageDiscoveryService } from './discovery.js';\nimport {\n transformBundledJs,\n extractAgentPrompts,\n extractPromptTools,\n extractPromptModel,\n extractToolUses,\n injectAgentMetadata,\n type AgentMetadata,\n} from './ast-utils.js';\n\n/**\n * Registry item type for consistent iteration.\n */\ntype ItemType = 'agent' | 'prompt' | 'tool' | 'model' | 'hook';\n\n/**\n * Maps type to directory name (plural form).\n */\nconst TYPE_TO_DIR: Record<ItemType, string> = {\n agent: 'agents',\n prompt: 'prompts',\n tool: 'tools',\n model: 'models',\n hook: 'hooks',\n};\n\n/**\n * Service for unpacking packed agent packages.\n */\nexport class UnpackingService {\n /**\n * Analyze a package to discover what can be unpacked.\n *\n * @param packageId - Package ID to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with items that can be unpacked\n */\n async analyzeUnpack(packageId: string, rootDir: string): Promise<UnpackAnalysis> {\n const analysis: UnpackAnalysis = {\n packageId,\n version: '',\n source: 'local',\n canUnpack: false,\n items: [],\n warnings: [],\n errors: [],\n };\n\n try {\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n\n if (!pkg) {\n analysis.errors.push(`Package not found: ${packageId}`);\n return analysis;\n }\n\n analysis.version = pkg.version;\n analysis.source = pkg.source;\n\n // Read and parse the index.js to discover registry items\n const indexPath = path.join(pkg.path, 'dist', 'index.js');\n if (!fs.existsSync(indexPath)) {\n analysis.errors.push(`Package index not found: ${indexPath}`);\n return analysis;\n }\n\n const indexContent = fs.readFileSync(indexPath, 'utf-8');\n const registryItems = this.parseIndexExports(indexContent);\n\n // Build a map of all available items for quick lookup\n const availableItems = new Map<string, { type: ItemType; name: string }>();\n for (const item of registryItems) {\n availableItems.set(`${item.type}:${item.name}`, item);\n }\n\n // Read bundled files to discover relationships\n const agentsDir = path.join(rootDir, 'agents');\n const itemsWithRelations: UnpackableItem[] = [];\n\n // Process each item and discover its relationships\n for (const item of registryItems) {\n const targetPath = path.join(agentsDir, TYPE_TO_DIR[item.type], `${item.name}.ts`);\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const existsGlobally = this.fileExists(targetPath);\n const sourceExists = fs.existsSync(sourcePath);\n\n if (!sourceExists) {\n analysis.warnings.push(`Source file not found for ${item.type} \"${item.name}\": ${sourcePath}`);\n continue;\n }\n\n // Read the bundled file to discover relationships\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n const children = this.discoverRelationships(item.type, item.name, bundledCode, availableItems);\n\n // Add the item itself (no parentKey for root-level items initially)\n itemsWithRelations.push({\n name: item.name,\n type: item.type,\n targetPath,\n existsGlobally,\n action: existsGlobally ? 'skip' : 'generate',\n });\n\n // Add children with parentKey\n for (const child of children) {\n const childTargetPath = path.join(agentsDir, TYPE_TO_DIR[child.type], `${child.name}.ts`);\n const childSourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[child.type], `${child.name}.js`);\n const childExists = this.fileExists(childTargetPath);\n const childSourceExists = fs.existsSync(childSourcePath);\n\n if (!childSourceExists) {\n continue; // Skip if source doesn't exist\n }\n\n itemsWithRelations.push({\n name: child.name,\n type: child.type,\n targetPath: childTargetPath,\n existsGlobally: childExists,\n action: childExists ? 'skip' : 'generate',\n parentKey: `${item.type}:${item.name}`,\n });\n }\n }\n\n // Deduplicate items (keep first occurrence, but allow duplicates with different parentKeys)\n analysis.items = itemsWithRelations;\n\n // Add warning if all items already exist\n const itemsToGenerate = analysis.items.filter(i => i.action === 'generate');\n if (itemsToGenerate.length === 0 && analysis.items.length > 0) {\n analysis.warnings.push('All items already exist in the global namespace. Nothing to unpack.');\n }\n\n analysis.canUnpack = itemsToGenerate.length > 0;\n\n } catch (error) {\n analysis.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return analysis;\n }\n\n /**\n * Discover relationships from a bundled file.\n * Returns child items that this item references.\n */\n private discoverRelationships(\n type: ItemType,\n name: string,\n bundledCode: string,\n availableItems: Map<string, { type: ItemType; name: string }>\n ): Array<{ type: ItemType; name: string }> {\n const children: Array<{ type: ItemType; name: string }> = [];\n\n if (type === 'agent') {\n // Extract prompts from agent's sideA and sideB\n const prompts = extractAgentPrompts(bundledCode);\n if (prompts.sideA && availableItems.has(`prompt:${prompts.sideA}`)) {\n children.push({ type: 'prompt', name: prompts.sideA });\n }\n if (prompts.sideB && availableItems.has(`prompt:${prompts.sideB}`)) {\n children.push({ type: 'prompt', name: prompts.sideB });\n }\n } else if (type === 'prompt') {\n // Extract tools and model from prompt\n const toolsResult = extractPromptTools(bundledCode);\n for (const toolName of toolsResult.tools) {\n // Tool could be a tool or an agent (exposeAsTool)\n if (availableItems.has(`tool:${toolName}`)) {\n children.push({ type: 'tool', name: toolName });\n } else if (availableItems.has(`agent:${toolName}`)) {\n children.push({ type: 'agent', name: toolName });\n }\n }\n\n const model = extractPromptModel(bundledCode);\n if (model && availableItems.has(`model:${model}`)) {\n children.push({ type: 'model', name: model });\n }\n } else if (type === 'tool') {\n // Extract uses from tool\n const usesResult = extractToolUses(bundledCode);\n for (const useName of usesResult.uses) {\n // Uses can reference tools, prompts, or agents\n // Format can be \"tool_name\" or \"agent_name:prompt_name\"\n const colonIndex = useName.indexOf(':');\n if (colonIndex > 0) {\n // agent:prompt format\n const agentName = useName.substring(0, colonIndex);\n if (availableItems.has(`agent:${agentName}`)) {\n children.push({ type: 'agent', name: agentName });\n }\n } else {\n // Simple name - could be tool, prompt, or agent\n if (availableItems.has(`tool:${useName}`)) {\n children.push({ type: 'tool', name: useName });\n } else if (availableItems.has(`prompt:${useName}`)) {\n children.push({ type: 'prompt', name: useName });\n } else if (availableItems.has(`agent:${useName}`)) {\n children.push({ type: 'agent', name: useName });\n }\n }\n }\n }\n\n return children;\n }\n\n /**\n * Unpack a packed agent package by transforming bundled JS back to TypeScript.\n *\n * @param options - Unpacking options\n * @returns Result of the unpacking operation\n */\n async unpack(options: UnpackOptions): Promise<UnpackResult> {\n const { packageId, rootDir, deletePackage = false, itemSelections } = options;\n\n const result: UnpackResult = {\n success: false,\n packageId,\n filesGenerated: [],\n filesSkipped: [],\n packageDeleted: false,\n warnings: [],\n };\n\n try {\n // First analyze to get the items\n const analysis = await this.analyzeUnpack(packageId, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n return result;\n }\n\n result.warnings.push(...analysis.warnings);\n\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n if (!pkg) {\n result.error = `Package not found: ${packageId}`;\n return result;\n }\n\n // Apply item selections if provided\n const itemsToProcess = this.applySelections(analysis.items, itemSelections);\n\n // Read package.json to get metadata for agent injection\n const pkgJsonPath = path.join(pkg.path, 'package.json');\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Extract author from package.json (can be string or object)\n let author = '';\n if (typeof pkgJson.author === 'string') {\n author = pkgJson.author;\n } else if (pkgJson.author?.name) {\n author = pkgJson.author.name;\n }\n\n // Build metadata for agent injection\n const agentMetadata: AgentMetadata = {\n packageName: pkgJson.name || undefined,\n version: pkgJson.version || undefined,\n author: author || undefined,\n license: pkgJson.license || undefined,\n };\n\n // Deduplicate by type:name (process each unique item only once)\n const processedItems = new Set<string>();\n\n for (const item of itemsToProcess) {\n const itemKey = `${item.type}:${item.name}`;\n if (processedItems.has(itemKey)) {\n continue; // Skip duplicates\n }\n processedItems.add(itemKey);\n\n if (item.action === 'skip') {\n result.filesSkipped.push(item.targetPath);\n continue;\n }\n\n try {\n // Read the bundled JS file\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n\n // Transform using AST\n let tsCode = transformBundledJs(bundledCode);\n\n // For agents, inject metadata from package.json so it persists through pack/unpack cycles\n if (item.type === 'agent') {\n tsCode = injectAgentMetadata(tsCode, agentMetadata);\n }\n\n // Ensure directory exists\n const dir = path.dirname(item.targetPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Write the TypeScript file\n fs.writeFileSync(item.targetPath, tsCode);\n result.filesGenerated.push(item.targetPath);\n\n } catch (error) {\n result.warnings.push(\n `Failed to generate ${item.type} \"${item.name}\": ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n // Delete package if requested and it's a local package\n if (deletePackage && pkg.source === 'local') {\n try {\n this.deleteDirectory(pkg.path);\n result.packageDeleted = true;\n } catch (error) {\n result.warnings.push(\n `Failed to delete package: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n } else if (deletePackage && pkg.source === 'npm') {\n result.warnings.push('Cannot delete npm packages. Use npm uninstall instead.');\n }\n\n result.success = true;\n\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n }\n\n /**\n * Parse the index.js file to extract registry items.\n *\n * Looks for patterns like:\n * ```javascript\n * export const agents = {\n * support_agent: async () => (await import('./agents/support_agent.js')).default,\n * };\n * ```\n */\n private parseIndexExports(indexContent: string): Array<{ name: string; type: ItemType }> {\n const sourceFile = ts.createSourceFile(\n 'index.js',\n indexContent,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const items: Array<{ name: string; type: ItemType }> = [];\n const registryTypes: ItemType[] = ['agent', 'prompt', 'tool', 'model', 'hook'];\n\n function visit(node: ts.Node): void {\n // Look for: export const agents = { ... }\n if (\n ts.isVariableStatement(node) &&\n node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n for (const decl of node.declarationList.declarations) {\n if (!ts.isIdentifier(decl.name)) continue;\n\n const varName = decl.name.text;\n\n // Check if this is a registry (agents, prompts, tools, models, hooks)\n let itemType: ItemType | null = null;\n for (const type of registryTypes) {\n if (varName === TYPE_TO_DIR[type]) {\n itemType = type;\n break;\n }\n }\n\n if (itemType && decl.initializer && ts.isObjectLiteralExpression(decl.initializer)) {\n // Extract keys from the object\n for (const prop of decl.initializer.properties) {\n if (ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) {\n let name: string | undefined;\n\n if (ts.isPropertyAssignment(prop)) {\n if (ts.isIdentifier(prop.name)) {\n name = prop.name.text;\n } else if (ts.isStringLiteral(prop.name)) {\n name = prop.name.text;\n }\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n name = prop.name.text;\n }\n\n if (name) {\n items.push({ name, type: itemType });\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return items;\n }\n\n /**\n * Resolve a package identifier to a discovered package.\n */\n private async resolvePackage(\n pkgIdentifier: string,\n rootDir: string\n ): Promise<DiscoveredPackage | null> {\n // Check if it's a local path\n if (pkgIdentifier.startsWith('/') || pkgIdentifier.startsWith('./')) {\n const absolutePath = path.isAbsolute(pkgIdentifier)\n ? pkgIdentifier\n : path.join(rootDir, pkgIdentifier);\n\n const pkgJsonPath = path.join(absolutePath, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || path.basename(absolutePath),\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: absolutePath,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, return null\n }\n }\n\n return null;\n }\n\n // Check local packed directory first\n const packedDir = path.join(rootDir, 'agents', 'packed', pkgIdentifier);\n const pkgJsonPath = path.join(packedDir, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || pkgIdentifier,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: packedDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, continue to npm check\n }\n }\n\n // Check npm packages\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n const pkg = packages.find(\n p => p.packageId === pkgIdentifier || p.path.endsWith(`node_modules/${pkgIdentifier}`)\n );\n\n return pkg || null;\n }\n\n /**\n * Apply user selections to items.\n */\n private applySelections(\n items: UnpackableItem[],\n selections?: UnpackItemSelection[]\n ): UnpackableItem[] {\n if (!selections || selections.length === 0) {\n return items;\n }\n\n return items.map(item => {\n const selection = selections.find(\n s => s.name === item.name && s.type === item.type\n );\n if (selection) {\n return { ...item, action: selection.action };\n }\n return item;\n });\n }\n\n /**\n * Check if a file exists.\n */\n private fileExists(filePath: string): boolean {\n // Check for .ts and .js extensions\n if (fs.existsSync(filePath)) {\n return true;\n }\n // Check without extension\n const withoutExt = filePath.replace(/\\.(ts|js)$/, '');\n return fs.existsSync(`${withoutExt}.ts`) || fs.existsSync(`${withoutExt}.js`);\n }\n\n /**\n * Recursively delete a directory.\n */\n private deleteDirectory(dirPath: string): void {\n if (fs.existsSync(dirPath)) {\n fs.rmSync(dirPath, { recursive: true, force: true });\n }\n }\n\n /**\n * List available packed packages.\n */\n async listPackages(rootDir: string): Promise<Array<{\n packageId: string;\n version: string;\n source: 'npm' | 'local';\n entryAgents: string[];\n path: string;\n }>> {\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n\n return packages.map(pkg => ({\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n entryAgents: pkg.entryAgents,\n path: pkg.path,\n }));\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/packing/metadata-service.ts","../src/packing/ast-utils.ts","../src/packing/packing-service.ts","../src/packing/discovery.ts","../src/packing/unpacking-service.ts"],"names":["path","fs","patch","path3","fs3","path4","fs4","pkgJsonPath"],"mappings":"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","file":"packing.js","sourcesContent":["/**\n * Metadata service for Standard Agents packing.\n *\n * Manages .standardagent/{agent-name}.json files that store package metadata\n * (packageName, version, license, etc.) for preservation across pack/unpack cycles.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { PackageMetadata } from './types.js';\n\n/**\n * Service for managing package metadata in .standardagent/ directory.\n */\nexport class MetadataService {\n private metadataDir: string;\n\n /**\n * Create a new MetadataService.\n *\n * @param agentsDir - Path to the agents/ directory\n */\n constructor(agentsDir: string) {\n this.metadataDir = path.join(agentsDir, '.standardagent');\n }\n\n /**\n * Read metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @returns Metadata if found, null otherwise\n */\n async read(agentName: string): Promise<PackageMetadata | null> {\n const filePath = this.getMetadataPath(agentName);\n\n if (!fs.existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n return JSON.parse(content) as PackageMetadata;\n } catch {\n return null;\n }\n }\n\n /**\n * Write metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @param metadata - Metadata to write\n */\n async write(agentName: string, metadata: PackageMetadata): Promise<void> {\n // Ensure directory exists\n if (!fs.existsSync(this.metadataDir)) {\n fs.mkdirSync(this.metadataDir, { recursive: true });\n }\n\n const filePath = this.getMetadataPath(agentName);\n fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2));\n }\n\n /**\n * Delete metadata for an agent.\n *\n * @param agentName - Name of the agent\n */\n async delete(agentName: string): Promise<void> {\n const filePath = this.getMetadataPath(agentName);\n\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n\n /**\n * Get the next version by incrementing the patch number.\n *\n * @param currentVersion - Current semver version (e.g., \"1.0.0\")\n * @returns Incremented version (e.g., \"1.0.1\")\n */\n getNextVersion(currentVersion: string): string {\n const parts = currentVersion.split('.');\n\n if (parts.length < 3) {\n // Invalid semver, return as-is with .1 appended\n return `${currentVersion}.1`;\n }\n\n // Handle prerelease versions (e.g., \"1.0.0-beta.1\")\n const patchPart = parts[2];\n const prereleaseIndex = patchPart.indexOf('-');\n\n if (prereleaseIndex > -1) {\n // Has prerelease suffix, just increment patch\n const patch = parseInt(patchPart.substring(0, prereleaseIndex), 10);\n const prerelease = patchPart.substring(prereleaseIndex);\n return `${parts[0]}.${parts[1]}.${patch + 1}${prerelease}`;\n }\n\n // Standard semver - increment patch\n const patch = parseInt(patchPart, 10);\n return `${parts[0]}.${parts[1]}.${patch + 1}`;\n }\n\n /**\n * Validate a semver version string.\n *\n * @param version - Version string to validate\n * @returns true if valid semver format\n */\n isValidVersion(version: string): boolean {\n // Basic semver pattern: X.Y.Z or X.Y.Z-prerelease\n const semverPattern = /^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$/;\n return semverPattern.test(version);\n }\n\n /**\n * Validate an npm package name.\n *\n * @param name - Package name to validate\n * @returns Object with valid flag and optional error message\n */\n validatePackageName(name: string): { valid: boolean; error?: string } {\n if (!name) {\n return { valid: false, error: 'Package name is required' };\n }\n\n if (name.length > 214) {\n return { valid: false, error: 'Package name must be 214 characters or less' };\n }\n\n if (name.startsWith('.') || name.startsWith('_')) {\n return { valid: false, error: 'Package name cannot start with . or _' };\n }\n\n if (name !== name.toLowerCase()) {\n return { valid: false, error: 'Package name must be lowercase' };\n }\n\n // Allow scoped packages (@scope/name) or regular packages\n const validPattern = /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n if (!validPattern.test(name)) {\n return {\n valid: false,\n error: 'Package name can only contain lowercase letters, numbers, hyphens, underscores, and dots',\n };\n }\n\n return { valid: true };\n }\n\n /**\n * Generate a suggested package name from project ID and agent name.\n *\n * @param projectId - Project identifier (optional)\n * @param agentName - Agent name\n * @returns Suggested npm package name\n */\n suggestPackageName(projectId: string | undefined, agentName: string): string {\n // Normalize agent name: lowercase, replace underscores with hyphens\n const normalizedAgent = agentName.toLowerCase().replace(/_/g, '-');\n\n if (projectId) {\n const normalizedProject = projectId.toLowerCase().replace(/_/g, '-');\n return `standardagent-${normalizedProject}-${normalizedAgent}`;\n }\n\n return `standardagent-${normalizedAgent}`;\n }\n\n /**\n * Get the file path for an agent's metadata.\n */\n private getMetadataPath(agentName: string): string {\n return path.join(this.metadataDir, `${agentName}.json`);\n }\n}\n","/**\n * AST utilities for analyzing agent code during packing.\n *\n * Uses TypeScript's compiler API to extract information from\n * define* calls and tool execute functions.\n *\n * @module\n */\n\nimport type * as TypeScript from 'typescript';\nimport * as fs from 'node:fs';\nimport MagicString from 'magic-string';\n\n// Lazy-load TypeScript to avoid top-level imports that break Cloudflare Workers.\n// The packing system is only used in Node.js CLI contexts, but the code gets\n// bundled into built-in-routes.js by tsup. A static import would appear at the\n// top level of the bundle, causing \"No such module typescript\" at deploy time.\nlet _ts: typeof TypeScript | undefined;\nexport async function loadTypeScript(): Promise<typeof TypeScript> {\n if (!_ts) _ts = await import('typescript') as typeof TypeScript;\n return _ts;\n}\n\n/**\n * Result of extracting uses from a tool definition.\n */\nexport interface ExtractUsesResult {\n /** Array of tool/prompt/agent names in the uses list */\n uses: string[];\n /** Whether the uses property was found */\n found: boolean;\n /** Line number where uses was found (1-indexed) */\n line?: number;\n}\n\n/**\n * Result of extracting tools from a prompt definition.\n */\nexport interface ExtractPromptToolsResult {\n /** Tool names in the tools array */\n tools: string[];\n /** Whether it's a mix of strings and objects */\n hasSubpromptConfigs: boolean;\n}\n\n/**\n * Extract the `uses` array from a defineTool call in source code.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Extraction result with uses array and metadata\n *\n * @example\n * ```typescript\n * const result = extractToolUses(`\n * export default defineTool({\n * description: 'My tool',\n * uses: ['helper_tool', 'other_agent:main'],\n * execute: async (state, args) => { ... }\n * });\n * `);\n * // result.uses = ['helper_tool', 'other_agent:main']\n * ```\n */\nexport async function extractToolUses(sourceCode: string): Promise<ExtractUsesResult> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'tool.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractUsesResult = {\n uses: [],\n found: false,\n };\n\n function visit(node: TypeScript.Node): void {\n // Look for defineTool({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineTool' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'uses' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'uses' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n result.found = true;\n result.line = sourceFile.getLineAndCharacterOfPosition(prop.getStart()).line + 1;\n\n // Extract string values from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.uses.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the `tools` array from a definePrompt call.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Array of tool names\n */\nexport async function extractPromptTools(sourceCode: string): Promise<ExtractPromptToolsResult> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractPromptToolsResult = {\n tools: [],\n hasSubpromptConfigs: false,\n };\n\n function visit(node: TypeScript.Node): void {\n // Look for definePrompt({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'tools' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'tools' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n // Extract tool names from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.tools.push(element.text);\n } else if (ts.isObjectLiteralExpression(element)) {\n // SubpromptConfig object - look for 'name' property\n result.hasSubpromptConfigs = true;\n for (const objProp of element.properties) {\n if (\n ts.isPropertyAssignment(objProp) &&\n ts.isIdentifier(objProp.name) &&\n objProp.name.text === 'name' &&\n ts.isStringLiteral(objProp.initializer)\n ) {\n result.tools.push(objProp.initializer.text);\n }\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the model name from a definePrompt call.\n */\nexport async function extractPromptModel(sourceCode: string): Promise<string | null> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let model: string | null = null;\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'model' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n model = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return model;\n}\n\n/**\n * Extract included prompts from a prompt's 'includes' array or structured prompt.\n */\nexport async function extractPromptIncludes(sourceCode: string): Promise<string[]> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const includes: string[] = [];\n\n function extractFromStructuredPrompt(arr: TypeScript.ArrayLiteralExpression): void {\n for (const element of arr.elements) {\n if (ts.isObjectLiteralExpression(element)) {\n // Look for { type: 'include', name: '...' }\n let hasIncludeType = false;\n let includeName: string | null = null;\n\n for (const prop of element.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'type' &&\n ts.isStringLiteral(prop.initializer) &&\n prop.initializer.text === 'include'\n ) {\n hasIncludeType = true;\n }\n if (\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n includeName = prop.initializer.text;\n }\n }\n }\n\n if (hasIncludeType && includeName && !includes.includes(includeName)) {\n includes.push(includeName);\n }\n }\n }\n }\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n // Check 'prompt' property for structured prompts\n if (\n prop.name.text === 'prompt' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n extractFromStructuredPrompt(prop.initializer);\n }\n\n // Also check 'includes' array if present\n if (\n prop.name.text === 'includes' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element) && !includes.includes(element.text)) {\n includes.push(element.text);\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return includes;\n}\n\n/**\n * Extract the prompt name from an agent's sideA or sideB configuration.\n */\nexport async function extractAgentPrompts(sourceCode: string): Promise<{ sideA?: string; sideB?: string }> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: { sideA?: string; sideB?: string } = {};\n\n function extractPromptFromSide(obj: TypeScript.ObjectLiteralExpression): string | undefined {\n for (const prop of obj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'prompt' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n return prop.initializer.text;\n }\n }\n return undefined;\n }\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'sideA' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideA = extractPromptFromSide(prop.initializer);\n }\n if (\n prop.name.text === 'sideB' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideB = extractPromptFromSide(prop.initializer);\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the 'description' property from a defineAgent call.\n */\nexport async function extractAgentDescription(sourceCode: string): Promise<string | null> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let description: string | null = null;\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'description' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n description = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return description;\n}\n\n/**\n * Extract the 'name' property value from a define* call.\n */\nexport async function extractDefinitionName(sourceCode: string): Promise<string | null> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'def.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let name: string | null = null;\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n (node.expression.text === 'defineTool' ||\n node.expression.text === 'definePrompt' ||\n node.expression.text === 'defineAgent' ||\n node.expression.text === 'defineModel' ||\n node.expression.text === 'defineHook') &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n name = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return name;\n}\n\n/**\n * Extract the fallbacks array from a defineModel call.\n */\nexport async function extractModelFallbacks(sourceCode: string): Promise<string[]> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'model.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const fallbacks: string[] = [];\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineModel' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'fallbacks' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n fallbacks.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return fallbacks;\n}\n\n// Note: injectPackageSignature was removed as part of the packed agent architecture redesign.\n// Packed packages now use a single index.ts with inline definitions instead of individual\n// transformed files with __package metadata.\n\n/**\n * Transform a bundled JavaScript file back to TypeScript export format.\n *\n * Converts bundled format:\n * ```javascript\n * // Bundled from: agents/agents/test.ts\n * // Local dependencies have been inlined\n *\n * import { defineAgent } from '@standardagents/builder';\n *\n * var test_agent = defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n *\n * export { test_agent as default };\n * ```\n *\n * To TypeScript export format:\n * ```typescript\n * import { defineAgent } from '@standardagents/builder';\n *\n * export default defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n * ```\n *\n * Uses TypeScript AST parsing + magic-string for safe, precise transformations.\n *\n * @param code - Bundled JavaScript source code\n * @returns Transformed TypeScript source code\n */\nexport async function transformBundledJs(code: string): Promise<string> {\n const ts = await loadTypeScript();\n const s = new MagicString(code);\n const sourceFile = ts.createSourceFile(\n 'file.js',\n code,\n ts.ScriptTarget.ESNext,\n true\n );\n\n // Find the first import statement to determine where real code starts\n let firstImportStart = -1;\n\n // Track what to remove and transform\n let varStatementInfo: {\n start: number;\n varNameEnd: number;\n fullStart: number;\n } | null = null;\n\n function visit(node: TypeScript.Node): void {\n // Find first import statement\n if (ts.isImportDeclaration(node) && firstImportStart === -1) {\n firstImportStart = node.getStart();\n }\n\n // Find: var NAME = defineX({...})\n if (ts.isVariableStatement(node)) {\n const decl = node.declarationList.declarations[0];\n if (\n decl &&\n decl.initializer &&\n ts.isCallExpression(decl.initializer)\n ) {\n const callExpr = decl.initializer.expression;\n if (\n ts.isIdentifier(callExpr) &&\n (callExpr.text === 'defineAgent' ||\n callExpr.text === 'definePrompt' ||\n callExpr.text === 'defineTool' ||\n callExpr.text === 'defineModel' ||\n callExpr.text === 'defineHook')\n ) {\n varStatementInfo = {\n fullStart: node.getFullStart(),\n start: node.getStart(),\n varNameEnd: decl.initializer.getStart(),\n };\n\n // Replace \"var NAME = \" with \"export default \"\n s.overwrite(varStatementInfo.start, varStatementInfo.varNameEnd, 'export default ');\n }\n }\n }\n\n // Find and remove: export { NAME as default };\n if (ts.isExportDeclaration(node)) {\n const exportClause = node.exportClause;\n if (exportClause && ts.isNamedExports(exportClause)) {\n for (const element of exportClause.elements) {\n // Check if this is \"NAME as default\"\n if (\n element.propertyName &&\n ts.isIdentifier(element.name) &&\n element.name.text === 'default'\n ) {\n // Remove the entire export statement\n s.remove(node.getFullStart(), node.getEnd());\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n // Remove leading comments before the first import\n if (firstImportStart > 0) {\n s.remove(0, firstImportStart);\n }\n\n return s.toString().trim() + '\\n';\n}\n\n/**\n * Metadata to inject into an agent definition.\n */\nexport interface AgentMetadata {\n packageName?: string;\n version?: string;\n author?: string;\n license?: string;\n}\n\n/**\n * Inject metadata properties into a defineAgent call.\n *\n * This function finds the defineAgent({ ... }) call in the TypeScript code\n * and inserts metadata properties (packageName, version, author, license)\n * after the name property.\n *\n * @param tsCode - TypeScript source code containing a defineAgent call\n * @param metadata - Metadata to inject\n * @returns Modified TypeScript code with metadata injected\n *\n * @example\n * ```typescript\n * const code = `export default defineAgent({\n * name: \"test_agent\",\n * type: \"ai_human\",\n * ...\n * });`;\n *\n * const result = injectAgentMetadata(code, {\n * packageName: 'standardagent-test',\n * version: '1.2.3',\n * author: 'Test Co',\n * license: 'MIT'\n * });\n *\n * // Result:\n * // export default defineAgent({\n * // name: \"test_agent\",\n * // packageName: \"standardagent-test\",\n * // version: \"1.2.3\",\n * // author: \"Test Co\",\n * // license: \"MIT\",\n * // type: \"ai_human\",\n * // ...\n * // });\n * ```\n */\nexport async function injectAgentMetadata(tsCode: string, metadata: AgentMetadata): Promise<string> {\n // Skip if no metadata to inject\n if (!metadata.packageName && !metadata.version && !metadata.author && !metadata.license) {\n return tsCode;\n }\n\n const ts = await loadTypeScript();\n const s = new MagicString(tsCode);\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n tsCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n function visit(node: TypeScript.Node): void {\n // Look for defineAgent({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'name' property to insert after it\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name'\n ) {\n // Build the metadata properties string\n const metadataProps: string[] = [];\n\n if (metadata.packageName) {\n metadataProps.push(`packageName: ${JSON.stringify(metadata.packageName)}`);\n }\n if (metadata.version) {\n metadataProps.push(`version: ${JSON.stringify(metadata.version)}`);\n }\n if (metadata.author) {\n metadataProps.push(`author: ${JSON.stringify(metadata.author)}`);\n }\n if (metadata.license) {\n metadataProps.push(`license: ${JSON.stringify(metadata.license)}`);\n }\n\n if (metadataProps.length > 0) {\n // Get the position right after the name property\n const propEnd = prop.getEnd();\n const afterProp = tsCode.substring(propEnd, propEnd + 1);\n\n // Insert metadata properties after the name property\n // If there's already a comma after name, insert after the comma\n // Otherwise, add a comma and then the metadata\n if (afterProp === ',') {\n // Insert after the comma (propEnd + 1)\n const insertText = `\\n ${metadataProps.join(',\\n ')},`;\n s.appendRight(propEnd + 1, insertText);\n } else {\n // No comma after name, add one along with metadata\n const insertText = `,\\n ${metadataProps.join(',\\n ')}`;\n s.appendRight(propEnd, insertText);\n }\n }\n\n return; // Found and processed, no need to continue\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n return s.toString();\n}\n","/**\n * Packing service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze agents and their dependencies\n * - Pack agents with all constituents using Rollup bundling\n * - Generate npm-ready package structures with TypeScript definitions\n *\n * The new Rollup-based approach:\n * - Preserves imports, constants, and helper functions\n * - Bundles local dependencies inline\n * - Keeps npm packages as external dependencies\n * - Creates separate files per constituent with re-exports in index.ts\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n// Rollup imports are done dynamically in bundleFile() to avoid loading\n// Node.js-only dependencies during Vite dev server startup\nimport type { Plugin, RollupOptions } from 'rollup';\nimport type {\n PackingAnalysis,\n ConstituentItem,\n PackingOptions,\n PackingResult,\n PackedMeta,\n ItemSelection,\n PackageMetadata,\n} from './types.js';\nimport { MetadataService } from './metadata-service.js';\nimport {\n extractToolUses,\n extractPromptTools,\n extractPromptModel,\n extractPromptIncludes,\n extractAgentPrompts,\n extractDefinitionName,\n extractModelFallbacks,\n extractAgentDescription,\n} from './ast-utils.js';\n\n/**\n * Service for packing agents with their dependencies.\n */\nexport class PackingService {\n /**\n * Resolve the version of an npm package from node_modules.\n *\n * @param pkgName - Package name (e.g., '@standardagents/spec')\n * @param rootDir - Root directory of the project\n * @returns Version specifier (e.g., '^1.2.3') or '*' if not found\n */\n protected resolvePackageVersion(pkgName: string, rootDir: string): string {\n const pkgJsonPath = path.join(rootDir, 'node_modules', pkgName, 'package.json');\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n return `^${pkgJson.version}`;\n } catch {\n // Fallback - use wildcard if we can't resolve\n return '*';\n }\n }\n /**\n * Analyze an agent to discover all its constituents.\n *\n * This performs static analysis on the agent definition and all\n * referenced prompts, tools, models, and hooks.\n *\n * @param agentName - Name of the agent to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with all discovered constituents\n */\n async analyzeAgent(agentName: string, rootDir: string): Promise<PackingAnalysis> {\n const agentsDir = path.join(rootDir, 'agents');\n const analysis: PackingAnalysis = {\n agent: agentName,\n primaryPrompt: '',\n constituents: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n agents: [],\n },\n shared: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n },\n warnings: [],\n errors: [],\n };\n\n // Load the agent file\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.errors.push(`Agent file not found: ${agentName}`);\n return analysis;\n }\n\n // Add agent to constituents\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n });\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = await extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt (primary)\n if (agentPrompts.sideA) {\n analysis.primaryPrompt = agentPrompts.sideA;\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Check for shared items (used by other agents)\n await this.checkSharedItems(agentsDir, analysis);\n\n return analysis;\n }\n\n /**\n * Generate a README for an analyzed agent.\n *\n * This is used during analysis to provide a pre-populated README\n * that can be edited in the PackModal before packing.\n *\n * @param analysis - The packing analysis result\n * @param rootDir - Root directory of the project\n * @returns Object with generatedReadme and agentDescription\n */\n async generateReadmeForAnalysis(\n analysis: PackingAnalysis,\n rootDir: string\n ): Promise<{ generatedReadme: string; agentDescription?: string }> {\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n\n // Try to extract description from agent file\n let agentDescription: string | undefined;\n const agentItem = analysis.constituents.agents.find(a => a.name === analysis.agent);\n if (agentItem?.filePath) {\n try {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = (await extractAgentDescription(agentSource)) || undefined;\n } catch {\n // Ignore errors reading agent file\n }\n }\n\n // Get suggested package name\n const suggestedPackageName = metadataService.suggestPackageName(undefined, analysis.agent);\n\n // Generate the README\n const generatedReadme = this.generateReadme(\n suggestedPackageName,\n analysis.agent,\n '1.0.0', // Default version, will be replaced in modal\n 'MIT', // Default license\n agentDescription\n );\n\n return { generatedReadme, agentDescription };\n }\n\n /**\n * Recursively analyze a prompt and its dependencies.\n */\n private async analyzePrompt(\n promptName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const promptFilePath = await this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) {\n analysis.warnings.push(`Prompt file not found: ${promptName}`);\n return;\n }\n\n const thisKey = `prompt:${promptName}`;\n\n // Add prompt to constituents (allow duplicates with different parentKey for tree display)\n // Use name+parentKey to avoid exact duplicates\n if (!analysis.constituents.prompts.some(p => p.name === promptName && p.parentKey === parentKey)) {\n analysis.constituents.prompts.push({\n name: promptName,\n filePath: promptFilePath,\n discoveredVia: 'agent-prompt',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`prompt:${promptName}`)) {\n return;\n }\n visited.add(`prompt:${promptName}`);\n\n // Read and analyze the prompt file\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n // Extract and analyze model\n const modelName = await extractPromptModel(promptSource);\n if (modelName) {\n await this.analyzeModel(modelName, agentsDir, analysis, visited, thisKey);\n }\n\n // Extract and analyze tools\n const { tools: toolNames } = await extractPromptTools(promptSource);\n for (const toolName of toolNames) {\n await this.analyzeTool(toolName, agentsDir, analysis, visited, 'prompt-tools', thisKey);\n }\n\n // Extract and analyze included prompts\n const includedPrompts = await extractPromptIncludes(promptSource);\n for (const includedPrompt of includedPrompts) {\n const item = analysis.constituents.prompts.find(p => p.name === includedPrompt);\n if (item) {\n if (item.discoveredVia === 'agent-prompt') {\n item.discoveredVia = 'prompt-includes';\n }\n }\n await this.analyzePrompt(includedPrompt, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a tool and its dependencies.\n * This also handles prompts-as-tools and agents-as-tools (handoffs).\n */\n private async analyzeTool(\n toolName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n discoveredVia: ConstituentItem['discoveredVia'],\n parentKey?: string\n ): Promise<void> {\n const thisKey = `tool:${toolName}`;\n\n // Check if it's a prompt being used as a tool\n const promptFilePath = await this.findFile(path.join(agentsDir, 'prompts'), toolName);\n if (promptFilePath) {\n // It's a prompt, analyze it (with parent tracking)\n await this.analyzePrompt(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n // Check if it's an agent being used as a tool (handoff)\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), toolName);\n if (agentFilePath) {\n // It's an agent handoff, analyze it recursively\n await this.analyzeNestedAgent(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n const toolFilePath = await this.findFile(path.join(agentsDir, 'tools'), toolName);\n if (!toolFilePath) {\n analysis.warnings.push(`Tool file not found: ${toolName}`);\n return;\n }\n\n // Add tool to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.tools.some(t => t.name === toolName && t.parentKey === parentKey)) {\n analysis.constituents.tools.push({\n name: toolName,\n filePath: toolFilePath,\n discoveredVia,\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`tool:${toolName}`)) {\n return;\n }\n visited.add(`tool:${toolName}`);\n\n // Read and analyze the tool file\n const toolSource = fs.readFileSync(toolFilePath, 'utf-8');\n\n // Extract uses array - this is the definitive list of tool dependencies\n // Since tools must declare their dependencies in `uses`, we rely on this\n // rather than trying to detect queueTool/invokeTool calls via AST\n const { uses } = await extractToolUses(toolSource);\n for (const usedItem of uses) {\n // Determine if it's a tool, prompt, or agent\n await this.analyzeTool(usedItem, agentsDir, analysis, visited, 'uses', thisKey);\n }\n }\n\n /**\n * Analyze a nested agent (used as a handoff target).\n */\n private async analyzeNestedAgent(\n agentName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.warnings.push(`Agent file not found: ${agentName}`);\n return;\n }\n\n const thisKey = `agent:${agentName}`;\n\n // Add agent to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.agents.some(a => a.name === agentName && a.parentKey === parentKey)) {\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'uses',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`agent:${agentName}`)) {\n return;\n }\n visited.add(`agent:${agentName}`);\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = await extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt\n if (agentPrompts.sideA) {\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, visited, thisKey);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a model and its fallbacks.\n */\n private async analyzeModel(\n modelName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const modelFilePath = await this.findFile(path.join(agentsDir, 'models'), modelName);\n if (!modelFilePath) {\n analysis.warnings.push(`Model file not found: ${modelName}`);\n return;\n }\n\n const thisKey = `model:${modelName}`;\n\n // Add model to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.models.some(m => m.name === modelName && m.parentKey === parentKey)) {\n analysis.constituents.models.push({\n name: modelName,\n filePath: modelFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`model:${modelName}`)) {\n return;\n }\n visited.add(`model:${modelName}`);\n\n // Read and analyze the model file for fallbacks\n const modelSource = fs.readFileSync(modelFilePath, 'utf-8');\n const fallbacks = await extractModelFallbacks(modelSource);\n\n // Recursively analyze fallback models\n for (const fallbackName of fallbacks) {\n await this.analyzeModel(fallbackName, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Check which items are shared with other agents.\n */\n private async checkSharedItems(\n agentsDir: string,\n analysis: PackingAnalysis\n ): Promise<void> {\n const agentsPath = path.join(agentsDir, 'agents');\n if (!fs.existsSync(agentsPath)) return;\n\n const agentFiles = fs.readdirSync(agentsPath).filter(f => f.endsWith('.ts'));\n\n for (const agentFile of agentFiles) {\n const otherAgentName = agentFile.replace('.ts', '');\n if (otherAgentName === analysis.agent) continue;\n\n // Analyze the other agent to see what it uses\n const otherAnalysis = await this.analyzeAgentLight(otherAgentName, path.dirname(agentsDir));\n\n // Check prompts\n for (const prompt of analysis.constituents.prompts) {\n if (otherAnalysis.prompts.includes(prompt.name)) {\n prompt.sharedWith.push(otherAgentName);\n if (!analysis.shared.prompts.includes(prompt.name)) {\n analysis.shared.prompts.push(prompt.name);\n }\n }\n }\n\n // Check tools\n for (const tool of analysis.constituents.tools) {\n if (otherAnalysis.tools.includes(tool.name)) {\n tool.sharedWith.push(otherAgentName);\n if (!analysis.shared.tools.includes(tool.name)) {\n analysis.shared.tools.push(tool.name);\n }\n }\n }\n\n // Check models\n for (const model of analysis.constituents.models) {\n if (otherAnalysis.models.includes(model.name)) {\n model.sharedWith.push(otherAgentName);\n if (!analysis.shared.models.includes(model.name)) {\n analysis.shared.models.push(model.name);\n }\n }\n }\n }\n }\n\n /**\n * Light analysis of an agent - just get the names of used items.\n */\n private async analyzeAgentLight(\n agentName: string,\n rootDir: string\n ): Promise<{ prompts: string[]; tools: string[]; models: string[] }> {\n const result = { prompts: [] as string[], tools: [] as string[], models: [] as string[] };\n const agentsDir = path.join(rootDir, 'agents');\n const visited = new Set<string>();\n\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) return result;\n\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = await extractAgentPrompts(agentSource);\n\n const analyzePromptLight = async (promptName: string) => {\n if (visited.has(promptName)) return;\n visited.add(promptName);\n\n result.prompts.push(promptName);\n\n const promptFilePath = await this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) return;\n\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n const modelName = await extractPromptModel(promptSource);\n if (modelName && !result.models.includes(modelName)) {\n result.models.push(modelName);\n }\n\n const { tools } = await extractPromptTools(promptSource);\n for (const tool of tools) {\n if (!result.tools.includes(tool)) {\n result.tools.push(tool);\n }\n }\n\n const includes = await extractPromptIncludes(promptSource);\n for (const inc of includes) {\n await analyzePromptLight(inc);\n }\n };\n\n if (agentPrompts.sideA) await analyzePromptLight(agentPrompts.sideA);\n if (agentPrompts.sideB) await analyzePromptLight(agentPrompts.sideB);\n\n return result;\n }\n\n /**\n * Pack an agent with all its dependencies using Rollup bundling.\n *\n * The packing format creates:\n * - dist/{type}/{name}.js - Individual bundled files per constituent\n * - dist/index.js - Re-exports and lazy loaders\n * - dist/index.d.ts - TypeScript type definitions\n * - package.json - With standardagent field and dependencies\n * - tsconfig.json - For building\n *\n * @param options - Packing options\n * @returns Packing result\n */\n async pack(options: PackingOptions): Promise<PackingResult> {\n const {\n agentName,\n rootDir,\n outputDir,\n version = '1.0.0',\n removeOriginals = false,\n packageId = `standardagent-${agentName.replace(/_/g, '-')}`,\n packageName,\n license,\n licenseOwner,\n itemSelections,\n readme,\n } = options;\n\n // Use packageName if provided, otherwise fall back to packageId\n const finalPackageName = packageName || packageId;\n\n const packedAt = Date.now();\n const meta: PackedMeta = {\n packageId,\n version,\n entryAgents: [agentName],\n packedAt,\n };\n\n const result: PackingResult = {\n success: false,\n packageId,\n outputPath: '',\n meta,\n filesCreated: [],\n warnings: [],\n };\n\n try {\n // Analyze the agent\n const analysis = await this.analyzeAgent(agentName, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n result.warnings = analysis.warnings;\n return result;\n }\n\n result.warnings = analysis.warnings;\n\n // Create output directory structure\n const pkgOutputDir = path.join(outputDir, packageId);\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'agents'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'prompts'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'tools'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'models'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'hooks'), { recursive: true });\n\n // Collect all items to bundle (deduplicate by name since constituents may have\n // multiple entries with different parentKeys for tree display purposes)\n const seenItems = new Set<string>();\n const allItems: Array<ConstituentItem & { type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook' }> = [];\n\n for (const a of analysis.constituents.agents) {\n const key = `agent:${a.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...a, type: 'agent' });\n }\n }\n for (const p of analysis.constituents.prompts) {\n const key = `prompt:${p.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...p, type: 'prompt' });\n }\n }\n for (const t of analysis.constituents.tools) {\n const key = `tool:${t.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...t, type: 'tool' });\n }\n }\n for (const m of analysis.constituents.models) {\n const key = `model:${m.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...m, type: 'model' });\n }\n }\n for (const h of analysis.constituents.hooks) {\n const key = `hook:${h.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...h, type: 'hook' });\n }\n }\n\n // Track external dependencies\n const externalDeps = new Map<string, string>();\n\n // Bundle each constituent file with Rollup\n for (const item of allItems) {\n // Input path for bundleFile (it will output .js)\n const outputPath = path.join(\n pkgOutputDir,\n 'dist',\n this.getTypeDir(item.type),\n `${item.name}.js`\n );\n\n const deps = await this.bundleFile(item.filePath, outputPath, rootDir);\n\n // Collect external dependencies\n for (const [depName, depVersion] of deps) {\n if (!externalDeps.has(depName)) {\n externalDeps.set(depName, depVersion);\n }\n }\n\n result.filesCreated.push(outputPath);\n }\n\n // Generate dist/index.js with re-exports\n const indexJs = this.generateReExportIndex(analysis, meta);\n const indexJsPath = path.join(pkgOutputDir, 'dist', 'index.js');\n fs.writeFileSync(indexJsPath, indexJs);\n result.filesCreated.push(indexJsPath);\n\n // Generate dist/index.d.ts with type definitions\n const indexDts = this.generateIndexDts(analysis);\n const indexDtsPath = path.join(pkgOutputDir, 'dist', 'index.d.ts');\n fs.writeFileSync(indexDtsPath, indexDts);\n result.filesCreated.push(indexDtsPath);\n\n // Generate package.json with collected dependencies\n const pkgJson = this.generatePackageJson(\n finalPackageName,\n version,\n agentName,\n externalDeps,\n rootDir,\n license,\n licenseOwner\n );\n const pkgJsonPath = path.join(pkgOutputDir, 'package.json');\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));\n result.filesCreated.push(pkgJsonPath);\n\n // Generate LICENSE file if license is specified\n if (license) {\n const licenseContent = this.generateLicenseFile(license, licenseOwner);\n const licensePath = path.join(pkgOutputDir, 'LICENSE');\n fs.writeFileSync(licensePath, licenseContent);\n result.filesCreated.push(licensePath);\n }\n\n // Generate README.md\n // If custom readme provided, use it; otherwise generate from agent description\n let readmeContent = readme;\n if (!readmeContent) {\n // Try to extract description from agent file\n const agentItem = analysis.constituents.agents.find(a => a.name === agentName);\n let agentDescription: string | undefined;\n if (agentItem?.filePath) {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = (await extractAgentDescription(agentSource)) || undefined;\n }\n readmeContent = this.generateReadme(\n finalPackageName,\n agentName,\n version,\n license,\n agentDescription\n );\n }\n const readmePath = path.join(pkgOutputDir, 'README.md');\n fs.writeFileSync(readmePath, readmeContent);\n result.filesCreated.push(readmePath);\n\n // Handle original files based on user selection or removeOriginals flag\n if (removeOriginals || itemSelections) {\n result.filesRemoved = [];\n\n for (const item of allItems) {\n // Check if user specified extraction for this item\n const selection = itemSelections?.find(s => s.name === item.name && s.type === item.type);\n const shouldRemove = selection\n ? selection.mode === 'extract'\n : (removeOriginals && item.sharedWith.length === 0);\n\n if (shouldRemove && fs.existsSync(item.filePath)) {\n fs.unlinkSync(item.filePath);\n result.filesRemoved.push(item.filePath);\n }\n }\n }\n\n // Save metadata for future pack/unpack cycles\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n const metadata: PackageMetadata = {\n packageName: finalPackageName,\n version,\n license: license || '',\n licenseOwner: licenseOwner || '',\n lastPackedAt: new Date().toISOString(),\n };\n await metadataService.write(agentName, metadata);\n\n result.success = true;\n result.outputPath = pkgOutputDir;\n result.meta = meta;\n\n return result;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n return result;\n }\n }\n\n /**\n * Bundle a single source file with its local dependencies using Rollup.\n *\n * Local files (from the same agents/ directory) are inlined.\n * npm packages are kept as external dependencies.\n * Output is bundled JavaScript with all local deps inlined.\n *\n * @returns Map of external dependencies (name -> version specifier)\n */\n protected async bundleFile(\n inputPath: string,\n outputPath: string,\n rootDir: string\n ): Promise<Map<string, string>> {\n // Dynamic imports to avoid loading Node.js-only dependencies at module init time\n const { rollup } = await import('rollup');\n const nodeResolve = (await import('@rollup/plugin-node-resolve')).default;\n const commonjs = (await import('@rollup/plugin-commonjs')).default;\n const esbuild = (await import('rollup-plugin-esbuild')).default;\n\n const externalDeps = new Map<string, string>();\n const agentsDir = path.join(rootDir, 'agents');\n // Capture method reference for use inside Rollup plugin\n const resolveVersion = this.resolvePackageVersion.bind(this);\n\n // Create a Rollup plugin to track and externalize non-local imports\n const trackExternalsPlugin: Plugin = {\n name: 'track-externals',\n resolveId(source, importer) {\n // Entry point (no importer) - let Rollup handle it\n if (!importer) {\n return null;\n }\n\n // Handle relative imports - these might be local agent files\n if (source.startsWith('./') || source.startsWith('../')) {\n const resolved = path.resolve(path.dirname(importer), source);\n // Try to find the file with .ts extension\n let tsResolved = resolved;\n if (!resolved.endsWith('.ts') && !resolved.endsWith('.js')) {\n if (fs.existsSync(`${resolved}.ts`)) {\n tsResolved = `${resolved}.ts`;\n } else if (fs.existsSync(`${resolved}.js`)) {\n tsResolved = `${resolved}.js`;\n } else if (fs.existsSync(`${resolved}/index.ts`)) {\n tsResolved = `${resolved}/index.ts`;\n }\n }\n // If it's within the agents directory, bundle it\n if (tsResolved.includes(agentsDir) || resolved.includes(agentsDir)) {\n return null; // Let Rollup resolve it normally (will be bundled)\n }\n return null;\n }\n\n // Absolute paths within agents dir - bundle them\n if (source.startsWith('/') && source.includes(agentsDir)) {\n return null;\n }\n\n // All non-relative imports are external (npm packages)\n // Track the dependency\n const pkgName = source.startsWith('@')\n ? source.split('/').slice(0, 2).join('/')\n : source.split('/')[0];\n\n // Determine version specifier based on package\n if (pkgName.startsWith('@standardagents/')) {\n externalDeps.set(pkgName, resolveVersion(pkgName, rootDir));\n } else if (pkgName === 'zod') {\n externalDeps.set(pkgName, '^4.0.0');\n } else {\n externalDeps.set(pkgName, '*');\n }\n\n return { id: source, external: true };\n },\n };\n\n const rollupOptions: RollupOptions = {\n input: inputPath,\n plugins: [\n trackExternalsPlugin,\n nodeResolve({\n extensions: ['.ts', '.js'],\n }),\n commonjs(),\n esbuild({\n target: 'es2022',\n sourceMap: false,\n }),\n ],\n onwarn(warning, warn) {\n // Suppress certain warnings\n if (warning.code === 'UNRESOLVED_IMPORT') return;\n if (warning.code === 'CIRCULAR_DEPENDENCY') return;\n warn(warning);\n },\n };\n\n const bundle = await rollup(rollupOptions);\n\n try {\n const { output } = await bundle.generate({\n format: 'esm',\n exports: 'named',\n });\n\n // The output is bundled JS with all local dependencies inlined\n // and external npm packages preserved as imports\n const bundledCode = output[0].code;\n\n // Add a header comment showing the original source\n const header = `// Bundled from: ${path.relative(rootDir, inputPath)}\\n// Local dependencies have been inlined\\n\\n`;\n\n // Write the bundled JS output\n fs.writeFileSync(outputPath, header + bundledCode);\n\n await bundle.close();\n } catch (error) {\n await bundle.close();\n throw error;\n }\n\n return externalDeps;\n }\n\n /**\n * Get the directory name for a constituent type.\n */\n private getTypeDir(type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook'): string {\n switch (type) {\n case 'agent': return 'agents';\n case 'prompt': return 'prompts';\n case 'tool': return 'tools';\n case 'model': return 'models';\n case 'hook': return 'hooks';\n }\n }\n\n /**\n * Deduplicate constituents by name (for packing, not for tree display).\n */\n private deduplicateConstituents(analysis: PackingAnalysis): {\n agents: ConstituentItem[];\n prompts: ConstituentItem[];\n tools: ConstituentItem[];\n models: ConstituentItem[];\n hooks: ConstituentItem[];\n } {\n const dedupe = <T extends { name: string }>(items: T[]): T[] => {\n const seen = new Set<string>();\n return items.filter(item => {\n if (seen.has(item.name)) return false;\n seen.add(item.name);\n return true;\n });\n };\n\n return {\n agents: dedupe(analysis.constituents.agents),\n prompts: dedupe(analysis.constituents.prompts),\n tools: dedupe(analysis.constituents.tools),\n models: dedupe(analysis.constituents.models),\n hooks: dedupe(analysis.constituents.hooks),\n };\n }\n\n /**\n * Check if a name is a valid JavaScript/TypeScript identifier.\n */\n private isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n }\n\n /**\n * Quote a property/export name if it contains non-identifier characters.\n * JavaScript identifiers must start with a letter, underscore, or dollar sign,\n * and contain only letters, digits, underscores, or dollar signs.\n */\n private quoteName(name: string): string {\n if (this.isValidIdentifier(name)) {\n return name;\n }\n // Quote names with special characters (like hyphens)\n return `'${name}'`;\n }\n\n /**\n * Generate the dist/index.js file with re-exports and lazy loaders.\n */\n private generateReExportIndex(analysis: PackingAnalysis, meta: PackedMeta): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n '// Packed agent: ' + analysis.agent,\n '// Generated by @standardagents/builder',\n '',\n ];\n\n // Generate direct re-exports\n for (const agent of constituents.agents) {\n lines.push(`export { default as ${this.quoteName(agent.name)} } from './agents/${agent.name}.js';`);\n }\n for (const prompt of constituents.prompts) {\n lines.push(`export { default as ${this.quoteName(prompt.name)} } from './prompts/${prompt.name}.js';`);\n }\n for (const tool of constituents.tools) {\n lines.push(`export { default as ${this.quoteName(tool.name)} } from './tools/${tool.name}.js';`);\n }\n for (const model of constituents.models) {\n lines.push(`export { default as ${this.quoteName(model.name)} } from './models/${model.name}.js';`);\n }\n for (const hook of constituents.hooks) {\n lines.push(`export { default as ${this.quoteName(hook.name)} } from './hooks/${hook.name}.js';`);\n }\n\n lines.push('');\n\n // Generate agents registry with lazy loaders\n lines.push('// Registry exports for lazy loading');\n lines.push('export const agents = {');\n for (const agent of constituents.agents) {\n lines.push(` ${this.quoteName(agent.name)}: async () => (await import('./agents/${agent.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts registry\n lines.push('export const prompts = {');\n for (const prompt of constituents.prompts) {\n lines.push(` ${this.quoteName(prompt.name)}: async () => (await import('./prompts/${prompt.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools registry\n lines.push('export const tools = {');\n for (const tool of constituents.tools) {\n lines.push(` ${this.quoteName(tool.name)}: async () => (await import('./tools/${tool.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models registry\n lines.push('export const models = {');\n for (const model of constituents.models) {\n lines.push(` ${this.quoteName(model.name)}: async () => (await import('./models/${model.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks registry\n lines.push('export const hooks = {');\n for (const hook of constituents.hooks) {\n lines.push(` ${this.quoteName(hook.name)}: async () => (await import('./hooks/${hook.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate __meta export\n lines.push('export const __meta = ' + JSON.stringify(meta, null, 2) + ';');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the dist/index.d.ts file with type definitions.\n */\n private generateIndexDts(analysis: PackingAnalysis): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n 'import type {',\n ' AgentDefinition,',\n ' PromptDefinition,',\n ' ToolDefinition,',\n ' ModelDefinition,',\n ' PackedMeta,',\n \"} from '@standardagents/spec';\",\n '',\n 'type DefinitionLoader<T> = () => Promise<T>;',\n '',\n ];\n\n // Generate direct exports (only for valid identifiers)\n for (const agent of constituents.agents) {\n if (this.isValidIdentifier(agent.name)) {\n lines.push(`export declare const ${agent.name}: AgentDefinition;`);\n }\n }\n for (const prompt of constituents.prompts) {\n if (this.isValidIdentifier(prompt.name)) {\n lines.push(`export declare const ${prompt.name}: PromptDefinition;`);\n }\n }\n for (const tool of constituents.tools) {\n if (this.isValidIdentifier(tool.name)) {\n lines.push(`export declare const ${tool.name}: ToolDefinition<unknown, any, any>;`);\n }\n }\n for (const model of constituents.models) {\n if (this.isValidIdentifier(model.name)) {\n lines.push(`export declare const ${model.name}: ModelDefinition;`);\n }\n }\n for (const hook of constituents.hooks) {\n if (this.isValidIdentifier(hook.name)) {\n lines.push(`export declare const ${hook.name}: unknown;`);\n }\n }\n lines.push('');\n\n // Generate agents type\n lines.push('export declare const agents: {');\n for (const agent of constituents.agents) {\n lines.push(` readonly ${this.quoteName(agent.name)}: DefinitionLoader<AgentDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts type\n lines.push('export declare const prompts: {');\n for (const prompt of constituents.prompts) {\n lines.push(` readonly ${this.quoteName(prompt.name)}: DefinitionLoader<PromptDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools type\n lines.push('export declare const tools: {');\n for (const tool of constituents.tools) {\n lines.push(` readonly ${this.quoteName(tool.name)}: DefinitionLoader<ToolDefinition<unknown, any, any>>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models type\n lines.push('export declare const models: {');\n for (const model of constituents.models) {\n lines.push(` readonly ${this.quoteName(model.name)}: DefinitionLoader<ModelDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks type\n lines.push('export declare const hooks: {');\n for (const hook of constituents.hooks) {\n lines.push(` readonly ${this.quoteName(hook.name)}: DefinitionLoader<unknown>;`);\n }\n lines.push('};');\n lines.push('');\n\n lines.push('export declare const __meta: PackedMeta;');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the package.json file with dependencies.\n */\n private generatePackageJson(\n packageName: string,\n version: string,\n agentName: string,\n externalDeps: Map<string, string>,\n rootDir: string,\n license?: string,\n licenseOwner?: string\n ): Record<string, unknown> {\n // Build dependencies object, ensuring @standardagents/spec is included\n const dependencies: Record<string, string> = {\n '@standardagents/spec': this.resolvePackageVersion('@standardagents/spec', rootDir),\n };\n\n for (const [name, ver] of externalDeps) {\n dependencies[name] = ver;\n }\n\n const pkgJson: Record<string, unknown> = {\n name: packageName,\n version,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n },\n keywords: ['standardagent'],\n standardagent: {\n entryAgents: [agentName],\n },\n files: license ? ['dist', 'LICENSE', 'README.md'] : ['dist', 'README.md'],\n dependencies,\n };\n\n // Add license if specified\n if (license) {\n pkgJson.license = license;\n }\n\n // Add author if license owner specified\n if (licenseOwner) {\n pkgJson.author = licenseOwner;\n }\n\n return pkgJson;\n }\n\n /**\n * Generate LICENSE file content for common licenses.\n */\n private generateLicenseFile(license: string, owner?: string): string {\n const year = new Date().getFullYear();\n const copyrightHolder = owner || '[COPYRIGHT HOLDER]';\n\n switch (license) {\n case 'MIT':\n return `MIT License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n\n case 'Apache-2.0':\n return ` Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n Copyright ${year} ${copyrightHolder}\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n`;\n\n case 'ISC':\n return `ISC License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n`;\n\n case 'GPL-3.0':\n return `GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (c) ${year} ${copyrightHolder}\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>.\n`;\n\n case 'BSD-3-Clause':\n return `BSD 3-Clause License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n`;\n\n case 'Unlicensed':\n case 'UNLICENSED':\n return `Copyright (c) ${year} ${copyrightHolder}\n\nAll Rights Reserved.\n\nThis software and associated documentation files (the \"Software\") are\nproprietary and confidential. Unauthorized copying, modification, distribution,\nor use of the Software, via any medium, is strictly prohibited.\n`;\n\n default:\n return `${license}\n\nCopyright (c) ${year} ${copyrightHolder}\n`;\n }\n }\n\n /**\n * Get information about a packed package.\n *\n * Reads the package.json and README.md from a packed package directory.\n * Used by the packed-info API endpoint to show package details before publishing.\n *\n * @param packageId - The package directory name (e.g., 'standardagent-my-agent')\n * @param rootDir - Root directory of the project\n * @returns Package info or null if not found\n */\n getPackedInfo(\n packageId: string,\n rootDir: string\n ): {\n packageName: string;\n version: string;\n license?: string;\n author?: string;\n entryAgents: string[];\n readme?: string;\n } | null {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n\n // Try to find the package directory\n let packageDir = path.join(packedDir, packageId);\n\n if (!fs.existsSync(packageDir)) {\n // Try alternate naming conventions\n if (!fs.existsSync(packedDir)) {\n return null;\n }\n\n const dirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n const matchingDir = dirs.find(d =>\n d === packageId ||\n d === `standardagent-${packageId}` ||\n d === `standardagent-${packageId.replace(/_/g, '-')}`\n );\n\n if (!matchingDir) {\n return null;\n }\n\n packageDir = path.join(packedDir, matchingDir);\n }\n\n // Read package.json\n const pkgJsonPath = path.join(packageDir, 'package.json');\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Read README.md if it exists\n let readme: string | undefined;\n const readmePath = path.join(packageDir, 'README.md');\n if (fs.existsSync(readmePath)) {\n readme = fs.readFileSync(readmePath, 'utf-8');\n }\n\n return {\n packageName: pkgJson.name,\n version: pkgJson.version,\n license: pkgJson.license,\n author: pkgJson.author,\n entryAgents: pkgJson.standardagent?.entryAgents || [],\n readme,\n };\n }\n\n /**\n * List all packed packages in the workspace.\n *\n * @param rootDir - Root directory of the project\n * @returns Array of package directory names\n */\n listPackedPackages(rootDir: string): string[] {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n if (!fs.existsSync(packedDir)) {\n return [];\n }\n\n return fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n }\n\n /**\n * Generate README.md content for a packed agent.\n *\n * @param packageName - The npm package name\n * @param agentName - The agent name\n * @param version - The package version\n * @param license - The license type\n * @param description - Optional description from the agent definition\n * @returns README markdown content\n */\n generateReadme(\n packageName: string,\n agentName: string,\n version: string,\n license?: string,\n description?: string\n ): string {\n const desc = description || 'A Standard Agent package.';\n\n return `# ${packageName}\n\n${desc}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${packageName}\n\\`\\`\\`\n\n## Usage\n\nThis is a [Standard Agent](https://standardagentbuilder.com) package. To use it:\n\n1. Install in your Standard Agents project\n2. The agent will be automatically discovered and available\n\n\\`\\`\\`typescript\n// Create a thread with this agent\nconst thread = await client.createThread({\n agent_id: '${packageName}/${agentName}'\n});\n\\`\\`\\`\n\n## License\n\n${license || 'See LICENSE file'}\n`;\n }\n\n /**\n * Find a file by name in a directory.\n */\n private async findFile(dir: string, name: string): Promise<string | null> {\n if (!fs.existsSync(dir)) {\n return null;\n }\n\n // Try exact match with .ts extension\n const exactPath = path.join(dir, `${name}.ts`);\n if (fs.existsSync(exactPath)) {\n return exactPath;\n }\n\n // Try finding by name property in files\n const files = fs.readdirSync(dir).filter(f => f.endsWith('.ts'));\n for (const file of files) {\n const filePath = path.join(dir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const extractedName = await extractDefinitionName(source);\n if (extractedName === name) {\n return filePath;\n }\n }\n\n return null;\n }\n\n /**\n * List all agents in the workspace.\n */\n async listAgents(rootDir: string): Promise<string[]> {\n const agentsDir = path.join(rootDir, 'agents', 'agents');\n if (!fs.existsSync(agentsDir)) {\n return [];\n }\n\n const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.ts'));\n const agents: string[] = [];\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const name = await extractDefinitionName(source);\n if (name) {\n agents.push(name);\n } else {\n agents.push(file.replace('.ts', ''));\n }\n }\n\n return agents;\n }\n}\n","/**\n * Package discovery service for Standard Agents.\n *\n * Discovers packed agent packages from:\n * - npm packages (by keyword, naming convention, or standardagent field)\n * - Local agents/packed/ directory\n *\n * Packages are detected by checking for the `standardagent` field in\n * package.json, not by looking for manifest.json.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { DiscoveredPackage, PackageSignature } from './types.js';\n\n/**\n * Configuration for package discovery.\n */\nexport interface DiscoveryConfig {\n /** Root directory of the project */\n rootDir: string;\n /** Directory for local packed agents (default: agents/packed) */\n packedDir?: string;\n /** Whether to scan npm packages (default: true) */\n scanNpm?: boolean;\n /** Whether to scan local packed directory (default: true) */\n scanLocal?: boolean;\n}\n\n/**\n * Service for discovering packed agent packages.\n */\nexport class PackageDiscoveryService {\n private config: Required<DiscoveryConfig>;\n\n constructor(config: DiscoveryConfig) {\n this.config = {\n rootDir: config.rootDir,\n packedDir: config.packedDir ?? path.join(config.rootDir, 'agents', 'packed'),\n scanNpm: config.scanNpm ?? true,\n scanLocal: config.scanLocal ?? true,\n };\n }\n\n /**\n * Discover all packed agent packages.\n *\n * @returns Array of discovered packages\n */\n async discoverPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (this.config.scanNpm) {\n const npmPackages = await this.discoverNpmPackages();\n packages.push(...npmPackages);\n }\n\n if (this.config.scanLocal) {\n const localPackages = await this.discoverLocalPackages();\n packages.push(...localPackages);\n }\n\n return packages;\n }\n\n /**\n * Discover npm packages that are Standard Agents packages.\n *\n * Looks for packages with:\n * - \"standardagent\" keyword in package.json\n * - \"standardagent-*\" prefix in name\n * - \"@standardagents/*\" scope\n * - \"standardagent\" field in package.json\n */\n private async discoverNpmPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n const nodeModulesDir = path.join(this.config.rootDir, 'node_modules');\n\n if (!fs.existsSync(nodeModulesDir)) {\n return packages;\n }\n\n // Scan root level packages\n const rootEntries = await this.scanDirectory(nodeModulesDir);\n for (const entry of rootEntries) {\n if (entry.startsWith('.')) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package - scan contents\n const scopeDir = path.join(nodeModulesDir, entry);\n const scopeEntries = await this.scanDirectory(scopeDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const pkgDir = path.join(scopeDir, scopedPkg);\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkNpmPackage(pkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkgDir = path.join(nodeModulesDir, entry);\n const pkg = await this.checkNpmPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if an npm package is a Standard Agent package.\n *\n * Detection is based on the `standardagent` field in package.json,\n * which must contain `entryAgents` array.\n */\n private async checkNpmPackage(\n pkgDir: string,\n pkgName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Check if this is a Standard Agent package\n const isStandardAgent =\n // Has \"standardagent\" keyword\n pkgJson.keywords?.includes('standardagent') ||\n // Has \"standardagent-*\" prefix\n pkgName.startsWith('standardagent-') ||\n // Has \"@standardagents/*\" scope\n pkgName.startsWith('@standardagents/') ||\n // Has \"standardagent\" field\n pkgJson.standardagent !== undefined;\n\n if (!isStandardAgent) {\n return null;\n }\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n // Might be a different kind of standardagent package\n // (like @standardagents/builder itself)\n return null;\n }\n\n return {\n packageId: pkgJson.name || pkgName,\n version: pkgJson.version || '0.0.0',\n source: 'npm',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading npm package ${pkgName}:`, error);\n return null;\n }\n }\n\n /**\n * Discover local packed agents from agents/packed/ directory.\n * Handles both regular packages and scoped packages (@scope/name).\n */\n private async discoverLocalPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (!fs.existsSync(this.config.packedDir)) {\n return packages;\n }\n\n const entries = await this.scanDirectory(this.config.packedDir);\n\n for (const entry of entries) {\n if (entry.startsWith('.')) continue;\n\n const pkgDir = path.join(this.config.packedDir, entry);\n const stat = fs.statSync(pkgDir);\n\n if (!stat.isDirectory()) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package directory - scan contents for actual packages\n const scopeEntries = await this.scanDirectory(pkgDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const scopedPkgDir = path.join(pkgDir, scopedPkg);\n const scopedStat = fs.statSync(scopedPkgDir);\n\n if (!scopedStat.isDirectory()) continue;\n\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkLocalPackage(scopedPkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkg = await this.checkLocalPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if a local directory is a packed agent package.\n *\n * Detection is based on the `standardagent` field in package.json.\n */\n private async checkLocalPackage(\n pkgDir: string,\n dirName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n return null;\n }\n\n return {\n packageId: pkgJson.name || dirName,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading local package ${dirName}:`, error);\n return null;\n }\n }\n\n /**\n * Scan a directory and return entry names.\n */\n private async scanDirectory(dir: string): Promise<string[]> {\n if (!fs.existsSync(dir)) {\n return [];\n }\n\n const entries = fs.readdirSync(dir);\n return entries;\n }\n\n /**\n * Validate a standardagent field structure in package.json.\n */\n static validateStandardAgentField(field: unknown): field is { entryAgents: string[] } {\n if (typeof field !== 'object' || field === null) {\n return false;\n }\n\n const f = field as Record<string, unknown>;\n\n return (\n Array.isArray(f.entryAgents) &&\n f.entryAgents.length > 0 &&\n f.entryAgents.every((e: unknown) => typeof e === 'string')\n );\n }\n\n /**\n * Get a package by ID.\n */\n async getPackage(packageId: string): Promise<DiscoveredPackage | null> {\n const packages = await this.discoverPackages();\n return packages.find(p => p.packageId === packageId) ?? null;\n }\n\n /**\n * Create a package signature from a discovered package.\n *\n * Note: packedAt is set to current time since it's no longer\n * stored in a manifest file.\n */\n static createSignature(pkg: DiscoveredPackage): PackageSignature {\n return {\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n packedAt: Date.now(),\n };\n }\n}\n\n/**\n * Convenience function to discover all packages.\n */\nexport async function discoverPackages(rootDir: string): Promise<DiscoveredPackage[]> {\n const service = new PackageDiscoveryService({ rootDir });\n return service.discoverPackages();\n}\n","/**\n * Unpacking service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze packed packages to discover exportable items\n * - Transform bundled JavaScript back to TypeScript source files\n * - Restore packed agents to editable source files\n *\n * Uses AST-based transformation (TypeScript Compiler API + magic-string)\n * to accurately preserve all code including Zod schemas and execute functions.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type * as TypeScript from 'typescript';\nimport type {\n UnpackOptions,\n UnpackResult,\n UnpackAnalysis,\n UnpackableItem,\n UnpackItemSelection,\n DiscoveredPackage,\n} from './types.js';\nimport { PackageDiscoveryService } from './discovery.js';\nimport {\n loadTypeScript,\n transformBundledJs,\n extractAgentPrompts,\n extractPromptTools,\n extractPromptModel,\n extractToolUses,\n injectAgentMetadata,\n type AgentMetadata,\n} from './ast-utils.js';\n\n/**\n * Registry item type for consistent iteration.\n */\ntype ItemType = 'agent' | 'prompt' | 'tool' | 'model' | 'hook';\n\n/**\n * Maps type to directory name (plural form).\n */\nconst TYPE_TO_DIR: Record<ItemType, string> = {\n agent: 'agents',\n prompt: 'prompts',\n tool: 'tools',\n model: 'models',\n hook: 'hooks',\n};\n\n/**\n * Service for unpacking packed agent packages.\n */\nexport class UnpackingService {\n /**\n * Analyze a package to discover what can be unpacked.\n *\n * @param packageId - Package ID to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with items that can be unpacked\n */\n async analyzeUnpack(packageId: string, rootDir: string): Promise<UnpackAnalysis> {\n const analysis: UnpackAnalysis = {\n packageId,\n version: '',\n source: 'local',\n canUnpack: false,\n items: [],\n warnings: [],\n errors: [],\n };\n\n try {\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n\n if (!pkg) {\n analysis.errors.push(`Package not found: ${packageId}`);\n return analysis;\n }\n\n analysis.version = pkg.version;\n analysis.source = pkg.source;\n\n // Read and parse the index.js to discover registry items\n const indexPath = path.join(pkg.path, 'dist', 'index.js');\n if (!fs.existsSync(indexPath)) {\n analysis.errors.push(`Package index not found: ${indexPath}`);\n return analysis;\n }\n\n const indexContent = fs.readFileSync(indexPath, 'utf-8');\n const registryItems = await this.parseIndexExports(indexContent);\n\n // Build a map of all available items for quick lookup\n const availableItems = new Map<string, { type: ItemType; name: string }>();\n for (const item of registryItems) {\n availableItems.set(`${item.type}:${item.name}`, item);\n }\n\n // Read bundled files to discover relationships\n const agentsDir = path.join(rootDir, 'agents');\n const itemsWithRelations: UnpackableItem[] = [];\n\n // Process each item and discover its relationships\n for (const item of registryItems) {\n const targetPath = path.join(agentsDir, TYPE_TO_DIR[item.type], `${item.name}.ts`);\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const existsGlobally = this.fileExists(targetPath);\n const sourceExists = fs.existsSync(sourcePath);\n\n if (!sourceExists) {\n analysis.warnings.push(`Source file not found for ${item.type} \"${item.name}\": ${sourcePath}`);\n continue;\n }\n\n // Read the bundled file to discover relationships\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n const children = await this.discoverRelationships(item.type, item.name, bundledCode, availableItems);\n\n // Add the item itself (no parentKey for root-level items initially)\n itemsWithRelations.push({\n name: item.name,\n type: item.type,\n targetPath,\n existsGlobally,\n action: existsGlobally ? 'skip' : 'generate',\n });\n\n // Add children with parentKey\n for (const child of children) {\n const childTargetPath = path.join(agentsDir, TYPE_TO_DIR[child.type], `${child.name}.ts`);\n const childSourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[child.type], `${child.name}.js`);\n const childExists = this.fileExists(childTargetPath);\n const childSourceExists = fs.existsSync(childSourcePath);\n\n if (!childSourceExists) {\n continue; // Skip if source doesn't exist\n }\n\n itemsWithRelations.push({\n name: child.name,\n type: child.type,\n targetPath: childTargetPath,\n existsGlobally: childExists,\n action: childExists ? 'skip' : 'generate',\n parentKey: `${item.type}:${item.name}`,\n });\n }\n }\n\n // Deduplicate items (keep first occurrence, but allow duplicates with different parentKeys)\n analysis.items = itemsWithRelations;\n\n // Add warning if all items already exist\n const itemsToGenerate = analysis.items.filter(i => i.action === 'generate');\n if (itemsToGenerate.length === 0 && analysis.items.length > 0) {\n analysis.warnings.push('All items already exist in the global namespace. Nothing to unpack.');\n }\n\n analysis.canUnpack = itemsToGenerate.length > 0;\n\n } catch (error) {\n analysis.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return analysis;\n }\n\n /**\n * Discover relationships from a bundled file.\n * Returns child items that this item references.\n */\n private async discoverRelationships(\n type: ItemType,\n name: string,\n bundledCode: string,\n availableItems: Map<string, { type: ItemType; name: string }>\n ): Promise<Array<{ type: ItemType; name: string }>> {\n const children: Array<{ type: ItemType; name: string }> = [];\n\n if (type === 'agent') {\n // Extract prompts from agent's sideA and sideB\n const prompts = await extractAgentPrompts(bundledCode);\n if (prompts.sideA && availableItems.has(`prompt:${prompts.sideA}`)) {\n children.push({ type: 'prompt', name: prompts.sideA });\n }\n if (prompts.sideB && availableItems.has(`prompt:${prompts.sideB}`)) {\n children.push({ type: 'prompt', name: prompts.sideB });\n }\n } else if (type === 'prompt') {\n // Extract tools and model from prompt\n const toolsResult = await extractPromptTools(bundledCode);\n for (const toolName of toolsResult.tools) {\n // Tool could be a tool or an agent (exposeAsTool)\n if (availableItems.has(`tool:${toolName}`)) {\n children.push({ type: 'tool', name: toolName });\n } else if (availableItems.has(`agent:${toolName}`)) {\n children.push({ type: 'agent', name: toolName });\n }\n }\n\n const model = await extractPromptModel(bundledCode);\n if (model && availableItems.has(`model:${model}`)) {\n children.push({ type: 'model', name: model });\n }\n } else if (type === 'tool') {\n // Extract uses from tool\n const usesResult = await extractToolUses(bundledCode);\n for (const useName of usesResult.uses) {\n // Uses can reference tools, prompts, or agents\n // Format can be \"tool_name\" or \"agent_name:prompt_name\"\n const colonIndex = useName.indexOf(':');\n if (colonIndex > 0) {\n // agent:prompt format\n const agentName = useName.substring(0, colonIndex);\n if (availableItems.has(`agent:${agentName}`)) {\n children.push({ type: 'agent', name: agentName });\n }\n } else {\n // Simple name - could be tool, prompt, or agent\n if (availableItems.has(`tool:${useName}`)) {\n children.push({ type: 'tool', name: useName });\n } else if (availableItems.has(`prompt:${useName}`)) {\n children.push({ type: 'prompt', name: useName });\n } else if (availableItems.has(`agent:${useName}`)) {\n children.push({ type: 'agent', name: useName });\n }\n }\n }\n }\n\n return children;\n }\n\n /**\n * Unpack a packed agent package by transforming bundled JS back to TypeScript.\n *\n * @param options - Unpacking options\n * @returns Result of the unpacking operation\n */\n async unpack(options: UnpackOptions): Promise<UnpackResult> {\n const { packageId, rootDir, deletePackage = false, itemSelections } = options;\n\n const result: UnpackResult = {\n success: false,\n packageId,\n filesGenerated: [],\n filesSkipped: [],\n packageDeleted: false,\n warnings: [],\n };\n\n try {\n // First analyze to get the items\n const analysis = await this.analyzeUnpack(packageId, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n return result;\n }\n\n result.warnings.push(...analysis.warnings);\n\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n if (!pkg) {\n result.error = `Package not found: ${packageId}`;\n return result;\n }\n\n // Apply item selections if provided\n const itemsToProcess = this.applySelections(analysis.items, itemSelections);\n\n // Read package.json to get metadata for agent injection\n const pkgJsonPath = path.join(pkg.path, 'package.json');\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Extract author from package.json (can be string or object)\n let author = '';\n if (typeof pkgJson.author === 'string') {\n author = pkgJson.author;\n } else if (pkgJson.author?.name) {\n author = pkgJson.author.name;\n }\n\n // Build metadata for agent injection\n const agentMetadata: AgentMetadata = {\n packageName: pkgJson.name || undefined,\n version: pkgJson.version || undefined,\n author: author || undefined,\n license: pkgJson.license || undefined,\n };\n\n // Deduplicate by type:name (process each unique item only once)\n const processedItems = new Set<string>();\n\n for (const item of itemsToProcess) {\n const itemKey = `${item.type}:${item.name}`;\n if (processedItems.has(itemKey)) {\n continue; // Skip duplicates\n }\n processedItems.add(itemKey);\n\n if (item.action === 'skip') {\n result.filesSkipped.push(item.targetPath);\n continue;\n }\n\n try {\n // Read the bundled JS file\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n\n // Transform using AST\n let tsCode = await transformBundledJs(bundledCode);\n\n // For agents, inject metadata from package.json so it persists through pack/unpack cycles\n if (item.type === 'agent') {\n tsCode = await injectAgentMetadata(tsCode, agentMetadata);\n }\n\n // Ensure directory exists\n const dir = path.dirname(item.targetPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Write the TypeScript file\n fs.writeFileSync(item.targetPath, tsCode);\n result.filesGenerated.push(item.targetPath);\n\n } catch (error) {\n result.warnings.push(\n `Failed to generate ${item.type} \"${item.name}\": ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n // Delete package if requested and it's a local package\n if (deletePackage && pkg.source === 'local') {\n try {\n this.deleteDirectory(pkg.path);\n result.packageDeleted = true;\n } catch (error) {\n result.warnings.push(\n `Failed to delete package: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n } else if (deletePackage && pkg.source === 'npm') {\n result.warnings.push('Cannot delete npm packages. Use npm uninstall instead.');\n }\n\n result.success = true;\n\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n }\n\n /**\n * Parse the index.js file to extract registry items.\n *\n * Looks for patterns like:\n * ```javascript\n * export const agents = {\n * support_agent: async () => (await import('./agents/support_agent.js')).default,\n * };\n * ```\n */\n private async parseIndexExports(indexContent: string): Promise<Array<{ name: string; type: ItemType }>> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'index.js',\n indexContent,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const items: Array<{ name: string; type: ItemType }> = [];\n const registryTypes: ItemType[] = ['agent', 'prompt', 'tool', 'model', 'hook'];\n\n function visit(node: TypeScript.Node): void {\n // Look for: export const agents = { ... }\n if (\n ts.isVariableStatement(node) &&\n node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n for (const decl of node.declarationList.declarations) {\n if (!ts.isIdentifier(decl.name)) continue;\n\n const varName = decl.name.text;\n\n // Check if this is a registry (agents, prompts, tools, models, hooks)\n let itemType: ItemType | null = null;\n for (const type of registryTypes) {\n if (varName === TYPE_TO_DIR[type]) {\n itemType = type;\n break;\n }\n }\n\n if (itemType && decl.initializer && ts.isObjectLiteralExpression(decl.initializer)) {\n // Extract keys from the object\n for (const prop of decl.initializer.properties) {\n if (ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) {\n let name: string | undefined;\n\n if (ts.isPropertyAssignment(prop)) {\n if (ts.isIdentifier(prop.name)) {\n name = prop.name.text;\n } else if (ts.isStringLiteral(prop.name)) {\n name = prop.name.text;\n }\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n name = prop.name.text;\n }\n\n if (name) {\n items.push({ name, type: itemType });\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return items;\n }\n\n /**\n * Resolve a package identifier to a discovered package.\n */\n private async resolvePackage(\n pkgIdentifier: string,\n rootDir: string\n ): Promise<DiscoveredPackage | null> {\n // Check if it's a local path\n if (pkgIdentifier.startsWith('/') || pkgIdentifier.startsWith('./')) {\n const absolutePath = path.isAbsolute(pkgIdentifier)\n ? pkgIdentifier\n : path.join(rootDir, pkgIdentifier);\n\n const pkgJsonPath = path.join(absolutePath, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || path.basename(absolutePath),\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: absolutePath,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, return null\n }\n }\n\n return null;\n }\n\n // Check local packed directory first\n const packedDir = path.join(rootDir, 'agents', 'packed', pkgIdentifier);\n const pkgJsonPath = path.join(packedDir, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || pkgIdentifier,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: packedDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, continue to npm check\n }\n }\n\n // Check npm packages\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n const pkg = packages.find(\n p => p.packageId === pkgIdentifier || p.path.endsWith(`node_modules/${pkgIdentifier}`)\n );\n\n return pkg || null;\n }\n\n /**\n * Apply user selections to items.\n */\n private applySelections(\n items: UnpackableItem[],\n selections?: UnpackItemSelection[]\n ): UnpackableItem[] {\n if (!selections || selections.length === 0) {\n return items;\n }\n\n return items.map(item => {\n const selection = selections.find(\n s => s.name === item.name && s.type === item.type\n );\n if (selection) {\n return { ...item, action: selection.action };\n }\n return item;\n });\n }\n\n /**\n * Check if a file exists.\n */\n private fileExists(filePath: string): boolean {\n // Check for .ts and .js extensions\n if (fs.existsSync(filePath)) {\n return true;\n }\n // Check without extension\n const withoutExt = filePath.replace(/\\.(ts|js)$/, '');\n return fs.existsSync(`${withoutExt}.ts`) || fs.existsSync(`${withoutExt}.js`);\n }\n\n /**\n * Recursively delete a directory.\n */\n private deleteDirectory(dirPath: string): void {\n if (fs.existsSync(dirPath)) {\n fs.rmSync(dirPath, { recursive: true, force: true });\n }\n }\n\n /**\n * List available packed packages.\n */\n async listPackages(rootDir: string): Promise<Array<{\n packageId: string;\n version: string;\n source: 'npm' | 'local';\n entryAgents: string[];\n path: string;\n }>> {\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n\n return packages.map(pkg => ({\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n entryAgents: pkg.entryAgents,\n path: pkg.path,\n }));\n }\n}\n"]}