Summary
Remove the bespoke store Lua object and make store operations ordinary tool calls, so Store is just another entry in the RunConfig ToolCatalog.
Details
Discussed in #cppa-wg21-org on 2026-09-09 and again on 2026-09-10.
- Today
store is a table injected into the Lua VM whose keys call back into the host. The PromptForge Prompting Language document (## Store) describes it as the agent's virtual file system.
- Proposed shape:
tool_call("store.write_file", ...)
with optional pure-Lua sugar if wanted:
local store = tables:new()
store.append_file = tool_call("store.append")
- Guiding rule from Vinnie: if something currently written in Rust can be expressed in Lua using a lower-level primitive, keep the primitive and delete the Rust.
tool_call becomes a first-class operation returning a Task-like future (async, awaitable, can fail, returns a result on success).
Rationale
Related
Summary
Remove the bespoke
storeLua object and make store operations ordinary tool calls, so Store is just another entry in theRunConfigToolCatalog.Details
Discussed in #cppa-wg21-org on 2026-09-09 and again on 2026-09-10.
storeis a table injected into the Lua VM whose keys call back into the host. The PromptForge Prompting Language document (## Store) describes it as the agent's virtual file system.tool_callbecomes a first-class operation returning a Task-like future (async, awaitable, can fail, returns a result on success).Rationale
execute::runcontract (crates/promptforge-core/src/execute.rs) by dropping thestoreargument and the custom API.Related