@stigmer/react 3.1.2 → 3.1.3

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 (171) hide show
  1. package/composer/SessionComposer.d.ts +6 -5
  2. package/composer/SessionComposer.d.ts.map +1 -1
  3. package/composer/SessionComposer.js +1 -1
  4. package/composer/SessionComposer.js.map +1 -1
  5. package/execution/ArtifactPreviewModal.d.ts +5 -5
  6. package/execution/ArtifactPreviewModal.js +4 -4
  7. package/execution/ArtifactPreviewModal.js.map +1 -1
  8. package/execution/FileChangeProgressBar.d.ts +47 -0
  9. package/execution/FileChangeProgressBar.d.ts.map +1 -0
  10. package/execution/FileChangeProgressBar.js +49 -0
  11. package/execution/FileChangeProgressBar.js.map +1 -0
  12. package/execution/FileChangesView.d.ts.map +1 -1
  13. package/execution/FileChangesView.js +19 -4
  14. package/execution/FileChangesView.js.map +1 -1
  15. package/execution/FileReviewAtoms.d.ts +27 -0
  16. package/execution/FileReviewAtoms.d.ts.map +1 -0
  17. package/execution/FileReviewAtoms.js +64 -0
  18. package/execution/FileReviewAtoms.js.map +1 -0
  19. package/execution/FileReviewCard.d.ts +2 -2
  20. package/execution/FileReviewCard.d.ts.map +1 -1
  21. package/execution/FileReviewCard.js +32 -62
  22. package/execution/FileReviewCard.js.map +1 -1
  23. package/execution/MessageEntry.d.ts +0 -9
  24. package/execution/MessageEntry.d.ts.map +1 -1
  25. package/execution/MessageEntry.js +1 -11
  26. package/execution/MessageEntry.js.map +1 -1
  27. package/execution/MessageThread.d.ts +3 -4
  28. package/execution/MessageThread.d.ts.map +1 -1
  29. package/execution/MessageThread.js +25 -11
  30. package/execution/MessageThread.js.map +1 -1
  31. package/execution/PlanArtifactCard.d.ts +16 -10
  32. package/execution/PlanArtifactCard.d.ts.map +1 -1
  33. package/execution/PlanArtifactCard.js +31 -7
  34. package/execution/PlanArtifactCard.js.map +1 -1
  35. package/execution/PlanCompletionCard.d.ts +4 -4
  36. package/execution/PlanCompletionCard.d.ts.map +1 -1
  37. package/execution/PlanCompletionCard.js +4 -4
  38. package/execution/PlanCompletionCard.js.map +1 -1
  39. package/execution/PlanStreamingCard.d.ts +7 -2
  40. package/execution/PlanStreamingCard.d.ts.map +1 -1
  41. package/execution/PlanStreamingCard.js +11 -6
  42. package/execution/PlanStreamingCard.js.map +1 -1
  43. package/execution/index.d.ts +4 -0
  44. package/execution/index.d.ts.map +1 -1
  45. package/execution/index.js +2 -0
  46. package/execution/index.js.map +1 -1
  47. package/execution/use-build-from-plan-hotkey.d.ts +1 -1
  48. package/execution/use-build-from-plan-hotkey.js +1 -1
  49. package/execution/useArtifactCopy.d.ts +51 -0
  50. package/execution/useArtifactCopy.d.ts.map +1 -0
  51. package/execution/useArtifactCopy.js +75 -0
  52. package/execution/useArtifactCopy.js.map +1 -0
  53. package/execution/useArtifactDownload.d.ts.map +1 -1
  54. package/execution/useArtifactDownload.js +17 -5
  55. package/execution/useArtifactDownload.js.map +1 -1
  56. package/execution/useCreateAgentExecution.d.ts +5 -3
  57. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  58. package/execution/useCreateAgentExecution.js.map +1 -1
  59. package/index.d.ts +3 -3
  60. package/index.d.ts.map +1 -1
  61. package/index.js +2 -2
  62. package/index.js.map +1 -1
  63. package/internal/file-tree/FileTreeNode.d.ts.map +1 -1
  64. package/internal/file-tree/FileTreeNode.js +2 -2
  65. package/internal/file-tree/FileTreeNode.js.map +1 -1
  66. package/library/detect-plan-artifact.d.ts +27 -9
  67. package/library/detect-plan-artifact.d.ts.map +1 -1
  68. package/library/detect-plan-artifact.js +26 -6
  69. package/library/detect-plan-artifact.js.map +1 -1
  70. package/library/index.d.ts +1 -1
  71. package/library/index.d.ts.map +1 -1
  72. package/library/index.js +1 -1
  73. package/library/index.js.map +1 -1
  74. package/package.json +4 -4
  75. package/session/PlanEditor.js +1 -1
  76. package/session/PlanEditor.js.map +1 -1
  77. package/session/SessionViewer.d.ts.map +1 -1
  78. package/session/SessionViewer.js +32 -13
  79. package/session/SessionViewer.js.map +1 -1
  80. package/session/plan-document.d.ts +14 -2
  81. package/session/plan-document.d.ts.map +1 -1
  82. package/session/plan-document.js +14 -3
  83. package/session/plan-document.js.map +1 -1
  84. package/session/usePlanDraft.d.ts +1 -1
  85. package/session/useSessionConversation.d.ts +9 -2
  86. package/session/useSessionConversation.d.ts.map +1 -1
  87. package/session/useSessionConversation.js +19 -2
  88. package/session/useSessionConversation.js.map +1 -1
  89. package/src/composer/SessionComposer.tsx +7 -6
  90. package/src/execution/ArtifactPreviewModal.tsx +9 -9
  91. package/src/execution/FileChangeProgressBar.tsx +121 -0
  92. package/src/execution/FileChangesView.tsx +18 -4
  93. package/src/execution/FileReviewAtoms.tsx +89 -0
  94. package/src/execution/FileReviewCard.tsx +57 -90
  95. package/src/execution/MessageEntry.tsx +0 -62
  96. package/src/execution/MessageThread.tsx +29 -15
  97. package/src/execution/PlanArtifactCard.tsx +130 -52
  98. package/src/execution/PlanCompletionCard.tsx +5 -5
  99. package/src/execution/PlanStreamingCard.tsx +15 -11
  100. package/src/execution/__tests__/ArtifactPreviewModal.test.tsx +6 -6
  101. package/src/execution/__tests__/FileChangeProgressBar.test.tsx +125 -0
  102. package/src/execution/__tests__/FileReviewCard.test.tsx +66 -7
  103. package/src/execution/__tests__/MessageThread.test.tsx +1 -1
  104. package/src/execution/__tests__/PlanArtifactCard.test.tsx +52 -18
  105. package/src/execution/__tests__/PlanCompletionCard.test.tsx +2 -2
  106. package/src/execution/__tests__/PlanStreamingCard.test.tsx +11 -4
  107. package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +104 -8
  108. package/src/execution/__tests__/message-entry.test.tsx +6 -37
  109. package/src/execution/__tests__/useArtifactCopy.test.tsx +90 -0
  110. package/src/execution/__tests__/useArtifactDownload.test.tsx +2 -0
  111. package/src/execution/index.ts +6 -0
  112. package/src/execution/use-build-from-plan-hotkey.ts +1 -1
  113. package/src/execution/useArtifactCopy.ts +109 -0
  114. package/src/execution/useArtifactDownload.ts +17 -5
  115. package/src/execution/useCreateAgentExecution.ts +5 -3
  116. package/src/index.ts +6 -0
  117. package/src/internal/file-tree/FileTreeNode.tsx +13 -2
  118. package/src/library/__tests__/detect-plan-artifact.test.ts +21 -0
  119. package/src/library/detect-plan-artifact.ts +32 -10
  120. package/src/library/index.ts +2 -0
  121. package/src/session/PlanEditor.tsx +1 -1
  122. package/src/session/SessionViewer.tsx +50 -18
  123. package/src/session/__tests__/PlanEditor.test.tsx +4 -4
  124. package/src/session/__tests__/PlanStreamingDocument.test.tsx +1 -1
  125. package/src/session/__tests__/SessionViewer-fileReviewDock.test.tsx +57 -0
  126. package/src/session/__tests__/useSessionConversation.test.tsx +44 -0
  127. package/src/session/facets/__tests__/ArtifactsTab.test.tsx +7 -7
  128. package/src/session/plan-document.ts +14 -3
  129. package/src/session/usePlanDraft.ts +1 -1
  130. package/src/session/useSessionConversation.ts +32 -4
  131. package/src/workspace/EditorTabs.tsx +38 -9
  132. package/src/workspace/ExplorerTree.tsx +10 -4
  133. package/src/workspace/FileViewer.tsx +27 -6
  134. package/src/workspace/WorkspaceContentSearch.tsx +44 -20
  135. package/src/workspace/WorkspaceEditor.tsx +19 -16
  136. package/src/workspace/WorkspaceFileSearch.tsx +51 -28
  137. package/src/workspace/WorkspaceSurface.tsx +106 -48
  138. package/src/workspace/__tests__/EditorTabs.test.tsx +4 -2
  139. package/src/workspace/__tests__/ExplorerTree.test.tsx +52 -0
  140. package/src/workspace/__tests__/FileViewer.test.tsx +18 -0
  141. package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +38 -5
  142. package/src/workspace/__tests__/WorkspaceEditor-initialPanel.test.tsx +19 -0
  143. package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +27 -6
  144. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +70 -0
  145. package/src/workspace/__tests__/a11y/harness.tsx +140 -0
  146. package/src/workspace/__tests__/a11y/mock-capabilities.ts +138 -0
  147. package/src/workspace/__tests__/a11y/workspace-editor.a11y.test.tsx +65 -0
  148. package/src/workspace/__tests__/a11y/workspace-explorer-search.a11y.test.tsx +112 -0
  149. package/src/workspace/__tests__/a11y/workspace-viewer-tabs.a11y.test.tsx +69 -0
  150. package/styles.css +1 -1
  151. package/workspace/EditorTabs.d.ts +21 -3
  152. package/workspace/EditorTabs.d.ts.map +1 -1
  153. package/workspace/EditorTabs.js +18 -6
  154. package/workspace/EditorTabs.js.map +1 -1
  155. package/workspace/ExplorerTree.js +8 -4
  156. package/workspace/ExplorerTree.js.map +1 -1
  157. package/workspace/FileViewer.d.ts.map +1 -1
  158. package/workspace/FileViewer.js +19 -8
  159. package/workspace/FileViewer.js.map +1 -1
  160. package/workspace/WorkspaceContentSearch.d.ts.map +1 -1
  161. package/workspace/WorkspaceContentSearch.js +23 -2
  162. package/workspace/WorkspaceContentSearch.js.map +1 -1
  163. package/workspace/WorkspaceEditor.d.ts.map +1 -1
  164. package/workspace/WorkspaceEditor.js +8 -10
  165. package/workspace/WorkspaceEditor.js.map +1 -1
  166. package/workspace/WorkspaceFileSearch.d.ts.map +1 -1
  167. package/workspace/WorkspaceFileSearch.js +23 -3
  168. package/workspace/WorkspaceFileSearch.js.map +1 -1
  169. package/workspace/WorkspaceSurface.d.ts.map +1 -1
  170. package/workspace/WorkspaceSurface.js +54 -18
  171. package/workspace/WorkspaceSurface.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useSessionConversation.js","sourceRoot":"","sources":["../../src/session/useSessionConversation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSessionConversation.js","sourceRoot":"","sources":["../../src/session/useSessionConversation.ts"],"names":[],"mappings":"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"}
@@ -90,8 +90,9 @@ export interface SessionComposerHandle {
90
90
  * plan" to deliver the approved `plan.md` to the implement execution.
91
91
  * @param options.buildFromPlan - Marks this submission as the implement
92
92
  * turn of a Plan → Build handoff (`execution_config.build_from_plan`).
93
- * The runner injects the implement-plan directive and the thread renders
94
- * the turn as a compact chip; the message stays a short label.
93
+ * The runner injects the implement-plan directive and the thread hides
94
+ * the turn's message; the message stays a short label for surfaces
95
+ * without that treatment (the CLI, history).
95
96
  */
96
97
  submit(
97
98
  message: string,
@@ -156,13 +157,13 @@ export interface SessionComposerSubmitContext {
156
157
  */
157
158
  readonly workspaceFileRefs?: string[];
158
159
  /**
159
- * The submission is a "Build from plan" turn.
160
+ * The submission is a Build-from-plan turn.
160
161
  *
161
162
  * Only ever set through {@link SessionComposerHandle.submit} (the thread
162
163
  * card / plan editor CTA) — there is no composer UI for it. Pass to
163
164
  * execution creation as `execution_config.build_from_plan`; the runner
164
- * injects the implement-plan directive and the thread renders the turn
165
- * as a compact chip.
165
+ * injects the implement-plan directive and the thread hides the turn's
166
+ * machine-written message (the plan card above it is the visible cause).
166
167
  *
167
168
  * `undefined` for ordinary submissions.
168
169
  */
@@ -796,7 +797,7 @@ const SessionComposerInner = forwardRef<SessionComposerHandle, SessionComposerPr
796
797
  }
797
798
 
798
799
  // Composer-attached files plus caller-supplied extras (e.g. the approved
799
- // plan.md from "Build from plan") travel as one attachment list.
800
+ // plan.md from a Build-from-plan turn) travel as one attachment list.
800
801
  const composerAttachments = enableAttachments
801
802
  ? attachments.toAttachmentInputs()
802
803
  : [];
@@ -47,10 +47,10 @@ export interface ArtifactPreviewContentProps {
47
47
  */
48
48
  readonly onApplied?: (result: ApplyResourceResult) => void;
49
49
  /**
50
- * Optional plan-build action. When provided, a "Build from plan" primary
51
- * button appears in the action bar (used for plan artifacts: turn the
52
- * plan into an Agent run). Clicking it calls `onImplement` then closes
53
- * the modal. Omit for non-actionable artifacts.
50
+ * Optional plan-build action. When provided, a "Build" primary button
51
+ * appears in the action bar (used for plan artifacts: turn the plan into
52
+ * an Agent run). Clicking it calls `onImplement` then closes the modal.
53
+ * Omit for non-actionable artifacts.
54
54
  */
55
55
  readonly onImplement?: () => void;
56
56
  /** Additional CSS classes for the root container. */
@@ -228,9 +228,9 @@ export function ArtifactPreviewContent({
228
228
  ctaLabel = `Push Skill to ${org}`;
229
229
  }
230
230
 
231
- // "Build from plan" runs the plan; closing the modal lets the host's submit
232
- // pipeline take over (switch to Agent + send). Single combined handler keeps
233
- // the caller's contract simple ("just give me onImplement").
231
+ // "Build" runs the plan; closing the modal lets the host's submit pipeline
232
+ // take over (switch to Agent + send). Single combined handler keeps the
233
+ // caller's contract simple ("just give me onImplement").
234
234
  const handleImplement = useCallback(() => {
235
235
  onImplement?.();
236
236
  onClose();
@@ -329,7 +329,7 @@ export interface ArtifactPreviewModalProps {
329
329
  readonly onApplied?: (result: ApplyResourceResult) => void;
330
330
  /**
331
331
  * Optional plan-build action (see {@link ArtifactPreviewContentProps.onImplement}).
332
- * When provided, a "Build from plan" primary button appears; clicking it calls
332
+ * When provided, a "Build" primary button appears; clicking it calls
333
333
  * `onImplement` then closes the modal.
334
334
  */
335
335
  readonly onImplement?: () => void;
@@ -701,7 +701,7 @@ function ActionBar({
701
701
  )}
702
702
  >
703
703
  <ImplementIcon />
704
- Build from plan
704
+ Build
705
705
  </button>
706
706
  )}
707
707
  {applyResult ? (
@@ -0,0 +1,121 @@
1
+ "use client";
2
+
3
+ import { memo, useState } from "react";
4
+ import type { FileChangeProgress } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
5
+ import { cn } from "@stigmer/theme";
6
+ import { FileKindBadge, FileLineStats } from "./FileReviewAtoms.js";
7
+ import { FilePathLink } from "./FilePathLink.js";
8
+
9
+ /** Props for {@link FileChangeProgressBar}. */
10
+ export interface FileChangeProgressBarProps {
11
+ /**
12
+ * The transient mid-run progress snapshot for the active turn (DD-32). Feed
13
+ * this from `useSessionConversation().fileChangeProgress`. Renders nothing when
14
+ * undefined or when no files have changed yet — the server clears it once the
15
+ * turn's change set leaves CAPTURING, so the bar disappears exactly when the
16
+ * decision surface ({@link FileReviewDock}) takes over.
17
+ */
18
+ readonly progress: FileChangeProgress | undefined;
19
+ /** Additional CSS class names for the root container. */
20
+ readonly className?: string;
21
+ }
22
+
23
+ /**
24
+ * The live "N files changed so far" strip for a turn that is still running.
25
+ *
26
+ * WHY IT EXISTS. The transcript streams per-edit tool rows, but a change made by
27
+ * a shell command (a `sed`, a build step) has no tool row, and there is no
28
+ * running net-of-many-edits rollup until the turn ends. This bar fills that gap:
29
+ * a compact, NON-INTERACTIVE count of the workspace delta accumulating during
30
+ * the turn, pinned above the composer where the {@link FileReviewDock} will later
31
+ * appear. The two are mutually exclusive per turn (progress shows while CAPTURING;
32
+ * the dock shows once AWAITING_REVIEW), so the bar hands off cleanly to the dock.
33
+ *
34
+ * NEVER A DECISION SURFACE. Progress is non-authoritative and carries no file
35
+ * bodies — it is never reviewable or decidable. The reviewed diff is the
36
+ * turn-boundary candidate ({@link FileReviewDock} / the stamped transcript rows).
37
+ * A secret-like path is surfaced by name with its counts withheld (zeroed), so
38
+ * `FileLineStats` renders nothing for it.
39
+ *
40
+ * A11Y. Only the summary count is an `aria-live` region — the per-file list is
41
+ * not — so a screen reader hears "3 files changing" as the count moves, not a
42
+ * per-file barrage on every ~2s refresh.
43
+ *
44
+ * Purely presentational (headless-first, DD-003): the data lives in
45
+ * `useSessionConversation().fileChangeProgress`. `SessionViewer` mounts it above
46
+ * the dock by default.
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * const conv = useSessionConversation(sessionId);
51
+ * <FileChangeProgressBar progress={conv.fileChangeProgress} />
52
+ * ```
53
+ */
54
+ export const FileChangeProgressBar = memo(function FileChangeProgressBar({
55
+ progress,
56
+ className,
57
+ }: FileChangeProgressBarProps) {
58
+ const [expanded, setExpanded] = useState(false);
59
+
60
+ if (!progress || progress.filesChanged === 0) return null;
61
+
62
+ const { filesChanged, linesAdded, linesRemoved, entries } = progress;
63
+ const hiddenCount = filesChanged - entries.length;
64
+
65
+ return (
66
+ <div
67
+ role="region"
68
+ aria-label="File changes in progress"
69
+ data-cursor-target="file-change-progress-bar"
70
+ className={cn("border-t border-border-muted px-4 py-2", className)}
71
+ >
72
+ <div className="flex items-center gap-2">
73
+ <button
74
+ type="button"
75
+ onClick={() => setExpanded((prev) => !prev)}
76
+ aria-expanded={expanded}
77
+ className="flex min-w-0 flex-1 items-center gap-2 text-left text-xs text-muted-foreground hover:text-foreground"
78
+ >
79
+ <span
80
+ aria-hidden="true"
81
+ className={cn("shrink-0 transition-transform", expanded && "rotate-90")}
82
+ >
83
+
84
+ </span>
85
+ {/* Only the count is live: a screen reader hears the aggregate move,
86
+ not a per-file announcement on every refresh. */}
87
+ <span aria-live="polite" className="min-w-0 truncate">
88
+ {filesChanged} {filesChanged === 1 ? "file" : "files"} changing…
89
+ </span>
90
+ </button>
91
+ <FileLineStats linesAdded={linesAdded} linesRemoved={linesRemoved} />
92
+ </div>
93
+ {expanded && (
94
+ <ul className="mt-2 max-h-[30vh] space-y-1 overflow-y-auto">
95
+ {entries.map((entry) => {
96
+ const path = entry.pathAfter || entry.pathBefore;
97
+ return (
98
+ <li key={path} className="flex items-center gap-2">
99
+ <FileKindBadge kind={entry.kind} />
100
+ <FilePathLink
101
+ path={path}
102
+ dirDisplay="dim"
103
+ className="min-w-0 flex-1 text-xs"
104
+ />
105
+ <FileLineStats
106
+ linesAdded={entry.linesAdded}
107
+ linesRemoved={entry.linesRemoved}
108
+ />
109
+ </li>
110
+ );
111
+ })}
112
+ {hiddenCount > 0 && (
113
+ <li className="text-xs text-muted-foreground-faint">
114
+ … and {hiddenCount} more
115
+ </li>
116
+ )}
117
+ </ul>
118
+ )}
119
+ </div>
120
+ );
121
+ });
@@ -167,7 +167,13 @@ export function FileChangeDiff({
167
167
  if (change.captureLevel === FileChangeCaptureLevel.HUNK_ONLY) {
168
168
  return { additions: change.linesAdded, deletions: change.linesRemoved };
169
169
  }
170
- return countHunks(hunks);
170
+ // Whole-file: count the rendered hunks (what the user actually sees). When
171
+ // there are none to count — the body is offloaded/loading/truncated — fall
172
+ // back to the capture-time counts, which are computed with the same diff
173
+ // algorithm and so agree with the hunks whenever both exist.
174
+ const computed = countHunks(hunks);
175
+ if (computed.additions > 0 || computed.deletions > 0) return computed;
176
+ return { additions: change.linesAdded, deletions: change.linesRemoved };
171
177
  }, [change.captureLevel, change.linesAdded, change.linesRemoved, hunks]);
172
178
 
173
179
  const showStatsRow = showStats && (stats.additions > 0 || stats.deletions > 0);
@@ -343,8 +349,11 @@ function countHunks(hunks: readonly DiffHunk[]): {
343
349
  * Projects a {@link FileChange} into a {@link FileDiffEntry} for the file list.
344
350
  *
345
351
  * Counts: hunk-only uses the runner's authoritative numbers; whole-file inline
346
- * is derived from the content; an offloaded whole-file side has no synchronous
347
- * content, so its count stays 0 until the file is opened and fetched.
352
+ * is derived from the content (identical to the runner's capture-time counts by
353
+ * construction same diff algorithm). A whole-file side with no synchronous
354
+ * content (offloaded / binary) falls back to the runner's capture-time
355
+ * `linesAdded`/`linesRemoved` — zero when no count exists, which the list
356
+ * renders as no stat.
348
357
  */
349
358
  function toFileDiffEntry(change: FileChange): FileDiffEntry {
350
359
  const changeType =
@@ -370,7 +379,12 @@ function toFileDiffEntry(change: FileChange): FileDiffEntry {
370
379
  return { path: change.path, changeType, additions, deletions };
371
380
  }
372
381
 
373
- return { path: change.path, changeType, additions: 0, deletions: 0 };
382
+ return {
383
+ path: change.path,
384
+ changeType,
385
+ additions: change.linesAdded,
386
+ deletions: change.linesRemoved,
387
+ };
374
388
  }
375
389
 
376
390
  /** Inline text of a side, or null when absent/offloaded/binary. */
@@ -0,0 +1,89 @@
1
+ "use client";
2
+
3
+ import { FileChangeKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
4
+ import { cn } from "@stigmer/theme";
5
+
6
+ /**
7
+ * Shared presentational atoms for the file-review surfaces — the single source
8
+ * for the `+N −M` stat and the change-kind marker, so the review card, the
9
+ * compact list, and the mid-run progress bar can never drift in how they render
10
+ * a file's magnitude or kind.
11
+ */
12
+
13
+ /**
14
+ * The `+N −M` stat for one file (or a whole set), in the same visual vocabulary
15
+ * as the tool-row diff stats. Renders nothing when both counts are zero — the
16
+ * honest signal that no count exists (binary or secret-withheld changes, records
17
+ * captured before counts were stamped) — rather than a misleading `+0 −0`.
18
+ */
19
+ export function FileLineStats({
20
+ linesAdded,
21
+ linesRemoved,
22
+ }: {
23
+ readonly linesAdded: number;
24
+ readonly linesRemoved: number;
25
+ }) {
26
+ if (linesAdded === 0 && linesRemoved === 0) return null;
27
+ return (
28
+ <span
29
+ className="shrink-0 text-xs tabular-nums"
30
+ aria-label={`${linesAdded} added, ${linesRemoved} removed`}
31
+ data-cursor-target="file-review-line-stats"
32
+ >
33
+ <span className="text-diff-added-fg">+{linesAdded}</span>{" "}
34
+ <span className="text-diff-removed-fg">-{linesRemoved}</span>
35
+ </span>
36
+ );
37
+ }
38
+
39
+ /** The kind letter, tone, and a11y name for each wire {@link FileChangeKind}. */
40
+ const KIND_BADGE: Partial<
41
+ Record<FileChangeKind, { letter: string; colorClass: string; label: string }>
42
+ > = {
43
+ [FileChangeKind.ADD]: {
44
+ letter: "A",
45
+ colorClass: "text-diff-added-fg",
46
+ label: "added",
47
+ },
48
+ [FileChangeKind.MODIFY]: {
49
+ letter: "M",
50
+ colorClass: "text-diff-hunk-header-fg",
51
+ label: "modified",
52
+ },
53
+ [FileChangeKind.DELETE]: {
54
+ letter: "D",
55
+ colorClass: "text-diff-removed-fg",
56
+ label: "deleted",
57
+ },
58
+ [FileChangeKind.RENAME]: {
59
+ letter: "R",
60
+ colorClass: "text-diff-hunk-header-fg",
61
+ label: "renamed",
62
+ },
63
+ // A binary change is a modification whose diff is not text; the letter stays
64
+ // M and the binary-ness is told by the row's "Keep anyway" + reason note.
65
+ [FileChangeKind.BINARY_CHANGE]: {
66
+ letter: "M",
67
+ colorClass: "text-diff-hunk-header-fg",
68
+ label: "modified (binary)",
69
+ },
70
+ };
71
+
72
+ /**
73
+ * The single-letter change-kind marker — the same M/A/D visual vocabulary as
74
+ * the version-history `DiffFileList`, extended with R for captured renames.
75
+ * The letter itself is the non-color channel; the full word is exposed to
76
+ * assistive tech. An UNSPECIFIED kind renders nothing rather than guessing.
77
+ */
78
+ export function FileKindBadge({ kind }: { kind: FileChangeKind }) {
79
+ const badge = KIND_BADGE[kind];
80
+ if (!badge) return null;
81
+ return (
82
+ <span
83
+ className={cn("shrink-0 font-mono text-[10px] font-bold", badge.colorClass)}
84
+ aria-label={badge.label}
85
+ >
86
+ {badge.letter}
87
+ </span>
88
+ );
89
+ }
@@ -16,10 +16,11 @@ import {
16
16
  import { toDisplayFileChange } from "@stigmer/sdk";
17
17
  import { cn } from "@stigmer/theme";
18
18
  import { FileChangeDiff } from "./FileChangesView.js";
19
+ import { FileKindBadge, FileLineStats } from "./FileReviewAtoms.js";
20
+ import { FilePathLink } from "./FilePathLink.js";
19
21
  import { DiffSummary } from "../version-history/DiffSummary.js";
20
22
  import { DecisionButton } from "../internal/DecisionButton.js";
21
23
  import { InCardDecisionError } from "../internal/InCardDecisionError.js";
22
- import { splitDisplayPath } from "./file-path-resolver.js";
23
24
  import { fileDecisionKey, type FileDecisionOptions } from "./useFileReview.js";
24
25
  import {
25
26
  changeSetReviewability,
@@ -62,8 +63,8 @@ export interface FileReviewCardProps {
62
63
  *
63
64
  * `MessageThread` passes `false`: the transcript's stamped edit rows already
64
65
  * show every diff in place, so the expanded body collapses to a compact file
65
- * list (kind letter + path + per-file controls) and the card stays purely
66
- * the decision surface. Decision semantics — digests, scopes,
66
+ * list (kind letter + linked path + `+N −M` + per-file controls) and the card
67
+ * stays purely the decision surface. Decision semantics — digests, scopes,
67
68
  * acknowledgments — are identical in both modes; this is presentation only
68
69
  * (opt-in with a backward-compatible default, DD-011).
69
70
  */
@@ -194,11 +195,18 @@ export const FileReviewCard = memo(function FileReviewCard({
194
195
 
195
196
  // The bar starts expanded exactly when the collapsed bar cannot honestly carry
196
197
  // the decision: an incomplete set (binary acknowledgment / blocked files need
197
- // their per-file context) or a review already in progress. A complete set and
198
- // a settled record start collapsed the transcript's stamped rows already
199
- // show what changed, and the expander reveals the per-file detail on demand.
198
+ // their per-file context), a review already in progress, or a multi-file set
199
+ // in compact-list mode its honest decision surface includes the per-file
200
+ // Keep/Discard controls, which must be visible without hunting behind the
201
+ // expander (the docked strip bounds the height, so expanding is cheap there).
202
+ // Diff-rich mode (`showDiffs`) deliberately stays collapsed for a complete
203
+ // multi-file set: its expanded body is every full diff with no height cap
204
+ // (the workflow file-review list), where "Review" is the act of opening it.
205
+ // A settled record always starts collapsed — the transcript's stamped rows
206
+ // already show what changed, and the expander reveals detail on demand.
200
207
  const [expanded, setExpanded] = useState(
201
- () => interactive && (incomplete || decidedCount > 0),
208
+ () =>
209
+ interactive && (incomplete || decidedCount > 0 || (total > 1 && !showDiffs)),
202
210
  );
203
211
  const bodyId = useId();
204
212
 
@@ -251,12 +259,18 @@ export const FileReviewCard = memo(function FileReviewCard({
251
259
  [onSubmit],
252
260
  );
253
261
 
262
+ // The set's aggregate `+N −M`, summed from the capture-time per-file counts
263
+ // (linesAdded/linesRemoved are stamped by the runner with the same diff
264
+ // algorithm the renderers use — see CapturedFileChange). A file with no
265
+ // counts (binary, secret-withheld, or a record predating the fields)
266
+ // contributes zero; when NO file has counts the aggregate is hidden rather
267
+ // than shown as a dishonest "+0 −0".
254
268
  const totals = useMemo(() => {
255
269
  let additions = 0;
256
270
  let deletions = 0;
257
271
  for (const c of changes) {
258
- if (c.kind === FileChangeKind.ADD) additions += 1;
259
- else if (c.kind === FileChangeKind.DELETE) deletions += 1;
272
+ additions += c.linesAdded;
273
+ deletions += c.linesRemoved;
260
274
  }
261
275
  return { additions, deletions };
262
276
  }, [changes]);
@@ -311,8 +325,16 @@ export const FileReviewCard = memo(function FileReviewCard({
311
325
  <span className="shrink-0 font-medium text-foreground">
312
326
  {interactive ? "Review file changes" : "File changes"}
313
327
  </span>
314
- <span className="min-w-0 flex-1 truncate text-muted-foreground">
315
- {summary}
328
+ {/* The flexible middle: the summary (truncating) plus the set's
329
+ aggregate +N −M, visible even while collapsed so the bar carries
330
+ the magnitude of what is being decided, not just the file count.
331
+ Hidden when no file has counts (FileLineStats). */}
332
+ <span className="flex min-w-0 flex-1 items-center gap-2">
333
+ <span className="min-w-0 truncate text-muted-foreground">{summary}</span>
334
+ <FileLineStats
335
+ linesAdded={totals.additions}
336
+ linesRemoved={totals.deletions}
337
+ />
316
338
  </span>
317
339
 
318
340
  {interactive && showBulkControls && (
@@ -390,9 +412,11 @@ export const FileReviewCard = memo(function FileReviewCard({
390
412
  id={bodyId}
391
413
  className="space-y-2 border-t border-border-muted px-3 py-2.5"
392
414
  >
393
- {/* The list body carries no summary header: the collapsed bar's
394
- file count is the summary, and per-file counts would require
395
- fetching offloaded bodies just to decorate a list. */}
415
+ {/* The list body carries no summary header: the bar already shows
416
+ the file count and the aggregate +N −M (per-file counts are
417
+ capture-time facts on the wire linesAdded/linesRemoved so no
418
+ body fetch is ever needed to decorate the list). Diff mode keeps
419
+ its fuller DiffSummary line above the rendered diffs. */}
396
420
  {showDiffs && (
397
421
  <DiffSummary
398
422
  fileCount={total}
@@ -640,15 +664,17 @@ function CapturedChangeDiff({ change }: { change: CapturedFileChange }) {
640
664
  // ---------------------------------------------------------------------------
641
665
 
642
666
  /**
643
- * One file of the change set as a compact, deliberately inert list line: kind
644
- * letter, path, provenance badge, and an optional trailing slot (the verdict
667
+ * One file of the change set as a compact list line: kind letter, linked path,
668
+ * `+N −M` stats, provenance badge, and an optional trailing slot (the verdict
645
669
  * control while reviewing; the committed verdict once settled).
646
670
  *
647
- * The path is plain text — not `FilePathLink` — because the list is an
648
- * inventory of what the decision covers, not a navigation surface: the diffs
649
- * live on the transcript's stamped edit rows. The full path stays available on
650
- * hover via `title`. A rename shows its source path so the move reads in one
651
- * line.
671
+ * The path renders through `FilePathLink` — the platform-wide path idiom — so
672
+ * a reviewer can jump from the list to the file itself (the session viewer
673
+ * routes the click into the panel's diff-first viewer; GitHub/copy is the
674
+ * fallback) without leaving the decision surface. Deciding and navigating
675
+ * coexist: the link stops click propagation, so opening a file never fights
676
+ * the row's Keep/Discard controls. A rename shows its source path so the move
677
+ * reads in one line.
652
678
  */
653
679
  function FileListRow({
654
680
  change,
@@ -658,7 +684,6 @@ function FileListRow({
658
684
  readonly trailing?: React.ReactNode;
659
685
  }) {
660
686
  const path = change.pathAfter || change.pathBefore;
661
- const { dir, base } = splitDisplayPath(path);
662
687
  const renamedFrom =
663
688
  change.kind === FileChangeKind.RENAME && change.pathBefore !== change.pathAfter
664
689
  ? change.pathBefore
@@ -669,80 +694,22 @@ function FileListRow({
669
694
  data-cursor-target="file-review-list-row"
670
695
  >
671
696
  <FileKindBadge kind={change.kind} />
672
- {/* The directory truncates (context); the base never shrinks (identity) —
673
- the same filename-first rule FilePathLink established. */}
674
- <span
675
- className="flex min-w-0 flex-1 items-center font-mono text-xs text-foreground"
676
- title={path}
677
- >
678
- {renamedFrom && (
679
- <span className="min-w-0 truncate text-muted-foreground-faint">
680
- {renamedFrom}&nbsp;→&nbsp;
681
- </span>
682
- )}
683
- {dir && (
684
- <span className="min-w-0 truncate text-muted-foreground-faint">{dir}</span>
685
- )}
686
- <span className="shrink-0">{base}</span>
687
- </span>
697
+ {renamedFrom && (
698
+ <span className="min-w-0 truncate font-mono text-xs text-muted-foreground-faint">
699
+ {renamedFrom}&nbsp;→&nbsp;
700
+ </span>
701
+ )}
702
+ <FilePathLink path={path} dirDisplay="dim" className="min-w-0 flex-1 text-xs" />
703
+ <FileLineStats
704
+ linesAdded={change.linesAdded}
705
+ linesRemoved={change.linesRemoved}
706
+ />
688
707
  <CaptureBadge change={change} />
689
708
  {trailing}
690
709
  </div>
691
710
  );
692
711
  }
693
712
 
694
- /** The kind letter, tone, and a11y name for each wire {@link FileChangeKind}. */
695
- const KIND_BADGE: Partial<
696
- Record<FileChangeKind, { letter: string; colorClass: string; label: string }>
697
- > = {
698
- [FileChangeKind.ADD]: {
699
- letter: "A",
700
- colorClass: "text-diff-added-fg",
701
- label: "added",
702
- },
703
- [FileChangeKind.MODIFY]: {
704
- letter: "M",
705
- colorClass: "text-diff-hunk-header-fg",
706
- label: "modified",
707
- },
708
- [FileChangeKind.DELETE]: {
709
- letter: "D",
710
- colorClass: "text-diff-removed-fg",
711
- label: "deleted",
712
- },
713
- [FileChangeKind.RENAME]: {
714
- letter: "R",
715
- colorClass: "text-diff-hunk-header-fg",
716
- label: "renamed",
717
- },
718
- // A binary change is a modification whose diff is not text; the letter stays
719
- // M and the binary-ness is told by the row's "Keep anyway" + reason note.
720
- [FileChangeKind.BINARY_CHANGE]: {
721
- letter: "M",
722
- colorClass: "text-diff-hunk-header-fg",
723
- label: "modified (binary)",
724
- },
725
- };
726
-
727
- /**
728
- * The single-letter change-kind marker — the same M/A/D visual vocabulary as
729
- * the version-history `DiffFileList`, extended with R for captured renames.
730
- * The letter itself is the non-color channel; the full word is exposed to
731
- * assistive tech. An UNSPECIFIED kind renders nothing rather than guessing.
732
- */
733
- function FileKindBadge({ kind }: { kind: FileChangeKind }) {
734
- const badge = KIND_BADGE[kind];
735
- if (!badge) return null;
736
- return (
737
- <span
738
- className={cn("shrink-0 font-mono text-[10px] font-bold", badge.colorClass)}
739
- aria-label={badge.label}
740
- >
741
- {badge.letter}
742
- </span>
743
- );
744
- }
745
-
746
713
  /**
747
714
  * A change's committed verdict as a static badge: APPROVE reads "Kept" (the
748
715
  * bytes were reconciled into the workspace), REJECT reads "Discarded" (reverted