botinabox 0.3.0 → 0.3.1
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.
- package/dist/index.js +77 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -830,14 +830,14 @@ var SessionManager = class {
|
|
|
830
830
|
async save(agentId, channelId, peerId, params) {
|
|
831
831
|
const existing = await this._find(agentId, channelId, peerId);
|
|
832
832
|
if (existing) {
|
|
833
|
-
await this.db.update("
|
|
833
|
+
await this.db.update("sessions", { id: existing["id"] }, {
|
|
834
834
|
context: JSON.stringify(params),
|
|
835
835
|
last_message_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
836
836
|
message_count: (existing["message_count"] ?? 0) + 1
|
|
837
837
|
});
|
|
838
838
|
return existing["id"];
|
|
839
839
|
} else {
|
|
840
|
-
const row = await this.db.insert("
|
|
840
|
+
const row = await this.db.insert("sessions", {
|
|
841
841
|
agent_id: agentId,
|
|
842
842
|
channel: channelId,
|
|
843
843
|
peer_id: peerId,
|
|
@@ -857,7 +857,7 @@ var SessionManager = class {
|
|
|
857
857
|
async clear(agentId, channelId, peerId) {
|
|
858
858
|
const session = await this._find(agentId, channelId, peerId);
|
|
859
859
|
if (session) {
|
|
860
|
-
await this.db.delete("
|
|
860
|
+
await this.db.delete("sessions", { id: session["id"] });
|
|
861
861
|
}
|
|
862
862
|
}
|
|
863
863
|
async shouldClear(session, opts) {
|
|
@@ -876,7 +876,7 @@ var SessionManager = class {
|
|
|
876
876
|
return false;
|
|
877
877
|
}
|
|
878
878
|
async _find(agentId, channelId, peerId) {
|
|
879
|
-
const rows = await this.db.query("
|
|
879
|
+
const rows = await this.db.query("sessions", {
|
|
880
880
|
where: { agent_id: agentId, channel: channelId, peer_id: peerId }
|
|
881
881
|
});
|
|
882
882
|
return rows[0] ?? void 0;
|
|
@@ -1369,20 +1369,41 @@ function defineCoreTables(db) {
|
|
|
1369
1369
|
]
|
|
1370
1370
|
});
|
|
1371
1371
|
db.define("messages", {
|
|
1372
|
+
columns: {
|
|
1373
|
+
id: "TEXT PRIMARY KEY",
|
|
1374
|
+
channel: "TEXT NOT NULL DEFAULT 'slack'",
|
|
1375
|
+
direction: "TEXT NOT NULL DEFAULT 'inbound'",
|
|
1376
|
+
from_user: "TEXT",
|
|
1377
|
+
from_agent: "TEXT",
|
|
1378
|
+
agent_id: "TEXT",
|
|
1379
|
+
user_id: "TEXT",
|
|
1380
|
+
body: "TEXT NOT NULL",
|
|
1381
|
+
thread_id: "TEXT",
|
|
1382
|
+
task_id: "TEXT",
|
|
1383
|
+
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
1384
|
+
deleted_at: "TEXT"
|
|
1385
|
+
},
|
|
1386
|
+
tableConstraints: [
|
|
1387
|
+
"CREATE INDEX IF NOT EXISTS idx_messages_created ON messages(created_at)",
|
|
1388
|
+
"CREATE INDEX IF NOT EXISTS idx_messages_thread ON messages(thread_id)",
|
|
1389
|
+
"CREATE INDEX IF NOT EXISTS idx_messages_agent ON messages(agent_id)"
|
|
1390
|
+
]
|
|
1391
|
+
});
|
|
1392
|
+
db.define("sessions", {
|
|
1372
1393
|
columns: {
|
|
1373
1394
|
id: "TEXT PRIMARY KEY",
|
|
1374
1395
|
agent_id: "TEXT NOT NULL",
|
|
1375
1396
|
channel: "TEXT NOT NULL",
|
|
1376
1397
|
peer_id: "TEXT NOT NULL",
|
|
1377
1398
|
user_id: "TEXT",
|
|
1378
|
-
last_message_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
1379
|
-
message_count: "INTEGER NOT NULL DEFAULT 0",
|
|
1380
1399
|
context: "TEXT NOT NULL DEFAULT '{}'",
|
|
1400
|
+
message_count: "INTEGER NOT NULL DEFAULT 0",
|
|
1401
|
+
last_message_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
1381
1402
|
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
1382
1403
|
expires_at: "TEXT"
|
|
1383
1404
|
},
|
|
1384
1405
|
tableConstraints: [
|
|
1385
|
-
"CREATE UNIQUE INDEX IF NOT EXISTS
|
|
1406
|
+
"CREATE UNIQUE INDEX IF NOT EXISTS idx_sessions_agent_channel_peer ON sessions(agent_id, channel, peer_id)"
|
|
1386
1407
|
]
|
|
1387
1408
|
});
|
|
1388
1409
|
db.define("skills", {
|
|
@@ -1671,6 +1692,55 @@ ${s.definition}` : null,
|
|
|
1671
1692
|
}
|
|
1672
1693
|
}
|
|
1673
1694
|
});
|
|
1695
|
+
db.defineEntityContext("messages", {
|
|
1696
|
+
table: "messages",
|
|
1697
|
+
directory: "messages",
|
|
1698
|
+
slugColumn: "id",
|
|
1699
|
+
indexFile: "messages/MESSAGES.md",
|
|
1700
|
+
indexRender: (rows) => {
|
|
1701
|
+
const active = rows.filter((r) => r.deleted_at == null);
|
|
1702
|
+
if (!active.length) return "# Messages\n\nNo messages.\n";
|
|
1703
|
+
const recent = active.slice(-100);
|
|
1704
|
+
const lines = recent.map((r) => {
|
|
1705
|
+
const dir = r.direction === "outbound" ? "\u2192" : "\u2190";
|
|
1706
|
+
const who = r.from_agent ?? r.from_user ?? "unknown";
|
|
1707
|
+
const time = (r.created_at ?? "").slice(0, 16);
|
|
1708
|
+
const preview = (r.body ?? "").slice(0, 80);
|
|
1709
|
+
return `- ${dir} **${who}** (${time}): ${preview}`;
|
|
1710
|
+
});
|
|
1711
|
+
return `# Messages
|
|
1712
|
+
|
|
1713
|
+
Last ${lines.length} messages:
|
|
1714
|
+
|
|
1715
|
+
${lines.join("\n")}
|
|
1716
|
+
`;
|
|
1717
|
+
},
|
|
1718
|
+
files: {
|
|
1719
|
+
"MESSAGE.md": {
|
|
1720
|
+
source: { type: "self" },
|
|
1721
|
+
render: (rows) => {
|
|
1722
|
+
const m = rows[0];
|
|
1723
|
+
if (!m) return "";
|
|
1724
|
+
return [
|
|
1725
|
+
"# Message",
|
|
1726
|
+
"",
|
|
1727
|
+
`**Direction:** ${m.direction}`,
|
|
1728
|
+
m.from_user ? `**From User:** ${m.from_user}` : null,
|
|
1729
|
+
m.from_agent ? `**From Agent:** ${m.from_agent}` : null,
|
|
1730
|
+
`**Channel:** ${m.channel}`,
|
|
1731
|
+
m.thread_id ? `**Thread:** ${m.thread_id}` : null,
|
|
1732
|
+
m.task_id ? `**Task:** ${m.task_id}` : null,
|
|
1733
|
+
`**Time:** ${m.created_at}`,
|
|
1734
|
+
"",
|
|
1735
|
+
"---",
|
|
1736
|
+
"",
|
|
1737
|
+
m.body,
|
|
1738
|
+
""
|
|
1739
|
+
].filter(Boolean).join("\n");
|
|
1740
|
+
}
|
|
1741
|
+
}
|
|
1742
|
+
}
|
|
1743
|
+
});
|
|
1674
1744
|
}
|
|
1675
1745
|
|
|
1676
1746
|
// src/core/data/domain-schema.ts
|