Migration Guide
Current State
You currently have search tools hardcoded in:
backend/src/tools/search.tools.tsbackend/src/services/searchProvider.service.tsbackend/src/tools/handlers/searchToolHandler.ts
Migration Steps
Step 1: Create Search Extension
# Copy template
cp -r packages/agentos-extensions/ext-template packages/agentos-extensions/ext-search
# Update package.json name to @framers/agentos-ext-search
# Update manifest.json id to com.framers.ext.search
Step 2: Port Search Tool
Move logic from backend/src/tools/search.tools.ts to extension:
// packages/agentos-extensions/ext-search/src/tools/webSearch.ts
import type { ITool, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
export class WebSearchTool implements ITool {
readonly id = 'com.framers.ext.search.webSearch';
readonly name = 'webSearch';
// ... port implementation
}
Step 3: Port Search Service
Move searchProvider.service.ts logic into extension:
// packages/agentos-extensions/ext-search/src/services/searchProvider.ts
export class SearchProviderService {
// ... port implementation
}
Step 4: Update AgentOS Configuration
// backend/src/integrations/agentos/agentos.integration.ts
import { createExtensionPack as createSearchExtension } from '@framers/agentos-ext-search';
async function buildEmbeddedAgentOSConfig(): Promise<AgentOSConfig> {
// ...
return {
// ... other config
extensionManifest: {
packs: [
{
factory: () => createSearchExtension({
manifestEntry: {} as any,
source: { sourceName: '@framers/agentos-ext-search' },
options: {
search: {
provider: 'serper',
apiKey: process.env.SERPER_API_KEY
}
}
})
}
]
}
};
}
Step 5: Remove Hardcoded Tools
-
Delete:
backend/src/tools/search.tools.tsbackend/src/services/searchProvider.service.tsbackend/src/tools/handlers/searchToolHandler.tsbackend/src/tools/handlers/index.ts(if only search)
-
Remove from persona registry:
- Remove
import { SearchAgentTools }fromagentos.persona-registry.ts - Remove
search_toolsfrom TOOLSETS - Remove
toolsetIds: ['search_tools']from personas
- Remove
Step 6: Test Migration
// Test that extension loads
const agentos = new AgentOS();
await agentos.initialize(config);
const tool = agentos.toolExecutor.getTool('webSearch');
expect(tool).toBeDefined();
Benefits After Migration
- Modularity: Search tools in separate package
- Versioning: Independent version management
- Testing: Isolated test suite
- Distribution: Published to npm as
@framers/agentos-ext-search - Community: Others can use/improve the extension
Timeline
- Phase 1: Create extension structure (done)
- Phase 2: Port search tools to extension
- Phase 3: Test with AgentOS runtime
- Phase 4: Publish to npm
- Phase 5: Remove hardcoded implementation
Rollback Plan
If issues arise:
- Keep hardcoded tools as fallback
- Use feature flag to toggle between implementations
- Gradual migration persona by persona