Skip to content
44 linesCodeBlameRaw

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

Chat and workspace agents: channels, DMs and named agents you talk to1import { test } from "node:test";
2import assert from "node:assert/strict";
3
4import { MAX_NAME, channelName, dmKey, dmMembers } from "./names.ts";
5
6test("a channel name is kept lowercase, without #, spaces as dashes", () => {
7 assert.deepEqual(channelName("General"), { ok: true, name: "general" });
8 assert.deepEqual(channelName(" #g1t-core "), { ok: true, name: "g1t-core" });
9 assert.deepEqual(channelName("release train"), { ok: true, name: "release-train" });
10 assert.deepEqual(channelName("ops_2026"), { ok: true, name: "ops_2026" });
11});
12
13test("a channel name uses letters, digits, dashes and underscores, and is not too long", () => {
14 assert.equal(channelName("").ok, false);
15 assert.equal(channelName("#").ok, false);
16 assert.equal(channelName("café").ok, false);
17 assert.equal(channelName("a.b").ok, false);
18 assert.equal(channelName("@here").ok, false);
19 assert.equal(channelName("x".repeat(MAX_NAME)).ok, true);
20 assert.equal(channelName("x".repeat(MAX_NAME + 1)).ok, false);
21});
22
23test("the site's chat routes are not channel names", () => {
24 for (const name of ["dm", "browse", "live", "api", "new", "#New", " API "]) {
25 assert.equal(channelName(name).ok, false, name);
26 }
27 assert.equal(channelName("news").ok, true);
28 assert.equal(channelName("api-team").ok, true);
29});
30
31test("the same members always make the same direct-message key", () => {
32 const a = dmKey(dmMembers("user:b", ["agent:z", "user:a"]));
33 const b = dmKey(dmMembers("user:a", ["user:b", "agent:z", "user:b"]));
34 assert.equal(a, b);
35 assert.equal(a, "agent:z,user:a,user:b");
36});
37
38test("a direct message with nobody else, or only yourself, is notes to yourself", () => {
39 assert.deepEqual(dmMembers("user:a", []), ["user:a"]);
40 assert.deepEqual(dmMembers("user:a", ["user:a"]), ["user:a"]);
41 assert.equal(dmKey(dmMembers("user:a", [])), "user:a");
42 // Notes are not the same conversation as a direct message with someone.
43 assert.notEqual(dmKey(dmMembers("user:a", [])), dmKey(dmMembers("user:a", ["user:b"])));
44});