matrix harness: persistent room (MATRIX_ROOM env) — no more DM-per-run
Reuses the fixed room when MATRIX_ROOM is set; only creates a fresh DM when unset. All replies go to the pinned room. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code <noreply@letta.com>
This commit is contained in:
1 parent
da50dea0d1
commit
a6d4e29589
1 file changed
+15
-13
+15
-13
@@ -11,7 +11,7 @@ const std = @import("std");
|
|||||||
const matrix = @import("matrix.zig");
|
const matrix = @import("matrix.zig");
|
||||||
const letta = @import("letta.zig");
|
const letta = @import("letta.zig");
|
||||||
|
|
||||||
fn envOr(name: [:0]const u8, default: []const u8) []const u8 {
|
fn env_or(name: [:0]const u8, default: []const u8) []const u8 {
|
||||||
if (std.c.getenv(name)) |v| {
|
if (std.c.getenv(name)) |v| {
|
||||||
var len: usize = 0;
|
var len: usize = 0;
|
||||||
while (v[len] != 0) len += 1;
|
while (v[len] != 0) len += 1;
|
||||||
@@ -25,10 +25,10 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
const io = init.io;
|
const io = init.io;
|
||||||
letta.initConversationsDir();
|
letta.initConversationsDir();
|
||||||
|
|
||||||
const user = envOr("MATRIX_USER", "@chaos-prime:chaosmith.systems");
|
const user = env_or("MATRIX_USER", "@chaos-prime:chaosmith.systems");
|
||||||
const password = envOr("MATRIX_PASSWORD", "");
|
const password = env_or("MATRIX_PASSWORD", "");
|
||||||
const peer = envOr("MATRIX_PEER", "@pierre:chaosmith.systems");
|
const peer = env_or("MATRIX_PEER", "@pierre:chaosmith.systems");
|
||||||
const agent = envOr("LETTA_MATRIX_AGENT", "agent-local-273c95cf-82a0-4711-bcd5-6139661e8488");
|
const agent = env_or("LETTA_MATRIX_AGENT", "agent-local-273c95cf-82a0-4711-bcd5-6139661e8488");
|
||||||
|
|
||||||
if (password.len == 0) {
|
if (password.len == 0) {
|
||||||
std.debug.print("matrix_harness: MATRIX_PASSWORD not set\n", .{});
|
std.debug.print("matrix_harness: MATRIX_PASSWORD not set\n", .{});
|
||||||
@@ -44,16 +44,18 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
defer alloc.free(session.user_id);
|
defer alloc.free(session.user_id);
|
||||||
std.debug.print("matrix_harness: logged in ({s})\n", .{session.user_id});
|
std.debug.print("matrix_harness: logged in ({s})\n", .{session.user_id});
|
||||||
|
|
||||||
// Create (or reuse) the DM. For scaffold simplicity we create fresh each
|
// Single persistent room: MATRIX_ROOM env if set (reuse!); only create
|
||||||
// run — Element dedupes DMs and the invite lands in Pierre's inbox.
|
// a fresh DM when it's unset. All replies go to this one room.
|
||||||
const room = matrix.createDirect(alloc, io, session.token, peer) catch |e| {
|
const room: []const u8 = env_or("MATRIX_ROOM", "");
|
||||||
|
const owned_room: ?[]u8 = if (room.len > 0) null else matrix.createDirect(alloc, io, session.token, peer) catch |e| {
|
||||||
std.debug.print("matrix_harness: createDirect failed: {s}\n", .{@errorName(e)});
|
std.debug.print("matrix_harness: createDirect failed: {s}\n", .{@errorName(e)});
|
||||||
return e;
|
return e;
|
||||||
};
|
};
|
||||||
defer alloc.free(room);
|
const room_id: []const u8 = owned_room orelse room;
|
||||||
std.debug.print("matrix_harness: DM room {s}\n", .{room});
|
defer if (owned_room) |r| alloc.free(r);
|
||||||
|
std.debug.print("matrix_harness: room {s}\n", .{room_id});
|
||||||
|
|
||||||
_ = try matrix.sendText(alloc, io, session.token, room, "matrix_harness online. Talk to me — messages go to the agent, replies come back here.");
|
_ = try matrix.sendText(alloc, io, session.token, room_id, "matrix_harness online in persistent room. Messages reach the agent, replies come back here.");
|
||||||
|
|
||||||
// Establish a sync point (drop history before now).
|
// Establish a sync point (drop history before now).
|
||||||
const first = try matrix.sync(alloc, io, session.token, "", 0);
|
const first = try matrix.sync(alloc, io, session.token, "", 0);
|
||||||
@@ -87,13 +89,13 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
const reply = letta.infer(io, alloc, agent, ev.body) catch |e| {
|
const reply = letta.infer(io, alloc, agent, ev.body) catch |e| {
|
||||||
std.debug.print("matrix_harness: letta failed: {s}\n", .{@errorName(e)});
|
std.debug.print("matrix_harness: letta failed: {s}\n", .{@errorName(e)});
|
||||||
const err_txt = "agent failed — see harness logs";
|
const err_txt = "agent failed — see harness logs";
|
||||||
if (matrix.sendText(alloc, io, session.token, room, err_txt)) |ev_id| alloc.free(ev_id) else |_| {}
|
if (matrix.sendText(alloc, io, session.token, room_id, err_txt)) |ev_id| alloc.free(ev_id) else |_| {}
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
defer alloc.free(reply);
|
defer alloc.free(reply);
|
||||||
|
|
||||||
std.debug.print("matrix_harness: reply: {s}\n", .{reply});
|
std.debug.print("matrix_harness: reply: {s}\n", .{reply});
|
||||||
if (matrix.sendText(alloc, io, session.token, room, reply)) |ev_id| alloc.free(ev_id) else |e| {
|
if (matrix.sendText(alloc, io, session.token, room_id, reply)) |ev_id| alloc.free(ev_id) else |e| {
|
||||||
std.debug.print("matrix_harness: send failed: {s}\n", .{@errorName(e)});
|
std.debug.print("matrix_harness: send failed: {s}\n", .{@errorName(e)});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user