@vibelord/lanes 1.1.1 → 1.2.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 (59) hide show
  1. package/README.md +36 -5
  2. package/bin/lanes-install.mjs +166 -13
  3. package/lib/plan.mjs +113 -3
  4. package/package.json +1 -1
  5. package/payload/lanes/README.md +45 -22
  6. package/payload/lanes/VERSION +1 -1
  7. package/payload/lanes/bin/lanes +2459 -164
  8. package/payload/lanes/client/ghostty/lanes-palette-light.conf +19 -19
  9. package/payload/lanes/client/ghostty/lanes-palette.conf +19 -19
  10. package/payload/lanes/client/lanes-launch +289 -40
  11. package/payload/lanes/client/lanes-window +15 -3
  12. package/payload/lanes/container/hooks/claude-settings.json +1 -0
  13. package/payload/lanes/container/lane +106 -92
  14. package/payload/lanes/container/lane-edit +100 -0
  15. package/payload/lanes/container/lane-mcp +1091 -0
  16. package/payload/lanes/container/lane-signal +109 -29
  17. package/payload/lanes/container/lane_core.py +1140 -0
  18. package/payload/lanes/container/vimrc +31 -0
  19. package/payload/lanes/docs/ARCHITECTURE.md +618 -13
  20. package/payload/lanes/docs/DESIGN.md +122 -44
  21. package/payload/lanes/docs/INSTALL.md +157 -17
  22. package/payload/lanes/docs/RUNBOOK.md +603 -72
  23. package/payload/lanes/docs/SHARING.md +3 -2
  24. package/payload/lanes/docs/USERGUIDE.md +777 -136
  25. package/payload/lanes/install/enable-web.sh +2 -0
  26. package/payload/lanes/install/host-install.sh +163 -7
  27. package/payload/lanes/install/services.py +148 -18
  28. package/payload/lanes/install.sh +68 -7
  29. package/payload/lanes/libexec/agent_state.py +74 -1
  30. package/payload/lanes/libexec/cursor_sync.py +6 -0
  31. package/payload/lanes/libexec/device_sync.py +47 -10
  32. package/payload/lanes/libexec/economy_poll.py +1 -0
  33. package/payload/lanes/libexec/enrold.py +41 -22
  34. package/payload/lanes/libexec/keys.py +54 -23
  35. package/payload/lanes/libexec/lanes_lib.py +620 -22
  36. package/payload/lanes/libexec/members.py +16 -2
  37. package/payload/lanes/libexec/notify.py +104 -24
  38. package/payload/lanes/libexec/registrations.py +216 -18
  39. package/payload/lanes/libexec/session_actions.py +182 -14
  40. package/payload/lanes/libexec/sidebar +11 -3
  41. package/payload/lanes/libexec/sidebar.py +2135 -361
  42. package/payload/lanes/libexec/statusd.py +137 -10
  43. package/payload/lanes/libexec/studio_host.py +8 -1
  44. package/payload/lanes/libexec/tokens.py +121 -30
  45. package/payload/lanes/libexec/tokens.sh +86 -2
  46. package/payload/lanes/libexec/update.py +972 -0
  47. package/payload/lanes/libexec/users.py +614 -0
  48. package/payload/lanes/libexec/view.sh +34 -6
  49. package/payload/lanes/systemd/lanes-ensure.service +3 -0
  50. package/payload/lanes/systemd/lanes-gc.service +1 -1
  51. package/payload/lanes/systemd/lanes-update.service +17 -0
  52. package/payload/lanes/systemd/lanes-update.timer +17 -0
  53. package/payload/lanes/web/README.md +83 -24
  54. package/payload/lanes/web/browser.js +3 -5
  55. package/payload/lanes/web/mobile.css +17 -17
  56. package/payload/lanes/web/mobile.js +44 -32
  57. package/payload/lanes/workspaces.example/README.md +3 -1
  58. package/payload/lanes/zellij/config.kdl +106 -56
  59. package/payload/manifest.json +5 -3
@@ -24,7 +24,9 @@ A lane is whatever the registry says it is: `lanes sync` (every two minutes, rea
24
24
  terminal into a lane with a stable id `<board>--<slug of the terminal name>` (with the repository `prefix`). A
25
25
  `displayNames` entry, which the sidebar `R` key and `lanes rename <lane-id> <name>` write into the repository's block
26
26
  of `workspaces.<board>.json` (first write keeps a `.bak-<UTC>` copy beside it), changes only the shown name, never the
27
- id. Add a terminal to `.vscode/terminals.json` for an editor-defined lane.
27
+ id. The repository can also name a lane itself with `lanes.terminals[<name>].displayName` in its `terminals.json`;
28
+ the manifest's `displayNames` entry wins over it, and a `displayName` another lane on the board already answers to is
29
+ ignored (the lane keeps its title). Add a terminal to `.vscode/terminals.json` for an editor-defined lane.
28
30
  Alternatively, use **+** beside a discovered session to register its existing binding and ID in a workspace
29
31
  using the same container. Sync includes these local registrations; they never run a create command.
30
32
  Repository declarations take precedence when they declare the same binding. Legacy Docker shells cannot be adopted.
@@ -194,15 +194,48 @@ keybinds clear-defaults=true {
194
194
  height "1%"
195
195
  }
196
196
  }
197
- // These two still hand a key to the SIDEBAR (a filter and the upload box live there, so the focus must end
198
- // on it). WHY THREE MoveFocus "left": a workspace tab is [sidebar | view main | view b | view c] (wide views,
199
- // at most 3 viewports) and WriteChars types into whichever pane holds the focus BY THEN; three lefts reach
200
- // the sidebar from every viewport and zellij does not wrap at the left edge (tests/view.py). Known limit: a
201
- // tab WITHOUT a sidebar (Host, Throttle, the mobile view tab) has nothing to the left, so there the
202
- // character still goes to the pane itself.
203
- bind "Ctrl Alt /" { MoveFocus "left"; MoveFocus "left"; MoveFocus "left"; WriteChars "/"; }
204
- // Arm the sidebar's upload box, then drop files anywhere on the window (a drop = a paste into the focused pane).
205
- bind "Ctrl Alt u" { MoveFocus "left"; MoveFocus "left"; MoveFocus "left"; WriteChars "U"; }
197
+ // These two hand a key to the SIDEBAR (its filter and its upload strip need the keyboard there) and type
198
+ // nothing (cockpit v3 S4). Three MoveFocus "left" first: a workspace tab is [sidebar | view main | view b |
199
+ // view c] (wide views, at most 3 viewports), three lefts reach the sidebar from every viewport and zellij does
200
+ // not wrap at the left edge (tests/view.py). Then `lanes sidebar-key filter|upload --focused`, in a floating
201
+ // pane that closes when it exits (the next/prev block above), writes views/<device>/<ws>.sidebar.cmd for the
202
+ // sidebar of this tab; that sidebar acts on it within a tick, and always before the next key it reads. When
203
+ // the floating pane closes the focus is back on the sidebar. They used to end in WriteChars "/" / "U", which
204
+ // typed into whatever pane held the focus by then: on a tab without a sidebar (Host, Throttle, the phone's
205
+ // view tab) the pane itself, a shell or an agent's input. Such a tab now gets nothing.
206
+ bind "Ctrl Alt /" {
207
+ MoveFocus "left"
208
+ MoveFocus "left"
209
+ MoveFocus "left"
210
+ Run "lanes" "sidebar-key" "filter" "--focused" {
211
+ floating true
212
+ close_on_exit true
213
+ name "Lanes"
214
+ x "0%"
215
+ y "0%"
216
+ width "1%"
217
+ height "1%"
218
+ }
219
+ }
220
+ // Arm the sidebar's upload strip, then drop files anywhere on the window (a drop = a paste into the focused pane).
221
+ bind "Ctrl Alt u" {
222
+ MoveFocus "left"
223
+ MoveFocus "left"
224
+ MoveFocus "left"
225
+ Run "lanes" "sidebar-key" "upload" "--focused" {
226
+ floating true
227
+ close_on_exit true
228
+ name "Lanes"
229
+ x "0%"
230
+ y "0%"
231
+ width "1%"
232
+ height "1%"
233
+ }
234
+ }
235
+ // Focus the sidebar, nothing else (cockpit v3 S4): the same three lefts, so its keys can be used; the footer then
236
+ // says ` ▌ keys go to sidebar · Esc → lane`, and Esc (or any action) gives the keyboard back to the lane.
237
+ // Ctrl-Alt-s stays the session manager below.
238
+ bind "Ctrl Alt l" { MoveFocus "left"; MoveFocus "left"; MoveFocus "left"; }
206
239
  bind "Ctrl Alt right" { GoToNextTab; }
207
240
  bind "Ctrl Alt s" {
208
241
  LaunchOrFocusPlugin "session-manager" {
@@ -216,6 +249,12 @@ keybinds clear-defaults=true {
216
249
  // children are the pinned style, and test_ctrl_alt_m_is_the_multi_line_floating_run_block pins them. "lanes"
217
250
  // is found on the view server's PATH
218
251
  // (bin/lanes clean_env: this checkout's bin/), because this file is read in place, never rendered per host.
252
+ // Quick edit (W9 E1, LNS-95): Ctrl-Alt-e opens the focused lane's AGENTS.md, CLAUDE.md or .env.local in an editor
253
+ // inside its container, in the same floating geometry; the pane closes when the editor exits. Like the preview it
254
+ // is off while locked, so a locked view hands Ctrl-Alt-e to the lane. test_keybinds FloatingRunPanes pins both.
255
+ // Run has no single-instance form (LaunchOrFocus is for plugins only) and this bind fires whichever pane has the
256
+ // focus, so `lanes edit` is its own guard (DEF-1793): when another Edit pane is open it focuses or names that one
257
+ // and opens nothing. Its EDIT_PANE is this `name`; test_server_cli EditWiring pins the two together.
219
258
  shared_except "locked" {
220
259
  bind "Ctrl Alt m" {
221
260
  Run "lanes" "preview" "--focused" {
@@ -228,6 +267,17 @@ keybinds clear-defaults=true {
228
267
  height "90%"
229
268
  }
230
269
  }
270
+ bind "Ctrl Alt e" {
271
+ Run "lanes" "edit" "--focused" {
272
+ floating true
273
+ close_on_exit true
274
+ name "Edit"
275
+ x "10%"
276
+ y "5%"
277
+ width "80%"
278
+ height "90%"
279
+ }
280
+ }
231
281
  }
232
282
  shared_except "normal" "locked" {
233
283
  bind "Alt left" { MoveFocusOrTab "left"; }
@@ -376,36 +426,36 @@ osc8_hyperlinks true
376
426
  // BEGIN lanes tokens (generated by libexec/tokens.py --kdl; do not edit by hand)
377
427
  themes {
378
428
  lanes-dark {
379
- text_unselected { base "#edf1f5"; background "#101318"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
380
- text_selected { base "#edf1f5"; background "#1a2721"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
381
- ribbon_selected { base "#101318"; background "#b4e3bf"; emphasis_0 "#7a1a12"; emphasis_1 "#101318"; emphasis_2 "#101318"; emphasis_3 "#101318"; }
382
- ribbon_unselected { base "#9ca7b5"; background "#191e25"; emphasis_0 "#f28b7d"; emphasis_1 "#edf1f5"; emphasis_2 "#e5b84a"; emphasis_3 "#7fb3f2"; }
383
- table_title { base "#b4e3bf"; background "#101318"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
384
- table_cell_selected { base "#edf1f5"; background "#1a2721"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
385
- table_cell_unselected { base "#edf1f5"; background "#101318"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
386
- list_selected { base "#edf1f5"; background "#1a2721"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
387
- list_unselected { base "#edf1f5"; background "#101318"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
388
- frame_selected { base "#b4e3bf"; background "#101318"; emphasis_0 "#e5b84a"; emphasis_1 "#6fd39a"; emphasis_2 "#7fb3f2"; emphasis_3 "#f28b7d"; }
389
- frame_highlight { base "#e5b84a"; background "#101318"; emphasis_0 "#f28b7d"; emphasis_1 "#6fd39a"; emphasis_2 "#b4e3bf"; emphasis_3 "#7fb3f2"; }
390
- exit_code_success { base "#6fd39a"; background "#101318"; emphasis_0 "#6fd39a"; emphasis_1 "#6fd39a"; emphasis_2 "#6fd39a"; emphasis_3 "#6fd39a"; }
391
- exit_code_error { base "#f28b7d"; background "#101318"; emphasis_0 "#f28b7d"; emphasis_1 "#f28b7d"; emphasis_2 "#f28b7d"; emphasis_3 "#f28b7d"; }
392
- multiplayer_user_colors { player_1 "#7fb3f2"; player_2 "#e5b84a"; player_3 "#6fd39a"; player_4 "#f28b7d"; player_5 "#b4e3bf"; player_6 "#c9a6ff"; player_7 "#6fd6d0"; player_8 "#f7cf7f"; player_9 "#8fe0a3"; player_10 "#ff9d96"; }
429
+ text_unselected { base "#f2f5f8"; background "#101318"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
430
+ text_selected { base "#f2f5f8"; background "#1c3326"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
431
+ ribbon_selected { base "#101318"; background "#8fe3a6"; emphasis_0 "#7a1a12"; emphasis_1 "#101318"; emphasis_2 "#101318"; emphasis_3 "#101318"; }
432
+ ribbon_unselected { base "#a6b1be"; background "#191e25"; emphasis_0 "#ff7b6e"; emphasis_1 "#f2f5f8"; emphasis_2 "#ffc233"; emphasis_3 "#6fb6ff"; }
433
+ table_title { base "#8fe3a6"; background "#101318"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
434
+ table_cell_selected { base "#f2f5f8"; background "#1c3326"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
435
+ table_cell_unselected { base "#f2f5f8"; background "#101318"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
436
+ list_selected { base "#f2f5f8"; background "#1c3326"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
437
+ list_unselected { base "#f2f5f8"; background "#101318"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
438
+ frame_selected { base "#8fe3a6"; background "#101318"; emphasis_0 "#ffc233"; emphasis_1 "#5fdc8a"; emphasis_2 "#6fb6ff"; emphasis_3 "#ff7b6e"; }
439
+ frame_highlight { base "#ffc233"; background "#101318"; emphasis_0 "#ff7b6e"; emphasis_1 "#5fdc8a"; emphasis_2 "#8fe3a6"; emphasis_3 "#6fb6ff"; }
440
+ exit_code_success { base "#5fdc8a"; background "#101318"; emphasis_0 "#5fdc8a"; emphasis_1 "#5fdc8a"; emphasis_2 "#5fdc8a"; emphasis_3 "#5fdc8a"; }
441
+ exit_code_error { base "#ff7b6e"; background "#101318"; emphasis_0 "#ff7b6e"; emphasis_1 "#ff7b6e"; emphasis_2 "#ff7b6e"; emphasis_3 "#ff7b6e"; }
442
+ multiplayer_user_colors { player_1 "#6fb6ff"; player_2 "#ffc233"; player_3 "#5fdc8a"; player_4 "#ff7b6e"; player_5 "#8fe3a6"; player_6 "#c58bff"; player_7 "#3fd9cf"; player_8 "#ffd866"; player_9 "#86f0ad"; player_10 "#ff9a8e"; }
393
443
  }
394
444
  lanes-light {
395
- text_unselected { base "#17241b"; background "#f3f5f2"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
396
- text_selected { base "#17241b"; background "#e5f0e6"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
397
- ribbon_selected { base "#ffffff"; background "#2f6b45"; emphasis_0 "#ffd3cc"; emphasis_1 "#ffffff"; emphasis_2 "#ffffff"; emphasis_3 "#ffffff"; }
398
- ribbon_unselected { base "#56616d"; background "#ffffff"; emphasis_0 "#b7322a"; emphasis_1 "#17241b"; emphasis_2 "#8a5a00"; emphasis_3 "#2456a8"; }
399
- table_title { base "#2f6b45"; background "#f3f5f2"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
400
- table_cell_selected { base "#17241b"; background "#e5f0e6"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
401
- table_cell_unselected { base "#17241b"; background "#f3f5f2"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
402
- list_selected { base "#17241b"; background "#e5f0e6"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
403
- list_unselected { base "#17241b"; background "#f3f5f2"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
404
- frame_selected { base "#2f6b45"; background "#f3f5f2"; emphasis_0 "#8a5a00"; emphasis_1 "#1b7142"; emphasis_2 "#2456a8"; emphasis_3 "#b7322a"; }
405
- frame_highlight { base "#8a5a00"; background "#f3f5f2"; emphasis_0 "#b7322a"; emphasis_1 "#1b7142"; emphasis_2 "#2f6b45"; emphasis_3 "#2456a8"; }
406
- exit_code_success { base "#1b7142"; background "#f3f5f2"; emphasis_0 "#1b7142"; emphasis_1 "#1b7142"; emphasis_2 "#1b7142"; emphasis_3 "#1b7142"; }
407
- exit_code_error { base "#b7322a"; background "#f3f5f2"; emphasis_0 "#b7322a"; emphasis_1 "#b7322a"; emphasis_2 "#b7322a"; emphasis_3 "#b7322a"; }
408
- multiplayer_user_colors { player_1 "#2456a8"; player_2 "#8a5a00"; player_3 "#1b7142"; player_4 "#b7322a"; player_5 "#2f6b45"; player_6 "#7a3fb8"; player_7 "#0f7b7b"; player_8 "#8f5a00"; player_9 "#1b7a38"; player_10 "#c2332a"; }
445
+ text_unselected { base "#111a14"; background "#f3f5f2"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
446
+ text_selected { base "#111a14"; background "#e5f0e6"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
447
+ ribbon_selected { base "#ffffff"; background "#1f6f3f"; emphasis_0 "#ffd3cc"; emphasis_1 "#ffffff"; emphasis_2 "#ffffff"; emphasis_3 "#ffffff"; }
448
+ ribbon_unselected { base "#4a5661"; background "#ffffff"; emphasis_0 "#c41c1c"; emphasis_1 "#111a14"; emphasis_2 "#a04d00"; emphasis_3 "#1a56c4"; }
449
+ table_title { base "#1f6f3f"; background "#f3f5f2"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
450
+ table_cell_selected { base "#111a14"; background "#e5f0e6"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
451
+ table_cell_unselected { base "#111a14"; background "#f3f5f2"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
452
+ list_selected { base "#111a14"; background "#e5f0e6"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
453
+ list_unselected { base "#111a14"; background "#f3f5f2"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
454
+ frame_selected { base "#1f6f3f"; background "#f3f5f2"; emphasis_0 "#a04d00"; emphasis_1 "#0d7338"; emphasis_2 "#1a56c4"; emphasis_3 "#c41c1c"; }
455
+ frame_highlight { base "#a04d00"; background "#f3f5f2"; emphasis_0 "#c41c1c"; emphasis_1 "#0d7338"; emphasis_2 "#1f6f3f"; emphasis_3 "#1a56c4"; }
456
+ exit_code_success { base "#0d7338"; background "#f3f5f2"; emphasis_0 "#0d7338"; emphasis_1 "#0d7338"; emphasis_2 "#0d7338"; emphasis_3 "#0d7338"; }
457
+ exit_code_error { base "#c41c1c"; background "#f3f5f2"; emphasis_0 "#c41c1c"; emphasis_1 "#c41c1c"; emphasis_2 "#c41c1c"; emphasis_3 "#c41c1c"; }
458
+ multiplayer_user_colors { player_1 "#1a56c4"; player_2 "#a04d00"; player_3 "#0d7338"; player_4 "#c41c1c"; player_5 "#1f6f3f"; player_6 "#8228c4"; player_7 "#006f73"; player_8 "#a85200"; player_9 "#0e7a3a"; player_10 "#d0221a"; }
409
459
  }
410
460
  }
411
461
  theme_dark "lanes-dark"
@@ -414,25 +464,25 @@ web_client {
414
464
  font "monospace"
415
465
  theme {
416
466
  background "#101318"
417
- foreground "#edf1f5"
418
- black "#7d8896"
419
- red "#f28b7d"
420
- green "#6fd39a"
421
- yellow "#e5b84a"
422
- blue "#7fb3f2"
423
- magenta "#c9a6ff"
424
- cyan "#6fd6d0"
425
- white "#9ca7b5"
426
- bright_black "#8a95a3"
427
- bright_red "#ff9d96"
428
- bright_green "#8fe0a3"
429
- bright_yellow "#f7cf7f"
430
- bright_blue "#a5cbff"
431
- bright_magenta "#dcc6ff"
432
- bright_cyan "#9ae6e0"
433
- bright_white "#edf1f5"
434
- selection_background "#1a2721"
435
- selection_foreground "#edf1f5"
467
+ foreground "#f2f5f8"
468
+ black "#8792a0"
469
+ red "#ff7b6e"
470
+ green "#5fdc8a"
471
+ yellow "#ffc233"
472
+ blue "#6fb6ff"
473
+ magenta "#c58bff"
474
+ cyan "#3fd9cf"
475
+ white "#a6b1be"
476
+ bright_black "#97a3b1"
477
+ bright_red "#ff9a8e"
478
+ bright_green "#86f0ad"
479
+ bright_yellow "#ffd866"
480
+ bright_blue "#98cbff"
481
+ bright_magenta "#dcb2ff"
482
+ bright_cyan "#7deee6"
483
+ bright_white "#f2f5f8"
484
+ selection_background "#1c3326"
485
+ selection_foreground "#f2f5f8"
436
486
  }
437
487
  }
438
488
  // END lanes tokens
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@vibelord/lanes",
3
- "version": "1.1.1",
4
- "commit": "34ec2d7ba9a5f13e72c812d3e2fce116e170e260",
5
- "digest": "sha256:c10719aaa2279205460136ed3589f349d1e22dce32ddfb77584586d68ae1b3a4",
3
+ "version": "1.2.0",
4
+ "commit": "d7718161405f7bd8a7ab6144b61a9edb550f4500",
5
+ "digest": "sha256:e67fcdfbd2a64b636d204f007e453989e601231d0c06348a66b066df534d9fee",
6
6
  "executables": [
7
7
  "bin/lanes",
8
8
  "client/install.sh",
@@ -11,6 +11,8 @@
11
11
  "client/lanes-window",
12
12
  "client/omarchy/discover.sh",
13
13
  "container/lane",
14
+ "container/lane-edit",
15
+ "container/lane-mcp",
14
16
  "container/lane-run",
15
17
  "container/lane-signal",
16
18
  "holders/exec.sh",