zooid 0.14.1 → 0.15.0
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/bin.js +45 -24
- package/dist/bin.js.map +1 -1
- package/dist/{chunk-R5S26T7B.js → chunk-35IKQPC5.js} +272 -65
- package/dist/chunk-35IKQPC5.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +10 -10
- package/src/daemon/start-daemon.ts +3 -0
- package/src/daemon/trigger-runner.mxid.test.ts +145 -0
- package/src/daemon/trigger-runner.test.ts +3 -4
- package/src/daemon/trigger-runner.ts +45 -7
- package/src/daemon/trigger-scheduler.ts +12 -7
- package/src/daemon/webhook-routes.ts +3 -7
- package/dist/chunk-R5S26T7B.js.map +0 -1
package/dist/bin.js
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
MediaClient,
|
|
6
6
|
SpawnRegistry,
|
|
7
7
|
buildAcpRegistry,
|
|
8
|
+
buildMentionContent,
|
|
8
9
|
contextEligibleAgents,
|
|
9
10
|
createMatrixTransport,
|
|
10
11
|
ensureDefaultChannel,
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
renderTemplate,
|
|
20
21
|
startAgentSocketServers,
|
|
21
22
|
startWorkforcePublisher
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-35IKQPC5.js";
|
|
23
24
|
|
|
24
25
|
// src/bin.ts
|
|
25
26
|
import { resolve as resolve8 } from "path";
|
|
@@ -697,9 +698,15 @@ function shouldBindHttpListener(mode) {
|
|
|
697
698
|
import { Cron } from "croner";
|
|
698
699
|
|
|
699
700
|
// src/daemon/trigger-runner.ts
|
|
701
|
+
var warnedTargets = /* @__PURE__ */ new Set();
|
|
700
702
|
async function fireTrigger(deps) {
|
|
701
|
-
const { name, as, message,
|
|
703
|
+
const { name, as, message, agentUserIds, resolveRoom, ensureBot, sendMessage, getJoinedMembers } = deps;
|
|
702
704
|
try {
|
|
705
|
+
const target = message.mention.startsWith("@") ? message.mention : agentUserIds[message.mention];
|
|
706
|
+
if (!target) {
|
|
707
|
+
console.warn(`[trigger:${name}] unknown agent "${message.mention}" \u2014 skipping`);
|
|
708
|
+
return;
|
|
709
|
+
}
|
|
703
710
|
const roomId = await resolveRoom(message.room);
|
|
704
711
|
if (!roomId) {
|
|
705
712
|
console.warn(`[trigger:${name}] cannot resolve room ${message.room} \u2014 skipping`);
|
|
@@ -710,13 +717,24 @@ async function fireTrigger(deps) {
|
|
|
710
717
|
roomId,
|
|
711
718
|
asUserId: as,
|
|
712
719
|
content: {
|
|
713
|
-
msgtype: "m.text",
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
720
|
+
...buildMentionContent({ userId: target, text: message.text, msgtype: "m.text" }),
|
|
721
|
+
"dev.zooid.trigger": {
|
|
722
|
+
name,
|
|
723
|
+
fired_at: Date.now(),
|
|
724
|
+
...message.ttlMs !== void 0 ? { ttl_ms: message.ttlMs } : {}
|
|
725
|
+
}
|
|
718
726
|
}
|
|
719
727
|
});
|
|
728
|
+
if (getJoinedMembers) {
|
|
729
|
+
const { joined } = await getJoinedMembers(roomId, as);
|
|
730
|
+
const key = `${name}|${target}`;
|
|
731
|
+
if (!(target in joined) && !warnedTargets.has(key)) {
|
|
732
|
+
warnedTargets.add(key);
|
|
733
|
+
console.warn(
|
|
734
|
+
`[trigger:${name}] ${target} is not in ${message.room} \u2014 nothing will handle this unless that agent joins before the message expires`
|
|
735
|
+
);
|
|
736
|
+
}
|
|
737
|
+
}
|
|
720
738
|
} catch (err) {
|
|
721
739
|
console.warn(`[trigger:${name}] failed:`, err.message);
|
|
722
740
|
}
|
|
@@ -731,18 +749,22 @@ function validateCron(name, expr) {
|
|
|
731
749
|
}
|
|
732
750
|
}
|
|
733
751
|
function startTriggerScheduler(deps) {
|
|
734
|
-
const { triggers, agentUserIds, resolveRoom, ensureBot, sendMessage } = deps;
|
|
752
|
+
const { triggers, agentUserIds, resolveRoom, ensureBot, sendMessage, getJoinedMembers } = deps;
|
|
735
753
|
const jobs = [];
|
|
736
754
|
for (const [name, trigger] of Object.entries(triggers)) {
|
|
737
755
|
if (!trigger.schedule) continue;
|
|
738
756
|
const job = new Cron(trigger.schedule, () => {
|
|
739
757
|
for (const message of trigger.messages) {
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
758
|
+
void fireTrigger({
|
|
759
|
+
name,
|
|
760
|
+
as: trigger.as,
|
|
761
|
+
message,
|
|
762
|
+
agentUserIds,
|
|
763
|
+
resolveRoom,
|
|
764
|
+
ensureBot,
|
|
765
|
+
sendMessage,
|
|
766
|
+
getJoinedMembers
|
|
767
|
+
});
|
|
746
768
|
}
|
|
747
769
|
});
|
|
748
770
|
jobs.push(job);
|
|
@@ -955,19 +977,15 @@ async function handleDelivery(deps, name, trigger, raw, headers, cache, customDe
|
|
|
955
977
|
};
|
|
956
978
|
for (const message of trigger.messages) {
|
|
957
979
|
if (message.match !== void 0 && !evaluateMatch(message.match, ctx)) continue;
|
|
958
|
-
const agentUserId = deps.agentUserIds[message.mention];
|
|
959
|
-
if (!agentUserId) {
|
|
960
|
-
console.warn(`[webhook:${name}] unknown agent "${message.mention}" \u2014 skipping`);
|
|
961
|
-
continue;
|
|
962
|
-
}
|
|
963
980
|
await fireTrigger({
|
|
964
981
|
name,
|
|
965
982
|
as: trigger.as,
|
|
966
983
|
message: { ...message, text: renderTemplate(message.text, ctx) },
|
|
967
|
-
|
|
984
|
+
agentUserIds: deps.agentUserIds,
|
|
968
985
|
resolveRoom: deps.resolveRoom,
|
|
969
986
|
ensureBot: deps.ensureBot,
|
|
970
|
-
sendMessage: deps.sendMessage
|
|
987
|
+
sendMessage: deps.sendMessage,
|
|
988
|
+
getJoinedMembers: deps.getJoinedMembers
|
|
971
989
|
});
|
|
972
990
|
}
|
|
973
991
|
} catch (err) {
|
|
@@ -1237,7 +1255,8 @@ async function startDaemon(opts = {}) {
|
|
|
1237
1255
|
agentUserIds,
|
|
1238
1256
|
resolveRoom,
|
|
1239
1257
|
ensureBot,
|
|
1240
|
-
sendMessage: (m) => client.sendMessage(m)
|
|
1258
|
+
sendMessage: (m) => client.sendMessage(m),
|
|
1259
|
+
getJoinedMembers: (roomId, asUserId2) => client.getJoinedMembers(roomId, asUserId2)
|
|
1241
1260
|
});
|
|
1242
1261
|
for (const [name] of webhookTriggers) {
|
|
1243
1262
|
console.log(`[webhook] POST ${WEBHOOK_ROUTE_PREFIX}/${name}`);
|
|
@@ -1281,7 +1300,8 @@ async function startDaemon(opts = {}) {
|
|
|
1281
1300
|
agentUserIds,
|
|
1282
1301
|
resolveRoom,
|
|
1283
1302
|
ensureBot,
|
|
1284
|
-
sendMessage: (m) => client.sendMessage(m)
|
|
1303
|
+
sendMessage: (m) => client.sendMessage(m),
|
|
1304
|
+
getJoinedMembers: (roomId, asUserId2) => client.getJoinedMembers(roomId, asUserId2)
|
|
1285
1305
|
});
|
|
1286
1306
|
const scheduled = Object.values(config.triggers).filter((t) => t.schedule).length;
|
|
1287
1307
|
if (scheduled > 0) console.log(`[trigger] scheduled ${scheduled} trigger(s)`);
|
|
@@ -1317,7 +1337,8 @@ async function startDaemon(opts = {}) {
|
|
|
1317
1337
|
client,
|
|
1318
1338
|
spaceRoomId,
|
|
1319
1339
|
asUserId,
|
|
1320
|
-
getAgents: () => bindings
|
|
1340
|
+
getAgents: () => bindings,
|
|
1341
|
+
stateKey: matrix.transport.workstation ?? ""
|
|
1321
1342
|
});
|
|
1322
1343
|
console.log(`[matrix] published dev.zooid.workforce (${bindings.length} agents)`);
|
|
1323
1344
|
void publisher;
|