diff --git a/.claude/commands/triage.md b/.claude/commands/triage.md new file mode 100644 index 000000000..b57ee4a9c --- /dev/null +++ b/.claude/commands/triage.md @@ -0,0 +1,100 @@ +# Triage Command + +Classify and label open GitHub issues that are missing labels. + +## Arguments + +- `$ARGUMENTS`: Scope filter — `open` (default), `closed`, or `all`. Append `--relabel` to re-classify issues that already have labels. + +## Steps + +### 1. Fetch Issues + +Parse `$ARGUMENTS` to determine scope and whether `--relabel` is set. + +```bash +# For open (default): +gh issue list --state open --json number,title,body,labels,comments,createdAt --limit 50 + +# For closed: +gh issue list --state closed --json number,title,body,labels,comments,createdAt --limit 30 + +# For all: run both commands and merge results +``` + +### 2. Filter Candidates + +- If `--relabel` is NOT set, skip any issue that already has at least one label. +- If `--relabel` IS set, process all fetched issues. + +### 3. Classify Each Issue + +For each candidate issue, read the title, body, and **all comments** (comments often contain critical context). Apply labels from the categories below. An issue can receive multiple labels. + +**Type labels** (pick exactly one): +| Label | Signals | +|---|---| +| `bug` | Crashes, errors, stack traces, regressions, "doesn't work", "broke" | +| `enhancement` | Feature requests, integrations, "would be nice", "could we add" | +| `question` | How-to, usage help, "is it possible", "how do I" | +| `documentation` | Docs missing, incorrect, or outdated | +| `invalid` | Spam, off-topic, not actionable | +| `duplicate` | Clearly duplicates another open issue (note the original in a comment) | + +**Area labels** (pick all that apply): +| Label | Signals | +|---|---| +| `auth` | OAuth, login, API keys, tokens, authentication, authorization | +| `cli` | Slash commands, CLI arguments, flags, command parsing | +| `providers` | LLM provider-specific (Google, OpenAI, Anthropic, Gemini, Ollama, etc.) | +| `setup` | Installation, build errors, dependency issues, first-run problems | +| `tui` | TUI rendering, display glitches, terminal width, color, layout | +| `ux` | UX improvements that are not bugs — workflow, ergonomics, usability | + +**Platform labels** (pick all that apply): +| Label | Signals | +|---|---| +| `platform:linux` | Mentions Linux, Docker, Ubuntu, Debian, Fedora, Arch | +| `platform:macos` | Mentions macOS, Mac, Homebrew, Darwin | +| `platform:windows` | Mentions Windows (native), PowerShell, cmd.exe | +| `platform:wsl` | Mentions WSL or Windows Subsystem for Linux — distinct from both native Windows and Linux | + +**Meta labels** (use sparingly, only when clearly appropriate): +| Label | Signals | +|---|---| +| `good first issue` | Well-scoped, self-contained, good for new contributors | +| `help wanted` | Maintainers want community help | +| `wontfix` | Intentional behavior, out of scope | + +### 4. Apply Labels + +For each issue, apply the chosen labels. **Never remove existing labels.** + +```bash +gh issue edit --add-label "bug,tui,platform:linux" +``` + +### 5. Print Summary + +After processing all issues, print a markdown summary table: + +``` +## Triage Summary + +| # | Title | Added Labels | Skipped | +|---|-------|-------------|---------| +| 42 | TUI crashes on resize | bug, tui | | +| 38 | Add Ollama support | enhancement, providers | | +| 35 | How to configure API key | question, auth | | +| 30 | Dashboard colors | | Already labeled | +``` + +Include counts at the end: `Processed: X | Labeled: Y | Skipped: Z` + +## Classification Tips + +- When uncertain between `bug` and `enhancement`, check if existing behavior broke (bug) or new behavior is requested (enhancement). +- If an issue mentions a specific provider AND another area (e.g., "OpenAI auth fails"), apply both `providers` and `auth`. +- WSL issues get `platform:wsl` — not `platform:linux` or `platform:windows`. +- Don't apply `good first issue` or `help wanted` during automated triage — those require maintainer judgment. +- If the body is empty or unclear, read the comments before skipping. Users often clarify in replies. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..5ce78a594 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,110 @@ +name: Bug Report +description: Report a bug or crash +labels: ["bug"] +body: + - type: textarea + id: description + attributes: + label: Description + description: What happened? + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Steps to Reproduce + description: Minimal steps to reproduce the issue + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: What did you expect to happen? + validations: + required: true + + - type: textarea + id: error-output + attributes: + label: Error Output + description: Paste any error messages or stack traces + render: shell + + - type: dropdown + id: environment + attributes: + label: Platform + options: + - macOS + - Linux + - Windows (native) + - Windows (WSL) + validations: + required: true + + - type: input + id: version + attributes: + label: omp version + description: Output of `omp --version` + placeholder: "e.g. 12.1.0" + validations: + required: true + + - type: input + id: bun-version + attributes: + label: Bun version + description: Output of `bun --version` + placeholder: "e.g. 1.3.8" + validations: + required: true + + - type: dropdown + id: provider + attributes: + label: Provider + description: Which provider were you using? Leave blank if not provider-specific. + options: + - Anthropic (Claude Pro/Max) + - ChatGPT Plus/Pro (Codex) + - GitHub Copilot + - Google Cloud Code Assist (Gemini CLI) + - Antigravity (Gemini 3, Claude, GPT-OSS) + - Cursor + - OpenCode Zen + - Kimi Code + - Z.AI (GLM) + - MiniMax Coding Plan + - Perplexity + - Amazon Bedrock + - OpenRouter + - Ollama / Local + - Custom (models.yml) + - Other + + - type: dropdown + id: area + attributes: + label: Area + description: Which part of omp is affected? + options: + - TUI / Display + - Authentication / Login + - Model selection + - Tool execution + - MCP servers + - Extensions / Plugins + - CLI commands + - Setup / Installation + - Session / Compaction + - Other + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Screenshots, config snippets, or other relevant information diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..73d7e9266 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: true +contact_links: + - name: Model Configuration + url: https://github.com/can1357/oh-my-pi/blob/main/packages/coding-agent/docs/models.md + about: How to add custom providers and models via models.yml + - name: Extensions Guide + url: https://github.com/can1357/oh-my-pi/blob/main/packages/coding-agent/docs/extensions.md + about: Build custom tools, commands, and integrations + - name: Skills Documentation + url: https://github.com/can1357/oh-my-pi/blob/main/packages/coding-agent/docs/skills.md + about: How to create and use skills diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..c800119cc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,48 @@ +name: Feature Request +description: Suggest a new feature or improvement +labels: ["enhancement"] +body: + - type: textarea + id: description + attributes: + label: Description + description: What would you like? + validations: + required: true + + - type: textarea + id: use-case + attributes: + label: Use Case + description: Why is this needed? What problem does it solve? + validations: + required: true + + - type: dropdown + id: area + attributes: + label: Area + description: Which part of omp does this relate to? + options: + - Provider / Model support + - TUI / Display + - Tools + - MCP servers + - Extensions / Plugins + - CLI commands + - Skills / Commands + - Session management + - Configuration + - Other + + - type: textarea + id: proposed-solution + attributes: + label: Proposed Solution + description: How would you implement this? Link to relevant docs or APIs if applicable. + + - type: textarea + id: alternatives + attributes: + label: Alternatives Considered + description: Any workarounds or other approaches you've tried? diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 000000000..4c39e3440 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,38 @@ +name: Question +description: Ask about usage or configuration +labels: ["question"] +body: + - type: textarea + id: question + attributes: + label: Question + validations: + required: true + + - type: textarea + id: context + attributes: + label: Context + description: What are you trying to do? + + - type: dropdown + id: area + attributes: + label: Topic + options: + - Provider setup / Login + - Custom models (models.yml) + - Extensions + - MCP servers + - Skills / Commands + - Configuration + - Other + + - type: dropdown + id: environment + attributes: + label: Platform + options: + - macOS + - Linux + - Windows diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..2b9e42476 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ +## What + + + +## Why + + + +## Testing + + + +--- + +- [ ] `bun check` passes +- [ ] Tested locally +- [ ] CHANGELOG updated (if user-facing) diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 000000000..40bccac2a --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,18 @@ +# Security Policy + +## Supported Versions + +Only the latest release is supported with security updates. + +## Reporting a Vulnerability + +To report a security issue, either: + +- Email can1357 directly, or +- Open a [private security advisory](https://github.com/can1357/oh-my-pi/security/advisories/new) on GitHub + +Include steps to reproduce and any relevant details. Do not open a public issue for security vulnerabilities. + +## Response + +Reports are handled on a best-effort basis. You can expect an initial acknowledgment within a few days. diff --git a/LICENSE b/LICENSE index b0a8e9b81..cc0c5aa7c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License Copyright (c) 2025 Mario Zechner +Copyright (c) 2025-2026 Can Bölük Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +19,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/packages/agent/package.json b/packages/agent/package.json index c0033e52a..6bb681175 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -35,13 +35,16 @@ "transport", "state-management" ], - "author": "Mario Zechner", + "author": "Can Bölük", + "contributors": ["Mario Zechner"], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/agent" }, + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" }, "engines": { "bun": ">=1.3.7" }, diff --git a/packages/ai/package.json b/packages/ai/package.json index f4f5bb4ae..eb14180bd 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -82,13 +82,16 @@ "unified", "api" ], - "author": "Mario Zechner", + "author": "Can Bölük", + "contributors": ["Mario Zechner"], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/ai" }, + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" }, "engines": { "bun": ">=1.3.7" }, diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index 65fe992ce..b23e782aa 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -119,13 +119,16 @@ "tui", "agent" ], - "author": "Mario Zechner", + "author": "Can Bölük", + "contributors": ["Mario Zechner"], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/coding-agent" }, + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" }, "engines": { "bun": ">=1.3.7" } diff --git a/packages/natives/package.json b/packages/natives/package.json index 9c0c85448..801035afb 100644 --- a/packages/natives/package.json +++ b/packages/natives/package.json @@ -2,6 +2,7 @@ "name": "@oh-my-pi/pi-natives", "version": "12.1.0", "description": "Native Rust functionality via N-API", + "keywords": ["napi", "rust", "native", "grep", "text-processing"], "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", @@ -31,6 +32,8 @@ "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/natives" }, + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" }, "dependencies": { "@oh-my-pi/pi-utils": "workspace:*" }, diff --git a/packages/react-edit-benchmark/package.json b/packages/react-edit-benchmark/package.json index 8a7a99e4a..27eb735b7 100644 --- a/packages/react-edit-benchmark/package.json +++ b/packages/react-edit-benchmark/package.json @@ -3,6 +3,8 @@ "version": "0.0.1", "private": true, "description": "Edit benchmark suite using React source code mutations", + "author": "Can Bölük", + "license": "MIT", "type": "module", "main": "./src/index.ts", "bin": { @@ -13,6 +15,14 @@ "generate": "bun run src/generate.ts --react-dir /tmp/react-source --count-per-type 4", "check": "tsgo -p tsconfig.json --noEmit" }, + "repository": { + "type": "git", + "url": "git+https://github.com/can1357/oh-my-pi.git", + "directory": "packages/react-edit-benchmark" + }, + "engines": { + "bun": ">=1.3.7" + }, "dependencies": { "@oh-my-pi/pi-agent-core": "workspace:*", "@oh-my-pi/pi-coding-agent": "workspace:*", diff --git a/packages/stats/package.json b/packages/stats/package.json index 954b134c4..1f95d9b3f 100644 --- a/packages/stats/package.json +++ b/packages/stats/package.json @@ -47,6 +47,8 @@ "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/stats" }, + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" }, "dependencies": { "@oh-my-pi/pi-ai": "workspace:*", "date-fns": "^4.1.0", diff --git a/packages/swarm-extension/package.json b/packages/swarm-extension/package.json index 52dc22c36..5a9ff59c5 100644 --- a/packages/swarm-extension/package.json +++ b/packages/swarm-extension/package.json @@ -2,6 +2,8 @@ "name": "@oh-my-pi/swarm-extension", "version": "12.1.0", "description": "Swarm orchestration extension for omp", + "keywords": ["swarm", "orchestration", "agent", "extension"], + "author": "Derek Rynd", "type": "module", "bin": { "omp-swarm": "src/cli.ts" @@ -23,5 +25,11 @@ "type": "git", "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/swarm-extension" - } + }, + "engines": { + "bun": ">=1.3.7" + }, + "files": ["src"], + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" } } diff --git a/packages/tui/package.json b/packages/tui/package.json index d5550581b..a4f34c76b 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -36,13 +36,16 @@ "typescript", "cli" ], - "author": "Mario Zechner", + "author": "Can Bölük", + "contributors": ["Mario Zechner"], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/tui" }, + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" }, "engines": { "bun": ">=1.3.7" }, diff --git a/packages/utils/package.json b/packages/utils/package.json index a256cf51c..f129bdd76 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -2,6 +2,7 @@ "name": "@oh-my-pi/pi-utils", "version": "12.1.0", "description": "Shared utilities for pi packages", + "keywords": ["utilities", "cli", "logging", "streams"], "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", @@ -34,6 +35,8 @@ "url": "git+https://github.com/can1357/oh-my-pi.git", "directory": "packages/utils" }, + "homepage": "https://github.com/can1357/oh-my-pi", + "bugs": { "url": "https://github.com/can1357/oh-my-pi/issues" }, "dependencies": { "winston": "^3.19.0", "winston-daily-rotate-file": "^5.0.0"