im_wower
·
2026-03-28
artifacts.test.js
1import assert from "node:assert/strict";
2import test from "node:test";
3
4import {
5 DEFAULT_BAA_DELIVERY_INLINE_THRESHOLD,
6 DEFAULT_BAA_DELIVERY_SUMMARY_LENGTH,
7 renderBaaDeliveryMessageText
8} from "../dist/index.js";
9
10function createExecutionResult(overrides = {}) {
11 return {
12 artifact: null,
13 data: null,
14 dedupeKey: "dedupe-default",
15 details: null,
16 error: null,
17 httpStatus: 200,
18 instructionId: "inst_default",
19 message: null,
20 ok: true,
21 requestId: "req-default",
22 route: {
23 key: "local.default",
24 method: "POST",
25 path: "/v1/default"
26 },
27 target: "conductor",
28 tool: "status",
29 ...overrides
30 };
31}
32
33function createProcessResult(executions, instructions = []) {
34 return {
35 blocks: [],
36 duplicates: [],
37 executions,
38 instructions,
39 status: executions.length === 0 ? "no_instructions" : "executed"
40 };
41}
42
43test("renderBaaDeliveryMessageText renders plain-text execution details", () => {
44 const rendered = renderBaaDeliveryMessageText(
45 {
46 assistantMessageId: "msg-render-plain",
47 conversationId: "conv-render-plain",
48 platform: "chatgpt",
49 processResult: createProcessResult(
50 [
51 createExecutionResult({
52 artifact: {
53 resultText: JSON.stringify({
54 data: {
55 a: 1,
56 b: 2
57 },
58 details: {
59 retryable: false
60 },
61 message: "command completed",
62 ok: true
63 }, null, 2),
64 url: "https://conductor.makefile.so/artifact/exec/inst_render_01.txt"
65 },
66 data: {
67 b: 2,
68 a: 1
69 },
70 details: {
71 retryable: false
72 },
73 instructionId: "inst_render_01",
74 message: "command completed",
75 route: {
76 key: "local.exec",
77 method: "POST",
78 path: "/v1/exec"
79 },
80 tool: "exec"
81 })
82 ],
83 [
84 {
85 blockIndex: 3,
86 dedupeBasis: {
87 assistant_message_id: "msg-render-plain",
88 block_index: 3,
89 conversation_id: "conv-render-plain",
90 params: null,
91 platform: "chatgpt",
92 target: "conductor",
93 tool: "exec",
94 version: "baa.v1"
95 },
96 dedupeKey: "dedupe-default",
97 envelopeVersion: "baa.v1",
98 instructionId: "inst_render_01",
99 params: null,
100 paramsKind: "none",
101 platform: "chatgpt",
102 rawBlock: "```baa```",
103 rawInstruction: "@conductor::exec",
104 target: "conductor",
105 tool: "exec",
106 assistantMessageId: "msg-render-plain",
107 conversationId: "conv-render-plain"
108 }
109 ]
110 )
111 }
112 );
113
114 assert.equal(rendered.executionCount, 1);
115 assert.equal(rendered.messageTruncated, false);
116 assert.match(rendered.messageText, /\[BAA 执行结果\]/u);
117 assert.match(rendered.messageText, /assistant_message_id: msg-render-plain/u);
118 assert.match(rendered.messageText, /instruction_id: inst_render_01/u);
119 assert.match(rendered.messageText, /"retryable": false/u);
120 assert.match(
121 rendered.messageText,
122 /完整结果:https:\/\/conductor\.makefile\.so\/artifact\/exec\/inst_render_01\.txt/u
123 );
124});
125
126test("renderBaaDeliveryMessageText truncates overlong output and appends artifact URL", () => {
127 const stdout = `${"A".repeat(DEFAULT_BAA_DELIVERY_INLINE_THRESHOLD)}TRUNCATED_TAIL_MARKER`;
128 const rendered = renderBaaDeliveryMessageText(
129 {
130 assistantMessageId: "msg-render-truncated",
131 conversationId: "conv-render-truncated",
132 platform: "claude",
133 processResult: createProcessResult([
134 createExecutionResult({
135 artifact: {
136 resultText: stdout,
137 url: "https://conductor.makefile.so/artifact/exec/inst_render_truncated.txt"
138 },
139 data: {
140 result: {
141 stdout
142 }
143 },
144 instructionId: "inst_render_truncated",
145 route: {
146 key: "local.exec",
147 method: "POST",
148 path: "/v1/exec"
149 },
150 tool: "exec"
151 })
152 ])
153 }
154 );
155
156 assert.equal(rendered.messageLineLimit, DEFAULT_BAA_DELIVERY_INLINE_THRESHOLD);
157 assert.equal(rendered.messageTruncated, true);
158 assert.ok(rendered.messageCharCount < stdout.length);
159 assert.match(rendered.messageText, new RegExp(`A{${DEFAULT_BAA_DELIVERY_SUMMARY_LENGTH}}`, "u"));
160 assert.doesNotMatch(rendered.messageText, /TRUNCATED_TAIL_MARKER/u);
161 assert.match(
162 rendered.messageText,
163 /完整结果:https:\/\/conductor\.makefile\.so\/artifact\/exec\/inst_render_truncated\.txt/u
164 );
165});