cli-jaw 2.17.30 → 2.17.35

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 (135) hide show
  1. package/README.md +2 -0
  2. package/dist/src/agent/codex-app-client.js +69 -1
  3. package/dist/src/agent/codex-app-client.js.map +1 -1
  4. package/dist/src/agent/cursor-runtime.js +9 -0
  5. package/dist/src/agent/cursor-runtime.js.map +1 -1
  6. package/dist/src/agent/pi-runtime.js +1 -1
  7. package/dist/src/agent/pi-runtime.js.map +1 -1
  8. package/dist/src/agent/prompt-context.js +39 -0
  9. package/dist/src/agent/prompt-context.js.map +1 -1
  10. package/dist/src/agent/spawn.js +138 -20
  11. package/dist/src/agent/spawn.js.map +1 -1
  12. package/dist/src/browser/web-ai/capability-observation-presets.js +4 -0
  13. package/dist/src/browser/web-ai/capability-observation-presets.js.map +1 -1
  14. package/dist/src/browser/web-ai/chatgpt-model.js +9 -5
  15. package/dist/src/browser/web-ai/chatgpt-model.js.map +1 -1
  16. package/dist/src/browser/web-ai/grok-model.js +18 -5
  17. package/dist/src/browser/web-ai/grok-model.js.map +1 -1
  18. package/dist/src/cli/claude-models.js +6 -0
  19. package/dist/src/cli/claude-models.js.map +1 -1
  20. package/dist/src/cli/handlers-runtime.js +29 -4
  21. package/dist/src/cli/handlers-runtime.js.map +1 -1
  22. package/dist/src/cli/registry.js +56 -15
  23. package/dist/src/cli/registry.js.map +1 -1
  24. package/dist/src/code-mode/model-options.js +4 -4
  25. package/dist/src/code-mode/model-options.js.map +1 -1
  26. package/dist/src/core/config.js +1 -1
  27. package/dist/src/core/config.js.map +1 -1
  28. package/dist/src/core/db.js +19 -0
  29. package/dist/src/core/db.js.map +1 -1
  30. package/dist/src/core/runtime-settings.js +11 -2
  31. package/dist/src/core/runtime-settings.js.map +1 -1
  32. package/dist/src/orchestrator/attestation.js +66 -0
  33. package/dist/src/orchestrator/attestation.js.map +1 -1
  34. package/dist/src/orchestrator/gateway.js +11 -3
  35. package/dist/src/orchestrator/gateway.js.map +1 -1
  36. package/dist/src/orchestrator/pipeline.js +5 -0
  37. package/dist/src/orchestrator/pipeline.js.map +1 -1
  38. package/dist/src/routes/command.js +4 -1
  39. package/dist/src/routes/command.js.map +1 -1
  40. package/dist/src/routes/orchestrate.js +14 -2
  41. package/dist/src/routes/orchestrate.js.map +1 -1
  42. package/dist/src/slack/commands.js +1 -0
  43. package/dist/src/slack/commands.js.map +1 -1
  44. package/dist/src/telegram/bot.js +3 -2
  45. package/dist/src/telegram/bot.js.map +1 -1
  46. package/package.json +5 -1
  47. package/public/dist/assets/{Agent-BjxJRsKG.js → Agent-kyyjcnqC.js} +1 -1
  48. package/public/dist/assets/BrowserPanel-0b3deLGR.js +3 -0
  49. package/public/dist/assets/BrowserPanel-D7SnTts8.css +1 -0
  50. package/public/dist/assets/{Heartbeat-Ca8DmJcw.js → Heartbeat-CD1R95Kv.js} +1 -1
  51. package/public/dist/assets/{Memory-BY88ur_h.js → Memory-CpZIdE1o.js} +1 -1
  52. package/public/dist/assets/{ModelProvider-mtAtYLmW.js → ModelProvider-tL42E5dy.js} +1 -1
  53. package/public/dist/assets/agent-meta-KPnVam9G.js +1 -0
  54. package/public/dist/assets/{app-CYayckBa.js → app-BvRV-aEt.js} +4 -4
  55. package/public/dist/assets/bgtask-badge-DLqpImpn.js +1 -0
  56. package/public/dist/assets/{bgtask-badge-CT6s6rND.js → bgtask-badge-FiEB3FJm.js} +1 -1
  57. package/public/dist/assets/constants-BfYYzHNr.js +1 -0
  58. package/public/dist/assets/{employees-DCju7V1x.js → employees-86F_D_Ce.js} +1 -1
  59. package/public/dist/assets/iframe-renderer-C_swzquc.js +1 -0
  60. package/public/dist/assets/{iframe-renderer-LZp7Nqm1.js → iframe-renderer-eozJpgjk.js} +2 -2
  61. package/public/dist/assets/manager-BnmWx9xL.js +13 -0
  62. package/public/dist/assets/manager-Cmu0aKPb.css +1 -0
  63. package/public/dist/assets/{memory-V5caYbpS.js → memory-DX7U3WV_.js} +1 -1
  64. package/public/dist/assets/memory-DfPbqPTD.js +1 -0
  65. package/public/dist/assets/{message-history-Bp_sUDSx.js → message-history-B_fIGorC.js} +1 -1
  66. package/public/dist/assets/message-history-BhSsLjis.js +1 -0
  67. package/public/dist/assets/{render-Cd4frZ2U.js → render-fKAuISeM.js} +1 -1
  68. package/public/dist/assets/settings-BNqSR9Zr.js +1 -0
  69. package/public/dist/assets/{settings-a0blK1fr.js → settings-CH6exiZf.js} +1 -1
  70. package/public/dist/assets/{settings-core-C5qo8giT.js → settings-core-DqKyyxbQ.js} +1 -1
  71. package/public/dist/assets/settings-core-x7CmBZq1.js +1 -0
  72. package/public/dist/assets/{sidebar-FbI4udzs.js → sidebar-qyLy9Og8.js} +3 -3
  73. package/public/dist/assets/skills-C7Yi3LIq.js +1 -0
  74. package/public/dist/assets/{skills-DeG9lWF2.js → skills-DAhOtbfP.js} +1 -1
  75. package/public/dist/assets/{slash-commands-FoQuZXga.js → slash-commands-BYH6YVS4.js} +1 -1
  76. package/public/dist/assets/slash-commands-DEbJk3sj.js +1 -0
  77. package/public/dist/assets/{trace-drawer-CWs8ydMO.js → trace-drawer-nyAJ3Bm_.js} +1 -1
  78. package/public/dist/assets/{ui-Cd8etFwN.js → ui-C62w6bJS.js} +1 -1
  79. package/public/dist/assets/ui-CBErZPBp.js +1 -0
  80. package/public/dist/index.html +1 -1
  81. package/public/dist/manager/index.html +2 -2
  82. package/public/js/constants.ts +22 -5
  83. package/public/js/features/settings-types.ts +5 -0
  84. package/public/manager/src/App.tsx +1 -1
  85. package/public/manager/src/AppChrome.tsx +18 -3
  86. package/public/manager/src/SidebarRailRouter.tsx +47 -1
  87. package/public/manager/src/browser-panel/BrowserPanel.tsx +151 -57
  88. package/public/manager/src/browser-panel/browser-address-bar.tsx +53 -0
  89. package/public/manager/src/browser-panel/browser-address-state.ts +41 -0
  90. package/public/manager/src/browser-panel/browser-favicon.ts +18 -0
  91. package/public/manager/src/browser-panel/browser-history-store.ts +80 -0
  92. package/public/manager/src/browser-panel/browser-panel.css +141 -24
  93. package/public/manager/src/components/CommandBar.tsx +17 -5
  94. package/public/manager/src/components/InstanceGroups.tsx +143 -23
  95. package/public/manager/src/components/InstanceNavigator.tsx +55 -2
  96. package/public/manager/src/components/InstanceRow.tsx +51 -3
  97. package/public/manager/src/components/SidebarRail.tsx +10 -10
  98. package/public/manager/src/components/SidebarResizeHandle.tsx +22 -0
  99. package/public/manager/src/components/WorkspaceLayout.tsx +22 -8
  100. package/public/manager/src/components/instance-row-status.ts +48 -0
  101. package/public/manager/src/components/sidebar-keyboard.ts +129 -0
  102. package/public/manager/src/dashboard-settings/DashboardSettingsWorkspace.tsx +42 -0
  103. package/public/manager/src/help/helpContent.tsx +1 -0
  104. package/public/manager/src/hooks/useSidebarGroupCollapse.ts +46 -0
  105. package/public/manager/src/hooks/useSidebarWidth.ts +88 -0
  106. package/public/manager/src/hooks/useWindowFullscreen.ts +23 -0
  107. package/public/manager/src/manager-components.css +206 -31
  108. package/public/manager/src/manager-layout.css +30 -19
  109. package/public/manager/src/manager-p0-1-1.css +72 -36
  110. package/public/manager/src/manager-polish.css +6 -45
  111. package/public/manager/src/manager-shortcut-runner.ts +37 -1
  112. package/public/manager/src/manager-shortcuts.ts +21 -0
  113. package/public/manager/src/manager-tokens.css +190 -127
  114. package/public/manager/src/panels/PanelResizer.tsx +18 -2
  115. package/public/manager/src/panels/desktop-bridge.ts +12 -1
  116. package/public/manager/src/panels/panels.css +32 -32
  117. package/public/manager/src/settings/pages/Agent.tsx +26 -0
  118. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +6 -5
  119. package/public/manager/src/styles.css +15 -7
  120. package/public/manager/src/types.ts +5 -1
  121. package/public/dist/assets/BrowserPanel-CsYKexNf.js +0 -3
  122. package/public/dist/assets/BrowserPanel-DpntR8EJ.css +0 -1
  123. package/public/dist/assets/agent-meta-_Idad3qq.js +0 -1
  124. package/public/dist/assets/bgtask-badge-CidVvjWb.js +0 -1
  125. package/public/dist/assets/constants-DK-21dMG.js +0 -1
  126. package/public/dist/assets/iframe-renderer-aFXUtTXX.js +0 -1
  127. package/public/dist/assets/manager-CwqrZ2MH.js +0 -13
  128. package/public/dist/assets/manager-LkGs6qEJ.css +0 -1
  129. package/public/dist/assets/memory-BcZdf_oz.js +0 -1
  130. package/public/dist/assets/message-history-DrEPUdTy.js +0 -1
  131. package/public/dist/assets/settings-core-Cm-CmVLA.js +0 -1
  132. package/public/dist/assets/settings-mbGEtP5B.js +0 -1
  133. package/public/dist/assets/skills-G8KUeHBV.js +0 -1
  134. package/public/dist/assets/slash-commands-BYv3yboz.js +0 -1
  135. package/public/dist/assets/ui-yrn3s72A.js +0 -1
@@ -1,34 +1,56 @@
1
1
  .command-bar {
2
- gap: 4px;
3
- padding: 6px 10px;
2
+ box-sizing: border-box;
3
+ height: var(--workspace-topbar-height);
4
+ min-height: var(--workspace-topbar-height);
5
+ gap: 0;
6
+ padding: 0 10px;
4
7
  }
5
8
  .command-center.command-bar.is-electron-titlebar,
6
9
  :root[data-cli-jaw-desktop="true"] .command-center.command-bar {
7
- --electron-titlebar-left-reserve: 132px;
8
- padding: 6px 10px 6px var(--electron-titlebar-left-reserve);
10
+ --electron-titlebar-left-reserve: 90px;
11
+ padding: 0 10px 0 var(--electron-titlebar-left-reserve);
9
12
  }
10
- :root[data-cli-jaw-desktop="true"] .command-center.command-bar {
11
- -webkit-app-region: drag;
12
- }
13
- :root[data-cli-jaw-desktop="true"] .command-center.command-bar button,
14
- :root[data-cli-jaw-desktop="true"] .command-center.command-bar input,
15
- :root[data-cli-jaw-desktop="true"] .command-center.command-bar select,
16
- :root[data-cli-jaw-desktop="true"] .command-center.command-bar a,
17
- :root[data-cli-jaw-desktop="true"] .command-center.command-bar .command-actions,
18
- :root[data-cli-jaw-desktop="true"] .command-center.command-bar .command-search {
13
+ :root[data-window-fullscreen="true"] .command-center.command-bar.is-electron-titlebar,
14
+ :root[data-cli-jaw-desktop="true"][data-window-fullscreen="true"] .command-center.command-bar {
15
+ --electron-titlebar-left-reserve: 12px;
16
+ }
17
+ :root[data-cli-jaw-desktop="true"] .command-center.command-bar { -webkit-app-region: drag; }
18
+ :root[data-cli-jaw-desktop="true"] .command-center.command-bar :is(button, input, select, a, .command-actions, .command-search, .drawer-trigger, .theme-switch, .command-panel-controls, .search-input-wrapper, .desktop-open-button, .desktop-status-badge) {
19
19
  -webkit-app-region: no-drag;
20
20
  }
21
21
 
22
22
  .command-primary {
23
+ height: 100%;
23
24
  gap: 8px;
24
- grid-template-columns: minmax(112px, 148px) max-content minmax(max-content, 1fr);
25
- }
25
+ grid-template-columns: auto minmax(0, 1fr) auto;
26
+ grid-template-areas: "title search actions";
27
+ }
28
+ .drawer-trigger { grid-area: title; }
29
+ /* .command-icon-button is more specific than the components display:none;
30
+ keep the mobile drawer trigger hidden on desktop. */
31
+ .command-primary .drawer-trigger.command-icon-button { display: none; }
32
+ @media (max-width: 1023px) {
33
+ .command-primary {
34
+ grid-template-columns: auto auto minmax(0, 1fr) auto;
35
+ grid-template-areas: "drawer title search actions";
36
+ }
37
+ .command-primary .drawer-trigger.command-icon-button { display: inline-grid; grid-area: drawer; }
38
+ }
39
+ @media (max-width: 767px) {
40
+ .command-primary {
41
+ grid-template-columns: auto minmax(0, 1fr) auto;
42
+ grid-template-areas: "drawer search actions";
43
+ }
44
+ }
45
+ .command-title { grid-area: title; }
46
+ .command-search { grid-area: search; width: 100%; max-width: none; }
47
+ .command-actions { grid-area: actions; }
26
48
 
27
49
  .command-title {
28
50
  --manager-brand-cyan: #21e6f3;
29
51
  position: relative;
30
- display: flex;
31
- gap: 0;
52
+ display: inline-flex;
53
+ gap: 8px;
32
54
  align-content: center;
33
55
  align-items: center;
34
56
  min-width: 0;
@@ -37,16 +59,16 @@
37
59
 
38
60
  .command-title h1,
39
61
  .command-title .manager-brand-heading {
40
- max-width: 136px;
62
+ max-width: 148px;
41
63
  overflow: hidden;
42
64
  text-overflow: ellipsis;
43
65
  white-space: nowrap;
44
66
  color: var(--manager-brand-cyan);
45
67
  font-family: "Satoshi", "Geist Mono", "IBM Plex Mono", monospace;
46
- font-size: 14px;
47
- font-weight: 850;
48
- letter-spacing: 0;
49
- line-height: 0.95;
68
+ font-size: 13px;
69
+ font-weight: 600;
70
+ letter-spacing: 0.02em;
71
+ line-height: 1;
50
72
  text-shadow: 0 0 16px color-mix(in srgb, var(--manager-brand-cyan) 28%, transparent);
51
73
  }
52
74
 
@@ -60,6 +82,7 @@
60
82
 
61
83
  .manager-brand-wordmark {
62
84
  flex: 0 0 auto;
85
+ letter-spacing: 0.02em;
63
86
  }
64
87
 
65
88
  .manager-brand-dash {
@@ -89,18 +112,21 @@
89
112
  gap: 4px;
90
113
  }
91
114
 
115
+ .command-icon-button,
92
116
  .command-panel-toggle {
93
- width: 30px;
94
- min-width: 30px;
95
- height: 30px;
96
- min-height: 30px;
117
+ width: 28px;
118
+ min-width: 28px;
119
+ height: 28px;
120
+ min-height: 28px;
97
121
  display: inline-grid;
98
122
  place-items: center;
123
+ padding: 0;
124
+ border-radius: var(--control-radius);
125
+ }
126
+ .command-panel-toggle {
99
127
  border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border-subtle));
100
- border-radius: 8px;
101
128
  background: color-mix(in srgb, var(--accent) 7%, transparent);
102
129
  color: var(--text-primary);
103
- padding: 0;
104
130
  }
105
131
 
106
132
  .command-panel-toggle:hover,
@@ -114,6 +140,21 @@
114
140
  background: color-mix(in srgb, var(--accent) 18%, var(--bg-raised));
115
141
  }
116
142
 
143
+ .search-input-wrapper.is-ghost input {
144
+ height: 28px;
145
+ min-height: 28px;
146
+ border: 1px solid transparent;
147
+ background: var(--sidebar-control-surface);
148
+ border-radius: var(--control-radius);
149
+ padding: 0 8px 0 32px;
150
+ font-size: 12px;
151
+ }
152
+ .command-palette-trigger {
153
+ height: 28px;
154
+ min-height: 28px;
155
+ border-radius: var(--control-radius);
156
+ }
157
+
117
158
  .workbench-preview .workbench-header {
118
159
  padding: 4px 8px;
119
160
  }
@@ -132,11 +173,6 @@
132
173
  border-radius: 4px;
133
174
  }
134
175
 
135
- .manager-shell.is-sidebar-collapsed .manager-workspace,
136
- .manager-workspace.is-sidebar-collapsed {
137
- --sidebar-width: 44px;
138
- }
139
-
140
176
  .manager-shell.is-sidebar-collapsed .sidebar-rail {
141
177
  padding: 6px 4px;
142
178
  }
@@ -165,9 +201,9 @@
165
201
  }
166
202
 
167
203
  .dashboard-shell.manager-shell:not(.is-sidebar-collapsed) .rail-button {
168
- width: 30px;
169
- min-width: 30px;
170
- min-height: 30px;
204
+ width: 32px;
205
+ min-width: 32px;
206
+ min-height: 32px;
171
207
  }
172
208
 
173
209
  .dashboard-shell.manager-shell:not(.is-sidebar-collapsed) .rail-spacer {
@@ -2,10 +2,6 @@
2
2
  --activity-dock-height: 0px;
3
3
  }
4
4
 
5
- .dashboard-shell.manager-shell:not(.is-sidebar-collapsed) .manager-workspace {
6
- --sidebar-width: 300px;
7
- }
8
-
9
5
  .manager-workspace.is-inspector-collapsed .manager-activity {
10
6
  display: none;
11
7
  }
@@ -15,8 +11,8 @@
15
11
  }
16
12
 
17
13
  .rail-button {
18
- width: auto;
19
- min-width: 34px;
14
+ width: 32px;
15
+ min-width: 32px;
20
16
  gap: 6px;
21
17
  color: var(--text-secondary);
22
18
  font-size: 12px;
@@ -28,14 +24,10 @@
28
24
 
29
25
  .rail-button-short {
30
26
  display: none;
31
- font-family: "Geist Mono", "JetBrains Mono", monospace;
27
+ font-family: var(--font-mono);
32
28
  font-weight: 700;
33
29
  }
34
30
 
35
- .rail-button.is-active {
36
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 18%, transparent);
37
- }
38
-
39
31
  .manager-shell.is-sidebar-collapsed .rail-button {
40
32
  width: 38px;
41
33
  min-width: 38px;
@@ -50,33 +42,10 @@
50
42
  display: inline;
51
43
  }
52
44
 
53
- .command-bar {
54
- gap: 4px;
55
- padding: 6px 10px;
56
- }
57
- .command-bar.is-electron-titlebar {
58
- padding-left: 132px;
59
- }
60
-
61
- .command-primary {
62
- gap: 8px;
63
- grid-template-columns: minmax(108px, 150px) max-content minmax(max-content, 1fr);
64
- }
65
-
66
45
  .command-title .eyebrow {
67
46
  display: none;
68
47
  }
69
48
 
70
- .command-title h1 {
71
- max-width: 150px;
72
- overflow: hidden;
73
- text-overflow: ellipsis;
74
- white-space: nowrap;
75
- color: var(--text-primary);
76
- font-size: 14px;
77
- font-weight: 700;
78
- }
79
-
80
49
  .command-filter-strip {
81
50
  gap: 6px;
82
51
  flex-wrap: nowrap;
@@ -159,11 +128,6 @@
159
128
  border-radius: 4px;
160
129
  }
161
130
 
162
- .manager-shell.is-sidebar-collapsed .manager-workspace,
163
- .manager-workspace.is-sidebar-collapsed {
164
- --sidebar-width: 44px;
165
- }
166
-
167
131
  .manager-shell.is-sidebar-collapsed .sidebar-rail {
168
132
  padding: 6px 4px;
169
133
  }
@@ -189,7 +153,7 @@
189
153
  .manager-sidebar .instance-row {
190
154
  gap: 4px;
191
155
  margin-bottom: 4px;
192
- border-radius: 6px;
156
+ border-radius: var(--radius-sm);
193
157
  padding: 7px 8px;
194
158
  }
195
159
 
@@ -273,6 +237,7 @@
273
237
  .manager-sidebar .instance-actions button,
274
238
  .manager-sidebar .instance-actions .open-link {
275
239
  min-height: 24px;
240
+ border-radius: var(--control-radius);
276
241
  padding-inline: 5px;
277
242
  font-size: 10.5px;
278
243
  }
@@ -282,12 +247,8 @@
282
247
  }
283
248
 
284
249
  @media (max-width: 1279px) and (min-width: 1024px) {
285
- .dashboard-shell.manager-shell:not(.is-sidebar-collapsed) .manager-workspace {
286
- --sidebar-width: 280px;
287
- }
288
-
289
250
  .dashboard-shell.manager-shell:not(.is-sidebar-collapsed) .manager-workspace.is-right-panel-open {
290
- grid-template-columns: var(--sidebar-width, 300px) minmax(0, 1fr) var(--right-panel-width, 320px);
251
+ grid-template-columns: var(--sidebar-width) minmax(0, 1fr) var(--right-panel-width, 320px);
291
252
  grid-template-areas: "sidebar center right" "sidebar bottom right";
292
253
  }
293
254
 
@@ -1,6 +1,8 @@
1
- import type { DashboardDetailTab, DashboardInstance, DashboardShortcutAction, DashboardSidebarMode } from './types';
1
+ import type { DashboardDetailTab, DashboardInstance, DashboardShortcutAction, DashboardShortcutKeymap, DashboardSidebarMode } from './types';
2
+ import { actionForShortcutEvent } from './manager-shortcuts';
2
3
  import { panelShortcutBus } from './panels/panel-shortcut-bus';
3
4
  import { getDesktop } from './panels/desktop-bridge';
5
+ import { getInstanceJumpSelector, jumpInstanceIndexFromAction, readRenderedInstancePorts } from './components/sidebar-keyboard';
4
6
 
5
7
  /**
6
8
  * Dependencies the manager keyboard-shortcut runner needs from <App>.
@@ -22,6 +24,14 @@ export interface ManagerShortcutRunnerDeps {
22
24
 
23
25
  export function runManagerShortcut(action: DashboardShortcutAction, deps: ManagerShortcutRunnerDeps): void {
24
26
  if (panelShortcutBus.dispatch(action)) return;
27
+ const jumpIndex = jumpInstanceIndexFromAction(action);
28
+ if (jumpIndex != null) {
29
+ const root = document.getElementById('manager-sidebar-list');
30
+ if (!root) return;
31
+ const port = readRenderedInstancePorts(root)[jumpIndex];
32
+ if (port != null) getInstanceJumpSelector()?.(port);
33
+ return;
34
+ }
25
35
  if (action === 'focusInstances') {
26
36
  deps.handleSidebarModeChange('instances');
27
37
  deps.setDrawerOpen(false);
@@ -106,4 +116,30 @@ export function runManagerShortcut(action: DashboardShortcutAction, deps: Manage
106
116
  deps.handleSidebarToggle();
107
117
  return;
108
118
  }
119
+ if (action === 'resetSidebarWidth') {
120
+ document.dispatchEvent(new CustomEvent('jaw:shortcut-action', { detail: 'resetSidebarWidth' }));
121
+ return;
122
+ }
123
+ }
124
+
125
+ const CAPTURE_TOGGLE_ACTIONS = new Set<DashboardShortcutAction>([
126
+ 'toggleLeftSidebar',
127
+ 'toggleRightPanel',
128
+ 'resetSidebarWidth',
129
+ ]);
130
+
131
+ export function createManagerCaptureKeydownHandler(
132
+ getKeymap: () => DashboardShortcutKeymap,
133
+ onAction: (action: DashboardShortcutAction) => void,
134
+ ): (event: KeyboardEvent) => void {
135
+ return (event: KeyboardEvent) => {
136
+ if (event.defaultPrevented) return;
137
+ const target = event.target;
138
+ if (target instanceof Element && target.closest('[data-keybinding-capture]')) return;
139
+ const action = actionForShortcutEvent(event, getKeymap());
140
+ if (!action || !CAPTURE_TOGGLE_ACTIONS.has(action)) return;
141
+ event.preventDefault();
142
+ event.stopPropagation();
143
+ onAction(action);
144
+ };
109
145
  }
@@ -27,6 +27,16 @@ export const MANAGER_SHORTCUT_ACTIONS: DashboardShortcutAction[] = [
27
27
  'terminalClear',
28
28
  'terminalNewTab',
29
29
  'toggleLeftSidebar',
30
+ 'resetSidebarWidth',
31
+ 'jumpInstance1',
32
+ 'jumpInstance2',
33
+ 'jumpInstance3',
34
+ 'jumpInstance4',
35
+ 'jumpInstance5',
36
+ 'jumpInstance6',
37
+ 'jumpInstance7',
38
+ 'jumpInstance8',
39
+ 'jumpInstance9',
30
40
  ];
31
41
 
32
42
  export const DEFAULT_MANAGER_SHORTCUT_KEYMAP: DashboardShortcutKeymap = {
@@ -56,6 +66,16 @@ export const DEFAULT_MANAGER_SHORTCUT_KEYMAP: DashboardShortcutKeymap = {
56
66
  terminalClear: 'Meta+K',
57
67
  terminalNewTab: 'Meta+T',
58
68
  toggleLeftSidebar: 'Meta+Shift+B',
69
+ resetSidebarWidth: 'Alt+Shift+B',
70
+ jumpInstance1: 'Alt+1',
71
+ jumpInstance2: 'Alt+2',
72
+ jumpInstance3: 'Alt+3',
73
+ jumpInstance4: 'Alt+4',
74
+ jumpInstance5: 'Alt+5',
75
+ jumpInstance6: 'Alt+6',
76
+ jumpInstance7: 'Alt+7',
77
+ jumpInstance8: 'Alt+8',
78
+ jumpInstance9: 'Alt+9',
59
79
  };
60
80
 
61
81
  const MANAGER_SHORTCUT_ALIASES: Partial<Record<DashboardShortcutAction, string[]>> = {
@@ -117,6 +137,7 @@ export function normalizeManagerShortcutKeymap(value: unknown): DashboardShortcu
117
137
 
118
138
  function resolveEventKey(event: KeyboardEvent): string {
119
139
  if (event.code === 'Backquote') return '`';
140
+ if (event.altKey && event.code?.startsWith('Digit')) return event.code.slice(5);
120
141
  const k = normalizeKey(event.key);
121
142
  if (k.length === 1) return k;
122
143
  // macOS Option+letter produces special chars (e.g. ∆ for Alt+J).