@vibelord/lanes 1.0.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.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/bin/lanes-install.mjs +158 -0
  4. package/lib/plan.mjs +65 -0
  5. package/package.json +37 -0
  6. package/payload/lanes/README.md +152 -0
  7. package/payload/lanes/VERSION +1 -0
  8. package/payload/lanes/bin/lanes +1035 -0
  9. package/payload/lanes/client/ghostty/common.conf +22 -0
  10. package/payload/lanes/client/ghostty/macos.conf +6 -0
  11. package/payload/lanes/client/ghostty/omarchy.conf +19 -0
  12. package/payload/lanes/client/install.sh +16 -0
  13. package/payload/lanes/client/lanes-launch +315 -0
  14. package/payload/lanes/client/lanes-upload +147 -0
  15. package/payload/lanes/client/lanes-window +36 -0
  16. package/payload/lanes/client/macos-helper.applescript +14 -0
  17. package/payload/lanes/client/omarchy/discover.sh +56 -0
  18. package/payload/lanes/client/omarchy/lanes.conf +5 -0
  19. package/payload/lanes/client/omarchy/lanes.desktop +9 -0
  20. package/payload/lanes/client/omarchy/lanes.lua +14 -0
  21. package/payload/lanes/client/ssh.stanza.in +54 -0
  22. package/payload/lanes/container/env.sh +16 -0
  23. package/payload/lanes/container/lane +268 -0
  24. package/payload/lanes/container/lane-run +34 -0
  25. package/payload/lanes/docs/ARCHITECTURE.md +93 -0
  26. package/payload/lanes/docs/HOST-GUARD.md +108 -0
  27. package/payload/lanes/docs/INSTALL.md +192 -0
  28. package/payload/lanes/docs/RUNBOOK.md +385 -0
  29. package/payload/lanes/docs/SHARING.md +124 -0
  30. package/payload/lanes/docs/ZMX-RING0.md +51 -0
  31. package/payload/lanes/docs/images/desktop.png +0 -0
  32. package/payload/lanes/docs/images/iphone.png +0 -0
  33. package/payload/lanes/holders/exec.sh +21 -0
  34. package/payload/lanes/holders/tmux.sh +111 -0
  35. package/payload/lanes/holders/zmx.sh +22 -0
  36. package/payload/lanes/holders.lock +5 -0
  37. package/payload/lanes/install/enable-phone.sh +43 -0
  38. package/payload/lanes/install/enable-web.sh +16 -0
  39. package/payload/lanes/install/host-install.sh +72 -0
  40. package/payload/lanes/install/services.py +61 -0
  41. package/payload/lanes/install.sh +603 -0
  42. package/payload/lanes/libexec/cursor_commit.py +159 -0
  43. package/payload/lanes/libexec/cursor_sync.py +166 -0
  44. package/payload/lanes/libexec/guard.py +231 -0
  45. package/payload/lanes/libexec/lanes_lib.py +610 -0
  46. package/payload/lanes/libexec/legacy_sessions.py +130 -0
  47. package/payload/lanes/libexec/session_actions.py +276 -0
  48. package/payload/lanes/libexec/sidebar +8 -0
  49. package/payload/lanes/libexec/sidebar.py +872 -0
  50. package/payload/lanes/libexec/statusd.py +764 -0
  51. package/payload/lanes/libexec/tmpscan.py +921 -0
  52. package/payload/lanes/libexec/view.sh +179 -0
  53. package/payload/lanes/scripts/adopt-sharing-candidate.py +109 -0
  54. package/payload/lanes/site/README.md +28 -0
  55. package/payload/lanes/site/beyondwork/known_hosts +1 -0
  56. package/payload/lanes/site/beyondwork/site.conf +11 -0
  57. package/payload/lanes/site/site.example.conf +10 -0
  58. package/payload/lanes/sudo/host-guard.sh +356 -0
  59. package/payload/lanes/sudo/one-time-root.sh +32 -0
  60. package/payload/lanes/systemd/lanes-ensure.service +7 -0
  61. package/payload/lanes/systemd/lanes-ensure.timer +10 -0
  62. package/payload/lanes/systemd/lanes-gc.service +7 -0
  63. package/payload/lanes/systemd/lanes-gc.timer +9 -0
  64. package/payload/lanes/systemd/lanes-guard.service +8 -0
  65. package/payload/lanes/systemd/lanes-guard.timer +10 -0
  66. package/payload/lanes/systemd/lanes-mobile.service +23 -0
  67. package/payload/lanes/systemd/lanes-statusd.service +15 -0
  68. package/payload/lanes/systemd/lanes-sync.service +10 -0
  69. package/payload/lanes/systemd/lanes-sync.timer +10 -0
  70. package/payload/lanes/systemd/lanes-tmpreap.service +11 -0
  71. package/payload/lanes/systemd/lanes-tmpreap.timer +13 -0
  72. package/payload/lanes/systemd/lanes-web.service +13 -0
  73. package/payload/lanes/systemd/lanes.slice +11 -0
  74. package/payload/lanes/web/Caddyfile +37 -0
  75. package/payload/lanes/web/README.md +35 -0
  76. package/payload/lanes/web/icon-192.png +0 -0
  77. package/payload/lanes/web/icon.svg +4 -0
  78. package/payload/lanes/web/index.html +30 -0
  79. package/payload/lanes/web/manifest.webmanifest +15 -0
  80. package/payload/lanes/web/mobile.css +301 -0
  81. package/payload/lanes/web/mobile.js +367 -0
  82. package/payload/lanes/workspaces.example/README.md +27 -0
  83. package/payload/lanes/workspaces.example/catalog.json +7 -0
  84. package/payload/lanes/workspaces.example/commit-targets.json +8 -0
  85. package/payload/lanes/workspaces.example/terminals.example.json +19 -0
  86. package/payload/lanes/workspaces.example/workspaces.product.json +15 -0
  87. package/payload/lanes/workspaces.example/workspaces.research.json +16 -0
  88. package/payload/lanes/zellij/config.kdl +360 -0
  89. package/payload/manifest.json +31 -0
@@ -0,0 +1,360 @@
1
+ // lanes host view configuration. Generated from the user's coder-launch keybinding scheme
2
+ // (clear-defaults, Ctrl-Alt prefix: every ordinary key reaches the agent). Edit here; this file is versioned.
3
+ keybinds clear-defaults=true {
4
+ normal {
5
+ bind "Ctrl g" { SwitchToMode "locked"; }
6
+ bind "Ctrl Alt p" { SwitchToMode "pane"; }
7
+ bind "Ctrl Alt t" { SwitchToMode "tab"; }
8
+ bind "Ctrl Alt n" { SwitchToMode "resize"; }
9
+ bind "Ctrl Alt h" { SwitchToMode "move"; }
10
+ bind "Ctrl Alt o" { SwitchToMode "session"; }
11
+ bind "Ctrl Alt b" { SwitchToMode "tmux"; }
12
+ bind "Ctrl Alt f" { SwitchToMode "scroll"; }
13
+ }
14
+ locked {
15
+ bind "Ctrl g" { SwitchToMode "normal"; }
16
+ }
17
+ pane {
18
+ bind "left" { MoveFocus "left"; }
19
+ bind "down" { MoveFocus "down"; }
20
+ bind "up" { MoveFocus "up"; }
21
+ bind "right" { MoveFocus "right"; }
22
+ bind ";" { FocusLastPane; }
23
+ bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; }
24
+ bind "d" { NewPane "down"; SwitchToMode "normal"; }
25
+ bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
26
+ bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
27
+ bind "Shift f" { ToggleFocusNoUiFullscreen; SwitchToMode "normal"; }
28
+ bind "h" { MoveFocus "left"; }
29
+ bind "i" { TogglePanePinned; SwitchToMode "normal"; }
30
+ bind "j" { MoveFocus "down"; }
31
+ bind "k" { MoveFocus "up"; }
32
+ bind "l" { MoveFocus "right"; }
33
+ bind "n" { NewPane; SwitchToMode "normal"; }
34
+ bind "p" { SwitchFocus; }
35
+ bind "Ctrl p" { SwitchToMode "normal"; }
36
+ bind "r" { NewPane "right"; SwitchToMode "normal"; }
37
+ bind "s" { NewPane "stacked"; SwitchToMode "normal"; }
38
+ bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
39
+ bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
40
+ }
41
+ tab {
42
+ bind "left" { GoToPreviousTab; }
43
+ bind "down" { GoToNextTab; }
44
+ bind "up" { GoToPreviousTab; }
45
+ bind "right" { GoToNextTab; }
46
+ bind "1" { GoToTab 1; SwitchToMode "normal"; }
47
+ bind "2" { GoToTab 2; SwitchToMode "normal"; }
48
+ bind "3" { GoToTab 3; SwitchToMode "normal"; }
49
+ bind "4" { GoToTab 4; SwitchToMode "normal"; }
50
+ bind "5" { GoToTab 5; SwitchToMode "normal"; }
51
+ bind "6" { GoToTab 6; SwitchToMode "normal"; }
52
+ bind "7" { GoToTab 7; SwitchToMode "normal"; }
53
+ bind "8" { GoToTab 8; SwitchToMode "normal"; }
54
+ bind "9" { GoToTab 9; SwitchToMode "normal"; }
55
+ bind "[" { BreakPaneLeft; SwitchToMode "normal"; }
56
+ bind "]" { BreakPaneRight; SwitchToMode "normal"; }
57
+ bind "b" { BreakPane; SwitchToMode "normal"; }
58
+ bind "h" { GoToPreviousTab; }
59
+ bind "j" { GoToNextTab; }
60
+ bind "k" { GoToPreviousTab; }
61
+ bind "l" { GoToNextTab; }
62
+ bind "n" { NewTab; SwitchToMode "normal"; }
63
+ bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
64
+ bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
65
+ bind "Ctrl t" { SwitchToMode "normal"; }
66
+ bind "x" { CloseTab; SwitchToMode "normal"; }
67
+ bind "tab" { ToggleTab; }
68
+ }
69
+ resize {
70
+ bind "left" { Resize "Increase left"; }
71
+ bind "down" { Resize "Increase down"; }
72
+ bind "up" { Resize "Increase up"; }
73
+ bind "right" { Resize "Increase right"; }
74
+ bind "+" { Resize "Increase"; }
75
+ bind "-" { Resize "Decrease"; }
76
+ bind "=" { Resize "Increase"; }
77
+ bind "H" { Resize "Decrease left"; }
78
+ bind "J" { Resize "Decrease down"; }
79
+ bind "K" { Resize "Decrease up"; }
80
+ bind "L" { Resize "Decrease right"; }
81
+ bind "h" { Resize "Increase left"; }
82
+ bind "j" { Resize "Increase down"; }
83
+ bind "k" { Resize "Increase up"; }
84
+ bind "l" { Resize "Increase right"; }
85
+ bind "Ctrl n" { SwitchToMode "normal"; }
86
+ }
87
+ move {
88
+ bind "left" { MovePane "left"; }
89
+ bind "down" { MovePane "down"; }
90
+ bind "up" { MovePane "up"; }
91
+ bind "right" { MovePane "right"; }
92
+ bind "h" { MovePane "left"; }
93
+ bind "Ctrl h" { SwitchToMode "normal"; }
94
+ bind "j" { MovePane "down"; }
95
+ bind "k" { MovePane "up"; }
96
+ bind "l" { MovePane "right"; }
97
+ bind "n" { MovePane; }
98
+ bind "p" { MovePaneBackwards; }
99
+ bind "tab" { MovePane; }
100
+ }
101
+ scroll {
102
+ bind "c" { CopyLastCommandOutput; SwitchToMode "normal"; }
103
+ bind "e" { EditScrollback; SwitchToMode "normal"; }
104
+ bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
105
+ }
106
+ search {
107
+ bind "c" { SearchToggleOption "CaseSensitivity"; }
108
+ bind "n" { Search "down"; }
109
+ bind "o" { SearchToggleOption "WholeWord"; }
110
+ bind "p" { Search "up"; }
111
+ bind "w" { SearchToggleOption "Wrap"; }
112
+ }
113
+ session {
114
+ bind "[" { FocusGuestSession; SwitchToMode "normal"; }
115
+ bind "]" { FocusHostSession; SwitchToMode "normal"; }
116
+ bind "a" {
117
+ LaunchOrFocusPlugin "zellij:about" {
118
+ floating true
119
+ move_to_focused_tab true
120
+ }
121
+ SwitchToMode "normal"
122
+ }
123
+ bind "c" {
124
+ LaunchOrFocusPlugin "configuration" {
125
+ floating true
126
+ move_to_focused_tab true
127
+ }
128
+ SwitchToMode "normal"
129
+ }
130
+ bind "f" { ToggleHostFullscreen; SwitchToMode "normal"; }
131
+ bind "l" {
132
+ LaunchOrFocusPlugin "zellij:layout-manager" {
133
+ floating true
134
+ move_to_focused_tab true
135
+ }
136
+ SwitchToMode "normal"
137
+ }
138
+ bind "Ctrl o" { SwitchToMode "normal"; }
139
+ bind "p" {
140
+ LaunchOrFocusPlugin "plugin-manager" {
141
+ floating true
142
+ move_to_focused_tab true
143
+ }
144
+ SwitchToMode "normal"
145
+ }
146
+ bind "s" {
147
+ LaunchOrFocusPlugin "zellij:share" {
148
+ floating true
149
+ move_to_focused_tab true
150
+ }
151
+ SwitchToMode "normal"
152
+ }
153
+ bind "w" {
154
+ LaunchOrFocusPlugin "session-manager" {
155
+ floating true
156
+ move_to_focused_tab true
157
+ }
158
+ SwitchToMode "normal"
159
+ }
160
+ }
161
+ shared {
162
+ bind "Ctrl Alt PageUp" { PageScrollUp; SwitchToMode "scroll"; }
163
+ bind "Ctrl Alt PageDown" { PageScrollDown; SwitchToMode "scroll"; }
164
+ bind "Ctrl Alt End" { ScrollToBottom; SwitchToMode "normal"; }
165
+ bind "Ctrl Alt c" { Copy; }
166
+ bind "Ctrl Alt left" { GoToPreviousTab; }
167
+ // lanes: workspaces are tabs (Ctrl-Alt-←/→); lanes live in the sidebar. These reach the sidebar
168
+ // from anywhere in the tab: it opens the previous/next lane (or starts a filter) and hands focus back.
169
+ //
170
+ // WHY THREE MoveFocus "left": a workspace tab is [sidebar | view main | view b | view c] (wide views, at most
171
+ // 3 viewports) and WriteChars types into whichever pane holds the focus BY THEN. One "left" reaches the
172
+ // sidebar only from `main`; pressed in viewport b or c it stopped on a LANE and the "J"/"K" was typed into
173
+ // the agent. Three lefts reach the sidebar from every viewport, and zellij does not wrap at the left edge, so
174
+ // the surplus moves are no-ops. tests/view.py proves both (3 lefts land on the sidebar, a 4th stays there, the
175
+ // real Ctrl-Alt-Down bytes from viewport 2 put no "J" on any lane). More viewports = more lefts here.
176
+ // Known limit: a tab WITHOUT a sidebar (Host, Throttle, the mobile view tab) has nothing to the left, so there
177
+ // the character still goes to the pane itself.
178
+ bind "Ctrl Alt down" { MoveFocus "left"; MoveFocus "left"; MoveFocus "left"; WriteChars "J"; }
179
+ bind "Ctrl Alt up" { MoveFocus "left"; MoveFocus "left"; MoveFocus "left"; WriteChars "K"; }
180
+ bind "Ctrl Alt /" { MoveFocus "left"; MoveFocus "left"; MoveFocus "left"; WriteChars "/"; }
181
+ // Arm the sidebar's upload box, then drop files anywhere on the window (a drop = a paste into the focused pane).
182
+ bind "Ctrl Alt u" { MoveFocus "left"; MoveFocus "left"; MoveFocus "left"; WriteChars "U"; }
183
+ bind "Ctrl Alt right" { GoToNextTab; }
184
+ bind "Ctrl Alt s" {
185
+ LaunchOrFocusPlugin "session-manager" {
186
+ floating true
187
+ move_to_focused_tab true
188
+ }
189
+ }
190
+ }
191
+ shared_except "normal" "locked" {
192
+ bind "Alt left" { MoveFocusOrTab "left"; }
193
+ bind "Alt down" { MoveFocus "down"; }
194
+ bind "Alt up" { MoveFocus "up"; }
195
+ bind "Alt right" { MoveFocusOrTab "right"; }
196
+ bind "Alt +" { Resize "Increase"; }
197
+ bind "Alt -" { Resize "Decrease"; }
198
+ bind "Alt =" { Resize "Increase"; }
199
+ bind "Alt [" { PreviousSwapLayout; }
200
+ bind "Alt ]" { NextSwapLayout; }
201
+ bind "Alt f" { ToggleFloatingPanes; }
202
+ bind "Ctrl g" { SwitchToMode "locked"; }
203
+ bind "Alt h" { MoveFocusOrTab "left"; }
204
+ bind "Alt i" { MoveTab "left"; }
205
+ bind "Alt j" { MoveFocus "down"; }
206
+ bind "Alt k" { MoveFocus "up"; }
207
+ bind "Alt l" { MoveFocusOrTab "right"; }
208
+ bind "Alt n" { NewPane; }
209
+ bind "Alt o" { MoveTab "right"; }
210
+ bind "Alt p" { TogglePaneInGroup; }
211
+ bind "Alt Shift p" { ToggleGroupMarking; }
212
+ bind "Ctrl q" { Quit; }
213
+ }
214
+ shared_except "normal" "locked" "move" {
215
+ bind "Ctrl h" { SwitchToMode "move"; }
216
+ }
217
+ shared_except "normal" "locked" "session" {
218
+ bind "Ctrl o" { SwitchToMode "session"; }
219
+ }
220
+ shared_except "normal" "locked" "scroll" "search" "tmux" {
221
+ bind "Ctrl b" { SwitchToMode "tmux"; }
222
+ }
223
+ shared_except "normal" "locked" "scroll" "search" {
224
+ bind "Ctrl s" { SwitchToMode "scroll"; }
225
+ }
226
+ shared_except "normal" "locked" "tab" {
227
+ bind "Ctrl t" { SwitchToMode "tab"; }
228
+ }
229
+ shared_except "normal" "locked" "pane" {
230
+ bind "Ctrl p" { SwitchToMode "pane"; }
231
+ }
232
+ shared_except "normal" "locked" "resize" {
233
+ bind "Ctrl n" { SwitchToMode "resize"; }
234
+ }
235
+ shared_except "normal" "locked" "entersearch" {
236
+ bind "enter" { SwitchToMode "normal"; }
237
+ }
238
+ shared_except "normal" "locked" "entersearch" "renametab" "renamepane" {
239
+ bind "esc" { SwitchToMode "normal"; }
240
+ }
241
+ shared_among "pane" "tmux" {
242
+ bind "x" { CloseFocus; SwitchToMode "normal"; }
243
+ }
244
+ shared_among "scroll" "search" {
245
+ bind "Home" { ScrollToTop; }
246
+ bind "End" { ScrollToBottom; SwitchToMode "normal"; }
247
+ bind "g" { ScrollToTop; }
248
+ bind "G" { ScrollToBottom; SwitchToMode "normal"; }
249
+ bind "y" { Copy; SwitchToMode "normal"; }
250
+ bind "PageDown" { PageScrollDown; }
251
+ bind "PageUp" { PageScrollUp; }
252
+ bind "left" { PageScrollUp; }
253
+ bind "down" { ScrollDown; }
254
+ bind "up" { ScrollUp; }
255
+ bind "right" { PageScrollDown; }
256
+ bind "[" { ScrollToPreviousPrompt; }
257
+ bind "]" { ScrollToNextPrompt; }
258
+ bind "Ctrl b" { PageScrollUp; }
259
+ bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
260
+ bind "d" { HalfPageScrollDown; }
261
+ bind "Ctrl f" { PageScrollDown; }
262
+ bind "h" { PageScrollUp; }
263
+ bind "j" { ScrollDown; }
264
+ bind "k" { ScrollUp; }
265
+ bind "l" { PageScrollDown; }
266
+ bind "m" { SelectCommandAtScrollPosition; }
267
+ bind "Ctrl s" { SwitchToMode "normal"; }
268
+ bind "u" { HalfPageScrollUp; }
269
+ }
270
+ entersearch {
271
+ bind "Ctrl c" { SwitchToMode "scroll"; }
272
+ bind "esc" { SwitchToMode "scroll"; }
273
+ bind "enter" { SwitchToMode "search"; }
274
+ }
275
+ renametab {
276
+ bind "esc" { UndoRenameTab; SwitchToMode "tab"; }
277
+ }
278
+ shared_among "renametab" "renamepane" {
279
+ bind "Ctrl c" { SwitchToMode "normal"; }
280
+ }
281
+ renamepane {
282
+ bind "esc" { UndoRenamePane; SwitchToMode "pane"; }
283
+ }
284
+ shared_among "session" "tmux" {
285
+ bind "d" { Detach; }
286
+ }
287
+ tmux {
288
+ bind "left" { MoveFocus "left"; SwitchToMode "normal"; }
289
+ bind "down" { MoveFocus "down"; SwitchToMode "normal"; }
290
+ bind "up" { MoveFocus "up"; SwitchToMode "normal"; }
291
+ bind "right" { MoveFocus "right"; SwitchToMode "normal"; }
292
+ bind "space" { NextSwapLayout; }
293
+ bind "\"" { NewPane "down"; SwitchToMode "normal"; }
294
+ bind "%" { NewPane "right"; SwitchToMode "normal"; }
295
+ bind "," { SwitchToMode "renametab"; }
296
+ bind "[" { SwitchToMode "scroll"; }
297
+ bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
298
+ bind "c" { NewTab; SwitchToMode "normal"; }
299
+ bind "h" { MoveFocus "left"; SwitchToMode "normal"; }
300
+ bind "j" { MoveFocus "down"; SwitchToMode "normal"; }
301
+ bind "k" { MoveFocus "up"; SwitchToMode "normal"; }
302
+ bind "l" { MoveFocus "right"; SwitchToMode "normal"; }
303
+ bind "n" { GoToNextTab; SwitchToMode "normal"; }
304
+ bind "o" { FocusNextPane; }
305
+ bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
306
+ bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
307
+ }
308
+ }
309
+ plugins {
310
+ about location="zellij:about"
311
+ compact-bar location="zellij:compact-bar"
312
+ configuration location="zellij:configuration"
313
+ filepicker location="zellij:strider" {
314
+ cwd "/"
315
+ }
316
+ plugin-manager location="zellij:plugin-manager"
317
+ session-manager location="zellij:session-manager"
318
+ status-bar location="zellij:status-bar"
319
+ strider location="zellij:strider"
320
+ tab-bar location="zellij:tab-bar"
321
+ welcome-screen location="zellij:session-manager" {
322
+ welcome_screen true
323
+ }
324
+ }
325
+ // No background plugins: the host view runs only zellij's built-in bar.
326
+ load_plugins {
327
+ }
328
+ env {
329
+ CLICOLOR "1"
330
+ COLORTERM "truecolor"
331
+ FORCE_COLOR "3"
332
+ FORCE_HYPERLINK "1"
333
+ }
334
+ web_client {
335
+ font "monospace"
336
+ }
337
+ osc8_hyperlinks true
338
+ theme_dark "tokyo-night"
339
+ theme_light "catppuccin-latte"
340
+ default_mode "normal"
341
+ mouse_mode true
342
+ copy_clipboard "system"
343
+ copy_on_select true
344
+ scrollback_editor "/usr/bin/vi"
345
+ show_startup_tips false
346
+ mouse_scroll_resize false
347
+ scroll_mode_sync false
348
+ mouse_hover_effects false
349
+ mouse_hover_tips false
350
+
351
+ // --- lanes server settings ---
352
+ // Views are disposable and lanes live in their holders: nothing to resurrect or serialize.
353
+ session_serialization false
354
+ // zmx replays its 2,000-line snapshot into the pane; tmux lanes use the alternate screen.
355
+ scroll_buffer_size 10000
356
+ default_shell "/bin/bash"
357
+ // The web server is started explicitly by lanes-web.service on 127.0.0.1:8082 (tailnet exposure is a
358
+ // separate, user-run Tailscale Serve step). Sessions may be shared with authenticated web clients.
359
+ web_sharing "on"
360
+ show_release_notes false
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@vibelord/lanes",
3
+ "version": "1.0.0",
4
+ "commit": "a3692b61a114c851b493618bf7f5446b7a84336a",
5
+ "digest": "sha256:20b6265bee253def6bce29dbf66e35678e6ecbe9c81c86b03cdf2091660bb5ae",
6
+ "executables": [
7
+ "bin/lanes",
8
+ "client/install.sh",
9
+ "client/lanes-launch",
10
+ "client/lanes-upload",
11
+ "client/lanes-window",
12
+ "client/omarchy/discover.sh",
13
+ "container/lane",
14
+ "container/lane-run",
15
+ "holders/exec.sh",
16
+ "holders/tmux.sh",
17
+ "holders/zmx.sh",
18
+ "install.sh",
19
+ "install/enable-web.sh",
20
+ "install/host-install.sh",
21
+ "libexec/sidebar",
22
+ "libexec/sidebar.py",
23
+ "libexec/statusd.py",
24
+ "libexec/view.sh",
25
+ "sudo/host-guard.sh",
26
+ "sudo/one-time-root.sh"
27
+ ],
28
+ "sites": [
29
+ "beyondwork"
30
+ ]
31
+ }