@grifhinz/logics-manager 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -1
- package/VERSION +1 -1
- package/clients/README.md +9 -0
- package/clients/shared-web/media/css/board.css +658 -0
- package/clients/shared-web/media/css/details.css +457 -0
- package/clients/shared-web/media/css/layout.css +123 -0
- package/clients/shared-web/media/css/toolbar.css +576 -0
- package/clients/shared-web/media/harnessApi.js +324 -0
- package/clients/shared-web/media/hostApi.js +213 -0
- package/clients/shared-web/media/hostApiContract.js +55 -0
- package/clients/shared-web/media/icon.png +0 -0
- package/clients/shared-web/media/layoutController.js +246 -0
- package/clients/shared-web/media/logics.svg +7 -0
- package/clients/shared-web/media/logicsModel.js +910 -0
- package/clients/shared-web/media/main.css +112 -0
- package/clients/shared-web/media/main.js +3 -0
- package/clients/shared-web/media/mainApp.js +1005 -0
- package/clients/shared-web/media/mainCore.js +604 -0
- package/clients/shared-web/media/mainInteractionHandlers.js +324 -0
- package/clients/shared-web/media/mainInteractions.js +378 -0
- package/clients/shared-web/media/renderBoard.js +3 -0
- package/clients/shared-web/media/renderBoardApp.js +1339 -0
- package/clients/shared-web/media/renderDetails.js +685 -0
- package/clients/shared-web/media/renderMarkdown.js +449 -0
- package/clients/shared-web/media/toolsPanelLayout.js +172 -0
- package/clients/shared-web/media/uiStatus.js +54 -0
- package/clients/shared-web/media/webviewChrome.js +405 -0
- package/clients/shared-web/media/webviewPersistence.js +116 -0
- package/clients/shared-web/media/webviewSelectors.js +491 -0
- package/clients/viewer/README.md +5 -0
- package/clients/viewer/browser-host.js +847 -0
- package/clients/viewer/index.html +237 -0
- package/clients/viewer/viewer.css +433 -0
- package/logics_manager/assist.py +9 -142
- package/logics_manager/assist_handoff.py +132 -0
- package/logics_manager/assist_surface.py +38 -0
- package/logics_manager/cli.py +78 -5
- package/logics_manager/flow.py +126 -24
- package/logics_manager/flow_evidence.py +63 -0
- package/logics_manager/update_check.py +138 -0
- package/logics_manager/viewer.py +533 -0
- package/package.json +12 -6
- package/pyproject.toml +1 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
window.createCdxLogicsMainInteractionHandlers = function createCdxLogicsMainInteractionHandlers(options) {
|
|
3
|
+
const { core, hostApi, layoutController, stackedQuery, compactListQuery, state } = options;
|
|
4
|
+
|
|
5
|
+
const render = core && typeof core.render === "function" ? () => core.render() : () => undefined;
|
|
6
|
+
const persistState = core && typeof core.persistState === "function" ? () => core.persistState() : () => undefined;
|
|
7
|
+
const captureScrollState =
|
|
8
|
+
core && typeof core.captureScrollState === "function" ? () => core.captureScrollState() : () => undefined;
|
|
9
|
+
const schedulePersistState =
|
|
10
|
+
core && typeof core.schedulePersistState === "function"
|
|
11
|
+
? () => core.schedulePersistState()
|
|
12
|
+
: () => undefined;
|
|
13
|
+
const resetPersistedUiState =
|
|
14
|
+
core && typeof core.resetPersistedUiState === "function"
|
|
15
|
+
? () => core.resetPersistedUiState()
|
|
16
|
+
: () => undefined;
|
|
17
|
+
const setFilterPanelOpen =
|
|
18
|
+
core && typeof core.setFilterPanelOpen === "function" ? (isOpen) => core.setFilterPanelOpen(isOpen) : () => undefined;
|
|
19
|
+
const setToolsPanelOpen =
|
|
20
|
+
core && typeof core.setToolsPanelOpen === "function"
|
|
21
|
+
? (viewNameOrOpen, maybeOpen) => {
|
|
22
|
+
if (typeof maybeOpen === "boolean") {
|
|
23
|
+
return core.setToolsPanelOpen(viewNameOrOpen, maybeOpen);
|
|
24
|
+
}
|
|
25
|
+
return core.setToolsPanelOpen(undefined, Boolean(viewNameOrOpen));
|
|
26
|
+
}
|
|
27
|
+
: () => undefined;
|
|
28
|
+
const restoreDefaultFilters =
|
|
29
|
+
core && typeof core.restoreDefaultFilters === "function" ? () => core.restoreDefaultFilters() : () => undefined;
|
|
30
|
+
const openSelectedItem =
|
|
31
|
+
core && typeof core.openSelectedItem === "function" ? (mode) => core.openSelectedItem(mode) : () => undefined;
|
|
32
|
+
const handleChangeProjectRoot =
|
|
33
|
+
core && typeof core.handleChangeProjectRoot === "function"
|
|
34
|
+
? () => core.handleChangeProjectRoot()
|
|
35
|
+
: async () => undefined;
|
|
36
|
+
const handleResetProjectRoot =
|
|
37
|
+
core && typeof core.handleResetProjectRoot === "function"
|
|
38
|
+
? () => core.handleResetProjectRoot()
|
|
39
|
+
: () => undefined;
|
|
40
|
+
const handleBootstrapLogics =
|
|
41
|
+
core && typeof core.handleBootstrapLogics === "function" ? () => core.handleBootstrapLogics() : () => undefined;
|
|
42
|
+
const handleAbout = core && typeof core.handleAbout === "function" ? () => core.handleAbout() : () => undefined;
|
|
43
|
+
const handleHostMessage =
|
|
44
|
+
core && typeof core.handleHostMessage === "function" ? (event) => core.handleHostMessage(event) : () => undefined;
|
|
45
|
+
const renderBoardErrorState =
|
|
46
|
+
core && typeof core.renderBoardErrorState === "function"
|
|
47
|
+
? (message) => core.renderBoardErrorState(message)
|
|
48
|
+
: () => undefined;
|
|
49
|
+
const handleDocumentClick =
|
|
50
|
+
core && typeof core.handleDocumentClick === "function"
|
|
51
|
+
? (event) => core.handleDocumentClick(event)
|
|
52
|
+
: () => undefined;
|
|
53
|
+
const handleDocumentKeydown =
|
|
54
|
+
core && typeof core.handleDocumentKeydown === "function"
|
|
55
|
+
? (event) => core.handleDocumentKeydown(event)
|
|
56
|
+
: () => undefined;
|
|
57
|
+
const handleSplitterKeydown =
|
|
58
|
+
core && typeof core.handleSplitterKeydown === "function"
|
|
59
|
+
? (event) => core.handleSplitterKeydown(event)
|
|
60
|
+
: () => undefined;
|
|
61
|
+
const handleResponsiveLayoutChange =
|
|
62
|
+
core && typeof core.handleResponsiveLayoutChange === "function"
|
|
63
|
+
? () => core.handleResponsiveLayoutChange()
|
|
64
|
+
: () => undefined;
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
onNewRequest() {
|
|
68
|
+
hostApi.newRequest();
|
|
69
|
+
setToolsPanelOpen(false);
|
|
70
|
+
},
|
|
71
|
+
onAbout() {
|
|
72
|
+
handleAbout();
|
|
73
|
+
setToolsPanelOpen(false);
|
|
74
|
+
},
|
|
75
|
+
onActivityToggle() {
|
|
76
|
+
const nextOpen = !state.activityPanelOpen;
|
|
77
|
+
const shouldCollapseForStackedLayout =
|
|
78
|
+
nextOpen &&
|
|
79
|
+
((stackedQuery && stackedQuery.matches) ||
|
|
80
|
+
(layoutController &&
|
|
81
|
+
typeof layoutController.isStackedLayout === "function" &&
|
|
82
|
+
layoutController.isStackedLayout()));
|
|
83
|
+
if (shouldCollapseForStackedLayout) {
|
|
84
|
+
state.uiState.detailsCollapsed = true;
|
|
85
|
+
}
|
|
86
|
+
state.activityPanelOpen = !state.activityPanelOpen;
|
|
87
|
+
persistState();
|
|
88
|
+
render();
|
|
89
|
+
},
|
|
90
|
+
onBoardScroll() {
|
|
91
|
+
captureScrollState();
|
|
92
|
+
schedulePersistState();
|
|
93
|
+
},
|
|
94
|
+
onBootstrapLogics() {
|
|
95
|
+
handleBootstrapLogics();
|
|
96
|
+
setToolsPanelOpen(false);
|
|
97
|
+
},
|
|
98
|
+
onUpdateLogicsKit() {
|
|
99
|
+
hostApi.updateLogicsKit();
|
|
100
|
+
setToolsPanelOpen(false);
|
|
101
|
+
},
|
|
102
|
+
onRepairLogicsKit() {
|
|
103
|
+
hostApi.repairLogicsKit();
|
|
104
|
+
setToolsPanelOpen(false);
|
|
105
|
+
},
|
|
106
|
+
onCheckEnvironment() {
|
|
107
|
+
hostApi.checkEnvironment();
|
|
108
|
+
setToolsPanelOpen(false);
|
|
109
|
+
},
|
|
110
|
+
onCheckHybridRuntime() {
|
|
111
|
+
hostApi.checkHybridRuntime();
|
|
112
|
+
setToolsPanelOpen(false);
|
|
113
|
+
},
|
|
114
|
+
onOpenHybridInsights() {
|
|
115
|
+
hostApi.openHybridInsights();
|
|
116
|
+
setToolsPanelOpen(false);
|
|
117
|
+
},
|
|
118
|
+
onOpenLogicsInsights() {
|
|
119
|
+
hostApi.openLogicsInsights();
|
|
120
|
+
setToolsPanelOpen(false);
|
|
121
|
+
},
|
|
122
|
+
onOpenOnboarding() {
|
|
123
|
+
hostApi.openOnboarding();
|
|
124
|
+
setToolsPanelOpen(false);
|
|
125
|
+
},
|
|
126
|
+
onAssistCommitAll() {
|
|
127
|
+
hostApi.assistCommitAll();
|
|
128
|
+
setToolsPanelOpen(false);
|
|
129
|
+
},
|
|
130
|
+
onAssistNextStep() {
|
|
131
|
+
hostApi.assistNextStep();
|
|
132
|
+
setToolsPanelOpen(false);
|
|
133
|
+
},
|
|
134
|
+
onAssistTriage() {
|
|
135
|
+
hostApi.assistTriage(state.selectedId || undefined);
|
|
136
|
+
setToolsPanelOpen(false);
|
|
137
|
+
},
|
|
138
|
+
onAssistDiffRisk() {
|
|
139
|
+
hostApi.assistDiffRisk();
|
|
140
|
+
setToolsPanelOpen(false);
|
|
141
|
+
},
|
|
142
|
+
onAssistSummarizeChangelog() {
|
|
143
|
+
hostApi.assistSummarizeChangelog();
|
|
144
|
+
setToolsPanelOpen(false);
|
|
145
|
+
},
|
|
146
|
+
onAssistPrepareRelease() {
|
|
147
|
+
hostApi.assistPrepareRelease();
|
|
148
|
+
setToolsPanelOpen(false);
|
|
149
|
+
},
|
|
150
|
+
onAssistPublishRelease() {
|
|
151
|
+
hostApi.assistPublishRelease();
|
|
152
|
+
setToolsPanelOpen(false);
|
|
153
|
+
},
|
|
154
|
+
onAssistSummarizeValidation() {
|
|
155
|
+
hostApi.assistSummarizeValidation();
|
|
156
|
+
setToolsPanelOpen(false);
|
|
157
|
+
},
|
|
158
|
+
onAssistValidationChecklist() {
|
|
159
|
+
hostApi.assistValidationChecklist();
|
|
160
|
+
setToolsPanelOpen(false);
|
|
161
|
+
},
|
|
162
|
+
onAssistDocConsistency() {
|
|
163
|
+
hostApi.assistDocConsistency();
|
|
164
|
+
setToolsPanelOpen(false);
|
|
165
|
+
},
|
|
166
|
+
onChangeProjectRoot() {
|
|
167
|
+
return handleChangeProjectRoot();
|
|
168
|
+
},
|
|
169
|
+
onCreateCompanionDoc(action) {
|
|
170
|
+
if (action === "new-request-guided") {
|
|
171
|
+
hostApi.newGuidedRequest();
|
|
172
|
+
} else {
|
|
173
|
+
hostApi.createCompanionDoc(state.selectedId || undefined);
|
|
174
|
+
}
|
|
175
|
+
setToolsPanelOpen(false);
|
|
176
|
+
},
|
|
177
|
+
onDetailsScroll() {
|
|
178
|
+
captureScrollState();
|
|
179
|
+
schedulePersistState();
|
|
180
|
+
},
|
|
181
|
+
onDetailsToggle() {
|
|
182
|
+
state.uiState.detailsCollapsed = !state.uiState.detailsCollapsed;
|
|
183
|
+
persistState();
|
|
184
|
+
render();
|
|
185
|
+
},
|
|
186
|
+
onDocumentClick(event) {
|
|
187
|
+
handleDocumentClick(event);
|
|
188
|
+
},
|
|
189
|
+
onDocumentKeydown(event) {
|
|
190
|
+
handleDocumentKeydown(event);
|
|
191
|
+
},
|
|
192
|
+
onFilterPanelToggle(event) {
|
|
193
|
+
event.stopPropagation();
|
|
194
|
+
if (state.toolsPanelOpen) {
|
|
195
|
+
setToolsPanelOpen(false);
|
|
196
|
+
}
|
|
197
|
+
setFilterPanelOpen(!state.secondaryToolbarOpen);
|
|
198
|
+
},
|
|
199
|
+
onFilterReset() {
|
|
200
|
+
restoreDefaultFilters();
|
|
201
|
+
persistState();
|
|
202
|
+
render();
|
|
203
|
+
},
|
|
204
|
+
onGroupChange(event) {
|
|
205
|
+
state.groupMode = event.target ? String(event.target.value || "stage") : "stage";
|
|
206
|
+
persistState();
|
|
207
|
+
render();
|
|
208
|
+
},
|
|
209
|
+
onHelpDismiss() {
|
|
210
|
+
state.helpDismissed = true;
|
|
211
|
+
persistState();
|
|
212
|
+
render();
|
|
213
|
+
},
|
|
214
|
+
onHideCompleteChange(event) {
|
|
215
|
+
state.hideCompleted = Boolean(event.target && event.target.checked);
|
|
216
|
+
persistState();
|
|
217
|
+
render();
|
|
218
|
+
},
|
|
219
|
+
onHideEmptyColumnsChange(event) {
|
|
220
|
+
state.hideEmptyColumns = Boolean(event.target && event.target.checked);
|
|
221
|
+
persistState();
|
|
222
|
+
render();
|
|
223
|
+
},
|
|
224
|
+
onHideProcessedRequestsChange(event) {
|
|
225
|
+
state.hideProcessedRequests = Boolean(event.target && event.target.checked);
|
|
226
|
+
persistState();
|
|
227
|
+
render();
|
|
228
|
+
},
|
|
229
|
+
onHideSpecChange(event) {
|
|
230
|
+
state.hideSpec = Boolean(event.target && event.target.checked);
|
|
231
|
+
persistState();
|
|
232
|
+
render();
|
|
233
|
+
},
|
|
234
|
+
onMarkDone() {
|
|
235
|
+
const item = state.items.find((entry) => entry.id === state.selectedId);
|
|
236
|
+
if (!item) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
hostApi.markDone(item);
|
|
240
|
+
},
|
|
241
|
+
onMarkObsolete() {
|
|
242
|
+
const item = state.items.find((entry) => entry.id === state.selectedId);
|
|
243
|
+
if (!item) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
hostApi.markObsolete(item);
|
|
247
|
+
},
|
|
248
|
+
onChangeStatus() {
|
|
249
|
+
const item = state.items.find((entry) => entry.id === state.selectedId);
|
|
250
|
+
if (!item) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
hostApi.changeStatus(item);
|
|
254
|
+
},
|
|
255
|
+
onOpenSelectedItem() {
|
|
256
|
+
openSelectedItem("open");
|
|
257
|
+
},
|
|
258
|
+
onPromoteSelectedItem() {
|
|
259
|
+
if (!state.selectedId) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
hostApi.promote(state.selectedId);
|
|
263
|
+
},
|
|
264
|
+
onReadSelectedItem() {
|
|
265
|
+
openSelectedItem("read");
|
|
266
|
+
},
|
|
267
|
+
onResetProjectRoot() {
|
|
268
|
+
handleResetProjectRoot();
|
|
269
|
+
setToolsPanelOpen(false);
|
|
270
|
+
},
|
|
271
|
+
onSearchInput(event) {
|
|
272
|
+
state.searchQuery = event.target ? String(event.target.value || "") : "";
|
|
273
|
+
persistState();
|
|
274
|
+
render();
|
|
275
|
+
},
|
|
276
|
+
onSelectAgent() {
|
|
277
|
+
hostApi.selectAgent();
|
|
278
|
+
setToolsPanelOpen(false);
|
|
279
|
+
},
|
|
280
|
+
onShowCompanionDocsChange(event) {
|
|
281
|
+
state.showCompanionDocs = Boolean(event.target && event.target.checked);
|
|
282
|
+
persistState();
|
|
283
|
+
render();
|
|
284
|
+
},
|
|
285
|
+
onSortChange(event) {
|
|
286
|
+
state.sortMode = event.target ? String(event.target.value || "default") : "default";
|
|
287
|
+
persistState();
|
|
288
|
+
render();
|
|
289
|
+
},
|
|
290
|
+
onSplitterKeydown(event) {
|
|
291
|
+
handleSplitterKeydown(event);
|
|
292
|
+
},
|
|
293
|
+
onToggleAttention() {
|
|
294
|
+
state.attentionOnly = !state.attentionOnly;
|
|
295
|
+
persistState();
|
|
296
|
+
render();
|
|
297
|
+
},
|
|
298
|
+
onToggleViewMode() {
|
|
299
|
+
if (compactListQuery && compactListQuery.matches) {
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
state.uiState.viewMode = state.uiState.viewMode === "list" ? "board" : "list";
|
|
303
|
+
persistState();
|
|
304
|
+
render();
|
|
305
|
+
},
|
|
306
|
+
onToolsPanelToggle(viewName, event) {
|
|
307
|
+
const activeView = typeof viewName === "string" && viewName ? viewName : "workflow";
|
|
308
|
+
const nativeEvent = event && typeof event === "object" && "stopPropagation" in event ? event : null;
|
|
309
|
+
if (nativeEvent && typeof nativeEvent.stopPropagation === "function") {
|
|
310
|
+
nativeEvent.stopPropagation();
|
|
311
|
+
}
|
|
312
|
+
const shouldOpen = !state.toolsPanelOpen || state.toolsPanelView !== activeView;
|
|
313
|
+
state.toolsPanelView = shouldOpen ? activeView : state.toolsPanelView;
|
|
314
|
+
setToolsPanelOpen(activeView, shouldOpen);
|
|
315
|
+
},
|
|
316
|
+
onWindowMessage(event) {
|
|
317
|
+
handleHostMessage(event);
|
|
318
|
+
},
|
|
319
|
+
onWindowResize() {
|
|
320
|
+
handleResponsiveLayoutChange();
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
};
|
|
324
|
+
})();
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
window.createCdxLogicsMainInteractions = function createCdxLogicsMainInteractions(options) {
|
|
3
|
+
const {
|
|
4
|
+
activityToggle,
|
|
5
|
+
attentionToggle,
|
|
6
|
+
headerLogicsInsightsButton,
|
|
7
|
+
board,
|
|
8
|
+
assistCommitAllButton,
|
|
9
|
+
assistNextStepButton,
|
|
10
|
+
assistTriageButton,
|
|
11
|
+
assistDiffRiskButton,
|
|
12
|
+
assistSummarizeChangelogButton,
|
|
13
|
+
assistPrepareReleaseButton,
|
|
14
|
+
assistPublishReleaseButton,
|
|
15
|
+
assistSummarizeValidationButton,
|
|
16
|
+
assistValidationChecklistButton,
|
|
17
|
+
assistDocConsistencyButton,
|
|
18
|
+
bootstrapLogicsButton,
|
|
19
|
+
checkHybridRuntimeButton,
|
|
20
|
+
checkEnvironmentButton,
|
|
21
|
+
openHybridInsightsButton,
|
|
22
|
+
openLogicsInsightsButton,
|
|
23
|
+
openOnboardingButton,
|
|
24
|
+
changeProjectRootButton,
|
|
25
|
+
compactListQuery,
|
|
26
|
+
createCompanionDocToolButton,
|
|
27
|
+
detailsBody,
|
|
28
|
+
detailsToggle,
|
|
29
|
+
filterPanel,
|
|
30
|
+
filterResetButton,
|
|
31
|
+
filterToggle,
|
|
32
|
+
groupBySelect,
|
|
33
|
+
helpBannerDismiss,
|
|
34
|
+
hideCompleteToggle,
|
|
35
|
+
hideEmptyColumnsToggle,
|
|
36
|
+
hideProcessedRequestsToggle,
|
|
37
|
+
hideSpecToggle,
|
|
38
|
+
layoutController,
|
|
39
|
+
repairLogicsKitButton,
|
|
40
|
+
mainPane,
|
|
41
|
+
markDoneButton,
|
|
42
|
+
markObsoleteButton,
|
|
43
|
+
changeStatusButton,
|
|
44
|
+
newRequestToolButton,
|
|
45
|
+
onNewRequest,
|
|
46
|
+
onAbout,
|
|
47
|
+
onActivityToggle,
|
|
48
|
+
onBoardScroll,
|
|
49
|
+
onBootstrapLogics,
|
|
50
|
+
onCheckHybridRuntime,
|
|
51
|
+
onCheckEnvironment,
|
|
52
|
+
onOpenHybridInsights,
|
|
53
|
+
onOpenLogicsInsights,
|
|
54
|
+
onOpenOnboarding,
|
|
55
|
+
onChangeProjectRoot,
|
|
56
|
+
onAssistCommitAll,
|
|
57
|
+
onAssistNextStep,
|
|
58
|
+
onAssistTriage,
|
|
59
|
+
onAssistDiffRisk,
|
|
60
|
+
onAssistSummarizeChangelog,
|
|
61
|
+
onAssistPrepareRelease,
|
|
62
|
+
onAssistPublishRelease,
|
|
63
|
+
onAssistSummarizeValidation,
|
|
64
|
+
onAssistValidationChecklist,
|
|
65
|
+
onAssistDocConsistency,
|
|
66
|
+
onCreateCompanionDoc,
|
|
67
|
+
onDetailsScroll,
|
|
68
|
+
onDetailsToggle,
|
|
69
|
+
onDocumentClick,
|
|
70
|
+
onDocumentKeydown,
|
|
71
|
+
onFilterPanelToggle,
|
|
72
|
+
onFilterReset,
|
|
73
|
+
onGroupChange,
|
|
74
|
+
onHelpDismiss,
|
|
75
|
+
onHideCompleteChange,
|
|
76
|
+
onHideEmptyColumnsChange,
|
|
77
|
+
onHideProcessedRequestsChange,
|
|
78
|
+
onHideSpecChange,
|
|
79
|
+
onMarkDone,
|
|
80
|
+
onMarkObsolete,
|
|
81
|
+
onChangeStatus,
|
|
82
|
+
onOpenSelectedItem,
|
|
83
|
+
onPromoteSelectedItem,
|
|
84
|
+
onReadSelectedItem,
|
|
85
|
+
onResetProjectRoot,
|
|
86
|
+
onSearchInput,
|
|
87
|
+
onSelectAgent,
|
|
88
|
+
onShowCompanionDocsChange,
|
|
89
|
+
onSortChange,
|
|
90
|
+
onSplitterKeydown,
|
|
91
|
+
onToggleViewMode,
|
|
92
|
+
onToggleAttention,
|
|
93
|
+
onToolsPanelToggle,
|
|
94
|
+
onUpdateLogicsKit,
|
|
95
|
+
onRepairLogicsKit,
|
|
96
|
+
onWindowMessage,
|
|
97
|
+
onWindowResize,
|
|
98
|
+
openButton,
|
|
99
|
+
promoteButton,
|
|
100
|
+
readButton,
|
|
101
|
+
getToolsPanelView,
|
|
102
|
+
resetProjectRootButton,
|
|
103
|
+
searchInput,
|
|
104
|
+
selectAgentButton,
|
|
105
|
+
setControlDescription,
|
|
106
|
+
showCompanionDocsToggle,
|
|
107
|
+
sortBySelect,
|
|
108
|
+
splitter,
|
|
109
|
+
stackedQuery,
|
|
110
|
+
toolsPanel,
|
|
111
|
+
toolsToggle,
|
|
112
|
+
updateLogicsKitButton,
|
|
113
|
+
viewModeToggleButton,
|
|
114
|
+
aboutButton
|
|
115
|
+
} = options;
|
|
116
|
+
|
|
117
|
+
function attachMediaQueryListener(query, callback) {
|
|
118
|
+
if (!query || typeof callback !== "function") {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (typeof query.addEventListener === "function") {
|
|
122
|
+
query.addEventListener("change", callback);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (typeof query.addListener === "function") {
|
|
126
|
+
query.addListener(callback);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function attach() {
|
|
131
|
+
if (headerLogicsInsightsButton) {
|
|
132
|
+
headerLogicsInsightsButton.addEventListener("click", () => onOpenLogicsInsights());
|
|
133
|
+
}
|
|
134
|
+
if (viewModeToggleButton) {
|
|
135
|
+
viewModeToggleButton.addEventListener("click", () => onToggleViewMode());
|
|
136
|
+
}
|
|
137
|
+
if (bootstrapLogicsButton) {
|
|
138
|
+
bootstrapLogicsButton.addEventListener("click", () => onBootstrapLogics());
|
|
139
|
+
}
|
|
140
|
+
if (updateLogicsKitButton) {
|
|
141
|
+
updateLogicsKitButton.addEventListener("click", () => onUpdateLogicsKit());
|
|
142
|
+
}
|
|
143
|
+
if (repairLogicsKitButton) {
|
|
144
|
+
repairLogicsKitButton.addEventListener("click", () => onRepairLogicsKit());
|
|
145
|
+
}
|
|
146
|
+
if (checkEnvironmentButton) {
|
|
147
|
+
checkEnvironmentButton.addEventListener("click", () => onCheckEnvironment());
|
|
148
|
+
}
|
|
149
|
+
if (checkHybridRuntimeButton) {
|
|
150
|
+
checkHybridRuntimeButton.addEventListener("click", () => onCheckHybridRuntime());
|
|
151
|
+
}
|
|
152
|
+
if (openHybridInsightsButton) {
|
|
153
|
+
openHybridInsightsButton.addEventListener("click", () => onOpenHybridInsights());
|
|
154
|
+
}
|
|
155
|
+
if (openLogicsInsightsButton) {
|
|
156
|
+
openLogicsInsightsButton.addEventListener("click", () => onOpenLogicsInsights());
|
|
157
|
+
}
|
|
158
|
+
if (openOnboardingButton) {
|
|
159
|
+
openOnboardingButton.addEventListener("click", () => onOpenOnboarding());
|
|
160
|
+
}
|
|
161
|
+
if (assistCommitAllButton) {
|
|
162
|
+
assistCommitAllButton.addEventListener("click", () => onAssistCommitAll());
|
|
163
|
+
}
|
|
164
|
+
if (assistNextStepButton) {
|
|
165
|
+
assistNextStepButton.addEventListener("click", () => onAssistNextStep());
|
|
166
|
+
}
|
|
167
|
+
if (assistTriageButton) {
|
|
168
|
+
assistTriageButton.addEventListener("click", () => onAssistTriage());
|
|
169
|
+
}
|
|
170
|
+
if (assistDiffRiskButton) {
|
|
171
|
+
assistDiffRiskButton.addEventListener("click", () => onAssistDiffRisk());
|
|
172
|
+
}
|
|
173
|
+
if (assistSummarizeChangelogButton) {
|
|
174
|
+
assistSummarizeChangelogButton.addEventListener("click", () => onAssistSummarizeChangelog());
|
|
175
|
+
}
|
|
176
|
+
if (assistPrepareReleaseButton) {
|
|
177
|
+
assistPrepareReleaseButton.addEventListener("click", () => onAssistPrepareRelease());
|
|
178
|
+
}
|
|
179
|
+
if (assistPublishReleaseButton) {
|
|
180
|
+
assistPublishReleaseButton.addEventListener("click", () => onAssistPublishRelease());
|
|
181
|
+
}
|
|
182
|
+
if (assistSummarizeValidationButton) {
|
|
183
|
+
assistSummarizeValidationButton.addEventListener("click", () => onAssistSummarizeValidation());
|
|
184
|
+
}
|
|
185
|
+
if (assistValidationChecklistButton) {
|
|
186
|
+
assistValidationChecklistButton.addEventListener("click", () => onAssistValidationChecklist());
|
|
187
|
+
}
|
|
188
|
+
if (assistDocConsistencyButton) {
|
|
189
|
+
assistDocConsistencyButton.addEventListener("click", () => onAssistDocConsistency());
|
|
190
|
+
}
|
|
191
|
+
if (newRequestToolButton) {
|
|
192
|
+
newRequestToolButton.addEventListener("click", () => onNewRequest());
|
|
193
|
+
}
|
|
194
|
+
if (createCompanionDocToolButton) {
|
|
195
|
+
createCompanionDocToolButton.addEventListener("click", () => onCreateCompanionDoc("create-companion-doc"));
|
|
196
|
+
}
|
|
197
|
+
if (selectAgentButton) {
|
|
198
|
+
selectAgentButton.addEventListener("click", () => onSelectAgent());
|
|
199
|
+
}
|
|
200
|
+
if (changeProjectRootButton) {
|
|
201
|
+
changeProjectRootButton.addEventListener("click", () => onChangeProjectRoot());
|
|
202
|
+
}
|
|
203
|
+
if (resetProjectRootButton) {
|
|
204
|
+
resetProjectRootButton.addEventListener("click", () => onResetProjectRoot());
|
|
205
|
+
}
|
|
206
|
+
if (aboutButton) {
|
|
207
|
+
aboutButton.addEventListener("click", () => onAbout());
|
|
208
|
+
}
|
|
209
|
+
if (filterToggle) {
|
|
210
|
+
filterToggle.addEventListener("click", (event) => onFilterPanelToggle(event));
|
|
211
|
+
}
|
|
212
|
+
if (toolsToggle) {
|
|
213
|
+
toolsToggle.addEventListener(
|
|
214
|
+
"click",
|
|
215
|
+
(event) => onToolsPanelToggle(typeof getToolsPanelView === "function" ? getToolsPanelView() || "workflow" : "workflow", event)
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
if (hideCompleteToggle) {
|
|
219
|
+
hideCompleteToggle.addEventListener("change", (event) => onHideCompleteChange(event));
|
|
220
|
+
}
|
|
221
|
+
if (hideProcessedRequestsToggle) {
|
|
222
|
+
hideProcessedRequestsToggle.addEventListener("change", (event) => onHideProcessedRequestsChange(event));
|
|
223
|
+
}
|
|
224
|
+
if (hideSpecToggle) {
|
|
225
|
+
hideSpecToggle.addEventListener("change", (event) => onHideSpecChange(event));
|
|
226
|
+
}
|
|
227
|
+
if (showCompanionDocsToggle) {
|
|
228
|
+
showCompanionDocsToggle.addEventListener("change", (event) => onShowCompanionDocsChange(event));
|
|
229
|
+
}
|
|
230
|
+
if (hideEmptyColumnsToggle) {
|
|
231
|
+
hideEmptyColumnsToggle.addEventListener("change", (event) => onHideEmptyColumnsChange(event));
|
|
232
|
+
}
|
|
233
|
+
if (filterResetButton) {
|
|
234
|
+
filterResetButton.addEventListener("click", () => onFilterReset());
|
|
235
|
+
}
|
|
236
|
+
if (searchInput) {
|
|
237
|
+
searchInput.addEventListener("input", (event) => onSearchInput(event));
|
|
238
|
+
}
|
|
239
|
+
if (groupBySelect) {
|
|
240
|
+
groupBySelect.addEventListener("change", (event) => onGroupChange(event));
|
|
241
|
+
}
|
|
242
|
+
if (sortBySelect) {
|
|
243
|
+
sortBySelect.addEventListener("change", (event) => onSortChange(event));
|
|
244
|
+
}
|
|
245
|
+
if (attentionToggle) {
|
|
246
|
+
attentionToggle.addEventListener("click", () => onToggleAttention());
|
|
247
|
+
}
|
|
248
|
+
if (activityToggle) {
|
|
249
|
+
activityToggle.addEventListener("click", () => onActivityToggle());
|
|
250
|
+
}
|
|
251
|
+
if (helpBannerDismiss) {
|
|
252
|
+
helpBannerDismiss.addEventListener("click", () => onHelpDismiss());
|
|
253
|
+
}
|
|
254
|
+
if (board) {
|
|
255
|
+
board.addEventListener("scroll", () => onBoardScroll());
|
|
256
|
+
}
|
|
257
|
+
if (detailsBody) {
|
|
258
|
+
detailsBody.addEventListener("scroll", () => onDetailsScroll());
|
|
259
|
+
}
|
|
260
|
+
if (detailsToggle) {
|
|
261
|
+
detailsToggle.addEventListener("click", () => onDetailsToggle());
|
|
262
|
+
}
|
|
263
|
+
if (openButton) {
|
|
264
|
+
openButton.addEventListener("click", () => onOpenSelectedItem());
|
|
265
|
+
}
|
|
266
|
+
if (readButton) {
|
|
267
|
+
readButton.addEventListener("click", () => onReadSelectedItem());
|
|
268
|
+
}
|
|
269
|
+
if (promoteButton) {
|
|
270
|
+
promoteButton.addEventListener("click", () => onPromoteSelectedItem());
|
|
271
|
+
}
|
|
272
|
+
if (markDoneButton) {
|
|
273
|
+
markDoneButton.addEventListener("click", () => onMarkDone());
|
|
274
|
+
}
|
|
275
|
+
if (markObsoleteButton) {
|
|
276
|
+
markObsoleteButton.addEventListener("click", () => onMarkObsolete());
|
|
277
|
+
}
|
|
278
|
+
if (changeStatusButton) {
|
|
279
|
+
changeStatusButton.addEventListener("click", () => onChangeStatus());
|
|
280
|
+
}
|
|
281
|
+
if (toolsPanel) {
|
|
282
|
+
const toolsPanelCloseButton = toolsPanel.querySelector("[data-tools-panel-close]");
|
|
283
|
+
if (toolsPanelCloseButton instanceof HTMLElement) {
|
|
284
|
+
toolsPanelCloseButton.addEventListener("click", () => setToolsPanelOpen(false));
|
|
285
|
+
}
|
|
286
|
+
Array.from(toolsPanel.querySelectorAll("[data-tools-view-switch]")).forEach((button) => {
|
|
287
|
+
if (!(button instanceof HTMLElement)) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
const viewName = button.getAttribute("data-tools-view-switch") || "workflow";
|
|
291
|
+
button.addEventListener("click", (event) => onToolsPanelToggle(viewName, event));
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
window.addEventListener("message", (event) => onWindowMessage(event));
|
|
296
|
+
document.addEventListener("click", (event) => onDocumentClick(event));
|
|
297
|
+
document.addEventListener("keydown", (event) => onDocumentKeydown(event));
|
|
298
|
+
|
|
299
|
+
if (splitter) {
|
|
300
|
+
splitter.addEventListener("pointerdown", (event) => {
|
|
301
|
+
if (layoutController && typeof layoutController.startSplitDrag === "function") {
|
|
302
|
+
layoutController.startSplitDrag(event);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
splitter.addEventListener("pointermove", (event) => {
|
|
306
|
+
if (layoutController && typeof layoutController.updateSplitDrag === "function") {
|
|
307
|
+
layoutController.updateSplitDrag(event);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
splitter.addEventListener("pointerup", (event) => {
|
|
311
|
+
if (layoutController && typeof layoutController.endSplitDrag === "function") {
|
|
312
|
+
layoutController.endSplitDrag(event);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
splitter.addEventListener("pointercancel", (event) => {
|
|
316
|
+
if (layoutController && typeof layoutController.endSplitDrag === "function") {
|
|
317
|
+
layoutController.endSplitDrag(event);
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
splitter.addEventListener("keydown", (event) => onSplitterKeydown(event));
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
attachMediaQueryListener(stackedQuery, onWindowResize);
|
|
324
|
+
attachMediaQueryListener(compactListQuery, onWindowResize);
|
|
325
|
+
window.addEventListener("resize", () => onWindowResize());
|
|
326
|
+
|
|
327
|
+
setControlDescription(filterToggle, "Show view controls");
|
|
328
|
+
setControlDescription(toolsToggle, "Open tools menu");
|
|
329
|
+
setControlDescription(viewModeToggleButton, "Switch display mode");
|
|
330
|
+
setControlDescription(selectAgentButton, "Select active agent");
|
|
331
|
+
setControlDescription(newRequestToolButton, "Create a new request document");
|
|
332
|
+
setControlDescription(bootstrapLogicsButton, "Bootstrap Logics");
|
|
333
|
+
setControlDescription(checkEnvironmentButton, "Review environment health and recommended fixes");
|
|
334
|
+
setControlDescription(checkHybridRuntimeButton, "Check hybrid assist runtime health");
|
|
335
|
+
setControlDescription(openHybridInsightsButton, "Open the hybrid assist ROI insights panel");
|
|
336
|
+
setControlDescription(openLogicsInsightsButton, "Open repository-level Logics stats and relationship signals");
|
|
337
|
+
setControlDescription(assistCommitAllButton, "Suggest or execute a bounded commit plan");
|
|
338
|
+
setControlDescription(assistNextStepButton, "Suggest the next bounded workflow step");
|
|
339
|
+
setControlDescription(assistTriageButton, "Classify a workflow doc through the shared runtime");
|
|
340
|
+
setControlDescription(assistDiffRiskButton, "Assess the current diff risk through the shared runtime");
|
|
341
|
+
setControlDescription(assistSummarizeChangelogButton, "Generate bounded changelog entries through the shared runtime");
|
|
342
|
+
setControlDescription(assistPrepareReleaseButton, "Generate changelog via AI if missing, update README badge, and commit prep changes");
|
|
343
|
+
setControlDescription(assistPublishReleaseButton, "Create the release tag, push, and publish the GitHub release");
|
|
344
|
+
setControlDescription(assistSummarizeValidationButton, "Summarize validation status");
|
|
345
|
+
setControlDescription(assistValidationChecklistButton, "Build a bounded validation checklist through the shared runtime");
|
|
346
|
+
setControlDescription(assistDocConsistencyButton, "Review workflow doc consistency through the shared runtime");
|
|
347
|
+
setControlDescription(changeProjectRootButton, "Change project root");
|
|
348
|
+
setControlDescription(resetProjectRootButton, "Use workspace root");
|
|
349
|
+
setControlDescription(repairLogicsKitButton, "Check current Logics runtime state and repair the shared kit publication or bridge files.");
|
|
350
|
+
setControlDescription(aboutButton, "About this extension");
|
|
351
|
+
setControlDescription(detailsToggle, detailsToggle?.getAttribute("aria-label") || "Collapse details");
|
|
352
|
+
setControlDescription(markDoneButton, "Mark selected item as done");
|
|
353
|
+
setControlDescription(markObsoleteButton, "Mark selected item as obsolete");
|
|
354
|
+
setControlDescription(changeStatusButton, "Change selected item status");
|
|
355
|
+
setControlDescription(openButton, "Edit selected item");
|
|
356
|
+
setControlDescription(readButton, "Read selected item");
|
|
357
|
+
setControlDescription(promoteButton, "Promote selected item");
|
|
358
|
+
if (toolsPanel) {
|
|
359
|
+
toolsPanel.setAttribute("role", "menu");
|
|
360
|
+
}
|
|
361
|
+
if (filterPanel) {
|
|
362
|
+
filterPanel.setAttribute("role", "group");
|
|
363
|
+
filterPanel.setAttribute("aria-label", "View controls");
|
|
364
|
+
}
|
|
365
|
+
if (filterToggle && filterPanel && filterPanel.id) {
|
|
366
|
+
filterToggle.setAttribute("aria-controls", filterPanel.id);
|
|
367
|
+
}
|
|
368
|
+
if (toolsToggle && toolsPanel && toolsPanel.id) {
|
|
369
|
+
toolsToggle.setAttribute("aria-controls", toolsPanel.id);
|
|
370
|
+
}
|
|
371
|
+
if (mainPane) {
|
|
372
|
+
mainPane.classList.toggle("layout__main--activity", false);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return { attach };
|
|
377
|
+
};
|
|
378
|
+
})();
|