@qontinui/navigation 0.2.0 → 0.3.0

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/dist/index.cjs CHANGED
@@ -75,6 +75,7 @@ __export(index_exports, {
75
75
  isGroupExpanded: () => isGroupExpanded,
76
76
  isItemActive: () => isItemActive,
77
77
  isItemAvailable: () => isItemAvailable,
78
+ isItemDemoted: () => isItemDemoted,
78
79
  isItemExpanded: () => isItemExpanded,
79
80
  isSecondaryOpenFor: () => isSecondaryOpenFor,
80
81
  isValidIconName: () => isValidIconName,
@@ -106,7 +107,13 @@ var WORKSPACE_ITEMS = [
106
107
  description: "Tell the runner what to do in plain English",
107
108
  route: "/prompt-home",
108
109
  color: "#8B5CF6",
109
- productMode: "ai"
110
+ productMode: "ai",
111
+ // Runner-only demotion. On the runner this page COMPOSES a loop workflow
112
+ // (setup → verification → agentic → completion) from a prompt and hands it
113
+ // to the executor — it is the loop paradigm's front door, not the
114
+ // Terminal's, so it belongs behind the advanced disclosure there. On
115
+ // qontinui-web the same route is the app's landing page, so it stays.
116
+ hidden: ["runner"]
110
117
  },
111
118
  {
112
119
  id: "gui-automation",
@@ -115,7 +122,10 @@ var WORKSPACE_ITEMS = [
115
122
  description: "Run and schedule workflows",
116
123
  route: "/execute",
117
124
  color: "#10B981",
118
- productMode: "visual"
125
+ productMode: "visual",
126
+ // Web demotes it (coord+sessions default); the runner reaches it through
127
+ // the Visual product mode, which is itself disclosure-gated there.
128
+ hidden: ["web"]
119
129
  },
120
130
  {
121
131
  id: "terminal",
@@ -134,7 +144,12 @@ var WORKSPACE_ITEMS = [
134
144
  description: "Monitor active executions",
135
145
  route: "/runs/active",
136
146
  color: "#4A90D9",
137
- productMode: "ai"
147
+ productMode: "ai",
148
+ // The loop-workflow cockpit: phase badge, iteration counter, GUI/Playwright
149
+ // widgets and the "did the fix work?" verification panel. A Terminal
150
+ // session watches itself in the Terminal, so this is advanced on both
151
+ // platforms (web already demoted it locally).
152
+ hidden: true
138
153
  },
139
154
  {
140
155
  id: "productivity",
@@ -167,7 +182,9 @@ var SESSION_ITEMS = [
167
182
  icon: "Zap",
168
183
  description: "Action execution log",
169
184
  route: "/runs/actions",
170
- color: "#4A90D9"
185
+ color: "#4A90D9",
186
+ // GUI action log — only ever populated by a visual/loop workflow run.
187
+ hidden: true
171
188
  },
172
189
  {
173
190
  id: "run-image",
@@ -175,7 +192,8 @@ var SESSION_ITEMS = [
175
192
  icon: "Image",
176
193
  description: "Visual recognition results",
177
194
  route: "/runs/image-recognition",
178
- color: "#4A90D9"
195
+ color: "#4A90D9",
196
+ hidden: true
179
197
  },
180
198
  {
181
199
  id: "run-findings",
@@ -191,7 +209,9 @@ var SESSION_ITEMS = [
191
209
  icon: "FileSearch",
192
210
  description: "State exploration results",
193
211
  route: "/runs/state-exploration",
194
- color: "#4A90D9"
212
+ color: "#4A90D9",
213
+ // State-machine exploration is a visual-GUI-automation artifact.
214
+ hidden: true
195
215
  },
196
216
  {
197
217
  id: "run-tests",
@@ -199,7 +219,9 @@ var SESSION_ITEMS = [
199
219
  icon: "TestTube",
200
220
  description: "Playwright test results",
201
221
  route: "/runs/test-results",
202
- color: "#4A90D9"
222
+ color: "#4A90D9",
223
+ // Populated by the loop's verification phase, never by a chat session.
224
+ hidden: true
203
225
  },
204
226
  {
205
227
  id: "run-ai-output",
@@ -253,7 +275,12 @@ var REVIEW_ITEMS = [
253
275
  hasOwnPage: true,
254
276
  route: "/runs",
255
277
  color: "#4A90D9",
256
- productMode: "ai"
278
+ productMode: "ai",
279
+ // Runner keeps it: a Terminal/Claude session creates a `task_run`
280
+ // (`workflow_type: "chat"`), so this IS the runner's session history.
281
+ // qontinui-web demotes it — its sessions live in `coord.sessions` and
282
+ // produce no task_runs.
283
+ hidden: ["web"]
257
284
  },
258
285
  {
259
286
  id: "run-findings",
@@ -262,7 +289,8 @@ var REVIEW_ITEMS = [
262
289
  description: "Review findings and HITL questions across runs",
263
290
  route: "/runs/findings",
264
291
  color: "#4A90D9",
265
- productMode: "ai"
292
+ productMode: "ai",
293
+ hidden: ["web"]
266
294
  },
267
295
  {
268
296
  // Id is "observations" (NOT "memory"): it must match the runner's
@@ -458,8 +486,11 @@ var BUILD_ITEMS = [
458
486
  route: "/vga",
459
487
  color: "var(--brand-secondary)",
460
488
  // Visual GUI automation belongs to Visual mode, not AI Dev (removed from
461
- // the AI Dev sidebar on both runner and web).
462
- productMode: "visual"
489
+ // the AI Dev sidebar on both runner and web). Web demotes it outright; on
490
+ // the runner it is reached through the Visual product mode, which is itself
491
+ // behind the "Show visual GUI automation" disclosure.
492
+ productMode: "visual",
493
+ hidden: ["web"]
463
494
  },
464
495
  {
465
496
  id: "orchestration-loop",
@@ -660,7 +691,11 @@ var CONFIGURE_ITEMS = [
660
691
  icon: "Radio",
661
692
  description: "Workflow event bus, queue status, circuit breaker",
662
693
  hiddenInProd: true,
663
- productMode: "ai"
694
+ productMode: "ai",
695
+ // Workflow event bus — a loop-workflow internal. Dev-only AND advanced, so
696
+ // the CONFIGURE group has no default-visible item left and the group header
697
+ // is dropped entirely by filterGroupsForPlatform.
698
+ hidden: true
664
699
  }
665
700
  ];
666
701
  var CONFIGURE_GROUP = {
@@ -1104,11 +1139,16 @@ function setShowHiddenItems(show) {
1104
1139
  function getShowHiddenItems() {
1105
1140
  return _showHiddenItems;
1106
1141
  }
1142
+ function isItemDemoted(item, platform) {
1143
+ const demoted = item.hidden;
1144
+ if (!demoted) return false;
1145
+ return demoted === true || demoted.includes(platform);
1146
+ }
1107
1147
  function isItemAvailable(item, platform) {
1108
1148
  if (item.hiddenInProd && !isDevelopmentMode()) {
1109
1149
  return false;
1110
1150
  }
1111
- if (item.hidden && !_showHiddenItems) {
1151
+ if (isItemDemoted(item, platform) && !_showHiddenItems) {
1112
1152
  return false;
1113
1153
  }
1114
1154
  if (_productMode && item.productMode && item.productMode !== "both" && item.productMode !== _productMode) {
@@ -1454,6 +1494,7 @@ function NavigationItemShell({
1454
1494
  isGroupExpanded,
1455
1495
  isItemActive,
1456
1496
  isItemAvailable,
1497
+ isItemDemoted,
1457
1498
  isItemExpanded,
1458
1499
  isSecondaryOpenFor,
1459
1500
  isValidIconName,
package/dist/index.d.cts CHANGED
@@ -65,10 +65,18 @@ interface NavigationItem {
65
65
  * sidebar until the user opts in via the "Show advanced automation features"
66
66
  * setting (wired through `setShowHiddenItems(true)`). The route/tab id is
67
67
  * still registered, so deep-links and programmatic tab-activation continue
68
- * to resolve. Used to demote the workflow-authoring surfaces (workflow
69
- * builder, DAG editor, orchestration loop, step builders) now that the
70
- * Terminal is the primary entry point. */
71
- hidden?: boolean;
68
+ * to resolve. Used to demote the verification-agentic loop-workflow surfaces
69
+ * (workflow builder, DAG editor, orchestration loop, step builders, the
70
+ * run/execution dashboards) now that the Terminal is the primary entry point.
71
+ *
72
+ * `true` demotes the item on EVERY platform. A platform list demotes it only
73
+ * on the named platforms — the runner and qontinui-web disagree about a
74
+ * handful of items (the runner's Home/prompt entry is advanced there but is
75
+ * still web's landing page; web's coord+sessions default drops runs/findings
76
+ * the runner keeps), and expressing that at the source beats each app
77
+ * carrying its own parallel demotion list that silently drifts.
78
+ */
79
+ hidden?: boolean | Platform[];
72
80
  /** Product mode visibility - "ai", "visual", or "both" (default: shown in all modes) */
73
81
  productMode?: "ai" | "visual" | "both";
74
82
  /** URL path for web routing (e.g., "/build/workflows") */
@@ -177,10 +185,12 @@ type NavigationAction = {
177
185
  * - platform: "runner" | "web" | both (default) — which app shows the item
178
186
  * - productMode: "ai" | "visual" | "both" | undefined (default=both) — which product mode
179
187
  * - hiddenInProd: true — dev-only items hidden in production
180
- * - hidden: true — "advanced" surfaces (the workflow-authoring tools) kept
181
- * out of the default sidebar until the user opts in via "Show advanced
182
- * automation features" (setShowHiddenItems). Route/tab id stays registered,
183
- * so deep-links (e.g. the Terminal "save as workflow" disclosure) resolve.
188
+ * - hidden: true | Platform[] — "advanced" surfaces (the loop-workflow and
189
+ * workflow-authoring tools) kept out of the default sidebar until the user
190
+ * opts in via "Show advanced automation features" (setShowHiddenItems).
191
+ * Route/tab id stays registered, so deep-links (e.g. the Terminal
192
+ * "save as workflow" disclosure) resolve. A platform list demotes on only
193
+ * those platforms — see `NavigationItem.hidden`.
184
194
  *
185
195
  * ---------------------------------------------------------------------------
186
196
  * Terminal-centric information architecture (2026-06).
@@ -203,9 +213,21 @@ type NavigationAction = {
203
213
  * (Groups that end up with no visible items are dropped by
204
214
  * filterGroupsForPlatform, so no bare group header renders.)
205
215
  *
216
+ * 2026-07 follow-up — the loop-workflow残り. The first pass demoted the
217
+ * BUILDERS but left the loop's RUNTIME surfaces in the default set: the
218
+ * natural-language Home prompt (which composes and launches a
219
+ * setup→verification→agentic→completion workflow), the Active dashboard
220
+ * (phase badge, iteration counter, "did the fix work?" verification widget),
221
+ * and the GUI/loop-specific run detail tabs (Actions, Image Recognition,
222
+ * State Explorer, Test Results). Those are the loop paradigm's cockpit, not
223
+ * the Terminal's, so they are demoted too. What stays under Runs is the set a
224
+ * Terminal session actually produces — chat sessions create `task_runs` with
225
+ * `workflow_type: "chat"`, so Summary / Findings / AI Output / Statistics /
226
+ * AI Data remain first-class.
227
+ *
206
228
  * The default (toggle OFF, AI Dev mode) is therefore the lean, Terminal-first
207
- * set: WORKSPACE (Home / Terminal / Active / Productivity), REVIEW (Runs /
208
- * Findings / Memory / Knowledge), and SYSTEM (Settings / Help). This mirrors
229
+ * set: WORKSPACE (Terminal / Productivity), REVIEW (Runs / Findings / Memory /
230
+ * Knowledge / Helper Tasks), and SYSTEM (Settings / Help). This mirrors
209
231
  * qontinui-web's coord+sessions-centric default menu.
210
232
  *
211
233
  * Both platforms share this structure; per-item `platforms`/`productMode`
@@ -320,6 +342,13 @@ declare function setShowHiddenItems(show: boolean): void;
320
342
  * Whether `hidden` items are currently shown.
321
343
  */
322
344
  declare function getShowHiddenItems(): boolean;
345
+ /**
346
+ * Whether an item's `hidden` ("advanced") demotion applies on this platform.
347
+ *
348
+ * `hidden: true` demotes everywhere; `hidden: ["runner"]` demotes only on the
349
+ * runner. Absent/false is never demoted.
350
+ */
351
+ declare function isItemDemoted(item: NavigationItem, platform: Platform): boolean;
323
352
  /**
324
353
  * Filter a navigation item based on platform.
325
354
  * Returns true if the item should be shown on the given platform.
@@ -498,4 +527,4 @@ interface NavigationItemShellProps {
498
527
  */
499
528
  declare function NavigationItemShell({ item, onActivate, children, }: NavigationItemShellProps): React.ReactElement;
500
529
 
501
- export { AUTOMATE_GROUP, AUTOMATE_ITEMS, BUILD_GROUP, BUILD_ITEMS, CHILDREN_MAP, CONFIGURE_GROUP, CONFIGURE_ITEMS, DEV_GROUP, DEV_ITEMS, ICON_NAMES, INSIGHTS_GROUP, INSIGHTS_ITEMS, type IconName, NAVIGATION_GROUPS, type NavigationAction, type NavigationBadge, type NavigationGroup, type NavigationItem, type NavigationItemLike, NavigationItemShell, type NavigationItemShellProps, type NavigationState, type Platform, REVIEW_GROUP, REVIEW_ITEMS, RUNS_ITEMS, SESSION_ITEMS, SETTINGS_ITEMS, SPEND_GROUP, SPEND_ITEMS, STORAGE_KEYS, SYSTEM_GROUP, SYSTEM_ITEMS, type SecondarySidebarState, WORKSPACE_GROUP, WORKSPACE_ITEMS, createInitialState, deserializeState, filterGroupForPlatform, filterGroupsForPlatform, filterItemsForPlatform, findItemById, getAllItems, getChildrenForPlatform, getChildrenItems, getItemGroup, getNavigationGroups, getProductMode, getRunnerNavigation, getShowHiddenItems, getWebNavigation, isDevelopmentMode, isGroupExpanded, isItemActive, isItemAvailable, isItemExpanded, isSecondaryOpenFor, isValidIconName, navigationActions, navigationReducer, serializeState, setDevelopmentMode, setProductMode, setShowHiddenItems, useNavigationItem };
530
+ export { AUTOMATE_GROUP, AUTOMATE_ITEMS, BUILD_GROUP, BUILD_ITEMS, CHILDREN_MAP, CONFIGURE_GROUP, CONFIGURE_ITEMS, DEV_GROUP, DEV_ITEMS, ICON_NAMES, INSIGHTS_GROUP, INSIGHTS_ITEMS, type IconName, NAVIGATION_GROUPS, type NavigationAction, type NavigationBadge, type NavigationGroup, type NavigationItem, type NavigationItemLike, NavigationItemShell, type NavigationItemShellProps, type NavigationState, type Platform, REVIEW_GROUP, REVIEW_ITEMS, RUNS_ITEMS, SESSION_ITEMS, SETTINGS_ITEMS, SPEND_GROUP, SPEND_ITEMS, STORAGE_KEYS, SYSTEM_GROUP, SYSTEM_ITEMS, type SecondarySidebarState, WORKSPACE_GROUP, WORKSPACE_ITEMS, createInitialState, deserializeState, filterGroupForPlatform, filterGroupsForPlatform, filterItemsForPlatform, findItemById, getAllItems, getChildrenForPlatform, getChildrenItems, getItemGroup, getNavigationGroups, getProductMode, getRunnerNavigation, getShowHiddenItems, getWebNavigation, isDevelopmentMode, isGroupExpanded, isItemActive, isItemAvailable, isItemDemoted, isItemExpanded, isSecondaryOpenFor, isValidIconName, navigationActions, navigationReducer, serializeState, setDevelopmentMode, setProductMode, setShowHiddenItems, useNavigationItem };
package/dist/index.d.ts CHANGED
@@ -65,10 +65,18 @@ interface NavigationItem {
65
65
  * sidebar until the user opts in via the "Show advanced automation features"
66
66
  * setting (wired through `setShowHiddenItems(true)`). The route/tab id is
67
67
  * still registered, so deep-links and programmatic tab-activation continue
68
- * to resolve. Used to demote the workflow-authoring surfaces (workflow
69
- * builder, DAG editor, orchestration loop, step builders) now that the
70
- * Terminal is the primary entry point. */
71
- hidden?: boolean;
68
+ * to resolve. Used to demote the verification-agentic loop-workflow surfaces
69
+ * (workflow builder, DAG editor, orchestration loop, step builders, the
70
+ * run/execution dashboards) now that the Terminal is the primary entry point.
71
+ *
72
+ * `true` demotes the item on EVERY platform. A platform list demotes it only
73
+ * on the named platforms — the runner and qontinui-web disagree about a
74
+ * handful of items (the runner's Home/prompt entry is advanced there but is
75
+ * still web's landing page; web's coord+sessions default drops runs/findings
76
+ * the runner keeps), and expressing that at the source beats each app
77
+ * carrying its own parallel demotion list that silently drifts.
78
+ */
79
+ hidden?: boolean | Platform[];
72
80
  /** Product mode visibility - "ai", "visual", or "both" (default: shown in all modes) */
73
81
  productMode?: "ai" | "visual" | "both";
74
82
  /** URL path for web routing (e.g., "/build/workflows") */
@@ -177,10 +185,12 @@ type NavigationAction = {
177
185
  * - platform: "runner" | "web" | both (default) — which app shows the item
178
186
  * - productMode: "ai" | "visual" | "both" | undefined (default=both) — which product mode
179
187
  * - hiddenInProd: true — dev-only items hidden in production
180
- * - hidden: true — "advanced" surfaces (the workflow-authoring tools) kept
181
- * out of the default sidebar until the user opts in via "Show advanced
182
- * automation features" (setShowHiddenItems). Route/tab id stays registered,
183
- * so deep-links (e.g. the Terminal "save as workflow" disclosure) resolve.
188
+ * - hidden: true | Platform[] — "advanced" surfaces (the loop-workflow and
189
+ * workflow-authoring tools) kept out of the default sidebar until the user
190
+ * opts in via "Show advanced automation features" (setShowHiddenItems).
191
+ * Route/tab id stays registered, so deep-links (e.g. the Terminal
192
+ * "save as workflow" disclosure) resolve. A platform list demotes on only
193
+ * those platforms — see `NavigationItem.hidden`.
184
194
  *
185
195
  * ---------------------------------------------------------------------------
186
196
  * Terminal-centric information architecture (2026-06).
@@ -203,9 +213,21 @@ type NavigationAction = {
203
213
  * (Groups that end up with no visible items are dropped by
204
214
  * filterGroupsForPlatform, so no bare group header renders.)
205
215
  *
216
+ * 2026-07 follow-up — the loop-workflow残り. The first pass demoted the
217
+ * BUILDERS but left the loop's RUNTIME surfaces in the default set: the
218
+ * natural-language Home prompt (which composes and launches a
219
+ * setup→verification→agentic→completion workflow), the Active dashboard
220
+ * (phase badge, iteration counter, "did the fix work?" verification widget),
221
+ * and the GUI/loop-specific run detail tabs (Actions, Image Recognition,
222
+ * State Explorer, Test Results). Those are the loop paradigm's cockpit, not
223
+ * the Terminal's, so they are demoted too. What stays under Runs is the set a
224
+ * Terminal session actually produces — chat sessions create `task_runs` with
225
+ * `workflow_type: "chat"`, so Summary / Findings / AI Output / Statistics /
226
+ * AI Data remain first-class.
227
+ *
206
228
  * The default (toggle OFF, AI Dev mode) is therefore the lean, Terminal-first
207
- * set: WORKSPACE (Home / Terminal / Active / Productivity), REVIEW (Runs /
208
- * Findings / Memory / Knowledge), and SYSTEM (Settings / Help). This mirrors
229
+ * set: WORKSPACE (Terminal / Productivity), REVIEW (Runs / Findings / Memory /
230
+ * Knowledge / Helper Tasks), and SYSTEM (Settings / Help). This mirrors
209
231
  * qontinui-web's coord+sessions-centric default menu.
210
232
  *
211
233
  * Both platforms share this structure; per-item `platforms`/`productMode`
@@ -320,6 +342,13 @@ declare function setShowHiddenItems(show: boolean): void;
320
342
  * Whether `hidden` items are currently shown.
321
343
  */
322
344
  declare function getShowHiddenItems(): boolean;
345
+ /**
346
+ * Whether an item's `hidden` ("advanced") demotion applies on this platform.
347
+ *
348
+ * `hidden: true` demotes everywhere; `hidden: ["runner"]` demotes only on the
349
+ * runner. Absent/false is never demoted.
350
+ */
351
+ declare function isItemDemoted(item: NavigationItem, platform: Platform): boolean;
323
352
  /**
324
353
  * Filter a navigation item based on platform.
325
354
  * Returns true if the item should be shown on the given platform.
@@ -498,4 +527,4 @@ interface NavigationItemShellProps {
498
527
  */
499
528
  declare function NavigationItemShell({ item, onActivate, children, }: NavigationItemShellProps): React.ReactElement;
500
529
 
501
- export { AUTOMATE_GROUP, AUTOMATE_ITEMS, BUILD_GROUP, BUILD_ITEMS, CHILDREN_MAP, CONFIGURE_GROUP, CONFIGURE_ITEMS, DEV_GROUP, DEV_ITEMS, ICON_NAMES, INSIGHTS_GROUP, INSIGHTS_ITEMS, type IconName, NAVIGATION_GROUPS, type NavigationAction, type NavigationBadge, type NavigationGroup, type NavigationItem, type NavigationItemLike, NavigationItemShell, type NavigationItemShellProps, type NavigationState, type Platform, REVIEW_GROUP, REVIEW_ITEMS, RUNS_ITEMS, SESSION_ITEMS, SETTINGS_ITEMS, SPEND_GROUP, SPEND_ITEMS, STORAGE_KEYS, SYSTEM_GROUP, SYSTEM_ITEMS, type SecondarySidebarState, WORKSPACE_GROUP, WORKSPACE_ITEMS, createInitialState, deserializeState, filterGroupForPlatform, filterGroupsForPlatform, filterItemsForPlatform, findItemById, getAllItems, getChildrenForPlatform, getChildrenItems, getItemGroup, getNavigationGroups, getProductMode, getRunnerNavigation, getShowHiddenItems, getWebNavigation, isDevelopmentMode, isGroupExpanded, isItemActive, isItemAvailable, isItemExpanded, isSecondaryOpenFor, isValidIconName, navigationActions, navigationReducer, serializeState, setDevelopmentMode, setProductMode, setShowHiddenItems, useNavigationItem };
530
+ export { AUTOMATE_GROUP, AUTOMATE_ITEMS, BUILD_GROUP, BUILD_ITEMS, CHILDREN_MAP, CONFIGURE_GROUP, CONFIGURE_ITEMS, DEV_GROUP, DEV_ITEMS, ICON_NAMES, INSIGHTS_GROUP, INSIGHTS_ITEMS, type IconName, NAVIGATION_GROUPS, type NavigationAction, type NavigationBadge, type NavigationGroup, type NavigationItem, type NavigationItemLike, NavigationItemShell, type NavigationItemShellProps, type NavigationState, type Platform, REVIEW_GROUP, REVIEW_ITEMS, RUNS_ITEMS, SESSION_ITEMS, SETTINGS_ITEMS, SPEND_GROUP, SPEND_ITEMS, STORAGE_KEYS, SYSTEM_GROUP, SYSTEM_ITEMS, type SecondarySidebarState, WORKSPACE_GROUP, WORKSPACE_ITEMS, createInitialState, deserializeState, filterGroupForPlatform, filterGroupsForPlatform, filterItemsForPlatform, findItemById, getAllItems, getChildrenForPlatform, getChildrenItems, getItemGroup, getNavigationGroups, getProductMode, getRunnerNavigation, getShowHiddenItems, getWebNavigation, isDevelopmentMode, isGroupExpanded, isItemActive, isItemAvailable, isItemDemoted, isItemExpanded, isSecondaryOpenFor, isValidIconName, navigationActions, navigationReducer, serializeState, setDevelopmentMode, setProductMode, setShowHiddenItems, useNavigationItem };
package/dist/index.js CHANGED
@@ -16,7 +16,13 @@ var WORKSPACE_ITEMS = [
16
16
  description: "Tell the runner what to do in plain English",
17
17
  route: "/prompt-home",
18
18
  color: "#8B5CF6",
19
- productMode: "ai"
19
+ productMode: "ai",
20
+ // Runner-only demotion. On the runner this page COMPOSES a loop workflow
21
+ // (setup → verification → agentic → completion) from a prompt and hands it
22
+ // to the executor — it is the loop paradigm's front door, not the
23
+ // Terminal's, so it belongs behind the advanced disclosure there. On
24
+ // qontinui-web the same route is the app's landing page, so it stays.
25
+ hidden: ["runner"]
20
26
  },
21
27
  {
22
28
  id: "gui-automation",
@@ -25,7 +31,10 @@ var WORKSPACE_ITEMS = [
25
31
  description: "Run and schedule workflows",
26
32
  route: "/execute",
27
33
  color: "#10B981",
28
- productMode: "visual"
34
+ productMode: "visual",
35
+ // Web demotes it (coord+sessions default); the runner reaches it through
36
+ // the Visual product mode, which is itself disclosure-gated there.
37
+ hidden: ["web"]
29
38
  },
30
39
  {
31
40
  id: "terminal",
@@ -44,7 +53,12 @@ var WORKSPACE_ITEMS = [
44
53
  description: "Monitor active executions",
45
54
  route: "/runs/active",
46
55
  color: "#4A90D9",
47
- productMode: "ai"
56
+ productMode: "ai",
57
+ // The loop-workflow cockpit: phase badge, iteration counter, GUI/Playwright
58
+ // widgets and the "did the fix work?" verification panel. A Terminal
59
+ // session watches itself in the Terminal, so this is advanced on both
60
+ // platforms (web already demoted it locally).
61
+ hidden: true
48
62
  },
49
63
  {
50
64
  id: "productivity",
@@ -77,7 +91,9 @@ var SESSION_ITEMS = [
77
91
  icon: "Zap",
78
92
  description: "Action execution log",
79
93
  route: "/runs/actions",
80
- color: "#4A90D9"
94
+ color: "#4A90D9",
95
+ // GUI action log — only ever populated by a visual/loop workflow run.
96
+ hidden: true
81
97
  },
82
98
  {
83
99
  id: "run-image",
@@ -85,7 +101,8 @@ var SESSION_ITEMS = [
85
101
  icon: "Image",
86
102
  description: "Visual recognition results",
87
103
  route: "/runs/image-recognition",
88
- color: "#4A90D9"
104
+ color: "#4A90D9",
105
+ hidden: true
89
106
  },
90
107
  {
91
108
  id: "run-findings",
@@ -101,7 +118,9 @@ var SESSION_ITEMS = [
101
118
  icon: "FileSearch",
102
119
  description: "State exploration results",
103
120
  route: "/runs/state-exploration",
104
- color: "#4A90D9"
121
+ color: "#4A90D9",
122
+ // State-machine exploration is a visual-GUI-automation artifact.
123
+ hidden: true
105
124
  },
106
125
  {
107
126
  id: "run-tests",
@@ -109,7 +128,9 @@ var SESSION_ITEMS = [
109
128
  icon: "TestTube",
110
129
  description: "Playwright test results",
111
130
  route: "/runs/test-results",
112
- color: "#4A90D9"
131
+ color: "#4A90D9",
132
+ // Populated by the loop's verification phase, never by a chat session.
133
+ hidden: true
113
134
  },
114
135
  {
115
136
  id: "run-ai-output",
@@ -163,7 +184,12 @@ var REVIEW_ITEMS = [
163
184
  hasOwnPage: true,
164
185
  route: "/runs",
165
186
  color: "#4A90D9",
166
- productMode: "ai"
187
+ productMode: "ai",
188
+ // Runner keeps it: a Terminal/Claude session creates a `task_run`
189
+ // (`workflow_type: "chat"`), so this IS the runner's session history.
190
+ // qontinui-web demotes it — its sessions live in `coord.sessions` and
191
+ // produce no task_runs.
192
+ hidden: ["web"]
167
193
  },
168
194
  {
169
195
  id: "run-findings",
@@ -172,7 +198,8 @@ var REVIEW_ITEMS = [
172
198
  description: "Review findings and HITL questions across runs",
173
199
  route: "/runs/findings",
174
200
  color: "#4A90D9",
175
- productMode: "ai"
201
+ productMode: "ai",
202
+ hidden: ["web"]
176
203
  },
177
204
  {
178
205
  // Id is "observations" (NOT "memory"): it must match the runner's
@@ -368,8 +395,11 @@ var BUILD_ITEMS = [
368
395
  route: "/vga",
369
396
  color: "var(--brand-secondary)",
370
397
  // Visual GUI automation belongs to Visual mode, not AI Dev (removed from
371
- // the AI Dev sidebar on both runner and web).
372
- productMode: "visual"
398
+ // the AI Dev sidebar on both runner and web). Web demotes it outright; on
399
+ // the runner it is reached through the Visual product mode, which is itself
400
+ // behind the "Show visual GUI automation" disclosure.
401
+ productMode: "visual",
402
+ hidden: ["web"]
373
403
  },
374
404
  {
375
405
  id: "orchestration-loop",
@@ -570,7 +600,11 @@ var CONFIGURE_ITEMS = [
570
600
  icon: "Radio",
571
601
  description: "Workflow event bus, queue status, circuit breaker",
572
602
  hiddenInProd: true,
573
- productMode: "ai"
603
+ productMode: "ai",
604
+ // Workflow event bus — a loop-workflow internal. Dev-only AND advanced, so
605
+ // the CONFIGURE group has no default-visible item left and the group header
606
+ // is dropped entirely by filterGroupsForPlatform.
607
+ hidden: true
574
608
  }
575
609
  ];
576
610
  var CONFIGURE_GROUP = {
@@ -1014,11 +1048,16 @@ function setShowHiddenItems(show) {
1014
1048
  function getShowHiddenItems() {
1015
1049
  return _showHiddenItems;
1016
1050
  }
1051
+ function isItemDemoted(item, platform) {
1052
+ const demoted = item.hidden;
1053
+ if (!demoted) return false;
1054
+ return demoted === true || demoted.includes(platform);
1055
+ }
1017
1056
  function isItemAvailable(item, platform) {
1018
1057
  if (item.hiddenInProd && !isDevelopmentMode()) {
1019
1058
  return false;
1020
1059
  }
1021
- if (item.hidden && !_showHiddenItems) {
1060
+ if (isItemDemoted(item, platform) && !_showHiddenItems) {
1022
1061
  return false;
1023
1062
  }
1024
1063
  if (_productMode && item.productMode && item.productMode !== "both" && item.productMode !== _productMode) {
@@ -1363,6 +1402,7 @@ export {
1363
1402
  isGroupExpanded,
1364
1403
  isItemActive,
1365
1404
  isItemAvailable,
1405
+ isItemDemoted,
1366
1406
  isItemExpanded,
1367
1407
  isSecondaryOpenFor,
1368
1408
  isValidIconName,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qontinui/navigation",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Shared navigation structure for Qontinui applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -13,6 +13,7 @@
13
13
  "build": "tsup src/index.ts --format cjs,esm --dts && node -e \"if(!require('fs').statSync('dist/index.d.ts').size)process.exit(1)\"",
14
14
  "dev": "tsup src/index.ts --format cjs,esm --dts --watch",
15
15
  "typecheck": "tsc --noEmit",
16
+ "test": "vitest run",
16
17
  "lint": "eslint src/",
17
18
  "clean": "rm -rf dist",
18
19
  "prepublishOnly": "npm run build"
@@ -56,6 +57,7 @@
56
57
  "react": "^19.0.0",
57
58
  "tsup": "^8.0.1",
58
59
  "typescript": "^6.0.2",
59
- "typescript-eslint": "^8.61.0"
60
+ "typescript-eslint": "^8.61.0",
61
+ "vitest": "^3.2.7"
60
62
  }
61
63
  }