canopycms 0.0.60 → 0.0.61-int.74

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 (218) hide show
  1. package/dist/api/__test__/mock-client.d.ts +29 -0
  2. package/dist/api/__test__/mock-client.d.ts.map +1 -1
  3. package/dist/api/__test__/mock-client.js +51 -0
  4. package/dist/api/__test__/mock-client.js.map +1 -1
  5. package/dist/api/admin-branch-health.d.ts +65 -0
  6. package/dist/api/admin-branch-health.d.ts.map +1 -0
  7. package/dist/api/admin-branch-health.js +448 -0
  8. package/dist/api/admin-branch-health.js.map +1 -0
  9. package/dist/api/admin.d.ts +136 -0
  10. package/dist/api/admin.d.ts.map +1 -0
  11. package/dist/api/admin.js +338 -0
  12. package/dist/api/admin.js.map +1 -0
  13. package/dist/api/assets.d.ts.map +1 -1
  14. package/dist/api/assets.js +4 -0
  15. package/dist/api/assets.js.map +1 -1
  16. package/dist/api/branch-merge.d.ts +6 -0
  17. package/dist/api/branch-merge.d.ts.map +1 -1
  18. package/dist/api/branch-merge.js +13 -3
  19. package/dist/api/branch-merge.js.map +1 -1
  20. package/dist/api/branch-status.d.ts.map +1 -1
  21. package/dist/api/branch-status.js +15 -5
  22. package/dist/api/branch-status.js.map +1 -1
  23. package/dist/api/branch-withdraw.d.ts +6 -0
  24. package/dist/api/branch-withdraw.d.ts.map +1 -1
  25. package/dist/api/branch-withdraw.js +15 -3
  26. package/dist/api/branch-withdraw.js.map +1 -1
  27. package/dist/api/branch.d.ts +11 -1
  28. package/dist/api/branch.d.ts.map +1 -1
  29. package/dist/api/branch.js +70 -4
  30. package/dist/api/branch.js.map +1 -1
  31. package/dist/api/client.d.ts +34 -0
  32. package/dist/api/client.d.ts.map +1 -1
  33. package/dist/api/client.js +47 -0
  34. package/dist/api/client.js.map +1 -1
  35. package/dist/api/comments.d.ts.map +1 -1
  36. package/dist/api/comments.js +4 -0
  37. package/dist/api/comments.js.map +1 -1
  38. package/dist/api/content.d.ts.map +1 -1
  39. package/dist/api/content.js +4 -4
  40. package/dist/api/content.js.map +1 -1
  41. package/dist/api/entries.js +1 -1
  42. package/dist/api/entries.js.map +1 -1
  43. package/dist/api/github-sync.d.ts.map +1 -1
  44. package/dist/api/github-sync.js +14 -3
  45. package/dist/api/github-sync.js.map +1 -1
  46. package/dist/api/guards.d.ts +7 -1
  47. package/dist/api/guards.d.ts.map +1 -1
  48. package/dist/api/guards.js +54 -0
  49. package/dist/api/guards.js.map +1 -1
  50. package/dist/api/index.d.ts +1 -0
  51. package/dist/api/index.d.ts.map +1 -1
  52. package/dist/api/index.js +0 -1
  53. package/dist/api/index.js.map +1 -1
  54. package/dist/api/schema.js +7 -7
  55. package/dist/api/schema.js.map +1 -1
  56. package/dist/authorization/branch.d.ts +14 -1
  57. package/dist/authorization/branch.d.ts.map +1 -1
  58. package/dist/authorization/branch.js +5 -3
  59. package/dist/authorization/branch.js.map +1 -1
  60. package/dist/authorization/index.d.ts +1 -0
  61. package/dist/authorization/index.d.ts.map +1 -1
  62. package/dist/authorization/index.js +2 -0
  63. package/dist/authorization/index.js.map +1 -1
  64. package/dist/authorization/protected-branch.d.ts +39 -0
  65. package/dist/authorization/protected-branch.d.ts.map +1 -0
  66. package/dist/authorization/protected-branch.js +43 -0
  67. package/dist/authorization/protected-branch.js.map +1 -0
  68. package/dist/branch-health.d.ts +78 -0
  69. package/dist/branch-health.d.ts.map +1 -0
  70. package/dist/branch-health.js +151 -0
  71. package/dist/branch-health.js.map +1 -0
  72. package/dist/branch-metadata.d.ts +20 -0
  73. package/dist/branch-metadata.d.ts.map +1 -1
  74. package/dist/branch-metadata.js +21 -1
  75. package/dist/branch-metadata.js.map +1 -1
  76. package/dist/branch-registry.d.ts.map +1 -1
  77. package/dist/branch-registry.js +13 -1
  78. package/dist/branch-registry.js.map +1 -1
  79. package/dist/cli/cli.js +154 -13
  80. package/dist/cli/generate-ai-content.js +54 -10
  81. package/dist/cli/init.js +72 -0
  82. package/dist/cli/sync.d.ts.map +1 -1
  83. package/dist/cli/sync.js +4 -1
  84. package/dist/cli/sync.js.map +1 -1
  85. package/dist/content-store.d.ts +16 -0
  86. package/dist/content-store.d.ts.map +1 -1
  87. package/dist/content-store.js +22 -6
  88. package/dist/content-store.js.map +1 -1
  89. package/dist/editor/BranchManager.d.ts +9 -1
  90. package/dist/editor/BranchManager.d.ts.map +1 -1
  91. package/dist/editor/BranchManager.js +20 -9
  92. package/dist/editor/BranchManager.js.map +1 -1
  93. package/dist/editor/CommentsPanel.d.ts.map +1 -1
  94. package/dist/editor/CommentsPanel.js +4 -12
  95. package/dist/editor/CommentsPanel.js.map +1 -1
  96. package/dist/editor/Editor.d.ts.map +1 -1
  97. package/dist/editor/Editor.js +46 -10
  98. package/dist/editor/Editor.js.map +1 -1
  99. package/dist/editor/EntryNavigator.d.ts +7 -0
  100. package/dist/editor/EntryNavigator.d.ts.map +1 -1
  101. package/dist/editor/EntryNavigator.js +17 -5
  102. package/dist/editor/EntryNavigator.js.map +1 -1
  103. package/dist/editor/FormRenderer.d.ts.map +1 -1
  104. package/dist/editor/FormRenderer.js +4 -0
  105. package/dist/editor/FormRenderer.js.map +1 -1
  106. package/dist/editor/admin/SystemHealthPanel.d.ts +6 -0
  107. package/dist/editor/admin/SystemHealthPanel.d.ts.map +1 -0
  108. package/dist/editor/admin/SystemHealthPanel.js +234 -0
  109. package/dist/editor/admin/SystemHealthPanel.js.map +1 -0
  110. package/dist/editor/admin/useSystemHealth.d.ts +40 -0
  111. package/dist/editor/admin/useSystemHealth.d.ts.map +1 -0
  112. package/dist/editor/admin/useSystemHealth.js +205 -0
  113. package/dist/editor/admin/useSystemHealth.js.map +1 -0
  114. package/dist/editor/comments/FieldWrapper.d.ts.map +1 -1
  115. package/dist/editor/comments/FieldWrapper.js +1 -1
  116. package/dist/editor/comments/FieldWrapper.js.map +1 -1
  117. package/dist/editor/comments/InlineCommentThread.d.ts.map +1 -1
  118. package/dist/editor/comments/InlineCommentThread.js +2 -21
  119. package/dist/editor/comments/InlineCommentThread.js.map +1 -1
  120. package/dist/editor/comments/ThreadCarousel.d.ts +2 -0
  121. package/dist/editor/comments/ThreadCarousel.d.ts.map +1 -1
  122. package/dist/editor/comments/ThreadCarousel.js +5 -2
  123. package/dist/editor/comments/ThreadCarousel.js.map +1 -1
  124. package/dist/editor/components/EditorHeader.d.ts +11 -0
  125. package/dist/editor/components/EditorHeader.d.ts.map +1 -1
  126. package/dist/editor/components/EditorHeader.js +75 -41
  127. package/dist/editor/components/EditorHeader.js.map +1 -1
  128. package/dist/editor/components/EditorSidebar.d.ts +7 -1
  129. package/dist/editor/components/EditorSidebar.d.ts.map +1 -1
  130. package/dist/editor/components/EditorSidebar.js +3 -3
  131. package/dist/editor/components/EditorSidebar.js.map +1 -1
  132. package/dist/editor/fields/ImageField.d.ts.map +1 -1
  133. package/dist/editor/fields/ImageField.js +4 -1
  134. package/dist/editor/fields/ImageField.js.map +1 -1
  135. package/dist/editor/fields/StringListField.d.ts +20 -0
  136. package/dist/editor/fields/StringListField.d.ts.map +1 -0
  137. package/dist/editor/fields/StringListField.js +25 -0
  138. package/dist/editor/fields/StringListField.js.map +1 -0
  139. package/dist/editor/hooks/useBranchActions.d.ts.map +1 -1
  140. package/dist/editor/hooks/useBranchActions.js +8 -2
  141. package/dist/editor/hooks/useBranchActions.js.map +1 -1
  142. package/dist/editor/hooks/useBranchManager.d.ts +12 -3
  143. package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
  144. package/dist/editor/hooks/useBranchManager.js +16 -1
  145. package/dist/editor/hooks/useBranchManager.js.map +1 -1
  146. package/dist/editor/hooks/useDraftManager.d.ts +7 -0
  147. package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
  148. package/dist/editor/hooks/useDraftManager.js +57 -3
  149. package/dist/editor/hooks/useDraftManager.js.map +1 -1
  150. package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
  151. package/dist/editor/hooks/useEntryManager.js +25 -7
  152. package/dist/editor/hooks/useEntryManager.js.map +1 -1
  153. package/dist/editor/media/AssetCard.d.ts.map +1 -1
  154. package/dist/editor/media/AssetCard.js +23 -2
  155. package/dist/editor/media/AssetCard.js.map +1 -1
  156. package/dist/editor/relative-time.d.ts +8 -0
  157. package/dist/editor/relative-time.d.ts.map +1 -0
  158. package/dist/editor/relative-time.js +26 -0
  159. package/dist/editor/relative-time.js.map +1 -0
  160. package/dist/git-manager.d.ts.map +1 -1
  161. package/dist/git-manager.js +10 -2
  162. package/dist/git-manager.js.map +1 -1
  163. package/dist/http/handler.d.ts.map +1 -1
  164. package/dist/http/handler.js +20 -9
  165. package/dist/http/handler.js.map +1 -1
  166. package/dist/http/router.d.ts.map +1 -1
  167. package/dist/http/router.js +2 -0
  168. package/dist/http/router.js.map +1 -1
  169. package/dist/paths/branch-name.d.ts +20 -0
  170. package/dist/paths/branch-name.d.ts.map +1 -0
  171. package/dist/paths/branch-name.js +24 -0
  172. package/dist/paths/branch-name.js.map +1 -0
  173. package/dist/paths/branch.d.ts +2 -8
  174. package/dist/paths/branch.d.ts.map +1 -1
  175. package/dist/paths/branch.js +6 -12
  176. package/dist/paths/branch.js.map +1 -1
  177. package/dist/paths/index.d.ts +2 -1
  178. package/dist/paths/index.d.ts.map +1 -1
  179. package/dist/paths/index.js +4 -1
  180. package/dist/paths/index.js.map +1 -1
  181. package/dist/services.js +9 -1
  182. package/dist/services.js.map +1 -1
  183. package/dist/task-queue/index.d.ts +2 -2
  184. package/dist/task-queue/index.d.ts.map +1 -1
  185. package/dist/task-queue/index.js +1 -1
  186. package/dist/task-queue/index.js.map +1 -1
  187. package/dist/task-queue/task-queue.d.ts +37 -1
  188. package/dist/task-queue/task-queue.d.ts.map +1 -1
  189. package/dist/task-queue/task-queue.js +104 -0
  190. package/dist/task-queue/task-queue.js.map +1 -1
  191. package/dist/task-queue/types.d.ts +11 -0
  192. package/dist/task-queue/types.d.ts.map +1 -1
  193. package/dist/types.d.ts +41 -0
  194. package/dist/types.d.ts.map +1 -1
  195. package/dist/utils/occ-json-write.d.ts.map +1 -1
  196. package/dist/utils/occ-json-write.js +7 -0
  197. package/dist/utils/occ-json-write.js.map +1 -1
  198. package/dist/utils/provisioning-lock.d.ts +19 -0
  199. package/dist/utils/provisioning-lock.d.ts.map +1 -1
  200. package/dist/utils/provisioning-lock.js +26 -0
  201. package/dist/utils/provisioning-lock.js.map +1 -1
  202. package/dist/validation/reference-validator.d.ts +17 -1
  203. package/dist/validation/reference-validator.d.ts.map +1 -1
  204. package/dist/validation/reference-validator.js +33 -10
  205. package/dist/validation/reference-validator.js.map +1 -1
  206. package/dist/worker/cms-worker.d.ts +38 -0
  207. package/dist/worker/cms-worker.d.ts.map +1 -1
  208. package/dist/worker/cms-worker.js +328 -25
  209. package/dist/worker/cms-worker.js.map +1 -1
  210. package/dist/worker/task-queue.d.ts +3 -3
  211. package/dist/worker/task-queue.d.ts.map +1 -1
  212. package/dist/worker/task-queue.js +2 -2
  213. package/dist/worker/task-queue.js.map +1 -1
  214. package/dist/worker/worker-status.d.ts +48 -0
  215. package/dist/worker/worker-status.d.ts.map +1 -0
  216. package/dist/worker/worker-status.js +53 -0
  217. package/dist/worker/worker-status.js.map +1 -0
  218. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FormRenderer.js","sourceRoot":"","sources":["../../src/editor/FormRenderer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FormRenderer.js","sourceRoot":"","sources":["../../src/editor/FormRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface SystemHealthPanelProps {
2
+ opened: boolean;
3
+ onClose: () => void;
4
+ }
5
+ export declare function SystemHealthPanel({ opened, onClose }: SystemHealthPanelProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=SystemHealthPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemHealthPanel.d.ts","sourceRoot":"","sources":["../../../src/editor/admin/SystemHealthPanel.tsx"],"names":[],"mappings":"AAwKA,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CAuB5E"}
@@ -0,0 +1,234 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * SystemHealthPanel - Admin-only modal surfacing the observability
5
+ * endpoints from PR-A1..A4: task-queue/worker liveness (Overview), task
6
+ * recovery (Tasks), and branch-directory recovery (Branches).
7
+ *
8
+ * Visibility is entirely the caller's responsibility -- Editor.tsx only
9
+ * renders/opens this for admins (see isAdmin(userContext?.groups) there).
10
+ * This component does not re-check that itself, same as GroupManager and
11
+ * PermissionManager rely on their callers for that gate.
12
+ */
13
+ import { Alert, Badge, Button, Code, Group, Loader, Modal, Paper, SegmentedControl, SimpleGrid, Spoiler, Stack, Table, Tabs, Text, ThemeIcon, Tooltip, } from '@mantine/core';
14
+ import { IconAlertCircle, IconAlertTriangle } from '@tabler/icons-react';
15
+ import { modals } from '@mantine/modals';
16
+ import { useSystemHealth, } from './useSystemHealth.js';
17
+ // ============================================================================
18
+ // Small pure helpers
19
+ // ============================================================================
20
+ const PROVISIONING_LOCK_FRESH_MS = 5 * 60_000;
21
+ const ORPHAN_YOUTH_THRESHOLD_MS = 15 * 60_000;
22
+ function truncate(value, max) {
23
+ return value.length > max ? `${value.slice(0, max)}…` : value;
24
+ }
25
+ /** Humanize a millisecond duration as e.g. "45s", "12m", "3h 5m", "2d 4h". */
26
+ function formatAgeMs(ms) {
27
+ const totalSeconds = Math.round(ms / 1000);
28
+ if (totalSeconds < 60)
29
+ return `${totalSeconds}s`;
30
+ const totalMinutes = Math.floor(totalSeconds / 60);
31
+ if (totalMinutes < 60)
32
+ return `${totalMinutes}m`;
33
+ const totalHours = Math.floor(totalMinutes / 60);
34
+ if (totalHours < 24)
35
+ return `${totalHours}h ${totalMinutes % 60}m`;
36
+ const totalDays = Math.floor(totalHours / 24);
37
+ return `${totalDays}d ${totalHours % 24}h`;
38
+ }
39
+ /**
40
+ * [LOW-2] Whether the Purge button should be disabled for a corrupt-metadata
41
+ * or orphan row, and the tooltip explaining why.
42
+ * - Base branch: never purgeable -- the server already 400s
43
+ * ('The base branch directory can never be purged', see
44
+ * purgeBranchDirHandler in api/admin-branch-health.ts); this is UX
45
+ * honesty, not a new rail.
46
+ * - Fresh provisioning lock: provisioning may genuinely be in progress
47
+ * (mirrors the server's [H1] freshness rail) -- applies to BOTH kinds,
48
+ * not just orphans.
49
+ * - Orphan-only youth rail: a directory younger than
50
+ * ORPHAN_YOUTH_THRESHOLD_MS may still be a clone in progress that hasn't
51
+ * written branch.json yet. Corrupt-metadata dirs are exempt from this
52
+ * server-side (a parseable-then-corrupted file isn't a mid-clone
53
+ * signature), so they're exempt here too.
54
+ */
55
+ function purgeGateFor(entry) {
56
+ if (entry.isBaseBranch) {
57
+ return { disabled: true, tooltip: 'The base branch can never be purged' };
58
+ }
59
+ const lockFresh = !!entry.provisioningLock && entry.provisioningLock.ageMs < PROVISIONING_LOCK_FRESH_MS;
60
+ if (entry.kind === 'orphan') {
61
+ const tooYoung = (entry.ageMs ?? 0) < ORPHAN_YOUTH_THRESHOLD_MS;
62
+ const disabled = lockFresh || tooYoung;
63
+ return { disabled, tooltip: disabled ? 'May be a clone in progress' : undefined };
64
+ }
65
+ return {
66
+ disabled: lockFresh,
67
+ tooltip: lockFresh ? 'Provisioning may be in progress' : undefined,
68
+ };
69
+ }
70
+ function workerLivenessBadge(worker, mode) {
71
+ if (mode === 'dev') {
72
+ return { color: 'gray', label: `Worker: ${worker.state}` };
73
+ }
74
+ switch (worker.state) {
75
+ case 'alive':
76
+ return { color: 'green', label: 'Worker: alive' };
77
+ case 'stale':
78
+ return { color: 'yellow', label: 'Worker: stale (possible crash)' };
79
+ case 'absent':
80
+ default:
81
+ return { color: 'red', label: 'Worker: absent' };
82
+ }
83
+ }
84
+ // Mirrors BranchManager.tsx's statusColorMap -- kept local (not exported
85
+ // there) rather than shared, same tiny lookup either way.
86
+ const branchStatusColorMap = {
87
+ editing: 'brand',
88
+ submitted: 'green',
89
+ approved: 'teal',
90
+ locked: 'yellow',
91
+ };
92
+ const TASK_STATUS_OPTIONS = [
93
+ { label: 'Pending', value: 'pending' },
94
+ { label: 'Processing', value: 'processing' },
95
+ { label: 'Completed', value: 'completed' },
96
+ { label: 'Failed', value: 'failed' },
97
+ { label: 'Corrupt', value: 'corrupt' },
98
+ ];
99
+ const TASK_STATUS_VALUES = TASK_STATUS_OPTIONS.map((o) => o.value);
100
+ function isAdminTaskStatus(value) {
101
+ return TASK_STATUS_VALUES.includes(value);
102
+ }
103
+ // ============================================================================
104
+ // Confirm-modal copy (races/limitations these actions accept -- see
105
+ // api/admin.ts and api/admin-branch-health.ts's handler docstrings)
106
+ // ============================================================================
107
+ const RETRY_CONFIRM_TEXT = 'Retrying may duplicate work if the task also runs another way; task actions are safe to run twice.';
108
+ function deleteConfirmText(status) {
109
+ if (status === 'pending') {
110
+ return 'The worker may already have picked this task up — deleting now does not guarantee it never runs, and in rare cases it can still run after the next worker restart.';
111
+ }
112
+ return 'This permanently deletes the task file. This cannot be undone.';
113
+ }
114
+ const MARK_MERGED_CONFIRM_TEXT = 'In production the server cannot verify the PR actually merged (no GitHub access from the API) — confirm the PR is merged on GitHub first.';
115
+ const REPAIR_CONFIRM_TEXT = "Recreates metadata with defaults: status becomes 'editing', you become the creator, branch ACLs are reset. The corrupt file is archived alongside for forensics.";
116
+ const PURGE_CONFIRM_TEXT = 'The directory is moved to a hidden trash name and kept for 30 days, then deleted. Any git work inside was never pushed and will be lost when the trash is swept.';
117
+ export function SystemHealthPanel({ opened, onClose }) {
118
+ const health = useSystemHealth({ isOpen: opened });
119
+ return (_jsx(Modal, { opened: opened, onClose: onClose, title: "System health", size: "xl", children: _jsxs(Tabs, { defaultValue: "overview", children: [_jsxs(Tabs.List, { children: [_jsx(Tabs.Tab, { value: "overview", children: "Overview" }), _jsx(Tabs.Tab, { value: "tasks", children: "Tasks" }), _jsx(Tabs.Tab, { value: "branches", children: "Branches" })] }), _jsx(Tabs.Panel, { value: "overview", pt: "md", children: _jsx(OverviewTab, { health: health }) }), _jsx(Tabs.Panel, { value: "tasks", pt: "md", children: _jsx(TasksTab, { health: health }) }), _jsx(Tabs.Panel, { value: "branches", pt: "md", children: _jsx(BranchesTab, { health: health }) })] }) }));
120
+ }
121
+ // ============================================================================
122
+ // Overview tab
123
+ // ============================================================================
124
+ function OverviewTab({ health }) {
125
+ const { status, statusLoading, isRecentFatalError, error, refresh } = health;
126
+ if (!status && statusLoading) {
127
+ return (_jsxs(Group, { justify: "center", py: "xl", children: [_jsx(Loader, { size: "md" }), _jsx(Text, { size: "sm", c: "dimmed", children: "Loading status..." })] }));
128
+ }
129
+ if (!status) {
130
+ return (_jsxs(Stack, { align: "center", py: "xl", gap: "sm", children: [_jsx(Text, { size: "sm", c: "dimmed", children: "No status available." }), _jsx(Button, { size: "xs", variant: "light", onClick: () => refresh(), children: "Refresh" })] }));
131
+ }
132
+ const liveness = workerLivenessBadge(status.worker, status.mode);
133
+ const lastFatalError = status.workerStatus?.lastFatalError;
134
+ const lastGitSync = status.workerStatus?.lastGitSync;
135
+ return (_jsxs(Stack, { gap: "md", children: [error && (_jsx(Alert, { color: "red", icon: _jsx(IconAlertCircle, { size: 16 }), variant: "light", children: error })), _jsxs(Group, { gap: "sm", children: [_jsx(Badge, { color: liveness.color, variant: "light", size: "lg", children: liveness.label }), status.mode === 'dev' && (_jsx(Text, { size: "xs", c: "dimmed", children: "No worker runs in dev mode" }))] }), isRecentFatalError && lastFatalError && (_jsxs(Alert, { color: "red", icon: _jsx(IconAlertCircle, { size: 16 }), title: "Worker crash detected", children: [_jsx(Text, { size: "sm", children: lastFatalError.message }), _jsxs(Text, { size: "xs", c: "dimmed", mt: 4, children: ["at ", lastFatalError.at, " (", lastFatalError.phase, ")"] })] })), status.statusReadError && (_jsxs(Text, { size: "xs", c: "orange", children: ["Warning: could not read worker status (", status.statusReadError, ")"] })), status.workerStatus?.lastGitSyncError && (_jsxs(Alert, { color: "orange", icon: _jsx(IconAlertCircle, { size: 16 }), title: "Last git sync failed", children: [_jsx(Text, { size: "sm", children: status.workerStatus.lastGitSyncError.message }), _jsxs(Text, { size: "xs", c: "dimmed", mt: 4, children: ["at ", status.workerStatus.lastGitSyncError.at] })] })), lastGitSync && (_jsxs(Paper, { withBorder: true, p: "sm", radius: "md", children: [_jsx(Text, { size: "sm", fw: 600, children: "Last git sync" }), _jsxs(Text, { size: "xs", c: "dimmed", children: [status.workerStatus?.lastGitSyncAt ?? 'unknown time', " \u00B7 ", lastGitSync.durationMs, "ms \u00B7", ' ', lastGitSync.rebased.length, " rebased \u00B7 ", lastGitSync.skippedDirty.length, " skipped (dirty)"] }), lastGitSync.failed.length > 0 && (_jsx(Spoiler, { maxHeight: 0, showLabel: `${lastGitSync.failed.length} failed — show details`, hideLabel: "Hide", children: _jsx(Stack, { gap: 4, mt: 4, children: lastGitSync.failed.map((f) => (_jsxs(Text, { size: "xs", c: "red", children: [f.branch, ": ", f.error] }, f.branch))) }) }))] })), _jsx(SimpleGrid, { cols: 5, spacing: "xs", children: ['pending', 'processing', 'completed', 'failed', 'corrupt'].map((key) => (_jsxs(Paper, { withBorder: true, p: "xs", radius: "md", ta: "center", children: [_jsx(Text, { size: "xs", c: "dimmed", tt: "capitalize", children: key }), _jsx(Text, { size: "lg", fw: 700, c: (key === 'failed' || key === 'corrupt') && status.queue[key] > 0 ? 'red' : undefined, children: status.queue[key] })] }, key))) }), status.queue.oldestPendingAgeMs !== undefined && (_jsxs(Text, { size: "xs", c: "dimmed", children: ["Oldest pending task: ", formatAgeMs(status.queue.oldestPendingAgeMs), " old"] })), _jsxs(Group, { justify: "space-between", align: "center", children: [_jsxs(Text, { size: "xs", c: "dimmed", children: ["Generated at ", status.generatedAt] }), _jsx(Button, { size: "xs", variant: "light", onClick: () => refresh(), loading: statusLoading, children: "Refresh" })] }), _jsx(Text, { size: "xs", c: "dimmed", children: "Data may lag up to ~60s (shared-filesystem caching)" })] }));
136
+ }
137
+ // ============================================================================
138
+ // Tasks tab
139
+ // ============================================================================
140
+ function TasksTab({ health }) {
141
+ const { taskStatus, setTaskStatus, tasks, tasksLoading } = health;
142
+ const isCorrupt = taskStatus === 'corrupt';
143
+ const taskRows = tasks?.tasks ?? [];
144
+ const corruptRows = tasks?.corruptFiles ?? [];
145
+ const isEmpty = isCorrupt ? corruptRows.length === 0 : taskRows.length === 0;
146
+ const canDelete = taskStatus === 'pending' || taskStatus === 'failed' || taskStatus === 'corrupt';
147
+ const handleRetryClick = (task) => {
148
+ modals.openConfirmModal({
149
+ title: 'Retry task',
150
+ children: _jsx(Text, { size: "sm", children: RETRY_CONFIRM_TEXT }),
151
+ labels: { confirm: 'Retry', cancel: 'Cancel' },
152
+ confirmProps: { color: 'brand' },
153
+ onConfirm: () => health.retryTask(task.id),
154
+ });
155
+ };
156
+ const handleDeleteClick = (status, fileName) => {
157
+ modals.openConfirmModal({
158
+ title: 'Delete task file',
159
+ children: _jsx(Text, { size: "sm", children: deleteConfirmText(status) }),
160
+ labels: { confirm: 'Delete', cancel: 'Cancel' },
161
+ confirmProps: { color: 'red' },
162
+ onConfirm: () => health.deleteTask(status, fileName),
163
+ });
164
+ };
165
+ return (_jsxs(Stack, { gap: "md", children: [_jsx(SegmentedControl, { data: TASK_STATUS_OPTIONS, value: taskStatus, onChange: (value) => {
166
+ if (isAdminTaskStatus(value))
167
+ setTaskStatus(value);
168
+ } }), tasksLoading && taskRows.length === 0 && corruptRows.length === 0 ? (_jsxs(Group, { justify: "center", py: "xl", children: [_jsx(Loader, { size: "sm" }), _jsx(Text, { size: "sm", c: "dimmed", children: "Loading tasks..." })] })) : isEmpty ? (_jsxs(Text, { size: "sm", c: "dimmed", py: "md", children: ["No ", taskStatus, " tasks."] })) : (_jsx(Table.ScrollContainer, { minWidth: 600, children: _jsxs(Table, { children: [_jsx(Table.Thead, { children: _jsx(Table.Tr, { children: isCorrupt ? (_jsxs(_Fragment, { children: [_jsx(Table.Th, { children: "File" }), _jsx(Table.Th, { children: "Size" }), _jsx(Table.Th, { children: "Modified" }), _jsx(Table.Th, { children: "Raw snippet" }), _jsx(Table.Th, { children: "Actions" })] })) : (_jsxs(_Fragment, { children: [_jsx(Table.Th, { children: "ID" }), _jsx(Table.Th, { children: "Action" }), _jsx(Table.Th, { children: "Created" }), _jsx(Table.Th, { children: "Retries" }), _jsx(Table.Th, { children: "Error" }), _jsx(Table.Th, { children: "Actions" })] })) }) }), _jsx(Table.Tbody, { children: isCorrupt
169
+ ? corruptRows.map((file) => (_jsxs(Table.Tr, { children: [_jsx(Table.Td, { children: _jsx("span", { title: file.fileName, children: truncate(file.fileName, 30) }) }), _jsxs(Table.Td, { children: [file.size, " bytes"] }), _jsx(Table.Td, { children: file.mtime }), _jsx(Table.Td, { children: _jsx(Code, { block: true, style: { maxWidth: 320, whiteSpace: 'pre-wrap' }, children: file.rawSnippet }) }), _jsx(Table.Td, { children: _jsx(Button, { size: "xs", variant: "light", color: "red", "data-testid": `delete-task-${file.fileName}`, onClick: () => handleDeleteClick('corrupt', file.fileName), children: "Delete" }) })] }, file.fileName)))
170
+ : taskRows.map((task) => (_jsxs(Table.Tr, { children: [_jsx(Table.Td, { children: _jsx("span", { title: task.id, children: truncate(task.id, 12) }) }), _jsx(Table.Td, { children: task.action }), _jsx(Table.Td, { children: task.createdAt }), _jsx(Table.Td, { children: task.retryCount ?? 0 }), _jsx(Table.Td, { children: task.error ? (_jsx(Tooltip, { label: task.error, multiline: true, maw: 400, children: _jsx(Text, { size: "xs", style: { cursor: 'help' }, children: truncate(task.error, 50) }) })) : (_jsx(Text, { size: "xs", c: "dimmed", children: "\u2014" })) }), _jsx(Table.Td, { children: _jsxs(Group, { gap: "xs", children: [taskStatus === 'failed' && (_jsx(Button, { size: "xs", variant: "light", "data-testid": `retry-task-${task.id}`, onClick: () => handleRetryClick(task), children: "Retry" })), canDelete && (_jsx(Button, { size: "xs", variant: "light", color: "red", "data-testid": `delete-task-${task.id}`, onClick: () => handleDeleteClick(taskStatus, `${task.id}.json`), children: "Delete" }))] }) })] }, task.id))) })] }) }))] }));
171
+ }
172
+ // ============================================================================
173
+ // Branches tab
174
+ // ============================================================================
175
+ function BranchesTab({ health }) {
176
+ const { branchHealth, branchHealthLoading } = health;
177
+ const entries = branchHealth?.entries ?? [];
178
+ const handleMarkMergedClick = (branchName) => {
179
+ modals.openConfirmModal({
180
+ title: 'Mark branch as merged',
181
+ children: _jsx(Text, { size: "sm", children: MARK_MERGED_CONFIRM_TEXT }),
182
+ labels: { confirm: 'Mark merged', cancel: 'Cancel' },
183
+ confirmProps: { color: 'brand' },
184
+ onConfirm: () => health.markMerged(branchName),
185
+ });
186
+ };
187
+ const handleRepairClick = (dirName) => {
188
+ modals.openConfirmModal({
189
+ title: 'Repair metadata',
190
+ children: _jsx(Text, { size: "sm", children: REPAIR_CONFIRM_TEXT }),
191
+ labels: { confirm: 'Repair', cancel: 'Cancel' },
192
+ confirmProps: { color: 'brand' },
193
+ onConfirm: () => health.repairDir(dirName),
194
+ });
195
+ };
196
+ const handlePurgeClick = (dirName) => {
197
+ modals.openConfirmModal({
198
+ title: 'Purge directory',
199
+ children: _jsx(Text, { size: "sm", children: PURGE_CONFIRM_TEXT }),
200
+ labels: { confirm: 'Purge', cancel: 'Cancel' },
201
+ confirmProps: { color: 'red' },
202
+ onConfirm: () => health.purgeDir(dirName),
203
+ });
204
+ };
205
+ if (branchHealthLoading && entries.length === 0) {
206
+ return (_jsxs(Group, { justify: "center", py: "xl", children: [_jsx(Loader, { size: "sm" }), _jsx(Text, { size: "sm", c: "dimmed", children: "Loading branch health..." })] }));
207
+ }
208
+ if (entries.length === 0) {
209
+ return (_jsx(Text, { size: "sm", c: "dimmed", py: "md", children: "No branch directories found." }));
210
+ }
211
+ return (_jsx(Table.ScrollContainer, { minWidth: 700, children: _jsxs(Table, { children: [_jsx(Table.Thead, { children: _jsxs(Table.Tr, { children: [_jsx(Table.Th, { children: "Name" }), _jsx(Table.Th, { children: "Status" }), _jsx(Table.Th, { children: "PR" }), _jsx(Table.Th, { children: "Sync" }), _jsx(Table.Th, { children: "Warnings" }), _jsx(Table.Th, { children: "Updated" }), _jsx(Table.Th, { children: "Actions" })] }) }), _jsx(Table.Tbody, { children: entries.map((entry) => (_jsx(BranchHealthRow, { entry: entry, onMarkMerged: handleMarkMergedClick, onRepair: handleRepairClick, onPurge: handlePurgeClick }, entry.dirName))) })] }) }));
212
+ }
213
+ function BranchHealthRow({ entry, onMarkMerged, onRepair, onPurge, }) {
214
+ if (entry.kind === 'healthy' && entry.branch) {
215
+ const b = entry.branch;
216
+ // [LOW-3] The worker rebases every non-terminal branch, including
217
+ // 'locked' ones (only 'submitted'/'approved' -- under an active PR --
218
+ // and 'archived' -- already merged -- are excluded, see
219
+ // rebaseActiveBranches' skip logic in worker/cms-worker.ts). Gating on
220
+ // `status === 'editing'` hid rebase failures on locked branches even
221
+ // though the worker was still failing to rebase them every cycle.
222
+ const showRebaseFailure = !['submitted', 'approved', 'archived'].includes(b.status) && !!b.rebaseFailure;
223
+ const canMarkMerged = (b.status === 'submitted' || b.status === 'approved') && !!b.pullRequestNumber;
224
+ return (_jsxs(Table.Tr, { children: [_jsx(Table.Td, { children: _jsxs(Group, { gap: 4, wrap: "nowrap", children: [_jsx(Text, { size: "sm", children: entry.dirName }), entry.isBaseBranch && (_jsx(Badge, { size: "xs", color: "gray", variant: "outline", children: "base" }))] }) }), _jsx(Table.Td, { children: _jsx(Badge, { color: branchStatusColorMap[b.status] ?? 'neutral', variant: "light", children: b.status }) }), _jsx(Table.Td, { children: b.pullRequestNumber ? (_jsxs(Text, { size: "xs", c: "blue", component: "a", href: b.pullRequestUrl, target: "_blank", rel: "noopener noreferrer", style: { textDecoration: 'underline' }, children: ["PR #", b.pullRequestNumber, b.pullRequestState ? ` (${b.pullRequestState})` : ''] })) : (_jsx(Text, { size: "xs", c: "dimmed", children: "\u2014" })) }), _jsx(Table.Td, { children: b.syncStatus === 'sync-failed' ? (_jsx(Tooltip, { label: "GitHub sync failed \u2014 retry from the Tasks tab", children: _jsx(Badge, { color: "red", variant: "light", children: "sync-failed" }) })) : b.syncStatus === 'pending-sync' ? (_jsx(Badge, { color: "gray", variant: "light", children: "pending-sync" })) : null }), _jsx(Table.Td, { children: _jsxs(Group, { gap: 6, wrap: "nowrap", children: [!!b.conflictFiles?.length && (_jsxs(Badge, { color: "orange", variant: "light", children: [b.conflictFiles.length, " conflict", b.conflictFiles.length === 1 ? '' : 's'] })), showRebaseFailure && b.rebaseFailure && (_jsx(Tooltip, { label: `${b.rebaseFailure.message} (failing since ${b.rebaseFailure.firstAt})`, multiline: true, maw: 320, children: _jsx(ThemeIcon, { color: "yellow", variant: "light", size: "sm", radius: "xl", "data-testid": `rebase-failure-${entry.dirName}`, children: _jsx(IconAlertTriangle, { size: 12 }) }) }))] }) }), _jsx(Table.Td, { children: _jsx(Text, { size: "xs", c: "dimmed", children: b.updatedAt }) }), _jsx(Table.Td, { children: canMarkMerged && (_jsx(Button, { size: "xs", variant: "light", "data-testid": `mark-merged-${b.name}`, onClick: () => onMarkMerged(b.name), children: "Mark merged" })) })] }));
225
+ }
226
+ if (entry.kind === 'corrupt-metadata') {
227
+ const purgeGate = purgeGateFor(entry);
228
+ return (_jsxs(Table.Tr, { style: { backgroundColor: 'var(--mantine-color-red-light)' }, children: [_jsx(Table.Td, { children: entry.dirName }), _jsx(Table.Td, { children: _jsx(Badge, { color: "red", variant: "light", children: "corrupt metadata" }) }), _jsx(Table.Td, { colSpan: 3, children: _jsx(Tooltip, { label: entry.parseError, multiline: true, maw: 400, children: _jsx(Text, { size: "xs", c: "red", children: truncate(entry.parseError ?? 'Unknown parse error', 60) }) }) }), _jsx(Table.Td, { children: _jsx(Text, { size: "xs", c: "dimmed", children: entry.metaMtime ?? '—' }) }), _jsx(Table.Td, { children: _jsxs(Group, { gap: "xs", wrap: "nowrap", children: [_jsx(Button, { size: "xs", variant: "light", "data-testid": `repair-dir-${entry.dirName}`, onClick: () => onRepair(entry.dirName), children: "Repair" }), _jsx(Tooltip, { label: purgeGate.tooltip, disabled: !purgeGate.disabled, children: _jsx("span", { children: _jsx(Button, { size: "xs", variant: "light", color: "red", disabled: purgeGate.disabled, "data-testid": `purge-dir-${entry.dirName}`, onClick: () => onPurge(entry.dirName), children: "Purge" }) }) })] }) })] }));
229
+ }
230
+ // orphan
231
+ const purgeGate = purgeGateFor(entry);
232
+ return (_jsxs(Table.Tr, { style: { opacity: 0.65 }, children: [_jsx(Table.Td, { children: entry.dirName }), _jsx(Table.Td, { children: _jsx(Badge, { color: "gray", variant: "outline", children: "orphan" }) }), _jsx(Table.Td, { colSpan: 3, children: _jsxs(Text, { size: "xs", c: "dimmed", children: [entry.ageMs !== undefined ? `${formatAgeMs(entry.ageMs)} old` : 'unknown age', " \u00B7", ' ', entry.hasGitDir ? 'has .git' : 'no .git'] }) }), _jsx(Table.Td, { children: _jsx(Text, { size: "xs", c: "dimmed", children: entry.dirMtime ?? '—' }) }), _jsx(Table.Td, { children: _jsx(Tooltip, { label: purgeGate.tooltip, disabled: !purgeGate.disabled, children: _jsx("span", { children: _jsx(Button, { size: "xs", variant: "light", color: "red", disabled: purgeGate.disabled, "data-testid": `purge-dir-${entry.dirName}`, onClick: () => onPurge(entry.dirName), children: "Purge" }) }) }) })] }));
233
+ }
234
+ //# sourceMappingURL=SystemHealthPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemHealthPanel.js","sourceRoot":"","sources":["../../../src/editor/admin/SystemHealthPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { AdminStatusData, AdminTasksData, ListAdminTasksParams, DeleteTaskParams } from '../../api/admin';
2
+ import type { BranchHealthData } from '../../api/admin-branch-health';
3
+ export type AdminTaskStatus = ListAdminTasksParams['status'];
4
+ export type DeletableTaskStatus = DeleteTaskParams['status'];
5
+ export interface UseSystemHealthOptions {
6
+ /**
7
+ * Whether the System Health panel is currently open. Data loads (and
8
+ * polling starts) only while true -- mirrors useGroupManager's `isOpen`.
9
+ */
10
+ isOpen: boolean;
11
+ }
12
+ export interface UseSystemHealthReturn {
13
+ status: AdminStatusData | null;
14
+ statusLoading: boolean;
15
+ /**
16
+ * True when workerStatus.lastFatalError exists and is < 30 min old, as of
17
+ * the last fetch. Computed at fetch time (not in the component's render)
18
+ * so the panel never calls Date.now() during render -- see the
19
+ * react-hooks/purity rule this sidesteps.
20
+ */
21
+ isRecentFatalError: boolean;
22
+ tasks: AdminTasksData | null;
23
+ tasksLoading: boolean;
24
+ taskStatus: AdminTaskStatus;
25
+ /** Updates the selected Tasks-tab status AND refetches tasks for it. */
26
+ setTaskStatus: (status: AdminTaskStatus) => void;
27
+ branchHealth: BranchHealthData | null;
28
+ branchHealthLoading: boolean;
29
+ /** Last fetch error across status/tasks/branchHealth, if any. */
30
+ error: string | null;
31
+ /** Refetches status, tasks (at the current taskStatus), and branchHealth. */
32
+ refresh: () => Promise<void>;
33
+ retryTask: (taskId: string) => Promise<void>;
34
+ deleteTask: (status: DeletableTaskStatus, fileName: string) => Promise<void>;
35
+ purgeDir: (dirName: string) => Promise<void>;
36
+ repairDir: (dirName: string) => Promise<void>;
37
+ markMerged: (branchName: string) => Promise<void>;
38
+ }
39
+ export declare function useSystemHealth(options: UseSystemHealthOptions): UseSystemHealthReturn;
40
+ //# sourceMappingURL=useSystemHealth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSystemHealth.d.ts","sourceRoot":"","sources":["../../../src/editor/admin/useSystemHealth.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAYrE,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;AAC5D,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AAE5D,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,OAAO,CAAA;IACtB;;;;;OAKG;IACH,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,eAAe,CAAA;IAC3B,wEAAwE;IACxE,aAAa,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;IAChD,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACrC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,iEAAiE;IACjE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,UAAU,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAsMtF"}
@@ -0,0 +1,205 @@
1
+ 'use client';
2
+ /**
3
+ * useSystemHealth - Data + actions for the admin System Health panel (PR-U1).
4
+ *
5
+ * Mirrors useGroupManager's shape: loads on open, exposes typed action
6
+ * helpers that each notify then refresh(). Unlike useGroupManager, this also
7
+ * polls every 30s while the panel stays open (cleared on close/unmount) --
8
+ * queue depth and worker liveness go stale quickly, and the panel has no
9
+ * other way to catch a worker coming back up or a task finishing.
10
+ */
11
+ import { useCallback, useEffect, useRef, useState } from 'react';
12
+ import { notifications } from '@mantine/notifications';
13
+ import { useApiClient } from '../context/index.js';
14
+ const POLL_INTERVAL_MS = 30_000;
15
+ /**
16
+ * Crash-loop rider window: a worker that fatally exits and restarts
17
+ * repeatedly can flap between 'absent' and 'alive' liveness and never sit
18
+ * still long enough to read 'stale' -- surfacing a recent lastFatalError
19
+ * regardless of liveness state is the only way the panel catches that.
20
+ */
21
+ const CRASH_LOOP_WINDOW_MS = 30 * 60_000;
22
+ export function useSystemHealth(options) {
23
+ const apiClient = useApiClient();
24
+ const [status, setStatus] = useState(null);
25
+ const [statusLoading, setStatusLoading] = useState(false);
26
+ const [isRecentFatalError, setIsRecentFatalError] = useState(false);
27
+ const [tasks, setTasks] = useState(null);
28
+ const [tasksLoading, setTasksLoading] = useState(false);
29
+ const [taskStatus, setTaskStatusState] = useState('failed');
30
+ const [branchHealth, setBranchHealth] = useState(null);
31
+ const [branchHealthLoading, setBranchHealthLoading] = useState(false);
32
+ const [error, setError] = useState(null);
33
+ // refresh() has no status argument, so it needs the CURRENT taskStatus
34
+ // without taking a dependency on it (that would tear down/rebuild the
35
+ // polling interval below every time the Tasks tab's segmented control
36
+ // changes). A ref sidesteps the stale-closure problem cleanly.
37
+ const taskStatusRef = useRef(taskStatus);
38
+ taskStatusRef.current = taskStatus;
39
+ const fetchStatus = useCallback(async () => {
40
+ setStatusLoading(true);
41
+ try {
42
+ const result = await apiClient.admin.status();
43
+ if (!result.ok)
44
+ throw new Error(result.error || 'Failed to load status');
45
+ const data = result.data ?? null;
46
+ setStatus(data);
47
+ // Date.now() belongs here (an async callback, evaluated at fetch time)
48
+ // rather than in the component's render body.
49
+ const fatalAt = data?.workerStatus?.lastFatalError?.at;
50
+ setIsRecentFatalError(!!fatalAt && Date.now() - new Date(fatalAt).getTime() < CRASH_LOOP_WINDOW_MS);
51
+ setError(null);
52
+ }
53
+ catch (err) {
54
+ setError(err instanceof Error ? err.message : 'Failed to load status');
55
+ }
56
+ finally {
57
+ setStatusLoading(false);
58
+ }
59
+ }, [apiClient]);
60
+ const fetchTasks = useCallback(async (forStatus) => {
61
+ setTasksLoading(true);
62
+ try {
63
+ const result = await apiClient.admin.listTasks({ status: forStatus });
64
+ if (!result.ok)
65
+ throw new Error(result.error || 'Failed to load tasks');
66
+ setTasks(result.data ?? null);
67
+ setError(null);
68
+ }
69
+ catch (err) {
70
+ setError(err instanceof Error ? err.message : 'Failed to load tasks');
71
+ }
72
+ finally {
73
+ setTasksLoading(false);
74
+ }
75
+ }, [apiClient]);
76
+ const fetchBranchHealth = useCallback(async () => {
77
+ setBranchHealthLoading(true);
78
+ try {
79
+ const result = await apiClient.admin.branchHealth();
80
+ if (!result.ok)
81
+ throw new Error(result.error || 'Failed to load branch health');
82
+ setBranchHealth(result.data ?? null);
83
+ setError(null);
84
+ }
85
+ catch (err) {
86
+ setError(err instanceof Error ? err.message : 'Failed to load branch health');
87
+ }
88
+ finally {
89
+ setBranchHealthLoading(false);
90
+ }
91
+ }, [apiClient]);
92
+ const refresh = useCallback(async () => {
93
+ await Promise.all([fetchStatus(), fetchTasks(taskStatusRef.current), fetchBranchHealth()]);
94
+ }, [fetchStatus, fetchTasks, fetchBranchHealth]);
95
+ const setTaskStatus = useCallback((next) => {
96
+ setTaskStatusState(next);
97
+ void fetchTasks(next);
98
+ }, [fetchTasks]);
99
+ // Load on open, and poll every 30s while open. taskStatus deliberately
100
+ // excluded from deps -- refresh() reads it via taskStatusRef, so switching
101
+ // the Tasks tab's status doesn't tear down/restart the poll timer.
102
+ useEffect(() => {
103
+ if (!options.isOpen)
104
+ return;
105
+ refresh();
106
+ const interval = setInterval(() => {
107
+ refresh();
108
+ }, POLL_INTERVAL_MS);
109
+ return () => clearInterval(interval);
110
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- refresh is stable (useCallback); see comment above
111
+ }, [options.isOpen]);
112
+ const retryTask = useCallback(async (taskId) => {
113
+ try {
114
+ const result = await apiClient.admin.retryTask({ taskId });
115
+ if (!result.ok)
116
+ throw new Error(result.error || 'Failed to retry task');
117
+ notifications.show({
118
+ message: `Task requeued as ${result.data?.newTaskId ?? 'a new task'}`,
119
+ color: 'green',
120
+ });
121
+ await refresh();
122
+ }
123
+ catch (err) {
124
+ const message = err instanceof Error ? err.message : 'Failed to retry task';
125
+ notifications.show({ message, color: 'red' });
126
+ }
127
+ }, [apiClient, refresh]);
128
+ const deleteTask = useCallback(async (status, fileName) => {
129
+ try {
130
+ const result = await apiClient.admin.deleteTask({ status, fileName });
131
+ if (!result.ok)
132
+ throw new Error(result.error || 'Failed to delete task');
133
+ notifications.show({ message: 'Task file deleted', color: 'green' });
134
+ await refresh();
135
+ }
136
+ catch (err) {
137
+ const message = err instanceof Error ? err.message : 'Failed to delete task';
138
+ notifications.show({ message, color: 'red' });
139
+ }
140
+ }, [apiClient, refresh]);
141
+ const purgeDir = useCallback(async (dirName) => {
142
+ try {
143
+ const result = await apiClient.admin.purgeBranchDir({ dirName });
144
+ if (!result.ok)
145
+ throw new Error(result.error || 'Failed to purge directory');
146
+ notifications.show({
147
+ message: `Directory moved to trash as ${result.data?.trashedAs ?? 'trash'}`,
148
+ color: 'green',
149
+ });
150
+ await refresh();
151
+ }
152
+ catch (err) {
153
+ const message = err instanceof Error ? err.message : 'Failed to purge directory';
154
+ notifications.show({ message, color: 'red' });
155
+ }
156
+ }, [apiClient, refresh]);
157
+ const repairDir = useCallback(async (dirName) => {
158
+ try {
159
+ const result = await apiClient.admin.repairBranchDir({ dirName });
160
+ if (!result.ok)
161
+ throw new Error(result.error || 'Failed to repair metadata');
162
+ notifications.show({
163
+ message: `Metadata repaired (corrupt file archived as ${result.data?.archivedAs ?? 'archive'})`,
164
+ color: 'green',
165
+ });
166
+ await refresh();
167
+ }
168
+ catch (err) {
169
+ const message = err instanceof Error ? err.message : 'Failed to repair metadata';
170
+ notifications.show({ message, color: 'red' });
171
+ }
172
+ }, [apiClient, refresh]);
173
+ const markMerged = useCallback(async (branchName) => {
174
+ try {
175
+ const result = await apiClient.workflow.markMerged({ branch: branchName });
176
+ if (!result.ok)
177
+ throw new Error(result.error || 'Failed to mark branch as merged');
178
+ notifications.show({ message: `Branch "${branchName}" marked as merged`, color: 'green' });
179
+ await refresh();
180
+ }
181
+ catch (err) {
182
+ const message = err instanceof Error ? err.message : 'Failed to mark branch as merged';
183
+ notifications.show({ message, color: 'red' });
184
+ }
185
+ }, [apiClient, refresh]);
186
+ return {
187
+ status,
188
+ statusLoading,
189
+ isRecentFatalError,
190
+ tasks,
191
+ tasksLoading,
192
+ taskStatus,
193
+ setTaskStatus,
194
+ branchHealth,
195
+ branchHealthLoading,
196
+ error,
197
+ refresh,
198
+ retryTask,
199
+ deleteTask,
200
+ purgeDir,
201
+ repairDir,
202
+ markMerged,
203
+ };
204
+ }
205
+ //# sourceMappingURL=useSystemHealth.js.map