neonrp 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (835) hide show
  1. neonrp-0.1.0/.env.example +34 -0
  2. neonrp-0.1.0/.gitattributes +25 -0
  3. neonrp-0.1.0/.githooks/pre-commit +11 -0
  4. neonrp-0.1.0/.github/workflows/release.yml +245 -0
  5. neonrp-0.1.0/.github/workflows/test.yml +41 -0
  6. neonrp-0.1.0/.gitignore +40 -0
  7. neonrp-0.1.0/CHANGELOG.md +154 -0
  8. neonrp-0.1.0/DEV_README.md +101 -0
  9. neonrp-0.1.0/PKG-INFO +278 -0
  10. neonrp-0.1.0/README.md +253 -0
  11. neonrp-0.1.0/VERSION.txt +1 -0
  12. neonrp-0.1.0/cards/chubai/main_august-baeb4d86fd8c_spec_v2.json +249 -0
  13. neonrp-0.1.0/cards/chubai/main_august-baeb4d86fd8c_spec_v2.png +0 -0
  14. neonrp-0.1.0/cards/sillytavern/The-Game-Master-aicharactercards.com_.png +0 -0
  15. neonrp-0.1.0/docs/ADRs/0000-template.md +22 -0
  16. neonrp-0.1.0/docs/ADRs/0001-cli-framework.md +34 -0
  17. neonrp-0.1.0/docs/ADRs/0002-event-storage-format.md +47 -0
  18. neonrp-0.1.0/docs/ADRs/0003-snapshot-and-branch-strategy.md +66 -0
  19. neonrp-0.1.0/docs/ADRs/0004-world-entity-conventions.md +67 -0
  20. neonrp-0.1.0/docs/ADRs/0005-indexing-strategy.md +71 -0
  21. neonrp-0.1.0/docs/ADRs/0006-agent-spec-and-permissions.md +33 -0
  22. neonrp-0.1.0/docs/ADRs/0007-proposal-format-plan-diff-apply.md +31 -0
  23. neonrp-0.1.0/docs/ADRs/0008-llm-adapter-and-config.md +24 -0
  24. neonrp-0.1.0/docs/ADRs/0009-skill-tool-registry-and-auditing.md +23 -0
  25. neonrp-0.1.0/docs/ADRs/0010-sillytavern-import-mapping.md +28 -0
  26. neonrp-0.1.0/docs/ADRs/0011-sandbox-branch-model.md +24 -0
  27. neonrp-0.1.0/docs/ADRs/0012-replay-and-determinism-contract.md +29 -0
  28. neonrp-0.1.0/docs/ADRs/0013-tui-framework-and-architecture.md +31 -0
  29. neonrp-0.1.0/docs/ADRs/0014-tui-interaction-model-and-keybindings.md +33 -0
  30. neonrp-0.1.0/docs/ADRs/0015-agentic-loop-and-tool-calling.md +88 -0
  31. neonrp-0.1.0/docs/ADRs/0016-session-log-and-context-window.md +82 -0
  32. neonrp-0.1.0/docs/ADRs/0017-agent-dispatcher-and-routing.md +96 -0
  33. neonrp-0.1.0/docs/ADRs/0018-llm-streaming-contract.md +88 -0
  34. neonrp-0.1.0/docs/ADRs/0019-llm-error-handling-and-retry.md +85 -0
  35. neonrp-0.1.0/docs/ADRs/0020-game-rules-engine-and-entity-schema.md +123 -0
  36. neonrp-0.1.0/docs/ADRs/0021-universal-tool-system.md +101 -0
  37. neonrp-0.1.0/docs/ADRs/0022-sub-agent-task-tool.md +139 -0
  38. neonrp-0.1.0/docs/ADRs/0023-per-agent-llm-configuration.md +160 -0
  39. neonrp-0.1.0/docs/ADRs/0024-mcp-integration-scope-and-compatibility.md +52 -0
  40. neonrp-0.1.0/docs/ADRs/0025-mcp-tool-router-and-permission-model.md +59 -0
  41. neonrp-0.1.0/docs/ADRs/0026-sub-agent-delegation-contract.md +220 -0
  42. neonrp-0.1.0/docs/ADRs/0027-deterministic-check-tools.md +306 -0
  43. neonrp-0.1.0/docs/ARCHITECTURE.md +471 -0
  44. neonrp-0.1.0/docs/CLI_REFERENCE.md +1056 -0
  45. neonrp-0.1.0/docs/ENGINE_DECOUPLING_REFACTOR_PLAN_2026-03-04.md +179 -0
  46. neonrp-0.1.0/docs/ISSUE_OLLAMA_TOOL_CALL_ARGS.md +95 -0
  47. neonrp-0.1.0/docs/ISSUE_SUB_AGENT_AUTO_EXIT.md +231 -0
  48. neonrp-0.1.0/docs/L14_AUTO_UPDATE_SCHEME.md +508 -0
  49. neonrp-0.1.0/docs/L14_UNIFIED_TUI_SPEC.md +319 -0
  50. neonrp-0.1.0/docs/M10_TASK_CARDS.md +248 -0
  51. neonrp-0.1.0/docs/M11_TASK_CARDS.md +222 -0
  52. neonrp-0.1.0/docs/M12_MIGRATION.md +44 -0
  53. neonrp-0.1.0/docs/M12_TASK_CARDS.md +353 -0
  54. neonrp-0.1.0/docs/M13_TASK_CARDS.md +1123 -0
  55. neonrp-0.1.0/docs/M14_TASK_CARDS.md +500 -0
  56. neonrp-0.1.0/docs/M15_TASK_CARDS.md +745 -0
  57. neonrp-0.1.0/docs/M1_TASK_CARDS.md +186 -0
  58. neonrp-0.1.0/docs/M1_VALIDATION_INDEX_DESIGN.md +165 -0
  59. neonrp-0.1.0/docs/M2_AGENTS_PLAN_DIFF_APPLY_DESIGN.md +260 -0
  60. neonrp-0.1.0/docs/M2_TASK_CARDS.md +227 -0
  61. neonrp-0.1.0/docs/M3_LLM_COMMANDS_SKILLS_IMPORT_DESIGN.md +239 -0
  62. neonrp-0.1.0/docs/M3_TASK_CARDS.md +340 -0
  63. neonrp-0.1.0/docs/M4_SANDBOX_REPLAY_DESIGN.md +200 -0
  64. neonrp-0.1.0/docs/M4_TASK_CARDS.md +293 -0
  65. neonrp-0.1.0/docs/M5_TASK_CARDS.md +219 -0
  66. neonrp-0.1.0/docs/M5_TUI_DESIGN.md +133 -0
  67. neonrp-0.1.0/docs/M6.5_TASK_CARDS.md +338 -0
  68. neonrp-0.1.0/docs/M6_TASK_CARDS.md +405 -0
  69. neonrp-0.1.0/docs/M7_TASK_CARDS.md +289 -0
  70. neonrp-0.1.0/docs/M8_TASK_CARDS.md +229 -0
  71. neonrp-0.1.0/docs/M9_TASK_CARDS.md +313 -0
  72. neonrp-0.1.0/docs/MAC_INSTALL.md +69 -0
  73. neonrp-0.1.0/docs/PLAY_MODE_PERFORMANCE_INVESTIGATION_2026-02-23.md +94 -0
  74. neonrp-0.1.0/docs/PROGRESS.md +928 -0
  75. neonrp-0.1.0/docs/QUALITY_GATES.md +117 -0
  76. neonrp-0.1.0/docs/REQUIREMENTS.md +167 -0
  77. neonrp-0.1.0/docs/ROADMAP.md +1242 -0
  78. neonrp-0.1.0/docs/TUI_GUIDE.md +306 -0
  79. neonrp-0.1.0/docs/TUTORIAL.md +404 -0
  80. neonrp-0.1.0/docs/compare/IMPLEMENTATION_PLAN.md +552 -0
  81. neonrp-0.1.0/docs/docs-worldlines/plan-mcp-tui.md +235 -0
  82. neonrp-0.1.0/docs/docs-worldlines/plan.md +352 -0
  83. neonrp-0.1.0/docs/releases.md +596 -0
  84. neonrp-0.1.0/examples/multi-agent/README.md +54 -0
  85. neonrp-0.1.0/examples/multi-agent/agents/narrator/agent.json +21 -0
  86. neonrp-0.1.0/examples/multi-agent/agents/narrator/system.md +60 -0
  87. neonrp-0.1.0/examples/multi-agent/agents/world-agent/agent.json +21 -0
  88. neonrp-0.1.0/examples/multi-agent/agents/world-agent/system.md +53 -0
  89. neonrp-0.1.0/examples/multi-agent/game/lore/example-lore.json +8 -0
  90. neonrp-0.1.0/examples/multi-agent/game/run_state/game-state.json +13 -0
  91. neonrp-0.1.0/examples/starter-world/README.md +91 -0
  92. neonrp-0.1.0/examples/starter-world/agents/narrator/agent.json +27 -0
  93. neonrp-0.1.0/examples/starter-world/agents/narrator/system.md +67 -0
  94. neonrp-0.1.0/examples/starter-world/game/item/energy-shield.json +15 -0
  95. neonrp-0.1.0/examples/starter-world/game/item/hacking-kit.json +15 -0
  96. neonrp-0.1.0/examples/starter-world/game/item/health-potion.json +15 -0
  97. neonrp-0.1.0/examples/starter-world/game/item/plasma-blade.json +15 -0
  98. neonrp-0.1.0/examples/starter-world/game/location/shadow-alley.json +10 -0
  99. neonrp-0.1.0/examples/starter-world/game/npc/info-broker-zara.json +19 -0
  100. neonrp-0.1.0/examples/starter-world/game/npc/merchant-kai.json +19 -0
  101. neonrp-0.1.0/examples/starter-world/game/player/player.json +24 -0
  102. neonrp-0.1.0/examples/starter-world/game/shop/cyber-market.json +36 -0
  103. neonrp-0.1.0/examples/starter-world/game/town/neon-city-plaza.json +21 -0
  104. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/character-agent.md +93 -0
  105. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/clock-keeper.md +49 -0
  106. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/combat-referee.md +136 -0
  107. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/dungeon-agent.md +106 -0
  108. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/notary-archivist.md +47 -0
  109. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/rules-referee.md +113 -0
  110. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/story-narrative.md +41 -0
  111. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/town-agent.md +124 -0
  112. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/world-agent.md +280 -0
  113. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/world-builder.md +39 -0
  114. neonrp-0.1.0/examples/stoneford-cc/.claude/agents/world-evolution.md +49 -0
  115. neonrp-0.1.0/examples/stoneford-cc/.claude/settings.json +9 -0
  116. neonrp-0.1.0/examples/stoneford-cc/CLAUDE.md +33 -0
  117. neonrp-0.1.0/examples/stoneford-cc/README.md +48 -0
  118. neonrp-0.1.0/examples/stoneford-cc/game/agents/contracts/contracts.md +34 -0
  119. neonrp-0.1.0/examples/stoneford-cc/game/agents/manifest.json +137 -0
  120. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/dungeon.json +17 -0
  121. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/encounter_tables.json +33 -0
  122. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/layout.json +54 -0
  123. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/loot_tables.json +30 -0
  124. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/rooms/D001_R001.json +13 -0
  125. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/rooms/D001_R002.json +13 -0
  126. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/rooms/D001_R003.json +14 -0
  127. neonrp-0.1.0/examples/stoneford-cc/game/dungeons/D001/rooms/D001_R004.json +13 -0
  128. neonrp-0.1.0/examples/stoneford-cc/game/lore/notes.md +14 -0
  129. neonrp-0.1.0/examples/stoneford-cc/game/lore/rumors.md +4 -0
  130. neonrp-0.1.0/examples/stoneford-cc/game/lore/story.md +7 -0
  131. neonrp-0.1.0/examples/stoneford-cc/game/meta/active-agent.json +7 -0
  132. neonrp-0.1.0/examples/stoneford-cc/game/meta/flag_aliases.json +47 -0
  133. neonrp-0.1.0/examples/stoneford-cc/game/meta/game-start.json +40 -0
  134. neonrp-0.1.0/examples/stoneford-cc/game/meta/run_state.json +78 -0
  135. neonrp-0.1.0/examples/stoneford-cc/game/meta/schedule.json +9 -0
  136. neonrp-0.1.0/examples/stoneford-cc/game/player/equipment.json +16 -0
  137. neonrp-0.1.0/examples/stoneford-cc/game/player/flags.json +37 -0
  138. neonrp-0.1.0/examples/stoneford-cc/game/player/inventory.json +61 -0
  139. neonrp-0.1.0/examples/stoneford-cc/game/player/journal.md +214 -0
  140. neonrp-0.1.0/examples/stoneford-cc/game/player/profile.json +6 -0
  141. neonrp-0.1.0/examples/stoneford-cc/game/player/stats.json +33 -0
  142. neonrp-0.1.0/examples/stoneford-cc/game/player/wallet.json +5 -0
  143. neonrp-0.1.0/examples/stoneford-cc/game/rules/combat_rules.md +21 -0
  144. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/facilities/guild.json +78 -0
  145. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/facilities/inn.json +17 -0
  146. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/facilities/shop_general.json +32 -0
  147. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/facilities/townhall.json +12 -0
  148. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/npcs.json +41 -0
  149. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/quests.json +54 -0
  150. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/town.json +29 -0
  151. neonrp-0.1.0/examples/stoneford-cc/game/towns/T001/town_map.json +107 -0
  152. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/facilities/appraiser.json +42 -0
  153. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/facilities/chapel.json +35 -0
  154. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/facilities/guild.json +59 -0
  155. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/facilities/herb_shop.json +68 -0
  156. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/facilities/shop_general.json +69 -0
  157. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/facilities/tavern.json +30 -0
  158. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/npcs.json +68 -0
  159. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/quests.json +49 -0
  160. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/town.json +34 -0
  161. neonrp-0.1.0/examples/stoneford-cc/game/towns/T004/town_map.json +97 -0
  162. neonrp-0.1.0/examples/stoneford-cc/game/world/world_map.json +240 -0
  163. neonrp-0.1.0/examples/stoneford-fast/README.md +43 -0
  164. neonrp-0.1.0/examples/stoneford-fast/agents/combat-referee/agent.json +42 -0
  165. neonrp-0.1.0/examples/stoneford-fast/agents/combat-referee/system.md +103 -0
  166. neonrp-0.1.0/examples/stoneford-fast/agents/dungeon-agent/agent.json +48 -0
  167. neonrp-0.1.0/examples/stoneford-fast/agents/dungeon-agent/system.md +102 -0
  168. neonrp-0.1.0/examples/stoneford-fast/agents/orchestrator/agent.json +41 -0
  169. neonrp-0.1.0/examples/stoneford-fast/agents/orchestrator/narrative.md +105 -0
  170. neonrp-0.1.0/examples/stoneford-fast/agents/orchestrator/system.md +232 -0
  171. neonrp-0.1.0/examples/stoneford-fast/agents/rules-referee/agent.json +28 -0
  172. neonrp-0.1.0/examples/stoneford-fast/agents/rules-referee/system.md +161 -0
  173. neonrp-0.1.0/examples/stoneford-fast/agents/town-agent/agent.json +38 -0
  174. neonrp-0.1.0/examples/stoneford-fast/agents/town-agent/system.md +136 -0
  175. neonrp-0.1.0/examples/stoneford-fast/agents/world-agent/agent.json +41 -0
  176. neonrp-0.1.0/examples/stoneford-fast/agents/world-agent/narrative.md +105 -0
  177. neonrp-0.1.0/examples/stoneford-fast/agents/world-agent/system.md +232 -0
  178. neonrp-0.1.0/examples/stoneford-fast/agents/world-builder/agent.json +39 -0
  179. neonrp-0.1.0/examples/stoneford-fast/agents/world-builder/system.md +93 -0
  180. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/dungeon.json +17 -0
  181. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/encounter_tables.json +33 -0
  182. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/layout.json +54 -0
  183. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/loot_tables.json +30 -0
  184. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/rooms/D001_R001.json +13 -0
  185. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/rooms/D001_R002.json +13 -0
  186. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/rooms/D001_R003.json +14 -0
  187. neonrp-0.1.0/examples/stoneford-fast/game/dungeons/D001/rooms/D001_R004.json +13 -0
  188. neonrp-0.1.0/examples/stoneford-fast/game/lore/notes.md +8 -0
  189. neonrp-0.1.0/examples/stoneford-fast/game/lore/rumors.md +4 -0
  190. neonrp-0.1.0/examples/stoneford-fast/game/lore/story.md +7 -0
  191. neonrp-0.1.0/examples/stoneford-fast/game/meta/active-agent.json +7 -0
  192. neonrp-0.1.0/examples/stoneford-fast/game/meta/game-start.json +39 -0
  193. neonrp-0.1.0/examples/stoneford-fast/game/meta/run_state.json +16 -0
  194. neonrp-0.1.0/examples/stoneford-fast/game/player/equipment.json +20 -0
  195. neonrp-0.1.0/examples/stoneford-fast/game/player/flags.json +15 -0
  196. neonrp-0.1.0/examples/stoneford-fast/game/player/inventory.json +13 -0
  197. neonrp-0.1.0/examples/stoneford-fast/game/player/journal.md +4 -0
  198. neonrp-0.1.0/examples/stoneford-fast/game/player/profile.json +6 -0
  199. neonrp-0.1.0/examples/stoneford-fast/game/player/stats.json +33 -0
  200. neonrp-0.1.0/examples/stoneford-fast/game/player/wallet.json +5 -0
  201. neonrp-0.1.0/examples/stoneford-fast/game/rules/combat_rules.md +21 -0
  202. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/facilities/guild.json +63 -0
  203. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/facilities/inn.json +17 -0
  204. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/facilities/shop_general.json +32 -0
  205. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/facilities/townhall.json +12 -0
  206. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/npcs.json +41 -0
  207. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/quests.json +54 -0
  208. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/town.json +29 -0
  209. neonrp-0.1.0/examples/stoneford-fast/game/towns/T001/town_map.json +106 -0
  210. neonrp-0.1.0/examples/stoneford-fast/game/towns/T002/facilities/barracks.json +26 -0
  211. neonrp-0.1.0/examples/stoneford-fast/game/towns/T002/facilities/relay.json +26 -0
  212. neonrp-0.1.0/examples/stoneford-fast/game/towns/T002/facilities/smith.json +19 -0
  213. neonrp-0.1.0/examples/stoneford-fast/game/towns/T002/npcs.json +45 -0
  214. neonrp-0.1.0/examples/stoneford-fast/game/towns/T002/quests.json +70 -0
  215. neonrp-0.1.0/examples/stoneford-fast/game/towns/T002/town.json +28 -0
  216. neonrp-0.1.0/examples/stoneford-fast/game/towns/T002/town_map.json +68 -0
  217. neonrp-0.1.0/examples/stoneford-fast/game/towns/T003/facilities/command.json +19 -0
  218. neonrp-0.1.0/examples/stoneford-fast/game/towns/T003/facilities/field_hospital.json +15 -0
  219. neonrp-0.1.0/examples/stoneford-fast/game/towns/T003/npcs.json +29 -0
  220. neonrp-0.1.0/examples/stoneford-fast/game/towns/T003/quests.json +72 -0
  221. neonrp-0.1.0/examples/stoneford-fast/game/towns/T003/town.json +28 -0
  222. neonrp-0.1.0/examples/stoneford-fast/game/towns/T003/town_map.json +59 -0
  223. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/facilities/appraiser.json +13 -0
  224. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/facilities/chapel.json +15 -0
  225. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/facilities/guild.json +17 -0
  226. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/facilities/herb_shop.json +16 -0
  227. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/facilities/shop_general.json +17 -0
  228. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/facilities/tavern.json +17 -0
  229. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/npcs.json +69 -0
  230. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/quests.json +73 -0
  231. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/town.json +28 -0
  232. neonrp-0.1.0/examples/stoneford-fast/game/towns/T004/town_map.json +95 -0
  233. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/facilities/cathedral.json +19 -0
  234. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/facilities/governor_hall.json +20 -0
  235. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/facilities/market.json +21 -0
  236. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/facilities/port.json +18 -0
  237. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/facilities/prison.json +32 -0
  238. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/npcs.json +69 -0
  239. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/quests.json +84 -0
  240. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/town.json +28 -0
  241. neonrp-0.1.0/examples/stoneford-fast/game/towns/T005/town_map.json +94 -0
  242. neonrp-0.1.0/examples/stoneford-fast/game/world/world_map.json +97 -0
  243. neonrp-0.1.0/examples/stoneford-full/README.md +48 -0
  244. neonrp-0.1.0/examples/stoneford-full/agents/character-agent/agent.json +21 -0
  245. neonrp-0.1.0/examples/stoneford-full/agents/character-agent/system.md +85 -0
  246. neonrp-0.1.0/examples/stoneford-full/agents/clock-keeper/agent.json +32 -0
  247. neonrp-0.1.0/examples/stoneford-full/agents/clock-keeper/system.md +41 -0
  248. neonrp-0.1.0/examples/stoneford-full/agents/combat-referee/agent.json +42 -0
  249. neonrp-0.1.0/examples/stoneford-full/agents/combat-referee/system.md +160 -0
  250. neonrp-0.1.0/examples/stoneford-full/agents/dungeon-agent/agent.json +47 -0
  251. neonrp-0.1.0/examples/stoneford-full/agents/dungeon-agent/system.md +155 -0
  252. neonrp-0.1.0/examples/stoneford-full/agents/rules-referee/agent.json +28 -0
  253. neonrp-0.1.0/examples/stoneford-full/agents/rules-referee/system.md +178 -0
  254. neonrp-0.1.0/examples/stoneford-full/agents/story-narrative/agent.json +21 -0
  255. neonrp-0.1.0/examples/stoneford-full/agents/story-narrative/system.md +33 -0
  256. neonrp-0.1.0/examples/stoneford-full/agents/town-agent/agent.json +38 -0
  257. neonrp-0.1.0/examples/stoneford-full/agents/town-agent/system.md +189 -0
  258. neonrp-0.1.0/examples/stoneford-full/agents/world-agent/agent.json +41 -0
  259. neonrp-0.1.0/examples/stoneford-full/agents/world-agent/narrative.md +43 -0
  260. neonrp-0.1.0/examples/stoneford-full/agents/world-agent/system.md +347 -0
  261. neonrp-0.1.0/examples/stoneford-full/agents/world-builder/agent.json +37 -0
  262. neonrp-0.1.0/examples/stoneford-full/agents/world-builder/system.md +104 -0
  263. neonrp-0.1.0/examples/stoneford-full/agents/world-evolution/agent.json +21 -0
  264. neonrp-0.1.0/examples/stoneford-full/agents/world-evolution/system.md +41 -0
  265. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/dungeon.json +20 -0
  266. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/encounter_tables.json +33 -0
  267. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/layout.json +54 -0
  268. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/loot_tables.json +30 -0
  269. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/rooms/D001_R001.json +13 -0
  270. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/rooms/D001_R002.json +13 -0
  271. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/rooms/D001_R003.json +14 -0
  272. neonrp-0.1.0/examples/stoneford-full/game/dungeons/D001/rooms/D001_R004.json +13 -0
  273. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D001-mossbarrow.md +132 -0
  274. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D002-jadehollow-mines-l3.md +154 -0
  275. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D003-sunken-ward.md +160 -0
  276. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D004-brokenspine-watchtrail.md +168 -0
  277. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D005-olric-barrow.md +127 -0
  278. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D006-old-exchange-vault.md +138 -0
  279. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D007-fogmoor-hide.md +132 -0
  280. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D008-crosser-workshop.md +139 -0
  281. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/D009-second-sun-crag.md +144 -0
  282. neonrp-0.1.0/examples/stoneford-full/game/dungeons-design/N001-chasm-approach.md +341 -0
  283. neonrp-0.1.0/examples/stoneford-full/game/lore/beyond-the-world.md +83 -0
  284. neonrp-0.1.0/examples/stoneford-full/game/lore/foundation/colonial-history.md +634 -0
  285. neonrp-0.1.0/examples/stoneford-full/game/lore/foundation/eras-chronology.md +336 -0
  286. neonrp-0.1.0/examples/stoneford-full/game/lore/foundation/mythology.md +519 -0
  287. neonrp-0.1.0/examples/stoneford-full/game/lore/foundation/old-tongue.md +602 -0
  288. neonrp-0.1.0/examples/stoneford-full/game/lore/notes.md +14 -0
  289. neonrp-0.1.0/examples/stoneford-full/game/lore/rumors.md +16 -0
  290. neonrp-0.1.0/examples/stoneford-full/game/lore/story.md +114 -0
  291. neonrp-0.1.0/examples/stoneford-full/game/meta/active-agent.json +10 -0
  292. neonrp-0.1.0/examples/stoneford-full/game/meta/flag_aliases.json +47 -0
  293. neonrp-0.1.0/examples/stoneford-full/game/meta/game-start.json +40 -0
  294. neonrp-0.1.0/examples/stoneford-full/game/meta/run_state.json +30 -0
  295. neonrp-0.1.0/examples/stoneford-full/game/player/equipment.json +39 -0
  296. neonrp-0.1.0/examples/stoneford-full/game/player/flags.json +19 -0
  297. neonrp-0.1.0/examples/stoneford-full/game/player/inventory.json +13 -0
  298. neonrp-0.1.0/examples/stoneford-full/game/player/journal.md +4 -0
  299. neonrp-0.1.0/examples/stoneford-full/game/player/profile.json +6 -0
  300. neonrp-0.1.0/examples/stoneford-full/game/player/stats.json +33 -0
  301. neonrp-0.1.0/examples/stoneford-full/game/player/wallet.json +5 -0
  302. neonrp-0.1.0/examples/stoneford-full/game/rules/combat_rules.md +21 -0
  303. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/apothecary.json +17 -0
  304. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/chapel.json +15 -0
  305. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/exchange_vault.json +24 -0
  306. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/guild.json +28 -0
  307. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/inn.json +21 -0
  308. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/port.json +17 -0
  309. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/shop_general.json +19 -0
  310. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/facilities/townhall.json +14 -0
  311. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/npcs.json +271 -0
  312. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/quests.json +284 -0
  313. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/town.json +60 -0
  314. neonrp-0.1.0/examples/stoneford-full/game/towns/T001/town_map.json +205 -0
  315. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/barracks.json +36 -0
  316. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/chapel.json +20 -0
  317. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/envoy_quarters.json +20 -0
  318. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/guild_branch.json +23 -0
  319. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/inn.json +21 -0
  320. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/iron_forge.json +24 -0
  321. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/relay.json +38 -0
  322. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/scribe_rest.json +19 -0
  323. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/smith.json +22 -0
  324. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/facilities/stable.json +20 -0
  325. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/npcs.json +280 -0
  326. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/quests.json +146 -0
  327. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/town.json +43 -0
  328. neonrp-0.1.0/examples/stoneford-full/game/towns/T002/town_map.json +139 -0
  329. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/cave_annex.json +31 -0
  330. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/cemetery.json +25 -0
  331. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/command.json +19 -0
  332. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/field_hospital.json +27 -0
  333. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/forbidden_shelf.json +34 -0
  334. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/inn.json +20 -0
  335. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/monastery_archive.json +30 -0
  336. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/monastery_chapel.json +33 -0
  337. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/monastery_library.json +36 -0
  338. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/pass_watch_guardhouse.json +27 -0
  339. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/facilities/wall_glyph.json +30 -0
  340. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/npcs.json +260 -0
  341. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/quests.json +158 -0
  342. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/town.json +58 -0
  343. neonrp-0.1.0/examples/stoneford-full/game/towns/T003/town_map.json +219 -0
  344. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/appraiser.json +13 -0
  345. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/bram_cottage.json +21 -0
  346. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/chapel.json +15 -0
  347. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/envoy_house.json +25 -0
  348. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/guild.json +24 -0
  349. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/guild_tower.json +18 -0
  350. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/herb_shop.json +16 -0
  351. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/library.json +25 -0
  352. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/library_deep_archive.json +50 -0
  353. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/mine_office.json +21 -0
  354. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/shop_general.json +17 -0
  355. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/facilities/tavern.json +40 -0
  356. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/npcs.json +224 -0
  357. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/quests.json +162 -0
  358. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/town.json +41 -0
  359. neonrp-0.1.0/examples/stoneford-full/game/towns/T004/town_map.json +189 -0
  360. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/cathedral_chapter.json +13 -0
  361. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/guild_citadel.json +23 -0
  362. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/market.json +27 -0
  363. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/royal_chambers_crown.json +16 -0
  364. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/royal_chambers_faith.json +16 -0
  365. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/royal_chambers_free_north.json +16 -0
  366. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/royal_chambers_union.json +17 -0
  367. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/sulas_ledger_room.json +16 -0
  368. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/summit_hall.json +25 -0
  369. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/sunken_ward.json +15 -0
  370. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/facilities/veyls_camp.json +16 -0
  371. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/npcs.json +404 -0
  372. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/quests.json +144 -0
  373. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/town.json +45 -0
  374. neonrp-0.1.0/examples/stoneford-full/game/towns/T005/town_map.json +191 -0
  375. neonrp-0.1.0/examples/stoneford-full/game/towns/_WAVE4_CHECKER_REPORT.md +191 -0
  376. neonrp-0.1.0/examples/stoneford-full/game/world/cultures/crown.md +195 -0
  377. neonrp-0.1.0/examples/stoneford-full/game/world/cultures/faith.md +180 -0
  378. neonrp-0.1.0/examples/stoneford-full/game/world/cultures/fog.md +220 -0
  379. neonrp-0.1.0/examples/stoneford-full/game/world/cultures/free-north.md +202 -0
  380. neonrp-0.1.0/examples/stoneford-full/game/world/cultures/union.md +216 -0
  381. neonrp-0.1.0/examples/stoneford-full/game/world/items.md +865 -0
  382. neonrp-0.1.0/examples/stoneford-full/game/world/relics.md +825 -0
  383. neonrp-0.1.0/examples/stoneford-full/game/world/species.md +666 -0
  384. neonrp-0.1.0/examples/stoneford-full/game/world/world_map.CHANGELOG.md +61 -0
  385. neonrp-0.1.0/examples/stoneford-full/game/world/world_map.json +353 -0
  386. neonrp-0.1.0/examples/stoneford-orch/README.md +43 -0
  387. neonrp-0.1.0/examples/stoneford-orch/agents/character-agent/agent.json +21 -0
  388. neonrp-0.1.0/examples/stoneford-orch/agents/character-agent/system.md +85 -0
  389. neonrp-0.1.0/examples/stoneford-orch/agents/clock-keeper/agent.json +32 -0
  390. neonrp-0.1.0/examples/stoneford-orch/agents/clock-keeper/system.md +41 -0
  391. neonrp-0.1.0/examples/stoneford-orch/agents/combat-referee/agent.json +42 -0
  392. neonrp-0.1.0/examples/stoneford-orch/agents/combat-referee/system.md +160 -0
  393. neonrp-0.1.0/examples/stoneford-orch/agents/dungeon-agent/agent.json +47 -0
  394. neonrp-0.1.0/examples/stoneford-orch/agents/dungeon-agent/system.md +155 -0
  395. neonrp-0.1.0/examples/stoneford-orch/agents/rules-referee/agent.json +28 -0
  396. neonrp-0.1.0/examples/stoneford-orch/agents/rules-referee/system.md +178 -0
  397. neonrp-0.1.0/examples/stoneford-orch/agents/story-narrative/agent.json +21 -0
  398. neonrp-0.1.0/examples/stoneford-orch/agents/story-narrative/system.md +33 -0
  399. neonrp-0.1.0/examples/stoneford-orch/agents/town-agent/agent.json +38 -0
  400. neonrp-0.1.0/examples/stoneford-orch/agents/town-agent/system.md +189 -0
  401. neonrp-0.1.0/examples/stoneford-orch/agents/world-agent/agent.json +41 -0
  402. neonrp-0.1.0/examples/stoneford-orch/agents/world-agent/narrative.md +43 -0
  403. neonrp-0.1.0/examples/stoneford-orch/agents/world-agent/system.md +347 -0
  404. neonrp-0.1.0/examples/stoneford-orch/agents/world-builder/agent.json +37 -0
  405. neonrp-0.1.0/examples/stoneford-orch/agents/world-builder/system.md +104 -0
  406. neonrp-0.1.0/examples/stoneford-orch/agents/world-evolution/agent.json +21 -0
  407. neonrp-0.1.0/examples/stoneford-orch/agents/world-evolution/system.md +41 -0
  408. neonrp-0.1.0/examples/stoneford-orch/game/agents/contracts/contracts.md +34 -0
  409. neonrp-0.1.0/examples/stoneford-orch/game/agents/manifest.json +137 -0
  410. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/dungeon.json +17 -0
  411. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/encounter_tables.json +33 -0
  412. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/layout.json +54 -0
  413. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/loot_tables.json +30 -0
  414. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/rooms/D001_R001.json +13 -0
  415. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/rooms/D001_R002.json +13 -0
  416. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/rooms/D001_R003.json +14 -0
  417. neonrp-0.1.0/examples/stoneford-orch/game/dungeons/D001/rooms/D001_R004.json +13 -0
  418. neonrp-0.1.0/examples/stoneford-orch/game/lore/notes.md +14 -0
  419. neonrp-0.1.0/examples/stoneford-orch/game/lore/rumors.md +4 -0
  420. neonrp-0.1.0/examples/stoneford-orch/game/lore/story.md +7 -0
  421. neonrp-0.1.0/examples/stoneford-orch/game/meta/active-agent.json +7 -0
  422. neonrp-0.1.0/examples/stoneford-orch/game/meta/flag_aliases.json +47 -0
  423. neonrp-0.1.0/examples/stoneford-orch/game/meta/game-start.json +39 -0
  424. neonrp-0.1.0/examples/stoneford-orch/game/meta/run_state.json +16 -0
  425. neonrp-0.1.0/examples/stoneford-orch/game/meta/schedule.json +9 -0
  426. neonrp-0.1.0/examples/stoneford-orch/game/player/equipment.json +20 -0
  427. neonrp-0.1.0/examples/stoneford-orch/game/player/flags.json +15 -0
  428. neonrp-0.1.0/examples/stoneford-orch/game/player/inventory.json +13 -0
  429. neonrp-0.1.0/examples/stoneford-orch/game/player/journal.md +4 -0
  430. neonrp-0.1.0/examples/stoneford-orch/game/player/profile.json +6 -0
  431. neonrp-0.1.0/examples/stoneford-orch/game/player/stats.json +33 -0
  432. neonrp-0.1.0/examples/stoneford-orch/game/player/wallet.json +5 -0
  433. neonrp-0.1.0/examples/stoneford-orch/game/rules/combat_rules.md +21 -0
  434. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/facilities/guild.json +78 -0
  435. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/facilities/inn.json +17 -0
  436. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/facilities/shop_general.json +32 -0
  437. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/facilities/townhall.json +12 -0
  438. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/npcs.json +41 -0
  439. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/quests.json +54 -0
  440. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/town.json +29 -0
  441. neonrp-0.1.0/examples/stoneford-orch/game/towns/T001/town_map.json +107 -0
  442. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/facilities/appraiser.json +42 -0
  443. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/facilities/chapel.json +35 -0
  444. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/facilities/guild.json +59 -0
  445. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/facilities/herb_shop.json +68 -0
  446. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/facilities/shop_general.json +69 -0
  447. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/facilities/tavern.json +30 -0
  448. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/npcs.json +68 -0
  449. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/quests.json +49 -0
  450. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/town.json +34 -0
  451. neonrp-0.1.0/examples/stoneford-orch/game/towns/T004/town_map.json +97 -0
  452. neonrp-0.1.0/examples/stoneford-orch/game/world/world_map.json +240 -0
  453. neonrp-0.1.0/examples/stoneford-storylines/A-guild-buried-charter.md +201 -0
  454. neonrp-0.1.0/examples/stoneford-storylines/B-world-before-the-fog.md +604 -0
  455. neonrp-0.1.0/examples/stoneford-storylines/C-four-crown-intrigue.md +703 -0
  456. neonrp-0.1.0/examples/stoneford-storylines/D-iron-dragon-returns.md +631 -0
  457. neonrp-0.1.0/examples/stoneford-storylines/E-depth-walkers.md +706 -0
  458. neonrp-0.1.0/examples/stoneford-storylines/_CHECKER_REPORT.md +245 -0
  459. neonrp-0.1.0/examples/stoneford-storylines/_SHARED_BRIEF.md +121 -0
  460. neonrp-0.1.0/examples/stoneford-storylines/zh/A-guild-buried-charter.zh.md +203 -0
  461. neonrp-0.1.0/examples/stoneford-storylines/zh/B-world-before-the-fog.zh.md +420 -0
  462. neonrp-0.1.0/examples/stoneford-storylines/zh/C-four-crown-intrigue.zh.md +707 -0
  463. neonrp-0.1.0/examples/stoneford-storylines/zh/D-iron-dragon-returns.zh.md +298 -0
  464. neonrp-0.1.0/examples/stoneford-storylines/zh/E-depth-walkers.zh.md +684 -0
  465. neonrp-0.1.0/examples/stoneford-storylines/zh/_CHECKER_REPORT.zh.md +247 -0
  466. neonrp-0.1.0/examples/stoneford-storylines/zh/_SHARED_BRIEF.zh.md +125 -0
  467. neonrp-0.1.0/install.sh +77 -0
  468. neonrp-0.1.0/packaging/worldlines/README.md +15 -0
  469. neonrp-0.1.0/packaging/worldlines/pyproject.toml +33 -0
  470. neonrp-0.1.0/packaging/worldlines/worldlines_shim/__init__.py +8 -0
  471. neonrp-0.1.0/perf-smoke-play/agents/dungeon-agent/agent.json +48 -0
  472. neonrp-0.1.0/perf-smoke-play/agents/narrator/agent.json +52 -0
  473. neonrp-0.1.0/perf-smoke-play/agents/narrator/system.md +81 -0
  474. neonrp-0.1.0/perf-smoke-play/agents/town-agent/agent.json +48 -0
  475. neonrp-0.1.0/perf-smoke-play/game/dungeon/dark-cave.json +23 -0
  476. neonrp-0.1.0/perf-smoke-play/game/item/health-potion.json +16 -0
  477. neonrp-0.1.0/perf-smoke-play/game/item/iron-sword.json +13 -0
  478. neonrp-0.1.0/perf-smoke-play/game/location/forest-path.json +18 -0
  479. neonrp-0.1.0/perf-smoke-play/game/meta/active-agent.json +7 -0
  480. neonrp-0.1.0/perf-smoke-play/game/meta/game-start.json +33 -0
  481. neonrp-0.1.0/perf-smoke-play/game/meta/quest-the-sage-seal.json +26 -0
  482. neonrp-0.1.0/perf-smoke-play/game/npc/cave-goblin.json +20 -0
  483. neonrp-0.1.0/perf-smoke-play/game/npc/forest-goblin.json +20 -0
  484. neonrp-0.1.0/perf-smoke-play/game/npc/goblin-chief.json +27 -0
  485. neonrp-0.1.0/perf-smoke-play/game/npc/old-sage.json +16 -0
  486. neonrp-0.1.0/perf-smoke-play/game/player/player.json +17 -0
  487. neonrp-0.1.0/perf-smoke-play/game/town/start-town.json +30 -0
  488. neonrp-0.1.0/perf-smoke-play/rules/README.md +16 -0
  489. neonrp-0.1.0/perf-smoke-play/rules/domain_rules.sample.json +94 -0
  490. neonrp-0.1.0/perf-smoke-play/rules/game_entity.schema.json +199 -0
  491. neonrp-0.1.0/perf-smoke-play/skills/entity-authoring/SKILL.md +47 -0
  492. neonrp-0.1.0/prompts/code_review.md +70 -0
  493. neonrp-0.1.0/pyproject.toml +76 -0
  494. neonrp-0.1.0/reviews/M0_review_20260129.md +42 -0
  495. neonrp-0.1.0/reviews/M10_review_20260208.md +83 -0
  496. neonrp-0.1.0/reviews/M11_review_20260210.md +90 -0
  497. neonrp-0.1.0/reviews/M1_review_20260129.md +55 -0
  498. neonrp-0.1.0/reviews/M2_review_20260130.md +127 -0
  499. neonrp-0.1.0/reviews/M3_review_20260130.md +15 -0
  500. neonrp-0.1.0/reviews/M4_review_20260131.md +31 -0
  501. neonrp-0.1.0/reviews/M5_review_20260201.md +53 -0
  502. neonrp-0.1.0/reviews/M6.5_review_20260202.md +39 -0
  503. neonrp-0.1.0/reviews/M6_review_20260202.md +30 -0
  504. neonrp-0.1.0/reviews/M7_comprehensive_gap_analysis.md +585 -0
  505. neonrp-0.1.0/reviews/M7_review_20260202.md +24 -0
  506. neonrp-0.1.0/reviews/M8_comprehensive_review.md +308 -0
  507. neonrp-0.1.0/reviews/M8_hands_on_test_report.md +271 -0
  508. neonrp-0.1.0/reviews/M8_review_20260203.md +39 -0
  509. neonrp-0.1.0/reviews/M9_gap_assessment.md +121 -0
  510. neonrp-0.1.0/reviews/M9_review_20260207.md +81 -0
  511. neonrp-0.1.0/reviews/code_review_20260216.md +100 -0
  512. neonrp-0.1.0/reviews/coverage_report_20260209.md +78 -0
  513. neonrp-0.1.0/reviews/diagnostic_report.md +260 -0
  514. neonrp-0.1.0/scripts/qa.py +60 -0
  515. neonrp-0.1.0/skills/combat/SKILL.md +29 -0
  516. neonrp-0.1.0/skills/entity-authoring/SKILL.md +49 -0
  517. neonrp-0.1.0/skills/narrative/SKILL.md +27 -0
  518. neonrp-0.1.0/skills/sub-agent-orchestration/SKILL.md +45 -0
  519. neonrp-0.1.0/skills/tavern-game-import/SKILL.md +228 -0
  520. neonrp-0.1.0/skills/world-building/SKILL.md +28 -0
  521. neonrp-0.1.0/src/neonrp/__init__.py +3 -0
  522. neonrp-0.1.0/src/neonrp/__main__.py +6 -0
  523. neonrp-0.1.0/src/neonrp/bridges/__init__.py +20 -0
  524. neonrp-0.1.0/src/neonrp/bridges/discord_bridge.py +494 -0
  525. neonrp-0.1.0/src/neonrp/bridges/hub.py +220 -0
  526. neonrp-0.1.0/src/neonrp/bridges/tui.py +55 -0
  527. neonrp-0.1.0/src/neonrp/builtin_skills/__init__.py +1 -0
  528. neonrp-0.1.0/src/neonrp/builtin_skills/character-card-authoring/SKILL.md +149 -0
  529. neonrp-0.1.0/src/neonrp/builtin_skills/combat/SKILL.md +28 -0
  530. neonrp-0.1.0/src/neonrp/builtin_skills/discord-bootstrap/SKILL.md +83 -0
  531. neonrp-0.1.0/src/neonrp/builtin_skills/entity-authoring/SKILL.md +48 -0
  532. neonrp-0.1.0/src/neonrp/builtin_skills/narrative/SKILL.md +26 -0
  533. neonrp-0.1.0/src/neonrp/builtin_skills/player-character-authoring/SKILL.md +145 -0
  534. neonrp-0.1.0/src/neonrp/builtin_skills/sub-agent-orchestration/SKILL.md +45 -0
  535. neonrp-0.1.0/src/neonrp/builtin_skills/tavern-game-import/SKILL.md +228 -0
  536. neonrp-0.1.0/src/neonrp/builtin_skills/world-building/SKILL.md +27 -0
  537. neonrp-0.1.0/src/neonrp/builtin_skills/world-card-authoring/SKILL.md +130 -0
  538. neonrp-0.1.0/src/neonrp/builtin_skills/world-game-authoring/SKILL.md +139 -0
  539. neonrp-0.1.0/src/neonrp/cli.py +781 -0
  540. neonrp-0.1.0/src/neonrp/commands/agent.py +670 -0
  541. neonrp-0.1.0/src/neonrp/commands/branch.py +211 -0
  542. neonrp-0.1.0/src/neonrp/commands/context.py +187 -0
  543. neonrp-0.1.0/src/neonrp/commands/export_world.py +58 -0
  544. neonrp-0.1.0/src/neonrp/commands/find.py +158 -0
  545. neonrp-0.1.0/src/neonrp/commands/game.py +282 -0
  546. neonrp-0.1.0/src/neonrp/commands/import_cmd.py +99 -0
  547. neonrp-0.1.0/src/neonrp/commands/index.py +107 -0
  548. neonrp-0.1.0/src/neonrp/commands/init.py +35 -0
  549. neonrp-0.1.0/src/neonrp/commands/mcp.py +206 -0
  550. neonrp-0.1.0/src/neonrp/commands/replay.py +140 -0
  551. neonrp-0.1.0/src/neonrp/commands/run.py +151 -0
  552. neonrp-0.1.0/src/neonrp/commands/sandbox.py +349 -0
  553. neonrp-0.1.0/src/neonrp/commands/save.py +273 -0
  554. neonrp-0.1.0/src/neonrp/commands/self_update.py +87 -0
  555. neonrp-0.1.0/src/neonrp/commands/tui.py +61 -0
  556. neonrp-0.1.0/src/neonrp/commands/validate.py +68 -0
  557. neonrp-0.1.0/src/neonrp/core/active_agent.py +166 -0
  558. neonrp-0.1.0/src/neonrp/core/agent_runner.py +1178 -0
  559. neonrp-0.1.0/src/neonrp/core/apply.py +335 -0
  560. neonrp-0.1.0/src/neonrp/core/checkpoint.py +262 -0
  561. neonrp-0.1.0/src/neonrp/core/config.py +688 -0
  562. neonrp-0.1.0/src/neonrp/core/conversation.py +3384 -0
  563. neonrp-0.1.0/src/neonrp/core/diffing.py +166 -0
  564. neonrp-0.1.0/src/neonrp/core/discord_config.py +152 -0
  565. neonrp-0.1.0/src/neonrp/core/dispatcher.py +270 -0
  566. neonrp-0.1.0/src/neonrp/core/embedding.py +302 -0
  567. neonrp-0.1.0/src/neonrp/core/event_log.py +70 -0
  568. neonrp-0.1.0/src/neonrp/core/hashing.py +76 -0
  569. neonrp-0.1.0/src/neonrp/core/importers/__init__.py +0 -0
  570. neonrp-0.1.0/src/neonrp/core/importers/png_extract.py +109 -0
  571. neonrp-0.1.0/src/neonrp/core/importers/sillytavern.py +218 -0
  572. neonrp-0.1.0/src/neonrp/core/indexing.py +297 -0
  573. neonrp-0.1.0/src/neonrp/core/llm.py +464 -0
  574. neonrp-0.1.0/src/neonrp/core/llm_anthropic.py +267 -0
  575. neonrp-0.1.0/src/neonrp/core/llm_errors.py +51 -0
  576. neonrp-0.1.0/src/neonrp/core/llm_openai.py +1077 -0
  577. neonrp-0.1.0/src/neonrp/core/llm_stub.py +269 -0
  578. neonrp-0.1.0/src/neonrp/core/manifest.py +59 -0
  579. neonrp-0.1.0/src/neonrp/core/mcp_client.py +246 -0
  580. neonrp-0.1.0/src/neonrp/core/mcp_pool.py +208 -0
  581. neonrp-0.1.0/src/neonrp/core/paths.py +89 -0
  582. neonrp-0.1.0/src/neonrp/core/permissions.py +279 -0
  583. neonrp-0.1.0/src/neonrp/core/prompts.py +299 -0
  584. neonrp-0.1.0/src/neonrp/core/proposal.py +169 -0
  585. neonrp-0.1.0/src/neonrp/core/replay.py +486 -0
  586. neonrp-0.1.0/src/neonrp/core/retrieval.py +295 -0
  587. neonrp-0.1.0/src/neonrp/core/rules.py +731 -0
  588. neonrp-0.1.0/src/neonrp/core/runtime_contract.py +393 -0
  589. neonrp-0.1.0/src/neonrp/core/semantic_events.py +258 -0
  590. neonrp-0.1.0/src/neonrp/core/session.py +322 -0
  591. neonrp-0.1.0/src/neonrp/core/skill_loader.py +218 -0
  592. neonrp-0.1.0/src/neonrp/core/skills.py +1565 -0
  593. neonrp-0.1.0/src/neonrp/core/state.py +88 -0
  594. neonrp-0.1.0/src/neonrp/core/storage.py +164 -0
  595. neonrp-0.1.0/src/neonrp/core/system_proposal.py +169 -0
  596. neonrp-0.1.0/src/neonrp/core/template_assets.py +528 -0
  597. neonrp-0.1.0/src/neonrp/core/todo.py +98 -0
  598. neonrp-0.1.0/src/neonrp/core/tool_router.py +374 -0
  599. neonrp-0.1.0/src/neonrp/core/updater.py +376 -0
  600. neonrp-0.1.0/src/neonrp/core/user_config.py +76 -0
  601. neonrp-0.1.0/src/neonrp/core/validation.py +213 -0
  602. neonrp-0.1.0/src/neonrp/core/world_export.py +178 -0
  603. neonrp-0.1.0/src/neonrp/kernel.py +142 -0
  604. neonrp-0.1.0/src/neonrp/mcp_server.py +381 -0
  605. neonrp-0.1.0/src/neonrp/players.py +330 -0
  606. neonrp-0.1.0/src/neonrp/presets.py +711 -0
  607. neonrp-0.1.0/src/neonrp/schema/__init__.py +1 -0
  608. neonrp-0.1.0/src/neonrp/schema/game_entity.schema.json +199 -0
  609. neonrp-0.1.0/src/neonrp/templates/__init__.py +2 -0
  610. neonrp-0.1.0/src/neonrp/templates/dark-train/agents/narrator/agent.json +55 -0
  611. neonrp-0.1.0/src/neonrp/templates/dark-train/agents/narrator/system.md +49 -0
  612. neonrp-0.1.0/src/neonrp/templates/dark-train/agents/puzzle-agent/agent.json +53 -0
  613. neonrp-0.1.0/src/neonrp/templates/dark-train/game/item/key-fragment.json +16 -0
  614. neonrp-0.1.0/src/neonrp/templates/dark-train/game/item/torn-ticket.json +16 -0
  615. neonrp-0.1.0/src/neonrp/templates/dark-train/game/location/carriage-1.json +30 -0
  616. neonrp-0.1.0/src/neonrp/templates/dark-train/game/location/carriage-2.json +33 -0
  617. neonrp-0.1.0/src/neonrp/templates/dark-train/game/location/carriage-3.json +31 -0
  618. neonrp-0.1.0/src/neonrp/templates/dark-train/game/location/carriage-4.json +33 -0
  619. neonrp-0.1.0/src/neonrp/templates/dark-train/game/location/carriage-5.json +31 -0
  620. neonrp-0.1.0/src/neonrp/templates/dark-train/game/location/carriage-6.json +34 -0
  621. neonrp-0.1.0/src/neonrp/templates/dark-train/game/location/connector-passage.json +28 -0
  622. neonrp-0.1.0/src/neonrp/templates/dark-train/game/meta/active-agent.json +10 -0
  623. neonrp-0.1.0/src/neonrp/templates/dark-train/game/meta/game-start.json +29 -0
  624. neonrp-0.1.0/src/neonrp/templates/dark-train/game/meta/quest-reach-carriage-1.json +20 -0
  625. neonrp-0.1.0/src/neonrp/templates/dark-train/game/npc/child-with-bear.json +23 -0
  626. neonrp-0.1.0/src/neonrp/templates/dark-train/game/npc/mysterious-conductor.json +22 -0
  627. neonrp-0.1.0/src/neonrp/templates/dark-train/game/npc/nervous-woman.json +22 -0
  628. neonrp-0.1.0/src/neonrp/templates/dark-train/game/npc/sleeping-old-man.json +22 -0
  629. neonrp-0.1.0/src/neonrp/templates/dark-train/game/player/player.json +20 -0
  630. neonrp-0.1.0/src/neonrp/templates/dark-train/runtime_contract.json +27 -0
  631. neonrp-0.1.0/src/neonrp/templates/default/agents/dungeon-agent/agent.json +54 -0
  632. neonrp-0.1.0/src/neonrp/templates/default/agents/narrator/agent.json +55 -0
  633. neonrp-0.1.0/src/neonrp/templates/default/agents/narrator/system.md +46 -0
  634. neonrp-0.1.0/src/neonrp/templates/default/agents/town-agent/agent.json +54 -0
  635. neonrp-0.1.0/src/neonrp/templates/default/game/dungeon/dark-cave.json +24 -0
  636. neonrp-0.1.0/src/neonrp/templates/default/game/item/health-potion.json +17 -0
  637. neonrp-0.1.0/src/neonrp/templates/default/game/item/iron-sword.json +14 -0
  638. neonrp-0.1.0/src/neonrp/templates/default/game/location/forest-path.json +19 -0
  639. neonrp-0.1.0/src/neonrp/templates/default/game/meta/active-agent.json +11 -0
  640. neonrp-0.1.0/src/neonrp/templates/default/game/meta/game-start.json +33 -0
  641. neonrp-0.1.0/src/neonrp/templates/default/game/meta/quest-the-sage-seal.json +26 -0
  642. neonrp-0.1.0/src/neonrp/templates/default/game/npc/cave-goblin.json +20 -0
  643. neonrp-0.1.0/src/neonrp/templates/default/game/npc/forest-goblin.json +20 -0
  644. neonrp-0.1.0/src/neonrp/templates/default/game/npc/goblin-chief.json +27 -0
  645. neonrp-0.1.0/src/neonrp/templates/default/game/npc/old-sage.json +17 -0
  646. neonrp-0.1.0/src/neonrp/templates/default/game/player/player.json +18 -0
  647. neonrp-0.1.0/src/neonrp/templates/default/game/town/start-town.json +31 -0
  648. neonrp-0.1.0/src/neonrp/templates/default/runtime_contract.json +29 -0
  649. neonrp-0.1.0/src/neonrp/templates/isekai/agents/dungeon-agent/agent.json +54 -0
  650. neonrp-0.1.0/src/neonrp/templates/isekai/agents/narrator/agent.json +56 -0
  651. neonrp-0.1.0/src/neonrp/templates/isekai/agents/narrator/system.md +51 -0
  652. neonrp-0.1.0/src/neonrp/templates/isekai/agents/town-agent/agent.json +54 -0
  653. neonrp-0.1.0/src/neonrp/templates/isekai/game/dungeon/first-dungeon.json +28 -0
  654. neonrp-0.1.0/src/neonrp/templates/isekai/game/item/health-potion.json +16 -0
  655. neonrp-0.1.0/src/neonrp/templates/isekai/game/item/starter-sword.json +17 -0
  656. neonrp-0.1.0/src/neonrp/templates/isekai/game/meta/active-agent.json +10 -0
  657. neonrp-0.1.0/src/neonrp/templates/isekai/game/meta/game-start.json +29 -0
  658. neonrp-0.1.0/src/neonrp/templates/isekai/game/meta/quest-first-mission.json +25 -0
  659. neonrp-0.1.0/src/neonrp/templates/isekai/game/npc/companion.json +21 -0
  660. neonrp-0.1.0/src/neonrp/templates/isekai/game/npc/guild-master.json +17 -0
  661. neonrp-0.1.0/src/neonrp/templates/isekai/game/npc/merchant.json +17 -0
  662. neonrp-0.1.0/src/neonrp/templates/isekai/game/player/player.json +27 -0
  663. neonrp-0.1.0/src/neonrp/templates/isekai/game/town/guild-hall.json +17 -0
  664. neonrp-0.1.0/src/neonrp/templates/isekai/game/town/starter-village.json +32 -0
  665. neonrp-0.1.0/src/neonrp/templates/isekai/runtime_contract.json +28 -0
  666. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/character-agent.md +93 -0
  667. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/clock-keeper.md +49 -0
  668. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/combat-referee.md +136 -0
  669. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/dungeon-agent.md +106 -0
  670. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/notary-archivist.md +47 -0
  671. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/rules-referee.md +113 -0
  672. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/story-narrative.md +41 -0
  673. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/town-agent.md +124 -0
  674. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/world-agent.md +280 -0
  675. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/world-builder.md +39 -0
  676. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/.claude/agents/world-evolution.md +49 -0
  677. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/CLAUDE.md +33 -0
  678. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/README.md +43 -0
  679. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/character-agent/agent.json +36 -0
  680. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/character-agent/system.md +85 -0
  681. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/clock-keeper/agent.json +39 -0
  682. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/clock-keeper/system.md +41 -0
  683. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/combat-referee/agent.json +49 -0
  684. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/combat-referee/system.md +160 -0
  685. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/dungeon-agent/agent.json +54 -0
  686. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/dungeon-agent/system.md +155 -0
  687. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/rules-referee/agent.json +42 -0
  688. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/rules-referee/system.md +178 -0
  689. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/story-narrative/agent.json +35 -0
  690. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/story-narrative/system.md +33 -0
  691. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/town-agent/agent.json +54 -0
  692. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/town-agent/system.md +189 -0
  693. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/world-agent/agent.json +48 -0
  694. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/world-agent/narrative.md +43 -0
  695. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/world-agent/system.md +347 -0
  696. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/world-builder/agent.json +44 -0
  697. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/world-builder/system.md +104 -0
  698. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/world-evolution/agent.json +36 -0
  699. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/agents/world-evolution/system.md +41 -0
  700. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/agents/contracts/contracts.md +34 -0
  701. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/agents/manifest.json +137 -0
  702. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/dungeon.json +17 -0
  703. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/encounter_tables.json +33 -0
  704. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/layout.json +54 -0
  705. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/loot_tables.json +30 -0
  706. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/rooms/D001_R001.json +13 -0
  707. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/rooms/D001_R002.json +13 -0
  708. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/rooms/D001_R003.json +14 -0
  709. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/dungeons/D001/rooms/D001_R004.json +13 -0
  710. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/lore/notes.md +14 -0
  711. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/lore/rumors.md +4 -0
  712. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/lore/story.md +7 -0
  713. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/meta/active-agent.json +7 -0
  714. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/meta/flag_aliases.json +47 -0
  715. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/meta/game-start.json +39 -0
  716. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/meta/run_state.json +16 -0
  717. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/meta/schedule.json +9 -0
  718. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/player/equipment.json +20 -0
  719. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/player/flags.json +15 -0
  720. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/player/inventory.json +13 -0
  721. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/player/journal.md +4 -0
  722. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/player/profile.json +6 -0
  723. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/player/stats.json +33 -0
  724. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/player/wallet.json +5 -0
  725. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/rules/combat_rules.md +21 -0
  726. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/facilities/guild.json +78 -0
  727. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/facilities/inn.json +17 -0
  728. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/facilities/shop_general.json +32 -0
  729. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/facilities/townhall.json +12 -0
  730. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/npcs.json +41 -0
  731. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/quests.json +54 -0
  732. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/town.json +29 -0
  733. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T001/town_map.json +107 -0
  734. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/facilities/appraiser.json +42 -0
  735. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/facilities/chapel.json +35 -0
  736. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/facilities/guild.json +59 -0
  737. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/facilities/herb_shop.json +68 -0
  738. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/facilities/shop_general.json +69 -0
  739. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/facilities/tavern.json +30 -0
  740. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/npcs.json +68 -0
  741. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/quests.json +49 -0
  742. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/town.json +34 -0
  743. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/towns/T004/town_map.json +97 -0
  744. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/game/world/world_map.json +240 -0
  745. neonrp-0.1.0/src/neonrp/templates/stoneford-orch/runtime_contract.json +5 -0
  746. neonrp-0.1.0/src/neonrp/tui/__init__.py +1 -0
  747. neonrp-0.1.0/src/neonrp/tui/app.py +8839 -0
  748. neonrp-0.1.0/src/neonrp/tui/commands.py +313 -0
  749. neonrp-0.1.0/src/neonrp/tui/i18n.py +685 -0
  750. neonrp-0.1.0/src/neonrp/tui/palette.py +117 -0
  751. neonrp-0.1.0/src/neonrp/tui/panels/__init__.py +1 -0
  752. neonrp-0.1.0/src/neonrp/tui/panels/diff_view.py +97 -0
  753. neonrp-0.1.0/src/neonrp/tui/panels/file_viewer.py +108 -0
  754. neonrp-0.1.0/src/neonrp/tui/panels/logs.py +169 -0
  755. neonrp-0.1.0/src/neonrp/tui/settings_flow.py +666 -0
  756. neonrp-0.1.0/src/neonrp/tui/suggestions.py +177 -0
  757. neonrp-0.1.0/src/neonrp/worlds.py +126 -0
  758. neonrp-0.1.0/tests/fixtures/echo_mcp_server.py +35 -0
  759. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/agents/dungeon-agent/agent.json +12 -0
  760. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/agents/dungeon-agent/system.md +3 -0
  761. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/agents/narrator/agent.json +13 -0
  762. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/agents/narrator/system.md +3 -0
  763. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/agents/town-agent/agent.json +12 -0
  764. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/agents/town-agent/system.md +3 -0
  765. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/game/dungeon/moss-catacomb.json +5 -0
  766. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/game/meta/active-agent.json +9 -0
  767. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/game/meta/game-start.json +19 -0
  768. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/game/player/player.json +6 -0
  769. neonrp-0.1.0/tests/fixtures/m12/minimal-routing-world/game/town/start-town.json +5 -0
  770. neonrp-0.1.0/tests/test_active_agent.py +181 -0
  771. neonrp-0.1.0/tests/test_agent_cli.py +580 -0
  772. neonrp-0.1.0/tests/test_agent_runner.py +345 -0
  773. neonrp-0.1.0/tests/test_app.py +3371 -0
  774. neonrp-0.1.0/tests/test_apply.py +257 -0
  775. neonrp-0.1.0/tests/test_ask_user.py +327 -0
  776. neonrp-0.1.0/tests/test_checkpoint.py +351 -0
  777. neonrp-0.1.0/tests/test_cli_logging.py +86 -0
  778. neonrp-0.1.0/tests/test_cli_m1.py +212 -0
  779. neonrp-0.1.0/tests/test_config.py +624 -0
  780. neonrp-0.1.0/tests/test_conversation.py +936 -0
  781. neonrp-0.1.0/tests/test_conversation_edges.py +2403 -0
  782. neonrp-0.1.0/tests/test_conversation_subagent_routing.py +358 -0
  783. neonrp-0.1.0/tests/test_core.py +67 -0
  784. neonrp-0.1.0/tests/test_diffing.py +192 -0
  785. neonrp-0.1.0/tests/test_dispatcher.py +272 -0
  786. neonrp-0.1.0/tests/test_embedding.py +302 -0
  787. neonrp-0.1.0/tests/test_entity_schema.py +304 -0
  788. neonrp-0.1.0/tests/test_event_log.py +102 -0
  789. neonrp-0.1.0/tests/test_game_cli.py +233 -0
  790. neonrp-0.1.0/tests/test_hashing.py +132 -0
  791. neonrp-0.1.0/tests/test_import.py +431 -0
  792. neonrp-0.1.0/tests/test_indexing.py +272 -0
  793. neonrp-0.1.0/tests/test_llm.py +400 -0
  794. neonrp-0.1.0/tests/test_llm_anthropic.py +146 -0
  795. neonrp-0.1.0/tests/test_llm_e2e.py +257 -0
  796. neonrp-0.1.0/tests/test_llm_openai_extra.py +59 -0
  797. neonrp-0.1.0/tests/test_llm_real_endpoint.py +68 -0
  798. neonrp-0.1.0/tests/test_llm_retry.py +293 -0
  799. neonrp-0.1.0/tests/test_llm_streaming.py +358 -0
  800. neonrp-0.1.0/tests/test_m8_integration.py +658 -0
  801. neonrp-0.1.0/tests/test_mcp_cli.py +131 -0
  802. neonrp-0.1.0/tests/test_mcp_client.py +163 -0
  803. neonrp-0.1.0/tests/test_mcp_pool.py +193 -0
  804. neonrp-0.1.0/tests/test_per_agent_llm.py +387 -0
  805. neonrp-0.1.0/tests/test_permissions.py +178 -0
  806. neonrp-0.1.0/tests/test_png_extract.py +181 -0
  807. neonrp-0.1.0/tests/test_prompts.py +189 -0
  808. neonrp-0.1.0/tests/test_proposal.py +162 -0
  809. neonrp-0.1.0/tests/test_replay.py +314 -0
  810. neonrp-0.1.0/tests/test_retrieval.py +180 -0
  811. neonrp-0.1.0/tests/test_retrieval_fuzzy.py +258 -0
  812. neonrp-0.1.0/tests/test_rules.py +520 -0
  813. neonrp-0.1.0/tests/test_runtime_contract.py +168 -0
  814. neonrp-0.1.0/tests/test_sandbox.py +358 -0
  815. neonrp-0.1.0/tests/test_save.py +128 -0
  816. neonrp-0.1.0/tests/test_search_skills.py +350 -0
  817. neonrp-0.1.0/tests/test_semantic_events.py +90 -0
  818. neonrp-0.1.0/tests/test_session.py +324 -0
  819. neonrp-0.1.0/tests/test_skill_loader.py +215 -0
  820. neonrp-0.1.0/tests/test_skills.py +631 -0
  821. neonrp-0.1.0/tests/test_state.py +71 -0
  822. neonrp-0.1.0/tests/test_streaming.py +316 -0
  823. neonrp-0.1.0/tests/test_sub_agent.py +157 -0
  824. neonrp-0.1.0/tests/test_template_assets.py +72 -0
  825. neonrp-0.1.0/tests/test_todo.py +82 -0
  826. neonrp-0.1.0/tests/test_token_budget.py +165 -0
  827. neonrp-0.1.0/tests/test_tool_router.py +280 -0
  828. neonrp-0.1.0/tests/test_tool_validation.py +459 -0
  829. neonrp-0.1.0/tests/test_tui_cli.py +155 -0
  830. neonrp-0.1.0/tests/test_tui_commands.py +216 -0
  831. neonrp-0.1.0/tests/test_tui_suggestions.py +125 -0
  832. neonrp-0.1.0/tests/test_validation.py +161 -0
  833. neonrp-0.1.0/tests/test_worldlines_cli.py +87 -0
  834. neonrp-0.1.0/tests/test_write_skills.py +501 -0
  835. neonrp-0.1.0/uv.lock +2484 -0
@@ -0,0 +1,34 @@
1
+ # NeonRP Environment Configuration Example
2
+ # Copy this file to .env and fill in your values
3
+
4
+ # =============================================================================
5
+ # GLM (Zhipu AI) Configuration
6
+ # =============================================================================
7
+ # Get your API key from: https://open.bigmodel.cn/
8
+ GLM_API_KEY=your_api_key_here
9
+ GLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4
10
+ GLM_MODEL=glm-4-flashx-250414
11
+
12
+ # Optional GLM settings
13
+ GLM_TEMPERATURE=0.1
14
+ GLM_TOP_P=0.9
15
+ GLM_MAX_TOKENS=4096
16
+ GLM_RESPONSE_FORMAT=json_object
17
+
18
+ # =============================================================================
19
+ # OpenAI Configuration (alternative to GLM)
20
+ # =============================================================================
21
+ # OPENAI_API_KEY=sk-your-openai-key-here
22
+ # OPENAI_BASE_URL=https://api.openai.com/v1
23
+ # OPENAI_MODEL=gpt-4o
24
+
25
+ # =============================================================================
26
+ # E2E Testing
27
+ # =============================================================================
28
+ # Set to 1 to enable real LLM E2E tests (requires API key)
29
+ # NEONRP_E2E_LLM=1
30
+
31
+ # =============================================================================
32
+ # Other Settings
33
+ # =============================================================================
34
+ MAX_WORKERS=1
@@ -0,0 +1,25 @@
1
+ # Normalize text files to LF in repository and working tree.
2
+ * text=auto eol=lf
3
+
4
+ # Windows shell scripts keep CRLF for compatibility.
5
+ *.bat text eol=crlf
6
+ *.cmd text eol=crlf
7
+
8
+ # Common binary formats (never line-normalize).
9
+ *.png binary
10
+ *.jpg binary
11
+ *.jpeg binary
12
+ *.gif binary
13
+ *.bmp binary
14
+ *.ico binary
15
+ *.pdf binary
16
+ *.zip binary
17
+ *.gz binary
18
+ *.7z binary
19
+ *.tar binary
20
+ *.jar binary
21
+ *.dll binary
22
+ *.exe binary
23
+ *.pyd binary
24
+ *.so binary
25
+ *.dylib binary
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Normalize staged files according to .gitattributes before commit.
5
+ mapfile -d '' -t staged < <(git diff --cached --name-only -z --diff-filter=ACMR)
6
+
7
+ if [ "${#staged[@]}" -eq 0 ]; then
8
+ exit 0
9
+ fi
10
+
11
+ git add --renormalize -- "${staged[@]}"
@@ -0,0 +1,245 @@
1
+ name: release
2
+
3
+ # Publishes both `neonrp` and `worldlines` to PyPI via Trusted Publishing (OIDC).
4
+ #
5
+ # One-time PyPI setup required on the PyPI project page for EACH of the two
6
+ # projects (neonrp and worldlines), under "Publishing":
7
+ #
8
+ # - Owner: LudicDynamics
9
+ # Repo: NeonRP
10
+ # Workflow: release.yml
11
+ # Environment: pypi
12
+ #
13
+ # PyPI accepts OIDC tokens that match ANY configured trusted publisher; if
14
+ # this project later moves between orgs, register the new owner as another
15
+ # pending publisher before pushing the first tag from there. See
16
+ # `docs/releases.md → Owner handoff` for the full migration steps.
17
+ #
18
+ # Tag format: v0.3.4 → publishes neonrp==0.3.4 and worldlines==0.3.4
19
+
20
+ on:
21
+ push:
22
+ tags:
23
+ - "v*"
24
+ workflow_dispatch:
25
+ inputs:
26
+ dry_run:
27
+ description: "Build only; do not publish"
28
+ required: false
29
+ default: "false"
30
+
31
+ concurrency:
32
+ group: release-${{ github.ref }}
33
+ cancel-in-progress: false
34
+
35
+ jobs:
36
+ build:
37
+ runs-on: ubuntu-latest
38
+ outputs:
39
+ version: ${{ steps.version.outputs.version }}
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+
43
+ - name: Install uv
44
+ uses: astral-sh/setup-uv@v3
45
+ with:
46
+ enable-cache: true
47
+
48
+ - name: Set up Python
49
+ run: uv python install 3.12
50
+
51
+ - name: Derive version from tag (or pyproject)
52
+ id: version
53
+ shell: bash
54
+ run: |
55
+ ref="${GITHUB_REF##*/}"
56
+ if [[ "${GITHUB_REF_TYPE}" == "tag" && "${ref}" =~ ^v ]]; then
57
+ version="${ref#v}"
58
+ else
59
+ version=$(awk -F'"' '/^version *=/{print $2; exit}' pyproject.toml)
60
+ fi
61
+ echo "version=${version}" >> "$GITHUB_OUTPUT"
62
+ echo "Using version: ${version}"
63
+
64
+ - name: Sync version into pyproject.toml files
65
+ shell: bash
66
+ run: |
67
+ version="${{ steps.version.outputs.version }}"
68
+ # neonrp
69
+ sed -i -E "s/^version *= *\".*\"/version = \"${version}\"/" pyproject.toml
70
+ # worldlines shim + pinned neonrp dependency
71
+ sed -i -E "s/^version *= *\".*\"/version = \"${version}\"/" packaging/worldlines/pyproject.toml
72
+ sed -i -E "s/\"neonrp==[^\"]*\"/\"neonrp==${version}\"/" packaging/worldlines/pyproject.toml
73
+ grep -E "^version" pyproject.toml packaging/worldlines/pyproject.toml
74
+
75
+ - name: Build neonrp distribution
76
+ run: |
77
+ uv build --out-dir dist/neonrp
78
+
79
+ - name: Build worldlines distribution
80
+ working-directory: packaging/worldlines
81
+ run: |
82
+ uv build --out-dir ../../dist/worldlines
83
+
84
+ - name: Upload artifacts
85
+ uses: actions/upload-artifact@v4
86
+ with:
87
+ name: dist
88
+ path: dist/
89
+ retention-days: 7
90
+
91
+ publish-neonrp:
92
+ needs: build
93
+ if: ${{ github.event_name == 'push' || github.event.inputs.dry_run != 'true' }}
94
+ runs-on: ubuntu-latest
95
+ environment:
96
+ # Per-project environment: PyPI's pending-publisher table is unique
97
+ # by (owner, repo, workflow, environment) — even across different
98
+ # project names — so the two PyPI projects need two distinct
99
+ # environment names to register side-by-side.
100
+ name: pypi-neonrp
101
+ url: https://pypi.org/p/neonrp
102
+ permissions:
103
+ id-token: write # required for OIDC trusted publishing
104
+ steps:
105
+ - name: Download artifacts
106
+ uses: actions/download-artifact@v4
107
+ with:
108
+ name: dist
109
+ path: dist/
110
+
111
+ - name: Publish neonrp to PyPI
112
+ uses: pypa/gh-action-pypi-publish@release/v1
113
+ with:
114
+ packages-dir: dist/neonrp
115
+
116
+ publish-worldlines:
117
+ needs: [build, publish-neonrp]
118
+ if: ${{ github.event_name == 'push' || github.event.inputs.dry_run != 'true' }}
119
+ runs-on: ubuntu-latest
120
+ environment:
121
+ name: pypi-worldlines
122
+ url: https://pypi.org/p/worldlines
123
+ permissions:
124
+ id-token: write
125
+ steps:
126
+ - name: Download artifacts
127
+ uses: actions/download-artifact@v4
128
+ with:
129
+ name: dist
130
+ path: dist/
131
+
132
+ - name: Publish worldlines to PyPI
133
+ uses: pypa/gh-action-pypi-publish@release/v1
134
+ with:
135
+ packages-dir: dist/worldlines
136
+
137
+ publish-release-manifest:
138
+ # Dual-host releases.json + install.sh so users have a fallback path:
139
+ #
140
+ # Primary: S3 bucket (fronted by worldlines.gg via Cloudflare)
141
+ # Fallback: LudicDynamics/WorldLines GitHub Release assets
142
+ #
143
+ # Both are uploaded fresh on every tag. S3 upload uses OIDC to assume
144
+ # an AWS IAM role (no long-lived AWS keys in secrets). GitHub Release
145
+ # creation uses the cross-repo PAT since the source repo is private.
146
+ #
147
+ # Required:
148
+ # secrets.WORLDLINES_RELEASE_TOKEN — fine-grained PAT scoped to
149
+ # LudicDynamics/WorldLines with Contents: read/write.
150
+ #
151
+ # Optional (skip cleanly if unset):
152
+ # vars.S3_RELEASE_ROLE_ARN — IAM role the OIDC token will assume
153
+ # vars.S3_RELEASE_BUCKET — target bucket (e.g. worldlines-releases)
154
+ # vars.S3_RELEASE_REGION — AWS region (e.g. ap-northeast-1)
155
+ #
156
+ # When the S3 vars are missing the S3 upload step short-circuits and
157
+ # only the GitHub Release is created — useful during initial bootstrap.
158
+ needs: [publish-neonrp, publish-worldlines]
159
+ if: ${{ github.event_name == 'push' }}
160
+ runs-on: ubuntu-latest
161
+ permissions:
162
+ id-token: write # required for AWS OIDC trust exchange
163
+ contents: read
164
+ steps:
165
+ - uses: actions/checkout@v4
166
+
167
+ - name: Build releases.json
168
+ id: manifest
169
+ shell: bash
170
+ run: |
171
+ version="${GITHUB_REF##*/v}"
172
+ cat > releases.json <<EOF
173
+ {
174
+ "product": "neonrp",
175
+ "latest": { "stable": "${version}" },
176
+ "releases": {
177
+ "${version}": {
178
+ "channel": "stable",
179
+ "published_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
180
+ "notes_url": "https://github.com/LudicDynamics/WorldLines/releases/tag/v${version}",
181
+ "artifacts": {
182
+ "python-wheel": {
183
+ "kind": "pypi",
184
+ "version": "${version}",
185
+ "packages": ["neonrp", "worldlines"]
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
191
+ EOF
192
+
193
+ - name: Publish release on LudicDynamics/WorldLines with assets
194
+ uses: softprops/action-gh-release@v2
195
+ with:
196
+ repository: LudicDynamics/WorldLines
197
+ token: ${{ secrets.WORLDLINES_RELEASE_TOKEN }}
198
+ tag_name: ${{ github.ref_name }}
199
+ # Creates the tag on WorldLines' default branch (its HEAD at the
200
+ # time this job runs). `target_commitish` is optional; omitting
201
+ # it uses the default branch, which matches what we want for
202
+ # docs-only repos.
203
+ name: ${{ github.ref_name }}
204
+ generate_release_notes: false
205
+ files: |
206
+ releases.json
207
+ install.sh
208
+
209
+ # --- S3 primary (OIDC, best-effort) -----------------------------
210
+ # Skip cleanly if the S3 vars aren't configured yet — GitHub
211
+ # Release above is sufficient for a first release.
212
+
213
+ - name: Configure AWS credentials via OIDC
214
+ id: aws-auth
215
+ if: ${{ vars.S3_RELEASE_ROLE_ARN != '' }}
216
+ continue-on-error: true
217
+ uses: aws-actions/configure-aws-credentials@v4
218
+ with:
219
+ role-to-assume: ${{ vars.S3_RELEASE_ROLE_ARN }}
220
+ aws-region: ${{ vars.S3_RELEASE_REGION || 'ap-northeast-1' }}
221
+ audience: sts.amazonaws.com
222
+
223
+ - name: Upload releases.json + install.sh to S3
224
+ if: ${{ steps.aws-auth.outcome == 'success' }}
225
+ continue-on-error: true
226
+ shell: bash
227
+ env:
228
+ BUCKET: ${{ vars.S3_RELEASE_BUCKET }}
229
+ run: |
230
+ # Short TTL on releases.json so auto-update picks up new versions
231
+ # within ~5 min; longer on install.sh because it rarely changes
232
+ # and is also embedded in onboarding docs.
233
+ aws s3 cp releases.json "s3://${BUCKET}/releases.json" \
234
+ --cache-control "public, max-age=300" \
235
+ --content-type "application/json"
236
+
237
+ aws s3 cp install.sh "s3://${BUCKET}/install.sh" \
238
+ --cache-control "public, max-age=3600" \
239
+ --content-type "text/x-shellscript"
240
+
241
+ # Also drop a version-pinned copy so downgrade / pin-in-CI is easy.
242
+ version="${GITHUB_REF##*/v}"
243
+ aws s3 cp releases.json "s3://${BUCKET}/v${version}/releases.json" \
244
+ --cache-control "public, max-age=31536000, immutable" \
245
+ --content-type "application/json"
@@ -0,0 +1,41 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ branches: [main, worldlines-dev]
6
+ pull_request:
7
+
8
+ concurrency:
9
+ group: test-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ jobs:
13
+ lint-and-test:
14
+ runs-on: ${{ matrix.os }}
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ os: [ubuntu-latest, macos-latest, windows-latest]
19
+ python-version: ["3.10", "3.11", "3.12"]
20
+
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v3
26
+ with:
27
+ enable-cache: true
28
+
29
+ - name: Set up Python
30
+ run: uv python install ${{ matrix.python-version }}
31
+
32
+ - name: Sync dependencies
33
+ run: uv sync --all-extras --dev
34
+
35
+ - name: Lint (ruff)
36
+ run: uv run ruff check src tests
37
+
38
+ - name: Run tests
39
+ run: uv run pytest -q
40
+ env:
41
+ NEONRP_E2E_LLM: "0"
@@ -0,0 +1,40 @@
1
+ # Environment & secrets
2
+ .env
3
+ .env.*
4
+ !.env.example
5
+
6
+ # Python
7
+ __pycache__/
8
+ *.py[cod]
9
+ *$py.class
10
+ *.so
11
+ *.egg-info/
12
+ dist/
13
+ build/
14
+ *.egg
15
+
16
+ # Virtual environments
17
+ .venv/
18
+ venv/
19
+ ENV/
20
+
21
+ # IDE
22
+ .vscode/
23
+ .idea/
24
+ *.swp
25
+ *.swo
26
+ *~
27
+
28
+ # OS
29
+ .DS_Store
30
+ Thumbs.db
31
+
32
+ # Testing
33
+ .pytest_cache/
34
+ .coverage
35
+ htmlcov/
36
+
37
+ # Local runtime / sandbox data (keep local, do not track)
38
+ /.neonrp/
39
+ .neonrp/
40
+ /my-rpg/
@@ -0,0 +1,154 @@
1
+ # Changelog (docs pack)
2
+
3
+ ## v0.9.3 (2026-03-29)
4
+ - TUI build mode now works immediately after `neonrp init` in fresh directories, without requiring local agent scaffolding first.
5
+ - Added packaged builtin skills under `src/neonrp/builtin_skills/` and project-level skill loading now falls back to those builtin skills automatically.
6
+ - Added TUI Tavern import entry points:
7
+ - `neonrp tui --import-card <file> [--import-id <id>]`
8
+ - `/import sillytavern-card <file> [--id <id>]`
9
+ - Improved SillyTavern import ergonomics:
10
+ - PNG/JSON import tool is exposed to build-mode agents as `import_sillytavern_card(...)`
11
+ - non-ASCII card names now derive stable ASCII entity IDs instead of collapsing to `unnamed`
12
+ - agent tool can set destination path and visible name explicitly.
13
+ - Fixed Tavern "convert into full game" workflow:
14
+ - added `ensure_playable_scaffold(...)` to copy missing play agents/runtime scaffold
15
+ - normalized `game/meta/active-agent.json` to the canonical top-level `active_agent` protocol
16
+ - updated Tavern import skill/prompt guidance so generated worlds only claim playability after scaffold exists.
17
+
18
+ ## v0.9.2 (2026-02-16)
19
+ - Added optional embedding-based retrieval pipeline:
20
+ - new `src/neonrp/core/embedding.py` (adapters + vector index persistence)
21
+ - hybrid fuzzy + vector ranking in `read_context` / `context`
22
+ - automatic fuzzy-only fallback when embedding is unavailable.
23
+ - `index build` now precomputes embeddings by default when `embedding.enabled=true`.
24
+ - Simplified embedding config workflow:
25
+ - supports minimal config with `embedding.enabled + embedding.model_ref`
26
+ - inherits provider/model/auth/base_url from `models[model_ref]`.
27
+ - Applied fixes from `reviews/code_review_20260216.md` across apply/save-load/permissions/CLI consistency paths.
28
+ - Added regression coverage for embedding and fuzzy retrieval:
29
+ - `tests/test_embedding.py`
30
+ - `tests/test_retrieval_fuzzy.py`
31
+
32
+ ## v0.9.1 (2026-02-10)
33
+ - Added provider-specific request passthrough via model-level `extra` config (`models.<name>.extra`), including OpenRouter reasoning payloads.
34
+ - Fixed OpenAI-compatible extra parameter compatibility:
35
+ - unknown extra fields are now routed through `extra_body` instead of top-level kwargs
36
+ - avoids SDK errors like `unexpected keyword argument 'reasoning'`.
37
+ - Improved retry behavior for transient streaming failures:
38
+ - conversation loop now retries with fixed backoff `2s -> 7s -> 15s -> 30s`, then stops.
39
+ - streaming/network errors are now classified as retryable and propagated correctly.
40
+ - Improved `ask_user` UX in TUI:
41
+ - selected answer is shown inline in the conversation as a user-visible message
42
+ - restored sessions re-render historical `ask_user` selections
43
+ - tool card detail now shows `selected: ...` for `ask_user`.
44
+ - Test coverage updates for new behavior:
45
+ - added `tests/test_llm_openai_extra.py`
46
+ - expanded coverage in `test_conversation.py`, `test_conversation_edges.py`, `test_app_v2.py`, `test_llm_retry.py`, `test_llm_streaming.py`, `test_config.py`, `test_per_agent_llm.py`.
47
+
48
+ ## v0.9
49
+ - **M10.1 delivered**: TUI/Conversation reliability and operability upgrades.
50
+ - Added **ESC interrupt** for in-flight LLM turns in conversational TUI.
51
+ - Added configurable per-turn tool-call ceiling via `tui.max_tool_rounds` in config.
52
+ - Added **incremental session history saving** (Claude Code-style persistence behavior).
53
+ - Added startup/session controls:
54
+ - `neonrp tui --continue` / `--new` / `--verbose`
55
+ - `/sessions` picker modal + `/continue` + `/new`
56
+ - `/verbose on|off|status` with debug JSONL logs.
57
+ - Improved TUI telemetry and lifecycle:
58
+ - real-time local token estimation in status bar
59
+ - safer quit path (`Ctrl+Q`) while requests are running.
60
+ - Todo workflow compatibility fixes:
61
+ - TodoWrite prompt now includes a **minimal valid example**
62
+ - todo validation aligned to mainstream UX (`<=1 in_progress`, `activeForm` optional, `done` alias accepted)
63
+ - todo rendering stabilized with literal markers ``[x]`` / ``[>]`` / ``[ ]``
64
+ - `/continue` now restores todo list from tool history.
65
+ - Documentation refresh:
66
+ - synced `README.md`, `DEV_README.md`, `docs/TUTORIAL.md`, `docs/ROADMAP.md` with latest TUI/session behavior.
67
+
68
+ ## v0.8
69
+ - **M9 + M10 stabilization delivered** (conversation-first TUI, ask_user modal, markdown transcript, slash suggestion UX)
70
+ - Added coverage补测 wave focused on real runtime paths (not stub-only):
71
+ - `tests/test_conversation_edges.py`
72
+ - `tests/test_retrieval.py`
73
+ - `tests/test_tui_suggestions.py`
74
+ - `tests/test_llm_real_endpoint.py` (real endpoint e2e via `~/.neonrp/config.json`)
75
+ - Coverage report updated (`reviews/coverage_report_20260209.md`):
76
+ - Total coverage: **63% → 65%**
77
+ - `core/conversation.py`: 80% → 99%
78
+ - `core/retrieval.py`: 33% → 95%
79
+ - `tui/suggestions.py`: 0% → 99%
80
+ - Regression status updated: `803 passed, 7 skipped`
81
+
82
+ ## v0.7
83
+ - **M4 Implementation**: Sandbox + Replay milestone complete (290 tests)
84
+ - **Pre-M4 Housekeeping**:
85
+ - H7: Fixed `load` command crash-safety (atomic rename strategy)
86
+ - H8: Fixed deprecated `datetime.utcnow()` → `datetime.now(timezone.utc)`
87
+ - H9: Added PNG character card import (pure Python tEXt chunk reader, no Pillow)
88
+ - Added `neonrp sandbox new|list|switch|drop` CLI commands
89
+ - Added `neonrp replay verify|checkout` CLI commands
90
+ - Added `core/hashing.py` — deterministic world tree hash utility
91
+ - Added `core/replay.py` — replay engine (staging-based, non-destructive)
92
+ - Added `core/system_proposal.py` — system proposal factory for import/game commands
93
+ - Added `core/paths.py:validate_branch_name()` — path traversal protection
94
+ - Extended `BranchMetadata` with `kind`/`parent`/`fork_event`/`base_save` for sandbox support
95
+ - Save now includes `meta.json` (game_hash, head_event, branch) and `events.jsonl` copy
96
+ - Atomic `events.jsonl` copy via temp file + `os.replace`
97
+ - Import and `game new` now generate system proposals through apply pipeline
98
+ - Sandbox switch invalidates `manifest.entities` with `index build` prompt
99
+ - Bumped manifest.version to `"0.3"`
100
+ - ADR 0011 (sandbox branch model), ADR 0012 (replay and determinism contract)
101
+
102
+ ## v0.6
103
+ - **M3 Implementation**: LLM Integration + Skills + Import milestone complete (219 tests)
104
+ - **Pre-M3 Housekeeping**:
105
+ - H3: Fixed `agent.py:393` active_branch bug
106
+ - H4: Atomic world/ directory replacement in `apply.py`
107
+ - H5: Empty index warning in `retrieval.py`
108
+ - H6: Standardized delete hunk header in `diffing.py`
109
+ - Added LLM adapter Protocol (`core/llm.py`) with stub, OpenAI, and GLM providers
110
+ - Added skill tool registry (`core/skills.py`) with per-file deny-first permissions and JSONL audit logging
111
+ - Added `neonrp agent run <id> --query "..." [--provider] [--apply] [--json]` LLM-driven agent execution
112
+ - Added `neonrp import sillytavern-card` with v1/v2 JSON card support, ID conflict resolution, raw payload preservation
113
+ - Added `neonrp game new` scaffolding command with `--force`/`--json`
114
+ - Added project config `.neonrp/config.json` with provider/model/CLI defaults
115
+ - Added `.env` file loader for API key management
116
+ - ADR 0008 (LLM adapter), ADR 0009 (skill registry), ADR 0010 (SillyTavern import)
117
+
118
+ ## v0.5
119
+ - **M2 Implementation**: Agents + Plan/Diff/Apply milestone complete (110 tests)
120
+ - Added `neonrp agent new|list|show|path` CLI commands with template generation
121
+ - Added `core/proposal.py` — Proposal/Op models with path validation
122
+ - Added `core/permissions.py` — deny-first glob matching permission engine
123
+ - Added `core/diffing.py` — stable unified diff generation
124
+ - Added `core/apply.py` — staging + validate + atomic swap apply pipeline
125
+ - Added `core/retrieval.py` — agent-scoped context retrieval
126
+ - Added `neonrp agent run --proposal --apply` and `neonrp agent logs` commands
127
+ - GameEvent model extended with `actor` field for agent attribution
128
+ - ADR 0006 (agent spec and permissions), ADR 0007 (proposal format)
129
+
130
+ ## v0.4
131
+ - **M1 Implementation**: Validation + Indexing milestone complete (41 tests)
132
+ - Added `neonrp validate` CLI with `--json` support and exit codes 0/1/2
133
+ - Added `neonrp index build|update` CLI for entity indexing
134
+ - Added `neonrp find` CLI with --id/--tag/--kind/keyword search
135
+ - Added `neonrp context` CLI with explainable scoring and snippets
136
+ - Fixed `scan_entities()` to handle partial failures (index valid, skip invalid)
137
+ - Migrated to Pydantic v2 patterns (`ConfigDict`, `datetime.now(UTC)`)
138
+ - Bumped manifest.version to `"0.2"`
139
+
140
+ ## v0.3
141
+ - **M0 Implementation**: Skeleton + Core Lifecycle milestone complete
142
+ - ARCHITECTURE: added write atomicity & crash recovery strategy; defined manifest.json minimal structure
143
+ - QUALITY_GATES: added three-layer test strategy (unit/integration/E2E); added code review process
144
+ - Replaced scripts/qa.sh with cross-platform scripts/qa.py
145
+
146
+ ## v0.2
147
+ - Added ADRs: CLI framework (click), event storage format (NDJSON), snapshot & branch strategy
148
+ - ROADMAP: split T4 into T4a (undo/redo) + T4b (branch); added R-number cross-references
149
+ - QUALITY_GATES: added code review unrecoverable failure policy
150
+
151
+ ## v0.1
152
+ - Initial documentation set: requirements, architecture, roadmap, progress, quality gates
153
+ - Added opencode review gate and code review prompt
154
+
@@ -0,0 +1,101 @@
1
+ # Developer Guide
2
+
3
+ Welcome to the NeonRP development documentation.
4
+
5
+ ## Documentation Structure
6
+
7
+ Detailed documentation is located in the `docs/` directory:
8
+
9
+ - **[REQUIREMENTS.md](docs/REQUIREMENTS.md)**: Product requirements (Source of Truth).
10
+ - **[ROADMAP.md](docs/ROADMAP.md)**: Milestones, task lists, and acceptance criteria. **Check this first to see what to build.**
11
+ - **[ARCHITECTURE.md](docs/ARCHITECTURE.md)**: System design, layers, invariants, event model, and on-disk layout.
12
+ - **[QUALITY_GATES.md](docs/QUALITY_GATES.md)**: Definition of Done, testing strategy, and code review process.
13
+ - **[PROGRESS.md](docs/PROGRESS.md)**: Execution log. Update this after every completed task.
14
+ - **[ADRs/](docs/ADRs/)**: Architecture Decision Records (0001–0023).
15
+ - **Per-milestone design docs**: `M1_*` through `M10_*` design specs and task cards.
16
+
17
+ ## Quick Start (Development)
18
+
19
+ 1. **Setup Environment**:
20
+ ```pwsh
21
+ # using uv (recommended)
22
+ uv sync
23
+ # or using pip
24
+ pip install -e ".[dev]"
25
+ ```
26
+
27
+ 2. **Run Tests**:
28
+ ```pwsh
29
+ uv run pytest
30
+ ```
31
+
32
+ 3. **Run Coverage (required for coverage-related work)**:
33
+ ```pwsh
34
+ uv run pytest --cov=neonrp --cov-report=term-missing -q
35
+ ```
36
+
37
+ 4. **Lint & Format**:
38
+ ```pwsh
39
+ uv run ruff format .
40
+ uv run ruff check .
41
+ ```
42
+
43
+ 5. **Verify Process**:
44
+ Use the QA script to run gates and get next steps:
45
+ ```pwsh
46
+ python scripts/qa.py
47
+ ```
48
+
49
+ ## Workflow
50
+
51
+ 1. Pick a task from `docs/ROADMAP.md`.
52
+ 2. Implement and test.
53
+ 3. Run `python scripts/qa.py`.
54
+ 4. Perform code review via `opencode`.
55
+ 5. Update `docs/PROGRESS.md` and checklists.
56
+
57
+ ## Task Plan Writing Guide
58
+
59
+ Use this as a lightweight guide when writing a task plan. Keep it practical; don't over-specify.
60
+
61
+ 1. Define outcome first:
62
+ - One clear goal sentence (what changes for users or developers).
63
+ - In/out of scope boundaries.
64
+ 2. List deliverables:
65
+ - Files/modules expected to change.
66
+ - Observable outputs (CLI behavior, UI behavior, docs, tests).
67
+ 3. Add acceptance criteria:
68
+ - Use behavior-level checks ("when X, then Y"), not only internal implementation details.
69
+ - Include at least one end-to-end path for user-critical flows.
70
+ 4. Add test strategy in the plan:
71
+ - Unit tests for core logic and edge cases.
72
+ - Integration tests for framework boundaries (e.g., TUI input -> worker -> session send).
73
+ - For bug fixes, add a regression test that fails before the fix.
74
+ 5. Coverage requirement (recommended baseline):
75
+ - `src/` overall coverage >= 80%.
76
+ - Changed files coverage >= 85%.
77
+ - Critical modules (state, storage, conversation, dispatch, TUI event paths) should target >= 90%.
78
+ - Command example:
79
+ ```pwsh
80
+ uv run pytest --cov=neonrp --cov-report=term-missing -q
81
+ ```
82
+ 6. Real-endpoint E2E requirement (for LLM integration changes):
83
+ - Use user config endpoint in `~/.neonrp/config.json` when available.
84
+ - Gate with env var to avoid CI cost:
85
+ ```pwsh
86
+ $env:NEONRP_E2E_LLM='1'
87
+ uv run pytest tests/test_llm_real_endpoint.py -q
88
+ ```
89
+ 7. Code review requirement:
90
+ - Run an `opencode` review before merge.
91
+ - Save report under `reviews/` with date/task context.
92
+ - Fix must-fix findings, then rerun tests.
93
+ - Example:
94
+ ```pwsh
95
+ opencode run "Using prompts/code_review.md, review src/ changes against docs/REQUIREMENTS.md. Save report to reviews/REVIEW_YYYYMMDD.md"
96
+ ```
97
+ 8. Update records:
98
+ - Check off task items in `docs/ROADMAP.md`.
99
+ - Add a concise entry in `docs/PROGRESS.md` (what changed, tests, review result).
100
+ - If user-facing behavior changed (especially TUI), update `README.md`, `docs/TUTORIAL.md`, and `CHANGELOG.md` in the same PR.
101
+ - If coverage work was done, update `reviews/coverage_report_YYYYMMDD.md` with latest numbers and remaining gaps.