summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig19
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,
};