purplemux 0.1.11 → 0.1.12

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 (117) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +28 -28
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/routes-manifest.json +14 -14
  6. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-f8oht._.js +1 -1
  7. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_q9h8s._.js +2 -2
  8. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0h~zv9n._.js +1 -1
  9. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0p03t8-._.js +1 -1
  10. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rfe_~k._.js +1 -1
  11. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12_nuye._.js +1 -1
  12. package/.next/standalone/.next/server/chunks/src_lib_layout-store_ts_0fanx7c._.js +1 -1
  13. package/.next/standalone/.next/server/chunks/src_lib_status-manager_ts_003hlhy._.js +1 -1
  14. package/.next/standalone/.next/server/chunks/src_lib_workspace-store_ts_0vqt073._.js +1 -1
  15. package/.next/standalone/.next/server/chunks/ssr/_0camkxl._.js +1 -1
  16. package/.next/standalone/.next/server/chunks/ssr/_0hu_yja._.js +1 -1
  17. package/.next/standalone/.next/server/chunks/ssr/_0i209pm._.js +1 -1
  18. package/.next/standalone/.next/server/chunks/ssr/_0jk9j0z._.js +1 -1
  19. package/.next/standalone/.next/server/chunks/ssr/_0sfa_96._.js +1 -1
  20. package/.next/standalone/.next/server/chunks/ssr/_12se87g._.js +1 -1
  21. package/.next/standalone/.next/server/chunks/ssr/src_components_0-1ot7e._.js +1 -1
  22. package/.next/standalone/.next/server/chunks/ssr/src_components_07a_zfh._.js +1 -1
  23. package/.next/standalone/.next/server/chunks/ssr/src_components_layout_page-shell_tsx_00344x7._.js +1 -1
  24. package/.next/standalone/.next/server/chunks/ssr/src_lib_workspace-store_ts_00x-rec._.js +1 -1
  25. package/.next/standalone/.next/server/middleware-build-manifest.js +28 -28
  26. package/.next/standalone/.next/server/pages/_document.js +2 -2
  27. package/.next/standalone/.next/server/pages/_error.js +2 -2
  28. package/.next/standalone/.next/server/pages/agents/[agentId]/chat/build-manifest.json +3 -3
  29. package/.next/standalone/.next/server/pages/agents/[agentId]/chat/client-build-manifest.json +1 -1
  30. package/.next/standalone/.next/server/pages/agents/[agentId]/chat.js +2 -2
  31. package/.next/standalone/.next/server/pages/agents/[agentId]/memory/build-manifest.json +3 -3
  32. package/.next/standalone/.next/server/pages/agents/[agentId]/memory/client-build-manifest.json +1 -1
  33. package/.next/standalone/.next/server/pages/agents/[agentId]/memory.js +2 -2
  34. package/.next/standalone/.next/server/pages/agents/[agentId]/workspace/build-manifest.json +3 -3
  35. package/.next/standalone/.next/server/pages/agents/[agentId]/workspace/client-build-manifest.json +1 -1
  36. package/.next/standalone/.next/server/pages/agents/[agentId]/workspace.js +2 -2
  37. package/.next/standalone/.next/server/pages/agents/build-manifest.json +3 -3
  38. package/.next/standalone/.next/server/pages/agents/client-build-manifest.json +1 -1
  39. package/.next/standalone/.next/server/pages/agents.js +2 -2
  40. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js +1 -1
  41. package/.next/standalone/.next/server/pages/api/status/hook.js +2 -2
  42. package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js +2 -2
  43. package/.next/standalone/.next/server/pages/de/404.html +1 -1
  44. package/.next/standalone/.next/server/pages/de/500.html +1 -1
  45. package/.next/standalone/.next/server/pages/en/404.html +1 -1
  46. package/.next/standalone/.next/server/pages/en/500.html +1 -1
  47. package/.next/standalone/.next/server/pages/es/404.html +1 -1
  48. package/.next/standalone/.next/server/pages/es/500.html +1 -1
  49. package/.next/standalone/.next/server/pages/fr/404.html +1 -1
  50. package/.next/standalone/.next/server/pages/fr/500.html +1 -1
  51. package/.next/standalone/.next/server/pages/index/build-manifest.json +3 -3
  52. package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
  53. package/.next/standalone/.next/server/pages/index.js +2 -2
  54. package/.next/standalone/.next/server/pages/ja/404.html +1 -1
  55. package/.next/standalone/.next/server/pages/ja/500.html +1 -1
  56. package/.next/standalone/.next/server/pages/ko/404.html +1 -1
  57. package/.next/standalone/.next/server/pages/ko/500.html +1 -1
  58. package/.next/standalone/.next/server/pages/login.js +2 -2
  59. package/.next/standalone/.next/server/pages/pt-BR/404.html +1 -1
  60. package/.next/standalone/.next/server/pages/pt-BR/500.html +1 -1
  61. package/.next/standalone/.next/server/pages/reports/build-manifest.json +3 -3
  62. package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
  63. package/.next/standalone/.next/server/pages/reports.js +2 -2
  64. package/.next/standalone/.next/server/pages/reset.js +2 -2
  65. package/.next/standalone/.next/server/pages/ru/404.html +1 -1
  66. package/.next/standalone/.next/server/pages/ru/500.html +1 -1
  67. package/.next/standalone/.next/server/pages/stats/build-manifest.json +4 -4
  68. package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
  69. package/.next/standalone/.next/server/pages/stats/react-loadable-manifest.json +7 -7
  70. package/.next/standalone/.next/server/pages/stats.js +2 -2
  71. package/.next/standalone/.next/server/pages/tools-required.js +2 -2
  72. package/.next/standalone/.next/server/pages/tr/404.html +1 -1
  73. package/.next/standalone/.next/server/pages/tr/500.html +1 -1
  74. package/.next/standalone/.next/server/pages/webview/build-manifest.json +3 -3
  75. package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
  76. package/.next/standalone/.next/server/pages/webview.js +2 -2
  77. package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
  78. package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
  79. package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
  80. package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
  81. package/.next/standalone/.next/static/{FLpdzv7HGFcplNF3n13ll → IGLfY98cOpT_s-m_8zv8r}/_buildManifest.js +8 -8
  82. package/.next/standalone/.next/static/chunks/{0k1qh9lni8j5..js → 00t4cxw76sr6_.js} +3 -3
  83. package/.next/standalone/.next/static/chunks/02lycfk~b_9ps.js +1 -0
  84. package/.next/standalone/.next/static/chunks/{0rus7dt5e4fr9.js → 08gm7yw4lvhcp.js} +1 -1
  85. package/.next/standalone/.next/static/chunks/0_24.ba0w6i58.js +1 -0
  86. package/.next/standalone/.next/static/chunks/{0p5b1r4f3uizt.js → 0d7et_73ufx.t.js} +1 -1
  87. package/.next/standalone/.next/static/chunks/{0rz0.a5oz6id6.js → 0fot2fshtz0xb.js} +3 -3
  88. package/.next/standalone/.next/static/chunks/{0ui6sb4ags9zi.js → 0modp.voz0yb8.js} +3 -3
  89. package/.next/standalone/.next/static/chunks/{0j9h57m8znfyx.js → 0n8c-7mx87.qs.js} +1 -1
  90. package/.next/standalone/.next/static/chunks/{08fymsiedx1sm.js → 0sg17g3rw3j79.js} +3 -3
  91. package/.next/standalone/.next/static/chunks/{0nyl4xjk1pgrx.js → 0uvj8zvtnbzk..js} +4 -4
  92. package/.next/standalone/.next/static/chunks/{00~kb8s75dl9f.js → 0vnqr1g65cq~a.js} +3 -3
  93. package/.next/standalone/.next/static/chunks/{05bno_gdrkmsm.js → 0x-x4o1fkpw-g.js} +1 -1
  94. package/.next/standalone/.next/static/chunks/{16n7eazs45aj5.js → 0y3i2gt468lcz.js} +3 -3
  95. package/.next/standalone/.next/static/chunks/0zv-py60g55wn.js +1 -0
  96. package/.next/standalone/.next/static/chunks/{0bra~n.j9rjcm.js → 119llmw30g8ci.js} +1 -1
  97. package/.next/standalone/.next/static/chunks/{0kzdu-5p1onjr.js → 12~ueg_4wkgfs.js} +1 -1
  98. package/.next/standalone/.next/static/chunks/13h_qiv748a8c.js +1 -0
  99. package/.next/standalone/.next/static/chunks/{0~8tjp5by_1nk.js → 1749j145r0f24.js} +3 -3
  100. package/.next/standalone/.next/static/chunks/{turbopack-00pcz7jnwmzq9.js → turbopack-0-_7t3yzrv2o0.js} +1 -1
  101. package/.next/standalone/.next/static/chunks/{turbopack-0uc26w1zvgd-e.js → turbopack-02sp76-9vzd-3.js} +1 -1
  102. package/.next/standalone/.next/static/chunks/{turbopack-0kj0dx0lvll_z.js → turbopack-0g..zdci5n6yt.js} +1 -1
  103. package/.next/standalone/.next/static/chunks/{turbopack-02e4xh.7mqqic.js → turbopack-0gcm0ao7ar0vo.js} +1 -1
  104. package/.next/standalone/.next/static/chunks/{turbopack-137b-w0hdnabu.js → turbopack-0jbxqfqs~bhnb.js} +1 -1
  105. package/.next/standalone/.next/static/chunks/{turbopack-0apt8fmn9bw8j.js → turbopack-0scaqrnmscmk5.js} +1 -1
  106. package/.next/standalone/.next/static/chunks/{turbopack-084hs3838to_7.js → turbopack-0xl824.ut7kv5.js} +1 -1
  107. package/.next/standalone/.next/static/chunks/{turbopack-0lpwwdsrgtjw..js → turbopack-102tph-sy46xp.js} +1 -1
  108. package/.next/standalone/package.json +2 -1
  109. package/.next/standalone/server.js +1 -1
  110. package/dist/server.js +47 -6
  111. package/package.json +2 -1
  112. package/.next/standalone/.next/static/chunks/0ebs8_kx6xxp4.js +0 -1
  113. package/.next/standalone/.next/static/chunks/0gunclg4757tl.js +0 -1
  114. package/.next/standalone/.next/static/chunks/0ls9aifbksb~h.js +0 -1
  115. package/.next/standalone/.next/static/chunks/134dizutdhkgt.js +0 -1
  116. /package/.next/standalone/.next/static/{FLpdzv7HGFcplNF3n13ll → IGLfY98cOpT_s-m_8zv8r}/_clientMiddlewareManifest.js +0 -0
  117. /package/.next/standalone/.next/static/{FLpdzv7HGFcplNF3n13ll → IGLfY98cOpT_s-m_8zv8r}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- FLpdzv7HGFcplNF3n13ll
1
+ IGLfY98cOpT_s-m_8zv8r
@@ -15,11 +15,11 @@
15
15
  "static/chunks/0yi.kp2rt4-nc.js",
16
16
  "static/chunks/00yfl7agnve...js",
17
17
  "static/chunks/09wg815lxyi._.js",
18
- "static/chunks/134dizutdhkgt.js",
18
+ "static/chunks/02lycfk~b_9ps.js",
19
19
  "static/chunks/0ti3g2b7fhm5v.js",
20
20
  "static/chunks/05-mpg38w0a82.js",
21
- "static/chunks/0ls9aifbksb~h.js",
22
- "static/chunks/turbopack-0apt8fmn9bw8j.js"
21
+ "static/chunks/13h_qiv748a8c.js",
22
+ "static/chunks/turbopack-0scaqrnmscmk5.js"
23
23
  ],
24
24
  "/_app": [
25
25
  "static/chunks/08mloizj8v086.js",
@@ -49,16 +49,16 @@
49
49
  "static/chunks/0-sxrfxgcu1ce.js",
50
50
  "static/chunks/06fd4gm.ayhf7.js",
51
51
  "static/chunks/09ic8khns87py.js",
52
- "static/chunks/134dizutdhkgt.js",
52
+ "static/chunks/02lycfk~b_9ps.js",
53
53
  "static/chunks/0yi.kp2rt4-nc.js",
54
54
  "static/chunks/00yfl7agnve...js",
55
- "static/chunks/0ls9aifbksb~h.js",
55
+ "static/chunks/13h_qiv748a8c.js",
56
56
  "static/chunks/09wg815lxyi._.js",
57
57
  "static/chunks/0wlz6--vu7adu.js",
58
58
  "static/chunks/0ml5~2ty-rbv_.js",
59
59
  "static/chunks/12t3ws50siqw1.js",
60
60
  "static/chunks/15aj3kd.p7zw6.js",
61
- "static/chunks/turbopack-0lpwwdsrgtjw..js"
61
+ "static/chunks/turbopack-0gcm0ao7ar0vo.js"
62
62
  ],
63
63
  "/agents/[agentId]/chat": [
64
64
  "static/chunks/0fungak7h7t_u.js",
@@ -77,12 +77,12 @@
77
77
  "static/chunks/00yfl7agnve...js",
78
78
  "static/chunks/09wg815lxyi._.js",
79
79
  "static/chunks/0wlz6--vu7adu.js",
80
- "static/chunks/134dizutdhkgt.js",
80
+ "static/chunks/02lycfk~b_9ps.js",
81
81
  "static/chunks/0py3p~barq9qm.js",
82
82
  "static/chunks/0-sxrfxgcu1ce.js",
83
- "static/chunks/0ls9aifbksb~h.js",
83
+ "static/chunks/13h_qiv748a8c.js",
84
84
  "static/chunks/0ml5~2ty-rbv_.js",
85
- "static/chunks/turbopack-00pcz7jnwmzq9.js"
85
+ "static/chunks/turbopack-0-_7t3yzrv2o0.js"
86
86
  ],
87
87
  "/agents/[agentId]/memory": [
88
88
  "static/chunks/0mi.f1.iffvs7.js",
@@ -95,10 +95,10 @@
95
95
  "static/chunks/0py3p~barq9qm.js",
96
96
  "static/chunks/0-sxrfxgcu1ce.js",
97
97
  "static/chunks/06fd4gm.ayhf7.js",
98
- "static/chunks/134dizutdhkgt.js",
98
+ "static/chunks/02lycfk~b_9ps.js",
99
99
  "static/chunks/0wlz6--vu7adu.js",
100
100
  "static/chunks/0ti3g2b7fhm5v.js",
101
- "static/chunks/0ls9aifbksb~h.js",
101
+ "static/chunks/13h_qiv748a8c.js",
102
102
  "static/chunks/00yfl7agnve...js",
103
103
  "static/chunks/0p15~kn-ue177.js",
104
104
  "static/chunks/0yi.kp2rt4-nc.js",
@@ -106,7 +106,7 @@
106
106
  "static/chunks/0qe146f.3s0ud.js",
107
107
  "static/chunks/09wg815lxyi._.js",
108
108
  "static/chunks/15aj3kd.p7zw6.js",
109
- "static/chunks/turbopack-137b-w0hdnabu.js"
109
+ "static/chunks/turbopack-0jbxqfqs~bhnb.js"
110
110
  ],
111
111
  "/agents/[agentId]/workspace": [
112
112
  "static/chunks/0kmwqchx6vxwc.js",
@@ -124,10 +124,10 @@
124
124
  "static/chunks/09wg815lxyi._.js",
125
125
  "static/chunks/0wlz6--vu7adu.js",
126
126
  "static/chunks/0-sxrfxgcu1ce.js",
127
- "static/chunks/0ls9aifbksb~h.js",
127
+ "static/chunks/13h_qiv748a8c.js",
128
128
  "static/chunks/0qe146f.3s0ud.js",
129
- "static/chunks/134dizutdhkgt.js",
130
- "static/chunks/turbopack-084hs3838to_7.js"
129
+ "static/chunks/02lycfk~b_9ps.js",
130
+ "static/chunks/turbopack-0xl824.ut7kv5.js"
131
131
  ],
132
132
  "/login": [
133
133
  "static/chunks/14rkjvhij9msz.js",
@@ -158,13 +158,13 @@
158
158
  "static/chunks/0ml5~2ty-rbv_.js",
159
159
  "static/chunks/0wlz6--vu7adu.js",
160
160
  "static/chunks/09wg815lxyi._.js",
161
- "static/chunks/0gunclg4757tl.js",
161
+ "static/chunks/0_24.ba0w6i58.js",
162
162
  "static/chunks/0yi.kp2rt4-nc.js",
163
163
  "static/chunks/00yfl7agnve...js",
164
164
  "static/chunks/0-sxrfxgcu1ce.js",
165
- "static/chunks/134dizutdhkgt.js",
165
+ "static/chunks/02lycfk~b_9ps.js",
166
166
  "static/chunks/06fd4gm.ayhf7.js",
167
- "static/chunks/turbopack-0kj0dx0lvll_z.js"
167
+ "static/chunks/turbopack-0g..zdci5n6yt.js"
168
168
  ],
169
169
  "/reset": [
170
170
  "static/chunks/0_sdw~kzk-at0.js",
@@ -175,7 +175,7 @@
175
175
  "static/chunks/turbopack-0jds356hmim~..js"
176
176
  ],
177
177
  "/stats": [
178
- "static/chunks/0kzdu-5p1onjr.js",
178
+ "static/chunks/12~ueg_4wkgfs.js",
179
179
  "static/chunks/0gx~s_r.d1ncl.js",
180
180
  "static/chunks/05-mpg38w0a82.js",
181
181
  "static/chunks/0ay.h74rl2t2c.js",
@@ -188,12 +188,12 @@
188
188
  "static/chunks/00yfl7agnve...js",
189
189
  "static/chunks/0wlz6--vu7adu.js",
190
190
  "static/chunks/09wg815lxyi._.js",
191
- "static/chunks/134dizutdhkgt.js",
191
+ "static/chunks/02lycfk~b_9ps.js",
192
192
  "static/chunks/0ml5~2ty-rbv_.js",
193
- "static/chunks/0ebs8_kx6xxp4.js",
193
+ "static/chunks/0zv-py60g55wn.js",
194
194
  "static/chunks/15aj3kd.p7zw6.js",
195
195
  "static/chunks/0yi.kp2rt4-nc.js",
196
- "static/chunks/turbopack-0uc26w1zvgd-e.js"
196
+ "static/chunks/turbopack-102tph-sy46xp.js"
197
197
  ],
198
198
  "/tools-required": [
199
199
  "static/chunks/0kf8xkvr3218u.js",
@@ -218,22 +218,22 @@
218
218
  "static/chunks/06fd4gm.ayhf7.js",
219
219
  "static/chunks/15aj3kd.p7zw6.js",
220
220
  "static/chunks/00yfl7agnve...js",
221
- "static/chunks/0ls9aifbksb~h.js",
221
+ "static/chunks/13h_qiv748a8c.js",
222
222
  "static/chunks/0ml5~2ty-rbv_.js",
223
223
  "static/chunks/09wg815lxyi._.js",
224
224
  "static/chunks/0wlz6--vu7adu.js",
225
- "static/chunks/134dizutdhkgt.js",
225
+ "static/chunks/02lycfk~b_9ps.js",
226
226
  "static/chunks/0qe146f.3s0ud.js",
227
227
  "static/chunks/0yi.kp2rt4-nc.js",
228
- "static/chunks/turbopack-02e4xh.7mqqic.js"
228
+ "static/chunks/turbopack-02sp76-9vzd-3.js"
229
229
  ]
230
230
  },
231
231
  "devFiles": [],
232
232
  "polyfillFiles": [],
233
233
  "lowPriorityFiles": [
234
- "static/FLpdzv7HGFcplNF3n13ll/_buildManifest.js",
235
- "static/FLpdzv7HGFcplNF3n13ll/_ssgManifest.js",
236
- "static/FLpdzv7HGFcplNF3n13ll/_clientMiddlewareManifest.js"
234
+ "static/IGLfY98cOpT_s-m_8zv8r/_buildManifest.js",
235
+ "static/IGLfY98cOpT_s-m_8zv8r/_ssgManifest.js",
236
+ "static/IGLfY98cOpT_s-m_8zv8r/_clientMiddlewareManifest.js"
237
237
  ],
238
238
  "rootMainFiles": []
239
239
  }
@@ -3,9 +3,9 @@
3
3
  "routes": {},
4
4
  "dynamicRoutes": {},
5
5
  "preview": {
6
- "previewModeId": "e948d8fc99f04c091d9e13b8b9f76919",
7
- "previewModeSigningKey": "d642a55ed2ce2ce1ee65da4595e7f711a3378272482bf6938b5f87f0cd9427a9",
8
- "previewModeEncryptionKey": "d9d9b0f153f01e21d7961d80979b0053988a34194d7504d1cd643e3bab709610"
6
+ "previewModeId": "46ab3f8cd9121892a2f6293e637265b9",
7
+ "previewModeSigningKey": "ff342e5b1e4811cac3f5b0675d3fe7a3e107947194bb827a383e09fea09b1e2c",
8
+ "previewModeEncryptionKey": "71f8df5f8677bd98bd4bb663a1b424ec2d7f5313c82a89d94ab89f90d72ce862"
9
9
  },
10
10
  "notFoundRoutes": []
11
11
  }
@@ -2,7 +2,7 @@
2
2
  "version": 1,
3
3
  "config": {
4
4
  "env": {
5
- "NEXT_PUBLIC_COMMIT_HASH": "83ad454"
5
+ "NEXT_PUBLIC_COMMIT_HASH": "04424dd"
6
6
  },
7
7
  "webpack": null,
8
8
  "typescript": {
@@ -608,59 +608,59 @@
608
608
  "dataRoutes": [
609
609
  {
610
610
  "page": "/",
611
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/index\\.json$"
611
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/index\\.json$"
612
612
  },
613
613
  {
614
614
  "page": "/agents",
615
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/agents\\.json$"
615
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/agents\\.json$"
616
616
  },
617
617
  {
618
618
  "page": "/agents/[agentId]/chat",
619
619
  "routeKeys": {
620
620
  "nxtPagentId": "nxtPagentId"
621
621
  },
622
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/agents/([^/]+?)/chat\\.json$",
623
- "namedDataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/agents/(?<nxtPagentId>[^/]+?)/chat\\.json$"
622
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/agents/([^/]+?)/chat\\.json$",
623
+ "namedDataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/agents/(?<nxtPagentId>[^/]+?)/chat\\.json$"
624
624
  },
625
625
  {
626
626
  "page": "/agents/[agentId]/memory",
627
627
  "routeKeys": {
628
628
  "nxtPagentId": "nxtPagentId"
629
629
  },
630
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/agents/([^/]+?)/memory\\.json$",
631
- "namedDataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/agents/(?<nxtPagentId>[^/]+?)/memory\\.json$"
630
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/agents/([^/]+?)/memory\\.json$",
631
+ "namedDataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/agents/(?<nxtPagentId>[^/]+?)/memory\\.json$"
632
632
  },
633
633
  {
634
634
  "page": "/agents/[agentId]/workspace",
635
635
  "routeKeys": {
636
636
  "nxtPagentId": "nxtPagentId"
637
637
  },
638
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/agents/([^/]+?)/workspace\\.json$",
639
- "namedDataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/agents/(?<nxtPagentId>[^/]+?)/workspace\\.json$"
638
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/agents/([^/]+?)/workspace\\.json$",
639
+ "namedDataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/agents/(?<nxtPagentId>[^/]+?)/workspace\\.json$"
640
640
  },
641
641
  {
642
642
  "page": "/login",
643
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/login\\.json$"
643
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/login\\.json$"
644
644
  },
645
645
  {
646
646
  "page": "/reports",
647
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/reports\\.json$"
647
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/reports\\.json$"
648
648
  },
649
649
  {
650
650
  "page": "/reset",
651
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/reset\\.json$"
651
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/reset\\.json$"
652
652
  },
653
653
  {
654
654
  "page": "/stats",
655
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/stats\\.json$"
655
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/stats\\.json$"
656
656
  },
657
657
  {
658
658
  "page": "/tools-required",
659
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/tools-required\\.json$"
659
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/tools-required\\.json$"
660
660
  },
661
661
  {
662
662
  "page": "/webview",
663
- "dataRouteRegex": "^/_next/data/FLpdzv7HGFcplNF3n13ll/webview\\.json$"
663
+ "dataRouteRegex": "^/_next/data/IGLfY98cOpT_s\\-m_8zv8r/webview\\.json$"
664
664
  }
665
665
  ],
666
666
  "i18n": {
@@ -1,4 +1,4 @@
1
- module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),n=e.i(666126),l=e.i(825265),c=e.i(804767);let d=(0,o.createLogger)("workspace"),u="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),w=a.default.join(p,"workspaces.json"),f=a.default.join(p,"layout.json"),y=a.default.join(p,"tabs.json"),h=globalThis;h.__purplemuxWorkspaceLock||(h.__purplemuxWorkspaceLock=Promise.resolve());let m=async e=>{let t,a=new Promise(e=>{t=e}),r=h.__purplemuxWorkspaceLock;h.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},_=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),v=async()=>{let e;try{e=await t.default.readFile(w,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(w,w.replace(/\.json$/,".json.bak"))}catch{}return null}},k=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,o=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(h.__purplemuxWorkspacesContentCache===o)return;e.updatedAt=new Date().toISOString();let l=w+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,w)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}h.__purplemuxWorkspacesContentCache=o,(0,n.broadcastSync)({type:"workspace"})},$=async()=>{let e=await (0,l.readLayoutFile)(f);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await k(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},g=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=f+".tmp";try{await t.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(o,f)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await $()}catch{return null}},x=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await v();if(!e&&(await t.default.access(f).then(()=>!0).catch(()=>!1)?e=await $():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await g())),!e){let t=_();await k(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,o,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},S=async()=>{let e=await v();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},b=async()=>{let e=await v();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await v();return t?.workspaces.find(t=>t.id===e)},j=async(e,a,r)=>m(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await v()??_(),n=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(u)){let e=parseInt(a.name.slice(u.length),10);e>t&&(t=e)}return`${u}${t+1}`})(o.workspaces),p=o.workspaces.length,w=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(w,(0,l.resolveLayoutFile)(n));let f={id:n,name:c,directories:[e],order:p};return o.workspaces.push(f),await k(o),d.info(`Created: ${n} (${c}, ${e})`),f}),E=async e=>m(async()=>{let a=await v()??_(),r=a.workspaces.findIndex(t=>t.id===e);if(-1===r)return!1;let i=a.workspaces[r],o=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(o)for(let e of(0,c.collectAllTabs)(o.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await t.default.rm((0,l.resolveLayoutDir)(e),{recursive:!0,force:!0})}catch{}return(0,l.clearLayoutCache)(e),a.workspaces.splice(r,1),a.workspaces.forEach((e,t)=>{e.order=t}),await k(a),d.info(`Deleted: ${e} (${i.name})`),!0}),I=async(e,t)=>m(async()=>{let a=await v();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await k(a),d.info(`Renamed: ${e} → "${t}"`),{...r}):null}),D=async e=>m(async()=>{let t=await v()??_();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await k(t)}),C=async(e,t)=>m(async()=>{let a=await v();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await k(a))}),W=async e=>m(async()=>{let t=await v()??_(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await k(t),!0)}),L=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,j,"deleteWorkspace",0,E,"getActiveWorkspaceId",0,b,"getWorkspaceById",0,T,"getWorkspaces",0,S,"initWorkspaceStore",0,x,"renameWorkspace",0,I,"reorderWorkspaces",0,W,"updateActive",0,D,"updateWorkspaceDirectories",0,C,"validateDirectory",0,L])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),s=t.default.join(r,"rate-limits.json"),o=`#!/bin/sh
1
+ module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),n=e.i(666126),l=e.i(825265),c=e.i(804767);let d=(0,o.createLogger)("workspace"),u="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),w=a.default.join(p,"workspaces.json"),f=a.default.join(p,"layout.json"),y=a.default.join(p,"tabs.json"),h=globalThis;h.__purplemuxWorkspaceLock||(h.__purplemuxWorkspaceLock=Promise.resolve());let m=async e=>{let t,a=new Promise(e=>{t=e}),r=h.__purplemuxWorkspaceLock;h.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},_=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),v=async()=>{let e;try{e=await t.default.readFile(w,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(w,w.replace(/\.json$/,".json.bak"))}catch{}return null}},k=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,o=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(h.__purplemuxWorkspacesContentCache===o)return;e.updatedAt=new Date().toISOString();let l=w+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,w)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}h.__purplemuxWorkspacesContentCache=o,(0,n.broadcastSync)({type:"workspace"})},$=async()=>{let e=await (0,l.readLayoutFile)(f);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await k(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},g=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=f+".tmp";try{await t.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(o,f)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await $()}catch{return null}},x=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await v();if(!e&&(await t.default.access(f).then(()=>!0).catch(()=>!1)?e=await $():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await g())),!e){let t=_();await k(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,o,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},S=async()=>{let e=await v();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},b=async()=>{let e=await v();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await v();return t?.workspaces.find(t=>t.id===e)},j=async(e,a,r)=>m(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await v()??_(),n=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(u)){let e=parseInt(a.name.slice(u.length),10);e>t&&(t=e)}return`${u}${t+1}`})(o.workspaces),p=o.workspaces.length,w=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(w,(0,l.resolveLayoutFile)(n));let f={id:n,name:c,directories:[e],order:p};return o.workspaces.push(f),await k(o),d.info(`Created: ${n} (${c}, ${e})`),f}),E=async e=>m(async()=>{let t=await v()??_(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(i)for(let e of(0,c.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,l.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),t.workspaces.forEach((e,t)=>{e.order=t}),await k(t),d.info(`Deleted: ${e} (${r.name})`),!0}),I=async(e,t)=>m(async()=>{let a=await v();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await k(a),d.info(`Renamed: ${e} → "${t}"`),{...r}):null}),D=async e=>m(async()=>{let t=await v()??_();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await k(t)}),C=async(e,t)=>m(async()=>{let a=await v();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await k(a))}),W=async e=>m(async()=>{let t=await v()??_(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await k(t),!0)}),O=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,j,"deleteWorkspace",0,E,"getActiveWorkspaceId",0,b,"getWorkspaceById",0,T,"getWorkspaces",0,S,"initWorkspaceStore",0,x,"renameWorkspace",0,I,"reorderWorkspaces",0,W,"updateActive",0,D,"updateWorkspaceDirectories",0,C,"validateDirectory",0,O])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),s=t.default.join(r,"rate-limits.json"),o=`#!/bin/sh
2
2
  input=$(cat)
3
3
  OUTPUT="$HOME/.purplemux/rate-limits.json"
4
4
  HAS_LIMITS=$(echo "$input" | jq -r 'if .rate_limits.five_hour or .rate_limits.seven_day then "yes" else "no" end' 2>/dev/null)
@@ -1,4 +1,4 @@
1
- module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),n=e.i(666126),l=e.i(825265),d=e.i(804767);let c=(0,o.createLogger)("workspace"),u="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),f=a.default.join(p,"workspaces.json"),w=a.default.join(p,"layout.json"),y=a.default.join(p,"tabs.json"),h=globalThis;h.__purplemuxWorkspaceLock||(h.__purplemuxWorkspaceLock=Promise.resolve());let m=async e=>{let t,a=new Promise(e=>{t=e}),r=h.__purplemuxWorkspaceLock;h.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},v=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),_=async()=>{let e;try{e=await t.default.readFile(f,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{c.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},k=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,o=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(h.__purplemuxWorkspacesContentCache===o)return;e.updatedAt=new Date().toISOString();let l=f+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,f)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}h.__purplemuxWorkspacesContentCache=o,(0,n.broadcastSync)({type:"workspace"})},$=async()=>{let e=await (0,l.readLayoutFile)(w);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await k(i),c.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},b=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=w+".tmp";try{await t.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(o,w)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}return c.info("tabs.json → layout.json migration complete"),await $()}catch{return null}},g=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await _();if(!e&&(await t.default.access(w).then(()=>!0).catch(()=>!1)?e=await $():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await b())),!e){let t=v();await k(t),e=t,c.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){c.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,d.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,o,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){c.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},S=async()=>{let e=await _();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},x=async()=>{let e=await _();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await _();return t?.workspaces.find(t=>t.id===e)},j=async(e,a,r)=>m(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await _()??v(),n=`ws-${(0,i.nanoid)(6)}`,d=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(u)){let e=parseInt(a.name.slice(u.length),10);e>t&&(t=e)}return`${u}${t+1}`})(o.workspaces),p=o.workspaces.length,f=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(f,(0,l.resolveLayoutFile)(n));let w={id:n,name:d,directories:[e],order:p};return o.workspaces.push(w),await k(o),c.info(`Created: ${n} (${d}, ${e})`),w}),E=async e=>m(async()=>{let a=await _()??v(),r=a.workspaces.findIndex(t=>t.id===e);if(-1===r)return!1;let i=a.workspaces[r],o=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(o)for(let e of(0,d.collectAllTabs)(o.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await t.default.rm((0,l.resolveLayoutDir)(e),{recursive:!0,force:!0})}catch{}return(0,l.clearLayoutCache)(e),a.workspaces.splice(r,1),a.workspaces.forEach((e,t)=>{e.order=t}),await k(a),c.info(`Deleted: ${e} (${i.name})`),!0}),I=async(e,t)=>m(async()=>{let a=await _();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await k(a),c.info(`Renamed: ${e} → "${t}"`),{...r}):null}),C=async e=>m(async()=>{let t=await _()??v();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await k(t)}),D=async(e,t)=>m(async()=>{let a=await _();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await k(a))}),W=async e=>m(async()=>{let t=await _()??v(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await k(t),!0)}),L=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,j,"deleteWorkspace",0,E,"getActiveWorkspaceId",0,x,"getWorkspaceById",0,T,"getWorkspaces",0,S,"initWorkspaceStore",0,g,"renameWorkspace",0,I,"reorderWorkspaces",0,W,"updateActive",0,C,"updateWorkspaceDirectories",0,D,"validateDirectory",0,L])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),s=t.default.join(r,"rate-limits.json"),o=`#!/bin/sh
1
+ module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),n=e.i(666126),l=e.i(825265),d=e.i(804767);let c=(0,o.createLogger)("workspace"),u="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),w=a.default.join(p,"workspaces.json"),f=a.default.join(p,"layout.json"),y=a.default.join(p,"tabs.json"),h=globalThis;h.__purplemuxWorkspaceLock||(h.__purplemuxWorkspaceLock=Promise.resolve());let m=async e=>{let t,a=new Promise(e=>{t=e}),r=h.__purplemuxWorkspaceLock;h.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},v=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),_=async()=>{let e;try{e=await t.default.readFile(w,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{c.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(w,w.replace(/\.json$/,".json.bak"))}catch{}return null}},k=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,o=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(h.__purplemuxWorkspacesContentCache===o)return;e.updatedAt=new Date().toISOString();let l=w+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,w)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}h.__purplemuxWorkspacesContentCache=o,(0,n.broadcastSync)({type:"workspace"})},$=async()=>{let e=await (0,l.readLayoutFile)(f);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await k(i),c.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},b=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=f+".tmp";try{await t.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(o,f)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}return c.info("tabs.json → layout.json migration complete"),await $()}catch{return null}},g=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await _();if(!e&&(await t.default.access(f).then(()=>!0).catch(()=>!1)?e=await $():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await b())),!e){let t=v();await k(t),e=t,c.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){c.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,d.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,o,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){c.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},S=async()=>{let e=await _();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},x=async()=>{let e=await _();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await _();return t?.workspaces.find(t=>t.id===e)},j=async(e,a,r)=>m(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await _()??v(),n=`ws-${(0,i.nanoid)(6)}`,d=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(u)){let e=parseInt(a.name.slice(u.length),10);e>t&&(t=e)}return`${u}${t+1}`})(o.workspaces),p=o.workspaces.length,w=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(w,(0,l.resolveLayoutFile)(n));let f={id:n,name:d,directories:[e],order:p};return o.workspaces.push(f),await k(o),c.info(`Created: ${n} (${d}, ${e})`),f}),E=async e=>m(async()=>{let t=await _()??v(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(i)for(let e of(0,d.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,l.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),t.workspaces.forEach((e,t)=>{e.order=t}),await k(t),c.info(`Deleted: ${e} (${r.name})`),!0}),I=async(e,t)=>m(async()=>{let a=await _();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await k(a),c.info(`Renamed: ${e} → "${t}"`),{...r}):null}),C=async e=>m(async()=>{let t=await _()??v();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await k(t)}),D=async(e,t)=>m(async()=>{let a=await _();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await k(a))}),W=async e=>m(async()=>{let t=await _()??v(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await k(t),!0)}),L=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,j,"deleteWorkspace",0,E,"getActiveWorkspaceId",0,x,"getWorkspaceById",0,T,"getWorkspaces",0,S,"initWorkspaceStore",0,g,"renameWorkspace",0,I,"reorderWorkspaces",0,W,"updateActive",0,C,"updateWorkspaceDirectories",0,D,"validateDirectory",0,L])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),s=t.default.join(r,"rate-limits.json"),o=`#!/bin/sh
2
2
  input=$(cat)
3
3
  OUTPUT="$HOME/.purplemux/rate-limits.json"
4
4
  HAS_LIMITS=$(echo "$input" | jq -r 'if .rate_limits.five_hour or .rate_limits.seven_day then "yes" else "no" end' 2>/dev/null)
@@ -56,6 +56,6 @@ CTX_FMT=""
56
56
  [ -n "$CTX" ] && CTX_FMT=" \xb7 ctx $(printf '%.0f' "$CTX")%"
57
57
 
58
58
  echo "\${MODEL}\${CTX_FMT} \xb7 \${TOKENS} \xb7 +\${ADDED} -\${REMOVED}"
59
- `;e.s(["RATE_LIMITS_FILE",0,s,"STATUSLINE_SCRIPT_CONTENT",0,o,"STATUSLINE_SCRIPT_PATH",0,i])},848738,e=>{"use strict";var t=e.i(926747),a=e.i(190406),r=e.i(244898),i=e.i(262950),s=e.i(825265),o=e.i(322429),n=e.i(964759);let l=(0,e.i(25146).createLogger)("layout"),d=async(e,t)=>{let a=e.query.workspace||await (0,o.getActiveWorkspaceId)();if(!a)return t.status(400).json({error:"No workspace found"});let r=e.query.paneId,i=e.query.tabId;if("DELETE"===e.method)return await (0,s.removeTabFromPane)(a,r,i)?((0,n.getStatusManager)().removeTab(i),t.status(204).end()):t.status(404).json({error:"Tab not found"});if("POST"===e.method)try{let{command:o}=e.body??{};if(!await (0,s.restartTabSession)(a,r,i,o))return t.status(404).json({error:"Tab not found"});return t.status(200).json({ok:!0})}catch(e){return l.error(`tab restart failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to restart session"})}if("PATCH"===e.method){let{name:o,panelType:n,title:l,cwd:d,lastCommand:c,webUrl:u}=e.body??{};if(void 0!==o||void 0!==n||void 0!==l||void 0!==d||void 0!==c||void 0!==u){let e={};if(void 0!==o){if("string"!=typeof o)return t.status(400).json({error:"name must be a string"});e.name=o.trim()}void 0!==n&&(e.panelType=n),void 0!==l&&(e.title=l),void 0!==d&&(e.cwd=d),void 0!==c&&(e.lastCommand=c),void 0!==u&&(e.webUrl=u);let p=await (0,s.patchTab)(a,r,i,e);return p?t.status(200).json(p):t.status(404).json({error:"Tab not found"})}return t.status(400).json({error:"No fields to update"})}return t.setHeader("Allow","POST, DELETE, PATCH"),t.status(405).json({error:"Method not allowed"})};e.s(["default",0,d],360163);var c=e.i(360163),u=e.i(7031),p=e.i(181927),f=e.i(846432);let w=(0,i.hoist)(c,"default"),y=(0,i.hoist)(c,"config"),h=new r.PagesAPIRouteModule({definition:{kind:a.RouteKind.PAGES_API,page:"/api/layout/pane/[paneId]/tabs/[tabId]/index",pathname:"/api/layout/pane/[paneId]/tabs/[tabId]",bundlePath:"",filename:""},userland:c,distDir:".next",relativeProjectDir:""});async function m(e,a,r){r.requestMeta&&(0,f.setRequestMeta)(e,r.requestMeta),h.isDev&&(0,f.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/pane/[paneId]/tabs/[tabId]/index";i=i.replace(/\/index$/,"")||"/";let s=await h.prepare(e,a,{srcPage:i});if(!s){a.statusCode=400,a.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve());return}let{query:o,params:n,prerenderManifest:l,routerServerContext:d}=s;try{let t,r=e.method||"GET",s=(0,u.getTracer)(),c=s.getActiveScopeSpan(),f=!!(null==d?void 0:d.isWrappedByNextServer),w=h.instrumentationOnRequestError.bind(h),y=async c=>h.render(e,a,{query:{...o,...n},params:n,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:h.isDev,page:"/api/layout/pane/[paneId]/tabs/[tabId]/index",internalRevalidate:null==d?void 0:d.revalidate,onError:(...t)=>w(e,...t)}).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":a.statusCode,"next.rsc":!1});let e=s.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let o=e.get("next.route");if(o){let e=`${r} ${o}`;c.setAttributes({"next.route":o,"http.route":o,"next.span_name":e}),c.updateName(e),t&&t!==c&&(t.setAttribute("http.route",o),t.updateName(e))}else c.updateName(`${r} ${i}`)});f&&c?await y(c):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(p.BaseServerSpan.handleRequest,{spanName:`${r} ${i}`,kind:u.SpanKind.SERVER,attributes:{"http.method":r,"http.target":e.url}},y),void 0,!f))}catch(e){if(h.isDev)throw e;(0,t.sendError)(a,500,"Internal Server Error")}finally{null==r.waitUntil||r.waitUntil.call(r,Promise.resolve())}}e.s(["config",0,y,"default",0,w,"handler",0,m],848738)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))}];
59
+ `;e.s(["RATE_LIMITS_FILE",0,s,"STATUSLINE_SCRIPT_CONTENT",0,o,"STATUSLINE_SCRIPT_PATH",0,i])},848738,e=>{"use strict";var t=e.i(926747),a=e.i(190406),r=e.i(244898),i=e.i(262950),s=e.i(825265),o=e.i(322429),n=e.i(964759);let l=(0,e.i(25146).createLogger)("layout"),d=async(e,t)=>{let a=e.query.workspace||await (0,o.getActiveWorkspaceId)();if(!a)return t.status(400).json({error:"No workspace found"});let r=e.query.paneId,i=e.query.tabId;if("DELETE"===e.method)return await (0,s.removeTabFromPane)(a,r,i)?((0,n.getStatusManager)().removeTab(i),t.status(204).end()):t.status(404).json({error:"Tab not found"});if("POST"===e.method)try{let{command:o}=e.body??{};if(!await (0,s.restartTabSession)(a,r,i,o))return t.status(404).json({error:"Tab not found"});return t.status(200).json({ok:!0})}catch(e){return l.error(`tab restart failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to restart session"})}if("PATCH"===e.method){let{name:o,panelType:n,title:l,cwd:d,lastCommand:c,webUrl:u}=e.body??{};if(void 0!==o||void 0!==n||void 0!==l||void 0!==d||void 0!==c||void 0!==u){let e={};if(void 0!==o){if("string"!=typeof o)return t.status(400).json({error:"name must be a string"});e.name=o.trim()}void 0!==n&&(e.panelType=n),void 0!==l&&(e.title=l),void 0!==d&&(e.cwd=d),void 0!==c&&(e.lastCommand=c),void 0!==u&&(e.webUrl=u);let p=await (0,s.patchTab)(a,r,i,e);return p?t.status(200).json(p):t.status(404).json({error:"Tab not found"})}return t.status(400).json({error:"No fields to update"})}return t.setHeader("Allow","POST, DELETE, PATCH"),t.status(405).json({error:"Method not allowed"})};e.s(["default",0,d],360163);var c=e.i(360163),u=e.i(7031),p=e.i(181927),w=e.i(846432);let f=(0,i.hoist)(c,"default"),y=(0,i.hoist)(c,"config"),h=new r.PagesAPIRouteModule({definition:{kind:a.RouteKind.PAGES_API,page:"/api/layout/pane/[paneId]/tabs/[tabId]/index",pathname:"/api/layout/pane/[paneId]/tabs/[tabId]",bundlePath:"",filename:""},userland:c,distDir:".next",relativeProjectDir:""});async function m(e,a,r){r.requestMeta&&(0,w.setRequestMeta)(e,r.requestMeta),h.isDev&&(0,w.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/pane/[paneId]/tabs/[tabId]/index";i=i.replace(/\/index$/,"")||"/";let s=await h.prepare(e,a,{srcPage:i});if(!s){a.statusCode=400,a.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve());return}let{query:o,params:n,prerenderManifest:l,routerServerContext:d}=s;try{let t,r=e.method||"GET",s=(0,u.getTracer)(),c=s.getActiveScopeSpan(),w=!!(null==d?void 0:d.isWrappedByNextServer),f=h.instrumentationOnRequestError.bind(h),y=async c=>h.render(e,a,{query:{...o,...n},params:n,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:h.isDev,page:"/api/layout/pane/[paneId]/tabs/[tabId]/index",internalRevalidate:null==d?void 0:d.revalidate,onError:(...t)=>f(e,...t)}).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":a.statusCode,"next.rsc":!1});let e=s.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let o=e.get("next.route");if(o){let e=`${r} ${o}`;c.setAttributes({"next.route":o,"http.route":o,"next.span_name":e}),c.updateName(e),t&&t!==c&&(t.setAttribute("http.route",o),t.updateName(e))}else c.updateName(`${r} ${i}`)});w&&c?await y(c):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(p.BaseServerSpan.handleRequest,{spanName:`${r} ${i}`,kind:u.SpanKind.SERVER,attributes:{"http.method":r,"http.target":e.url}},y),void 0,!w))}catch(e){if(h.isDev)throw e;(0,t.sendError)(a,500,"Internal Server Error")}finally{null==r.waitUntil||r.waitUntil.call(r,Promise.resolve())}}e.s(["config",0,y,"default",0,f,"handler",0,m],848738)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))}];
60
60
 
61
61
  //# sourceMappingURL=%5Broot-of-the-server%5D__0_q9h8s._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),n=e.i(666126),l=e.i(825265),c=e.i(804767);let d=(0,o.createLogger)("workspace"),u="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),f=a.default.join(p,"workspaces.json"),w=a.default.join(p,"layout.json"),y=a.default.join(p,"tabs.json"),h=globalThis;h.__purplemuxWorkspaceLock||(h.__purplemuxWorkspaceLock=Promise.resolve());let m=async e=>{let t,a=new Promise(e=>{t=e}),r=h.__purplemuxWorkspaceLock;h.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},_=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),k=async()=>{let e;try{e=await t.default.readFile(f,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},v=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,o=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(h.__purplemuxWorkspacesContentCache===o)return;e.updatedAt=new Date().toISOString();let l=f+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,f)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}h.__purplemuxWorkspacesContentCache=o,(0,n.broadcastSync)({type:"workspace"})},$=async()=>{let e=await (0,l.readLayoutFile)(w);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await v(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},g=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=w+".tmp";try{await t.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(o,w)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await $()}catch{return null}},S=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await k();if(!e&&(await t.default.access(w).then(()=>!0).catch(()=>!1)?e=await $():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await g())),!e){let t=_();await v(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,o,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},x=async()=>{let e=await k();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},b=async()=>{let e=await k();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await k();return t?.workspaces.find(t=>t.id===e)},E=async(e,a,r)=>m(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await k()??_(),n=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(u)){let e=parseInt(a.name.slice(u.length),10);e>t&&(t=e)}return`${u}${t+1}`})(o.workspaces),p=o.workspaces.length,f=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(f,(0,l.resolveLayoutFile)(n));let w={id:n,name:c,directories:[e],order:p};return o.workspaces.push(w),await v(o),d.info(`Created: ${n} (${c}, ${e})`),w}),j=async e=>m(async()=>{let a=await k()??_(),r=a.workspaces.findIndex(t=>t.id===e);if(-1===r)return!1;let i=a.workspaces[r],o=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(o)for(let e of(0,c.collectAllTabs)(o.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await t.default.rm((0,l.resolveLayoutDir)(e),{recursive:!0,force:!0})}catch{}return(0,l.clearLayoutCache)(e),a.workspaces.splice(r,1),a.workspaces.forEach((e,t)=>{e.order=t}),await v(a),d.info(`Deleted: ${e} (${i.name})`),!0}),D=async(e,t)=>m(async()=>{let a=await k();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await v(a),d.info(`Renamed: ${e} → "${t}"`),{...r}):null}),C=async e=>m(async()=>{let t=await k()??_();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await v(t)}),I=async(e,t)=>m(async()=>{let a=await k();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await v(a))}),W=async e=>m(async()=>{let t=await k()??_(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await v(t),!0)}),L=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,E,"deleteWorkspace",0,j,"getActiveWorkspaceId",0,b,"getWorkspaceById",0,T,"getWorkspaces",0,x,"initWorkspaceStore",0,S,"renameWorkspace",0,D,"reorderWorkspaces",0,W,"updateActive",0,C,"updateWorkspaceDirectories",0,I,"validateDirectory",0,L])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),s=t.default.join(r,"rate-limits.json"),o=`#!/bin/sh
1
+ module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),n=e.i(666126),l=e.i(825265),c=e.i(804767);let d=(0,o.createLogger)("workspace"),u="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),f=a.default.join(p,"workspaces.json"),w=a.default.join(p,"layout.json"),y=a.default.join(p,"tabs.json"),h=globalThis;h.__purplemuxWorkspaceLock||(h.__purplemuxWorkspaceLock=Promise.resolve());let m=async e=>{let t,a=new Promise(e=>{t=e}),r=h.__purplemuxWorkspaceLock;h.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},_=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),k=async()=>{let e;try{e=await t.default.readFile(f,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},v=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,o=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(h.__purplemuxWorkspacesContentCache===o)return;e.updatedAt=new Date().toISOString();let l=f+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,f)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}h.__purplemuxWorkspacesContentCache=o,(0,n.broadcastSync)({type:"workspace"})},$=async()=>{let e=await (0,l.readLayoutFile)(w);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await v(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},g=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=w+".tmp";try{await t.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(o,w)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await $()}catch{return null}},S=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await k();if(!e&&(await t.default.access(w).then(()=>!0).catch(()=>!1)?e=await $():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await g())),!e){let t=_();await v(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,o,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},x=async()=>{let e=await k();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},b=async()=>{let e=await k();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await k();return t?.workspaces.find(t=>t.id===e)},E=async(e,a,r)=>m(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await k()??_(),n=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(u)){let e=parseInt(a.name.slice(u.length),10);e>t&&(t=e)}return`${u}${t+1}`})(o.workspaces),p=o.workspaces.length,f=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(f,(0,l.resolveLayoutFile)(n));let w={id:n,name:c,directories:[e],order:p};return o.workspaces.push(w),await v(o),d.info(`Created: ${n} (${c}, ${e})`),w}),j=async e=>m(async()=>{let t=await k()??_(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(i)for(let e of(0,c.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,l.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),t.workspaces.forEach((e,t)=>{e.order=t}),await v(t),d.info(`Deleted: ${e} (${r.name})`),!0}),D=async(e,t)=>m(async()=>{let a=await k();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await v(a),d.info(`Renamed: ${e} → "${t}"`),{...r}):null}),C=async e=>m(async()=>{let t=await k()??_();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await v(t)}),I=async(e,t)=>m(async()=>{let a=await k();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await v(a))}),W=async e=>m(async()=>{let t=await k()??_(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await v(t),!0)}),O=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,E,"deleteWorkspace",0,j,"getActiveWorkspaceId",0,b,"getWorkspaceById",0,T,"getWorkspaces",0,x,"initWorkspaceStore",0,S,"renameWorkspace",0,D,"reorderWorkspaces",0,W,"updateActive",0,C,"updateWorkspaceDirectories",0,I,"validateDirectory",0,O])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),s=t.default.join(r,"rate-limits.json"),o=`#!/bin/sh
2
2
  input=$(cat)
3
3
  OUTPUT="$HOME/.purplemux/rate-limits.json"
4
4
  HAS_LIMITS=$(echo "$input" | jq -r 'if .rate_limits.five_hour or .rate_limits.seven_day then "yes" else "no" end' 2>/dev/null)
@@ -1,3 +1,3 @@
1
- module.exports=[270406,(e,t,a)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},224361,(e,t,a)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},446146,e=>{"use strict";var t=e.i(926747),a=e.i(190406),r=e.i(244898),s=e.i(262950),i=e.i(233405);let n=(0,e.i(224361).promisify)(i.execFile),l=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let a={installed:!1,running:!1,version:null,hostname:null,dnsName:null,tailscaleIp:null,serveEntries:[]};try{let{stdout:e}=await n("tailscale",["version"],{timeout:5e3}),t=e.trim().match(/^(\d+\.\d+[\d.]*)/);a.installed=!0,a.version=t?.[1]??null}catch{return t.status(200).json(a)}try{let{stdout:e}=await n("tailscale",["status","--json"],{timeout:5e3}),t=JSON.parse(e);a.running="Running"===t.BackendState,a.hostname=t.Self?.HostName??null,a.dnsName=(t.Self?.DNSName??"").replace(/\.$/,"")||null,a.tailscaleIp=t.Self?.TailscaleIPs?.[0]??null}catch{return t.status(200).json(a)}try{let{stdout:e}=await n("tailscale",["serve","status","--json"],{timeout:5e3}),t=JSON.parse(e).Web;if(t)for(let[e,r]of Object.entries(t)){let t=e.match(/:(\d+)$/),s=t?.[1]??"443",i=r.Handlers?.["/"]?.Proxy??"";i&&a.serveEntries.push({httpsPort:s,proxy:i})}}catch{}return t.status(200).json(a)};e.s(["default",0,l],224439);var o=e.i(224439),u=e.i(7031),d=e.i(181927),p=e.i(846432);let c=(0,s.hoist)(o,"default"),m=(0,s.hoist)(o,"config"),h=new r.PagesAPIRouteModule({definition:{kind:a.RouteKind.PAGES_API,page:"/api/tailscale/status",pathname:"/api/tailscale/status",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function v(e,a,r){r.requestMeta&&(0,p.setRequestMeta)(e,r.requestMeta),h.isDev&&(0,p.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/tailscale/status";s=s.replace(/\/index$/,"")||"/";let i=await h.prepare(e,a,{srcPage:s});if(!i){a.statusCode=400,a.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve());return}let{query:n,params:l,prerenderManifest:o,routerServerContext:c}=i;try{let t,r=e.method||"GET",i=(0,u.getTracer)(),p=i.getActiveScopeSpan(),m=!!(null==c?void 0:c.isWrappedByNextServer),v=h.instrumentationOnRequestError.bind(h),f=async u=>h.render(e,a,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:h.isDev,page:"/api/tailscale/status",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>v(e,...t)}).finally(()=>{if(!u)return;u.setAttributes({"http.status_code":a.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=e.get("next.route");if(n){let e=`${r} ${n}`;u.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),u.updateName(e),t&&t!==u&&(t.setAttribute("http.route",n),t.updateName(e))}else u.updateName(`${r} ${s}`)});m&&p?await f(p):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(d.BaseServerSpan.handleRequest,{spanName:`${r} ${s}`,kind:u.SpanKind.SERVER,attributes:{"http.method":r,"http.target":e.url}},f),void 0,!m))}catch(e){if(h.isDev)throw e;(0,t.sendError)(a,500,"Internal Server Error")}finally{null==r.waitUntil||r.waitUntil.call(r,Promise.resolve())}}e.s(["config",0,m,"default",0,c,"handler",0,v],446146)}];
1
+ module.exports=[270406,(e,t,a)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},224361,(e,t,a)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},446146,e=>{"use strict";var t=e.i(926747),a=e.i(190406),r=e.i(244898),s=e.i(262950),i=e.i(233405);let n=(0,e.i(224361).promisify)(i.execFile),l=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let a={installed:!1,running:!1,version:null,hostname:null,dnsName:null,tailscaleIp:null,serveEntries:[],serverPort:parseInt(process.env.PORT||String(8022),10)};try{let{stdout:e}=await n("tailscale",["version"],{timeout:5e3}),t=e.trim().match(/^(\d+\.\d+[\d.]*)/);a.installed=!0,a.version=t?.[1]??null}catch{return t.status(200).json(a)}try{let{stdout:e}=await n("tailscale",["status","--json"],{timeout:5e3}),t=JSON.parse(e);a.running="Running"===t.BackendState,a.hostname=t.Self?.HostName??null,a.dnsName=(t.Self?.DNSName??"").replace(/\.$/,"")||null,a.tailscaleIp=t.Self?.TailscaleIPs?.[0]??null}catch{return t.status(200).json(a)}try{let{stdout:e}=await n("tailscale",["serve","status","--json"],{timeout:5e3}),t=JSON.parse(e).Web;if(t)for(let[e,r]of Object.entries(t)){let t=e.match(/:(\d+)$/),s=t?.[1]??"443",i=r.Handlers?.["/"]?.Proxy??"";i&&a.serveEntries.push({httpsPort:s,proxy:i})}}catch{}return t.status(200).json(a)};e.s(["default",0,l],224439);var o=e.i(224439),u=e.i(7031),d=e.i(181927),p=e.i(846432);let c=(0,s.hoist)(o,"default"),m=(0,s.hoist)(o,"config"),h=new r.PagesAPIRouteModule({definition:{kind:a.RouteKind.PAGES_API,page:"/api/tailscale/status",pathname:"/api/tailscale/status",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function v(e,a,r){r.requestMeta&&(0,p.setRequestMeta)(e,r.requestMeta),h.isDev&&(0,p.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/tailscale/status";s=s.replace(/\/index$/,"")||"/";let i=await h.prepare(e,a,{srcPage:s});if(!i){a.statusCode=400,a.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve());return}let{query:n,params:l,prerenderManifest:o,routerServerContext:c}=i;try{let t,r=e.method||"GET",i=(0,u.getTracer)(),p=i.getActiveScopeSpan(),m=!!(null==c?void 0:c.isWrappedByNextServer),v=h.instrumentationOnRequestError.bind(h),f=async u=>h.render(e,a,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:h.isDev,page:"/api/tailscale/status",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>v(e,...t)}).finally(()=>{if(!u)return;u.setAttributes({"http.status_code":a.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=e.get("next.route");if(n){let e=`${r} ${n}`;u.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),u.updateName(e),t&&t!==u&&(t.setAttribute("http.route",n),t.updateName(e))}else u.updateName(`${r} ${s}`)});m&&p?await f(p):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(d.BaseServerSpan.handleRequest,{spanName:`${r} ${s}`,kind:u.SpanKind.SERVER,attributes:{"http.method":r,"http.target":e.url}},f),void 0,!m))}catch(e){if(h.isDev)throw e;(0,t.sendError)(a,500,"Internal Server Error")}finally{null==r.waitUntil||r.waitUntil.call(r,Promise.resolve())}}e.s(["config",0,m,"default",0,c,"handler",0,v],446146)}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__0p03t8-._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[270406,(e,t,a)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},814747,(e,t,a)=>{t.exports=e.x("path",()=>require("path"))},446786,(e,t,a)=>{t.exports=e.x("os",()=>require("os"))},924868,(e,t,a)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,a)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},666680,(e,t,a)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},224361,(e,t,a)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},25146,e=>{"use strict";var t=e.i(130146),a=e.i(814747),r=e.i(446786);let i=a.default.join(r.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let a of e.split(",")){let[e,r]=a.split("=").map(e=>e.trim());e&&r&&(t[e]=r)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[s,...Object.values(n)].reduce((e,t)=>o.indexOf(t)<o.indexOf(e)?t:e,"fatal");l.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:a.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let c=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=c.child({module:e});return t.level=n[e]??s,t}])},44014,e=>{"use strict";let t,a;var r=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),r.webcrypto.getRandomValues(t),a=0):a+i>t.length&&(r.webcrypto.getRandomValues(t),a=0),a+=i;let s="";for(let r=a-e;r<a;r++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[r]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),a=e.i(924868),r=e.i(224361),i=e.i(814747),s=e.i(44014),n=e.i(25146);process.platform;let o="linux"===process.platform;e.s(["isLinux",0,o],544538);let l=(0,n.createLogger)("terminal"),c=(0,r.promisify)(t.execFile),u="purple",p=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),d=new Set(["AUTH_PASSWORD","NEXTAUTH_SECRET"]),m=()=>Object.fromEntries(Object.entries(process.env).filter(([e])=>!e.startsWith("npm_")&&!e.startsWith("NODE_")&&!d.has(e))),w=async()=>{try{let{stdout:e}=await c("tmux",["-L",u,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},y=async(e,t,a,r)=>{let i=process.env.SHELL||"/bin/zsh";await c("tmux",["-u","-L",u,"-f",p,"new-session","-d","-s",e,"-x",String(t),"-y",String(a)],{timeout:5e3,env:{...m(),SHELL:i,TERM:"xterm-256color",COLORTERM:"truecolor"},cwd:r||process.env.HOME||"/"}),await b(),l.debug(`tmux session created: ${e} (cols: ${t}, rows: ${a})`)},f=e=>new Promise(t=>setTimeout(t,e)),h=async e=>{if(!await g(e))return;l.debug(`killSession start: ${e}`);let t=await S(e);if(t)try{l.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",u,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void l.debug(`killSession done (SIGTERM): ${e}`);await f(200)}if(l.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{l.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",u,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void l.debug(`killSession done (SIGKILL): ${e}`);await f(200)}l.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",u,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},k=async()=>{},x=async()=>{await k();let e=await w();e.length>0&&e.forEach(e=>{l.debug(`existing tmux session found: ${e}`)})},L=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},S=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),a=parseInt(t.trim(),10);return Number.isNaN(a)?null:a}catch{return null}},b=async()=>{try{await c("tmux",["-L",u,"source-file",p],{timeout:5e3})}catch{}},v=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},_=async()=>{try{let{stdout:e}=await c("tmux",["-L",u,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let a of e.trim().split("\n")){if(!a)continue;let[e,r,i,s,n]=a.split(" ");if(e&&r){let a=parseInt(s,10),o=parseInt(n,10);t.set(e,{command:r,path:i||"",pid:Number.isNaN(a)?0:a,windowActivity:Number.isNaN(o)?0:o})}}return t}catch{return new Map}},I=new Set(["bash","zsh","fish","sh","dash"]),W=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await c("tmux",["-L",u,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},E=async(e,t)=>{await $(e),await c("tmux",["-L",u,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},N=async(e,t)=>{await $(e),await c("tmux",["-L",u,"send-keys","-t",e,t],{timeout:5e3})},C=async(e,t)=>{await $(e),await c("tmux",["-L",u,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",u,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",u,"send-keys","-t",e,"Enter"],{timeout:5e3})},P=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[a,r,i,s,n,o]=t.trim().split(" ");return{cwd:a||null,command:r||null,pid:i&&parseInt(i,10)||null,width:s&&parseInt(s,10)||null,height:n&&parseInt(n,10)||null,sessionCreated:o&&parseInt(o,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},j=new Set(["node","python","python3","ruby","perl","deno","bun"]),F=async()=>{try{await c("tmux",["-L",u,"kill-server"],{timeout:5e3}),l.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},T=async(e,t)=>{try{let{stdout:a}=await c("tmux",["-L",u,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return a}catch{return null}},D=async e=>{if(o){let t=[];return await Promise.all(e.map(async e=>{try{for(let r of(await a.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(r,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},A=async e=>{let t=[],a=[e];for(;a.length>0;){let e=await D(a);if(0===e.length)break;t.push(...e),a=e}return t},q=async e=>{try{let t=new Set(e),{stdout:a}=await c("ss",["-tlnp"],{timeout:5e3}),r=new Set;for(let e of a.split("\n")){let a=e.match(/pid=(\d+)/g);if(!a||!a.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&r.add(parseInt(i[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},R=async e=>{let t=await A(e);if(0===t.length)return[];if(o)return q(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),a=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&a.add(parseInt(e[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},M=async e=>{let t=await S(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),a=e.trim();if(!a)return null;let{stdout:r}=await c("ps",["-o","args=","-p",a],{timeout:5e3}),s=r.trim();if(!s)return null;let n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),j.has(n[0])&&n.length>1){let e=i.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,I,"applyConfig",0,b,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,T,"createSession",0,y,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,_,"getLastCommand",0,M,"getListeningPorts",0,R,"getPaneCurrentCommand",0,v,"getPaneDetailInfo",0,P,"getPaneTitle",0,W,"getSessionCwd",0,L,"getSessionPanePid",0,S,"hasSession",0,g,"killServer",0,F,"killSession",0,h,"listSessions",0,w,"sanitizedEnv",0,m,"scanSessions",0,x,"sendBracketedPaste",0,C,"sendKeys",0,E,"sendRawKeys",0,N,"workspaceSessionName",0,(e,t,a)=>`pt-${e}-${t}-${a}`],459015)},688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),n=e.i(25146),o=e.i(666126),l=e.i(825265),c=e.i(804767);let u=(0,n.createLogger)("workspace"),p="Workspace ",d=a.default.join(r.default.homedir(),".purplemux"),m=a.default.join(d,"workspaces.json"),w=a.default.join(d,"layout.json"),y=a.default.join(d,"tabs.json"),f=globalThis;f.__purplemuxWorkspaceLock||(f.__purplemuxWorkspaceLock=Promise.resolve());let h=async e=>{let t,a=new Promise(e=>{t=e}),r=f.__purplemuxWorkspaceLock;f.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},g=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),k=async()=>{let e;try{e=await t.default.readFile(m,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{u.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(m,m.replace(/\.json$/,".json.bak"))}catch{}return null}},x=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,n=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(f.__purplemuxWorkspacesContentCache===n)return;e.updatedAt=new Date().toISOString();let l=m+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,m)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}f.__purplemuxWorkspacesContentCache=n,(0,o.broadcastSync)({type:"workspace"})},L=async()=>{let e=await (0,l.readLayoutFile)(w);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await x(i),u.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},S=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},n=w+".tmp";try{await t.default.writeFile(n,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(n,w)}catch(e){throw await t.default.unlink(n).catch(()=>{}),e}return u.info("tabs.json → layout.json migration complete"),await L()}catch{return null}},b=async()=>{await t.default.mkdir(a.default.join(d,"workspaces"),{recursive:!0});let e=await k();if(!e&&(await t.default.access(w).then(()=>!0).catch(()=>!1)?e=await L():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await S())),!e){let t=g();await x(t),e=t,u.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){u.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,n=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,n,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){u.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},v=async()=>{let e=await k();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},_=async()=>{let e=await k();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},I=async e=>{let t=await k();return t?.workspaces.find(t=>t.id===e)},W=async(e,a,r)=>h(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let n=await k()??g(),o=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(p)){let e=parseInt(a.name.slice(p.length),10);e>t&&(t=e)}return`${p}${t+1}`})(n.workspaces),d=n.workspaces.length,m=await (0,l.createDefaultLayout)(o,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(o),{recursive:!0}),await (0,l.writeLayoutFile)(m,(0,l.resolveLayoutFile)(o));let w={id:o,name:c,directories:[e],order:d};return n.workspaces.push(w),await x(n),u.info(`Created: ${o} (${c}, ${e})`),w}),$=async e=>h(async()=>{let a=await k()??g(),r=a.workspaces.findIndex(t=>t.id===e);if(-1===r)return!1;let i=a.workspaces[r],n=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(n)for(let e of(0,c.collectAllTabs)(n.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await t.default.rm((0,l.resolveLayoutDir)(e),{recursive:!0,force:!0})}catch{}return(0,l.clearLayoutCache)(e),a.workspaces.splice(r,1),a.workspaces.forEach((e,t)=>{e.order=t}),await x(a),u.info(`Deleted: ${e} (${i.name})`),!0}),E=async(e,t)=>h(async()=>{let a=await k();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await x(a),u.info(`Renamed: ${e} → "${t}"`),{...r}):null}),N=async e=>h(async()=>{let t=await k()??g();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await x(t)}),C=async(e,t)=>h(async()=>{let a=await k();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await x(a))}),P=async e=>h(async()=>{let t=await k()??g(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await x(t),!0)}),j=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,W,"deleteWorkspace",0,$,"getActiveWorkspaceId",0,_,"getWorkspaceById",0,I,"getWorkspaces",0,v,"initWorkspaceStore",0,b,"renameWorkspace",0,E,"reorderWorkspaces",0,P,"updateActive",0,N,"updateWorkspaceDirectories",0,C,"validateDirectory",0,j])}];
1
+ module.exports=[270406,(e,t,a)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},814747,(e,t,a)=>{t.exports=e.x("path",()=>require("path"))},446786,(e,t,a)=>{t.exports=e.x("os",()=>require("os"))},924868,(e,t,a)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,a)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},666680,(e,t,a)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},224361,(e,t,a)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},25146,e=>{"use strict";var t=e.i(130146),a=e.i(814747),r=e.i(446786);let i=a.default.join(r.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let a of e.split(",")){let[e,r]=a.split("=").map(e=>e.trim());e&&r&&(t[e]=r)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[s,...Object.values(n)].reduce((e,t)=>o.indexOf(t)<o.indexOf(e)?t:e,"fatal");l.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:a.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let c=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=c.child({module:e});return t.level=n[e]??s,t}])},44014,e=>{"use strict";let t,a;var r=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),r.webcrypto.getRandomValues(t),a=0):a+i>t.length&&(r.webcrypto.getRandomValues(t),a=0),a+=i;let s="";for(let r=a-e;r<a;r++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[r]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),a=e.i(924868),r=e.i(224361),i=e.i(814747),s=e.i(44014),n=e.i(25146);process.platform;let o="linux"===process.platform;e.s(["isLinux",0,o],544538);let l=(0,n.createLogger)("terminal"),c=(0,r.promisify)(t.execFile),u="purple",p=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),d=new Set(["AUTH_PASSWORD","NEXTAUTH_SECRET"]),m=()=>Object.fromEntries(Object.entries(process.env).filter(([e])=>!e.startsWith("npm_")&&!e.startsWith("NODE_")&&!d.has(e))),w=async()=>{try{let{stdout:e}=await c("tmux",["-L",u,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},y=async(e,t,a,r)=>{let i=process.env.SHELL||"/bin/zsh";await c("tmux",["-u","-L",u,"-f",p,"new-session","-d","-s",e,"-x",String(t),"-y",String(a)],{timeout:5e3,env:{...m(),SHELL:i,TERM:"xterm-256color",COLORTERM:"truecolor"},cwd:r||process.env.HOME||"/"}),await b(),l.debug(`tmux session created: ${e} (cols: ${t}, rows: ${a})`)},f=e=>new Promise(t=>setTimeout(t,e)),h=async e=>{if(!await g(e))return;l.debug(`killSession start: ${e}`);let t=await S(e);if(t)try{l.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",u,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void l.debug(`killSession done (SIGTERM): ${e}`);await f(200)}if(l.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{l.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",u,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void l.debug(`killSession done (SIGKILL): ${e}`);await f(200)}l.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",u,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},k=async()=>{},x=async()=>{await k();let e=await w();e.length>0&&e.forEach(e=>{l.debug(`existing tmux session found: ${e}`)})},L=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},S=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),a=parseInt(t.trim(),10);return Number.isNaN(a)?null:a}catch{return null}},b=async()=>{try{await c("tmux",["-L",u,"source-file",p],{timeout:5e3})}catch{}},_=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async()=>{try{let{stdout:e}=await c("tmux",["-L",u,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let a of e.trim().split("\n")){if(!a)continue;let[e,r,i,s,n]=a.split(" ");if(e&&r){let a=parseInt(s,10),o=parseInt(n,10);t.set(e,{command:r,path:i||"",pid:Number.isNaN(a)?0:a,windowActivity:Number.isNaN(o)?0:o})}}return t}catch{return new Map}},I=new Set(["bash","zsh","fish","sh","dash"]),W=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await c("tmux",["-L",u,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},E=async(e,t)=>{await $(e),await c("tmux",["-L",u,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},N=async(e,t)=>{await $(e),await c("tmux",["-L",u,"send-keys","-t",e,t],{timeout:5e3})},P=async(e,t)=>{await $(e),await c("tmux",["-L",u,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",u,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",u,"send-keys","-t",e,"Enter"],{timeout:5e3})},C=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[a,r,i,s,n,o]=t.trim().split(" ");return{cwd:a||null,command:r||null,pid:i&&parseInt(i,10)||null,width:s&&parseInt(s,10)||null,height:n&&parseInt(n,10)||null,sessionCreated:o&&parseInt(o,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},F=new Set(["node","python","python3","ruby","perl","deno","bun"]),j=async()=>{try{await c("tmux",["-L",u,"kill-server"],{timeout:5e3}),l.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await c("tmux",["-L",u,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},T=async(e,t)=>{try{let{stdout:a}=await c("tmux",["-L",u,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return a}catch{return null}},A=async e=>{if(o){let t=[];return await Promise.all(e.map(async e=>{try{for(let r of(await a.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(r,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},D=async e=>{let t=[],a=[e];for(;a.length>0;){let e=await A(a);if(0===e.length)break;t.push(...e),a=e}return t},q=async e=>{try{let t=new Set(e),{stdout:a}=await c("ss",["-tlnp"],{timeout:5e3}),r=new Set;for(let e of a.split("\n")){let a=e.match(/pid=(\d+)/g);if(!a||!a.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&r.add(parseInt(i[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},R=async e=>{let t=await D(e);if(0===t.length)return[];if(o)return q(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),a=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&a.add(parseInt(e[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},M=async e=>{let t=await S(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),a=e.trim();if(!a)return null;let{stdout:r}=await c("ps",["-o","args=","-p",a],{timeout:5e3}),s=r.trim();if(!s)return null;let n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),F.has(n[0])&&n.length>1){let e=i.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,I,"applyConfig",0,b,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,T,"createSession",0,y,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,v,"getLastCommand",0,M,"getListeningPorts",0,R,"getPaneCurrentCommand",0,_,"getPaneDetailInfo",0,C,"getPaneTitle",0,W,"getSessionCwd",0,L,"getSessionPanePid",0,S,"hasSession",0,g,"killServer",0,j,"killSession",0,h,"listSessions",0,w,"sanitizedEnv",0,m,"scanSessions",0,x,"sendBracketedPaste",0,P,"sendKeys",0,E,"sendRawKeys",0,N,"workspaceSessionName",0,(e,t,a)=>`pt-${e}-${t}-${a}`],459015)},688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),n=e.i(25146),o=e.i(666126),l=e.i(825265),c=e.i(804767);let u=(0,n.createLogger)("workspace"),p="Workspace ",d=a.default.join(r.default.homedir(),".purplemux"),m=a.default.join(d,"workspaces.json"),w=a.default.join(d,"layout.json"),y=a.default.join(d,"tabs.json"),f=globalThis;f.__purplemuxWorkspaceLock||(f.__purplemuxWorkspaceLock=Promise.resolve());let h=async e=>{let t,a=new Promise(e=>{t=e}),r=f.__purplemuxWorkspaceLock;f.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},g=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),k=async()=>{let e;try{e=await t.default.readFile(m,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{u.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(m,m.replace(/\.json$/,".json.bak"))}catch{}return null}},x=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,n=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(f.__purplemuxWorkspacesContentCache===n)return;e.updatedAt=new Date().toISOString();let l=m+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,m)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}f.__purplemuxWorkspacesContentCache=n,(0,o.broadcastSync)({type:"workspace"})},L=async()=>{let e=await (0,l.readLayoutFile)(w);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await x(i),u.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},S=async()=>{try{let e=await t.default.readFile(y,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},n=w+".tmp";try{await t.default.writeFile(n,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(n,w)}catch(e){throw await t.default.unlink(n).catch(()=>{}),e}return u.info("tabs.json → layout.json migration complete"),await L()}catch{return null}},b=async()=>{await t.default.mkdir(a.default.join(d,"workspaces"),{recursive:!0});let e=await k();if(!e&&(await t.default.access(w).then(()=>!0).catch(()=>!1)?e=await L():await t.default.access(y).then(()=>!0).catch(()=>!1)&&(e=await S())),!e){let t=g();await x(t),e=t,u.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){u.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,n=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,n,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){u.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},_=async()=>{let e=await k();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},v=async()=>{let e=await k();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},I=async e=>{let t=await k();return t?.workspaces.find(t=>t.id===e)},W=async(e,a,r)=>h(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let n=await k()??g(),o=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(p)){let e=parseInt(a.name.slice(p.length),10);e>t&&(t=e)}return`${p}${t+1}`})(n.workspaces),d=n.workspaces.length,m=await (0,l.createDefaultLayout)(o,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(o),{recursive:!0}),await (0,l.writeLayoutFile)(m,(0,l.resolveLayoutFile)(o));let w={id:o,name:c,directories:[e],order:d};return n.workspaces.push(w),await x(n),u.info(`Created: ${o} (${c}, ${e})`),w}),$=async e=>h(async()=>{let t=await k()??g(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(i)for(let e of(0,c.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,l.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),t.workspaces.forEach((e,t)=>{e.order=t}),await x(t),u.info(`Deleted: ${e} (${r.name})`),!0}),E=async(e,t)=>h(async()=>{let a=await k();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await x(a),u.info(`Renamed: ${e} → "${t}"`),{...r}):null}),N=async e=>h(async()=>{let t=await k()??g();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await x(t)}),P=async(e,t)=>h(async()=>{let a=await k();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await x(a))}),C=async e=>h(async()=>{let t=await k()??g(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await x(t),!0)}),F=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,W,"deleteWorkspace",0,$,"getActiveWorkspaceId",0,v,"getWorkspaceById",0,I,"getWorkspaces",0,_,"initWorkspaceStore",0,b,"renameWorkspace",0,E,"reorderWorkspaces",0,C,"updateActive",0,N,"updateWorkspaceDirectories",0,P,"validateDirectory",0,F])}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__0rfe_~k._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),o=e.i(459015),s=e.i(25146),n=e.i(666126),l=e.i(825265),c=e.i(804767);let u=(0,s.createLogger)("workspace"),d="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),w=a.default.join(p,"workspaces.json"),f=a.default.join(p,"layout.json"),h=a.default.join(p,"tabs.json"),y=globalThis;y.__purplemuxWorkspaceLock||(y.__purplemuxWorkspaceLock=Promise.resolve());let k=async e=>{let t,a=new Promise(e=>{t=e}),r=y.__purplemuxWorkspaceLock;y.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},_=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),m=async()=>{let e;try{e=await t.default.readFile(w,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{u.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(w,w.replace(/\.json$/,".json.bak"))}catch{}return null}},$=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:o}=e,s=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:o});if(y.__purplemuxWorkspacesContentCache===s)return;e.updatedAt=new Date().toISOString();let l=w+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,w)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}y.__purplemuxWorkspacesContentCache=s,(0,n.broadcastSync)({type:"workspace"})},v=async()=>{let e=await (0,l.readLayoutFile)(f);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await $(i),u.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},S=async()=>{try{let e=await t.default.readFile(h,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,o={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},s=f+".tmp";try{await t.default.writeFile(s,JSON.stringify(o,null,2),{mode:384}),await t.default.rename(s,f)}catch(e){throw await t.default.unlink(s).catch(()=>{}),e}return u.info("tabs.json → layout.json migration complete"),await v()}catch{return null}},g=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await m();if(!e&&(await t.default.access(f).then(()=>!0).catch(()=>!1)?e=await v():await t.default.access(h).then(()=>!0).catch(()=>!1)&&(e=await S())),!e){let t=_();await $(t),e=t,u.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,o.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){u.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),o=`pt-${t.id}-`,s=r.filter(e=>i.includes(e)||e.startsWith(o));try{await (0,l.crossCheckLayout)(a,s,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){u.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},b=async()=>{let e=await m();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},x=async()=>{let e=await m();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await m();return t?.workspaces.find(t=>t.id===e)},j=async(e,a,r)=>k(async()=>{let o;try{o=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!o.isDirectory())throw Error("Please enter a directory path, not a file");let s=await m()??_(),n=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(d)){let e=parseInt(a.name.slice(d.length),10);e>t&&(t=e)}return`${d}${t+1}`})(s.workspaces),p=s.workspaces.length,w=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(w,(0,l.resolveLayoutFile)(n));let f={id:n,name:c,directories:[e],order:p};return s.workspaces.push(f),await $(s),u.info(`Created: ${n} (${c}, ${e})`),f}),C=async e=>k(async()=>{let a=await m()??_(),r=a.workspaces.findIndex(t=>t.id===e);if(-1===r)return!1;let i=a.workspaces[r],s=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(s)for(let e of(0,c.collectAllTabs)(s.root))try{await (0,o.killSession)(e.sessionName)}catch{}try{await t.default.rm((0,l.resolveLayoutDir)(e),{recursive:!0,force:!0})}catch{}return(0,l.clearLayoutCache)(e),a.workspaces.splice(r,1),a.workspaces.forEach((e,t)=>{e.order=t}),await $(a),u.info(`Deleted: ${e} (${i.name})`),!0}),D=async(e,t)=>k(async()=>{let a=await m();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await $(a),u.info(`Renamed: ${e} → "${t}"`),{...r}):null}),I=async e=>k(async()=>{let t=await m()??_();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await $(t)}),W=async(e,t)=>k(async()=>{let a=await m();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await $(a))}),L=async e=>k(async()=>{let t=await m()??_(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await $(t),!0)}),E=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,j,"deleteWorkspace",0,C,"getActiveWorkspaceId",0,x,"getWorkspaceById",0,T,"getWorkspaces",0,b,"initWorkspaceStore",0,g,"renameWorkspace",0,D,"reorderWorkspaces",0,L,"updateActive",0,I,"updateWorkspaceDirectories",0,W,"validateDirectory",0,E])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),o=t.default.join(r,"rate-limits.json"),s=`#!/bin/sh
1
+ module.exports=[688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),o=e.i(459015),s=e.i(25146),n=e.i(666126),l=e.i(825265),c=e.i(804767);let d=(0,s.createLogger)("workspace"),u="Workspace ",p=a.default.join(r.default.homedir(),".purplemux"),w=a.default.join(p,"workspaces.json"),f=a.default.join(p,"layout.json"),h=a.default.join(p,"tabs.json"),y=globalThis;y.__purplemuxWorkspaceLock||(y.__purplemuxWorkspaceLock=Promise.resolve());let k=async e=>{let t,a=new Promise(e=>{t=e}),r=y.__purplemuxWorkspaceLock;y.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},_=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),m=async()=>{let e;try{e=await t.default.readFile(w,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(w,w.replace(/\.json$/,".json.bak"))}catch{}return null}},$=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:o}=e,s=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:o});if(y.__purplemuxWorkspacesContentCache===s)return;e.updatedAt=new Date().toISOString();let l=w+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,w)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}y.__purplemuxWorkspacesContentCache=s,(0,n.broadcastSync)({type:"workspace"})},v=async()=>{let e=await (0,l.readLayoutFile)(f);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await $(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},S=async()=>{try{let e=await t.default.readFile(h,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,o={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},s=f+".tmp";try{await t.default.writeFile(s,JSON.stringify(o,null,2),{mode:384}),await t.default.rename(s,f)}catch(e){throw await t.default.unlink(s).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await v()}catch{return null}},g=async()=>{await t.default.mkdir(a.default.join(p,"workspaces"),{recursive:!0});let e=await m();if(!e&&(await t.default.access(f).then(()=>!0).catch(()=>!1)?e=await v():await t.default.access(h).then(()=>!0).catch(()=>!1)&&(e=await S())),!e){let t=_();await $(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,o.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,c.collectAllTabs)(a.root).map(e=>e.sessionName),o=`pt-${t.id}-`,s=r.filter(e=>i.includes(e)||e.startsWith(o));try{await (0,l.crossCheckLayout)(a,s,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},b=async()=>{let e=await m();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},x=async()=>{let e=await m();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},T=async e=>{let t=await m();return t?.workspaces.find(t=>t.id===e)},j=async(e,a,r)=>k(async()=>{let o;try{o=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!o.isDirectory())throw Error("Please enter a directory path, not a file");let s=await m()??_(),n=`ws-${(0,i.nanoid)(6)}`,c=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(u)){let e=parseInt(a.name.slice(u.length),10);e>t&&(t=e)}return`${u}${t+1}`})(s.workspaces),p=s.workspaces.length,w=await (0,l.createDefaultLayout)(n,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(n),{recursive:!0}),await (0,l.writeLayoutFile)(w,(0,l.resolveLayoutFile)(n));let f={id:n,name:c,directories:[e],order:p};return s.workspaces.push(f),await $(s),d.info(`Created: ${n} (${c}, ${e})`),f}),C=async e=>k(async()=>{let t=await m()??_(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(i)for(let e of(0,c.collectAllTabs)(i.root))try{await (0,o.killSession)(e.sessionName)}catch{}try{await (0,l.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),t.workspaces.forEach((e,t)=>{e.order=t}),await $(t),d.info(`Deleted: ${e} (${r.name})`),!0}),I=async(e,t)=>k(async()=>{let a=await m();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await $(a),d.info(`Renamed: ${e} → "${t}"`),{...r}):null}),W=async e=>k(async()=>{let t=await m()??_();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await $(t)}),D=async(e,t)=>k(async()=>{let a=await m();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await $(a))}),E=async e=>k(async()=>{let t=await m()??_(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await $(t),!0)}),L=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,j,"deleteWorkspace",0,C,"getActiveWorkspaceId",0,x,"getWorkspaceById",0,T,"getWorkspaces",0,b,"initWorkspaceStore",0,g,"renameWorkspace",0,I,"reorderWorkspaces",0,E,"updateActive",0,W,"updateWorkspaceDirectories",0,D,"validateDirectory",0,L])},796902,e=>{"use strict";var t=e.i(814747),a=e.i(446786);let r=t.default.join(a.default.homedir(),".purplemux"),i=t.default.join(r,"statusline.sh"),o=t.default.join(r,"rate-limits.json"),s=`#!/bin/sh
2
2
  input=$(cat)
3
3
  OUTPUT="$HOME/.purplemux/rate-limits.json"
4
4
  HAS_LIMITS=$(echo "$input" | jq -r 'if .rate_limits.five_hour or .rate_limits.seven_day then "yes" else "no" end' 2>/dev/null)