prompt_objects 0.6.0 → 0.7.0

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 (291) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +126 -0
  3. data/README.md +93 -22
  4. data/exe/poop +5 -0
  5. data/exe/prompt_objects +1 -1108
  6. data/exe/prompt_objects_mcp +5 -3
  7. data/lib/prompt_objects/capability.rb +33 -0
  8. data/lib/prompt_objects/cli/diagnostics_command.rb +69 -0
  9. data/lib/prompt_objects/cli/env_command.rb +435 -0
  10. data/lib/prompt_objects/cli/events_command.rb +145 -0
  11. data/lib/prompt_objects/cli/explore_command.rb +155 -0
  12. data/lib/prompt_objects/cli/helpers.rb +91 -0
  13. data/lib/prompt_objects/cli/message_command.rb +216 -0
  14. data/lib/prompt_objects/cli/repl_command.rb +366 -0
  15. data/lib/prompt_objects/cli/serve_command.rb +162 -0
  16. data/lib/prompt_objects/cli.rb +64 -422
  17. data/lib/prompt_objects/connectors/base.rb +16 -29
  18. data/lib/prompt_objects/connectors/mcp.rb +82 -98
  19. data/lib/prompt_objects/domain/records.rb +45 -0
  20. data/lib/prompt_objects/environment/exporter.rb +5 -4
  21. data/lib/prompt_objects/environment/git.rb +21 -1
  22. data/lib/prompt_objects/environment/importer.rb +5 -4
  23. data/lib/prompt_objects/environment/manager.rb +44 -6
  24. data/lib/prompt_objects/environment/manifest.rb +26 -4
  25. data/lib/prompt_objects/environment.rb +1337 -20
  26. data/lib/prompt_objects/execution/blocking_executor.rb +88 -0
  27. data/lib/prompt_objects/execution/context.rb +137 -0
  28. data/lib/prompt_objects/execution/contracts.rb +59 -0
  29. data/lib/prompt_objects/execution/permit_pool.rb +49 -0
  30. data/lib/prompt_objects/execution/policy.rb +47 -0
  31. data/lib/prompt_objects/execution/resource_lock_manager.rb +63 -0
  32. data/lib/prompt_objects/execution/runner.rb +498 -0
  33. data/lib/prompt_objects/execution/scheduler.rb +325 -0
  34. data/lib/prompt_objects/llm/factory.rb +4 -4
  35. data/lib/prompt_objects/llm/gemini_adapter.rb +25 -8
  36. data/lib/prompt_objects/llm/openai_adapter.rb +9 -1
  37. data/lib/prompt_objects/llm/pricing.rb +9 -2
  38. data/lib/prompt_objects/llm/response.rb +9 -4
  39. data/lib/prompt_objects/loader.rb +28 -1
  40. data/lib/prompt_objects/mcp/server.rb +6 -3
  41. data/lib/prompt_objects/mcp/tools/get_conversation.rb +15 -11
  42. data/lib/prompt_objects/mcp/tools/get_pending_requests.rb +2 -2
  43. data/lib/prompt_objects/mcp/tools/respond_to_request.rb +3 -3
  44. data/lib/prompt_objects/mcp/tools/send_message.rb +42 -32
  45. data/lib/prompt_objects/operations/diagnostics.rb +115 -0
  46. data/lib/prompt_objects/operations/retention.rb +75 -0
  47. data/lib/prompt_objects/operations/run_trace_builder.rb +152 -0
  48. data/lib/prompt_objects/primitives/http_get.rb +2 -0
  49. data/lib/prompt_objects/primitives/list_files.rb +2 -0
  50. data/lib/prompt_objects/primitives/read_file.rb +2 -0
  51. data/lib/prompt_objects/primitives/think.rb +36 -0
  52. data/lib/prompt_objects/primitives/write_file.rb +9 -0
  53. data/lib/prompt_objects/prompt_object.rb +171 -519
  54. data/lib/prompt_objects/repositories/artifact_repository.rb +109 -0
  55. data/lib/prompt_objects/repositories/base_repository.rb +37 -0
  56. data/lib/prompt_objects/repositories/definition_repository.rb +36 -0
  57. data/lib/prompt_objects/repositories/env_data_repository.rb +103 -0
  58. data/lib/prompt_objects/repositories/event_repository.rb +105 -0
  59. data/lib/prompt_objects/repositories/message_repository.rb +73 -0
  60. data/lib/prompt_objects/repositories/run_repository.rb +254 -0
  61. data/lib/prompt_objects/repositories/thread_repository.rb +87 -0
  62. data/lib/prompt_objects/repositories/tool_execution_repository.rb +88 -0
  63. data/lib/prompt_objects/repositories/workspace_session_repository.rb +61 -0
  64. data/lib/prompt_objects/server/api/routes.rb +549 -53
  65. data/lib/prompt_objects/server/app.rb +133 -14
  66. data/lib/prompt_objects/server/file_watcher.rb +9 -0
  67. data/lib/prompt_objects/server/public/assets/index-BjKlODDD.js +90 -0
  68. data/lib/prompt_objects/server/public/assets/index-w3fpIb5c.css +1 -0
  69. data/lib/prompt_objects/server/public/index.html +2 -2
  70. data/lib/prompt_objects/server/websocket_handler.rb +202 -227
  71. data/lib/prompt_objects/server.rb +170 -1
  72. data/lib/prompt_objects/service.rb +129 -0
  73. data/lib/prompt_objects/session/store.rb +600 -13
  74. data/lib/prompt_objects/universal/add_capability.rb +1 -1
  75. data/lib/prompt_objects/universal/create_capability.rb +4 -2
  76. data/lib/prompt_objects/universal/delete_env_data.rb +23 -15
  77. data/lib/prompt_objects/universal/delete_primitive.rb +1 -1
  78. data/lib/prompt_objects/universal/dispatch_po.rb +54 -0
  79. data/lib/prompt_objects/universal/get_env_data.rb +8 -14
  80. data/lib/prompt_objects/universal/get_run_status.rb +30 -0
  81. data/lib/prompt_objects/universal/join_runs.rb +35 -0
  82. data/lib/prompt_objects/universal/list_env_data.rb +10 -14
  83. data/lib/prompt_objects/universal/modify_primitive.rb +1 -1
  84. data/lib/prompt_objects/universal/render_artifact.rb +91 -0
  85. data/lib/prompt_objects/universal/request_primitive.rb +1 -1
  86. data/lib/prompt_objects/universal/{store_env_data.rb → set_env_data.rb} +34 -20
  87. data/lib/prompt_objects/version.rb +5 -0
  88. data/lib/prompt_objects.rb +33 -8
  89. data/objects/coordinator.md +8 -4
  90. data/templates/arc-agi-1/objects/data_manager.md +2 -2
  91. data/templates/arc-agi-1/objects/observer.md +2 -2
  92. data/templates/arc-agi-1/objects/solver.md +6 -5
  93. data/templates/arc-agi-1/objects/verifier.md +2 -2
  94. data/templates/arc-agi-3/manifest.yml +19 -0
  95. data/templates/arc-agi-3/objects/analyst.md +79 -0
  96. data/templates/arc-agi-3/objects/player.md +76 -0
  97. data/templates/arc-agi-3/objects/strategist.md +97 -0
  98. data/templates/arc-agi-3/primitives/action_log.rb +133 -0
  99. data/templates/arc-agi-3/primitives/arc3_api.rb +223 -0
  100. data/templates/arc-agi-3/primitives/arc3_scorecard.rb +131 -0
  101. data/templates/arc-agi-3/primitives/frame_diff.rb +143 -0
  102. data/templates/arc-agi-3/primitives/frame_info.rb +96 -0
  103. data/templates/arc-agi-3/primitives/render_frame.rb +140 -0
  104. data/templates/basic/objects/basic.md +11 -3
  105. data/templates/chiptune/extras/sonic_pi_boot.rb +220 -0
  106. data/templates/chiptune/manifest.yml +20 -0
  107. data/templates/chiptune/objects/conductor.md +184 -0
  108. data/templates/chiptune/objects/sonic_pi.md +65 -0
  109. data/templates/chiptune/objects/voice_bass.md +44 -0
  110. data/templates/chiptune/objects/voice_lead.md +44 -0
  111. data/templates/chiptune/objects/voice_pad.md +43 -0
  112. data/templates/chiptune/objects/voice_perc.md +45 -0
  113. data/templates/chiptune/primitives/play_note.rb +59 -0
  114. data/templates/chiptune/primitives/play_sequence.rb +55 -0
  115. data/templates/chiptune/primitives/query_sonic_pi.rb +141 -0
  116. data/templates/chiptune/primitives/set_synth.rb +57 -0
  117. data/templates/chiptune/primitives/set_tempo.rb +45 -0
  118. data/templates/chiptune/primitives/stop_voice.rb +46 -0
  119. data/templates/chiptune/primitives/support/osc_bridge.rb +33 -0
  120. data/templates/chiptune/vendor/osc-ruby-1.1.5/LICENSE +19 -0
  121. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb +58 -0
  122. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb +24 -0
  123. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb +46 -0
  124. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb +13 -0
  125. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb +6 -0
  126. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb +63 -0
  127. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb +46 -0
  128. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb +42 -0
  129. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb +26 -0
  130. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb +140 -0
  131. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb +53 -0
  132. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb +91 -0
  133. data/templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb +18 -0
  134. data/templates/developer/objects/code_reviewer.md +1 -1
  135. data/templates/developer/objects/coordinator.md +16 -3
  136. data/templates/developer/objects/debugger.md +3 -3
  137. data/templates/empty/objects/assistant.md +10 -5
  138. data/templates/minimal/objects/assistant.md +10 -5
  139. data/templates/music/extras/sonic_pi_boot.rb +220 -0
  140. data/templates/music/manifest.yml +16 -0
  141. data/templates/music/objects/conductor.md +154 -0
  142. data/templates/music/objects/sonic_pi.md +65 -0
  143. data/templates/music/primitives/play_note.rb +55 -0
  144. data/templates/music/primitives/play_sequence.rb +51 -0
  145. data/templates/music/primitives/query_sonic_pi.rb +139 -0
  146. data/templates/music/primitives/set_synth.rb +53 -0
  147. data/templates/music/primitives/set_tempo.rb +43 -0
  148. data/templates/music/primitives/stop_voice.rb +44 -0
  149. data/templates/music/primitives/support/osc_bridge.rb +33 -0
  150. data/templates/music/vendor/osc-ruby-1.1.5/LICENSE +19 -0
  151. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb +58 -0
  152. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb +24 -0
  153. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb +46 -0
  154. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb +13 -0
  155. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb +6 -0
  156. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb +63 -0
  157. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb +46 -0
  158. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb +42 -0
  159. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb +26 -0
  160. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb +140 -0
  161. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb +53 -0
  162. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb +91 -0
  163. data/templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb +18 -0
  164. data/templates/music-beginner/README.md +100 -0
  165. data/templates/music-beginner/extras/README.md +27 -0
  166. data/templates/music-beginner/extras/sonic_pi_boot.rb +297 -0
  167. data/templates/music-beginner/manifest.yml +25 -0
  168. data/templates/music-beginner/objects/conductor.md +222 -0
  169. data/templates/music-beginner/objects/engine_setup.md +54 -0
  170. data/templates/music-beginner/objects/voice_bass.md +43 -0
  171. data/templates/music-beginner/objects/voice_keys.md +48 -0
  172. data/templates/music-beginner/objects/voice_pad.md +46 -0
  173. data/templates/music-beginner/objects/voice_percussion.md +45 -0
  174. data/templates/music-beginner/objects/voice_texture.md +37 -0
  175. data/templates/music-beginner/primitives/play_pattern.rb +118 -0
  176. data/templates/music-beginner/primitives/query_music_engine.rb +94 -0
  177. data/templates/music-beginner/primitives/set_instrument.rb +47 -0
  178. data/templates/music-beginner/primitives/set_tempo.rb +43 -0
  179. data/templates/music-beginner/primitives/set_voice_level.rb +46 -0
  180. data/templates/music-beginner/primitives/stop_voice.rb +37 -0
  181. data/templates/music-beginner/primitives/support/osc_bridge.rb +25 -0
  182. data/templates/music-beginner/vendor/osc-ruby-1.1.5/LICENSE +19 -0
  183. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb +58 -0
  184. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb +24 -0
  185. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb +46 -0
  186. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb +13 -0
  187. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb +6 -0
  188. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb +63 -0
  189. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb +46 -0
  190. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb +42 -0
  191. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb +26 -0
  192. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb +140 -0
  193. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb +53 -0
  194. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb +91 -0
  195. data/templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb +18 -0
  196. data/templates/music-pro/extras/AUDITION.md +100 -0
  197. data/templates/music-pro/extras/sonic_pi_boot.rb +546 -0
  198. data/templates/music-pro/manifest.yml +19 -0
  199. data/templates/music-pro/objects/conductor.md +126 -0
  200. data/templates/music-pro/objects/sonic_pi.md +35 -0
  201. data/templates/music-pro/objects/voice_harmony.md +48 -0
  202. data/templates/music-pro/objects/voice_rhythm.md +43 -0
  203. data/templates/music-pro/objects/voice_texture.md +42 -0
  204. data/templates/music-pro/primitives/define_patch.rb +46 -0
  205. data/templates/music-pro/primitives/query_music_engine.rb +69 -0
  206. data/templates/music-pro/primitives/set_live_pattern.rb +70 -0
  207. data/templates/music-pro/primitives/set_tempo.rb +31 -0
  208. data/templates/music-pro/primitives/stop_voice.rb +31 -0
  209. data/templates/music-pro/primitives/support/music_protocol.rb +136 -0
  210. data/templates/music-pro/primitives/support/osc_bridge.rb +33 -0
  211. data/templates/music-pro/primitives/trigger_event.rb +44 -0
  212. data/templates/music-pro/vendor/osc-ruby-1.1.5/LICENSE +19 -0
  213. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb +58 -0
  214. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb +24 -0
  215. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb +46 -0
  216. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb +13 -0
  217. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb +6 -0
  218. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb +63 -0
  219. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb +46 -0
  220. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb +42 -0
  221. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb +26 -0
  222. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb +140 -0
  223. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb +53 -0
  224. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb +91 -0
  225. data/templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb +18 -0
  226. data/templates/writer/objects/coordinator.md +14 -3
  227. data/templates/writer/objects/editor.md +1 -1
  228. data/templates/writer/objects/researcher.md +2 -2
  229. data/tools/thread-explorer.html +1 -1
  230. metadata +172 -65
  231. data/CLAUDE.md +0 -177
  232. data/Gemfile +0 -10
  233. data/Rakefile +0 -27
  234. data/frontend/.gitignore +0 -3
  235. data/frontend/index.html +0 -17
  236. data/frontend/package-lock.json +0 -4540
  237. data/frontend/package.json +0 -36
  238. data/frontend/postcss.config.js +0 -6
  239. data/frontend/src/App.tsx +0 -104
  240. data/frontend/src/canvas/CanvasView.tsx +0 -113
  241. data/frontend/src/canvas/ForceLayout.ts +0 -115
  242. data/frontend/src/canvas/SceneManager.ts +0 -587
  243. data/frontend/src/canvas/canvasStore.ts +0 -47
  244. data/frontend/src/canvas/constants.ts +0 -95
  245. data/frontend/src/canvas/controls/CameraControls.ts +0 -98
  246. data/frontend/src/canvas/edges/MessageArc.ts +0 -149
  247. data/frontend/src/canvas/inspector/InspectorPanel.tsx +0 -31
  248. data/frontend/src/canvas/inspector/POInspector.tsx +0 -262
  249. data/frontend/src/canvas/inspector/ToolCallInspector.tsx +0 -67
  250. data/frontend/src/canvas/nodes/PONode.ts +0 -249
  251. data/frontend/src/canvas/nodes/ToolCallNode.ts +0 -116
  252. data/frontend/src/canvas/types.ts +0 -24
  253. data/frontend/src/components/ContextMenu.tsx +0 -68
  254. data/frontend/src/components/EnvDataPane.tsx +0 -69
  255. data/frontend/src/components/Inspector.tsx +0 -263
  256. data/frontend/src/components/MarkdownMessage.tsx +0 -155
  257. data/frontend/src/components/MethodList.tsx +0 -90
  258. data/frontend/src/components/ModelSelector.tsx +0 -115
  259. data/frontend/src/components/NotificationPanel.tsx +0 -130
  260. data/frontend/src/components/ObjectList.tsx +0 -78
  261. data/frontend/src/components/PaneSlot.tsx +0 -30
  262. data/frontend/src/components/SourcePane.tsx +0 -202
  263. data/frontend/src/components/SystemBar.tsx +0 -74
  264. data/frontend/src/components/Transcript.tsx +0 -76
  265. data/frontend/src/components/UsagePanel.tsx +0 -105
  266. data/frontend/src/components/Workspace.tsx +0 -260
  267. data/frontend/src/components/index.ts +0 -12
  268. data/frontend/src/hooks/useResize.ts +0 -55
  269. data/frontend/src/hooks/useWebSocket.ts +0 -559
  270. data/frontend/src/index.css +0 -102
  271. data/frontend/src/main.tsx +0 -10
  272. data/frontend/src/store/index.ts +0 -311
  273. data/frontend/src/types/index.ts +0 -176
  274. data/frontend/tailwind.config.js +0 -44
  275. data/frontend/tsconfig.json +0 -30
  276. data/frontend/vite.config.ts +0 -29
  277. data/lib/prompt_objects/server/public/assets/index-DEPawnfZ.js +0 -4345
  278. data/lib/prompt_objects/server/public/assets/index-oMrRce1m.css +0 -1
  279. data/lib/prompt_objects/universal/add_primitive.rb +0 -118
  280. data/lib/prompt_objects/universal/ask_human.rb +0 -109
  281. data/lib/prompt_objects/universal/create_primitive.rb +0 -174
  282. data/lib/prompt_objects/universal/list_primitives.rb +0 -145
  283. data/lib/prompt_objects/universal/think.rb +0 -41
  284. data/lib/prompt_objects/universal/update_env_data.rb +0 -88
  285. data/prompt_objects.gemspec +0 -50
  286. data/templates/basic/.gitignore +0 -2
  287. data/templates/developer/.gitignore +0 -5
  288. data/templates/empty/.gitignore +0 -5
  289. data/templates/empty/objects/.gitkeep +0 -0
  290. data/templates/minimal/.gitignore +0 -5
  291. data/templates/writer/.gitignore +0 -5
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prompt_objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Werner
@@ -196,73 +196,46 @@ description: A framework where markdown files with LLM-backed behavior act as fi
196
196
  email:
197
197
  - scott@sublayer.com
198
198
  executables:
199
+ - poop
199
200
  - prompt_objects
200
201
  - prompt_objects_mcp
201
202
  extensions: []
202
203
  extra_rdoc_files: []
203
204
  files:
204
205
  - CHANGELOG.md
205
- - CLAUDE.md
206
- - Gemfile
207
206
  - LICENSE
208
207
  - README.md
209
- - Rakefile
208
+ - exe/poop
210
209
  - exe/prompt_objects
211
210
  - exe/prompt_objects_mcp
212
- - frontend/.gitignore
213
- - frontend/index.html
214
- - frontend/package-lock.json
215
- - frontend/package.json
216
- - frontend/postcss.config.js
217
- - frontend/src/App.tsx
218
- - frontend/src/canvas/CanvasView.tsx
219
- - frontend/src/canvas/ForceLayout.ts
220
- - frontend/src/canvas/SceneManager.ts
221
- - frontend/src/canvas/canvasStore.ts
222
- - frontend/src/canvas/constants.ts
223
- - frontend/src/canvas/controls/CameraControls.ts
224
- - frontend/src/canvas/edges/MessageArc.ts
225
- - frontend/src/canvas/inspector/InspectorPanel.tsx
226
- - frontend/src/canvas/inspector/POInspector.tsx
227
- - frontend/src/canvas/inspector/ToolCallInspector.tsx
228
- - frontend/src/canvas/nodes/PONode.ts
229
- - frontend/src/canvas/nodes/ToolCallNode.ts
230
- - frontend/src/canvas/types.ts
231
- - frontend/src/components/ContextMenu.tsx
232
- - frontend/src/components/EnvDataPane.tsx
233
- - frontend/src/components/Inspector.tsx
234
- - frontend/src/components/MarkdownMessage.tsx
235
- - frontend/src/components/MethodList.tsx
236
- - frontend/src/components/ModelSelector.tsx
237
- - frontend/src/components/NotificationPanel.tsx
238
- - frontend/src/components/ObjectList.tsx
239
- - frontend/src/components/PaneSlot.tsx
240
- - frontend/src/components/SourcePane.tsx
241
- - frontend/src/components/SystemBar.tsx
242
- - frontend/src/components/Transcript.tsx
243
- - frontend/src/components/UsagePanel.tsx
244
- - frontend/src/components/Workspace.tsx
245
- - frontend/src/components/index.ts
246
- - frontend/src/hooks/useResize.ts
247
- - frontend/src/hooks/useWebSocket.ts
248
- - frontend/src/index.css
249
- - frontend/src/main.tsx
250
- - frontend/src/store/index.ts
251
- - frontend/src/types/index.ts
252
- - frontend/tailwind.config.js
253
- - frontend/tsconfig.json
254
- - frontend/vite.config.ts
255
211
  - lib/prompt_objects.rb
256
212
  - lib/prompt_objects/capability.rb
257
213
  - lib/prompt_objects/cli.rb
214
+ - lib/prompt_objects/cli/diagnostics_command.rb
215
+ - lib/prompt_objects/cli/env_command.rb
216
+ - lib/prompt_objects/cli/events_command.rb
217
+ - lib/prompt_objects/cli/explore_command.rb
218
+ - lib/prompt_objects/cli/helpers.rb
219
+ - lib/prompt_objects/cli/message_command.rb
220
+ - lib/prompt_objects/cli/repl_command.rb
221
+ - lib/prompt_objects/cli/serve_command.rb
258
222
  - lib/prompt_objects/connectors/base.rb
259
223
  - lib/prompt_objects/connectors/mcp.rb
224
+ - lib/prompt_objects/domain/records.rb
260
225
  - lib/prompt_objects/environment.rb
261
226
  - lib/prompt_objects/environment/exporter.rb
262
227
  - lib/prompt_objects/environment/git.rb
263
228
  - lib/prompt_objects/environment/importer.rb
264
229
  - lib/prompt_objects/environment/manager.rb
265
230
  - lib/prompt_objects/environment/manifest.rb
231
+ - lib/prompt_objects/execution/blocking_executor.rb
232
+ - lib/prompt_objects/execution/context.rb
233
+ - lib/prompt_objects/execution/contracts.rb
234
+ - lib/prompt_objects/execution/permit_pool.rb
235
+ - lib/prompt_objects/execution/policy.rb
236
+ - lib/prompt_objects/execution/resource_lock_manager.rb
237
+ - lib/prompt_objects/execution/runner.rb
238
+ - lib/prompt_objects/execution/scheduler.rb
266
239
  - lib/prompt_objects/human_queue.rb
267
240
  - lib/prompt_objects/llm/anthropic_adapter.rb
268
241
  - lib/prompt_objects/llm/factory.rb
@@ -279,45 +252,58 @@ files:
279
252
  - lib/prompt_objects/mcp/tools/respond_to_request.rb
280
253
  - lib/prompt_objects/mcp/tools/send_message.rb
281
254
  - lib/prompt_objects/message_bus.rb
255
+ - lib/prompt_objects/operations/diagnostics.rb
256
+ - lib/prompt_objects/operations/retention.rb
257
+ - lib/prompt_objects/operations/run_trace_builder.rb
282
258
  - lib/prompt_objects/primitive.rb
283
259
  - lib/prompt_objects/primitives/http_get.rb
284
260
  - lib/prompt_objects/primitives/list_files.rb
285
261
  - lib/prompt_objects/primitives/read_file.rb
262
+ - lib/prompt_objects/primitives/think.rb
286
263
  - lib/prompt_objects/primitives/write_file.rb
287
264
  - lib/prompt_objects/prompt_object.rb
288
265
  - lib/prompt_objects/registry.rb
266
+ - lib/prompt_objects/repositories/artifact_repository.rb
267
+ - lib/prompt_objects/repositories/base_repository.rb
268
+ - lib/prompt_objects/repositories/definition_repository.rb
269
+ - lib/prompt_objects/repositories/env_data_repository.rb
270
+ - lib/prompt_objects/repositories/event_repository.rb
271
+ - lib/prompt_objects/repositories/message_repository.rb
272
+ - lib/prompt_objects/repositories/run_repository.rb
273
+ - lib/prompt_objects/repositories/thread_repository.rb
274
+ - lib/prompt_objects/repositories/tool_execution_repository.rb
275
+ - lib/prompt_objects/repositories/workspace_session_repository.rb
289
276
  - lib/prompt_objects/server.rb
290
277
  - lib/prompt_objects/server/api/routes.rb
291
278
  - lib/prompt_objects/server/app.rb
292
279
  - lib/prompt_objects/server/file_watcher.rb
293
- - lib/prompt_objects/server/public/assets/index-DEPawnfZ.js
294
- - lib/prompt_objects/server/public/assets/index-oMrRce1m.css
280
+ - lib/prompt_objects/server/public/assets/index-BjKlODDD.js
281
+ - lib/prompt_objects/server/public/assets/index-w3fpIb5c.css
295
282
  - lib/prompt_objects/server/public/index.html
296
283
  - lib/prompt_objects/server/websocket_handler.rb
284
+ - lib/prompt_objects/service.rb
297
285
  - lib/prompt_objects/session/store.rb
298
286
  - lib/prompt_objects/universal/add_capability.rb
299
- - lib/prompt_objects/universal/add_primitive.rb
300
- - lib/prompt_objects/universal/ask_human.rb
301
287
  - lib/prompt_objects/universal/create_capability.rb
302
- - lib/prompt_objects/universal/create_primitive.rb
303
288
  - lib/prompt_objects/universal/delete_env_data.rb
304
289
  - lib/prompt_objects/universal/delete_primitive.rb
290
+ - lib/prompt_objects/universal/dispatch_po.rb
305
291
  - lib/prompt_objects/universal/get_env_data.rb
292
+ - lib/prompt_objects/universal/get_run_status.rb
293
+ - lib/prompt_objects/universal/join_runs.rb
306
294
  - lib/prompt_objects/universal/list_capabilities.rb
307
295
  - lib/prompt_objects/universal/list_env_data.rb
308
- - lib/prompt_objects/universal/list_primitives.rb
309
296
  - lib/prompt_objects/universal/modify_primitive.rb
310
297
  - lib/prompt_objects/universal/modify_prompt.rb
311
298
  - lib/prompt_objects/universal/remove_capability.rb
299
+ - lib/prompt_objects/universal/render_artifact.rb
312
300
  - lib/prompt_objects/universal/request_primitive.rb
313
- - lib/prompt_objects/universal/store_env_data.rb
314
- - lib/prompt_objects/universal/think.rb
315
- - lib/prompt_objects/universal/update_env_data.rb
301
+ - lib/prompt_objects/universal/set_env_data.rb
316
302
  - lib/prompt_objects/universal/verify_primitive.rb
303
+ - lib/prompt_objects/version.rb
317
304
  - objects/coordinator.md
318
305
  - objects/greeter.md
319
306
  - objects/reader.md
320
- - prompt_objects.gemspec
321
307
  - templates/arc-agi-1/manifest.yml
322
308
  - templates/arc-agi-1/objects/data_manager.md
323
309
  - templates/arc-agi-1/objects/observer.md
@@ -331,22 +317,142 @@ files:
331
317
  - templates/arc-agi-1/primitives/load_arc_task.rb
332
318
  - templates/arc-agi-1/primitives/render_grid.rb
333
319
  - templates/arc-agi-1/primitives/test_solution.rb
334
- - templates/basic/.gitignore
320
+ - templates/arc-agi-3/manifest.yml
321
+ - templates/arc-agi-3/objects/analyst.md
322
+ - templates/arc-agi-3/objects/player.md
323
+ - templates/arc-agi-3/objects/strategist.md
324
+ - templates/arc-agi-3/primitives/action_log.rb
325
+ - templates/arc-agi-3/primitives/arc3_api.rb
326
+ - templates/arc-agi-3/primitives/arc3_scorecard.rb
327
+ - templates/arc-agi-3/primitives/frame_diff.rb
328
+ - templates/arc-agi-3/primitives/frame_info.rb
329
+ - templates/arc-agi-3/primitives/render_frame.rb
335
330
  - templates/basic/manifest.yml
336
331
  - templates/basic/objects/basic.md
337
- - templates/developer/.gitignore
332
+ - templates/chiptune/extras/sonic_pi_boot.rb
333
+ - templates/chiptune/manifest.yml
334
+ - templates/chiptune/objects/conductor.md
335
+ - templates/chiptune/objects/sonic_pi.md
336
+ - templates/chiptune/objects/voice_bass.md
337
+ - templates/chiptune/objects/voice_lead.md
338
+ - templates/chiptune/objects/voice_pad.md
339
+ - templates/chiptune/objects/voice_perc.md
340
+ - templates/chiptune/primitives/play_note.rb
341
+ - templates/chiptune/primitives/play_sequence.rb
342
+ - templates/chiptune/primitives/query_sonic_pi.rb
343
+ - templates/chiptune/primitives/set_synth.rb
344
+ - templates/chiptune/primitives/set_tempo.rb
345
+ - templates/chiptune/primitives/stop_voice.rb
346
+ - templates/chiptune/primitives/support/osc_bridge.rb
347
+ - templates/chiptune/vendor/osc-ruby-1.1.5/LICENSE
348
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb
349
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb
350
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb
351
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb
352
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb
353
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb
354
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb
355
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb
356
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb
357
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb
358
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb
359
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb
360
+ - templates/chiptune/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb
338
361
  - templates/developer/manifest.yml
339
362
  - templates/developer/objects/code_reviewer.md
340
363
  - templates/developer/objects/coordinator.md
341
364
  - templates/developer/objects/debugger.md
342
- - templates/empty/.gitignore
343
365
  - templates/empty/manifest.yml
344
- - templates/empty/objects/.gitkeep
345
366
  - templates/empty/objects/assistant.md
346
- - templates/minimal/.gitignore
347
367
  - templates/minimal/manifest.yml
348
368
  - templates/minimal/objects/assistant.md
349
- - templates/writer/.gitignore
369
+ - templates/music-beginner/README.md
370
+ - templates/music-beginner/extras/README.md
371
+ - templates/music-beginner/extras/sonic_pi_boot.rb
372
+ - templates/music-beginner/manifest.yml
373
+ - templates/music-beginner/objects/conductor.md
374
+ - templates/music-beginner/objects/engine_setup.md
375
+ - templates/music-beginner/objects/voice_bass.md
376
+ - templates/music-beginner/objects/voice_keys.md
377
+ - templates/music-beginner/objects/voice_pad.md
378
+ - templates/music-beginner/objects/voice_percussion.md
379
+ - templates/music-beginner/objects/voice_texture.md
380
+ - templates/music-beginner/primitives/play_pattern.rb
381
+ - templates/music-beginner/primitives/query_music_engine.rb
382
+ - templates/music-beginner/primitives/set_instrument.rb
383
+ - templates/music-beginner/primitives/set_tempo.rb
384
+ - templates/music-beginner/primitives/set_voice_level.rb
385
+ - templates/music-beginner/primitives/stop_voice.rb
386
+ - templates/music-beginner/primitives/support/osc_bridge.rb
387
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/LICENSE
388
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb
389
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb
390
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb
391
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb
392
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb
393
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb
394
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb
395
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb
396
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb
397
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb
398
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb
399
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb
400
+ - templates/music-beginner/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb
401
+ - templates/music-pro/extras/AUDITION.md
402
+ - templates/music-pro/extras/sonic_pi_boot.rb
403
+ - templates/music-pro/manifest.yml
404
+ - templates/music-pro/objects/conductor.md
405
+ - templates/music-pro/objects/sonic_pi.md
406
+ - templates/music-pro/objects/voice_harmony.md
407
+ - templates/music-pro/objects/voice_rhythm.md
408
+ - templates/music-pro/objects/voice_texture.md
409
+ - templates/music-pro/primitives/define_patch.rb
410
+ - templates/music-pro/primitives/query_music_engine.rb
411
+ - templates/music-pro/primitives/set_live_pattern.rb
412
+ - templates/music-pro/primitives/set_tempo.rb
413
+ - templates/music-pro/primitives/stop_voice.rb
414
+ - templates/music-pro/primitives/support/music_protocol.rb
415
+ - templates/music-pro/primitives/support/osc_bridge.rb
416
+ - templates/music-pro/primitives/trigger_event.rb
417
+ - templates/music-pro/vendor/osc-ruby-1.1.5/LICENSE
418
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb
419
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb
420
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb
421
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb
422
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb
423
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb
424
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb
425
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb
426
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb
427
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb
428
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb
429
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb
430
+ - templates/music-pro/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb
431
+ - templates/music/extras/sonic_pi_boot.rb
432
+ - templates/music/manifest.yml
433
+ - templates/music/objects/conductor.md
434
+ - templates/music/objects/sonic_pi.md
435
+ - templates/music/primitives/play_note.rb
436
+ - templates/music/primitives/play_sequence.rb
437
+ - templates/music/primitives/query_sonic_pi.rb
438
+ - templates/music/primitives/set_synth.rb
439
+ - templates/music/primitives/set_tempo.rb
440
+ - templates/music/primitives/stop_voice.rb
441
+ - templates/music/primitives/support/osc_bridge.rb
442
+ - templates/music/vendor/osc-ruby-1.1.5/LICENSE
443
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby.rb
444
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/address_pattern.rb
445
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/broadcast_client.rb
446
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/bundle.rb
447
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/client.rb
448
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/core_ext/time.rb
449
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/em_server.rb
450
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/message.rb
451
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/network_packet.rb
452
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_argument.rb
453
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_packet.rb
454
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/osc_types.rb
455
+ - templates/music/vendor/osc-ruby-1.1.5/lib/osc-ruby/server.rb
350
456
  - templates/writer/manifest.yml
351
457
  - templates/writer/objects/coordinator.md
352
458
  - templates/writer/objects/editor.md
@@ -357,8 +463,9 @@ licenses:
357
463
  - MIT
358
464
  metadata:
359
465
  homepage_uri: https://github.com/works-on-your-machine/prompt_objects
360
- source_code_uri: https://github.com/works-on-your-machine/prompt_objects
466
+ source_code_uri: https://github.com/works-on-your-machine/prompt_objects/tree/v0.7.0
361
467
  changelog_uri: https://github.com/works-on-your-machine/prompt_objects/blob/main/CHANGELOG.md
468
+ rubygems_mfa_required: 'true'
362
469
  rdoc_options: []
363
470
  require_paths:
364
471
  - lib
@@ -373,7 +480,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
373
480
  - !ruby/object:Gem::Version
374
481
  version: '0'
375
482
  requirements: []
376
- rubygems_version: 4.0.3
483
+ rubygems_version: 4.0.7
377
484
  specification_version: 4
378
485
  summary: LLM-backed entities as first-class autonomous objects
379
486
  test_files: []
data/CLAUDE.md DELETED
@@ -1,177 +0,0 @@
1
- # CLAUDE.md
2
-
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
-
5
- ## Project Overview
6
-
7
- **PromptObjects** is a Ruby framework where markdown files with LLM-backed behavior act as first-class autonomous entities. The core insight: **everything is a capability**—primitives (Ruby code) and Prompt-Objects (markdown files) share the same interface, differing only in interpretation complexity.
8
-
9
- **Current Status**: v0.5.0 — The core framework is fully implemented and functional. The original 6-phase implementation plan is complete. Active development is focused on visualization, developer experience, and exploring new primitives. See `CHANGELOG.md` for release history and `docs/archive/` for original design context.
10
-
11
- ## Architecture
12
-
13
- ```
14
- RUNTIME (Environment)
15
- ├── CAPABILITY REGISTRY
16
- │ ├── PRIMITIVES (Ruby) - deterministic interpretation
17
- │ ├── PROMPT-OBJECTS (Markdown) - semantic interpretation via LLM
18
- │ └── UNIVERSAL CAPABILITIES - available to all POs automatically
19
- ├── MESSAGE BUS - routes messages, logs to SQLite for replay
20
- ├── SESSION STORE (SQLite) - persistent conversation threads, delegation tracking
21
- ├── HUMAN QUEUE - non-blocking ask_human requests
22
- ├── WEB SERVER (Falcon + async-websocket) - serves React frontend
23
- └── MCP SERVER - exposes POs as tools via Model Context Protocol
24
- ```
25
-
26
- ### Unified Capability Interface
27
- Both primitives and Prompt-Objects implement:
28
- ```ruby
29
- class Capability
30
- def name # string identifier
31
- def description # what this capability does
32
- def receive(message, context:) # handle message, return response
33
- end
34
- ```
35
-
36
- ### Prompt-Object Structure
37
- Markdown files with two parts:
38
- - **Frontmatter (YAML)**: Configuration (name, description, capabilities)
39
- - **Body (Markdown)**: Identity and behavior (becomes LLM system prompt)
40
-
41
- Example:
42
- ```markdown
43
- ---
44
- name: reader
45
- description: Helps people understand files
46
- capabilities:
47
- - read_file
48
- - list_files
49
- ---
50
-
51
- # Reader
52
- ## Identity
53
- You are a careful, thoughtful file reader...
54
- ```
55
-
56
- ### Universal Capabilities
57
- Available to all Prompt-Objects automatically (no frontmatter declaration needed):
58
- - `ask_human` - pause for human input/confirmation
59
- - `think` - internal reasoning (not shown to human)
60
- - `create_capability` / `add_capability` / `remove_capability` - self-modification
61
- - `list_capabilities` / `list_primitives` - introspection
62
- - `create_primitive` / `add_primitive` / `delete_primitive` / `verify_primitive` / `modify_primitive` / `request_primitive` - primitive management
63
- - `modify_prompt` - rewrite own system prompt at runtime
64
- - `store_env_data` / `get_env_data` / `list_env_data` / `update_env_data` / `delete_env_data` - thread-scoped shared key-value store for delegation chains
65
-
66
- ### PO-to-PO Delegation
67
- When a PO calls another PO, the system creates an isolated delegation thread in the target PO. The caller's context is tracked so messages show correct provenance. Delegation start/complete events are broadcast via WebSocket for real-time UI updates.
68
-
69
- ## Technology Stack
70
-
71
- - **Ruby** (>= 3.2, tested through Ruby 4) - core implementation
72
- - **LLM APIs** - OpenAI, Anthropic, Gemini, Ollama, OpenRouter (adapter pattern via `LLM::Factory`)
73
- - **Falcon** - async HTTP server for REST API and static file serving
74
- - **async-websocket** - real-time WebSocket communication
75
- - **React + TypeScript** - web frontend (Smalltalk System Browser-inspired multi-pane UI)
76
- - **Three.js** - spatial canvas visualization (force-directed PO graph)
77
- - **SQLite** - session persistence and event log storage
78
- - **MCP** - Model Context Protocol server mode
79
-
80
- ## File Structure
81
-
82
- ```
83
- prompt_objects/
84
- ├── exe/prompt_objects # CLI entrypoint
85
- ├── lib/
86
- │ ├── prompt_objects.rb # Main entry, requires all modules
87
- │ └── prompt_objects/
88
- │ ├── environment.rb # Runtime container (registry, bus, LLM, sessions)
89
- │ ├── capability.rb # Base capability interface
90
- │ ├── prompt_object.rb # PO implementation (LLM conversation loop)
91
- │ ├── primitive.rb # Primitive tool wrapper
92
- │ ├── loader.rb # Parses frontmatter + body from .md files
93
- │ ├── registry.rb # Capability registration and lookup
94
- │ ├── message_bus.rb # Message routing, logging, SQLite persistence
95
- │ ├── human_queue.rb # Non-blocking human interaction queue
96
- │ ├── cli.rb # CLI command definitions
97
- │ ├── server.rb # Web server setup
98
- │ ├── server/
99
- │ │ ├── app.rb # Sinatra application
100
- │ │ ├── api/routes.rb # REST API endpoints
101
- │ │ ├── websocket_handler.rb # WebSocket event handling
102
- │ │ └── file_watcher.rb # Live .md file change detection
103
- │ ├── llm/
104
- │ │ ├── factory.rb # Provider/model selection
105
- │ │ ├── response.rb # Unified response object
106
- │ │ ├── pricing.rb # Token cost calculation
107
- │ │ ├── openai_adapter.rb # OpenAI + Ollama + OpenRouter
108
- │ │ ├── anthropic_adapter.rb
109
- │ │ └── gemini_adapter.rb
110
- │ ├── primitives/ # Built-in: read_file, list_files, write_file, http_get
111
- │ ├── universal/ # 14 universal capabilities (see list above)
112
- │ ├── connectors/ # Interface adapters (base, mcp)
113
- │ ├── mcp/ # MCP server and tool definitions
114
- │ ├── session/
115
- │ │ └── store.rb # SQLite session/thread persistence
116
- │ └── environment/
117
- │ ├── manager.rb # Create/list/clone environments
118
- │ ├── manifest.rb # Environment metadata (manifest.yml)
119
- │ ├── git.rb # Auto-commit integration
120
- │ ├── exporter.rb # Environment export
121
- │ └── importer.rb # Environment import
122
- ├── frontend/ # React + TypeScript web UI
123
- │ └── src/
124
- │ ├── App.tsx
125
- │ ├── components/ # SystemBar, ObjectList, Inspector, Workspace, Transcript
126
- │ ├── canvas/ # Three.js spatial visualization
127
- │ ├── hooks/ # WebSocket, state management hooks
128
- │ ├── store/ # Frontend state
129
- │ └── types/ # TypeScript type definitions
130
- ├── objects/ # Default POs: greeter, reader, coordinator
131
- ├── templates/ # Environment templates (basic, developer, writer, arc-agi-1, etc.)
132
- ├── tools/ # Development tooling
133
- └── test/ # Unit and integration tests
134
- ```
135
-
136
- ## Key Concepts
137
-
138
- - **Semantic Binding**: Natural language → capability call (visible in message log)
139
- - **PO↔PO Communication**: Prompt-Objects call each other as capabilities through isolated delegation threads
140
- - **Self-Modification**: POs can create new POs and primitives at runtime (with human approval)
141
- - **Human-in-the-Loop**: POs use `ask_human` to pause and queue notifications; human responds asynchronously via the web UI
142
- - **Environments**: Isolated collections of POs with their own sessions, git history, and configuration. Created from templates via CLI.
143
- - **Thread Export**: Conversation threads (including delegation chains) exportable as Markdown or JSON
144
-
145
- ## Development
146
-
147
- ```bash
148
- # Install dependencies
149
- bundle install
150
- cd frontend && npm install && cd ..
151
-
152
- # Run tests
153
- bundle exec rake test
154
-
155
- # Serve an environment with web UI
156
- prompt_objects serve <env-name> --open
157
-
158
- # Environment management
159
- prompt_objects env create <name> --template basic
160
- prompt_objects env list
161
- prompt_objects env info <name>
162
- ```
163
-
164
- ## Releases
165
-
166
- Always tag releases. Pushing a version tag triggers the Discord notification workflow (`.github/workflows/discord-release.yml`), which extracts the matching section from `CHANGELOG.md` and posts it.
167
-
168
- ```bash
169
- # 1. Update version in prompt_objects.gemspec
170
- # 2. Add changelog entry under ## [X.Y.Z] - YYYY-MM-DD
171
- # 3. Commit: "Release vX.Y.Z — short description"
172
- # 4. Tag and push:
173
- git tag vX.Y.Z
174
- git push && git push origin vX.Y.Z
175
- # 5. Publish gem:
176
- gem build prompt_objects.gemspec && gem push prompt_objects-X.Y.Z.gem
177
- ```
data/Gemfile DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- # Specify your gem's dependencies in prompt_objects.gemspec
6
- gemspec
7
-
8
- # Ruby 3.4+ compatibility - base64 moved out of stdlib
9
- gem "base64"
10
-
data/Rakefile DELETED
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rake/testtask"
4
-
5
- Rake::TestTask.new(:test) do |t|
6
- t.libs << "test"
7
- t.libs << "lib"
8
- t.test_files = FileList["test/**/*_test.rb"]
9
- t.warning = false
10
- end
11
-
12
- Rake::TestTask.new("test:unit") do |t|
13
- t.libs << "test"
14
- t.libs << "lib"
15
- t.test_files = FileList["test/unit/**/*_test.rb"]
16
- t.warning = false
17
- end
18
-
19
- Rake::TestTask.new("test:integration") do |t|
20
- t.libs << "test"
21
- t.libs << "lib"
22
- t.test_files = FileList["test/integration/**/*_test.rb"]
23
- t.warning = false
24
- end
25
-
26
- desc "Run tests (default)"
27
- task default: :test
data/frontend/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- node_modules/
2
- dist/
3
- .DS_Store
data/frontend/index.html DELETED
@@ -1,17 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
8
- <link href="https://cdn.jsdelivr.net/fontsource/fonts/geist@latest/latin-400-normal.woff2" as="font" type="font/woff2" crossorigin />
9
- <link href="https://cdn.jsdelivr.net/npm/geist@1/dist/fonts/geist-sans/style.css" rel="stylesheet" />
10
- <link href="https://cdn.jsdelivr.net/npm/geist@1/dist/fonts/geist-mono/style.css" rel="stylesheet" />
11
- <title>PromptObjects</title>
12
- </head>
13
- <body class="bg-po-bg text-po-text-primary font-ui">
14
- <div id="root"></div>
15
- <script type="module" src="/src/main.tsx"></script>
16
- </body>
17
- </html>