@gzeoneth/gov-tracker 0.2.1-alpha.cli-preview.f8c3a87 → 0.2.1-alpha.cli-preview.a5817b4

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/dist/cli/cli.js +23 -5
  2. package/dist/cli/cli.js.map +1 -1
  3. package/dist/cli/lib/cli.d.ts.map +1 -1
  4. package/dist/cli/lib/cli.js +27 -5
  5. package/dist/cli/lib/cli.js.map +1 -1
  6. package/dist/cli/tui/App.d.ts.map +1 -1
  7. package/dist/cli/tui/App.js +60 -6
  8. package/dist/cli/tui/App.js.map +1 -1
  9. package/dist/cli/tui/components/CollapsibleSection.d.ts +20 -0
  10. package/dist/cli/tui/components/CollapsibleSection.d.ts.map +1 -0
  11. package/dist/cli/tui/components/CollapsibleSection.js +29 -0
  12. package/dist/cli/tui/components/CollapsibleSection.js.map +1 -0
  13. package/dist/cli/tui/components/ConfirmDialog.d.ts +14 -0
  14. package/dist/cli/tui/components/ConfirmDialog.d.ts.map +1 -0
  15. package/dist/cli/tui/components/ConfirmDialog.js +29 -0
  16. package/dist/cli/tui/components/ConfirmDialog.js.map +1 -0
  17. package/dist/cli/tui/components/CopyableText.d.ts +23 -0
  18. package/dist/cli/tui/components/CopyableText.d.ts.map +1 -0
  19. package/dist/cli/tui/components/CopyableText.js +49 -0
  20. package/dist/cli/tui/components/CopyableText.js.map +1 -0
  21. package/dist/cli/tui/components/EmptyState.d.ts +11 -0
  22. package/dist/cli/tui/components/EmptyState.d.ts.map +1 -0
  23. package/dist/cli/tui/components/EmptyState.js +34 -0
  24. package/dist/cli/tui/components/EmptyState.js.map +1 -0
  25. package/dist/cli/tui/components/ErrorDisplay.d.ts +17 -0
  26. package/dist/cli/tui/components/ErrorDisplay.d.ts.map +1 -0
  27. package/dist/cli/tui/components/ErrorDisplay.js +66 -0
  28. package/dist/cli/tui/components/ErrorDisplay.js.map +1 -0
  29. package/dist/cli/tui/components/Header.d.ts +4 -2
  30. package/dist/cli/tui/components/Header.d.ts.map +1 -1
  31. package/dist/cli/tui/components/Header.js +20 -4
  32. package/dist/cli/tui/components/Header.js.map +1 -1
  33. package/dist/cli/tui/components/KeyHelp.d.ts +11 -2
  34. package/dist/cli/tui/components/KeyHelp.d.ts.map +1 -1
  35. package/dist/cli/tui/components/KeyHelp.js +63 -9
  36. package/dist/cli/tui/components/KeyHelp.js.map +1 -1
  37. package/dist/cli/tui/components/ProposalRow.d.ts.map +1 -1
  38. package/dist/cli/tui/components/ProposalRow.js +46 -6
  39. package/dist/cli/tui/components/ProposalRow.js.map +1 -1
  40. package/dist/cli/tui/components/ScrollIndicator.d.ts +26 -0
  41. package/dist/cli/tui/components/ScrollIndicator.d.ts.map +1 -0
  42. package/dist/cli/tui/components/ScrollIndicator.js +59 -0
  43. package/dist/cli/tui/components/ScrollIndicator.js.map +1 -0
  44. package/dist/cli/tui/components/SearchBar.d.ts +12 -0
  45. package/dist/cli/tui/components/SearchBar.d.ts.map +1 -0
  46. package/dist/cli/tui/components/SearchBar.js +36 -0
  47. package/dist/cli/tui/components/SearchBar.js.map +1 -0
  48. package/dist/cli/tui/components/Skeleton.d.ts +22 -0
  49. package/dist/cli/tui/components/Skeleton.d.ts.map +1 -0
  50. package/dist/cli/tui/components/Skeleton.js +35 -0
  51. package/dist/cli/tui/components/Skeleton.js.map +1 -0
  52. package/dist/cli/tui/components/Spinner.d.ts +10 -0
  53. package/dist/cli/tui/components/Spinner.d.ts.map +1 -0
  54. package/dist/cli/tui/components/Spinner.js +24 -0
  55. package/dist/cli/tui/components/Spinner.js.map +1 -0
  56. package/dist/cli/tui/components/StageProgress.d.ts +12 -0
  57. package/dist/cli/tui/components/StageProgress.d.ts.map +1 -0
  58. package/dist/cli/tui/components/StageProgress.js +72 -0
  59. package/dist/cli/tui/components/StageProgress.js.map +1 -0
  60. package/dist/cli/tui/components/StageRow.d.ts.map +1 -1
  61. package/dist/cli/tui/components/StageRow.js +33 -10
  62. package/dist/cli/tui/components/StageRow.js.map +1 -1
  63. package/dist/cli/tui/components/StatusBar.d.ts +12 -0
  64. package/dist/cli/tui/components/StatusBar.d.ts.map +1 -0
  65. package/dist/cli/tui/components/StatusBar.js +14 -0
  66. package/dist/cli/tui/components/StatusBar.js.map +1 -0
  67. package/dist/cli/tui/components/Timeline.d.ts +12 -0
  68. package/dist/cli/tui/components/Timeline.d.ts.map +1 -0
  69. package/dist/cli/tui/components/Timeline.js +91 -0
  70. package/dist/cli/tui/components/Timeline.js.map +1 -0
  71. package/dist/cli/tui/components/Toast.d.ts +13 -0
  72. package/dist/cli/tui/components/Toast.d.ts.map +1 -0
  73. package/dist/cli/tui/components/Toast.js +35 -0
  74. package/dist/cli/tui/components/Toast.js.map +1 -0
  75. package/dist/cli/tui/components/TrackingProgress.d.ts +24 -0
  76. package/dist/cli/tui/components/TrackingProgress.d.ts.map +1 -0
  77. package/dist/cli/tui/components/TrackingProgress.js +82 -0
  78. package/dist/cli/tui/components/TrackingProgress.js.map +1 -0
  79. package/dist/cli/tui/components/ViewLayout.d.ts +9 -1
  80. package/dist/cli/tui/components/ViewLayout.d.ts.map +1 -1
  81. package/dist/cli/tui/components/ViewLayout.js +43 -7
  82. package/dist/cli/tui/components/ViewLayout.js.map +1 -1
  83. package/dist/cli/tui/components/VotingStats.d.ts +11 -0
  84. package/dist/cli/tui/components/VotingStats.d.ts.map +1 -0
  85. package/dist/cli/tui/components/VotingStats.js +87 -0
  86. package/dist/cli/tui/components/VotingStats.js.map +1 -0
  87. package/dist/cli/tui/config.d.ts +42 -0
  88. package/dist/cli/tui/config.d.ts.map +1 -0
  89. package/dist/cli/tui/config.js +144 -0
  90. package/dist/cli/tui/config.js.map +1 -0
  91. package/dist/cli/tui/hooks/index.d.ts +3 -1
  92. package/dist/cli/tui/hooks/index.d.ts.map +1 -1
  93. package/dist/cli/tui/hooks/index.js +5 -1
  94. package/dist/cli/tui/hooks/index.js.map +1 -1
  95. package/dist/cli/tui/hooks/useCache.d.ts.map +1 -1
  96. package/dist/cli/tui/hooks/useCache.js +32 -8
  97. package/dist/cli/tui/hooks/useCache.js.map +1 -1
  98. package/dist/cli/tui/hooks/useCliProcess.d.ts +19 -0
  99. package/dist/cli/tui/hooks/useCliProcess.d.ts.map +1 -0
  100. package/dist/cli/tui/hooks/useCliProcess.js +135 -0
  101. package/dist/cli/tui/hooks/useCliProcess.js.map +1 -0
  102. package/dist/cli/tui/hooks/useNavigation.d.ts +7 -1
  103. package/dist/cli/tui/hooks/useNavigation.d.ts.map +1 -1
  104. package/dist/cli/tui/hooks/useNavigation.js +73 -9
  105. package/dist/cli/tui/hooks/useNavigation.js.map +1 -1
  106. package/dist/cli/tui/hooks/useProposals.d.ts +2 -2
  107. package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -1
  108. package/dist/cli/tui/hooks/useProposals.js +92 -27
  109. package/dist/cli/tui/hooks/useProposals.js.map +1 -1
  110. package/dist/cli/tui/hooks/useStageCalldata.d.ts +1 -1
  111. package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -1
  112. package/dist/cli/tui/hooks/useStageCalldata.js +45 -18
  113. package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -1
  114. package/dist/cli/tui/hooks/useTracker.d.ts +4 -5
  115. package/dist/cli/tui/hooks/useTracker.d.ts.map +1 -1
  116. package/dist/cli/tui/hooks/useTracker.js +118 -78
  117. package/dist/cli/tui/hooks/useTracker.js.map +1 -1
  118. package/dist/cli/tui/index.d.ts +1 -0
  119. package/dist/cli/tui/index.d.ts.map +1 -1
  120. package/dist/cli/tui/index.js +38 -6
  121. package/dist/cli/tui/index.js.map +1 -1
  122. package/dist/cli/tui/types.d.ts +4 -1
  123. package/dist/cli/tui/types.d.ts.map +1 -1
  124. package/dist/cli/tui/utils/clipboard.d.ts +7 -0
  125. package/dist/cli/tui/utils/clipboard.d.ts.map +1 -0
  126. package/dist/cli/tui/utils/clipboard.js +46 -0
  127. package/dist/cli/tui/utils/clipboard.js.map +1 -0
  128. package/dist/cli/tui/utils/index.d.ts +1 -0
  129. package/dist/cli/tui/utils/index.d.ts.map +1 -1
  130. package/dist/cli/tui/utils/index.js +4 -1
  131. package/dist/cli/tui/utils/index.js.map +1 -1
  132. package/dist/cli/tui/utils/text.d.ts.map +1 -1
  133. package/dist/cli/tui/utils/text.js +2 -0
  134. package/dist/cli/tui/utils/text.js.map +1 -1
  135. package/dist/cli/tui/views/CalldataView.d.ts.map +1 -1
  136. package/dist/cli/tui/views/CalldataView.js +35 -21
  137. package/dist/cli/tui/views/CalldataView.js.map +1 -1
  138. package/dist/cli/tui/views/DescriptionView.d.ts.map +1 -1
  139. package/dist/cli/tui/views/DescriptionView.js +29 -21
  140. package/dist/cli/tui/views/DescriptionView.js.map +1 -1
  141. package/dist/cli/tui/views/ElectionView.d.ts.map +1 -1
  142. package/dist/cli/tui/views/ElectionView.js +64 -26
  143. package/dist/cli/tui/views/ElectionView.js.map +1 -1
  144. package/dist/cli/tui/views/HelpView.d.ts +10 -0
  145. package/dist/cli/tui/views/HelpView.d.ts.map +1 -0
  146. package/dist/cli/tui/views/HelpView.js +159 -0
  147. package/dist/cli/tui/views/HelpView.js.map +1 -0
  148. package/dist/cli/tui/views/ProposalDetail.d.ts +1 -1
  149. package/dist/cli/tui/views/ProposalDetail.d.ts.map +1 -1
  150. package/dist/cli/tui/views/ProposalDetail.js +45 -50
  151. package/dist/cli/tui/views/ProposalDetail.js.map +1 -1
  152. package/dist/cli/tui/views/ProposalList.d.ts.map +1 -1
  153. package/dist/cli/tui/views/ProposalList.js +47 -32
  154. package/dist/cli/tui/views/ProposalList.js.map +1 -1
  155. package/dist/cli/tui/views/SettingsView.d.ts +12 -0
  156. package/dist/cli/tui/views/SettingsView.d.ts.map +1 -0
  157. package/dist/cli/tui/views/SettingsView.js +203 -0
  158. package/dist/cli/tui/views/SettingsView.js.map +1 -0
  159. package/dist/cli/tui/views/SimulationView.d.ts.map +1 -1
  160. package/dist/cli/tui/views/SimulationView.js +26 -7
  161. package/dist/cli/tui/views/SimulationView.js.map +1 -1
  162. package/dist/cli/tui/views/StageView.d.ts.map +1 -1
  163. package/dist/cli/tui/views/StageView.js +34 -18
  164. package/dist/cli/tui/views/StageView.js.map +1 -1
  165. package/dist/stages/timelock.d.ts.map +1 -1
  166. package/dist/stages/timelock.js +5 -4
  167. package/dist/stages/timelock.js.map +1 -1
  168. package/dist/tracker/cache.d.ts.map +1 -1
  169. package/dist/tracker/cache.js +4 -0
  170. package/dist/tracker/cache.js.map +1 -1
  171. package/package.json +1 -1
@@ -5,6 +5,7 @@
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.useProposals = useProposals;
7
7
  const react_1 = require("react");
8
+ const constants_js_1 = require("../../../constants.js");
8
9
  function getStages(checkpoint) {
9
10
  return checkpoint.cachedData.completedStages ?? [];
10
11
  }
@@ -15,6 +16,8 @@ function getCreatedData(stages) {
15
16
  return getCreatedStage(stages)?.data;
16
17
  }
17
18
  function extractMarkdownTitle(description) {
19
+ if (!description)
20
+ return null;
18
21
  const lines = description.split("\n");
19
22
  for (const line of lines) {
20
23
  const trimmed = line.trim();
@@ -42,10 +45,10 @@ function getProposalTitle(checkpoint) {
42
45
  }
43
46
  }
44
47
  if (checkpoint.input.type === "governor") {
45
- return `Proposal ${checkpoint.input.proposalId.slice(0, 12)}...`;
48
+ return `Proposal ${checkpoint.input.proposalId}`;
46
49
  }
47
50
  if (checkpoint.input.type === "timelock") {
48
- return `Timelock Op ${checkpoint.input.operationId.slice(0, 12)}...`;
51
+ return `Timelock Op ${checkpoint.input.operationId}`;
49
52
  }
50
53
  return "Unknown";
51
54
  }
@@ -101,17 +104,54 @@ function getItemType(checkpoint, stages) {
101
104
  return "governor";
102
105
  }
103
106
  function matchesFilter(item, filter) {
104
- if (filter === "all")
105
- return true;
106
- if (filter === "active")
107
- return item.status === "active";
108
- if (filter === "complete")
109
- return item.status === "complete";
110
- if (filter === "timelocks")
111
- return item.type === "timelock";
112
- return true;
113
- }
114
- function useProposals(data, filter, searchQuery = "") {
107
+ // Elections have their own view (press 'e'), exclude from main list
108
+ if (item.type === "election")
109
+ return false;
110
+ switch (filter) {
111
+ case "all":
112
+ return true;
113
+ case "active":
114
+ return item.status === "active";
115
+ case "complete":
116
+ return item.status === "complete";
117
+ case "timelocks":
118
+ return item.type === "timelock";
119
+ default:
120
+ return true;
121
+ }
122
+ }
123
+ function getProgressNumber(progress) {
124
+ const match = progress.match(/^(\d+)/);
125
+ return match ? parseInt(match[1], 10) : 0;
126
+ }
127
+ function compareByDate(aDate, bDate, ascending) {
128
+ if (aDate === null && bDate === null)
129
+ return 0;
130
+ if (aDate === null)
131
+ return 1;
132
+ if (bDate === null)
133
+ return -1;
134
+ return ascending ? aDate - bDate : bDate - aDate;
135
+ }
136
+ function sortItems(items, sort) {
137
+ return [...items].sort((a, b) => {
138
+ switch (sort) {
139
+ case "newest":
140
+ return compareByDate(a.createdAt, b.createdAt, false);
141
+ case "oldest":
142
+ return compareByDate(a.createdAt, b.createdAt, true);
143
+ case "progress":
144
+ return getProgressNumber(b.stageProgress) - getProgressNumber(a.stageProgress);
145
+ case "status": {
146
+ const statusOrder = { active: 0, complete: 1, failed: 2 };
147
+ return (statusOrder[a.status] ?? 3) - (statusOrder[b.status] ?? 3);
148
+ }
149
+ default:
150
+ return 0;
151
+ }
152
+ });
153
+ }
154
+ function useProposals(data, filter, searchQuery = "", sort = "newest") {
115
155
  return (0, react_1.useMemo)(() => {
116
156
  if (!data)
117
157
  return { items: [], filteredCount: 0, totalCount: 0 };
@@ -120,8 +160,37 @@ function useProposals(data, filter, searchQuery = "") {
120
160
  if (checkpoint.input.type === "discovery")
121
161
  continue;
122
162
  const stages = getStages(checkpoint);
123
- if (stages.length === 0)
163
+ // Handle proposals with no stages yet (discovered but not tracked)
164
+ if (stages.length === 0) {
165
+ // Skip untracked election proposals - they belong in the Elections view
166
+ if (checkpoint.input.type === "governor" &&
167
+ (0, constants_js_1.isElectionGovernor)(checkpoint.input.governorAddress)) {
168
+ continue;
169
+ }
170
+ let title;
171
+ if (checkpoint.input.type === "governor") {
172
+ title = `Proposal ${checkpoint.input.proposalId.slice(0, 8)}...`;
173
+ }
174
+ else if (checkpoint.input.type === "timelock") {
175
+ title = `Timelock ${checkpoint.input.operationId.slice(0, 10)}...`;
176
+ }
177
+ else {
178
+ title = "Unknown";
179
+ }
180
+ items.push({
181
+ key,
182
+ title,
183
+ type: checkpoint.input.type === "timelock" ? "timelock" : "governor",
184
+ proposalType: undefined,
185
+ status: "active", // Needs tracking
186
+ stageProgress: "0/7",
187
+ currentStage: null,
188
+ hasExecutable: false,
189
+ createdAt: checkpoint.createdAt,
190
+ checkpoint,
191
+ });
124
192
  continue;
193
+ }
125
194
  const completedCount = stages.filter((s) => s.status === "COMPLETED" || s.status === "SKIPPED").length;
126
195
  items.push({
127
196
  key,
@@ -136,24 +205,20 @@ function useProposals(data, filter, searchQuery = "") {
136
205
  checkpoint,
137
206
  });
138
207
  }
139
- items.sort((a, b) => {
140
- if (a.createdAt === null && b.createdAt === null)
141
- return 0;
142
- if (a.createdAt === null)
143
- return 1;
144
- if (b.createdAt === null)
145
- return -1;
146
- return b.createdAt - a.createdAt;
147
- });
208
+ const sorted = sortItems(items, sort);
148
209
  const lowerSearch = searchQuery.toLowerCase();
149
- const filtered = items.filter((item) => {
210
+ const filtered = sorted.filter((item) => {
150
211
  if (!matchesFilter(item, filter))
151
212
  return false;
152
- if (lowerSearch && !item.title.toLowerCase().includes(lowerSearch))
153
- return false;
213
+ if (lowerSearch) {
214
+ const matchesTitle = item.title.toLowerCase().includes(lowerSearch);
215
+ const matchesKey = item.key.toLowerCase().includes(lowerSearch);
216
+ if (!matchesTitle && !matchesKey)
217
+ return false;
218
+ }
154
219
  return true;
155
220
  });
156
221
  return { items: filtered, filteredCount: filtered.length, totalCount: items.length };
157
- }, [data, filter, searchQuery]);
222
+ }, [data, filter, searchQuery, sort]);
158
223
  }
159
224
  //# sourceMappingURL=useProposals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useProposals.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useProposals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useProposals.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useProposals.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,5 @@ export interface UseStageCalldataResult {
13
13
  loading: boolean;
14
14
  error: string | null;
15
15
  }
16
- export declare function useStageCalldata(firstStage: TrackedStage | undefined): UseStageCalldataResult;
16
+ export declare function useStageCalldata(firstStage: TrackedStage | undefined, allStages?: TrackedStage[]): UseStageCalldataResult;
17
17
  //# sourceMappingURL=useStageCalldata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStageCalldata.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useStageCalldata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,YAAY,GAAG,SAAS,GAAG,sBAAsB,CA+C7F"}
1
+ {"version":3,"file":"useStageCalldata.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useStageCalldata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAYD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,SAAS,CAAC,EAAE,YAAY,EAAE,GACzB,sBAAsB,CA8DxB"}
@@ -6,45 +6,72 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.useStageCalldata = useStageCalldata;
7
7
  const react_1 = require("react");
8
8
  const index_js_1 = require("../../../calldata/index.js");
9
- function useStageCalldata(firstStage) {
9
+ function findStageWithCalldata(stages) {
10
+ for (const stage of stages) {
11
+ const { calldatas } = (0, index_js_1.extractCalldataFromStage)(stage);
12
+ if (calldatas.length > 0) {
13
+ return stage;
14
+ }
15
+ }
16
+ return undefined;
17
+ }
18
+ function useStageCalldata(firstStage, allStages) {
10
19
  const [actions, setActions] = (0, react_1.useState)([]);
11
20
  const [loading, setLoading] = (0, react_1.useState)(true);
12
21
  const [error, setError] = (0, react_1.useState)(null);
13
22
  (0, react_1.useEffect)(() => {
23
+ let cancelled = false;
14
24
  async function loadCalldata() {
15
25
  setLoading(true);
16
26
  setError(null);
17
27
  try {
18
- if (!firstStage) {
19
- setError("No stage data available");
20
- return;
21
- }
22
- const { calldatas, targets, values } = (0, index_js_1.extractCalldataFromStage)(firstStage);
23
- if (calldatas.length === 0) {
24
- setError("No calldata found in proposal");
28
+ const stagesToSearch = allStages ?? (firstStage ? [firstStage] : []);
29
+ const stageWithCalldata = findStageWithCalldata(stagesToSearch);
30
+ if (!stageWithCalldata) {
31
+ if (!cancelled)
32
+ setError("No calldata found in proposal");
25
33
  return;
26
34
  }
35
+ const { calldatas, targets, values } = (0, index_js_1.extractCalldataFromStage)(stageWithCalldata);
27
36
  const chainContext = "arb1";
28
37
  const decoded = [];
38
+ let decodeErrors = 0;
29
39
  for (let i = 0; i < calldatas.length; i++) {
30
- const result = await (0, index_js_1.decodeCalldata)(calldatas[i], targets[i], 0, chainContext);
31
- decoded.push({
32
- target: targets[i],
33
- value: values[i],
34
- decoded: result,
35
- });
40
+ if (cancelled)
41
+ return;
42
+ try {
43
+ const result = await (0, index_js_1.decodeCalldata)(calldatas[i], targets[i], 0, chainContext);
44
+ decoded.push({
45
+ target: targets[i],
46
+ value: values[i],
47
+ decoded: result,
48
+ });
49
+ }
50
+ catch {
51
+ decodeErrors++;
52
+ }
53
+ }
54
+ if (!cancelled) {
55
+ setActions(decoded);
56
+ if (decodeErrors > 0 && decoded.length === 0) {
57
+ setError(`Failed to decode ${decodeErrors} action(s)`);
58
+ }
36
59
  }
37
- setActions(decoded);
38
60
  }
39
61
  catch (err) {
40
- setError(err instanceof Error ? err.message : String(err));
62
+ if (!cancelled)
63
+ setError(err instanceof Error ? err.message : String(err));
41
64
  }
42
65
  finally {
43
- setLoading(false);
66
+ if (!cancelled)
67
+ setLoading(false);
44
68
  }
45
69
  }
46
70
  loadCalldata();
47
- }, [firstStage]);
71
+ return () => {
72
+ cancelled = true;
73
+ };
74
+ }, [firstStage, allStages]);
48
75
  return { actions, loading, error };
49
76
  }
50
77
  //# sourceMappingURL=useStageCalldata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStageCalldata.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useStageCalldata.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAmBH,4CA+CC;AAhED,iCAA4C;AAE5C,yDAAsF;AAetF,SAAgB,gBAAgB,CAAC,UAAoC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAkB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,KAAK,UAAU,YAAY;YACzB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,QAAQ,CAAC,yBAAyB,CAAC,CAAC;oBACpC,OAAO;gBACT,CAAC;gBAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,mCAAwB,EAAC,UAAU,CAAC,CAAC;gBAE5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,+BAA+B,CAAC,CAAC;oBAC1C,OAAO;gBACT,CAAC;gBAED,MAAM,YAAY,GAAU,MAAM,CAAC;gBACnC,MAAM,OAAO,GAAoB,EAAE,CAAC;gBAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBAC/E,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;wBAClB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;wBAChB,OAAO,EAAE,MAAM;qBAChB,CAAC,CAAC;gBACL,CAAC;gBAED,UAAU,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,YAAY,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"useStageCalldata.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useStageCalldata.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA6BH,4CAiEC;AA5FD,iCAA4C;AAE5C,yDAAsF;AAetF,SAAS,qBAAqB,CAAC,MAAsB;IACnD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,mCAAwB,EAAC,KAAK,CAAC,CAAC;QACtD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,gBAAgB,CAC9B,UAAoC,EACpC,SAA0B;IAE1B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAkB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,UAAU,YAAY;YACzB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,SAAS,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrE,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;gBAEhE,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACvB,IAAI,CAAC,SAAS;wBAAE,QAAQ,CAAC,+BAA+B,CAAC,CAAC;oBAC1D,OAAO;gBACT,CAAC;gBAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,mCAAwB,EAAC,iBAAiB,CAAC,CAAC;gBAEnF,MAAM,YAAY,GAAU,MAAM,CAAC;gBACnC,MAAM,OAAO,GAAoB,EAAE,CAAC;gBAEpC,IAAI,YAAY,GAAG,CAAC,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,IAAI,SAAS;wBAAE,OAAO;oBACtB,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;wBAC/E,OAAO,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;4BAClB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;4BAChB,OAAO,EAAE,MAAM;yBAChB,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,YAAY,EAAE,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,UAAU,CAAC,OAAO,CAAC,CAAC;oBACpB,IAAI,YAAY,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC7C,QAAQ,CAAC,oBAAoB,YAAY,YAAY,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS;oBAAE,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS;oBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,YAAY,EAAE,CAAC;QAEf,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAE5B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Live tracking hook for TUI
3
3
  *
4
- * Provides tracking functionality when RPC providers are available.
4
+ * Discovery is delegated to CLI subprocess for simplicity.
5
+ * Individual proposal tracking is done directly for better UX.
5
6
  */
6
7
  import type { TrackingResult, PreparedTransaction } from "../../../types/index.js";
7
8
  import type { ProposalListItem } from "../types.js";
@@ -14,15 +15,13 @@ export interface UseTrackerResult {
14
15
  error: string | null;
15
16
  canTrack: boolean;
16
17
  track: (item: ProposalListItem) => Promise<TrackingResult | null>;
17
- discover: () => Promise<{
18
- proposals: number;
19
- timelocks: number;
20
- }>;
18
+ discover: () => Promise<boolean>;
21
19
  clearError: () => void;
22
20
  }
23
21
  export interface UseTrackerOptions {
24
22
  providers?: ProviderBundle;
25
23
  cachePath: string;
24
+ onDiscoveryComplete?: () => void;
26
25
  }
27
26
  export declare function useTracker(options: UseTrackerOptions): UseTrackerResult;
28
27
  //# sourceMappingURL=useTracker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTracker.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useTracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,cAAc,EAEd,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClE,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAiIvE"}
1
+ {"version":3,"file":"useTracker.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,cAAc,EAEd,mBAAmB,EAGpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAcvD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClE,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AA2BD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAiLvE"}
@@ -2,94 +2,120 @@
2
2
  /**
3
3
  * Live tracking hook for TUI
4
4
  *
5
- * Provides tracking functionality when RPC providers are available.
5
+ * Discovery is delegated to CLI subprocess for simplicity.
6
+ * Individual proposal tracking is done directly for better UX.
6
7
  */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
8
  Object.defineProperty(exports, "__esModule", { value: true });
41
9
  exports.useTracker = useTracker;
42
10
  const react_1 = require("react");
43
- const tracker_js_1 = require("../../../tracker.js");
11
+ const index_js_1 = require("../../../index.js");
12
+ const config_js_1 = require("../config.js");
13
+ const useCliProcess_js_1 = require("./useCliProcess.js");
14
+ function getTxHashFromCheckpoint(checkpoint) {
15
+ if (checkpoint.input.type === "governor") {
16
+ return checkpoint.input.creationTxHash;
17
+ }
18
+ if (checkpoint.input.type === "timelock") {
19
+ return checkpoint.input.scheduledTxHash;
20
+ }
21
+ throw new Error("Cannot track discovery checkpoint");
22
+ }
23
+ function buildCliArgs(config, cachePath) {
24
+ const args = ["run", "--cache", cachePath];
25
+ // RPC URLs from config
26
+ if (config.rpc.l1Url)
27
+ args.push("--l1-rpc", config.rpc.l1Url);
28
+ if (config.rpc.l2Url)
29
+ args.push("--l2-rpc", config.rpc.l2Url);
30
+ if (config.rpc.novaUrl)
31
+ args.push("--nova-rpc", config.rpc.novaUrl);
32
+ // Discovery settings
33
+ if (config.discovery.defaultDays) {
34
+ args.push("--max-age-days", config.discovery.defaultDays.toString());
35
+ }
36
+ if (config.discovery.startBlock) {
37
+ args.push("--start-block", config.discovery.startBlock.toString());
38
+ }
39
+ if (config.discovery.chunkSize) {
40
+ args.push("--l2-chunk-size", config.discovery.chunkSize.toString());
41
+ }
42
+ if (config.discovery.concurrency > 1) {
43
+ args.push("--concurrency", config.discovery.concurrency.toString());
44
+ }
45
+ return args;
46
+ }
44
47
  function useTracker(options) {
45
48
  const [isTracking, setIsTracking] = (0, react_1.useState)(false);
46
49
  const [progress, setProgress] = (0, react_1.useState)(null);
47
50
  const [lastResult, setLastResult] = (0, react_1.useState)(null);
48
51
  const [preparedTxs, setPreparedTxs] = (0, react_1.useState)([]);
49
52
  const [error, setError] = (0, react_1.useState)(null);
50
- const canTrack = !!options.providers;
53
+ const isTrackingRef = (0, react_1.useRef)(false);
54
+ const mountedRef = (0, react_1.useRef)(true);
55
+ (0, react_1.useEffect)(() => {
56
+ mountedRef.current = true;
57
+ return () => {
58
+ mountedRef.current = false;
59
+ };
60
+ }, []);
61
+ const cliProcess = (0, useCliProcess_js_1.useCliProcess)();
62
+ // Check if RPC is configured (either via providers or config)
63
+ // Memoized to avoid re-reading config file on every render
64
+ const canTrack = (0, react_1.useMemo)(() => {
65
+ if (options.providers)
66
+ return true;
67
+ const config = (0, config_js_1.loadConfig)();
68
+ return !!(config.rpc.l1Url || config.rpc.l2Url);
69
+ }, [options.providers]);
51
70
  const createTrackerInstance = (0, react_1.useCallback)(() => {
52
71
  if (!options.providers)
53
72
  return null;
54
- return (0, tracker_js_1.createTracker)({
73
+ const tuiConfig = (0, config_js_1.loadConfig)();
74
+ const chunkingConfig = {
75
+ l2ChunkSize: tuiConfig.discovery.chunkSize || index_js_1.CHUNK_SIZES.L2,
76
+ l1ChunkSize: index_js_1.CHUNK_SIZES.L1,
77
+ novaChunkSize: tuiConfig.discovery.chunkSize || index_js_1.CHUNK_SIZES.NOVA,
78
+ delayBetweenChunks: index_js_1.CHUNK_SIZES.DELAY_MS,
79
+ };
80
+ return (0, index_js_1.createTracker)({
55
81
  l1Provider: options.providers.l1Provider,
56
82
  l2Provider: options.providers.l2Provider,
57
83
  novaProvider: options.providers.novaProvider,
58
84
  cachePath: options.cachePath,
85
+ chunkingConfig,
59
86
  onProgress: (prog) => {
60
87
  const { stage, currentIndex, totalStages } = prog;
61
88
  setProgress(`[${currentIndex + 1}/${totalStages}] ${stage.type}: ${stage.status}`);
62
89
  },
63
90
  });
64
91
  }, [options.providers, options.cachePath]);
92
+ // Track a single proposal (used in ProposalDetail view)
65
93
  const track = (0, react_1.useCallback)(async (item) => {
66
- if (!canTrack) {
94
+ if (isTrackingRef.current) {
95
+ return null;
96
+ }
97
+ if (!options.providers) {
67
98
  setError("No RPC providers configured. Use --l2-rpc and --l1-rpc options.");
68
99
  return null;
69
100
  }
70
101
  const tracker = createTrackerInstance();
71
102
  if (!tracker)
72
103
  return null;
104
+ isTrackingRef.current = true;
73
105
  setIsTracking(true);
74
106
  setProgress("Starting...");
75
107
  setError(null);
76
108
  setPreparedTxs([]);
77
109
  try {
78
- let txHash;
79
- if (item.checkpoint.input.type === "governor") {
80
- txHash = item.checkpoint.input.creationTxHash;
81
- }
82
- else if (item.checkpoint.input.type === "timelock") {
83
- txHash = item.checkpoint.input.scheduledTxHash;
84
- }
85
- else {
86
- throw new Error("Cannot track discovery checkpoint");
87
- }
110
+ const txHash = getTxHashFromCheckpoint(item.checkpoint);
88
111
  const results = await tracker.trackByTxHash(txHash);
89
112
  const result = results[0] ?? null;
113
+ if (!mountedRef.current)
114
+ return null;
90
115
  setLastResult(result);
91
116
  if (result) {
92
117
  const prepared = [];
118
+ let prepErrors = 0;
93
119
  for (const stage of result.stages) {
94
120
  if (stage.status === "READY" || stage.executable) {
95
121
  try {
@@ -101,61 +127,75 @@ function useTracker(options) {
101
127
  }
102
128
  }
103
129
  catch {
104
- // Skip stages that can't be prepared
130
+ prepErrors++;
105
131
  }
106
132
  }
107
133
  }
108
134
  setPreparedTxs(prepared);
135
+ if (prepErrors > 0 && prepared.length === 0) {
136
+ setError(`Failed to prepare ${prepErrors} transaction(s)`);
137
+ }
109
138
  }
110
139
  return result;
111
140
  }
112
141
  catch (err) {
113
142
  const message = err instanceof Error ? err.message : String(err);
114
- setError(message);
143
+ if (mountedRef.current) {
144
+ setError(message);
145
+ }
115
146
  return null;
116
147
  }
117
148
  finally {
118
- setIsTracking(false);
119
- setProgress(null);
149
+ isTrackingRef.current = false;
150
+ if (mountedRef.current) {
151
+ setIsTracking(false);
152
+ setProgress(null);
153
+ }
120
154
  }
121
- }, [canTrack, createTrackerInstance]);
155
+ }, [options.providers, createTrackerInstance]);
156
+ // Discover new proposals via CLI subprocess
122
157
  const discover = (0, react_1.useCallback)(async () => {
123
- if (!canTrack || !options.providers) {
124
- setError("No RPC providers configured. Use --l2-rpc and --l1-rpc options.");
125
- return { proposals: 0, timelocks: 0 };
158
+ if (cliProcess.isRunning || isTrackingRef.current) {
159
+ return false;
126
160
  }
127
- const tracker = createTrackerInstance();
128
- if (!tracker)
129
- return { proposals: 0, timelocks: 0 };
161
+ const config = (0, config_js_1.loadConfig)();
162
+ // Check if we have RPC URLs configured
163
+ const hasRpcConfig = config.rpc.l1Url || config.rpc.l2Url || options.providers;
164
+ if (!hasRpcConfig) {
165
+ setError("No RPC URLs configured. Use Settings (S) to configure or pass --l2-rpc.");
166
+ return false;
167
+ }
168
+ isTrackingRef.current = true;
130
169
  setIsTracking(true);
131
- setProgress("Discovering new proposals...");
132
170
  setError(null);
133
- try {
134
- const toBlock = await options.providers.l2Provider.getBlockNumber();
135
- const { buildDefaultTargets } = await Promise.resolve().then(() => __importStar(require("../../../constants")));
136
- const targets = buildDefaultTargets();
137
- const { proposals, timelockOps } = await tracker.discoverAll(targets, toBlock);
138
- return { proposals: proposals.length, timelocks: timelockOps.length };
139
- }
140
- catch (err) {
141
- const message = err instanceof Error ? err.message : String(err);
142
- setError(message);
143
- return { proposals: 0, timelocks: 0 };
144
- }
145
- finally {
171
+ const args = buildCliArgs(config, options.cachePath);
172
+ const result = await cliProcess.run(args);
173
+ isTrackingRef.current = false;
174
+ if (mountedRef.current) {
146
175
  setIsTracking(false);
147
- setProgress(null);
176
+ if (!result.success) {
177
+ setError(result.error ?? "Discovery failed");
178
+ }
179
+ }
180
+ if (result.success) {
181
+ options.onDiscoveryComplete?.();
182
+ return true;
148
183
  }
149
- }, [canTrack, createTrackerInstance, options.providers]);
184
+ return false;
185
+ }, [cliProcess, options]);
186
+ // Sync progress from CLI process
187
+ const combinedProgress = cliProcess.progress ?? progress;
188
+ const combinedError = cliProcess.error ?? error;
189
+ const combinedIsTracking = cliProcess.isRunning || isTracking;
150
190
  const clearError = (0, react_1.useCallback)(() => {
151
191
  setError(null);
152
192
  }, []);
153
193
  return {
154
- isTracking,
155
- progress,
194
+ isTracking: combinedIsTracking,
195
+ progress: combinedProgress,
156
196
  lastResult,
157
197
  preparedTxs,
158
- error,
198
+ error: combinedError,
159
199
  canTrack,
160
200
  track,
161
201
  discover,