Watch
0
0
Fork
You've already forked hyperhive
0

an archetype flow can be customized for one agent

This commit is contained in:
atlas 2026-11-11 21:40:51 +01:00 • committed by mara
commit 5443c1c9ba

View file

@ -6,6 +6,7 @@ import {
blankNode,
DEFAULT_LIMITS,
depthOf,
disabledOnSave,
duplicateFlow,
heightBelow,
isDirty,
@ -428,6 +429,55 @@ test("seedFlow copies an archetype flow by its key, sending to its one member",
assert.ok(recipients(members).every((to) => to === "members"));
});
test("seedFlow customizes an archetype flow for one agent, and the save adds that agent's switch-off", () => {
const members = {
...flow(),
id: "new-issues",
name: "New issues",
nodes: flow().nodes.map((n) =>
n.kind === "todo" ? { ...n, to: "members" } : n,
),
};
const key = "archetype:triage/new-issues";
const view = {
revision: 1,
disabled_builtins: ["closed"],
builtins: [],
flows: [],
archetype_flows: [
{ archetype: "triage", key, flow: members, members: ["alice", "bob"] },
],
};
const todos = (f) => f.nodes.filter((n) => n.kind === "todo");
const mine = seedFlow(view, key, "bob");
assert.equal(mine.id, NEW_FLOW_ID);
assert.equal(mine.name, "New issues (bob)");
assert.ok(todos(mine).length > 0, "control: it has a todo");
assert.ok(todos(mine).every((n) => n.to.agent === "bob"));
// Without an agent, two members leave the recipient empty for the save to refuse.
assert.ok(todos(seedFlow(view, key)).every((n) => n.to.agent === ""));
// The save adds the one agent's key, sorted in, once; plain drafts add none.
assert.deepEqual(disabledOnSave(["closed"], key, "bob"), [
"archetype:triage/new-issues@bob",
"closed",
]);
assert.deepEqual(
disabledOnSave(["archetype:triage/new-issues@bob"], key, "bob"),
["archetype:triage/new-issues@bob"],
);
assert.deepEqual(disabledOnSave(["closed"], key, null), ["closed"]);
assert.deepEqual(disabledOnSave(["closed"], null, "bob"), ["closed"]);
const sent = JSON.parse(
saveRequest(
view,
[savedAs(view, mine)],
disabledOnSave(view.disabled_builtins, key, "bob"),
).body,
);
assert.deepEqual(sent.disabled_builtins, [key + "@bob", "closed"]);
assert.equal(sent.flows[0].id, "new-issues-bob");
});
test("savedAs takes the id from the name, clear of every saved id", () => {
const view = {
revision: 1,