Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
363 commits
Select commit Hold shift + click to select a range
5bb601d
Merge pull request #30 from ArturSkowronski/update-licence
ArturSkowronski Apr 11, 2025
16bdc9d
Update README.md
ArturSkowronski Apr 11, 2025
7fc8a0f
Update README.md
ArturSkowronski Apr 11, 2025
a3e6df4
Merge pull request #31 from ArturSkowronski/ArturSkowronski-Readme
ArturSkowronski Apr 11, 2025
3b75fa9
Update README.md
ArturSkowronski Apr 11, 2025
722b193
Update README.md
ArturSkowronski Apr 11, 2025
1f5ef79
Update README.md
ArturSkowronski Apr 11, 2025
638d12a
Basic Abstraction for controllers
ArturSkowronski Apr 15, 2025
034e7f9
Fixing errors with controller logic
ArturSkowronski Apr 15, 2025
d21038e
Merge pull request #33 from ArturSkowronski/controllers-logic
ArturSkowronski Apr 15, 2025
a3d5532
Initial fixes for NES.kt
ArturSkowronski Apr 17, 2025
0b9579f
Additional fixes for NES.kt
ArturSkowronski Apr 17, 2025
995d526
Additional fixes for NES.kt - remove MemoryMapper from PPU Contstruct…
ArturSkowronski Apr 17, 2025
fcc5422
Compilation fixes
ArturSkowronski Apr 17, 2025
e88492f
Compilation fixes
ArturSkowronski Apr 17, 2025
975a561
Compilation fixes
ArturSkowronski Apr 17, 2025
1b6b9b0
Compilation fixes
ArturSkowronski Apr 17, 2025
767554d
Merge pull request #34 from ArturSkowronski/neskt-refactor
ArturSkowronski Apr 17, 2025
2d71bd6
feat(junie): added .junie workflow
jetbrains-junie[bot] May 25, 2025
f39384e
feat(junie): added .devcontainer.json
jetbrains-junie[bot] May 25, 2025
1a9ffd0
UI Fixes
ArturSkowronski May 31, 2025
0a633d6
feat(junie): added .junie workflow
jetbrains-junie[bot] May 31, 2025
25e2baf
Merge pull request #38 from ArturSkowronski/junie-init-2
ArturSkowronski May 31, 2025
2989739
Merge pull request #35 from ArturSkowronski/junie-init
ArturSkowronski May 31, 2025
7edb527
Merge pull request #36 from ArturSkowronski/audio-sync
ArturSkowronski May 31, 2025
9d10cb6
Kotlin 2.0 Migration
ArturSkowronski Jun 30, 2025
9ba50b5
Merge pull request #40 from ArturSkowronski/feature/kotlin-2.0
ArturSkowronski Jun 30, 2025
ed35656
chore: update Compose and Gradle wrapper versions
ArturSkowronski Jun 30, 2025
eb87b51
Merge pull request #41 from ArturSkowronski/feature/kotlin-2.0
ArturSkowronski Jun 30, 2025
7a55998
Kotlin 2.2 Migration
ArturSkowronski Jun 30, 2025
f5660eb
Merge branch 'master' into feature/kotlin-2.2-migration
ArturSkowronski Jun 30, 2025
39bf62e
Merge pull request #42 from ArturSkowronski/feature/kotlin-2.2-migration
ArturSkowronski Jun 30, 2025
e52f09f
Update README.md
ArturSkowronski Aug 18, 2025
516c295
Merge pull request #46 from ArturSkowronski/ArturSkowronski-patch-1
ArturSkowronski Aug 18, 2025
29f307e
Fixing unnecessary abstraction over Input Handler
ArturSkowronski Sep 13, 2025
d63bf6b
Merge pull request #49 from ArturSkowronski/chore-refactor
ArturSkowronski Sep 13, 2025
908059e
Cleaning up NES object
ArturSkowronski Sep 13, 2025
08e8ea8
Merge pull request #51 from ArturSkowronski/chore-refactor
ArturSkowronski Sep 13, 2025
ecd8acd
Cleaning up NES object - removing nullable values
ArturSkowronski Sep 14, 2025
9d5f8ea
Decouple ComposeScreenView from NES
ArturSkowronski Sep 14, 2025
39591a2
Decouple ScreenView from buffer
ArturSkowronski Sep 14, 2025
c20ec39
Merge pull request #52 from ArturSkowronski/chore-refactor
ArturSkowronski Sep 14, 2025
f0c441d
Decouple ScreenView from NES, removing UIFactory abstaction
ArturSkowronski Sep 14, 2025
197e60a
Decouple ScreenView from NES, removing UIFactory abstaction
ArturSkowronski Sep 14, 2025
8332925
Merge pull request #53 from ArturSkowronski/remove-unnecessary-ui-abs…
ArturSkowronski Sep 14, 2025
ac0adbb
Decouple controller logic from UI #32
ArturSkowronski Sep 14, 2025
dc310b0
Merge pull request #54 from ArturSkowronski/github-32-decouple-contro…
ArturSkowronski Sep 14, 2025
23a5106
Implement placeholder for second controller support in joy2Read()
ArturSkowronski Sep 14, 2025
6ce4bd2
sdkmanrc
ArturSkowronski Sep 28, 2025
cfb48e4
Merge pull request #56 from ArturSkowronski/sdkman-support
ArturSkowronski Sep 28, 2025
fdb6b0f
Refactor ByteBuffer and related classes, removing unused methods and …
ArturSkowronski Oct 2, 2025
9ec4490
Merge pull request #57 from ArturSkowronski/chore-nes
ArturSkowronski Oct 2, 2025
b1454e8
Generify `ComposeKeyboardInputHandler`, making it work with any imple…
ArturSkowronski Nov 24, 2025
f676f94
Support for Gamepad - for now Xbox one
ArturSkowronski Nov 25, 2025
808a750
Merge pull request #60 from ArturSkowronski/support-for-nes-controller
ArturSkowronski Nov 25, 2025
0838da8
Support for Gamepad - working implementation
ArturSkowronski Nov 25, 2025
2e46e0b
Support for Switch Controllers
ArturSkowronski Nov 25, 2025
e1b634f
Merge pull request #61 from ArturSkowronski/switch-gamepad-support
ArturSkowronski Nov 25, 2025
ac4e796
Remapping buttons to something sensible
ArturSkowronski Nov 27, 2025
7ddee43
Support for Gamepad in Terminal
ArturSkowronski Nov 27, 2025
d2fc773
Merge pull request #62 from ArturSkowronski/switch-gamepad-support
ArturSkowronski Nov 27, 2025
8919f16
Add CPU step() method and internal status for testing
ArturSkowronski Apr 2, 2026
c987d88
Add Kotest 5.9.1 test dependencies to knes-emulator
ArturSkowronski Apr 2, 2026
03a6331
Add CPU test harness with smoke test
ArturSkowronski Apr 2, 2026
64efccc
Add ADC and SBC instruction tests
ArturSkowronski Apr 2, 2026
8f19a70
Add ASL, LSR, ROL, ROR instruction tests
ArturSkowronski Apr 2, 2026
e100ad2
Add AND, ORA, EOR, BIT instruction tests
ArturSkowronski Apr 2, 2026
9e05137
Add branch instruction tests (BCC, BCS, BEQ, BNE, BPL, BMI, BVC, BVS)
ArturSkowronski Apr 2, 2026
54337fe
Add INC, DEC, INX, DEX, INY, DEY instruction tests
ArturSkowronski Apr 2, 2026
8004c98
Add CMP, CPX, CPY instruction tests
ArturSkowronski Apr 2, 2026
8ddf090
Add LDA, LDX, LDY, STA, STX, STY instruction tests
ArturSkowronski Apr 2, 2026
37f2aec
Add JMP, JSR, RTS, NOP, and flag instruction tests
ArturSkowronski Apr 2, 2026
f8645d8
Add TAX, TAY, TXA, TYA, TSX, TXS transfer instruction tests
ArturSkowronski Apr 2, 2026
cb29bb2
Add PHA, PHP, PLA, PLP stack instruction tests
ArturSkowronski Apr 2, 2026
fe251c9
Add Memory unit tests
ArturSkowronski Apr 2, 2026
7508836
Remove placeholder smoke test, replaced by comprehensive test suite
ArturSkowronski Apr 2, 2026
b4fa72b
Add NameTable and Tile unit tests
ArturSkowronski Apr 2, 2026
6152bef
Add PAPU channel unit tests (Square, Triangle, Noise)
ArturSkowronski Apr 2, 2026
75591f7
Add keyboard controller tests and Kotest to knes-controllers
ArturSkowronski Apr 2, 2026
30ce7e4
Add PPU register and sprite RAM tests
ArturSkowronski Apr 2, 2026
ed68114
Add GitHub Actions CI workflow for tests
ArturSkowronski Apr 2, 2026
28fe7da
Merge pull request #63 from ArturSkowronski/add-test-suite
ArturSkowronski Apr 2, 2026
fd9cea6
Add nestest.nes ROM integration test
ArturSkowronski Apr 3, 2026
75837d3
Merge pull request #64 from ArturSkowronski/nestest-integration
ArturSkowronski Apr 3, 2026
699b7e4
Bump LibGDX 1.12.1 → 1.14.0 and JNA 5.14.0 → 5.18.1
ArturSkowronski Apr 3, 2026
3f0875a
Fix nestest flakiness: clear RAM before execution for deterministic r…
ArturSkowronski Apr 3, 2026
7cf568d
Merge pull request #65 from ArturSkowronski/deps-conservative-upgrade
ArturSkowronski Apr 3, 2026
35c9da5
Bump Kotlin 2.2.0 → 2.3.20, Compose 1.8.2 → 1.10.3, Skiko 0.7.90 → 0.…
ArturSkowronski Apr 3, 2026
3db43cf
Merge pull request #66 from ArturSkowronski/deps-moderate-upgrade
ArturSkowronski Apr 3, 2026
f2f7fc2
Bump Gradle 8.8 → 9.4.1 and Kotest 5.9.1 → 6.1.4
ArturSkowronski Apr 3, 2026
68ded74
Merge pull request #67 from ArturSkowronski/deps-major-upgrade
ArturSkowronski Apr 3, 2026
a3ab290
Add EmulatorTestHarness for headless E2E game testing
ArturSkowronski Apr 3, 2026
6a38ff2
Add Super Mario Bros E2E tests (title→start, walk right)
ArturSkowronski Apr 3, 2026
1c5cde5
Merge pull request #68 from ArturSkowronski/e2e-game-testing
ArturSkowronski Apr 3, 2026
a426b25
Add Compose Desktop UI smoke tests
ArturSkowronski Apr 3, 2026
b3bcdd0
Merge pull request #69 from ArturSkowronski/compose-ui-smoke-test
ArturSkowronski Apr 3, 2026
5310723
Chores: fix Gradle deprecations, consolidate build config, remove dea…
ArturSkowronski Apr 3, 2026
8ec86c7
Merge pull request #70 from ArturSkowronski/chores-cleanup
ArturSkowronski Apr 3, 2026
fed53b8
Remove unnecessary non-null assertions and fix parameter naming warnings
ArturSkowronski Apr 3, 2026
8181616
Merge pull request #71 from ArturSkowronski/fix-null-assertions
ArturSkowronski Apr 3, 2026
e8aa3ed
Replace deprecated painterResource with classpath-based image loading
ArturSkowronski Apr 3, 2026
bb97bb7
Merge pull request #72 from ArturSkowronski/fix-deprecated-painter
ArturSkowronski Apr 3, 2026
db6aa5c
Fix module separation: use interface over concrete class, remove dupl…
ArturSkowronski Apr 3, 2026
8c03769
Merge pull request #73 from ArturSkowronski/fix-module-separation
ArturSkowronski Apr 3, 2026
aabecc1
Add MMC1 (Mapper 1) support for ~680 NES games
ArturSkowronski Apr 3, 2026
6d80478
Merge pull request #74 from ArturSkowronski/mapper-mmc1
ArturSkowronski Apr 3, 2026
b7296eb
Fix keyboard input in Compose UI
ArturSkowronski Apr 3, 2026
aca0368
Merge pull request #75 from ArturSkowronski/fix-keyboard-input
ArturSkowronski Apr 3, 2026
80de303
Update README: mappers, controls, testing, current tech stack
ArturSkowronski Apr 3, 2026
194529f
Fix "World 0-1" bug: zero RAM on power-on instead of random fill
ArturSkowronski Apr 3, 2026
c124c2b
Replace Swing JFileChooser with native AWT FileDialog
ArturSkowronski Apr 3, 2026
5652cb7
Merge pull request #76 from ArturSkowronski/fix-world-0-bug
ArturSkowronski Apr 3, 2026
abca736
Merge pull request #77 from ArturSkowronski/fix-file-dialog
ArturSkowronski Apr 3, 2026
80c2964
Optimize rendering: remove per-pixel HSB conversion and BufferedImage
ArturSkowronski Apr 3, 2026
96f5af6
Merge pull request #78 from ArturSkowronski/optimize-rendering
ArturSkowronski Apr 4, 2026
b8bf98b
Add knes-api module with Ktor dependencies
ArturSkowronski Apr 4, 2026
38f7765
Add ApiController implementing ControllerProvider for REST input
ArturSkowronski Apr 4, 2026
862df2a
Add EmulatorSession wrapping headless NES lifecycle
ArturSkowronski Apr 4, 2026
65fd4ff
Add Ktor API server with all REST endpoints
ArturSkowronski Apr 4, 2026
3515a9c
Add API server and controller tests
ArturSkowronski Apr 4, 2026
b528bbb
Merge pull request #79 from ArturSkowronski/api-server
ArturSkowronski Apr 4, 2026
8c02216
Add comprehensive kNES API README with usage, OpenAPI reference, and …
ArturSkowronski Apr 4, 2026
02896e7
Merge pull request #80 from ArturSkowronski/api-readme
ArturSkowronski Apr 4, 2026
c558e26
Clean up Compose UI: remove polling hack, dead code, simplify renderer
ArturSkowronski Apr 4, 2026
c164e62
Merge pull request #81 from ArturSkowronski/fix-compose-ui-quality
ArturSkowronski Apr 4, 2026
70b251b
Add E2E tests for REST API: game session, screenshot, FM2, batch step
ArturSkowronski Apr 4, 2026
11724fe
Fix E2E test skip: call skipIfNoRom() inside each test body
ArturSkowronski Apr 4, 2026
2dd7ac2
Merge pull request #82 from ArturSkowronski/api-e2e-test
ArturSkowronski Apr 4, 2026
20a5fc2
Update README: add REST API section, API module, test count
ArturSkowronski Apr 4, 2026
d9f3f4b
Change default API port to 6502 (MOS 6502 CPU easter egg)
ArturSkowronski Apr 4, 2026
66076e3
Add game profiles for dynamic RAM watch configuration
ArturSkowronski Apr 4, 2026
3eb5da0
Merge pull request #83 from ArturSkowronski/game-profiles
ArturSkowronski Apr 4, 2026
f58b06e
Update API README: document game profiles with SMB and FF1 examples
ArturSkowronski Apr 4, 2026
440b709
Add knes-debug module, Profile Monitor window, refactor profile owner…
ArturSkowronski Apr 4, 2026
cf35b1c
Merge pull request #84 from ArturSkowronski/profile-monitor-ui
ArturSkowronski Apr 4, 2026
9569869
Add embedded API server toggle in Compose UI with double-buffered frames
ArturSkowronski Apr 4, 2026
6df510a
Merge pull request #85 from ArturSkowronski/embedded-api-server
ArturSkowronski Apr 4, 2026
8d594a5
Expand FF1 profile to 70 addresses, add hidden flag for cheat data
ArturSkowronski Apr 4, 2026
c78a53e
Merge pull request #86 from ArturSkowronski/update-ff1-profile
ArturSkowronski Apr 4, 2026
7f1f175
Fix FF1 profile: add missing STR/AGI/INT/VIT/LUCK for chars 3 and 4
ArturSkowronski Apr 4, 2026
f7e14dc
Add knes-mcp module with MCP SDK dependency
ArturSkowronski Apr 5, 2026
5e59b01
Add NES emulator session for MCP server
ArturSkowronski Apr 5, 2026
545094d
Add MCP server with 9 emulator tools
ArturSkowronski Apr 5, 2026
1d48236
Merge pull request #87 from ArturSkowronski/mcp-server
ArturSkowronski Apr 5, 2026
c278210
MCP server bridges to REST API for live visualization
ArturSkowronski Apr 5, 2026
4067b02
Merge pull request #88 from ArturSkowronski/mcp-rest-bridge
ArturSkowronski Apr 5, 2026
686a8e1
Add MCP module tests: session (14), REST client (2), server creation (1)
ArturSkowronski Apr 5, 2026
3c8a9b1
Merge pull request #89 from ArturSkowronski/mcp-tests
ArturSkowronski Apr 5, 2026
5704030
MCP E2E tests and shared mode fixes for live gameplay
ArturSkowronski Apr 5, 2026
a2e06f7
Merge pull request #90 from ArturSkowronski/mcp-e2e-shared-mode
ArturSkowronski Apr 5, 2026
80d038e
Responsive NES screen and remove Kotlin Dev Day branding
ArturSkowronski Apr 6, 2026
5800e8b
Add frame-synchronized input queue design spec
ArturSkowronski Apr 7, 2026
5eeeca7
Add implementation plan for frame-synchronized input queue
ArturSkowronski Apr 7, 2026
1c4a13c
feat: add InputQueue for frame-synchronized input delivery
ArturSkowronski Apr 7, 2026
ad7b8c6
refactor: add threading contract doc and fix LatchEntry to plain class
ArturSkowronski Apr 7, 2026
a04deb4
feat: integrate InputQueue into ApiController with merged getKeyState
ArturSkowronski Apr 7, 2026
173881f
feat: /step route uses InputQueue for shared mode
ArturSkowronski Apr 7, 2026
c02ad50
feat: wire onFrameBoundary into Compose UI frame callback
ArturSkowronski Apr 7, 2026
6611a8b
feat: add InputQueue to NesEmulatorSession for standalone consistency
ArturSkowronski Apr 7, 2026
078c60a
fix: address review findings — thread safety, standalone onFrameBoundary
ArturSkowronski Apr 7, 2026
2281eeb
Add MCP speed improvements design spec
ArturSkowronski Apr 8, 2026
22083b5
Add implementation plan for MCP speed improvements
ArturSkowronski Apr 8, 2026
c2ced04
feat: add screenshot flag to step/sequence, add /tap endpoint
ArturSkowronski Apr 8, 2026
8072119
feat: add screenshot to step, add tap and sequence MCP tools
ArturSkowronski Apr 8, 2026
3ccf855
Update FF1 system prompt for tap, sequence, and screenshot tools
ArturSkowronski Apr 8, 2026
925efd2
feat: add GameAction interface, ActionController, and ActionResult
ArturSkowronski Apr 12, 2026
80d608a
feat: add FF1 BattleFightAll action and ActionRegistry
ArturSkowronski Apr 12, 2026
8211ade
feat: add REST API + MCP tools for pluggable game actions
ArturSkowronski Apr 12, 2026
bd7ed0e
feat: add WalkUntilEncounter game action for FF1
ArturSkowronski Apr 13, 2026
e43c693
fix: update deprecated GitHub Actions in build workflow
ArturSkowronski Apr 13, 2026
dac33c4
docs: add design specs and implementation plans for recent features
ArturSkowronski Apr 30, 2026
e72bc41
Merge pull request #91 from ArturSkowronski/ui-cleanup
ArturSkowronski Apr 30, 2026
2300a00
spec: FF1 Koog agent (Advisor pattern, shared EmulatorToolset)
ArturSkowronski Apr 30, 2026
8b24f86
spec: rename shared module to knes-agent-tools
ArturSkowronski May 1, 2026
d89dd28
plan: FF1 Koog agent implementation plan (6 phases)
ArturSkowronski May 1, 2026
a0a9401
feat(agent-tools): scaffold knes-agent-tools module
ArturSkowronski May 1, 2026
8c3ee81
feat(agent-tools): typed result DTOs
ArturSkowronski May 1, 2026
68de44c
feat(agent-tools): EmulatorToolset over EmulatorSession
ArturSkowronski May 1, 2026
8751985
refactor(api): delegate route handlers to EmulatorToolset
ArturSkowronski May 1, 2026
6f7583f
feat(agent-tools): make step/tap/sequence mode-aware (standalone + sh…
ArturSkowronski May 1, 2026
ca5775c
refactor(mcp): delegate to EmulatorToolset in-process; --remote retai…
ArturSkowronski May 1, 2026
919a9fe
feat(agent): scaffold knes-agent module with Koog deps
ArturSkowronski May 1, 2026
fdaa9bd
test(agent): smoke test live Anthropic call via Koog
ArturSkowronski May 1, 2026
01a5cff
feat(agent-tools): annotate EmulatorToolset as Koog ToolSet
ArturSkowronski May 1, 2026
5fccf1a
test(agent): smoke test reActStrategy + EmulatorToolset
ArturSkowronski May 1, 2026
ebb61a7
feat(agent): RamObserver classifies FF1 phase from RAM
ArturSkowronski May 1, 2026
4501211
feat(agent): ScreenshotPolicy attaches on phase change
ArturSkowronski May 1, 2026
8a5e94f
refactor(agent-tools): drop unused args param from executeAction (Koo…
ArturSkowronski May 1, 2026
f7f89bd
feat(agent): AdvisorAgent (Opus, single-shot planner) + ReadOnlyToolset
ArturSkowronski May 1, 2026
d97b363
feat(agent): ExecutorAgent (Sonnet, reActStrategy, advisor tool)
ArturSkowronski May 1, 2026
58eced3
feat(agent): JSONL trace logger
ArturSkowronski May 1, 2026
ca320e3
feat(agent): Outcome + SuccessCriteria (Garland defeat / party wipe)
ArturSkowronski May 1, 2026
2809dce
feat(agent): AgentSession outer loop with watchdog and budget
ArturSkowronski May 1, 2026
bc28bc6
feat(agent): CLI entry point
ArturSkowronski May 1, 2026
48d3783
docs(spec): record post-implementation reality (knes-emulator-session…
ArturSkowronski May 1, 2026
2ab4be8
fix(agent): add ktor-client-cio to runtime classpath
ArturSkowronski May 1, 2026
56bea05
fix(agent): catch ReAct iteration cap, add stdout progress
ArturSkowronski May 1, 2026
44dc2fe
fix(agent): match Koog iteration-cap exception by name (class is inte…
ArturSkowronski May 1, 2026
68783fd
fix(agent): build fresh AIAgent per call (Koog AIAgent is single-use)
ArturSkowronski May 1, 2026
c645f32
fix(agent): detect TitleOrMenu via bootFlag, cap Koog ReAct at 10 ite…
ArturSkowronski May 1, 2026
01b3519
fix(agent): fresh executor+client per call, clean FfPhase toString, t…
ArturSkowronski May 1, 2026
e36f425
Merge pull request #92 from ArturSkowronski/ff1-agent
ArturSkowronski May 1, 2026
a9c5d60
docs(research): LLM-plays-games prior art for V2 brainstorm
ArturSkowronski May 1, 2026
2b2d777
spec: FF1 agent V2 design (singleRunStrategy + skill library + cachin…
ArturSkowronski May 1, 2026
f3aef68
plan: FF1 agent V2 implementation (singleRunStrategy + skill library,…
ArturSkowronski May 2, 2026
f0982af
research: Koog 0.5.1 prompt-cache surface probe
ArturSkowronski May 2, 2026
99c41b1
feat(agent): AnthropicSession (long-lived client wrapper)
ArturSkowronski May 2, 2026
2030eea
feat(agent): ModelRouter (per-phase, per-role model selection) + exte…
ArturSkowronski May 2, 2026
cdef766
feat(agent): PromptCacheConfig (path B no-op stub per Task 1.1 probe)
ArturSkowronski May 2, 2026
84d9940
Merge pull request #93 from ArturSkowronski/ff1-agent-v2
ArturSkowronski May 2, 2026
232c9a7
feat(agent): Skill interface + SkillResult
ArturSkowronski May 2, 2026
d9d55c0
feat(agent): PressStartUntilOverworld skill
ArturSkowronski May 2, 2026
45b4caa
research: empirical FF1 RAM signatures for V2 phases
ArturSkowronski May 2, 2026
480149d
research: bootFlag heuristic is broken; identify real RAM markers (wo…
ArturSkowronski May 2, 2026
d65c6e7
fix(agent): replace broken bootFlag heuristic with worldX/char1_hpLow…
ArturSkowronski May 2, 2026
5f56836
feat(agent): WalkOverworldTo skill (greedy)
ArturSkowronski May 2, 2026
9eb1d22
feat(agent): SkillRegistry (5-tool Koog facade for V2 scope C)
ArturSkowronski May 2, 2026
64227f8
fix(agent): RamSignatureRecorderTest self-skips when ROM absent (CI)
ArturSkowronski May 2, 2026
55a6e53
Merge pull request #94 from ArturSkowronski/ff1-agent-v2
ArturSkowronski May 2, 2026
48be884
refactor(agent): V2 pipeline rewire — singleRunStrategy + AnthropicSe…
ArturSkowronski May 2, 2026
a602271
Merge pull request #95 from ArturSkowronski/ff1-agent-v2
ArturSkowronski May 2, 2026
8569fd9
fix(agent): cap maxIterations on AIAgent (singleRunStrategy still loo…
ArturSkowronski May 2, 2026
81b15db
fix(agent): bump maxIterations to 10/8 (Koog counts nodes not LLM calls)
ArturSkowronski May 2, 2026
0c3d402
evidence: V2 first autonomous run — boot→overworld→walking, OutOfBudg…
ArturSkowronski May 2, 2026
11d604e
Merge pull request #96 from ArturSkowronski/ff1-agent-v2
ArturSkowronski May 2, 2026
b401fa9
feat(agent): preserve full reasoning in trace (advisor input/plan, ex…
ArturSkowronski May 2, 2026
b12c330
feat(agent): default run dir = ~/.knes/runs/<timestamp> (env KNES_RUN…
ArturSkowronski May 2, 2026
3b183c2
fix(agent): drop strict DONE rule (model said DONE without tool call)…
ArturSkowronski May 2, 2026
6453c7e
evidence: V2.1 run — agent stuck inside Coneria castle (locationType …
ArturSkowronski May 2, 2026
9709784
Merge pull request #97 from ArturSkowronski/ff1-agent-v2
ArturSkowronski May 2, 2026
29aa653
feat(agent): V2.2 — Indoors phase + exitBuilding skill (fixes stuck-i…
ArturSkowronski May 2, 2026
547099b
spec(agent): V2.3 design — deterministic findPath + viewport map + fo…
ArturSkowronski May 2, 2026
ed57b73
plan(agent): V2.3 implementation plan — 14 tasks, TDD-driven, with ev…
ArturSkowronski May 2, 2026
b7065c9
feat(agent): V2.3 — domain types (TileType, Direction, SearchSpace, P…
ArturSkowronski May 2, 2026
855e3aa
feat(agent): V2.3 — ViewportMap data class
ArturSkowronski May 2, 2026
4a5a9f3
feat(agent): V2.3 — FogOfWar accumulator with merge/blocked/bbox
ArturSkowronski May 2, 2026
2cfc4a0
feat(agent): V2.3 — TileClassifier with JSON-loaded mapping (seed val…
ArturSkowronski May 2, 2026
19af5bd
feat(agent): V2.3 — NametableReader + EmulatorSession.readNametableTile
ArturSkowronski May 2, 2026
edeb990
feat(agent): V2.3 — OverworldMap (parses FF1 RLE map from ROM) replac…
ArturSkowronski May 2, 2026
8f1baff
feat(agent): V2.3 — ViewportPathfinder BFS with detour, partial paths…
ArturSkowronski May 2, 2026
0c71604
feat(agent): V2.3 — RamObserver.observeFull returns Observation with …
ArturSkowronski May 2, 2026
b3c85d4
feat(agent): V2.3 — AsciiMapRenderer for advisor input
ArturSkowronski May 2, 2026
2cfc5cf
feat(agent): V2.3 — findPath @Tool + WalkOverworldTo refactor (BFS + …
ArturSkowronski May 2, 2026
d1f57a6
feat(agent): V2.3 — AdvisorAgent prompt now augments Overworld with A…
ArturSkowronski May 2, 2026
fbc9e6b
feat(agent): V2.3 — wire OverworldMap + FogOfWar to RamObserver and A…
ArturSkowronski May 2, 2026
24287fd
fix(agent): V2.3 — bump executor maxIterations 10→20 (findPath chain …
ArturSkowronski May 2, 2026
b04bf03
evidence(agent): V2.3 run — V2.1 deadend escaped (146,158→145,152); n…
ArturSkowronski May 2, 2026
0b16e10
fix(agent): V2.3.1 — detect FF1 town outdoor maps as Indoors phase
ArturSkowronski May 2, 2026
45f6bac
chore(agent): remove diagnostic DumpAround152Test (was for V2.3 calib…
ArturSkowronski May 2, 2026
a0100da
evidence(agent): V2.3.1 run — phase classifier fixed; agent fights 5 …
ArturSkowronski May 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 12 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "Java",
"image": "mcr.microsoft.com/devcontainers/java:1-21",
"features": {
"ghcr.io/devcontainers/features/java:1": {
"version": "none",
"installMaven": "true",
"mavenVersion": "3.8.6",
"installGradle": "true"
}
}
}
30 changes: 30 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Java CI

on:
push:
branches: [ "**" ]
pull_request:
branches: [ "**" ]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v4

- name: Build with Gradle
run: ./gradlew build

- name: Run tests
run: ./gradlew test
22 changes: 22 additions & 0 deletions .github/workflows/junie.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Junie
run-name: Junie run ${{ inputs.run_id }}

permissions:
contents: write
pull-requests: write

on:
workflow_dispatch:
inputs:
run_id:
description: "id of workflow process"
required: true
workflow_params:
description: "stringified params"
required: true

jobs:
call-workflow-passing-data:
uses: jetbrains-junie/junie-workflows/.github/workflows/ej-issue.yml@main
with:
workflow_params: ${{ inputs.workflow_params }}
19 changes: 19 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Test

on:
push:
branches: ['**']
pull_request:
branches: [master]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- uses: gradle/actions/setup-gradle@v4
- run: ./gradlew test
52 changes: 52 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Gradle
.gradle/
.history/
build/

# Java
*.class
*.jar
*.war
*.ear
!gradle/wrapper/gradle-wrapper.jar

# IntelliJ IDEA
.idea/
*.iml
*.ipr
*.iws
out/

# Kotlin
.kotlin/

# Eclipse
.project
.classpath
.settings/
bin/

# NetBeans
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/

# VS Code
.vscode/

# macOS
.DS_Store

# Logs
*.log

# Temporary files
*.tmp
*.swp
*.nes
!**/src/test/resources/*.nes
knes-agent/runs/
roms
98 changes: 98 additions & 0 deletions .junie/guidelines.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# kNES Project Guidelines

## Project Overview

kNES is a Nintendo Entertainment System (NES) emulator implemented in Java. It allows users to play NES games on modern computers by emulating the hardware of the original Nintendo Entertainment System. The emulator is implemented as a Java applet, which can be run either in a compatible browser or as a standalone application using the provided AppletLauncher.

### Key Features

- NES hardware emulation
- Support for loading and playing NES ROM files
- Java-based implementation for cross-platform compatibility
- Multiple ways to run the emulator (standalone, applet, etc.)

## Technical Architecture

The project is structured as follows:

- `src/main/java/` - Java source files containing the emulator implementation
- `src/main/resources/` - Resource files (palettes)
- `roms/` - Directory for storing NES ROM files (not included in the repository)
- `build.gradle` - Gradle build configuration
- `settings.gradle` - Gradle settings
- `all.policy` - Java security policy file for running the applet

## Development Guidelines

### Environment Setup

- **Java Version**: Java 8 (JDK 1.8) is required as it's the last Java version with full applet support
- **Build System**: Gradle (wrapper included in the repository)
- **IDE**: Any Java IDE with Gradle support (IntelliJ IDEA, Eclipse, etc.)

### Building the Project

To build the project:

```
./gradlew build
```

This will compile the Java sources and create a JAR file in `build/libs/kNES.jar`.

### Running the Application

There are multiple ways to run the application:

1. **Using Gradle run task (recommended)**:
```
./gradlew run
```

2. **Running the JAR file directly**:
```
java -jar build/libs/kNES.jar
```

3. **Using Gradle runApplet task** (requires Java 8 with appletviewer):
```
./gradlew runApplet
```

4. **Using a Java 8 compatible browser** (requires Java 8):
After running the build task, an HTML file is generated at `build/applet.html`. You can open this file in a browser that supports Java applets (with the Java plugin enabled).

### Using ROM Files

To use the emulator, you need to provide NES ROM files:

1. Create a `roms` directory in the project root (if not already created)
2. Place your NES ROM files (`.nes` files) in the `roms` directory
3. When running the application, you can load a ROM by:
- Placing a ROM file named `knes.nes` in the project root directory, or
- Using the file chooser in the application to select a ROM file

### Continuous Integration

This project uses GitHub Actions for continuous integration. The workflow:

- Runs on every push and pull request
- Builds the project with Gradle
- Runs tests to verify functionality
- Uses Java 8 (JDK 1.8) for compatibility

## Contributing

When contributing to this project, please follow these guidelines:

1. Create a feature branch for your changes
2. Follow Java coding conventions
3. Write tests for new functionality
4. Update documentation as needed
5. Submit a pull request for review

## Notes and Limitations

- Java applets are deprecated technology and may not work in modern browsers
- This project is configured to use Java 8, which is the last version with full applet support
- NES ROM files are not included with this project. You must obtain them legally elsewhere.
7 changes: 7 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"mcpServers": {
"knes": {
"command": "/Users/askowronski/Priv/kNES/knes-mcp/build/install/knes-mcp/bin/knes-mcp"
}
}
}
1 change: 1 addition & 0 deletions .sdkmanrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
java=25-tem
Loading