@sagmans/dsh-tui 0.6.0 → 0.8.0
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/.agents/skills/dsh-tui-dogfood/SKILL.md +83 -0
- package/.agents/skills/dsh-tui-dogfood/references/home-state.md +78 -0
- package/.agents/skills/dsh-tui-dogfood/scripts/clone-links.mjs +133 -0
- package/.agents/skills/dsh-tui-dogfood/scripts/run-plugin-from-worktree.sh +417 -0
- package/.agents/skills/dsh-tui-update-models/SKILL.md +199 -0
- package/.agents/skills/dsh-tui-update-models/references/model-wiring.md +292 -0
- package/.agents/skills/dsh-tui-update-models/scripts/dump-model-catalog.mjs +314 -0
- package/README.md +154 -27
- package/lib/agent/present.d.ts.map +1 -1
- package/lib/agent/present.js +2 -1
- package/lib/agent/present.js.map +1 -1
- package/lib/cards/composition.d.ts +68 -0
- package/lib/cards/composition.d.ts.map +1 -0
- package/lib/cards/composition.js +117 -0
- package/lib/cards/composition.js.map +1 -0
- package/lib/cards/presenter.d.ts +23 -0
- package/lib/cards/presenter.d.ts.map +1 -0
- package/lib/cards/presenter.js +394 -0
- package/lib/cards/presenter.js.map +1 -0
- package/lib/cards/preview.d.ts +42 -0
- package/lib/cards/preview.d.ts.map +1 -0
- package/lib/cards/preview.js +51 -0
- package/lib/cards/preview.js.map +1 -0
- package/lib/cards.d.ts +12 -120
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +4 -556
- package/lib/cards.js.map +1 -1
- package/lib/compat/section.d.ts +29 -0
- package/lib/compat/section.d.ts.map +1 -0
- package/lib/compat/section.js +82 -0
- package/lib/compat/section.js.map +1 -0
- package/lib/config.d.ts +27 -2
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +61 -1
- package/lib/config.js.map +1 -1
- package/lib/contracts.d.ts +28 -0
- package/lib/contracts.d.ts.map +1 -1
- package/lib/fold-cursor.d.ts +8 -0
- package/lib/fold-cursor.d.ts.map +1 -1
- package/lib/fold-cursor.js +18 -0
- package/lib/fold-cursor.js.map +1 -1
- package/lib/gates/question-card.d.ts +77 -0
- package/lib/gates/question-card.d.ts.map +1 -0
- package/lib/gates/question-card.js +113 -0
- package/lib/gates/question-card.js.map +1 -0
- package/lib/gates/questions.d.ts +127 -0
- package/lib/gates/questions.d.ts.map +1 -0
- package/lib/gates/questions.js +418 -0
- package/lib/gates/questions.js.map +1 -0
- package/lib/gates.d.ts +1 -113
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +1 -484
- package/lib/gates.js.map +1 -1
- package/lib/herdr/client.d.ts +8 -0
- package/lib/herdr/client.d.ts.map +1 -1
- package/lib/herdr/client.js +13 -1
- package/lib/herdr/client.js.map +1 -1
- package/lib/herdr/constants.d.ts +18 -0
- package/lib/herdr/constants.d.ts.map +1 -1
- package/lib/herdr/constants.js +18 -0
- package/lib/herdr/constants.js.map +1 -1
- package/lib/herdr/reporter.d.ts +20 -4
- package/lib/herdr/reporter.d.ts.map +1 -1
- package/lib/herdr/reporter.js +70 -20
- package/lib/herdr/reporter.js.map +1 -1
- package/lib/herdr/state.d.ts +10 -0
- package/lib/herdr/state.d.ts.map +1 -1
- package/lib/herdr/state.js +21 -4
- package/lib/herdr/state.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +348 -2602
- package/lib/index.js.map +1 -1
- package/lib/input/action-catalog.d.ts +74 -0
- package/lib/input/action-catalog.d.ts.map +1 -0
- package/lib/input/action-catalog.js +137 -0
- package/lib/input/action-catalog.js.map +1 -0
- package/lib/input/actions.d.ts +5 -81
- package/lib/input/actions.d.ts.map +1 -1
- package/lib/input/actions.js +4 -625
- package/lib/input/actions.js.map +1 -1
- package/lib/input/completion.d.ts +1 -1
- package/lib/input/completion.d.ts.map +1 -1
- package/lib/input/completion.js +2 -1
- package/lib/input/completion.js.map +1 -1
- package/lib/input/file-index.d.ts +40 -0
- package/lib/input/file-index.d.ts.map +1 -0
- package/lib/input/file-index.js +141 -0
- package/lib/input/file-index.js.map +1 -0
- package/lib/input/file-search.d.ts +1 -38
- package/lib/input/file-search.d.ts.map +1 -1
- package/lib/input/file-search.js +1 -487
- package/lib/input/file-search.js.map +1 -1
- package/lib/input/key-press.d.ts +57 -0
- package/lib/input/key-press.d.ts.map +1 -0
- package/lib/input/key-press.js +218 -0
- package/lib/input/key-press.js.map +1 -0
- package/lib/input/keymap-conflicts.d.ts +59 -0
- package/lib/input/keymap-conflicts.d.ts.map +1 -0
- package/lib/input/keymap-conflicts.js +292 -0
- package/lib/input/keymap-conflicts.js.map +1 -0
- package/lib/input/keymap-settings.js +1 -1
- package/lib/input/keymap-settings.js.map +1 -1
- package/lib/input/keymap.d.ts.map +1 -1
- package/lib/input/keymap.js +3 -1
- package/lib/input/keymap.js.map +1 -1
- package/lib/input/workspace-files.d.ts +10 -0
- package/lib/input/workspace-files.d.ts.map +1 -0
- package/lib/input/workspace-files.js +359 -0
- package/lib/input/workspace-files.js.map +1 -0
- package/lib/install-skills.d.ts +39 -0
- package/lib/install-skills.d.ts.map +1 -0
- package/lib/install-skills.js +273 -0
- package/lib/install-skills.js.map +1 -0
- package/lib/keys-command.d.ts +2 -1
- package/lib/keys-command.d.ts.map +1 -1
- package/lib/keys-command.js +2 -1
- package/lib/keys-command.js.map +1 -1
- package/lib/model-list.d.ts +37 -0
- package/lib/model-list.d.ts.map +1 -0
- package/lib/model-list.js +60 -0
- package/lib/model-list.js.map +1 -0
- package/lib/startup.d.ts +8 -0
- package/lib/startup.d.ts.map +1 -1
- package/lib/startup.js +120 -24
- package/lib/startup.js.map +1 -1
- package/lib/subagents.d.ts +7 -3
- package/lib/subagents.d.ts.map +1 -1
- package/lib/subagents.js +28 -4
- package/lib/subagents.js.map +1 -1
- package/lib/surface/appearance-preferences.d.ts +26 -0
- package/lib/surface/appearance-preferences.d.ts.map +1 -0
- package/lib/surface/appearance-preferences.js +139 -0
- package/lib/surface/appearance-preferences.js.map +1 -0
- package/lib/surface/appearance.d.ts +87 -0
- package/lib/surface/appearance.d.ts.map +1 -0
- package/lib/surface/appearance.js +353 -0
- package/lib/surface/appearance.js.map +1 -0
- package/lib/surface/background-work.d.ts +51 -0
- package/lib/surface/background-work.d.ts.map +1 -0
- package/lib/surface/background-work.js +172 -0
- package/lib/surface/background-work.js.map +1 -0
- package/lib/surface/commands.d.ts +82 -0
- package/lib/surface/commands.d.ts.map +1 -0
- package/lib/surface/commands.js +370 -0
- package/lib/surface/commands.js.map +1 -0
- package/lib/surface/modal-input.d.ts +59 -0
- package/lib/surface/modal-input.d.ts.map +1 -0
- package/lib/surface/modal-input.js +243 -0
- package/lib/surface/modal-input.js.map +1 -0
- package/lib/surface/model-choice.d.ts +54 -0
- package/lib/surface/model-choice.d.ts.map +1 -0
- package/lib/surface/model-choice.js +325 -0
- package/lib/surface/model-choice.js.map +1 -0
- package/lib/surface/preset-choice.d.ts +78 -0
- package/lib/surface/preset-choice.d.ts.map +1 -0
- package/lib/surface/preset-choice.js +163 -0
- package/lib/surface/preset-choice.js.map +1 -0
- package/lib/surface/prompt-input.d.ts +97 -0
- package/lib/surface/prompt-input.d.ts.map +1 -0
- package/lib/surface/prompt-input.js +215 -0
- package/lib/surface/prompt-input.js.map +1 -0
- package/lib/surface/prompt-memory.d.ts +76 -0
- package/lib/surface/prompt-memory.d.ts.map +1 -0
- package/lib/surface/prompt-memory.js +167 -0
- package/lib/surface/prompt-memory.js.map +1 -0
- package/lib/surface/session-lifecycle.d.ts +120 -0
- package/lib/surface/session-lifecycle.d.ts.map +1 -0
- package/lib/surface/session-lifecycle.js +324 -0
- package/lib/surface/session-lifecycle.js.map +1 -0
- package/lib/surface/session-picker.d.ts +39 -0
- package/lib/surface/session-picker.d.ts.map +1 -0
- package/lib/surface/session-picker.js +107 -0
- package/lib/surface/session-picker.js.map +1 -0
- package/lib/surface/session-view.d.ts +86 -0
- package/lib/surface/session-view.d.ts.map +1 -0
- package/lib/surface/session-view.js +215 -0
- package/lib/surface/session-view.js.map +1 -0
- package/lib/surface/staged-turns.d.ts +81 -0
- package/lib/surface/staged-turns.d.ts.map +1 -0
- package/lib/surface/staged-turns.js +206 -0
- package/lib/surface/staged-turns.js.map +1 -0
- package/lib/surface/terminal-lifecycle.d.ts +76 -0
- package/lib/surface/terminal-lifecycle.d.ts.map +1 -0
- package/lib/surface/terminal-lifecycle.js +222 -0
- package/lib/surface/terminal-lifecycle.js.map +1 -0
- package/lib/terminal-text/scan.d.ts +44 -0
- package/lib/terminal-text/scan.d.ts.map +1 -0
- package/lib/terminal-text/scan.js +195 -0
- package/lib/terminal-text/scan.js.map +1 -0
- package/lib/terminal-text/sgr.d.ts +32 -0
- package/lib/terminal-text/sgr.d.ts.map +1 -0
- package/lib/terminal-text/sgr.js +203 -0
- package/lib/terminal-text/sgr.js.map +1 -0
- package/lib/terminal-text.d.ts +1 -1
- package/lib/terminal-text.d.ts.map +1 -1
- package/lib/terminal-text.js +2 -379
- package/lib/terminal-text.js.map +1 -1
- package/lib/theme-command.js +2 -1
- package/lib/theme-command.js.map +1 -1
- package/lib/theme-defaults.d.ts +64 -0
- package/lib/theme-defaults.d.ts.map +1 -0
- package/lib/theme-defaults.js +248 -0
- package/lib/theme-defaults.js.map +1 -0
- package/lib/theme-files.d.ts +1 -1
- package/lib/theme-files.d.ts.map +1 -1
- package/lib/theme-files.js +1 -1
- package/lib/theme-files.js.map +1 -1
- package/lib/theme-resolver.d.ts +36 -0
- package/lib/theme-resolver.d.ts.map +1 -0
- package/lib/theme-resolver.js +112 -0
- package/lib/theme-resolver.js.map +1 -0
- package/lib/theme-schema.d.ts.map +1 -1
- package/lib/theme-schema.js +3 -2
- package/lib/theme-schema.js.map +1 -1
- package/lib/theme-settings.d.ts +5 -7
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/theme-settings.js +37 -21
- package/lib/theme-settings.js.map +1 -1
- package/lib/theme-tokens.d.ts +0 -89
- package/lib/theme-tokens.d.ts.map +1 -1
- package/lib/theme-tokens.js +0 -356
- package/lib/theme-tokens.js.map +1 -1
- package/lib/theme.d.ts +1 -1
- package/lib/theme.d.ts.map +1 -1
- package/lib/theme.js +2 -1
- package/lib/theme.js.map +1 -1
- package/lib/tool-display.d.ts.map +1 -1
- package/lib/tool-display.js +2 -1
- package/lib/tool-display.js.map +1 -1
- package/lib/transcript/message-content.d.ts +21 -0
- package/lib/transcript/message-content.d.ts.map +1 -0
- package/lib/transcript/message-content.js +61 -0
- package/lib/transcript/message-content.js.map +1 -0
- package/lib/transcript/tool-calls.d.ts +106 -0
- package/lib/transcript/tool-calls.d.ts.map +1 -0
- package/lib/transcript/tool-calls.js +254 -0
- package/lib/transcript/tool-calls.js.map +1 -0
- package/lib/transcript.d.ts +14 -55
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +31 -253
- package/lib/transcript.js.map +1 -1
- package/lib/ui/dock.d.ts +14 -2
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +52 -10
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/editor.d.ts.map +1 -1
- package/lib/ui/editor.js +2 -1
- package/lib/ui/editor.js.map +1 -1
- package/lib/ui/keymap-picker.d.ts +2 -1
- package/lib/ui/keymap-picker.d.ts.map +1 -1
- package/lib/ui/keymap-picker.js +1 -0
- package/lib/ui/keymap-picker.js.map +1 -1
- package/lib/ui/view/gate-card.d.ts +21 -0
- package/lib/ui/view/gate-card.d.ts.map +1 -0
- package/lib/ui/view/gate-card.js +104 -0
- package/lib/ui/view/gate-card.js.map +1 -0
- package/lib/ui/view/tool-card.d.ts +149 -0
- package/lib/ui/view/tool-card.d.ts.map +1 -0
- package/lib/ui/view/tool-card.js +429 -0
- package/lib/ui/view/tool-card.js.map +1 -0
- package/lib/ui/view/transcript-message.d.ts +62 -0
- package/lib/ui/view/transcript-message.d.ts.map +1 -0
- package/lib/ui/view/transcript-message.js +158 -0
- package/lib/ui/view/transcript-message.js.map +1 -0
- package/lib/ui/view.d.ts +105 -223
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +132 -679
- package/lib/ui/view.js.map +1 -1
- package/package.json +3 -1
- package/themes/violet-orbit.yaml +7 -5
package/lib/cards.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import {} from "./theme-tokens.js";
|
|
1
2
|
import { clipVisibleGraphemes } from "./terminal-text.js";
|
|
2
|
-
import { countTokens, formatTokens } from "./tokens.js";
|
|
3
3
|
/** A row drawn in a single style. */
|
|
4
4
|
export function cardRow(cls, text) {
|
|
5
5
|
return { parts: [{ class: cls, text }] };
|
|
@@ -16,40 +16,6 @@ export function rowText(row) {
|
|
|
16
16
|
* memory for a reader who will never scroll that far.
|
|
17
17
|
*/
|
|
18
18
|
export const CARD_DETAIL_MAX = 200;
|
|
19
|
-
/**
|
|
20
|
-
* Output rows a folded card keeps on screen when a tool configures a tail.
|
|
21
|
-
*
|
|
22
|
-
* Shipped as the `tail` default for every tool, but drawn only when that tool
|
|
23
|
-
* asks for `output: tail`: the shipped `output: hidden` is what makes a folded
|
|
24
|
-
* card one line. The tail is the part that carries the outcome of a long run,
|
|
25
|
-
* and the retention cap still bounds what ctrl+o can reveal.
|
|
26
|
-
*/
|
|
27
|
-
export const CARD_SHELL_PREVIEW = 20;
|
|
28
|
-
/**
|
|
29
|
-
* Nested calls retained on one PTC card.
|
|
30
|
-
*
|
|
31
|
-
* A program can dispatch in a loop, and one line each is small but not free;
|
|
32
|
-
* the cap keeps a card bounded while {@link ToolCard.subCallsTotal} still
|
|
33
|
-
* reports everything the program ran.
|
|
34
|
-
*/
|
|
35
|
-
export const SUBCALL_MAX = 100;
|
|
36
|
-
/**
|
|
37
|
-
* The tail of the hint a folded shell card draws when it dropped rows.
|
|
38
|
-
*
|
|
39
|
-
* "more" rather than "them": retention caps detail rows, so a command that
|
|
40
|
-
* printed thousands of lines cannot promise ctrl+o will reveal every dropped
|
|
41
|
-
* one.
|
|
42
|
-
*/
|
|
43
|
-
/** The fold hint names the key that opens the card, which the reader owns. */
|
|
44
|
-
const cardHintEarlier = (showMoreKey) => `earlier lines · ${showMoreKey} shows more`;
|
|
45
|
-
/**
|
|
46
|
-
* The tail of the hint an opened shell card draws when retention dropped rows.
|
|
47
|
-
*
|
|
48
|
-
* Retention keeps the tail of a run, so the rows it refused are always the
|
|
49
|
-
* beginning; a hint that only counted them would send the reader looking past
|
|
50
|
-
* the end of the output for rows that are not there.
|
|
51
|
-
*/
|
|
52
|
-
const CARD_HINT_UNRETAINED_EARLIER = 'earlier lines not shown';
|
|
53
19
|
/** Character budget for one detail row, so a minified file cannot flood the viewport. */
|
|
54
20
|
export const CARD_LINE_LIMIT = 200;
|
|
55
21
|
/**
|
|
@@ -67,7 +33,7 @@ export function clip(text, limit) {
|
|
|
67
33
|
return '';
|
|
68
34
|
return clipVisibleGraphemes(text, limit);
|
|
69
35
|
}
|
|
70
|
-
function clipLine(text) {
|
|
36
|
+
export function clipLine(text) {
|
|
71
37
|
return clip(text, CARD_LINE_LIMIT);
|
|
72
38
|
}
|
|
73
39
|
/**
|
|
@@ -79,59 +45,10 @@ function clipLine(text) {
|
|
|
79
45
|
export function oneLine(text) {
|
|
80
46
|
return text.replace(/\s+/gu, ' ').trim();
|
|
81
47
|
}
|
|
82
|
-
/**
|
|
83
|
-
* The one-line row for one nested call, as its start or its settle leaves it.
|
|
84
|
-
*
|
|
85
|
-
* A tool that declares a call view is drawn exactly as its own header would be;
|
|
86
|
-
* only a tool with no view at all falls back to its registry name and raw call,
|
|
87
|
-
* because the surface cannot name a salient argument for a schema it never saw.
|
|
88
|
-
* A settle logs the same call again, and the presenter that answered the first
|
|
89
|
-
* time is asked again for the view it would draw — so the row's identity comes
|
|
90
|
-
* from the row already on screen wherever there is one, and only a call that was
|
|
91
|
-
* dropped earlier is named from the log. The row also keeps how the call ended,
|
|
92
|
-
* because a program's calls are told apart by their outcomes rather than by
|
|
93
|
-
* anything the program itself says about them.
|
|
94
|
-
*/
|
|
95
|
-
export function subCallRow(id, name, argumentsJson, facts, existing) {
|
|
96
|
-
const { view, output, status, running, failed } = facts;
|
|
97
|
-
const title = view?.title ?? existing?.title ?? name;
|
|
98
|
-
const raw = view !== undefined || existing !== undefined ? undefined : clipLine(argumentsJson);
|
|
99
|
-
const argument = view?.argument ?? existing?.argument ?? raw;
|
|
100
|
-
// A failed call keeps only what still holds: the change it declared never
|
|
101
|
-
// happened, so the rows that drew as applied go with the outcome that never
|
|
102
|
-
// came. Its outcome stays, because the reason it failed is what a reader opens
|
|
103
|
-
// the row to read.
|
|
104
|
-
const presented = failed ? undefined : subCallRows(view) ?? existing?.presented;
|
|
105
|
-
// A settle that reports nothing keeps what the row already said about its own
|
|
106
|
-
// outcome, because a call does not stop having finished a certain way.
|
|
107
|
-
const ended = status ?? existing?.status;
|
|
108
|
-
return {
|
|
109
|
-
id,
|
|
110
|
-
title,
|
|
111
|
-
...(argument === undefined || argument === '' ? {} : { argument }),
|
|
112
|
-
...(ended === undefined || ended === '' ? {} : { status: ended }),
|
|
113
|
-
failed,
|
|
114
|
-
running,
|
|
115
|
-
...(presented === undefined ? {} : { presented }),
|
|
116
|
-
...(output === undefined ? {} : { output }),
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* The rows one dispatched call keeps, from the card that drew them.
|
|
121
|
-
*
|
|
122
|
-
* The total is clamped to what was kept: a card built from a call or result
|
|
123
|
-
* view reports no total of its own, because it is not a stream retention had to
|
|
124
|
-
* cut, and a count below the rows on screen would hint at rows already shown.
|
|
125
|
-
*/
|
|
126
|
-
export function subCallRows(card) {
|
|
127
|
-
if (card === undefined || card.detail.length === 0)
|
|
128
|
-
return undefined;
|
|
129
|
-
return { kind: card.kind, rows: card.detail, totalLines: Math.max(card.totalLines, card.detail.length) };
|
|
130
|
-
}
|
|
131
48
|
function clipRow(row) {
|
|
132
49
|
return { parts: row.parts.map(part => ({ class: part.class, text: clipLine(part.text) })) };
|
|
133
50
|
}
|
|
134
|
-
function bound(rows) {
|
|
51
|
+
export function bound(rows) {
|
|
135
52
|
return { detail: rows.slice(0, CARD_DETAIL_MAX).map(clipRow), totalLines: rows.length };
|
|
136
53
|
}
|
|
137
54
|
/**
|
|
@@ -141,130 +58,9 @@ function bound(rows) {
|
|
|
141
58
|
* run's middle and lose the ending the reader asked for; the tail is also what
|
|
142
59
|
* a folded shell card tails again.
|
|
143
60
|
*/
|
|
144
|
-
function boundTail(rows) {
|
|
61
|
+
export function boundTail(rows) {
|
|
145
62
|
return { detail: rows.slice(-CARD_DETAIL_MAX).map(clipRow), totalLines: rows.length };
|
|
146
63
|
}
|
|
147
|
-
/** A text with the newline that only terminates its last line removed. */
|
|
148
|
-
function withoutTrailingBreaks(text) {
|
|
149
|
-
return text.replace(/\n+$/, '');
|
|
150
|
-
}
|
|
151
|
-
/** How many lines a text holds, ignoring the newline that only terminates the last one. */
|
|
152
|
-
function lineCount(text) {
|
|
153
|
-
const body = withoutTrailingBreaks(text);
|
|
154
|
-
return body === '' ? 0 : body.split('\n').length;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* The size of a text a card presents, in lines and in tokens.
|
|
158
|
-
*
|
|
159
|
-
* A reader deciding whether to open a file cares about both: lines say how tall
|
|
160
|
-
* it is, tokens say what it cost to put in the conversation.
|
|
161
|
-
*/
|
|
162
|
-
function sizeStats(text) {
|
|
163
|
-
const body = withoutTrailingBreaks(text);
|
|
164
|
-
const lines = lineCount(body);
|
|
165
|
-
const tokens = countTokens(body);
|
|
166
|
-
const stats = [];
|
|
167
|
-
if (lines > 0)
|
|
168
|
-
stats.push({ kind: 'size', text: `${lines} line${lines === 1 ? '' : 's'}` });
|
|
169
|
-
if (tokens > 0)
|
|
170
|
-
stats.push({ kind: 'size', text: `${formatTokens(tokens)} tok` });
|
|
171
|
-
return stats;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* A file change's split into added, changed, and removed lines.
|
|
175
|
-
*
|
|
176
|
-
* A replacement is one changed line, not an add plus a remove, so the smaller
|
|
177
|
-
* of the two sides is the changed count and only the excess counts as pure
|
|
178
|
-
* additions or deletions — otherwise every edit reads as twice its size. Each
|
|
179
|
-
* file is netted on its own for the same reason: one file's additions must not
|
|
180
|
-
* cancel another file's deletions, or a change to two files reads as a rewrite
|
|
181
|
-
* of neither.
|
|
182
|
-
*/
|
|
183
|
-
function changeStats(diffs) {
|
|
184
|
-
let added = 0;
|
|
185
|
-
let changed = 0;
|
|
186
|
-
let removed = 0;
|
|
187
|
-
for (const diff of diffs) {
|
|
188
|
-
let fileAdded = 0;
|
|
189
|
-
let fileRemoved = 0;
|
|
190
|
-
for (const row of renderFileDiff(diff)) {
|
|
191
|
-
const cls = row.parts[0]?.class;
|
|
192
|
-
if (cls === 'added')
|
|
193
|
-
fileAdded += 1;
|
|
194
|
-
else if (cls === 'removed')
|
|
195
|
-
fileRemoved += 1;
|
|
196
|
-
}
|
|
197
|
-
const fileChanged = Math.min(fileAdded, fileRemoved);
|
|
198
|
-
added += fileAdded - fileChanged;
|
|
199
|
-
changed += fileChanged;
|
|
200
|
-
removed += fileRemoved - fileChanged;
|
|
201
|
-
}
|
|
202
|
-
const stats = [];
|
|
203
|
-
if (added > 0)
|
|
204
|
-
stats.push({ kind: 'added', text: String(added) });
|
|
205
|
-
if (changed > 0)
|
|
206
|
-
stats.push({ kind: 'changed', text: String(changed) });
|
|
207
|
-
if (removed > 0)
|
|
208
|
-
stats.push({ kind: 'removed', text: String(removed) });
|
|
209
|
-
return stats;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* The window a read returned: its line range, how many lines, and their token size.
|
|
213
|
-
*
|
|
214
|
-
* An empty window still names the offset it starts at, because the view keeps it
|
|
215
|
-
* for exactly that case, and counts the model-facing content the card falls back
|
|
216
|
-
* to drawing rather than reporting a size of zero.
|
|
217
|
-
*/
|
|
218
|
-
function readStats(read) {
|
|
219
|
-
const text = read.lines.length > 0
|
|
220
|
-
? read.lines.map(line => line.text).join('\n')
|
|
221
|
-
: contentLines(read.content).join('\n');
|
|
222
|
-
const count = read.lines.length > 0 ? read.lines.length : lineCount(text);
|
|
223
|
-
const start = read.offset;
|
|
224
|
-
const stats = [
|
|
225
|
-
{ kind: 'size', text: count <= 1 ? `L${start}` : `L${start}–${start + count - 1}` },
|
|
226
|
-
{ kind: 'size', text: `${count} line${count === 1 ? '' : 's'}` },
|
|
227
|
-
];
|
|
228
|
-
const tokens = countTokens(withoutTrailingBreaks(text));
|
|
229
|
-
if (tokens > 0)
|
|
230
|
-
stats.push({ kind: 'size', text: `${formatTokens(tokens)} tok` });
|
|
231
|
-
return stats;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* A diff's measured facts: a change with no prior content reports its size,
|
|
235
|
-
* while one that carried prior content reports its line changes.
|
|
236
|
-
*
|
|
237
|
-
* `oldText === null` means the prior content was unavailable at call time — a
|
|
238
|
-
* new file, or a whole-file overwrite — so no diff can be counted and the size
|
|
239
|
-
* is the only honest fact; naming that a *creation* would misread every
|
|
240
|
-
* overwrite as a new file.
|
|
241
|
-
*/
|
|
242
|
-
function diffStats(diffs) {
|
|
243
|
-
const withoutPrior = diffs.length > 0 && diffs.every(diff => diff.oldText === null);
|
|
244
|
-
return withoutPrior ? sizeStats(diffs.map(diff => diff.newText).join('\n')) : changeStats(diffs);
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* The rows a card shows right now, and how many the reader is not seeing.
|
|
248
|
-
*
|
|
249
|
-
* Expansion is a view decision rather than a card field so one key press can
|
|
250
|
-
* change every card at once without rebuilding the transcript.
|
|
251
|
-
*/
|
|
252
|
-
export function cardDetailRows(card, preview) {
|
|
253
|
-
const lines = preview.expanded
|
|
254
|
-
? card.detail.slice(0, CARD_DETAIL_MAX)
|
|
255
|
-
: preview.preview === 'tail'
|
|
256
|
-
? card.detail.slice(Math.max(0, card.detail.length - Math.max(0, preview.rows)))
|
|
257
|
-
: [];
|
|
258
|
-
return { lines, hidden: Math.max(0, card.totalLines - lines.length) };
|
|
259
|
-
}
|
|
260
|
-
/** The hint row for a folded shell card, or undefined when its preview dropped nothing. */
|
|
261
|
-
export function shellFoldHint(hidden, showMoreKey) {
|
|
262
|
-
return hidden <= 0 ? undefined : `… ${hidden} ${cardHintEarlier(showMoreKey)}`;
|
|
263
|
-
}
|
|
264
|
-
/** The hint row for an opened shell card whose retention dropped the run's earlier rows. */
|
|
265
|
-
export function shellRetentionHint(hidden) {
|
|
266
|
-
return hidden <= 0 ? undefined : `… ${hidden} ${CARD_HINT_UNRETAINED_EARLIER}`;
|
|
267
|
-
}
|
|
268
64
|
/**
|
|
269
65
|
* Build a card from raw text lines.
|
|
270
66
|
*
|
|
@@ -294,352 +90,4 @@ export function contentLines(content) {
|
|
|
294
90
|
}
|
|
295
91
|
return lines;
|
|
296
92
|
}
|
|
297
|
-
/**
|
|
298
|
-
* The header fields a rebuilt card must keep.
|
|
299
|
-
*
|
|
300
|
-
* Replacing a card's rows says nothing about what the call was made with, what
|
|
301
|
-
* it measured, how it ended, or which calls it dispatched, so those fields
|
|
302
|
-
* travel with the rebuild: dropping the argument is how a shell card loses its
|
|
303
|
-
* command the moment a presenter declines the result.
|
|
304
|
-
*/
|
|
305
|
-
export function carriedFields(card) {
|
|
306
|
-
return {
|
|
307
|
-
...(card.argument === undefined ? {} : { argument: card.argument }),
|
|
308
|
-
...(card.stats === undefined ? {} : { stats: card.stats }),
|
|
309
|
-
...(card.status === undefined ? {} : { status: card.status }),
|
|
310
|
-
...(card.subCalls === undefined ? {} : { subCalls: card.subCalls }),
|
|
311
|
-
...(card.subCallsTotal === undefined ? {} : { subCallsTotal: card.subCallsTotal }),
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Collapse one call and its result into the single row the reader sees.
|
|
316
|
-
*
|
|
317
|
-
* The pending row already told the reader what the tool is doing, so the
|
|
318
|
-
* settled row keeps that header and swaps in the outcome; a result that
|
|
319
|
-
* presents nothing keeps the call's detail rather than blanking the row.
|
|
320
|
-
*/
|
|
321
|
-
export function mergeCards(call, result) {
|
|
322
|
-
const base = call ?? result;
|
|
323
|
-
if (base === undefined)
|
|
324
|
-
throw new Error('mergeCards requires at least one card');
|
|
325
|
-
if (call === undefined || result === undefined)
|
|
326
|
-
return base;
|
|
327
|
-
const kind = result.kind === 'generic' ? call.kind : result.kind;
|
|
328
|
-
// The result, when it names one, knows the argument that was actually acted
|
|
329
|
-
// on; a terminal result omits it, so the pending call's command is kept. The
|
|
330
|
-
// result also owns the measured facts, because only it knows the outcome.
|
|
331
|
-
const argument = result.argument ?? call.argument;
|
|
332
|
-
const stats = result.stats ?? call.stats;
|
|
333
|
-
const status = result.status ?? call.status;
|
|
334
|
-
// The nested calls belong to the call, not the outcome: a result never carries
|
|
335
|
-
// them, so the merge has to hand the call's own list through.
|
|
336
|
-
const subCalls = result.subCalls ?? call.subCalls;
|
|
337
|
-
const subCallsTotal = result.subCallsTotal ?? call.subCallsTotal;
|
|
338
|
-
return {
|
|
339
|
-
kind,
|
|
340
|
-
// The tool that ran is the call's identity: a result card describes the same
|
|
341
|
-
// call, so it cannot rename the message a reader's clicks are remembered by.
|
|
342
|
-
tool: call.tool,
|
|
343
|
-
title: call.title,
|
|
344
|
-
...(argument === undefined ? {} : { argument }),
|
|
345
|
-
...(stats === undefined ? {} : { stats }),
|
|
346
|
-
...(status === undefined ? {} : { status }),
|
|
347
|
-
...(subCalls === undefined ? {} : { subCalls }),
|
|
348
|
-
...(subCallsTotal === undefined ? {} : { subCallsTotal }),
|
|
349
|
-
detail: result.detail.length > 0 ? result.detail : call.detail,
|
|
350
|
-
failed: result.failed,
|
|
351
|
-
totalLines: result.detail.length > 0 ? result.totalLines : call.totalLines,
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Render one file change as a bounded unified hunk.
|
|
356
|
-
*
|
|
357
|
-
* Only the changed middle is shown: a presenter has the prior and next text but
|
|
358
|
-
* no hunk list, so trimming the shared prefix and suffix yields the same region
|
|
359
|
-
* a full diff would highlight without paying for a line-diff computation on
|
|
360
|
-
* every frame.
|
|
361
|
-
*/
|
|
362
|
-
export function renderFileDiff(diff) {
|
|
363
|
-
const before = diff.oldText === null ? [] : diff.oldText.split('\n');
|
|
364
|
-
const after = diff.newText.split('\n');
|
|
365
|
-
let head = 0;
|
|
366
|
-
while (head < before.length && head < after.length && before[head] === after[head])
|
|
367
|
-
head += 1;
|
|
368
|
-
let tail = 0;
|
|
369
|
-
while (tail < before.length - head
|
|
370
|
-
&& tail < after.length - head
|
|
371
|
-
&& before[before.length - 1 - tail] === after[after.length - 1 - tail])
|
|
372
|
-
tail += 1;
|
|
373
|
-
const removed = before.slice(head, before.length - tail);
|
|
374
|
-
const added = after.slice(head, after.length - tail);
|
|
375
|
-
// "new" keys off the absent prior text, not off an empty hunk: an unchanged
|
|
376
|
-
// file has no removals either and must not read as a creation.
|
|
377
|
-
const header = diff.oldText === null ? 'new' : `-${removed.length} +${added.length}`;
|
|
378
|
-
const rows = [cardRow('header', `${diff.path} ${header}`)];
|
|
379
|
-
if (head > 0)
|
|
380
|
-
rows.push(cardRow('hunk', `@@ ${head} unchanged line${head === 1 ? '' : 's'} before`));
|
|
381
|
-
for (const line of removed)
|
|
382
|
-
rows.push(cardRow('removed', `-${line}`));
|
|
383
|
-
for (const line of added)
|
|
384
|
-
rows.push(cardRow('added', `+${line}`));
|
|
385
|
-
if (tail > 0)
|
|
386
|
-
rows.push(cardRow('hunk', `@@ ${tail} unchanged line${tail === 1 ? '' : 's'} after`));
|
|
387
|
-
return rows;
|
|
388
|
-
}
|
|
389
|
-
/**
|
|
390
|
-
* Verbs a presenter may open its title with that only restate the call.
|
|
391
|
-
*
|
|
392
|
-
* The subject a reader scans for is what follows the verb, so the surface draws
|
|
393
|
-
* the card from there: "skill project-skill" rather than "Load skill
|
|
394
|
-
* project-skill". Only a declared title is normalized — a path or a command is
|
|
395
|
-
* the call's own data, and shortening that would misreport what ran — and the
|
|
396
|
-
* list stays literal because inferring a verb could cut a real title short.
|
|
397
|
-
*/
|
|
398
|
-
const REDUNDANT_TITLE_LEADS = ['Load '];
|
|
399
|
-
function title(view, fallback) {
|
|
400
|
-
const declared = view.title?.trim() ?? '';
|
|
401
|
-
const lead = REDUNDANT_TITLE_LEADS.find(prefix => declared.startsWith(prefix));
|
|
402
|
-
const shown = lead === undefined ? declared : declared.slice(lead.length).trim();
|
|
403
|
-
return shown === '' ? fallback : shown;
|
|
404
|
-
}
|
|
405
|
-
/** A read line keeps its number apart from its text, because they read differently. */
|
|
406
|
-
function readLine(number, text) {
|
|
407
|
-
return { parts: [{ class: 'lineNumber', text: `${number}:` }, { class: 'line', text: ` ${text}` }] };
|
|
408
|
-
}
|
|
409
|
-
/** A search hit keeps its location apart from the matching line. */
|
|
410
|
-
function searchHit(path, lineNumber, line) {
|
|
411
|
-
return {
|
|
412
|
-
parts: [
|
|
413
|
-
{ class: 'path', text: path },
|
|
414
|
-
{ class: 'lineNumber', text: `:${lineNumber}:` },
|
|
415
|
-
{ class: 'match', text: ` ${line}` },
|
|
416
|
-
],
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
/** Map a tool's pending-call intent to a card, falling back to the raw call name. */
|
|
420
|
-
export function cardOfCall(view, name) {
|
|
421
|
-
if (view === undefined) {
|
|
422
|
-
return { kind: 'generic', tool: name, title: name, detail: [], failed: false, totalLines: 0 };
|
|
423
|
-
}
|
|
424
|
-
switch (view.card) {
|
|
425
|
-
case 'terminal': {
|
|
426
|
-
const terminal = view;
|
|
427
|
-
const rows = [];
|
|
428
|
-
if (terminal.description !== undefined && terminal.description !== '')
|
|
429
|
-
rows.push(cardRow('output', terminal.description));
|
|
430
|
-
if (terminal.cwd !== undefined && terminal.cwd !== '')
|
|
431
|
-
rows.push(cardRow('cwd', `cwd ${terminal.cwd}`));
|
|
432
|
-
// The header names the tool so the command can sit on its own row: a
|
|
433
|
-
// terminal view's own title IS the command, and a fold must not hide it.
|
|
434
|
-
const command = terminal.title?.trim() ?? '';
|
|
435
|
-
return {
|
|
436
|
-
kind: 'terminal',
|
|
437
|
-
tool: name,
|
|
438
|
-
title: name,
|
|
439
|
-
...(command === '' ? {} : { argument: command }),
|
|
440
|
-
detail: bound(rows).detail,
|
|
441
|
-
failed: false,
|
|
442
|
-
totalLines: 0,
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
case 'diff': {
|
|
446
|
-
const diff = view;
|
|
447
|
-
const bounded = bound(diff.diffs.flatMap(renderFileDiff));
|
|
448
|
-
const path = diff.diffs[0]?.path;
|
|
449
|
-
if (path === undefined || path === '') {
|
|
450
|
-
return { kind: 'diff', tool: name, title: title(diff, name), detail: bounded.detail, failed: false, totalLines: bounded.totalLines };
|
|
451
|
-
}
|
|
452
|
-
return {
|
|
453
|
-
kind: 'diff',
|
|
454
|
-
tool: name,
|
|
455
|
-
title: name,
|
|
456
|
-
argument: path,
|
|
457
|
-
detail: bounded.detail,
|
|
458
|
-
failed: false,
|
|
459
|
-
totalLines: bounded.totalLines,
|
|
460
|
-
};
|
|
461
|
-
}
|
|
462
|
-
default: {
|
|
463
|
-
const generic = view;
|
|
464
|
-
const lines = contentLines(generic.content);
|
|
465
|
-
if (generic.rawInput !== undefined && lines.length === 0) {
|
|
466
|
-
lines.push(typeof generic.rawInput === 'string' ? generic.rawInput : JSON.stringify(generic.rawInput));
|
|
467
|
-
}
|
|
468
|
-
const bounded = bound(lines.map(line => cardRow('detail', line)));
|
|
469
|
-
// A call that names a file has an argument worth its own colour; one that
|
|
470
|
-
// does not keeps its declared title, which is already the label.
|
|
471
|
-
const location = generic.locations?.[0]?.path;
|
|
472
|
-
if (location === undefined || location === '') {
|
|
473
|
-
return { kind: 'generic', tool: name, title: title(generic, name), detail: bounded.detail, failed: false, totalLines: bounded.totalLines };
|
|
474
|
-
}
|
|
475
|
-
return {
|
|
476
|
-
kind: 'generic',
|
|
477
|
-
tool: name,
|
|
478
|
-
title: name,
|
|
479
|
-
argument: location,
|
|
480
|
-
detail: bounded.detail,
|
|
481
|
-
failed: false,
|
|
482
|
-
totalLines: bounded.totalLines,
|
|
483
|
-
};
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
/** Map a tool's result intent to a card, falling back to the model-facing text. */
|
|
488
|
-
export function cardOfResult(view, input) {
|
|
489
|
-
const failed = input.failed;
|
|
490
|
-
if (view === undefined) {
|
|
491
|
-
const bounded = bound(input.contentLines.map(line => cardRow('detail', line)));
|
|
492
|
-
return { kind: 'generic', tool: input.name, title: input.name, detail: bounded.detail, failed, totalLines: bounded.totalLines };
|
|
493
|
-
}
|
|
494
|
-
switch (view.card) {
|
|
495
|
-
case 'terminal': {
|
|
496
|
-
const terminal = view;
|
|
497
|
-
// A terminating newline is the shell's, not a row: keeping it would spend
|
|
498
|
-
// one slot of the preview window on a blank line the renderer then drops.
|
|
499
|
-
const raw = (terminal.output ?? '').replace(/\n+$/, '');
|
|
500
|
-
const rows = raw === '' ? [] : raw.split('\n').map(line => cardRow('output', line));
|
|
501
|
-
const status = terminal.signal !== undefined && terminal.signal !== ''
|
|
502
|
-
? `signal ${terminal.signal}`
|
|
503
|
-
: terminal.exitCode === undefined ? undefined : `exit ${terminal.exitCode}`;
|
|
504
|
-
// A command that exited non-zero, or died on a signal, is a call that
|
|
505
|
-
// failed, whatever the log's own flag said: the harness reports a shell's
|
|
506
|
-
// exit code as its result rather than as an error, so that flag is silent
|
|
507
|
-
// about how the command actually ended.
|
|
508
|
-
const endedBadly = terminal.exitCode === undefined
|
|
509
|
-
? terminal.signal !== undefined && terminal.signal !== ''
|
|
510
|
-
: terminal.exitCode !== 0;
|
|
511
|
-
// The output is bounded from its END: a command that printed far more
|
|
512
|
-
// than retention keeps must still show how it finished, and the folded
|
|
513
|
-
// preview tails what is retained again.
|
|
514
|
-
const bounded = boundTail(rows);
|
|
515
|
-
// A terminal result mostly omits the title, because the pending call
|
|
516
|
-
// already carried the command; it is only a fallback for a resumed fold
|
|
517
|
-
// that never saw the call.
|
|
518
|
-
const command = terminal.title?.trim() ?? '';
|
|
519
|
-
return {
|
|
520
|
-
kind: 'terminal',
|
|
521
|
-
tool: input.name,
|
|
522
|
-
title: input.name,
|
|
523
|
-
...(command === '' ? {} : { argument: command }),
|
|
524
|
-
...(status === undefined ? {} : { status }),
|
|
525
|
-
detail: bounded.detail,
|
|
526
|
-
failed: failed || endedBadly,
|
|
527
|
-
totalLines: bounded.totalLines,
|
|
528
|
-
};
|
|
529
|
-
}
|
|
530
|
-
case 'diff': {
|
|
531
|
-
const diff = view;
|
|
532
|
-
const bounded = bound(diff.diffs.flatMap(renderFileDiff));
|
|
533
|
-
const path = diff.diffs[0]?.path;
|
|
534
|
-
const stats = diffStats(diff.diffs);
|
|
535
|
-
if (path === undefined || path === '') {
|
|
536
|
-
return {
|
|
537
|
-
kind: 'diff',
|
|
538
|
-
tool: input.name,
|
|
539
|
-
title: title(diff, input.name),
|
|
540
|
-
...(stats.length === 0 ? {} : { stats }),
|
|
541
|
-
detail: bounded.detail,
|
|
542
|
-
failed,
|
|
543
|
-
totalLines: bounded.totalLines,
|
|
544
|
-
};
|
|
545
|
-
}
|
|
546
|
-
return {
|
|
547
|
-
kind: 'diff',
|
|
548
|
-
tool: input.name,
|
|
549
|
-
title: input.name,
|
|
550
|
-
argument: path,
|
|
551
|
-
...(stats.length === 0 ? {} : { stats }),
|
|
552
|
-
detail: bounded.detail,
|
|
553
|
-
failed,
|
|
554
|
-
totalLines: bounded.totalLines,
|
|
555
|
-
};
|
|
556
|
-
}
|
|
557
|
-
case 'search': {
|
|
558
|
-
const search = view;
|
|
559
|
-
const rows = search.shape === 'paths'
|
|
560
|
-
? search.paths.map(path => cardRow('path', path))
|
|
561
|
-
: search.files.flatMap(file => file.matches.map(match => searchHit(file.path, match.lineNumber, match.line)));
|
|
562
|
-
if (search.truncated)
|
|
563
|
-
rows.push(cardRow('truncated', `… ${search.total} total`));
|
|
564
|
-
const bounded = bound(rows);
|
|
565
|
-
return {
|
|
566
|
-
kind: 'search',
|
|
567
|
-
tool: input.name,
|
|
568
|
-
title: title(search, input.name),
|
|
569
|
-
detail: bounded.detail,
|
|
570
|
-
failed,
|
|
571
|
-
totalLines: bounded.totalLines,
|
|
572
|
-
};
|
|
573
|
-
}
|
|
574
|
-
case 'read': {
|
|
575
|
-
const read = view;
|
|
576
|
-
// The header now carries the path and the size stats, so the detail rows
|
|
577
|
-
// are only the numbered lines themselves.
|
|
578
|
-
const rows = [];
|
|
579
|
-
if (read.lines.length > 0) {
|
|
580
|
-
for (const line of read.lines)
|
|
581
|
-
rows.push(readLine(line.number, line.text));
|
|
582
|
-
}
|
|
583
|
-
else {
|
|
584
|
-
for (const line of contentLines(read.content))
|
|
585
|
-
rows.push(cardRow('line', line));
|
|
586
|
-
}
|
|
587
|
-
const bounded = bound(rows);
|
|
588
|
-
const stats = readStats(read);
|
|
589
|
-
return {
|
|
590
|
-
kind: 'read',
|
|
591
|
-
tool: input.name,
|
|
592
|
-
title: input.name,
|
|
593
|
-
...(read.path === '' ? {} : { argument: read.path }),
|
|
594
|
-
...(stats.length === 0 ? {} : { stats }),
|
|
595
|
-
detail: bounded.detail,
|
|
596
|
-
failed,
|
|
597
|
-
totalLines: bounded.totalLines,
|
|
598
|
-
};
|
|
599
|
-
}
|
|
600
|
-
case 'web': {
|
|
601
|
-
const web = view;
|
|
602
|
-
const rows = [];
|
|
603
|
-
if (web.kind === 'search') {
|
|
604
|
-
if (web.answer !== undefined && web.answer !== '') {
|
|
605
|
-
for (const line of web.answer.split('\n'))
|
|
606
|
-
rows.push(cardRow('detail', line));
|
|
607
|
-
}
|
|
608
|
-
for (const source of web.sources) {
|
|
609
|
-
rows.push(cardRow('source', source.title === undefined ? source.url : `${source.title} — ${source.url}`));
|
|
610
|
-
}
|
|
611
|
-
if (web.truncated)
|
|
612
|
-
rows.push(cardRow('truncated', '… more sources'));
|
|
613
|
-
}
|
|
614
|
-
else {
|
|
615
|
-
rows.push(cardRow('url', `${web.url} → ${web.statusCode}`));
|
|
616
|
-
if (web.truncated)
|
|
617
|
-
rows.push(cardRow('truncated', '… body truncated'));
|
|
618
|
-
}
|
|
619
|
-
const bounded = bound(rows);
|
|
620
|
-
return {
|
|
621
|
-
kind: 'web',
|
|
622
|
-
tool: input.name,
|
|
623
|
-
title: title(web, input.name),
|
|
624
|
-
detail: bounded.detail,
|
|
625
|
-
failed,
|
|
626
|
-
totalLines: bounded.totalLines,
|
|
627
|
-
};
|
|
628
|
-
}
|
|
629
|
-
default: {
|
|
630
|
-
const generic = view;
|
|
631
|
-
const lines = contentLines(generic.content);
|
|
632
|
-
const chosen = lines.length > 0 ? lines : input.contentLines;
|
|
633
|
-
const bounded = bound(chosen.map(line => cardRow('detail', line)));
|
|
634
|
-
return {
|
|
635
|
-
kind: 'generic',
|
|
636
|
-
tool: input.name,
|
|
637
|
-
title: title(generic, input.name),
|
|
638
|
-
detail: bounded.detail,
|
|
639
|
-
failed,
|
|
640
|
-
totalLines: bounded.totalLines,
|
|
641
|
-
};
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
93
|
//# sourceMappingURL=cards.js.map
|
package/lib/cards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cards.js","sourceRoot":"","sources":["../src/cards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cards.js","sourceRoot":"","sources":["../src/cards.ts"],"names":[],"mappings":"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"}
|