Files
Emil e196593c84
CI / Lint & Type Check (push) Canceled after 0s
CI / Test (push) Canceled after 0s
Add Pi Research Agent package
Autonomous research agent with web search, source analysis, and report synthesis.
Built on Pi agent core. Available as CLI, programmatic API, and MCP server.

Features:
- 4 built-in tools: web_search, read_url, save_note, synthesize_report
- CLI with TUI and print modes
- Programmatic API via ResearchAgent class
- MCP server with 3 tools: research, quick_search, read_url
- Skills system for custom research behavior
- Automatic .env file loading for API keys
- Configurable max turns, output formats (markdown/JSON/bullet)
- Automatic report saving to research-output/
2026-06-04 18:12:11 +03:00

195 lines
4.8 KiB
Markdown

# Contributing to Pi Research Agent
Thank you for your interest in contributing to Pi Research Agent! This document provides guidelines and instructions for contributing.
## Code of Conduct
By participating in this project, you agree to maintain a respectful and inclusive environment for everyone.
## How to Contribute
### Reporting Bugs
If you find a bug, please open an issue on GitHub with:
- A clear, descriptive title
- Steps to reproduce the bug
- Expected vs actual behavior
- Your environment (Node.js version, OS, etc.)
- Relevant logs or error messages
### Suggesting Features
Feature requests are welcome! Please open an issue with:
- A clear description of the feature
- Use cases and motivation
- Any implementation ideas you have
### Submitting Pull Requests
1. **Fork the repository** and create a new branch from `main`:
```bash
git checkout -b feature/your-feature-name
```
2. **Install dependencies**:
```bash
npm install
```
3. **Make your changes** following the code style guidelines below
4. **Add tests** for new functionality
5. **Run the build and tests**:
```bash
npm run build
npm test
```
6. **Commit your changes** with a clear message:
```bash
git commit -m "Add: brief description of your changes"
```
7. **Push to your fork** and submit a pull request
8. **Wait for review** - maintainers will review your PR and may request changes
## Development Setup
### Prerequisites
- Node.js >= 22.19.0
- npm or pnpm
- Git
### Project Structure
```
packages/research-agent/
├── src/
│ ├── agent.ts # Main ResearchAgent class
│ ├── cli.ts # CLI entry point
│ ├── mcp-cli.ts # MCP server entry point
│ ├── mcp-server.ts # MCP server implementation
│ ├── system-prompt.ts # System prompt templates
│ ├── config.ts # Configuration constants
│ ├── types.ts # TypeScript type definitions
│ ├── tools/ # Built-in research tools
│ ├── utils/ # Utility functions
│ ├── skills/ # Skills system
│ └── modes/ # Output modes (TUI, print)
├── examples/ # Usage examples
├── package.json
└── tsconfig.build.json
```
### Code Style
- Use TypeScript with strict mode
- Follow the existing code conventions
- Use 4-space indentation (matches the rest of the monorepo)
- Use single quotes for strings
- Add JSDoc comments for public APIs
- Avoid `any` types when possible
- Use `import` statements (not `require`)
### Testing
- Write unit tests for new functions
- Write integration tests for new features
- Ensure all tests pass before submitting a PR
- Aim for good test coverage
### Commit Messages
Use clear, descriptive commit messages:
- `Add: new feature description`
- `Fix: bug description`
- `Update: change description`
- `Refactor: code improvement description`
- `Docs: documentation update`
## Adding New Tools
To add a new research tool:
1. Create a new file in `src/tools/`:
```typescript
// src/tools/my-tool.ts
import type { AgentTool } from "@earendil-works/pi-agent-core";
import { Type, type Static } from "typebox";
const mySchema = Type.Object({
param: Type.String({ description: "Parameter description" }),
});
export type MyInput = Static<typeof mySchema>;
export function createMyTool(): AgentTool<typeof mySchema, MyDetails> {
return {
name: "my_tool",
label: "My Tool",
description: "Tool description",
parameters: mySchema,
execute: async (toolCallId, params: MyInput) => {
// Implementation
return {
content: [{ type: "text" as const, text: "result" }],
details: {},
};
},
};
}
```
2. Register the tool in `src/tools/index.ts`
3. Add tests for the tool
4. Update documentation
## Adding MCP Tools
To add a new MCP tool:
1. Add the tool definition in `src/mcp-server.ts`:
```typescript
server.registerTool(
"my_tool",
{
description: "Tool description",
inputSchema: {
param: z.string().describe("Parameter description"),
},
},
async (params: any) => {
// Implementation
return {
content: [{ type: "text" as const, text: "result" }],
};
},
);
```
2. Add tests
3. Update MCP_SERVER.md documentation
## Release Process
1. Update version in `package.json` following semver
2. Update `CHANGELOG.md` with changes
3. Create a git tag: `git tag v0.1.0`
4. Push tag: `git push origin v0.1.0`
5. GitHub Actions will publish to npm automatically
## Questions?
If you have questions, feel free to:
- Open an issue on GitHub
- Join our community chat
- Email the maintainers
Thank you for contributing! 🎉