mirror of
https://github.com/personamanagmentlayer/pcl.git
synced 2026-09-14 15:40:22 +08:00
5860a45fe5
* feat: Add comprehensive skill system, MCP integration, and enhanced provider support
Core Features Added:
- Skill system with compiler, resolver, merger, and runtime integration
- MCP (Model Context Protocol) client/server implementation with stdio and HTTP-SSE transports
- Enhanced provider system with Azure, Bedrock, DeepSeek, Gemini, and Ollama support
- Cost tracking and rate limiting capabilities
- Health monitoring for providers
- Fallback provider chain support
- Shell completion support for CLI
New Files:
- src/skills/: Complete skill system implementation
- skill-compiler.ts: Compiles PCL skills into executable format
- skill-resolver.ts: Resolves skill dependencies and references
- skill-merger.ts: Merges skills with conflict resolution
- skill-context.ts: Manages skill execution context
- prompt-integration.ts: Integrates skills into prompts
- runtime-integration.ts: Runtime execution support
- src/mcp/: Full MCP protocol implementation
- client/: MCP client with connection management
- server/: PCL MCP server implementation
- transports/: stdio and HTTP-SSE transport layers
- types/: JSON-RPC and MCP type definitions
- src/runtime/providers/: Enhanced provider implementations
- azure.ts: Azure OpenAI provider
- bedrock.ts: AWS Bedrock provider
- deepseek.ts: DeepSeek provider
- gemini.ts: Google Gemini provider
- ollama.ts: Ollama local models provider
- cost-tracker.ts: Track API costs across providers
- rate-limiter.ts: Rate limiting implementation
- health.ts: Provider health monitoring
- fallback.ts: Automatic fallback chain
- src/formatter/: Code formatting utilities
- src/cli/commands/completion.ts: Shell completion generation
- docs/SKILL_RUNTIME.md: Skill system documentation
- docs/mcp/: MCP integration guides
- docs/providers/: Provider setup and troubleshooting guides
Modified Files:
- README.md: Updated with new features and capabilities
- package.json: Added dependencies for MCP, new providers
- package-lock.json: Updated lockfile with new dependencies
- src/index.ts: Export new modules (skills, MCP, formatter)
- src/cli/index.ts: Add completion command and enhance CLI
- src/runtime/providers/index.ts: Refactor provider registry
- docs/README.md: Add links to new documentation
Removed Files:
- docs/api/PARSER-ENHANCEMENT-SUMMARY.md: Consolidated into other docs
- docs/api/PARSER-ENHANCEMENTS.md: Consolidated into other docs
Tests Added:
- tests/skills/: Comprehensive skill system tests
- skill-compiler.test.ts
- skill-integration.test.ts
- skill-merger.test.ts
- tests/providers/registry-enhancements.test.ts
Configuration Updates:
- .claude/CLAUDE.md: Updated configuration
- .github/dependabot.yml: Enhanced dependency management
This is a major feature release that significantly expands PCL capabilities with:
1. Enterprise-grade skill management system
2. MCP protocol support for AI tool integration
3. Multi-provider support with intelligent fallback
4. Production-ready monitoring and cost tracking
5. Enhanced developer experience with shell completions
* feat: Add CLI skill management commands and registry integration
New CLI Commands (src/cli/commands/skills/):
- bundle.ts: Bundle skills for distribution
- compile.ts: Compile individual skills
- create.ts: Create new skill from template
- info.ts: Display detailed skill information
- install.ts: Install skills from registry
- list.ts: List installed and available skills
- optimize.ts: Optimize skill performance
- publish.ts: Publish skills to registry
- search.ts: Search skill marketplace
- test.ts: Test skill functionality
- trending.ts: Show trending skills
- validate.ts: Validate skill definitions
Registry Extensions (src/registry/):
- skill-metadata.ts: Skill metadata management and validation
- skill-registry.ts: Enhanced registry with skill-specific operations
These commands provide a complete skill lifecycle management experience:
- Discovery: search, trending, list
- Development: create, compile, validate, test, optimize
- Distribution: bundle, publish, install
- Information: info
Integration with existing registry system for seamless skill management.
* feat: Add comprehensive provider system, LSP enhancements, registry extensions, and tooling
Major Features:
1. Provider System Enhancements (src/providers/):
- Base provider abstraction with common functionality
- 10 AI provider integrations:
* Anthropic (Claude)
* OpenAI (GPT)
* Google (Gemini)
* DeepSeek
* Ollama (local models)
* Groq
* Cohere
* Mistral
* Azure OpenAI (existing)
* AWS Bedrock (existing)
- Provider registry with auto-discovery
- Unified provider interface
- Provider adapter for runtime integration
- Integrated providers configuration
2. LSP (Language Server Protocol) Enhancements (src/lsp/):
- Skill-aware code completions
- Skill-specific diagnostics
- Hover information for skills
- Skill navigation (go to definition)
- Skill integration with existing LSP features
- Code actions support
- Rename refactoring support
3. Registry System Extensions (src/registry/):
- Cache Layer:
* Memory cache implementation
* Redis cache adapter
* Multi-layer cache with fallback
- Search Integration:
* Elasticsearch integration for skill search
- Version Management:
* Semantic versioning manager
* Version constraint resolution
4. CLI Enhancements (src/cli/commands/skills/):
- lint: Lint skill definitions
- wizard: Interactive skill creation wizard
5. Documentation:
- AI_PLATFORM_INTEGRATION.md: Platform integration guide
- MCP_INTEGRATION_GUIDE.md: Complete MCP integration documentation
- PROVIDERS.md: Provider system documentation
- SKILL-AUTHORING-GUIDE.md: Comprehensive skill authoring guide
- SKILL-COMPOSITION-PATTERNS.md: Patterns for skill composition
- SKILL-MARKETPLACE-GUIDELINES.md: Guidelines for skill marketplace
6. Examples:
- openapi-spec.yaml: OpenAPI specification example
- rest-api-wrapper.ts: REST API wrapper pattern
- runtime-providers.ts: Provider configuration examples
- workflows/advanced-operators.pcl: Advanced workflow operators demo
7. Claude Code Integration:
- 4 specialized AI agents (.claude/agents/):
* documentation-specialist.md
* qa-testing-expert.md
* security-analyst.md
* software-architect.md
8. Configuration:
- .vscodeignore: VS Code extension packaging configuration
9. Core Module Updates:
- src/ast/index.ts: Enhanced AST exports
- src/index.ts: Export new modules (providers, LSP)
- src/types/index.ts: Additional type definitions
- src/registry/index.ts: Export cache and search modules
- src/registry/interfaces.ts: Enhanced registry interfaces
- src/mcp/*: MCP server refinements
- src/parser/index.ts: Parser improvements
- src/runtime/providers/index.ts: Runtime provider integration
10. Comprehensive Testing:
- tests/lsp/: LSP feature tests (6 test files)
- tests/mcp/: MCP server tests
- tests/parser/: Advanced workflow operator tests
- tests/providers/: Provider system tests
- tests/registry/: Cache and version management tests
This release establishes PCL as a comprehensive AI persona management platform with:
- Multi-provider AI model support (10+ providers)
- Production-ready LSP with skill intelligence
- Scalable registry with caching and search
- Rich developer tooling and documentation
- Extensible architecture for future growth
155 lines
4.9 KiB
JavaScript
155 lines
4.9 KiB
JavaScript
/**
|
|
* MCP Server Tests
|
|
*
|
|
* Tests for the Model Context Protocol server implementation
|
|
*/
|
|
|
|
import { describe, it } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
|
|
// Note: These are basic smoke tests
|
|
// Full integration tests would require setting up the runtime
|
|
|
|
describe('MCP Server', () => {
|
|
it('should export MCP types and classes', async () => {
|
|
const mcp = await import('../../dist/index.js');
|
|
|
|
// Check that MCP exports exist
|
|
assert.ok(mcp.PclMcpServer, 'PclMcpServer should be exported');
|
|
assert.ok(mcp.PclServer, 'PclServer should be exported');
|
|
assert.ok(mcp.PclMcpClient, 'PclMcpClient should be exported');
|
|
assert.ok(mcp.StdioTransport, 'StdioTransport should be exported');
|
|
assert.ok(mcp.HttpSseTransport, 'HttpSseTransport should be exported');
|
|
});
|
|
|
|
it('should have MCP version constant', async () => {
|
|
const mcp = await import('../../dist/index.js');
|
|
|
|
assert.ok(mcp.MCP_VERSION, 'MCP_VERSION should be exported');
|
|
assert.strictEqual(typeof mcp.MCP_VERSION, 'string', 'MCP_VERSION should be a string');
|
|
});
|
|
|
|
it('should have MCP method constants', async () => {
|
|
const mcp = await import('../../dist/index.js');
|
|
|
|
assert.ok(mcp.McpMethod, 'McpMethod should be exported');
|
|
assert.ok(mcp.McpMethod.Initialize, 'McpMethod.Initialize should exist');
|
|
assert.ok(mcp.McpMethod.ToolsList, 'McpMethod.ToolsList should exist');
|
|
assert.ok(mcp.McpMethod.ToolsCall, 'McpMethod.ToolsCall should exist');
|
|
assert.ok(mcp.McpMethod.ResourcesList, 'McpMethod.ResourcesList should exist');
|
|
assert.ok(mcp.McpMethod.ResourcesRead, 'McpMethod.ResourcesRead should exist');
|
|
});
|
|
});
|
|
|
|
describe('MCP Server Creation', () => {
|
|
it('should create PclMcpServer instance', async () => {
|
|
const { PclMcpServer } = await import('../../dist/index.js');
|
|
|
|
const server = new PclMcpServer({
|
|
name: 'test-server',
|
|
version: '1.0.0',
|
|
description: 'Test MCP Server',
|
|
});
|
|
|
|
assert.ok(server, 'Server should be created');
|
|
assert.strictEqual(server.info.name, 'test-server', 'Server name should match');
|
|
assert.strictEqual(server.info.version, '1.0.0', 'Server version should match');
|
|
});
|
|
|
|
it('should register tools', async () => {
|
|
const { PclMcpServer } = await import('../../dist/index.js');
|
|
|
|
const server = new PclMcpServer({
|
|
name: 'test-server',
|
|
version: '1.0.0',
|
|
});
|
|
|
|
// Register a test tool
|
|
server.registerTool(
|
|
{
|
|
name: 'test/echo',
|
|
description: 'Echo the input',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
message: { type: 'string', description: 'Message to echo' },
|
|
},
|
|
required: ['message'],
|
|
},
|
|
},
|
|
async (params) => {
|
|
return {
|
|
content: [
|
|
{
|
|
type: 'text',
|
|
text: params.arguments.message,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
);
|
|
|
|
assert.ok(server, 'Server with tool should be created');
|
|
});
|
|
|
|
it('should register resources', async () => {
|
|
const { PclMcpServer } = await import('../../dist/index.js');
|
|
|
|
const server = new PclMcpServer({
|
|
name: 'test-server',
|
|
version: '1.0.0',
|
|
});
|
|
|
|
// Register a test resource
|
|
server.registerResource(
|
|
{
|
|
uri: 'test://resource',
|
|
name: 'Test Resource',
|
|
description: 'A test resource',
|
|
mimeType: 'text/plain',
|
|
},
|
|
async (uri) => {
|
|
return {
|
|
uri,
|
|
mimeType: 'text/plain',
|
|
text: 'Test resource content',
|
|
};
|
|
}
|
|
);
|
|
|
|
assert.ok(server, 'Server with resource should be created');
|
|
});
|
|
});
|
|
|
|
describe('JSON-RPC', () => {
|
|
it('should create JSON-RPC success response', async () => {
|
|
const { createJsonRpcSuccessResponse } = await import('../../dist/index.js');
|
|
|
|
const response = createJsonRpcSuccessResponse({ foo: 'bar' }, 1);
|
|
|
|
assert.strictEqual(response.jsonrpc, '2.0', 'Should have JSON-RPC version');
|
|
assert.strictEqual(response.id, 1, 'Should have request ID');
|
|
assert.deepStrictEqual(response.result, { foo: 'bar' }, 'Should have result');
|
|
assert.strictEqual(response.error, undefined, 'Should not have error');
|
|
});
|
|
|
|
it('should create JSON-RPC error response', async () => {
|
|
const { createJsonRpcErrorResponse, JsonRpcErrorCode } = await import('../../dist/index.js');
|
|
|
|
const response = createJsonRpcErrorResponse(
|
|
JsonRpcErrorCode.MethodNotFound,
|
|
'Method not found',
|
|
1
|
|
);
|
|
|
|
assert.strictEqual(response.jsonrpc, '2.0', 'Should have JSON-RPC version');
|
|
assert.strictEqual(response.id, 1, 'Should have request ID');
|
|
assert.strictEqual(response.result, undefined, 'Should not have result');
|
|
assert.ok(response.error, 'Should have error');
|
|
assert.strictEqual(response.error.code, JsonRpcErrorCode.MethodNotFound, 'Should have error code');
|
|
assert.strictEqual(response.error.message, 'Method not found', 'Should have error message');
|
|
});
|
|
});
|
|
|
|
console.log('✅ All MCP tests passed');
|