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

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 +83 -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
@@ -15,6 +15,8 @@ function getCreatedData(stages) {
15
15
  return getCreatedStage(stages)?.data;
16
16
  }
17
17
  function extractMarkdownTitle(description) {
18
+ if (!description)
19
+ return null;
18
20
  const lines = description.split("\n");
19
21
  for (const line of lines) {
20
22
  const trimmed = line.trim();
@@ -42,10 +44,10 @@ function getProposalTitle(checkpoint) {
42
44
  }
43
45
  }
44
46
  if (checkpoint.input.type === "governor") {
45
- return `Proposal ${checkpoint.input.proposalId.slice(0, 12)}...`;
47
+ return `Proposal ${checkpoint.input.proposalId}`;
46
48
  }
47
49
  if (checkpoint.input.type === "timelock") {
48
- return `Timelock Op ${checkpoint.input.operationId.slice(0, 12)}...`;
50
+ return `Timelock Op ${checkpoint.input.operationId}`;
49
51
  }
50
52
  return "Unknown";
51
53
  }
@@ -101,17 +103,51 @@ function getItemType(checkpoint, stages) {
101
103
  return "governor";
102
104
  }
103
105
  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 = "") {
106
+ switch (filter) {
107
+ case "all":
108
+ return true;
109
+ case "active":
110
+ return item.status === "active";
111
+ case "complete":
112
+ return item.status === "complete";
113
+ case "timelocks":
114
+ return item.type === "timelock";
115
+ default:
116
+ return true;
117
+ }
118
+ }
119
+ function getProgressNumber(progress) {
120
+ const match = progress.match(/^(\d+)/);
121
+ return match ? parseInt(match[1], 10) : 0;
122
+ }
123
+ function compareByDate(aDate, bDate, ascending) {
124
+ if (aDate === null && bDate === null)
125
+ return 0;
126
+ if (aDate === null)
127
+ return 1;
128
+ if (bDate === null)
129
+ return -1;
130
+ return ascending ? aDate - bDate : bDate - aDate;
131
+ }
132
+ function sortItems(items, sort) {
133
+ return [...items].sort((a, b) => {
134
+ switch (sort) {
135
+ case "newest":
136
+ return compareByDate(a.createdAt, b.createdAt, false);
137
+ case "oldest":
138
+ return compareByDate(a.createdAt, b.createdAt, true);
139
+ case "progress":
140
+ return getProgressNumber(b.stageProgress) - getProgressNumber(a.stageProgress);
141
+ case "status": {
142
+ const statusOrder = { active: 0, complete: 1, failed: 2 };
143
+ return (statusOrder[a.status] ?? 3) - (statusOrder[b.status] ?? 3);
144
+ }
145
+ default:
146
+ return 0;
147
+ }
148
+ });
149
+ }
150
+ function useProposals(data, filter, searchQuery = "", sort = "newest") {
115
151
  return (0, react_1.useMemo)(() => {
116
152
  if (!data)
117
153
  return { items: [], filteredCount: 0, totalCount: 0 };
@@ -120,8 +156,32 @@ function useProposals(data, filter, searchQuery = "") {
120
156
  if (checkpoint.input.type === "discovery")
121
157
  continue;
122
158
  const stages = getStages(checkpoint);
123
- if (stages.length === 0)
159
+ // Handle proposals with no stages yet (discovered but not tracked)
160
+ if (stages.length === 0) {
161
+ let title;
162
+ if (checkpoint.input.type === "governor") {
163
+ title = `Proposal ${checkpoint.input.proposalId.slice(0, 8)}...`;
164
+ }
165
+ else if (checkpoint.input.type === "timelock") {
166
+ title = `Timelock ${checkpoint.input.operationId.slice(0, 10)}...`;
167
+ }
168
+ else {
169
+ title = "Unknown";
170
+ }
171
+ items.push({
172
+ key,
173
+ title,
174
+ type: checkpoint.input.type === "timelock" ? "timelock" : "governor",
175
+ proposalType: undefined,
176
+ status: "active", // Needs tracking
177
+ stageProgress: "0/7",
178
+ currentStage: null,
179
+ hasExecutable: false,
180
+ createdAt: checkpoint.createdAt,
181
+ checkpoint,
182
+ });
124
183
  continue;
184
+ }
125
185
  const completedCount = stages.filter((s) => s.status === "COMPLETED" || s.status === "SKIPPED").length;
126
186
  items.push({
127
187
  key,
@@ -136,24 +196,20 @@ function useProposals(data, filter, searchQuery = "") {
136
196
  checkpoint,
137
197
  });
138
198
  }
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
- });
199
+ const sorted = sortItems(items, sort);
148
200
  const lowerSearch = searchQuery.toLowerCase();
149
- const filtered = items.filter((item) => {
201
+ const filtered = sorted.filter((item) => {
150
202
  if (!matchesFilter(item, filter))
151
203
  return false;
152
- if (lowerSearch && !item.title.toLowerCase().includes(lowerSearch))
153
- return false;
204
+ if (lowerSearch) {
205
+ const matchesTitle = item.title.toLowerCase().includes(lowerSearch);
206
+ const matchesKey = item.key.toLowerCase().includes(lowerSearch);
207
+ if (!matchesTitle && !matchesKey)
208
+ return false;
209
+ }
154
210
  return true;
155
211
  });
156
212
  return { items: filtered, filteredCount: filtered.length, totalCount: items.length };
157
- }, [data, filter, searchQuery]);
213
+ }, [data, filter, searchQuery, sort]);
158
214
  }
159
215
  //# 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,