arcie 0.1.3 → 0.1.5
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/README.md +34 -6
- package/dist/agent/index.d.ts +6 -3
- package/dist/agent/index.js +6 -6
- package/dist/agent/index.js.map +1 -1
- package/dist/auth/index.d.ts +6 -5
- package/dist/auth/index.js +8 -17
- package/dist/auth/index.js.map +1 -1
- package/dist/build-TWNCPXBU.js +82 -0
- package/dist/build-TWNCPXBU.js.map +1 -0
- package/dist/channels/index.d.ts +8 -5
- package/dist/channels/index.js +10 -12
- package/dist/channels/index.js.map +1 -1
- package/dist/chunk-3CNQ6HQV.js +12 -0
- package/dist/chunk-3CNQ6HQV.js.map +1 -0
- package/dist/chunk-4L7WVCTU.js +12 -0
- package/dist/chunk-4L7WVCTU.js.map +1 -0
- package/dist/chunk-4WSILP75.js +1774 -0
- package/dist/chunk-4WSILP75.js.map +1 -0
- package/dist/chunk-6XETPLIF.js +176 -0
- package/dist/chunk-6XETPLIF.js.map +1 -0
- package/dist/chunk-CKHBEZCT.js +24 -0
- package/dist/chunk-CKHBEZCT.js.map +1 -0
- package/dist/chunk-FQ7KDNV5.js +12 -0
- package/dist/chunk-FQ7KDNV5.js.map +1 -0
- package/dist/chunk-HVBDOHTL.js +148 -0
- package/dist/chunk-HVBDOHTL.js.map +1 -0
- package/dist/chunk-HWD2Z2CH.js +742 -0
- package/dist/chunk-HWD2Z2CH.js.map +1 -0
- package/dist/chunk-KVSX4MLK.js +139 -0
- package/dist/chunk-KVSX4MLK.js.map +1 -0
- package/dist/chunk-L3BTL5FM.js +39 -0
- package/dist/chunk-L3BTL5FM.js.map +1 -0
- package/dist/chunk-LQC65UHE.js +34 -0
- package/dist/chunk-LQC65UHE.js.map +1 -0
- package/dist/chunk-N5R3TEEZ.js +15 -0
- package/dist/chunk-N5R3TEEZ.js.map +1 -0
- package/dist/chunk-PHTJLJOV.js +25 -0
- package/dist/chunk-PHTJLJOV.js.map +1 -0
- package/dist/chunk-QE46QFID.js +92 -0
- package/dist/chunk-QE46QFID.js.map +1 -0
- package/dist/chunk-SGWQZZ2A.js +54 -0
- package/dist/chunk-SGWQZZ2A.js.map +1 -0
- package/dist/chunk-WAD7VLNI.js +51 -0
- package/dist/chunk-WAD7VLNI.js.map +1 -0
- package/dist/chunk-XOFWQUOO.js +30 -0
- package/dist/chunk-XOFWQUOO.js.map +1 -0
- package/dist/chunk-ZJNHQXMO.js +20 -0
- package/dist/chunk-ZJNHQXMO.js.map +1 -0
- package/dist/cli/index.d.ts +7 -2
- package/dist/cli/index.js +171 -41
- package/dist/cli/index.js.map +1 -1
- package/dist/context/index.d.ts +14 -11
- package/dist/context/index.js +22 -37
- package/dist/context/index.js.map +1 -1
- package/dist/dev-ZZDVOWUZ.js +1967 -0
- package/dist/dev-ZZDVOWUZ.js.map +1 -0
- package/dist/discover/index.d.ts +17 -7
- package/dist/discover/index.js +6 -132
- package/dist/discover/index.js.map +1 -1
- package/dist/hooks/index.d.ts +6 -3
- package/dist/hooks/index.js +6 -6
- package/dist/hooks/index.js.map +1 -1
- package/dist/index-CElLRVTP.d.ts +136 -0
- package/dist/index.d.ts +297 -18
- package/dist/index.js +160 -13
- package/dist/index.js.map +1 -1
- package/dist/init-5F7CIVLN.js +822 -0
- package/dist/init-5F7CIVLN.js.map +1 -0
- package/dist/instructions/index.d.ts +7 -4
- package/dist/instructions/index.js +8 -32
- package/dist/instructions/index.js.map +1 -1
- package/dist/protocol/events.d.ts +47 -39
- package/dist/protocol/events.js +46 -45
- package/dist/protocol/events.js.map +1 -1
- package/dist/runner/index.d.ts +4 -18
- package/dist/runner/index.js +11 -277
- package/dist/runner/index.js.map +1 -1
- package/dist/scaffold-web-chat-OQL5C2GK.js +7 -0
- package/dist/scaffold-web-chat-OQL5C2GK.js.map +1 -0
- package/dist/schedules/index.d.ts +6 -3
- package/dist/schedules/index.js +6 -6
- package/dist/schedules/index.js.map +1 -1
- package/dist/skills/index.d.ts +7 -4
- package/dist/skills/index.js +8 -27
- package/dist/skills/index.js.map +1 -1
- package/dist/tools/index.d.ts +13 -3
- package/dist/tools/index.js +8 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/types-DwxwdSa2.d.ts +151 -0
- package/docs/getting-started.md +2 -2
- package/docs/index.md +3 -2
- package/docs/project-layout.md +2 -2
- package/docs/subagents.md +95 -0
- package/package.json +15 -10
- package/templates/default/.env.local +12 -0
- package/templates/default/agent/agent.ts +2 -2
- package/templates/default/package.json +3 -3
- package/templates/web-chat/.env.local.example +4 -0
- package/templates/web-chat/README.md +51 -0
- package/templates/web-chat/app/api/chat/route.ts +43 -0
- package/templates/web-chat/app/globals.css +55 -0
- package/templates/web-chat/app/layout.tsx +15 -0
- package/templates/web-chat/app/page.tsx +9 -0
- package/templates/web-chat/components/chat.tsx +196 -0
- package/templates/web-chat/components/input-bar.tsx +74 -0
- package/templates/web-chat/components/message.tsx +63 -0
- package/templates/web-chat/components/tool-call.tsx +79 -0
- package/templates/web-chat/components/ui/button.tsx +46 -0
- package/templates/web-chat/components/ui/input.tsx +19 -0
- package/templates/web-chat/components.json +20 -0
- package/templates/web-chat/lib/stream.ts +41 -0
- package/templates/web-chat/lib/types.ts +61 -0
- package/templates/web-chat/lib/utils.ts +6 -0
- package/templates/web-chat/next.config.mjs +4 -0
- package/templates/web-chat/package.json +32 -0
- package/templates/web-chat/postcss.config.mjs +6 -0
- package/templates/web-chat/tailwind.config.ts +59 -0
- package/templates/web-chat/tsconfig.json +23 -0
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/channels/index.d.ts.map +0 -1
- package/dist/cli/banner.d.ts +0 -2
- package/dist/cli/banner.d.ts.map +0 -1
- package/dist/cli/banner.js +0 -10
- package/dist/cli/banner.js.map +0 -1
- package/dist/cli/build.d.ts +0 -5
- package/dist/cli/build.d.ts.map +0 -1
- package/dist/cli/build.js +0 -54
- package/dist/cli/build.js.map +0 -1
- package/dist/cli/dev.d.ts +0 -5
- package/dist/cli/dev.d.ts.map +0 -1
- package/dist/cli/dev.js +0 -74
- package/dist/cli/dev.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/init.d.ts +0 -4
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js +0 -75
- package/dist/cli/init.js.map +0 -1
- package/dist/context/index.d.ts.map +0 -1
- package/dist/discover/index.d.ts.map +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/instructions/index.d.ts.map +0 -1
- package/dist/loader.d.ts +0 -7
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -102
- package/dist/loader.js.map +0 -1
- package/dist/protocol/events.d.ts.map +0 -1
- package/dist/runner/index.d.ts.map +0 -1
- package/dist/schedules/index.d.ts.map +0 -1
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/types.d.ts +0 -118
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// src/cli/ui/output.ts
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
var terminalEscapeCodePoint = 27;
|
|
4
|
+
var bellCodePoint = 7;
|
|
5
|
+
var stringTerminatorCodePoint = 156;
|
|
6
|
+
function sanitizeForTerminal(input) {
|
|
7
|
+
let output = "";
|
|
8
|
+
let index = 0;
|
|
9
|
+
while (index < input.length) {
|
|
10
|
+
const codePoint = input.codePointAt(index);
|
|
11
|
+
if (codePoint == null) break;
|
|
12
|
+
if (codePoint === terminalEscapeCodePoint) {
|
|
13
|
+
index = skipEscSequence({ start: index, value: input });
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (codePoint === 155) {
|
|
17
|
+
index = skipCsiSequence({ start: index + 1, value: input });
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (isC1StringControlCodePoint(codePoint)) {
|
|
21
|
+
index = skipStringControlSequence({ start: index + 1, value: input });
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const character = String.fromCodePoint(codePoint);
|
|
25
|
+
index += character.length;
|
|
26
|
+
if (isUnsafeControlCodePoint(codePoint)) continue;
|
|
27
|
+
output += character;
|
|
28
|
+
}
|
|
29
|
+
return output;
|
|
30
|
+
}
|
|
31
|
+
function applyTone(theme, tone, value) {
|
|
32
|
+
switch (tone) {
|
|
33
|
+
case "accent":
|
|
34
|
+
return theme.accent(value);
|
|
35
|
+
case "danger":
|
|
36
|
+
return theme.danger(value);
|
|
37
|
+
case "info":
|
|
38
|
+
return theme.info(value);
|
|
39
|
+
case "muted":
|
|
40
|
+
return theme.muted(value);
|
|
41
|
+
case "subagent":
|
|
42
|
+
return theme.subagent(value);
|
|
43
|
+
case "success":
|
|
44
|
+
return theme.success(value);
|
|
45
|
+
case "warning":
|
|
46
|
+
return theme.warning(value);
|
|
47
|
+
default:
|
|
48
|
+
return theme.plain(value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function renderIndentedLines(lines, indent) {
|
|
52
|
+
const [firstLine = "", ...rest] = lines;
|
|
53
|
+
return [firstLine, ...rest.map((line) => `${indent}${line}`)];
|
|
54
|
+
}
|
|
55
|
+
function skipEscSequence(input) {
|
|
56
|
+
const nextIndex = input.start + 1;
|
|
57
|
+
const nextCodePoint = input.value.codePointAt(nextIndex);
|
|
58
|
+
if (nextCodePoint == null) return nextIndex;
|
|
59
|
+
if (nextCodePoint === 91) return skipCsiSequence({ start: nextIndex + 1, value: input.value });
|
|
60
|
+
if (isEscStringControlIntroducer(nextCodePoint)) {
|
|
61
|
+
return skipStringControlSequence({ start: nextIndex + 1, value: input.value });
|
|
62
|
+
}
|
|
63
|
+
const nextCharacter = String.fromCodePoint(nextCodePoint);
|
|
64
|
+
if (isCharsetDesignationIntroducer(nextCodePoint)) {
|
|
65
|
+
const designationIndex = nextIndex + nextCharacter.length;
|
|
66
|
+
const designationCodePoint = input.value.codePointAt(designationIndex);
|
|
67
|
+
if (designationCodePoint == null) return designationIndex;
|
|
68
|
+
return designationIndex + String.fromCodePoint(designationCodePoint).length;
|
|
69
|
+
}
|
|
70
|
+
return nextIndex + nextCharacter.length;
|
|
71
|
+
}
|
|
72
|
+
function skipCsiSequence(input) {
|
|
73
|
+
let index = input.start;
|
|
74
|
+
while (index < input.value.length) {
|
|
75
|
+
const codePoint = input.value.codePointAt(index);
|
|
76
|
+
if (codePoint == null) break;
|
|
77
|
+
const character = String.fromCodePoint(codePoint);
|
|
78
|
+
index += character.length;
|
|
79
|
+
if (codePoint >= 64 && codePoint <= 126) return index;
|
|
80
|
+
}
|
|
81
|
+
return index;
|
|
82
|
+
}
|
|
83
|
+
function skipStringControlSequence(input) {
|
|
84
|
+
let index = input.start;
|
|
85
|
+
while (index < input.value.length) {
|
|
86
|
+
const codePoint = input.value.codePointAt(index);
|
|
87
|
+
if (codePoint == null) break;
|
|
88
|
+
const character = String.fromCodePoint(codePoint);
|
|
89
|
+
const nextIndex = index + character.length;
|
|
90
|
+
if (codePoint === bellCodePoint || codePoint === stringTerminatorCodePoint) return nextIndex;
|
|
91
|
+
if (codePoint === terminalEscapeCodePoint && input.value.codePointAt(nextIndex) === 92) {
|
|
92
|
+
return nextIndex + 1;
|
|
93
|
+
}
|
|
94
|
+
index = nextIndex;
|
|
95
|
+
}
|
|
96
|
+
return index;
|
|
97
|
+
}
|
|
98
|
+
function isEscStringControlIntroducer(codePoint) {
|
|
99
|
+
return codePoint === 80 || codePoint === 88 || codePoint === 93 || codePoint === 94 || codePoint === 95;
|
|
100
|
+
}
|
|
101
|
+
function isC1StringControlCodePoint(codePoint) {
|
|
102
|
+
return codePoint === 144 || codePoint === 152 || codePoint === 157 || codePoint === 158 || codePoint === 159;
|
|
103
|
+
}
|
|
104
|
+
function isCharsetDesignationIntroducer(codePoint) {
|
|
105
|
+
return codePoint === 40 || codePoint === 41 || codePoint === 42 || codePoint === 43 || codePoint === 45 || codePoint === 46 || codePoint === 47;
|
|
106
|
+
}
|
|
107
|
+
function isUnsafeControlCodePoint(codePoint) {
|
|
108
|
+
return codePoint >= 0 && codePoint <= 8 || codePoint >= 11 && codePoint <= 31 || codePoint >= 127 && codePoint <= 159;
|
|
109
|
+
}
|
|
110
|
+
function renderOrangeText(input) {
|
|
111
|
+
if (!input.color) return input.text;
|
|
112
|
+
return `\x1B[38;5;208m${input.text}\x1B[39m`;
|
|
113
|
+
}
|
|
114
|
+
function createCliTheme(input = {}) {
|
|
115
|
+
const enabled = input.color ?? Boolean(process.stdout.isTTY);
|
|
116
|
+
const c = enabled ? chalk : null;
|
|
117
|
+
const wrap = (fn) => enabled ? fn : (text) => text;
|
|
118
|
+
return {
|
|
119
|
+
accent: wrap((text) => c.cyan(text)),
|
|
120
|
+
color: enabled,
|
|
121
|
+
danger: wrap((text) => c.red(text)),
|
|
122
|
+
heading: wrap((text) => c.bold.cyan(text)),
|
|
123
|
+
info: wrap((text) => c.blue(text)),
|
|
124
|
+
label: wrap((text) => c.bold(text)),
|
|
125
|
+
muted: wrap((text) => c.dim(text)),
|
|
126
|
+
plain: (text) => text,
|
|
127
|
+
subagent: (text) => renderOrangeText({ color: enabled, text }),
|
|
128
|
+
success: wrap((text) => c.green(text)),
|
|
129
|
+
warning: wrap((text) => c.yellow(text))
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function renderCliTaggedLine(theme, input) {
|
|
133
|
+
const message = sanitizeForTerminal(input.message);
|
|
134
|
+
const prefix = `[${sanitizeForTerminal(input.tag).toUpperCase()}]`;
|
|
135
|
+
const valueLines = renderIndentedLines(
|
|
136
|
+
applyTone(theme, input.tone ?? "default", message).split("\n"),
|
|
137
|
+
`${" ".repeat(prefix.length)} `
|
|
138
|
+
);
|
|
139
|
+
const [firstLine = "", ...rest] = valueLines;
|
|
140
|
+
return [theme.muted(prefix), firstLine].join(" ") + (rest.length > 0 ? `
|
|
141
|
+
${rest.join("\n")}` : "");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export {
|
|
145
|
+
createCliTheme,
|
|
146
|
+
renderCliTaggedLine
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=chunk-HVBDOHTL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/ui/output.ts"],"sourcesContent":["import chalk from \"chalk\";\n\ntype CliMessageTone =\n | \"accent\"\n | \"danger\"\n | \"default\"\n | \"info\"\n | \"muted\"\n | \"subagent\"\n | \"success\"\n | \"warning\";\n\nexport interface CliTheme {\n readonly color: boolean;\n accent(text: string): string;\n danger(text: string): string;\n heading(text: string): string;\n info(text: string): string;\n label(text: string): string;\n muted(text: string): string;\n plain(text: string): string;\n subagent(text: string): string;\n success(text: string): string;\n warning(text: string): string;\n}\n\nexport interface CliRow {\n readonly label: string;\n readonly tone?: CliMessageTone;\n readonly value: string;\n}\n\nconst terminalEscapeCodePoint = 0x1b;\nconst bellCodePoint = 0x07;\nconst stringTerminatorCodePoint = 0x9c;\n\nexport function sanitizeForTerminal(input: string): string {\n let output = \"\";\n let index = 0;\n\n while (index < input.length) {\n const codePoint = input.codePointAt(index);\n if (codePoint == null) break;\n\n if (codePoint === terminalEscapeCodePoint) {\n index = skipEscSequence({ start: index, value: input });\n continue;\n }\n if (codePoint === 0x9b) {\n index = skipCsiSequence({ start: index + 1, value: input });\n continue;\n }\n if (isC1StringControlCodePoint(codePoint)) {\n index = skipStringControlSequence({ start: index + 1, value: input });\n continue;\n }\n\n const character = String.fromCodePoint(codePoint);\n index += character.length;\n if (isUnsafeControlCodePoint(codePoint)) continue;\n output += character;\n }\n\n return output;\n}\n\nfunction applyTone(theme: CliTheme, tone: CliMessageTone, value: string): string {\n switch (tone) {\n case \"accent\": return theme.accent(value);\n case \"danger\": return theme.danger(value);\n case \"info\": return theme.info(value);\n case \"muted\": return theme.muted(value);\n case \"subagent\": return theme.subagent(value);\n case \"success\": return theme.success(value);\n case \"warning\": return theme.warning(value);\n default: return theme.plain(value);\n }\n}\n\nfunction renderIndentedLines(lines: readonly string[], indent: string): string[] {\n const [firstLine = \"\", ...rest] = lines;\n return [firstLine, ...rest.map((line) => `${indent}${line}`)];\n}\n\nfunction skipEscSequence(input: { readonly start: number; readonly value: string }): number {\n const nextIndex = input.start + 1;\n const nextCodePoint = input.value.codePointAt(nextIndex);\n if (nextCodePoint == null) return nextIndex;\n if (nextCodePoint === 0x5b) return skipCsiSequence({ start: nextIndex + 1, value: input.value });\n if (isEscStringControlIntroducer(nextCodePoint)) {\n return skipStringControlSequence({ start: nextIndex + 1, value: input.value });\n }\n\n const nextCharacter = String.fromCodePoint(nextCodePoint);\n if (isCharsetDesignationIntroducer(nextCodePoint)) {\n const designationIndex = nextIndex + nextCharacter.length;\n const designationCodePoint = input.value.codePointAt(designationIndex);\n if (designationCodePoint == null) return designationIndex;\n return designationIndex + String.fromCodePoint(designationCodePoint).length;\n }\n return nextIndex + nextCharacter.length;\n}\n\nfunction skipCsiSequence(input: { readonly start: number; readonly value: string }): number {\n let index = input.start;\n while (index < input.value.length) {\n const codePoint = input.value.codePointAt(index);\n if (codePoint == null) break;\n const character = String.fromCodePoint(codePoint);\n index += character.length;\n if (codePoint >= 0x40 && codePoint <= 0x7e) return index;\n }\n return index;\n}\n\nfunction skipStringControlSequence(input: {\n readonly start: number;\n readonly value: string;\n}): number {\n let index = input.start;\n while (index < input.value.length) {\n const codePoint = input.value.codePointAt(index);\n if (codePoint == null) break;\n const character = String.fromCodePoint(codePoint);\n const nextIndex = index + character.length;\n if (codePoint === bellCodePoint || codePoint === stringTerminatorCodePoint) return nextIndex;\n if (codePoint === terminalEscapeCodePoint && input.value.codePointAt(nextIndex) === 0x5c) {\n return nextIndex + 1;\n }\n index = nextIndex;\n }\n return index;\n}\n\nfunction isEscStringControlIntroducer(codePoint: number): boolean {\n return (\n codePoint === 0x50 ||\n codePoint === 0x58 ||\n codePoint === 0x5d ||\n codePoint === 0x5e ||\n codePoint === 0x5f\n );\n}\n\nfunction isC1StringControlCodePoint(codePoint: number): boolean {\n return (\n codePoint === 0x90 ||\n codePoint === 0x98 ||\n codePoint === 0x9d ||\n codePoint === 0x9e ||\n codePoint === 0x9f\n );\n}\n\nfunction isCharsetDesignationIntroducer(codePoint: number): boolean {\n return (\n codePoint === 0x28 ||\n codePoint === 0x29 ||\n codePoint === 0x2a ||\n codePoint === 0x2b ||\n codePoint === 0x2d ||\n codePoint === 0x2e ||\n codePoint === 0x2f\n );\n}\n\nfunction isUnsafeControlCodePoint(codePoint: number): boolean {\n return (\n (codePoint >= 0x00 && codePoint <= 0x08) ||\n (codePoint >= 0x0b && codePoint <= 0x1f) ||\n (codePoint >= 0x7f && codePoint <= 0x9f)\n );\n}\n\nfunction renderOrangeText(input: { color: boolean; text: string }): string {\n if (!input.color) return input.text;\n return `\u001b[38;5;208m${input.text}\u001b[39m`;\n}\n\nexport function createCliTheme(input: { color?: boolean } = {}): CliTheme {\n const enabled = input.color ?? Boolean(process.stdout.isTTY);\n const c = enabled ? chalk : null;\n const wrap = (fn: (text: string) => string): ((text: string) => string) =>\n enabled ? fn : (text) => text;\n\n return {\n accent: wrap((text) => c!.cyan(text)),\n color: enabled,\n danger: wrap((text) => c!.red(text)),\n heading: wrap((text) => c!.bold.cyan(text)),\n info: wrap((text) => c!.blue(text)),\n label: wrap((text) => c!.bold(text)),\n muted: wrap((text) => c!.dim(text)),\n plain: (text) => text,\n subagent: (text) => renderOrangeText({ color: enabled, text }),\n success: wrap((text) => c!.green(text)),\n warning: wrap((text) => c!.yellow(text)),\n };\n}\n\nexport function renderCliBanner(\n theme: CliTheme,\n input: { readonly subtitle?: string; readonly title: string },\n): string {\n const title = sanitizeForTerminal(input.title);\n const lines = [theme.heading(title), theme.muted(\"=\".repeat(title.length))];\n if (input.subtitle) lines.push(theme.muted(sanitizeForTerminal(input.subtitle)));\n return lines.join(\"\\n\");\n}\n\nexport function renderCliSection(\n theme: CliTheme,\n input: { readonly rows: readonly CliRow[]; readonly title: string },\n): string {\n const rows = input.rows.map((row) => ({\n label: sanitizeForTerminal(row.label),\n tone: row.tone,\n value: sanitizeForTerminal(row.value),\n }));\n const labelWidth = rows.reduce((width, row) => Math.max(width, row.label.length), 0);\n const lines = [theme.accent(sanitizeForTerminal(input.title))];\n\n for (const row of rows) {\n const valueLines = renderIndentedLines(\n applyTone(theme, row.tone ?? \"default\", row.value).split(\"\\n\"),\n `${\" \".repeat(labelWidth)} `,\n );\n const [firstLine = \"\", ...rest] = valueLines;\n lines.push(`${theme.label(row.label.padEnd(labelWidth))} ${firstLine}`);\n lines.push(...rest);\n }\n\n return lines.join(\"\\n\");\n}\n\nexport function renderCliTaggedLine(\n theme: CliTheme,\n input: { readonly message: string; readonly tag: string; readonly tone?: CliMessageTone },\n): string {\n const message = sanitizeForTerminal(input.message);\n const prefix = `[${sanitizeForTerminal(input.tag).toUpperCase()}]`;\n const valueLines = renderIndentedLines(\n applyTone(theme, input.tone ?? \"default\", message).split(\"\\n\"),\n `${\" \".repeat(prefix.length)} `,\n );\n const [firstLine = \"\", ...rest] = valueLines;\n return (\n [theme.muted(prefix), firstLine].join(\" \") + (rest.length > 0 ? `\\n${rest.join(\"\\n\")}` : \"\")\n );\n}\n\nexport function renderCliSpeakerLine(\n theme: CliTheme,\n input: { readonly message: string; readonly speaker: string; readonly tone?: CliMessageTone },\n): string {\n const message = sanitizeForTerminal(input.message);\n const prefix = `${sanitizeForTerminal(input.speaker)}>`;\n const valueLines = renderIndentedLines(\n applyTone(theme, input.tone ?? \"default\", message).split(\"\\n\"),\n `${\" \".repeat(prefix.length)} `,\n );\n const [firstLine = \"\", ...rest] = valueLines;\n return (\n [theme.muted(prefix), firstLine].join(\" \") + (rest.length > 0 ? `\\n${rest.join(\"\\n\")}` : \"\")\n );\n}\n"],"mappings":"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","names":[]}
|