Skip to content
56 linesCodeBlameRaw
1import assert from "node:assert/strict";
2import { test } from "node:test";
3
4import { cleanTitle, threadLink, writableSpaces, writeUpAgents, writeUpMessage } from "./write-up.ts";
5
6test("a thread's link is its conversation with ?thread=", () => {
7 assert.equal(threadLink("https://g1t.sh/", "/acme/-/chat/launch", "msg_1"), "https://g1t.sh/acme/-/chat/launch?thread=msg_1");
8 assert.equal(threadLink("https://g1t.sh", "/acme/-/chat/dm/chn_1", "a b"), "https://g1t.sh/acme/-/chat/dm/chn_1?thread=a%20b");
9});
10
11test("only spaces the person can write in, not archived, the default first", () => {
12 const spaces = writableSpaces([
13 { id: "s1", name: "Design", viewer_role: "edit", archived_at: null },
14 { id: "s2", name: "Board", viewer_role: "view", archived_at: null },
15 { id: "s3", name: "Old", viewer_role: "manage", archived_at: "2026-01-01T00:00:00Z" },
16 { id: "s4", name: "General", viewer_role: "manage", archived_at: null, is_default: true },
17 { id: "s5", name: "Notes", viewer_role: "comment", archived_at: null },
18 ]);
19 assert.deepEqual(spaces, [
20 { id: "s4", name: "General" },
21 { id: "s1", name: "Design" },
22 ]);
23});
24
25test("@g1t is always offered first, then the conversation's agents, once each", () => {
26 const agents = writeUpAgents([
27 { kind: "user", name: "ana", display_name: "Ana" },
28 { kind: "agent", name: "Scribe", display_name: "Scribe" },
29 { kind: "agent", name: "g1t", display_name: "g1t" },
30 { kind: "agent", name: "scribe", display_name: "Scribe" },
31 { kind: "agent", name: "qa", display_name: " " },
32 ]);
33 assert.deepEqual(agents, [
34 { handle: "g1t", name: "g1t" },
35 { handle: "scribe", name: "Scribe" },
36 { handle: "qa", name: "qa" },
37 ]);
38});
39
40test("a title is one line without double quotes", () => {
41 assert.equal(cleanTitle(' The "launch"\n plan '), "The 'launch' plan");
42 assert.equal(cleanTitle(null), "");
43 assert.equal(cleanTitle("x".repeat(200)).length, 120);
44});
45
46test("the ask names the agent, the space, the title if any, and the thread to cite", () => {
47 const link = "https://g1t.sh/acme/-/chat/launch?thread=msg_1";
48 assert.equal(
49 writeUpMessage({ agent: "g1t", space: "Engineering", title: "Launch plan", link }),
50 `@g1t write this thread up as a Docs page in Engineering titled "Launch plan": what was decided, why, and what's next. Link this thread as the source: ${link}`,
51 );
52 assert.equal(
53 writeUpMessage({ agent: "@Scribe", space: " Product notes ", title: " ", link }),
54 `@scribe write this thread up as a Docs page in Product notes: what was decided, why, and what's next. Link this thread as the source: ${link}`,
55 );
56});