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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -0
- data/CLAUDE.md +112 -44
- data/Gemfile.lock +31 -29
- data/README.md +5 -0
- data/frontend/index.html +5 -1
- data/frontend/package-lock.json +123 -0
- data/frontend/package.json +4 -0
- data/frontend/src/App.tsx +70 -71
- data/frontend/src/canvas/CanvasView.tsx +113 -0
- data/frontend/src/canvas/ForceLayout.ts +115 -0
- data/frontend/src/canvas/SceneManager.ts +587 -0
- data/frontend/src/canvas/canvasStore.ts +47 -0
- data/frontend/src/canvas/constants.ts +95 -0
- data/frontend/src/canvas/controls/CameraControls.ts +98 -0
- data/frontend/src/canvas/edges/MessageArc.ts +149 -0
- data/frontend/src/canvas/inspector/InspectorPanel.tsx +31 -0
- data/frontend/src/canvas/inspector/POInspector.tsx +262 -0
- data/frontend/src/canvas/inspector/ToolCallInspector.tsx +67 -0
- data/frontend/src/canvas/nodes/PONode.ts +249 -0
- data/frontend/src/canvas/nodes/ToolCallNode.ts +116 -0
- data/frontend/src/canvas/types.ts +24 -0
- data/frontend/src/components/ContextMenu.tsx +5 -4
- data/frontend/src/components/Inspector.tsx +232 -0
- data/frontend/src/components/MarkdownMessage.tsx +22 -20
- data/frontend/src/components/MethodList.tsx +90 -0
- data/frontend/src/components/ModelSelector.tsx +13 -14
- data/frontend/src/components/NotificationPanel.tsx +29 -33
- data/frontend/src/components/ObjectList.tsx +78 -0
- data/frontend/src/components/PaneSlot.tsx +30 -0
- data/frontend/src/components/SourcePane.tsx +202 -0
- data/frontend/src/components/SystemBar.tsx +74 -0
- data/frontend/src/components/Transcript.tsx +76 -0
- data/frontend/src/components/UsagePanel.tsx +27 -27
- data/frontend/src/components/Workspace.tsx +260 -0
- data/frontend/src/components/index.ts +10 -9
- data/frontend/src/hooks/useResize.ts +55 -0
- data/frontend/src/hooks/useWebSocket.ts +274 -189
- data/frontend/src/index.css +69 -3
- data/frontend/src/store/index.ts +23 -0
- data/frontend/src/types/index.ts +5 -0
- data/frontend/tailwind.config.js +28 -9
- data/lib/prompt_objects/capability.rb +23 -1
- data/lib/prompt_objects/connectors/mcp.rb +5 -22
- data/lib/prompt_objects/environment.rb +8 -0
- data/lib/prompt_objects/llm/openai_adapter.rb +22 -0
- data/lib/prompt_objects/mcp/tools/get_pending_requests.rb +1 -2
- data/lib/prompt_objects/mcp/tools/inspect_po.rb +1 -31
- data/lib/prompt_objects/mcp/tools/list_prompt_objects.rb +2 -8
- data/lib/prompt_objects/primitives/list_files.rb +1 -2
- data/lib/prompt_objects/prompt_object.rb +150 -6
- data/lib/prompt_objects/server/api/routes.rb +3 -48
- data/lib/prompt_objects/server/app.rb +9 -0
- data/lib/prompt_objects/server/public/assets/index-D1myxE0l.js +4345 -0
- data/lib/prompt_objects/server/public/assets/index-DdCcwC-Z.css +1 -0
- data/lib/prompt_objects/server/public/index.html +7 -3
- data/lib/prompt_objects/server/websocket_handler.rb +23 -100
- data/lib/prompt_objects/server.rb +6 -62
- data/prompt_objects.gemspec +1 -1
- data/templates/arc-agi-1/primitives/find_objects.rb +1 -1
- data/templates/arc-agi-1/primitives/grid_diff.rb +2 -2
- data/templates/arc-agi-1/primitives/grid_info.rb +1 -1
- data/templates/arc-agi-1/primitives/grid_transform.rb +1 -1
- data/templates/arc-agi-1/primitives/render_grid.rb +1 -0
- data/templates/arc-agi-1/primitives/test_solution.rb +3 -0
- metadata +26 -14
- data/frontend/src/components/CapabilitiesPanel.tsx +0 -141
- data/frontend/src/components/ChatPanel.tsx +0 -288
- data/frontend/src/components/Dashboard.tsx +0 -83
- data/frontend/src/components/Header.tsx +0 -141
- data/frontend/src/components/MessageBus.tsx +0 -56
- data/frontend/src/components/POCard.tsx +0 -56
- data/frontend/src/components/PODetail.tsx +0 -124
- data/frontend/src/components/PromptPanel.tsx +0 -156
- data/frontend/src/components/SessionsPanel.tsx +0 -174
- data/frontend/src/components/ThreadsSidebar.tsx +0 -163
- data/lib/prompt_objects/server/public/assets/index-Bkme6COu.css +0 -1
- 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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6dd3c14942ef80d1979ded542802ad9d1a24b32cd479aa4ba0a08bb0bf2e349d
|
|
4
|
+
data.tar.gz: 3642d5424aa827754dfefde82a9e9e5c770935ebf08e36cfc429d8f86e5e8502
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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**:
|
|
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
|
-
|
|
14
|
+
RUNTIME (Environment)
|
|
15
15
|
├── CAPABILITY REGISTRY
|
|
16
16
|
│ ├── PRIMITIVES (Ruby) - deterministic interpretation
|
|
17
|
-
│
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
- `
|
|
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
|
-
|
|
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
|
-
|
|
68
|
+
## Technology Stack
|
|
66
69
|
|
|
67
|
-
|
|
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
|
-
##
|
|
79
|
+
## File Structure
|
|
70
80
|
|
|
71
81
|
```
|
|
72
82
|
prompt_objects/
|
|
73
|
-
├── exe/prompt_objects
|
|
83
|
+
├── exe/prompt_objects # CLI entrypoint
|
|
74
84
|
├── lib/
|
|
75
|
-
│ ├── prompt_objects.rb
|
|
85
|
+
│ ├── prompt_objects.rb # Main entry, requires all modules
|
|
76
86
|
│ └── prompt_objects/
|
|
77
|
-
│ ├── environment.rb
|
|
78
|
-
│ ├── capability.rb
|
|
79
|
-
│ ├── prompt_object.rb
|
|
80
|
-
│ ├── primitive.rb
|
|
81
|
-
│ ├── loader.rb
|
|
82
|
-
│ ├── registry.rb
|
|
83
|
-
│ ├── message_bus.rb
|
|
84
|
-
│ ├──
|
|
85
|
-
│ ├──
|
|
86
|
-
│ ├──
|
|
87
|
-
│ ├──
|
|
88
|
-
│
|
|
89
|
-
├──
|
|
90
|
-
|
|
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
|
|
106
|
-
- **Self-Modification**:
|
|
107
|
-
- **Human-in-the-Loop**: POs
|
|
108
|
-
- **
|
|
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.
|
|
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.
|
|
20
|
+
anthropic (1.19.0)
|
|
21
|
+
cgi
|
|
21
22
|
connection_pool
|
|
22
23
|
ast (2.4.3)
|
|
23
|
-
async (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.
|
|
30
|
+
async-container (0.30.0)
|
|
30
31
|
async (~> 2.22)
|
|
31
|
-
async-container-supervisor (0.9.
|
|
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.
|
|
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.
|
|
53
|
+
async-service (0.19.0)
|
|
53
54
|
async
|
|
54
|
-
async-container (~> 0.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
108
|
+
io-endpoint (0.17.2)
|
|
107
109
|
io-event (1.14.2)
|
|
108
110
|
io-stream (0.11.1)
|
|
109
|
-
irb (1.
|
|
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.
|
|
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.
|
|
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.
|
|
126
|
+
localhost (1.7.0)
|
|
124
127
|
logger (1.7.0)
|
|
125
128
|
mapping (1.1.3)
|
|
126
|
-
mcp (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.
|
|
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.
|
|
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.
|
|
155
|
-
protocol-http1 (0.
|
|
156
|
+
protocol-http (0.59.0)
|
|
157
|
+
protocol-http1 (0.37.0)
|
|
156
158
|
protocol-http (~> 0.58)
|
|
157
|
-
protocol-http2 (0.
|
|
159
|
+
protocol-http2 (0.24.0)
|
|
158
160
|
protocol-hpack (~> 1.4)
|
|
159
161
|
protocol-http (~> 0.47)
|
|
160
|
-
protocol-rack (0.21.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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-
|
|
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>
|