@esso0428/pi-subagents 0.15.6 → 0.15.8

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.
Files changed (217) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/agent-history-list.d.ts +1 -0
  3. package/dist/agent-history-list.d.ts.map +1 -0
  4. package/dist/agent-history-list.js +1 -0
  5. package/dist/agent-history-list.js.map +1 -0
  6. package/dist/agent-history.d.ts +1 -0
  7. package/dist/agent-history.d.ts.map +1 -0
  8. package/dist/agent-history.js +1 -0
  9. package/dist/agent-history.js.map +1 -0
  10. package/dist/agent-manager.d.ts +2 -0
  11. package/dist/agent-manager.d.ts.map +1 -0
  12. package/dist/agent-manager.js +71 -0
  13. package/dist/agent-manager.js.map +1 -0
  14. package/dist/agent-runner.d.ts +1 -0
  15. package/dist/agent-runner.d.ts.map +1 -0
  16. package/dist/agent-runner.js +8 -0
  17. package/dist/agent-runner.js.map +1 -0
  18. package/dist/agent-types.d.ts +1 -0
  19. package/dist/agent-types.d.ts.map +1 -0
  20. package/dist/agent-types.js +1 -0
  21. package/dist/agent-types.js.map +1 -0
  22. package/dist/context.d.ts +1 -0
  23. package/dist/context.d.ts.map +1 -0
  24. package/dist/context.js +1 -0
  25. package/dist/context.js.map +1 -0
  26. package/dist/cross-extension-rpc.d.ts +1 -0
  27. package/dist/cross-extension-rpc.d.ts.map +1 -0
  28. package/dist/cross-extension-rpc.js +1 -0
  29. package/dist/cross-extension-rpc.js.map +1 -0
  30. package/dist/custom-agents.d.ts +1 -0
  31. package/dist/custom-agents.d.ts.map +1 -0
  32. package/dist/custom-agents.js +1 -0
  33. package/dist/custom-agents.js.map +1 -0
  34. package/dist/default-agents.d.ts +1 -0
  35. package/dist/default-agents.d.ts.map +1 -0
  36. package/dist/default-agents.js +1 -0
  37. package/dist/default-agents.js.map +1 -0
  38. package/dist/enabled-models.d.ts +1 -0
  39. package/dist/enabled-models.d.ts.map +1 -0
  40. package/dist/enabled-models.js +1 -0
  41. package/dist/enabled-models.js.map +1 -0
  42. package/dist/env.d.ts +1 -0
  43. package/dist/env.d.ts.map +1 -0
  44. package/dist/env.js +1 -0
  45. package/dist/env.js.map +1 -0
  46. package/dist/group-join.d.ts +1 -0
  47. package/dist/group-join.d.ts.map +1 -0
  48. package/dist/group-join.js +1 -0
  49. package/dist/group-join.js.map +1 -0
  50. package/dist/index.d.ts +1 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +37 -10
  53. package/dist/index.js.map +1 -0
  54. package/dist/invocation-config.d.ts +1 -0
  55. package/dist/invocation-config.d.ts.map +1 -0
  56. package/dist/invocation-config.js +1 -0
  57. package/dist/invocation-config.js.map +1 -0
  58. package/dist/memory.d.ts +1 -0
  59. package/dist/memory.d.ts.map +1 -0
  60. package/dist/memory.js +1 -0
  61. package/dist/memory.js.map +1 -0
  62. package/dist/model-resolver.d.ts +1 -0
  63. package/dist/model-resolver.d.ts.map +1 -0
  64. package/dist/model-resolver.js +1 -0
  65. package/dist/model-resolver.js.map +1 -0
  66. package/dist/nico-overrides.d.ts +1 -0
  67. package/dist/nico-overrides.d.ts.map +1 -0
  68. package/dist/nico-overrides.js +1 -0
  69. package/dist/nico-overrides.js.map +1 -0
  70. package/dist/output-file.d.ts +1 -0
  71. package/dist/output-file.d.ts.map +1 -0
  72. package/dist/output-file.js +1 -0
  73. package/dist/output-file.js.map +1 -0
  74. package/dist/prompts.d.ts +1 -0
  75. package/dist/prompts.d.ts.map +1 -0
  76. package/dist/prompts.js +1 -0
  77. package/dist/prompts.js.map +1 -0
  78. package/dist/schedule-store.d.ts +1 -0
  79. package/dist/schedule-store.d.ts.map +1 -0
  80. package/dist/schedule-store.js +1 -0
  81. package/dist/schedule-store.js.map +1 -0
  82. package/dist/schedule.d.ts +1 -0
  83. package/dist/schedule.d.ts.map +1 -0
  84. package/dist/schedule.js +1 -0
  85. package/dist/schedule.js.map +1 -0
  86. package/dist/settings.d.ts +1 -0
  87. package/dist/settings.d.ts.map +1 -0
  88. package/dist/settings.js +1 -0
  89. package/dist/settings.js.map +1 -0
  90. package/dist/skill-loader.d.ts +1 -0
  91. package/dist/skill-loader.d.ts.map +1 -0
  92. package/dist/skill-loader.js +1 -0
  93. package/dist/skill-loader.js.map +1 -0
  94. package/dist/status-note.d.ts +1 -0
  95. package/dist/status-note.d.ts.map +1 -0
  96. package/dist/status-note.js +1 -0
  97. package/dist/status-note.js.map +1 -0
  98. package/dist/types.d.ts +5 -0
  99. package/dist/types.d.ts.map +1 -0
  100. package/dist/types.js +1 -0
  101. package/dist/types.js.map +1 -0
  102. package/dist/ui/agent-widget.d.ts +1 -0
  103. package/dist/ui/agent-widget.d.ts.map +1 -0
  104. package/dist/ui/agent-widget.js +4 -2
  105. package/dist/ui/agent-widget.js.map +1 -0
  106. package/dist/ui/ccstyle/diff/ansi-utils.d.ts +11 -0
  107. package/dist/ui/ccstyle/diff/ansi-utils.d.ts.map +1 -0
  108. package/dist/ui/ccstyle/diff/ansi-utils.js +145 -0
  109. package/dist/ui/ccstyle/diff/ansi-utils.js.map +1 -0
  110. package/dist/ui/ccstyle/diff/diff-presentation.d.ts +12 -0
  111. package/dist/ui/ccstyle/diff/diff-presentation.d.ts.map +1 -0
  112. package/dist/ui/ccstyle/diff/diff-presentation.js +49 -0
  113. package/dist/ui/ccstyle/diff/diff-presentation.js.map +1 -0
  114. package/dist/ui/ccstyle/diff/diff-renderer.d.ts +46 -0
  115. package/dist/ui/ccstyle/diff/diff-renderer.d.ts.map +1 -0
  116. package/dist/ui/ccstyle/diff/diff-renderer.js +2044 -0
  117. package/dist/ui/ccstyle/diff/diff-renderer.js.map +1 -0
  118. package/dist/ui/ccstyle/diff/line-width-safety.d.ts +12 -0
  119. package/dist/ui/ccstyle/diff/line-width-safety.d.ts.map +1 -0
  120. package/dist/ui/ccstyle/diff/line-width-safety.js +59 -0
  121. package/dist/ui/ccstyle/diff/line-width-safety.js.map +1 -0
  122. package/dist/ui/ccstyle/diff/render-utils.d.ts +6 -0
  123. package/dist/ui/ccstyle/diff/render-utils.d.ts.map +1 -0
  124. package/dist/ui/ccstyle/diff/render-utils.js +25 -0
  125. package/dist/ui/ccstyle/diff/render-utils.js.map +1 -0
  126. package/dist/ui/ccstyle/diff/types.d.ts +22 -0
  127. package/dist/ui/ccstyle/diff/types.d.ts.map +1 -0
  128. package/dist/ui/ccstyle/diff/types.js +10 -0
  129. package/dist/ui/ccstyle/diff/types.js.map +1 -0
  130. package/dist/ui/ccstyle/diff/write-display-utils.d.ts +2 -0
  131. package/dist/ui/ccstyle/diff/write-display-utils.d.ts.map +1 -0
  132. package/dist/ui/ccstyle/diff/write-display-utils.js +12 -0
  133. package/dist/ui/ccstyle/diff/write-display-utils.js.map +1 -0
  134. package/dist/ui/ccstyle/tool-renderer.d.ts +17 -0
  135. package/dist/ui/ccstyle/tool-renderer.d.ts.map +1 -0
  136. package/dist/ui/ccstyle/tool-renderer.js +58 -0
  137. package/dist/ui/ccstyle/tool-renderer.js.map +1 -0
  138. package/dist/ui/ccstyle/tool-result.d.ts +24 -0
  139. package/dist/ui/ccstyle/tool-result.d.ts.map +1 -0
  140. package/dist/ui/ccstyle/tool-result.js +193 -0
  141. package/dist/ui/ccstyle/tool-result.js.map +1 -0
  142. package/dist/ui/conversation-blocks.d.ts +28 -0
  143. package/dist/ui/conversation-blocks.d.ts.map +1 -0
  144. package/dist/ui/conversation-blocks.js +119 -27
  145. package/dist/ui/conversation-blocks.js.map +1 -0
  146. package/dist/ui/conversation-nvim.d.ts +1 -0
  147. package/dist/ui/conversation-nvim.d.ts.map +1 -0
  148. package/dist/ui/conversation-nvim.js +1 -0
  149. package/dist/ui/conversation-nvim.js.map +1 -0
  150. package/dist/ui/conversation-role.d.ts +13 -0
  151. package/dist/ui/conversation-role.d.ts.map +1 -0
  152. package/dist/ui/conversation-role.js +39 -0
  153. package/dist/ui/conversation-role.js.map +1 -0
  154. package/dist/ui/conversation-search.d.ts +1 -0
  155. package/dist/ui/conversation-search.d.ts.map +1 -0
  156. package/dist/ui/conversation-search.js +1 -0
  157. package/dist/ui/conversation-search.js.map +1 -0
  158. package/dist/ui/conversation-timeline.d.ts +62 -0
  159. package/dist/ui/conversation-timeline.d.ts.map +1 -0
  160. package/dist/ui/conversation-timeline.js +266 -0
  161. package/dist/ui/conversation-timeline.js.map +1 -0
  162. package/dist/ui/conversation-viewer.d.ts +7 -1
  163. package/dist/ui/conversation-viewer.d.ts.map +1 -0
  164. package/dist/ui/conversation-viewer.js +96 -54
  165. package/dist/ui/conversation-viewer.js.map +1 -0
  166. package/dist/ui/fleet-list.d.ts +1 -0
  167. package/dist/ui/fleet-list.d.ts.map +1 -0
  168. package/dist/ui/fleet-list.js +1 -0
  169. package/dist/ui/fleet-list.js.map +1 -0
  170. package/dist/ui/schedule-menu.d.ts +1 -0
  171. package/dist/ui/schedule-menu.d.ts.map +1 -0
  172. package/dist/ui/schedule-menu.js +1 -0
  173. package/dist/ui/schedule-menu.js.map +1 -0
  174. package/dist/ui/viewer-keys.d.ts +1 -0
  175. package/dist/ui/viewer-keys.d.ts.map +1 -0
  176. package/dist/ui/viewer-keys.js +1 -0
  177. package/dist/ui/viewer-keys.js.map +1 -0
  178. package/dist/usage.d.ts +1 -0
  179. package/dist/usage.d.ts.map +1 -0
  180. package/dist/usage.js +1 -0
  181. package/dist/usage.js.map +1 -0
  182. package/dist/worktree.d.ts +1 -0
  183. package/dist/worktree.d.ts.map +1 -0
  184. package/dist/worktree.js +1 -0
  185. package/dist/worktree.js.map +1 -0
  186. package/dist/write-execution.d.ts +42 -0
  187. package/dist/write-execution.d.ts.map +1 -0
  188. package/dist/write-execution.js +138 -0
  189. package/dist/write-execution.js.map +1 -0
  190. package/package.json +1 -1
  191. package/src/agent-manager.ts +61 -0
  192. package/src/agent-runner.ts +7 -0
  193. package/src/index.ts +35 -11
  194. package/src/types.ts +4 -0
  195. package/src/ui/agent-widget.ts +2 -1
  196. package/src/ui/ccstyle/ATTRIBUTION.md +37 -0
  197. package/src/ui/ccstyle/diff/ansi-utils.ts +168 -0
  198. package/src/ui/ccstyle/diff/diff-presentation.ts +70 -0
  199. package/src/ui/ccstyle/diff/diff-renderer.ts +3148 -0
  200. package/src/ui/ccstyle/diff/line-width-safety.ts +92 -0
  201. package/src/ui/ccstyle/diff/render-utils.ts +32 -0
  202. package/src/ui/ccstyle/diff/types.ts +33 -0
  203. package/src/ui/ccstyle/diff/write-display-utils.ts +12 -0
  204. package/src/ui/ccstyle/tool-renderer.ts +71 -0
  205. package/src/ui/ccstyle/tool-result.ts +238 -0
  206. package/src/ui/conversation-blocks.ts +160 -26
  207. package/src/ui/conversation-role.ts +45 -0
  208. package/src/ui/conversation-timeline.ts +318 -0
  209. package/src/ui/conversation-viewer.ts +91 -54
  210. package/src/write-execution.ts +180 -0
  211. package/test/output-file-history.test.ts +50 -0
  212. package/test/ui/conversation-blocks.test.ts +31 -0
  213. package/test/ui/conversation-diff.test.ts +91 -0
  214. package/test/ui/conversation-viewer.test.ts +70 -0
  215. package/test/write-execution.test.ts +83 -0
  216. package/tsconfig.json +16 -0
  217. package/vitest.temp.config.mts +6 -0
@@ -0,0 +1,193 @@
1
+ import { truncateToWidth, wrapTextWithAnsi } from "@earendil-works/pi-tui";
2
+ import { renderEditDiffResult, renderWriteDiffResult, } from "./diff/diff-renderer.js";
3
+ import { DEFAULT_TOOL_DISPLAY_CONFIG } from "./diff/types.js";
4
+ import { sanitizeToolResultText, showMoreHintText } from "./diff/render-utils.js";
5
+ export function toolViewportWidth(width) {
6
+ return Math.max(1, Math.floor(Number.isFinite(width) ? width : 1));
7
+ }
8
+ export function oneLine(value, max = 4096) {
9
+ const text = sanitizeToolResultText(String(value ?? "")).replace(/\s+/g, " ").trim();
10
+ return text.length > max ? `${text.slice(0, Math.max(0, max - 1))}…` : text;
11
+ }
12
+ function rawTextFromResult(result) {
13
+ return Array.isArray(result?.content)
14
+ ? result.content
15
+ .filter((item) => item?.type === "text")
16
+ .map((item) => String(item.text ?? ""))
17
+ .join("\n")
18
+ : "";
19
+ }
20
+ export function textFromResult(result, expanded = false) {
21
+ const content = sanitizeToolResultText(rawTextFromResult(result), 16_384);
22
+ const detail = result?.details;
23
+ if (!expanded || detail === undefined)
24
+ return content;
25
+ const details = sanitizeToolResultText(typeof detail === "string" ? detail : safeJson(detail), 16_384);
26
+ if (!details || details === content)
27
+ return content;
28
+ return content ? `${content}\nDetails:\n${details}` : details;
29
+ }
30
+ function safeJson(value) {
31
+ try {
32
+ return JSON.stringify(value, null, 2) ?? "";
33
+ }
34
+ catch {
35
+ return String(value);
36
+ }
37
+ }
38
+ export function outputLineCount(result) {
39
+ const text = rawTextFromResult(result).replace(/\r\n?/g, "\n").replace(/\n+$/, "");
40
+ return text ? text.split("\n").length : 0;
41
+ }
42
+ export function countLines(text) {
43
+ return text.trim() ? text.trim().split("\n").length : 0;
44
+ }
45
+ export function formatToolInputArgs(args, maxChars = 8_000) {
46
+ if (args === undefined || args === null)
47
+ return "";
48
+ const rendered = typeof args === "object" ? safeJson(args) : sanitizeToolResultText(String(args));
49
+ const bounded = sanitizeToolResultText(rendered, maxChars);
50
+ return rendered.length > maxChars ? `${bounded}…` : bounded;
51
+ }
52
+ function hasExpandableDetail(text, args) {
53
+ return countLines(text) > 1 || formatToolInputArgs(args).trim().length > 0;
54
+ }
55
+ /** Small Component used for the viewer-local Input/Output card. */
56
+ class ExpandedToolIoView {
57
+ input;
58
+ output;
59
+ isError;
60
+ constructor(input, output, isError) {
61
+ this.input = input;
62
+ this.output = output || "Done";
63
+ this.isError = isError;
64
+ }
65
+ render(width) {
66
+ const safeWidth = toolViewportWidth(width);
67
+ const rows = [];
68
+ const addSection = (title, body, last) => {
69
+ rows.push(truncateToWidth(`${last ? "└" : "├"} ${title}`, safeWidth, ""));
70
+ const source = body.replace(/\t/g, " ").replace(/\n+$/, "") || "(empty)";
71
+ for (const line of source.split("\n")) {
72
+ for (const wrapped of wrapTextWithAnsi(line, Math.max(1, safeWidth - 3))) {
73
+ const prefix = last ? " " : "│ ";
74
+ rows.push(truncateToWidth(`${prefix}${wrapped}`, safeWidth, ""));
75
+ }
76
+ }
77
+ };
78
+ if (this.input.trim()) {
79
+ addSection("Input", this.input, false);
80
+ addSection("Output", this.output, true);
81
+ }
82
+ else {
83
+ addSection("Output", this.output, true);
84
+ }
85
+ return rows.map((row) => (this.isError ? row : row));
86
+ }
87
+ invalidate() { }
88
+ }
89
+ function unavailableComponent(reason, theme) {
90
+ return {
91
+ render(width) {
92
+ return [truncateToWidth(theme.fg("warning", `↳ diff unavailable: ${oneLine(reason, 512)}`), toolViewportWidth(width), "")];
93
+ },
94
+ invalidate() { },
95
+ };
96
+ }
97
+ function resultText(result) {
98
+ return rawTextFromResult(result);
99
+ }
100
+ function persistedFromDetails(details) {
101
+ if (!details || typeof details !== "object")
102
+ return undefined;
103
+ const persisted = {};
104
+ if (typeof details.diff === "string")
105
+ persisted.diff = details.diff;
106
+ if (typeof details.patch === "string")
107
+ persisted.patch = details.patch;
108
+ if (typeof details.diffUnavailableReason === "string") {
109
+ persisted.diffUnavailableReason = details.diffUnavailableReason;
110
+ }
111
+ return Object.keys(persisted).length ? persisted : undefined;
112
+ }
113
+ function viewerConfig(context) {
114
+ const candidate = context?.diffConfig;
115
+ if (!candidate || typeof candidate !== "object")
116
+ return DEFAULT_TOOL_DISPLAY_CONFIG;
117
+ return {
118
+ ...DEFAULT_TOOL_DISPLAY_CONFIG,
119
+ ...candidate,
120
+ };
121
+ }
122
+ /**
123
+ * Rich edit/write rendering for the conversation viewer. Durable details are
124
+ * passed through before any live/ephemeral context so history is deterministic.
125
+ */
126
+ export function renderRichToolResult(toolName, result, options, theme, context) {
127
+ if (options?.isPartial || options?.isError || context?.isError)
128
+ return undefined;
129
+ const expanded = options?.expanded === true || context?.expanded === true;
130
+ const args = context?.args ?? options?.args;
131
+ const filePath = args?.file_path ?? args?.path;
132
+ const details = result?.details;
133
+ const persistedDiff = context?.persistedDiff ?? persistedFromDetails(details);
134
+ if (toolName === "edit") {
135
+ return renderEditDiffResult(details, { expanded, filePath, persistedDiff, isHovered: options?.isHovered, invalidate: context?.invalidate }, viewerConfig(context), theme, resultText(result));
136
+ }
137
+ if (toolName !== "write")
138
+ return undefined;
139
+ if (persistedDiff?.diffUnavailableReason && !persistedDiff.diff && !persistedDiff.patch) {
140
+ return unavailableComponent(persistedDiff.diffUnavailableReason, theme);
141
+ }
142
+ const content = typeof args?.content === "string" ? args.content : undefined;
143
+ if (!content && !persistedDiff?.diff && !persistedDiff?.patch) {
144
+ return unavailableComponent("execution metadata is unavailable", theme);
145
+ }
146
+ return renderWriteDiffResult(content, {
147
+ expanded,
148
+ filePath,
149
+ persistedDiff,
150
+ previousContent: context?.previousContent,
151
+ fileExistedBeforeWrite: context?.fileExistedBeforeWrite,
152
+ isHovered: options?.isHovered,
153
+ invalidate: context?.invalidate,
154
+ }, viewerConfig(context), theme, resultText(result));
155
+ }
156
+ function renderCallSummary(toolName, args, theme) {
157
+ const title = toolName.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ");
158
+ const value = args?.path ?? args?.file_path ?? args?.command ?? args?.query ?? args?.name;
159
+ const summary = value === undefined ? title : `${title} ${oneLine(value)}`;
160
+ return theme.fg("toolTitle", summary);
161
+ }
162
+ function settledIcon(context) {
163
+ if (context?.isError)
164
+ return "✗";
165
+ if (context?.isPartial || context?.executionStarted)
166
+ return "●";
167
+ return "✓";
168
+ }
169
+ function renderFallbackResult(result, options, theme, context) {
170
+ const error = options?.isError || context?.isError;
171
+ const expanded = options?.expanded === true || context?.expanded === true;
172
+ const text = textFromResult(result, expanded);
173
+ if (expanded && (text.trim() || formatToolInputArgs(context?.args).trim())) {
174
+ return new ExpandedToolIoView(formatToolInputArgs(context?.args), text, Boolean(error));
175
+ }
176
+ const lines = text ? text.split("\n") : [];
177
+ const count = lines.length;
178
+ const summary = error ? oneLine(text) || "Failed" : count ? `${count} ${count === 1 ? "line" : "lines"} returned` : "Done";
179
+ const expandable = !expanded && hasExpandableDetail(text, context?.args);
180
+ return {
181
+ render(width) {
182
+ const hint = expandable ? ` • ${showMoreHintText()}` : "";
183
+ return [truncateToWidth(theme.fg(error ? "error" : "muted", ` ↳ ${summary}${hint}`), toolViewportWidth(width), "")];
184
+ },
185
+ invalidate() { },
186
+ };
187
+ }
188
+ export function createViewerCcstyleResult(toolName, result, options, theme, context) {
189
+ return (renderRichToolResult(toolName, result, options, theme, context) ??
190
+ renderFallbackResult(result, options, theme, context));
191
+ }
192
+ export { ExpandedToolIoView };
193
+ //# sourceMappingURL=tool-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../../src/ui/ccstyle/tool-result.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,14 @@
1
1
  import type { AgentSession } from "@earendil-works/pi-coding-agent";
2
2
  export type ConversationBlockKind = "text" | "tool" | "meta";
3
3
  export type ConversationBlockRole = "user" | "assistant" | "tool" | "custom" | "meta";
4
+ /** The durable result snapshot attached to a normalized tool block. */
5
+ export interface ConversationToolResultSnapshot {
6
+ toolCallId?: string;
7
+ toolName?: string;
8
+ content?: unknown;
9
+ details?: unknown;
10
+ isError?: boolean;
11
+ }
4
12
  export interface ConversationBlock {
5
13
  id: string;
6
14
  kind: ConversationBlockKind;
@@ -10,9 +18,29 @@ export interface ConversationBlock {
10
18
  copyText: string;
11
19
  fullText: string;
12
20
  toolLine?: string;
21
+ /** Stable call id, including a synthetic id when the provider omitted one. */
22
+ toolCallId?: string;
23
+ toolName?: string;
24
+ /** Original tool arguments are retained for rich input rendering. */
25
+ toolArguments?: unknown;
26
+ /** Compatibility-facing short alias used by the timeline renderer. */
27
+ args?: unknown;
28
+ /** Result details/content are retained for rich output and durable diff rendering. */
29
+ toolResult?: ConversationToolResultSnapshot;
30
+ /** Compatibility-facing short alias used by the timeline renderer. */
31
+ result?: ConversationToolResultSnapshot;
32
+ toolStatus?: "pending" | "success" | "error";
13
33
  }
14
34
  export interface ConversationFormatOptions {
15
35
  maxEntryChars?: number;
16
36
  maxToolResultChars?: number;
17
37
  }
38
+ /**
39
+ * Convert provider messages into stable, render-oriented blocks.
40
+ *
41
+ * Tool results are attached to the original call when possible. This keeps the
42
+ * block in call/source order while preserving the complete result snapshot for
43
+ * rich rendering. Results that cannot be matched remain visible as orphan cards.
44
+ */
18
45
  export declare function formatConversationMessages(messages: AgentSession["messages"], options?: ConversationFormatOptions): ConversationBlock[];
46
+ //# sourceMappingURL=conversation-blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-blocks.d.ts","sourceRoot":"","sources":["../../src/ui/conversation-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtF,uEAAuE;AACvE,MAAM,WAAW,8BAA8B;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sFAAsF;IACtF,UAAU,CAAC,EAAE,8BAA8B,CAAC;IAC5C,sEAAsE;IACtE,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAsPD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAClC,OAAO,CAAC,EAAE,yBAAyB,GAClC,iBAAiB,EAAE,CA2GrB"}
@@ -17,7 +17,7 @@ function bound(value, limit) {
17
17
  return text.slice(0, limit - TRUNCATION_NOTICE.length) + TRUNCATION_NOTICE;
18
18
  }
19
19
  function asString(value) {
20
- return typeof value === "string" ? value : undefined;
20
+ return typeof value === "string" && value.length > 0 ? value : undefined;
21
21
  }
22
22
  /** Extract displayable text without leaking provider-specific or unknown parts. */
23
23
  function contentText(content) {
@@ -71,6 +71,18 @@ function blockId(messageIndex, emitted, toolIndex) {
71
71
  return `message-${messageIndex}`;
72
72
  return `message-${messageIndex}-tool-${toolIndex ?? emitted}`;
73
73
  }
74
+ function uniqueBlockId(preferred, used) {
75
+ if (!used.has(preferred)) {
76
+ used.add(preferred);
77
+ return preferred;
78
+ }
79
+ let suffix = 2;
80
+ while (used.has(`${preferred}-${suffix}`))
81
+ suffix++;
82
+ const id = `${preferred}-${suffix}`;
83
+ used.add(id);
84
+ return id;
85
+ }
74
86
  function textBlock(id, role, markdown) {
75
87
  return {
76
88
  id,
@@ -82,31 +94,58 @@ function textBlock(id, role, markdown) {
82
94
  fullText: markdown,
83
95
  };
84
96
  }
85
- function toolCallBlock(id, name, summary) {
97
+ function toolCallBlock(id, callId, name, call, summary) {
86
98
  const toolLine = `· ${name} → ${summary || "(no details)"}`;
87
99
  return {
88
100
  id,
89
101
  kind: "tool",
90
- role: "assistant",
91
- header: "Assistant tool call",
102
+ role: "tool",
103
+ header: name,
92
104
  markdown: "",
93
105
  copyText: toolLine,
94
106
  fullText: toolLine,
95
107
  toolLine,
108
+ toolCallId: callId,
109
+ toolName: name,
110
+ toolArguments: call.arguments ?? call.input,
111
+ args: call.arguments ?? call.input,
112
+ toolStatus: "pending",
96
113
  };
97
114
  }
98
- function toolResultBlock(id, message, maxChars) {
99
- const name = asString(message.toolName) ?? "tool";
100
- const output = contentText(message.content);
101
- const normalized = output.replace(/\r\n?/g, "\n");
102
- if (!normalized.trim() && maxChars === 0)
103
- return undefined;
104
- const success = message.isError === true ? "✗" : "✓";
115
+ function resultSnapshot(message) {
116
+ return {
117
+ toolCallId: asString(message.toolCallId) ?? asString(message.id),
118
+ toolName: asString(message.toolName) ?? asString(message.name),
119
+ content: message.content,
120
+ details: message.details,
121
+ isError: message.isError === true,
122
+ };
123
+ }
124
+ function applyToolResult(block, result, maxChars) {
125
+ const name = result.toolName ?? block.toolName ?? "tool";
126
+ const normalized = contentText(result.content).replace(/\r\n?/g, "\n");
127
+ const success = result.isError ? "✗" : "✓";
105
128
  const lineCount = normalized.length === 0 ? 0 : normalized.split("\n").length;
106
129
  const charCount = normalized.length;
107
130
  const summary = firstNonEmptyLine(normalized);
131
+ block.toolResult = result;
132
+ block.result = result;
133
+ block.toolStatus = result.isError ? "error" : "success";
134
+ block.toolName = name;
135
+ block.header = name;
136
+ block.copyText = bound(`${name} ${success}\n${normalized}`, maxChars);
137
+ block.fullText = block.copyText;
138
+ block.toolLine = `· ${name} ${success} ${summary} ${lineCount}L/${charCount}c`;
139
+ }
140
+ function orphanToolResultBlock(id, result, maxChars) {
141
+ const name = result.toolName ?? "tool";
142
+ const output = contentText(result.content).replace(/\r\n?/g, "\n");
143
+ const success = result.isError ? "✗" : "✓";
144
+ const lineCount = output.length === 0 ? 0 : output.split("\n").length;
145
+ const charCount = output.length;
146
+ const summary = firstNonEmptyLine(output);
108
147
  const toolLine = `· ${name} ${success} ${summary} ${lineCount}L/${charCount}c`;
109
- const fullText = bound(`${name} ${success}\n${normalized}`, maxChars);
148
+ const fullText = bound(`${name} ${success}\n${output}`, maxChars);
110
149
  return {
111
150
  id,
112
151
  kind: "tool",
@@ -116,14 +155,17 @@ function toolResultBlock(id, message, maxChars) {
116
155
  copyText: fullText,
117
156
  fullText,
118
157
  toolLine,
158
+ toolCallId: result.toolCallId,
159
+ toolName: name,
160
+ toolResult: result,
161
+ result,
162
+ toolStatus: result.isError ? "error" : "success",
119
163
  };
120
164
  }
121
165
  function bashBlock(id, message, maxChars) {
122
166
  const command = asString(message.command) ?? "";
123
167
  const output = asString(message.output) ?? contentText(message.content);
124
168
  const body = command ? `$ ${command}${output ? `\n${output}` : ""}` : output;
125
- if (!body.trim() && maxChars === 0)
126
- return undefined;
127
169
  const toolLine = `· bash → ${command || "(no command)"}`;
128
170
  const fullText = bound(body, maxChars);
129
171
  return {
@@ -135,6 +177,7 @@ function bashBlock(id, message, maxChars) {
135
177
  copyText: fullText,
136
178
  fullText,
137
179
  toolLine,
180
+ toolName: "bash",
138
181
  };
139
182
  }
140
183
  function metaBlock(id, header, value, maxChars) {
@@ -152,63 +195,112 @@ function metaBlock(id, header, value, maxChars) {
152
195
  fullText: markdown,
153
196
  };
154
197
  }
198
+ /**
199
+ * Convert provider messages into stable, render-oriented blocks.
200
+ *
201
+ * Tool results are attached to the original call when possible. This keeps the
202
+ * block in call/source order while preserving the complete result snapshot for
203
+ * rich rendering. Results that cannot be matched remain visible as orphan cards.
204
+ */
155
205
  export function formatConversationMessages(messages, options) {
156
206
  const maxEntryChars = charLimit(options?.maxEntryChars, DEFAULT_MAX_CHARS);
157
207
  const maxToolResultChars = charLimit(options?.maxToolResultChars, DEFAULT_MAX_CHARS);
158
208
  const blocks = [];
209
+ const usedBlockIds = new Set();
210
+ const callsById = new Map();
211
+ const callsByName = new Map();
212
+ const registerCall = (name, block) => {
213
+ callsById.set(block.toolCallId, block);
214
+ const nameKey = name.toLowerCase();
215
+ const candidates = callsByName.get(nameKey) ?? [];
216
+ candidates.push(block);
217
+ callsByName.set(nameKey, candidates);
218
+ };
219
+ const unregisterCall = (block) => {
220
+ if (block.toolCallId)
221
+ callsById.delete(block.toolCallId);
222
+ const nameKey = (block.toolName ?? "tool").toLowerCase();
223
+ const candidates = callsByName.get(nameKey);
224
+ if (!candidates)
225
+ return;
226
+ const index = candidates.indexOf(block);
227
+ if (index >= 0)
228
+ candidates.splice(index, 1);
229
+ if (candidates.length === 0)
230
+ callsByName.delete(nameKey);
231
+ };
159
232
  for (let messageIndex = 0; messageIndex < messages.length; messageIndex++) {
160
233
  const message = messages[messageIndex];
161
234
  const role = message?.role;
162
235
  let emitted = 0;
163
236
  if (role === "user") {
164
237
  const text = bound(contentText(message.content), maxEntryChars);
165
- if (text.trim())
166
- blocks.push(textBlock(blockId(messageIndex, emitted++), "user", text));
238
+ if (text.trim()) {
239
+ blocks.push(textBlock(uniqueBlockId(blockId(messageIndex, emitted), usedBlockIds), "user", text));
240
+ }
167
241
  continue;
168
242
  }
169
243
  if (role === "assistant") {
170
244
  const parts = Array.isArray(message.content) ? message.content : [];
171
245
  const text = bound(contentText(parts), maxEntryChars);
172
- if (text.trim())
173
- blocks.push(textBlock(blockId(messageIndex, emitted++), "assistant", text));
246
+ if (text.trim()) {
247
+ blocks.push(textBlock(uniqueBlockId(blockId(messageIndex, emitted++), usedBlockIds), "assistant", text));
248
+ }
174
249
  let toolIndex = 0;
175
250
  for (const part of parts) {
176
251
  if (!part || typeof part !== "object" || part.type !== "toolCall")
177
252
  continue;
178
253
  const call = part;
179
254
  const name = asString(call.name) ?? asString(call.toolName) ?? "unknown";
180
- blocks.push(toolCallBlock(blockId(messageIndex, emitted++, toolIndex), name, toolSummary(name, call)));
255
+ const preferredId = asString(call.id) ?? asString(call.toolCallId)
256
+ ?? `message-${messageIndex}-tool-${toolIndex}`;
257
+ const callId = callsById.has(preferredId)
258
+ ? uniqueBlockId(preferredId, new Set(callsById.keys()))
259
+ : preferredId;
260
+ const block = toolCallBlock(uniqueBlockId(blockId(messageIndex, emitted++, toolIndex), usedBlockIds), callId, name, call, toolSummary(name, call));
261
+ blocks.push(block);
262
+ registerCall(name, block);
181
263
  toolIndex++;
182
264
  }
183
265
  continue;
184
266
  }
185
267
  if (role === "toolResult") {
186
- const block = toolResultBlock(blockId(messageIndex, emitted), message, maxToolResultChars);
187
- if (block)
188
- blocks.push(block);
268
+ const result = resultSnapshot(message);
269
+ const direct = result.toolCallId ? callsById.get(result.toolCallId) : undefined;
270
+ let match = direct;
271
+ if (!match && result.toolName) {
272
+ match = callsByName.get(result.toolName.toLowerCase())?.[0];
273
+ }
274
+ if (match) {
275
+ applyToolResult(match, result, maxToolResultChars);
276
+ unregisterCall(match);
277
+ }
278
+ else {
279
+ const preferred = blockId(messageIndex, emitted);
280
+ blocks.push(orphanToolResultBlock(uniqueBlockId(preferred, usedBlockIds), result, maxToolResultChars));
281
+ }
189
282
  continue;
190
283
  }
191
284
  if (role === "bashExecution") {
192
- const block = bashBlock(blockId(messageIndex, emitted), message, maxToolResultChars);
193
- if (block)
194
- blocks.push(block);
285
+ blocks.push(bashBlock(uniqueBlockId(blockId(messageIndex, emitted), usedBlockIds), message, maxToolResultChars));
195
286
  continue;
196
287
  }
197
288
  if (role === "custom") {
198
289
  if (message.display === false)
199
290
  continue;
200
291
  const header = asString(message.customType) || "Custom";
201
- const block = metaBlock(blockId(messageIndex, emitted), header, message.content, maxEntryChars);
292
+ const block = metaBlock(uniqueBlockId(blockId(messageIndex, emitted), usedBlockIds), header, message.content, maxEntryChars);
202
293
  if (block)
203
294
  blocks.push({ ...block, role: "custom" });
204
295
  continue;
205
296
  }
206
297
  if (role === "compactionSummary" || role === "branchSummary" || role === "summary") {
207
298
  const header = role === "summary" ? "Summary" : role === "compactionSummary" ? "Compaction summary" : "Branch summary";
208
- const block = metaBlock(blockId(messageIndex, emitted), header, message.summary, maxEntryChars);
299
+ const block = metaBlock(uniqueBlockId(blockId(messageIndex, emitted), usedBlockIds), header, message.summary, maxEntryChars);
209
300
  if (block)
210
301
  blocks.push(block);
211
302
  }
212
303
  }
213
304
  return blocks;
214
305
  }
306
+ //# sourceMappingURL=conversation-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-blocks.js","sourceRoot":"","sources":["../../src/ui/conversation-blocks.ts"],"names":[],"mappings":"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"}
@@ -5,3 +5,4 @@ import type { ConversationBlock } from "./conversation-blocks.js";
5
5
  export declare function viewConversationBlockInNvim(tui: TUI, ctx: ExtensionContext, block: ConversationBlock): Promise<void>;
6
6
  /** Edit a live assistant block and send the saved text as a new user message. */
7
7
  export declare function editLiveAssistantBlockInNvim(pi: ExtensionAPI, tui: TUI, ctx: ExtensionContext, block: ConversationBlock): Promise<boolean>;
8
+ //# sourceMappingURL=conversation-nvim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-nvim.d.ts","sourceRoot":"","sources":["../../src/ui/conversation-nvim.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA6ClE,kFAAkF;AAClF,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,iFAAiF;AACjF,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,OAAO,CAAC,CA0ClB"}
@@ -114,3 +114,4 @@ export async function editLiveAssistantBlockInNvim(pi, tui, ctx, block) {
114
114
  }
115
115
  }
116
116
  }
117
+ //# sourceMappingURL=conversation-nvim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-nvim.js","sourceRoot":"","sources":["../../src/ui/conversation-nvim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Component } from "@earendil-works/pi-tui";
2
+ import type { ConversationBlock } from "./conversation-blocks.js";
3
+ import type { Theme } from "./agent-widget.js";
4
+ export type ConversationRoleTheme = Pick<Theme, "fg">;
5
+ /**
6
+ * Render a semantic role label without coloring the whole message body.
7
+ * These names intentionally mirror the labels used by peek-style viewers.
8
+ */
9
+ export declare function conversationRoleLabel(block: ConversationBlock): string;
10
+ export declare function renderConversationRoleHeader(block: ConversationBlock, theme: ConversationRoleTheme): string;
11
+ /** Adapter useful to callers that need a Component-shaped role row. */
12
+ export declare function conversationRoleComponent(block: ConversationBlock, theme: ConversationRoleTheme): Component;
13
+ //# sourceMappingURL=conversation-role.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-role.d.ts","sourceRoot":"","sources":["../../src/ui/conversation-role.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAMtE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAeR;AAED,uEAAuE;AACvE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,qBAAqB,GAAG,SAAS,CAK3G"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Render a semantic role label without coloring the whole message body.
3
+ * These names intentionally mirror the labels used by peek-style viewers.
4
+ */
5
+ export function conversationRoleLabel(block) {
6
+ if (block.kind === "tool")
7
+ return (block.toolName || "TOOL").toUpperCase();
8
+ if (block.role === "user")
9
+ return "USER";
10
+ if (block.role === "assistant")
11
+ return "ASSISTANT";
12
+ if (block.role === "custom")
13
+ return block.header || "CUSTOM";
14
+ return block.header || "META";
15
+ }
16
+ export function renderConversationRoleHeader(block, theme) {
17
+ const label = conversationRoleLabel(block);
18
+ const color = block.kind === "tool"
19
+ ? "toolTitle"
20
+ : block.role === "user"
21
+ ? "userMessageText"
22
+ : block.role === "assistant"
23
+ ? "accent"
24
+ : block.role === "custom"
25
+ ? "customMessageLabel"
26
+ : "muted";
27
+ const detail = block.kind === "tool" && block.toolCallId
28
+ ? theme.fg("dim", ` · ${block.toolCallId}`)
29
+ : "";
30
+ return `${theme.fg(color, label)}${detail}`;
31
+ }
32
+ /** Adapter useful to callers that need a Component-shaped role row. */
33
+ export function conversationRoleComponent(block, theme) {
34
+ return {
35
+ render: () => [` ${renderConversationRoleHeader(block, theme)}`],
36
+ invalidate() { },
37
+ };
38
+ }
39
+ //# sourceMappingURL=conversation-role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-role.js","sourceRoot":"","sources":["../../src/ui/conversation-role.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IACnD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC7D,OAAO,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAAwB,EACxB,KAA4B;IAE5B,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM;QACjC,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;YACrB,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW;gBAC1B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;oBACvB,CAAC,CAAC,oBAAoB;oBACtB,CAAC,CAAC,OAAO,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU;QACtD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3C,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,yBAAyB,CAAC,KAAwB,EAAE,KAA4B;IAC9F,OAAO;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,4BAA4B,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QAChE,UAAU,KAAI,CAAC;KAChB,CAAC;AACJ,CAAC"}
@@ -36,3 +36,4 @@ export declare function nearestConversationMatchAfter(matches: ConversationMatch
36
36
  /** Find the last match at or before a line, wrapping to the last match. */
37
37
  export declare function nearestConversationMatchBefore(matches: ConversationMatch[], lineIdx: number): number;
38
38
  export {};
39
+ //# sourceMappingURL=conversation-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-search.d.ts","sourceRoot":"","sources":["../../src/ui/conversation-search.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,KAAK,cAAc,GAAG,iBAAiB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAMhE;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2B9C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,gBAAgB,EAAE,EACzB,KAAK,EAAE,MAAM,GACZ,iBAAiB,EAAE,CAqBrB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,MAAM,CAsCR;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,iBAAiB,EAAE,EAC5B,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAED,2EAA2E;AAC3E,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,iBAAiB,EAAE,EAC5B,OAAO,EAAE,MAAM,GACd,MAAM,CAMR"}