diff options
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/main.zig b/src/main.zig index 56ea2ad..a752a12 100644 --- a/src/main.zig +++ b/src/main.zig @@ -2,7 +2,7 @@ const std = @import("std"); const panto = @import("panto"); const ping_tool = @import("ping_tool.zig"); const lua_bridge = @import("lua_bridge.zig"); -const lua_tool = @import("lua_tool.zig"); +const lua_runtime = @import("lua_runtime.zig"); const extension_loader = @import("extension_loader.zig"); // Shorthand alias for the Lua C API. The bridge module owns the actual @@ -12,7 +12,7 @@ const lua = lua_bridge.c; test { std.testing.refAllDecls(@This()); _ = lua_bridge; - _ = lua_tool; + _ = lua_runtime; _ = extension_loader; } @@ -220,13 +220,20 @@ pub fn main(init: std.process.Init) !void { try conv.addSystemMessage("You are a helpful assistant."); const prov = try panto.provider.Provider.init(alloc, io, config); - var agent = panto.agent.Agent.init(alloc, prov); + var agent = panto.agent.Agent.init(alloc, io, prov); defer agent.deinit(); // smoke test: register a trivial built-in tool so we can exercise // the tool-call loop against a real LLM. try agent.registerTool(ping_tool.tool()); + // Spin up the long-lived Lua runtime. All Lua extensions load into + // one `lua_State`; module-global state survives across calls. The + // runtime registers with the agent as a single `ToolSource` named + // `panto-lua`. + var rt = try lua_runtime.LuaRuntime.create(alloc); + defer rt.deinit(); + // Discover Lua extensions from $XDG_CONFIG_HOME/panto/extensions (or // $HOME/.config/panto/extensions) and ./.panto/extensions. Project // entries shadow user entries with the same name; tool-name collisions @@ -235,13 +242,17 @@ pub fn main(init: std.process.Init) !void { alloc, io, init.environ_map, - &agent.registry, + rt, ) catch |err| { std.log.err("extension discovery failed: {t}", .{err}); return err; }; std.log.debug("extensions: {d} tool(s) registered", .{n_ext_tools}); + if (n_ext_tools > 0) { + try agent.registerToolSource(rt.toolSource()); + } + const banner_model: []const u8 = switch (config) { inline else => |c| c.model, }; |
