Skip to content

Commit 44fa2f3

Browse files
authored
Merge pull request #16 from DavidUmKongs/chore/sync-upstream-2026-03-24
Sync upstream main into codex and verify rebaseability
2 parents 220a7bc + 7f1541a commit 44fa2f3

37 files changed

+1271
-2953
lines changed

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: "Bug report"
22
description: "Report a bug to help us improve Pixel Agents."
33
title: "[Bug]: "
4-
labels: ["bug"]
4+
labels: ["type: bug"]
55
body:
66
- type: textarea
77
id: description

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
blank_issues_enabled: false
22
contact_links:
3-
- name: "Feature request"
4-
url: "https://github.com/pablodelucca/pixel-agents/discussions/categories/ideas"
5-
about: "Suggest new features or ideas in Discussions."
6-
- name: "Question"
3+
- name: "Question / Help"
74
url: "https://github.com/pablodelucca/pixel-agents/discussions/categories/q-a"
85
about: "Ask questions and get help in Discussions."
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: "Feature request"
2+
description: "Suggest a new feature, idea, or improvement for Pixel Agents."
3+
title: "[Feature]: "
4+
labels: ["type: feature"]
5+
body:
6+
- type: checkboxes
7+
id: checks
8+
attributes:
9+
label: "Pre-flight checklist"
10+
options:
11+
- label: "I have searched existing issues and this is not a duplicate"
12+
required: true
13+
14+
- type: textarea
15+
id: problem
16+
attributes:
17+
label: "Problem or motivation"
18+
description: "What problem does this solve, or what need does it address? A clear problem statement helps us prioritize."
19+
placeholder: "e.g., When I have many agents open, I can't tell which terminal each character is connected to."
20+
validations:
21+
required: true
22+
23+
- type: textarea
24+
id: solution
25+
attributes:
26+
label: "Proposed solution"
27+
description: "How should it work? Describe the behavior, UI, or API you envision."
28+
placeholder: "e.g., Show the terminal name as a label above each character, toggled via a setting."
29+
validations:
30+
required: true
31+
32+
- type: dropdown
33+
id: importance
34+
attributes:
35+
label: "How important is this to you?"
36+
options:
37+
- "Nice to have"
38+
- "Would improve my workflow"
39+
- "Critical — blocking my use case"
40+
validations:
41+
required: true
42+
43+
- type: textarea
44+
id: alternatives
45+
attributes:
46+
label: "Alternatives considered"
47+
description: "Have you considered other solutions or workarounds?"
48+
49+
- type: textarea
50+
id: context
51+
attributes:
52+
label: "Additional context"
53+
description: "Screenshots, mockups, links to related issues or discussions."

.github/workflows/pr-title.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: PR Title
2+
3+
on:
4+
pull_request_target:
5+
types: [opened, edited, synchronize]
6+
7+
permissions:
8+
pull-requests: read
9+
10+
jobs:
11+
check:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: amannn/action-semantic-pull-request@v5
15+
env:
16+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
17+
with:
18+
types: |
19+
feat
20+
fix
21+
refactor
22+
chore
23+
docs
24+
style
25+
perf
26+
test
27+
ci
28+
build
29+
requireScope: false
30+
subjectPattern: ^[a-z].+$
31+
subjectPatternError: "PR title subject must start with a lowercase letter: '{subject}'"

.github/workflows/update-badges.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Update Badge Stats
22

33
on:
44
schedule:
5-
- cron: '0 6 * * *'
5+
- cron: '0 6,14,22 * * *'
66
workflow_dispatch:
77

88
jobs:

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,13 @@ Thumbs.db
2929
.claude/
3030
/sprites-export
3131
.omx/
32+
33+
34+
# Local notes (not for commit)
35+
/notes/
36+
37+
# Auto-generated PR review metadata
38+
comments.json
39+
pr_comments.json
40+
pr_reviews.json
41+
reviews.json

CLAUDE.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ src/ — Extension backend (Node.js, VS Code API)
1111
PixelAgentsViewProvider.ts — WebviewViewProvider, message dispatch, asset loading
1212
assetLoader.ts — PNG parsing, sprite conversion, catalog building, default layout loading
1313
agentManager.ts — Terminal lifecycle: launch, remove, restore, persist
14+
configPersistence.ts — User-level config file I/O (~/.pixel-agents/config.json), external asset directories
1415
layoutPersistence.ts — User-level layout file I/O (~/.pixel-agents/layout.json), migration, cross-window watching
1516
fileWatcher.ts — fs.watch + polling, readNewLines, /clear detection, terminal adoption
1617
transcriptParser.ts — JSONL parsing: tool_use/tool_result → webview messages
@@ -73,7 +74,7 @@ scripts/ — 7-stage asset extraction pipeline
7374

7475
**Vocabulary**: Terminal = VS Code terminal running the selected agent CLI. Session = JSONL conversation file. Agent = webview character bound 1:1 to a terminal.
7576

76-
**Extension ↔ Webview**: `postMessage` protocol. Key messages: `openAgent`, `agentCreated/Closed`, `focusAgent`, `agentToolStart/Done/Clear`, `agentStatus`, `existingAgents`, `layoutLoaded`, `furnitureAssetsLoaded`, `floorTilesLoaded`, `wallTilesLoaded`, `saveLayout`, `saveAgentSeats`, `exportLayout`, `importLayout`, `settingsLoaded`, `setSoundEnabled`.
77+
**Extension ↔ Webview**: `postMessage` protocol. Key messages: `openAgent`, `agentCreated/Closed`, `focusAgent`, `agentToolStart/Done/Clear`, `agentStatus`, `existingAgents`, `layoutLoaded`, `furnitureAssetsLoaded`, `floorTilesLoaded`, `wallTilesLoaded`, `saveLayout`, `saveAgentSeats`, `exportLayout`, `importLayout`, `settingsLoaded` (includes `externalAssetDirectories`), `setSoundEnabled`, `addExternalAssetDirectory`, `removeExternalAssetDirectory` (field: `path`), `externalAssetDirectoriesUpdated` (field: `dirs`).
7778

7879
**One-agent-per-terminal**: Each "+ Agent" click launches the configured backend (`codex` or `claude`) and immediately creates a bound agent. Backends with deterministic session files can poll for the expected JSONL; others rely on project scanning/adoption.
7980

@@ -89,7 +90,7 @@ JSONL transcripts are adapter-specific: Claude uses `~/.claude/projects/<project
8990

9091
**Extension state per agent**: `id, terminalRef, projectDir, jsonlFile, fileOffset, lineBuffer, activeToolIds, activeToolStatuses, activeSubagentToolNames, isWaiting`.
9192

92-
**Persistence**: Agents persisted to `workspaceState` key `'pixel-agents.agents'` (includes palette/hueShift/seatId). **Layout persisted to `~/.pixel-agents/layout.json`** (user-level, shared across all VS Code windows/workspaces). `layoutPersistence.ts` handles all file I/O: `readLayoutFromFile()`, `writeLayoutToFile()` (atomic via `.tmp` + rename), `migrateAndLoadLayout()` (checks file → migrates old workspace state → falls back to bundled default), `watchLayoutFile()` (hybrid `fs.watch` + 2s polling for cross-window sync). On save, `markOwnWrite()` prevents the watcher from re-reading our own write. External changes push `layoutLoaded` to the webview; skipped if the editor has unsaved changes (last-save-wins). On webview ready: `restoreAgents()` matches persisted entries to live terminals. `nextAgentId`/`nextTerminalIndex` advanced past restored values. **Default layout**: When no saved layout file exists and no workspace state to migrate, a bundled `default-layout.json` is loaded from `assets/` and written to the file. If that also doesn't exist, `createDefaultLayout()` generates a basic office. To update the default: run "Pixel Agents: Export Layout as Default" from the command palette (writes current layout to `webview-ui/public/assets/default-layout.json`), then rebuild. **Export/Import**: Settings modal offers Export Layout (save dialog → JSON file) and Import Layout (open dialog → validates `version: 1` + `tiles` array → writes to layout file + pushes `layoutLoaded` to webview).
93+
**Persistence**: Agents persisted to `workspaceState` key `'pixel-agents.agents'` (includes palette/hueShift/seatId). **Layout persisted to `~/.pixel-agents/layout.json`** (user-level, shared across all VS Code windows/workspaces). `layoutPersistence.ts` handles all file I/O: `readLayoutFromFile()`, `writeLayoutToFile()` (atomic via `.tmp` + rename), `migrateAndLoadLayout()` (checks file → migrates old workspace state → falls back to bundled default), `watchLayoutFile()` (hybrid `fs.watch` + 2s polling for cross-window sync). On save, `markOwnWrite()` prevents the watcher from re-reading our own write. External changes push `layoutLoaded` to the webview; skipped if the editor has unsaved changes (last-save-wins). On webview ready: `restoreAgents()` matches persisted entries to live terminals. `nextAgentId`/`nextTerminalIndex` advanced past restored values. **Default layout**: When no saved layout file exists and no workspace state to migrate, a bundled `default-layout.json` is loaded from `assets/` and written to the file. If that also doesn't exist, `createDefaultLayout()` generates a basic office. To update the default: run "Pixel Agents: Export Layout as Default" from the command palette (writes current layout to `webview-ui/public/assets/default-layout.json`), then rebuild. **Export/Import**: Settings modal offers Export Layout (save dialog → JSON file) and Import Layout (open dialog → validates `version: 1` + `tiles` array → writes to layout file + pushes `layoutLoaded` to webview). **Config persisted to `~/.pixel-agents/config.json`** (user-level, shared across windows). `configPersistence.ts` handles read/write with atomic tmp+rename. Currently stores `externalAssetDirectories: string[]` for external asset pack paths. **External asset directories**: Settings modal offers Add/Remove Asset Directory. External furniture merged with bundled assets on boot and on add/remove via `mergeLoadedAssets()` (external IDs override bundled on collision).
9394

9495
## Office UI
9596

CONTRIBUTING.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ This project is licensed under the [MIT License](LICENSE), so your contributions
1414
### Setup
1515

1616
```bash
17-
git clone https://github.com/pablodelucca/pixel-agents.git
18-
cd pixel-agents
17+
git clone https://github.com/DavidUmKongs/oh-my-pixel-agents.git
18+
cd oh-my-pixel-agents
1919
npm install
2020
cd webview-ui && npm install && cd ..
2121
npm run build
@@ -106,17 +106,20 @@ These rules are set to `warn` — they won't block your PR but will flag violati
106106
```
107107
CI runs these same checks automatically on every PR.
108108
4. Open a pull request against `main` with:
109+
- A **conventional commit PR title** (e.g. `feat: add zoom controls`, `fix: character freezing on terminal close`, `refactor: extract pathfinding module`). CI enforces this format — see [Conventional Commits](https://www.conventionalcommits.org/).
109110
- A clear description of what changed and why
110111
- How you tested the changes (steps to reproduce / verify)
111112
- **Screenshots or GIFs for any UI changes**
112113

114+
> **Note:** PRs are merged using **squash and merge** — all commits in your PR are combined into a single commit on `main`. Your PR title becomes the commit message, which is why the conventional commit format matters.
115+
113116
## Reporting Bugs
114117

115-
[Open a bug report](https://github.com/pablodelucca/pixel-agents/issues/new?template=bug_report.yml) — the form will guide you through providing the details we need.
118+
[Open a bug report](https://github.com/DavidUmKongs/oh-my-pixel-agents/issues/new?template=bug_report.yml) — the form will guide you through providing the details we need.
116119

117120
## Feature Requests
118121

119-
Have an idea? [Start a discussion](https://github.com/pablodelucca/pixel-agents/discussions/categories/ideas) in the Ideas category. We love hearing new ideas, and discussing them first helps us collaborate on the best approach together.
122+
Have an idea? [Open a feature request](https://github.com/DavidUmKongs/oh-my-pixel-agents/issues/new?template=feature_request.yml) the form will guide you through describing the problem and your proposed solution. You can also browse and join ongoing conversations in [Discussions](https://github.com/DavidUmKongs/oh-my-pixel-agents/discussions).
120123

121124
## Security Issues
122125

README.ko.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ Pixel Agents는 선택된 백엔드의 JSONL transcript 파일을 감시해서
158158

159159
## 커뮤니티와 기여
160160

161-
질문, 아이디어, 논의는 **[GitHub Discussions](https://github.com/pablodelucca/pixel-agents/discussions)** 에서 진행합니다. **[Issues](https://github.com/pablodelucca/pixel-agents/issues)** 는 버그 리포트 전용입니다.
161+
질문, 아이디어, 논의는 **[GitHub Discussions](https://github.com/DavidUmKongs/oh-my-pixel-agents/discussions)** 에서 진행합니다. **[Issues](https://github.com/DavidUmKongs/oh-my-pixel-agents/issues)** 는 버그 리포트 전용입니다.
162162

163163
기여 방법은 [CONTRIBUTING.md](CONTRIBUTING.md)를 참고해 주세요.
164164

README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ This repository tracks the `oh-my-pixel-agents` fork of Pixel Agents for VS Code
4646
- **Sound notifications** — optional chime when an agent finishes its turn
4747
- **Sub-agent visualization** — Task tool sub-agents spawn as separate characters linked to their parent
4848
- **Persistent layouts** — your office design is saved and shared across VS Code windows
49+
- **External asset directories** — load custom or third-party furniture packs from any folder on your machine
4950
- **Diverse characters** — 6 diverse characters. These are based on the amazing work of [JIK-A-4, Metro City](https://jik-a-4.itch.io/metrocity-free-topdown-character-pack).
5051
- **Agent inspector** — click an agent to open a pinned inspector showing its current tool, confidence, permission state, and recent timeline without jumping to the terminal.
5152
- **Timeline debug view** — toggle Debug mode to see each agent’s tool calls, sub-agent branches, and permission waits rendered as rails with duration/approval badges.
@@ -125,7 +126,7 @@ Each furniture item lives in its own folder under `assets/furniture/` with a `ma
125126

126127
To add a new furniture item, create a folder in `webview-ui/public/assets/furniture/` with your PNG sprite(s) and a `manifest.json`, then rebuild. The asset manager (`scripts/asset-manager.html`) provides a visual editor for creating and editing manifests.
127128

128-
Detailed documentation on the manifest format and asset pipeline is coming soon.
129+
To use furniture from an external directory, open Settings → **Add Asset Directory**. See [docs/external-assets.md](docs/external-assets.md) for the full manifest format and how to use third-party asset packs.
129130

130131
Characters are based on the amazing work of [JIK-A-4, Metro City](https://jik-a-4.itch.io/metrocity-free-topdown-character-pack).
131132

@@ -163,14 +164,12 @@ For this to work, the architecture needs to be modular at every level:
163164
- **Agent-agnostic**: Claude Code today, but built to support Codex, OpenCode, Gemini, Cursor, Copilot, and others through composable adapters.
164165
- **Theme-agnostic**: community-created assets, skins, and themes from any contributor.
165166

166-
We're actively working on the core module and adapter architecture that makes this possible. If you're interested to talk about this further, please visit our [Discussions Section](https://github.com/pablodelucca/pixel-agents/discussions).
167+
We're actively working on the core module and adapter architecture that makes this possible. If you're interested to talk about this further, please visit our [Discussions Section](https://github.com/DavidUmKongs/oh-my-pixel-agents/discussions).
167168

168169

169170
## Community & Contributing
170171

171-
We use **[GitHub Discussions](https://github.com/pablodelucca/pixel-agents/discussions)** for questions, feature ideas, and conversations. **[Issues](https://github.com/pablodelucca/pixel-agents/issues)** are for bug reports only.
172-
173-
If something is broken, open an issue. For everything else, start a discussion.
172+
Use **[Issues](https://github.com/DavidUmKongs/oh-my-pixel-agents/issues)** to report bugs or request features. Join **[Discussions](https://github.com/DavidUmKongs/oh-my-pixel-agents/discussions)** for questions and conversations.
174173

175174
See [CONTRIBUTING.md](CONTRIBUTING.md) for instructions on how to contribute.
176175

0 commit comments

Comments
 (0)