aboutsummaryrefslogtreecommitdiff
path: root/CONTRIBUTING.md
diff options
context:
space:
mode:
authoramankumarsingh77 <amankumarsingh7702@gmal.com>2026-05-02 00:08:22 +0530
committeramankumarsingh77 <amankumarsingh7702@gmal.com>2026-05-02 00:08:22 +0530
commitae22379668b34cde6f0ce8e5ad0bc5ec98934852 (patch)
tree2317ba0d0b42f4212a0970b29d068b5b1429ab2e /CONTRIBUTING.md
parent28578d1d6237cdec3f613a3ed9fa6e888dd71a6b (diff)
chore: prepare v0.1.0 release
- Add hero image for pi package gallery - Update CHANGELOG with release date - Update README with npm install instructions - Add assets/ to npm package files - Add CONTRIBUTING.md and GitHub templates - Add CI workflow for typecheck and pack validation
Diffstat (limited to 'CONTRIBUTING.md')
-rw-r--r--CONTRIBUTING.md154
1 files changed, 154 insertions, 0 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..2c9d7a4
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,154 @@
+# Contributing to pi-browser-harness
+
+Thanks for your interest in improving `pi-browser-harness`. This project gives pi agents full browser control through the Chrome DevTools Protocol (CDP): navigation, screenshots, clicks, typing, JavaScript evaluation, tab management, and runtime helper scripts.
+
+---
+
+## Setup
+
+### 1. Fork and clone
+
+```bash
+git clone https://github.com/YOUR_USERNAME/pi-browser-harness.git
+cd pi-browser-harness
+```
+
+If you are working directly from the upstream repository:
+
+```bash
+git clone https://github.com/amankumarsingh77/pi-browser-harness.git
+cd pi-browser-harness
+```
+
+### 2. Install dependencies
+
+```bash
+npm install
+```
+
+### 3. Run the local checks
+
+```bash
+npm run typecheck
+npm pack --dry-run
+```
+
+`npm run typecheck` validates the TypeScript source. `npm pack --dry-run` verifies that the package can be packed for publishing and shows which files will be included.
+
+---
+
+## Project structure
+
+```text
+.
+├── src/
+│ ├── index.ts # Extension entry point and command registration
+│ ├── tools.ts # Browser tool schemas, handlers, and result rendering hooks
+│ ├── daemon.ts # Connection lifecycle for the browser-harness daemon
+│ ├── protocol.ts # Types for browser/daemon protocol messages
+│ ├── setup.ts # /browser-setup implementation and Chrome detection
+│ ├── state.ts # Session state persistence
+│ ├── prompt.ts # Browser usage guidance injected into the agent prompt
+│ └── renderers.ts # TUI renderers for screenshots and tab listings
+├── skills/
+│ └── pi-browser-harness/
+│ └── SKILL.md # Agent skill documentation
+├── README.md # User-facing documentation
+├── CHANGELOG.md # Release notes
+└── package.json # npm package metadata and pi manifest
+```
+
+---
+
+## Developing locally
+
+Make changes in `src/`, then run:
+
+```bash
+npm run typecheck
+```
+
+To test the extension in pi from your local checkout, install it by path:
+
+```bash
+pi install /absolute/path/to/pi-browser-harness
+```
+
+For example:
+
+```bash
+pi install "$PWD"
+```
+
+Then start pi and run:
+
+```text
+/browser-setup
+/browser-status
+```
+
+Use the normal browser workflow when testing: screenshot → act → screenshot → verify. For example, navigate to a page, wait for load, capture a screenshot, and confirm the result visually.
+
+---
+
+## Code conventions
+
+- Write TypeScript and keep the project passing `npm run typecheck`.
+- Keep `strict` TypeScript mode clean. Do not introduce implicit `any` values.
+- Prefer small, focused changes over broad rewrites.
+- Keep tool descriptions, parameter descriptions, and prompt guidelines clear and user-facing.
+- Preserve the existing error-handling style: return useful, actionable messages to the agent instead of leaking low-level details when possible.
+- Avoid adding dependencies unless they are necessary for the browser-control experience.
+- Keep README and CHANGELOG updates in the same PR when behavior changes.
+
+---
+
+## Adding a new browser tool
+
+Most browser tools are registered in `src/tools.ts` through `pi.registerTool`.
+
+When adding a tool:
+
+1. Add or reuse the underlying daemon method in `src/daemon.ts` and protocol types in `src/protocol.ts` when needed.
+2. Register the pi tool in `src/tools.ts` with:
+ - a stable `browser_*` name,
+ - a concise label and description,
+ - a TypeBox parameter schema,
+ - prompt snippets and guidelines that explain when to use it,
+ - clear result text and structured details where useful.
+3. Update prompt guidance in `src/prompt.ts` if the tool changes recommended workflows.
+4. Add or update a renderer in `src/renderers.ts` if the tool returns visual or rich output.
+5. Document the tool in `README.md` and note the change in `CHANGELOG.md`.
+6. Run:
+
+ ```bash
+ npm run typecheck
+ npm pack --dry-run
+ ```
+
+Keep tool behavior predictable. The agent should be able to verify actions with screenshots or page state after every interaction.
+
+---
+
+## Pull request process
+
+1. Fork the repository.
+2. Create a focused branch:
+
+ ```bash
+ git checkout -b fix/short-description
+ ```
+
+3. Make your changes and keep commits readable.
+4. Run local checks:
+
+ ```bash
+ npm run typecheck
+ npm pack --dry-run
+ ```
+
+5. Test in pi with a local path install when the change affects runtime behavior.
+6. Update documentation and CHANGELOG entries when user-visible behavior changes.
+7. Open a pull request against `main` and describe what changed, how it was tested, and any follow-up work.
+
+Thank you for helping make browser automation in pi reliable, inspectable, and easy to use.