prompt_objects 0.3.1 → 0.5.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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -0
  3. data/CLAUDE.md +112 -44
  4. data/Gemfile.lock +31 -29
  5. data/README.md +5 -0
  6. data/frontend/index.html +5 -1
  7. data/frontend/package-lock.json +123 -0
  8. data/frontend/package.json +4 -0
  9. data/frontend/src/App.tsx +70 -71
  10. data/frontend/src/canvas/CanvasView.tsx +113 -0
  11. data/frontend/src/canvas/ForceLayout.ts +115 -0
  12. data/frontend/src/canvas/SceneManager.ts +587 -0
  13. data/frontend/src/canvas/canvasStore.ts +47 -0
  14. data/frontend/src/canvas/constants.ts +95 -0
  15. data/frontend/src/canvas/controls/CameraControls.ts +98 -0
  16. data/frontend/src/canvas/edges/MessageArc.ts +149 -0
  17. data/frontend/src/canvas/inspector/InspectorPanel.tsx +31 -0
  18. data/frontend/src/canvas/inspector/POInspector.tsx +262 -0
  19. data/frontend/src/canvas/inspector/ToolCallInspector.tsx +67 -0
  20. data/frontend/src/canvas/nodes/PONode.ts +249 -0
  21. data/frontend/src/canvas/nodes/ToolCallNode.ts +116 -0
  22. data/frontend/src/canvas/types.ts +24 -0
  23. data/frontend/src/components/ContextMenu.tsx +5 -4
  24. data/frontend/src/components/Inspector.tsx +232 -0
  25. data/frontend/src/components/MarkdownMessage.tsx +22 -20
  26. data/frontend/src/components/MethodList.tsx +90 -0
  27. data/frontend/src/components/ModelSelector.tsx +13 -14
  28. data/frontend/src/components/NotificationPanel.tsx +29 -33
  29. data/frontend/src/components/ObjectList.tsx +78 -0
  30. data/frontend/src/components/PaneSlot.tsx +30 -0
  31. data/frontend/src/components/SourcePane.tsx +202 -0
  32. data/frontend/src/components/SystemBar.tsx +74 -0
  33. data/frontend/src/components/Transcript.tsx +76 -0
  34. data/frontend/src/components/UsagePanel.tsx +27 -27
  35. data/frontend/src/components/Workspace.tsx +260 -0
  36. data/frontend/src/components/index.ts +10 -9
  37. data/frontend/src/hooks/useResize.ts +55 -0
  38. data/frontend/src/hooks/useWebSocket.ts +274 -189
  39. data/frontend/src/index.css +69 -3
  40. data/frontend/src/store/index.ts +23 -0
  41. data/frontend/src/types/index.ts +5 -0
  42. data/frontend/tailwind.config.js +28 -9
  43. data/lib/prompt_objects/capability.rb +23 -1
  44. data/lib/prompt_objects/connectors/mcp.rb +5 -22
  45. data/lib/prompt_objects/environment.rb +8 -0
  46. data/lib/prompt_objects/llm/openai_adapter.rb +22 -0
  47. data/lib/prompt_objects/mcp/tools/get_pending_requests.rb +1 -2
  48. data/lib/prompt_objects/mcp/tools/inspect_po.rb +1 -31
  49. data/lib/prompt_objects/mcp/tools/list_prompt_objects.rb +2 -8
  50. data/lib/prompt_objects/primitives/list_files.rb +1 -2
  51. data/lib/prompt_objects/prompt_object.rb +150 -6
  52. data/lib/prompt_objects/server/api/routes.rb +3 -48
  53. data/lib/prompt_objects/server/app.rb +9 -0
  54. data/lib/prompt_objects/server/public/assets/index-D1myxE0l.js +4345 -0
  55. data/lib/prompt_objects/server/public/assets/index-DdCcwC-Z.css +1 -0
  56. data/lib/prompt_objects/server/public/index.html +7 -3
  57. data/lib/prompt_objects/server/websocket_handler.rb +23 -100
  58. data/lib/prompt_objects/server.rb +6 -62
  59. data/prompt_objects.gemspec +1 -1
  60. data/templates/arc-agi-1/primitives/find_objects.rb +1 -1
  61. data/templates/arc-agi-1/primitives/grid_diff.rb +2 -2
  62. data/templates/arc-agi-1/primitives/grid_info.rb +1 -1
  63. data/templates/arc-agi-1/primitives/grid_transform.rb +1 -1
  64. data/templates/arc-agi-1/primitives/render_grid.rb +1 -0
  65. data/templates/arc-agi-1/primitives/test_solution.rb +3 -0
  66. metadata +26 -14
  67. data/frontend/src/components/CapabilitiesPanel.tsx +0 -141
  68. data/frontend/src/components/ChatPanel.tsx +0 -288
  69. data/frontend/src/components/Dashboard.tsx +0 -83
  70. data/frontend/src/components/Header.tsx +0 -141
  71. data/frontend/src/components/MessageBus.tsx +0 -56
  72. data/frontend/src/components/POCard.tsx +0 -56
  73. data/frontend/src/components/PODetail.tsx +0 -124
  74. data/frontend/src/components/PromptPanel.tsx +0 -156
  75. data/frontend/src/components/SessionsPanel.tsx +0 -174
  76. data/frontend/src/components/ThreadsSidebar.tsx +0 -163
  77. data/lib/prompt_objects/server/public/assets/index-Bkme6COu.css +0 -1
  78. data/lib/prompt_objects/server/public/assets/index-CQ7lVDF_.js +0 -77
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a1ec32b66d34c2fe11c964759513487335794f9a8c336bd32f7ae9aeed5380c
4
- data.tar.gz: 9a6650251228ab4dae25f16120e8ae8c1992e4458faf0c858894b6e4848ae80b
3
+ metadata.gz: 6dd3c14942ef80d1979ded542802ad9d1a24b32cd479aa4ba0a08bb0bf2e349d
4
+ data.tar.gz: 3642d5424aa827754dfefde82a9e9e5c770935ebf08e36cfc429d8f86e5e8502
5
5
  SHA512:
6
- metadata.gz: 867fc4cb49114ace4af4682feff5a062eb414f0ce84e4be4e48632609d68cec2ac201be2cb43fb995ac5e9cb4ec0480399aa6eaad7580da81fd5451905b0ddf5
7
- data.tar.gz: 4b3d3c3d96d45a2573829345fd1f822fa3f8918c9d4088cccc46d82ba4fa797bb7c9838e74d443017069f7cd9b9d343d3bd92219930b12098f036d038e05ef83
6
+ metadata.gz: f4e4449d2a8764a762c13ea14b6ccac17b07d1ae06a053a94e5b66ce7ebf38b8ca2903c140f0bb06810e09fa830bdac1dcfb8485d2f6f7fe32f7b0dffdf374bb
7
+ data.tar.gz: 1faa31a8c32f067cdfb133c06e6c3d45e55fec3381d86f649e8845b9d2c58bc367e2bed3821cbec4a92a18776b723ccf69c276f9e913347198816005c4608353
data/CHANGELOG.md CHANGED
@@ -2,6 +2,38 @@
2
2
 
3
3
  All notable changes to PromptObjects are documented in this file.
4
4
 
5
+ ## [0.5.0] - 2026-02-13
6
+
7
+ ### Added
8
+
9
+ - **Smalltalk System Browser redesign** — Complete frontend overhaul replacing the chat-app UI with a multi-pane object browser. POs are treated as live objects in a running image: permanent ObjectList (left pane), multi-pane Inspector with MethodList + SourcePane, REPL-style Workspace, and bottom Transcript. Warm charcoal + amber palette with Geist fonts. All panels resizable via drag handles.
10
+ - **Collapsible inspector top pane** — The Methods + Source pane has a thin header bar with a collapse/expand toggle. When collapsed, the Workspace fills the full inspector height. Collapse state persists across PO switches.
11
+ - **Source entry in method list** — A "Source" entry at the top of the method list provides a clear way to navigate back to the PO's prompt after inspecting a capability.
12
+ - **Dynamic Ollama model discovery** — LLM config now queries the Ollama API for installed models instead of using a static list.
13
+
14
+ ### Fixed
15
+
16
+ - **Capabilities disappearing on file save** — `po_modified` events were sending capabilities as plain string names instead of rich objects, overwriting the store. All serialization paths now emit consistent `{name, description, parameters}` objects.
17
+ - **Centralized PO serialization** — Moved duplicated state/message/session serialization from WebSocketHandler and API routes into `PromptObject` (`to_state_hash`, `to_summary_hash`, `to_inspect_hash`). Eliminates inconsistent serialization as a class of bug.
18
+ - **Missing items field in array tool schemas** — LLM APIs reject array parameters without an `items` field. Added a defensive sanitizer in `Capability#descriptor` as a fallback.
19
+ - **OpenAI adapter error details** — 4xx errors from Ollama now surface the actual rejection reason instead of just "status 400".
20
+ - **All WebSocket message types handled** — Added frontend handlers for `prompt_updated`, `llm_error`, `session_created`, and `session_switched`. Removed defensive normalization workarounds.
21
+
22
+ ## [0.4.0] - 2026-02-11
23
+
24
+ ### Added
25
+
26
+ - **Spatial Canvas** — Three.js 2D visualization at `/canvas` showing POs as glowing hexagonal nodes with force-directed layout, tool call diamonds, animated message arcs with traveling particles, and click-to-inspect side panels. Real-time updates from the same WebSocket feed as the dashboard. Zoom, pan, and keyboard shortcuts (F to fit, Escape to deselect).
27
+ - **PO-to-PO delegation broadcasting** — Server now broadcasts `po_delegation_started` and `po_delegation_completed` WebSocket events when one PO calls another. Delegated POs show as active in both the canvas (cyan glow, "called by X" status) and dashboard views. Replaces client-side inference from message history scanning.
28
+ - **Ruby 4 support** — CI now tests against Ruby 4. Fixed empty required parameter handling for compatibility. Thanks to [@radanskoric](https://github.com/radanskoric) for the contribution! ([#2](https://github.com/works-on-your-machine/prompt_objects/pull/2))
29
+
30
+ ### Fixed
31
+
32
+ - **WebSocket reconnection lifecycle** — Fixed duplicate connections on page refresh caused by zombie `onclose` handlers. Added socket identity guards, close-before-reconnect, and `handleMessageRef` pattern to prevent stale closures.
33
+ - **Stale state on disconnect** — PO statuses now reset to idle when WebSocket disconnects, preventing stuck "thinking" indicators and stale streaming content.
34
+ - **Chat input locked on disconnect** — Chat input is now only disabled when the PO is busy AND connected. Shows "Reconnecting..." indicator when disconnected instead of permanently locking.
35
+ - **Tool calls not appearing on canvas** — Tool call visualization now extracts from PO message history instead of looking for a format bus messages don't use.
36
+
5
37
  ## [0.3.1] - 2025-02-08
6
38
 
7
39
  ### Added
data/CLAUDE.md CHANGED
@@ -6,17 +6,21 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
6
6
 
7
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
8
 
9
- **Current Status**: Design phase—`design-doc-v2.md` contains the full specification, `IMPLEMENTATION_PLAN.md` has detailed phased build plans. No implementation code exists yet.
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 `design-doc-v2.md` / `IMPLEMENTATION_PLAN.md` for original design context.
10
10
 
11
11
  ## Architecture
12
12
 
13
13
  ```
14
- ENVIRONMENT
14
+ RUNTIME (Environment)
15
15
  ├── CAPABILITY REGISTRY
16
16
  │ ├── PRIMITIVES (Ruby) - deterministic interpretation
17
- └── PROMPT-OBJECTS (Markdown) - semantic interpretation via LLM
18
- ├── MESSAGE BUS - routes messages, logs for visualization
19
- └── TERMINAL UI (Charm) - capability bar, message log, conversation, input
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 (Sinatra + WebSocket) - serves React frontend
23
+ └── MCP SERVER - exposes POs as tools via Model Context Protocol
20
24
  ```
21
25
 
22
26
  ### Unified Capability Interface
@@ -53,56 +57,120 @@ You are a careful, thoughtful file reader...
53
57
  Available to all Prompt-Objects automatically (no frontmatter declaration needed):
54
58
  - `ask_human` - pause for human input/confirmation
55
59
  - `think` - internal reasoning (not shown to human)
56
- - `request_capability` - ask environment for new capability
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
57
64
 
58
- ## Technology Stack
59
-
60
- - **Ruby** - core implementation
61
- - **LLM APIs** - OpenAI, Anthropic, Gemini (adapter pattern)
62
- - **Charm** - Terminal UI (Bubble Tea for interaction, Lipgloss for styling, Glamour for markdown)
63
- - **MCP** - Model Context Protocol integration
65
+ ### PO-to-PO Delegation
66
+ 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.
64
67
 
65
- ### TUI Architecture Note
68
+ ## Technology Stack
66
69
 
67
- The TUI uses a **single Bubble Tea program** with internal screen states (picker, wizard, main). Do NOT run multiple sequential `Bubbletea.run` calls—this causes terminal state corruption. See `docs/phase-8-environments.md` for details.
70
+ - **Ruby** (>= 3.2, tested through Ruby 4) - core implementation
71
+ - **LLM APIs** - OpenAI, Anthropic, Gemini, Ollama, OpenRouter (adapter pattern via `LLM::Factory`)
72
+ - **Sinatra** - web server for REST API and static file serving
73
+ - **faye-websocket** - real-time WebSocket communication
74
+ - **React + TypeScript** - web frontend (dashboard, chat, capabilities panel)
75
+ - **Three.js** - spatial canvas visualization (force-directed PO graph)
76
+ - **SQLite** - session persistence and event log storage
77
+ - **MCP** - Model Context Protocol server mode
68
78
 
69
- ## Planned File Structure
79
+ ## File Structure
70
80
 
71
81
  ```
72
82
  prompt_objects/
73
- ├── exe/prompt_objects # CLI entrypoint
83
+ ├── exe/prompt_objects # CLI entrypoint
74
84
  ├── lib/
75
- │ ├── prompt_objects.rb # Main entry
85
+ │ ├── prompt_objects.rb # Main entry, requires all modules
76
86
  │ └── prompt_objects/
77
- │ ├── environment.rb # Runtime container
78
- │ ├── capability.rb # Base interface
79
- │ ├── prompt_object.rb # PO implementation
80
- │ ├── primitive.rb # Primitive tool wrapper
81
- │ ├── loader.rb # Parses frontmatter + body
82
- │ ├── registry.rb # Capability registration
83
- │ ├── message_bus.rb # Message routing and logging
84
- │ ├── llm/ # LLM adapters
85
- │ ├── primitives/ # Built-in primitives (read_file, etc.)
86
- │ ├── universal/ # Universal capabilities
87
- │ ├── mcp/ # MCP integration
88
- └── ui/ # Charm-based terminal UI
89
- ├── objects/ # Where Prompt-Objects live (.md files)
90
- └── primitives/ # Optional user-defined primitives
87
+ │ ├── environment.rb # Runtime container (registry, bus, LLM, sessions)
88
+ │ ├── capability.rb # Base capability interface
89
+ │ ├── prompt_object.rb # PO implementation (LLM conversation loop)
90
+ │ ├── primitive.rb # Primitive tool wrapper
91
+ │ ├── loader.rb # Parses frontmatter + body from .md files
92
+ │ ├── registry.rb # Capability registration and lookup
93
+ │ ├── message_bus.rb # Message routing, logging, SQLite persistence
94
+ │ ├── human_queue.rb # Non-blocking human interaction queue
95
+ │ ├── cli.rb # CLI command definitions
96
+ │ ├── server.rb # Web server setup
97
+ │ ├── server/
98
+ │ ├── app.rb # Sinatra application
99
+ │ │ ├── api/routes.rb # REST API endpoints
100
+ │ │ ├── websocket_handler.rb # WebSocket event handling
101
+ │ │ └── file_watcher.rb # Live .md file change detection
102
+ │ ├── llm/
103
+ │ │ ├── factory.rb # Provider/model selection
104
+ │ │ ├── response.rb # Unified response object
105
+ │ │ ├── pricing.rb # Token cost calculation
106
+ │ │ ├── openai_adapter.rb # OpenAI + Ollama + OpenRouter
107
+ │ │ ├── anthropic_adapter.rb
108
+ │ │ └── gemini_adapter.rb
109
+ │ ├── primitives/ # Built-in: read_file, list_files, write_file, http_get
110
+ │ ├── universal/ # 14 universal capabilities (see list above)
111
+ │ ├── connectors/ # Interface adapters (base, mcp)
112
+ │ ├── mcp/ # MCP server and tool definitions
113
+ │ ├── session/
114
+ │ │ └── store.rb # SQLite session/thread persistence
115
+ │ └── environment/
116
+ │ ├── manager.rb # Create/list/clone environments
117
+ │ ├── manifest.rb # Environment metadata (manifest.yml)
118
+ │ ├── git.rb # Auto-commit integration
119
+ │ ├── exporter.rb # Environment export
120
+ │ └── importer.rb # Environment import
121
+ ├── frontend/ # React + TypeScript web UI
122
+ │ └── src/
123
+ │ ├── App.tsx
124
+ │ ├── components/ # Dashboard, chat, capabilities panel
125
+ │ ├── canvas/ # Three.js spatial visualization
126
+ │ ├── hooks/ # WebSocket, state management hooks
127
+ │ ├── store/ # Frontend state
128
+ │ └── types/ # TypeScript type definitions
129
+ ├── objects/ # Default POs: greeter, reader, coordinator
130
+ ├── templates/ # Environment templates (basic, developer, writer, arc-agi-1, etc.)
131
+ ├── tools/ # Development tooling
132
+ └── test/ # Unit and integration tests
91
133
  ```
92
134
 
93
- ## Implementation Phases
94
-
95
- 1. **Core Loop**: Capability base, PromptObject, Loader, single LLM adapter, simple REPL
96
- 2. **Primitives & Binding**: Primitive base, built-in primitives, Registry
97
- 3. **Multi-Capability**: Message bus with logging, PO↔PO communication
98
- 4. **Self-Modification**: Universal capabilities including create_capability
99
- 5. **Polish & UI**: Full Charm integration, all UI components
100
- 6. **Demo Ready**: Error handling, testing, practice runs
101
-
102
135
  ## Key Concepts
103
136
 
104
137
  - **Semantic Binding**: Natural language → capability call (visible in message log)
105
- - **PO↔PO Communication**: Prompt-Objects can call each other as capabilities
106
- - **Self-Modification**: System can create new Prompt-Objects at runtime (with human approval)
107
- - **Human-in-the-Loop**: POs ask for confirmation on dangerous actions, clarification when ambiguous
108
- - **Non-blocking Human Queue**: When POs need human input (`ask_human`), they suspend (via Fibers) and queue a notification. Multiple POs can wait simultaneously. Human responds via notification panel, PO resumes automatically.
138
+ - **PO↔PO Communication**: Prompt-Objects call each other as capabilities through isolated delegation threads
139
+ - **Self-Modification**: POs can create new POs and primitives at runtime (with human approval)
140
+ - **Human-in-the-Loop**: POs use `ask_human` to pause and queue notifications; human responds asynchronously via the web UI
141
+ - **Environments**: Isolated collections of POs with their own sessions, git history, and configuration. Created from templates via CLI.
142
+ - **Thread Export**: Conversation threads (including delegation chains) exportable as Markdown or JSON
143
+
144
+ ## Development
145
+
146
+ ```bash
147
+ # Install dependencies
148
+ bundle install
149
+ cd frontend && npm install && cd ..
150
+
151
+ # Run tests
152
+ bundle exec rake test
153
+
154
+ # Serve an environment with web UI
155
+ prompt_objects serve <env-name> --open
156
+
157
+ # Environment management
158
+ prompt_objects env create <name> --template basic
159
+ prompt_objects env list
160
+ prompt_objects env info <name>
161
+ ```
162
+
163
+ ## Releases
164
+
165
+ 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.
166
+
167
+ ```bash
168
+ # 1. Update version in prompt_objects.gemspec
169
+ # 2. Add changelog entry under ## [X.Y.Z] - YYYY-MM-DD
170
+ # 3. Commit: "Release vX.Y.Z — short description"
171
+ # 4. Tag and push:
172
+ git tag vX.Y.Z
173
+ git push && git push origin vX.Y.Z
174
+ # 5. Publish gem:
175
+ gem build prompt_objects.gemspec && gem push prompt_objects-X.Y.Z.gem
176
+ ```
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prompt_objects (0.3.1)
4
+ prompt_objects (0.4.0)
5
5
  anthropic (~> 1.0)
6
6
  async-websocket (~> 0.28)
7
7
  falcon (~> 0.50)
@@ -17,24 +17,25 @@ GEM
17
17
  specs:
18
18
  addressable (2.8.8)
19
19
  public_suffix (>= 2.0.2, < 8.0)
20
- anthropic (1.16.3)
20
+ anthropic (1.19.0)
21
+ cgi
21
22
  connection_pool
22
23
  ast (2.4.3)
23
- async (2.35.2)
24
+ async (2.36.0)
24
25
  console (~> 1.29)
25
26
  fiber-annotation
26
27
  io-event (~> 1.11)
27
28
  metrics (~> 0.12)
28
29
  traces (~> 0.18)
29
- async-container (0.27.7)
30
+ async-container (0.30.0)
30
31
  async (~> 2.22)
31
- async-container-supervisor (0.9.2)
32
+ async-container-supervisor (0.9.3)
32
33
  async-service
33
34
  io-endpoint
34
35
  memory (~> 0.7)
35
36
  memory-leak (~> 0.5)
36
37
  process-metrics
37
- async-http (0.94.0)
38
+ async-http (0.94.2)
38
39
  async (>= 2.10.2)
39
40
  async-pool (~> 0.11)
40
41
  io-endpoint (~> 0.14)
@@ -49,9 +50,9 @@ GEM
49
50
  async-http (~> 0.56)
50
51
  async-pool (0.11.1)
51
52
  async (>= 2.0)
52
- async-service (0.16.0)
53
+ async-service (0.19.0)
53
54
  async
54
- async-container (~> 0.16)
55
+ async-container (~> 0.29)
55
56
  string-format (~> 0.2)
56
57
  async-websocket (0.30.0)
57
58
  async-http (~> 0.76)
@@ -63,6 +64,7 @@ GEM
63
64
  samovar (~> 2.1)
64
65
  base64 (0.3.0)
65
66
  bigdecimal (4.0.1)
67
+ cgi (0.5.1)
66
68
  connection_pool (3.0.2)
67
69
  console (1.34.2)
68
70
  fiber-annotation
@@ -74,20 +76,20 @@ GEM
74
76
  reline (>= 0.3.8)
75
77
  erb (6.0.1)
76
78
  event_stream_parser (1.0.0)
77
- falcon (0.53.1)
79
+ falcon (0.54.2)
78
80
  async
79
81
  async-container (~> 0.20)
80
82
  async-container-supervisor (~> 0.6)
81
83
  async-http (~> 0.75)
82
84
  async-http-cache (~> 0.4)
83
- async-service (~> 0.16)
85
+ async-service (~> 0.19)
84
86
  bundler
85
87
  localhost (~> 1.1)
86
88
  openssl (>= 3.0)
87
89
  protocol-http (~> 0.31)
88
90
  protocol-rack (~> 0.7)
89
91
  samovar (~> 2.3)
90
- faraday (2.14.0)
92
+ faraday (2.14.1)
91
93
  faraday-net_http (>= 2.0, < 3.5)
92
94
  json
93
95
  logger
@@ -103,29 +105,29 @@ GEM
103
105
  fiber-storage (1.0.1)
104
106
  front_matter_parser (1.0.1)
105
107
  io-console (0.8.2)
106
- io-endpoint (0.16.0)
108
+ io-endpoint (0.17.2)
107
109
  io-event (1.14.2)
108
110
  io-stream (0.11.1)
109
- irb (1.16.0)
111
+ irb (1.17.0)
110
112
  pp (>= 0.6.0)
113
+ prism (>= 1.3.0)
111
114
  rdoc (>= 4.0.0)
112
115
  reline (>= 0.4.2)
113
- json (2.18.0)
116
+ json (2.18.1)
114
117
  json-schema (6.1.0)
115
118
  addressable (~> 2.8)
116
119
  bigdecimal (>= 3.1, < 5)
117
- json_rpc_handler (0.1.1)
118
120
  language_server-protocol (3.17.0.5)
119
121
  lint_roller (1.1.0)
120
- listen (3.9.0)
122
+ listen (3.10.0)
123
+ logger
121
124
  rb-fsevent (~> 0.10, >= 0.10.3)
122
125
  rb-inotify (~> 0.9, >= 0.9.10)
123
- localhost (1.6.0)
126
+ localhost (1.7.0)
124
127
  logger (1.7.0)
125
128
  mapping (1.1.3)
126
- mcp (0.4.0)
129
+ mcp (0.6.0)
127
130
  json-schema (>= 4.1)
128
- json_rpc_handler (~> 0.1)
129
131
  memory (0.12.0)
130
132
  bake (~> 0.15)
131
133
  console
@@ -139,25 +141,25 @@ GEM
139
141
  uri (>= 0.11.1)
140
142
  openssl (4.0.0)
141
143
  parallel (1.27.0)
142
- parser (3.3.10.0)
144
+ parser (3.3.10.1)
143
145
  ast (~> 2.4.1)
144
146
  racc
145
147
  pp (0.6.3)
146
148
  prettyprint
147
149
  prettyprint (0.2.0)
148
- prism (1.7.0)
150
+ prism (1.9.0)
149
151
  process-metrics (0.8.0)
150
152
  console (~> 1.8)
151
153
  json (~> 2)
152
154
  samovar (~> 2.1)
153
155
  protocol-hpack (1.5.1)
154
- protocol-http (0.58.0)
155
- protocol-http1 (0.36.0)
156
+ protocol-http (0.59.0)
157
+ protocol-http1 (0.37.0)
156
158
  protocol-http (~> 0.58)
157
- protocol-http2 (0.23.0)
159
+ protocol-http2 (0.24.0)
158
160
  protocol-hpack (~> 1.4)
159
161
  protocol-http (~> 0.47)
160
- protocol-rack (0.21.0)
162
+ protocol-rack (0.21.1)
161
163
  io-stream (>= 0.10)
162
164
  protocol-http (~> 0.58)
163
165
  rack (>= 1.0)
@@ -167,7 +169,7 @@ GEM
167
169
  psych (5.3.1)
168
170
  date
169
171
  stringio
170
- public_suffix (7.0.1)
172
+ public_suffix (7.0.2)
171
173
  racc (1.8.1)
172
174
  rack (3.2.4)
173
175
  rainbow (3.1.1)
@@ -175,14 +177,14 @@ GEM
175
177
  rb-fsevent (0.11.2)
176
178
  rb-inotify (0.11.1)
177
179
  ffi (~> 1.0)
178
- rdoc (7.0.3)
180
+ rdoc (7.2.0)
179
181
  erb
180
182
  psych (>= 4.0.0)
181
183
  tsort
182
184
  regexp_parser (2.11.3)
183
185
  reline (0.6.3)
184
186
  io-console (~> 0.5)
185
- rubocop (1.82.1)
187
+ rubocop (1.84.1)
186
188
  json (~> 2.3)
187
189
  language_server-protocol (~> 3.17.0.2)
188
190
  lint_roller (~> 1.1.0)
@@ -190,7 +192,7 @@ GEM
190
192
  parser (>= 3.3.0.2)
191
193
  rainbow (>= 2.2.2, < 4.0)
192
194
  regexp_parser (>= 2.9.3, < 3.0)
193
- rubocop-ast (>= 1.48.0, < 2.0)
195
+ rubocop-ast (>= 1.49.0, < 2.0)
194
196
  ruby-progressbar (~> 1.7)
195
197
  unicode-display_width (>= 2.4.0, < 4.0)
196
198
  rubocop-ast (1.49.0)
data/README.md CHANGED
@@ -12,6 +12,11 @@ Prompt Objects applies this to AI. Instead of treating LLMs as external APIs you
12
12
 
13
13
  This is a new computing primitive: semantic late binding at runtime, where natural language becomes the interface between intelligent components.
14
14
 
15
+ Blog Posts
16
+ ==========
17
+
18
+ - [What if we took message passing seriously?](https://worksonmymachine.ai/p/what-if-we-took-message-passing-seriously) — The origin story and motivation behind Prompt Objects.
19
+
15
20
  Who
16
21
  ===
17
22
 
data/frontend/index.html CHANGED
@@ -4,9 +4,13 @@
4
4
  <meta charset="UTF-8" />
5
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
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" />
7
11
  <title>PromptObjects</title>
8
12
  </head>
9
- <body class="bg-po-bg text-gray-100">
13
+ <body class="bg-po-bg text-po-text-primary font-ui">
10
14
  <div id="root"></div>
11
15
  <script type="module" src="/src/main.tsx"></script>
12
16
  </body>