tower-studio 0.1.8 → 0.1.10

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 (188) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/diagnostics/route-bundle-stats.json +47 -47
  7. package/.next/fallback-build-manifest.json +3 -3
  8. package/.next/prerender-manifest.json +3 -3
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
  17. package/.next/server/app/_not-found/page/server-reference-manifest.json +19 -19
  18. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/_not-found.html +1 -1
  21. package/.next/server/app/_not-found.rsc +14 -14
  22. package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  23. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  24. package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  25. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  26. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  27. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  29. package/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  30. package/.next/server/app/api/git/route.js.nft.json +1 -1
  31. package/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  32. package/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  33. package/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  34. package/.next/server/app/api/internal/assistant/images/route.js.nft.json +1 -1
  35. package/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  36. package/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
  37. package/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  38. package/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  39. package/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  40. package/.next/server/app/index.html +1 -1
  41. package/.next/server/app/index.rsc +14 -14
  42. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/index.segments/_full.segment.rsc +14 -14
  44. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  45. package/.next/server/app/index.segments/_index.segment.rsc +9 -9
  46. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  47. package/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  48. package/.next/server/app/missions/page/server-reference-manifest.json +49 -49
  49. package/.next/server/app/missions/page.js.nft.json +1 -1
  50. package/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  52. package/.next/server/app/onboarding/page/server-reference-manifest.json +19 -19
  53. package/.next/server/app/onboarding/page.js.nft.json +1 -1
  54. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/onboarding.html +1 -1
  56. package/.next/server/app/onboarding.rsc +16 -16
  57. package/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
  58. package/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  59. package/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
  60. package/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
  61. package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  62. package/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  63. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  64. package/.next/server/app/page/server-reference-manifest.json +19 -19
  65. package/.next/server/app/page.js.nft.json +1 -1
  66. package/.next/server/app/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  68. package/.next/server/app/settings/page/server-reference-manifest.json +28 -28
  69. package/.next/server/app/settings/page.js.nft.json +1 -1
  70. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/settings.html +1 -1
  72. package/.next/server/app/settings.rsc +16 -16
  73. package/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  74. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  75. package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  76. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  77. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  78. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  79. package/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  80. package/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +73 -73
  81. package/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  82. package/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  84. package/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +62 -62
  85. package/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  86. package/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  87. package/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
  88. package/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +51 -51
  89. package/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  90. package/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  91. package/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  92. package/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +47 -47
  93. package/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  94. package/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  96. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +19 -19
  97. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  98. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  99. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +1 -1
  100. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +48 -48
  101. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  102. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  104. package/.next/server/app/workspaces/page/server-reference-manifest.json +39 -39
  105. package/.next/server/app/workspaces/page.js.nft.json +1 -1
  106. package/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  107. package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_13~vb_i.js +1 -1
  108. package/.next/server/chunks/[root-of-the-server]__043lk8~._.js +1 -1
  109. package/.next/server/chunks/ssr/0~.g_src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_0bbseig._.js +1 -1
  110. package/.next/server/chunks/ssr/[root-of-the-server]__0.8y0n9._.js +1 -1
  111. package/.next/server/chunks/ssr/[root-of-the-server]__01ws4-7._.js +1 -1
  112. package/.next/server/chunks/ssr/[root-of-the-server]__02ipahf._.js +1 -1
  113. package/.next/server/chunks/ssr/{[root-of-the-server]__0~jc3l5._.js → [root-of-the-server]__08_0ex9._.js} +2 -2
  114. package/.next/server/chunks/ssr/[root-of-the-server]__0bk3s4l._.js +1 -1
  115. package/.next/server/chunks/ssr/{[root-of-the-server]__0hvz_0c._.js → [root-of-the-server]__0bo1n69._.js} +2 -2
  116. package/.next/server/chunks/ssr/[root-of-the-server]__0ld6_w6._.js +3 -0
  117. package/.next/server/chunks/ssr/[root-of-the-server]__0l~dc3x._.js +1 -1
  118. package/.next/server/chunks/ssr/[root-of-the-server]__0rs7pkn._.js +1 -1
  119. package/.next/server/chunks/ssr/[root-of-the-server]__0sysz2q._.js +3 -3
  120. package/.next/server/chunks/ssr/[root-of-the-server]__0y-lkvf._.js +1 -1
  121. package/.next/server/chunks/ssr/[root-of-the-server]__12f810l._.js +1 -1
  122. package/.next/server/chunks/ssr/{tower_02he7d6._.js → tower_0donrdk._.js} +2 -2
  123. package/.next/server/chunks/ssr/{tower_0gzwyem._.js → tower_0i9k4a6._.js} +2 -2
  124. package/.next/server/chunks/ssr/tower_0kl_bfy._.js +1 -1
  125. package/.next/server/chunks/ssr/tower_0m_uudm._.js +3 -0
  126. package/.next/server/chunks/ssr/{tower_0vo6u9i._.js → tower_0mn8ig7._.js} +2 -2
  127. package/.next/server/chunks/ssr/tower_0mz4ut.._.js +1 -1
  128. package/.next/server/chunks/ssr/tower_0pcqezm._.js +1 -1
  129. package/.next/server/chunks/ssr/{tower_00.hg6u._.js → tower_0pmey24._.js} +2 -2
  130. package/.next/server/chunks/ssr/{tower_09~lpto._.js → tower_0ut7r._._.js} +2 -2
  131. package/.next/server/chunks/ssr/tower_0wvk~r.._.js +1 -1
  132. package/.next/server/chunks/ssr/tower_10p15te._.js +1 -1
  133. package/.next/server/chunks/ssr/tower_117pzh8._.js +1 -1
  134. package/.next/server/chunks/ssr/tower_11q5_.m._.js +1 -1
  135. package/.next/server/chunks/ssr/tower_138qlx5._.js +1 -1
  136. package/.next/server/chunks/ssr/tower_src_077qk8s._.js +3 -0
  137. package/.next/server/chunks/ssr/tower_src_actions_agent-actions_ts_0j.e1tn._.js +1 -1
  138. package/.next/server/chunks/ssr/tower_src_actions_file-actions_ts_0424lna._.js +1 -1
  139. package/.next/server/chunks/ssr/tower_src_app_missions_missions-client_tsx_0a9vjyr._.js +1 -1
  140. package/.next/server/chunks/ssr/tower_src_app_onboarding_page_tsx_0_3krz1._.js +1 -1
  141. package/.next/server/chunks/ssr/tower_src_app_settings_page_tsx_0vo5e-o._.js +1 -1
  142. package/.next/server/chunks/ssr/tower_src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0zfgzhi._.js +1 -1
  143. package/.next/server/chunks/ssr/tower_src_app_workspaces_[workspaceId]_board-page-client_tsx_0kjp1u0._.js +1 -1
  144. package/.next/server/chunks/tower_0a-x6m.._.js +1 -1
  145. package/.next/server/chunks/tower_src_0..vg-t._.js +1 -1
  146. package/.next/server/instrumentation.js.nft.json +1 -1
  147. package/.next/server/middleware-build-manifest.js +3 -3
  148. package/.next/server/pages/404.html +1 -1
  149. package/.next/server/pages/500.html +1 -1
  150. package/.next/server/server-reference-manifest.js +1 -1
  151. package/.next/server/server-reference-manifest.json +182 -182
  152. package/.next/static/chunks/{0kubr70r_r2f2.js → 0-z_mj0p3..hy.js} +1 -1
  153. package/.next/static/chunks/{0drgc-oztq6o-.css → 04pjsuj.mivbh.css} +1 -1
  154. package/.next/static/chunks/{0_.pyr2jhdqa2.js → 053~3fys7om-7.js} +2 -2
  155. package/.next/static/chunks/0887ab.hh21q9.js +1 -0
  156. package/.next/static/chunks/0c7oqfzd78s3-.js +1 -0
  157. package/.next/static/chunks/{0z-ecklemrfx-.js → 0g4scpy5b3a_n.js} +1 -1
  158. package/.next/static/chunks/{0kc-95qs2~eid.js → 0ho7y42kl8m7v.js} +1 -1
  159. package/.next/static/chunks/0iudqcn98ftki.js +1 -0
  160. package/.next/static/chunks/{0-64z7pmj57~d.js → 0j~wmjbqds1dv.js} +1 -1
  161. package/.next/static/chunks/0mvu29h4.06~b.js +1 -0
  162. package/.next/static/chunks/{0a2blrvqw8t5y.js → 0rej~f94o9a~6.js} +1 -1
  163. package/.next/static/chunks/{0z61ts2ro9_k3.js → 0xi0wi2z6otp9.js} +1 -1
  164. package/.next/static/chunks/{05j6t69jmpqju.js → 16qoc.u84jlcd.js} +1 -1
  165. package/.next/static/chunks/17tob96chk6i1.js +1 -0
  166. package/.next/static/chunks/17zywpt-0o8gl.js +1 -0
  167. package/.next/static/chunks/{00xbbu.nlx92z.js → 185n7s7fwb2j_.js} +1 -1
  168. package/.next/trace +2 -2
  169. package/.next/trace-build +1 -1
  170. package/bin/tower.mjs +36 -8
  171. package/package.json +10 -4
  172. package/scripts/generate-prisma-client.js +43 -0
  173. package/scripts/link-prisma.js +144 -0
  174. package/scripts/post-tool-hook.js +188 -0
  175. package/scripts/session-start-hook.js +79 -0
  176. package/scripts/stop-hook.js +78 -0
  177. package/.next/server/chunks/ssr/[root-of-the-server]__0mab0km._.js +0 -3
  178. package/.next/server/chunks/ssr/tower_12sld1c._.js +0 -3
  179. package/.next/server/chunks/ssr/tower_src_08t.wy-._.js +0 -3
  180. package/.next/static/chunks/049.9ha2n6os5.js +0 -1
  181. package/.next/static/chunks/07a_xadb-3w1a.js +0 -1
  182. package/.next/static/chunks/0_c8duf92i~xg.js +0 -1
  183. package/.next/static/chunks/0kojsk~4uroqj.js +0 -1
  184. package/.next/static/chunks/0kt2vohpgb7h6.js +0 -1
  185. package/.next/static/chunks/0ttrpz.l-v-yv.js +0 -1
  186. /package/.next/static/{6AW1vTU7iJEkEhqIH0txT → KX5Si-44bPnjdFNmiHDRY}/_buildManifest.js +0 -0
  187. /package/.next/static/{6AW1vTU7iJEkEhqIH0txT → KX5Si-44bPnjdFNmiHDRY}/_clientMiddlewareManifest.js +0 -0
  188. /package/.next/static/{6AW1vTU7iJEkEhqIH0txT → KX5Si-44bPnjdFNmiHDRY}/_ssgManifest.js +0 -0
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tower PostToolUse Hook
4
+ *
5
+ * Claude Code PostToolUse hook that auto-captures file outputs as task assets.
6
+ * When Claude writes/edits a file matching the configured extension whitelist,
7
+ * this hook uploads it to Tower's internal API for asset tracking.
8
+ *
9
+ * Environment:
10
+ * TOWER_TASK_ID - Required. The task ID to associate the asset with.
11
+ * TOWER_API_URL - Required. Base URL of the Tower server (e.g. http://localhost:3000).
12
+ *
13
+ * Stdin: JSON object from Claude Code with { tool_name, tool_input, session_id, cwd, ... }
14
+ * Exit: Always 0 (hook must never block Claude Code).
15
+ */
16
+
17
+ "use strict";
18
+
19
+ const fs = require("fs");
20
+ const path = require("path");
21
+ const http = require("http");
22
+ const https = require("https");
23
+
24
+ const DEFAULT_TYPES = ["png", "jpg", "jpeg", "gif", "webp", "svg", "pdf", "md", "txt", "json"];
25
+ const FILE_WRITE_TOOLS = new Set(["Write", "Edit", "MultiEdit"]);
26
+
27
+ function main() {
28
+ const taskId = process.env.TOWER_TASK_ID;
29
+ if (!taskId) {
30
+ process.exit(0);
31
+ }
32
+
33
+ const apiUrl = process.env.TOWER_API_URL;
34
+ if (!apiUrl) {
35
+ process.exit(0);
36
+ }
37
+
38
+ // SECURITY: Only talk to localhost — refuse remote servers
39
+ try {
40
+ const parsed = new URL(apiUrl);
41
+ if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
42
+ process.exit(0);
43
+ }
44
+ } catch {
45
+ process.exit(0);
46
+ }
47
+
48
+ // Read stdin with timeout
49
+ let input = "";
50
+ const timeout = setTimeout(() => {
51
+ // Stdin timeout — exit silently
52
+ process.exit(0);
53
+ }, 10000);
54
+
55
+ process.stdin.setEncoding("utf8");
56
+ process.stdin.on("data", (chunk) => {
57
+ input += chunk;
58
+ });
59
+
60
+ process.stdin.on("end", () => {
61
+ clearTimeout(timeout);
62
+ processInput(input, taskId, apiUrl);
63
+ });
64
+
65
+ process.stdin.on("error", () => {
66
+ clearTimeout(timeout);
67
+ process.exit(0);
68
+ });
69
+
70
+ // If stdin is not a pipe (e.g., running interactively), exit
71
+ if (process.stdin.isTTY) {
72
+ clearTimeout(timeout);
73
+ process.exit(0);
74
+ }
75
+ }
76
+
77
+ function processInput(input, taskId, apiUrl) {
78
+ let data;
79
+ try {
80
+ data = JSON.parse(input);
81
+ } catch {
82
+ process.exit(0);
83
+ }
84
+
85
+ const toolName = data.tool_name;
86
+ if (!toolName || !FILE_WRITE_TOOLS.has(toolName)) {
87
+ process.exit(0);
88
+ }
89
+
90
+ const filePath = data.tool_input && data.tool_input.file_path;
91
+ if (!filePath) {
92
+ process.exit(0);
93
+ }
94
+
95
+ // Resolve to absolute path
96
+ const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(data.cwd || process.cwd(), filePath);
97
+
98
+ // Check extension against whitelist
99
+ const ext = path.extname(absolutePath).slice(1).toLowerCase();
100
+ if (!ext) {
101
+ process.exit(0);
102
+ }
103
+
104
+ // Try to fetch config from Tower, fall back to defaults
105
+ fetchAllowedTypes(apiUrl, (types) => {
106
+ if (!types.includes(ext)) {
107
+ process.exit(0);
108
+ }
109
+
110
+ // Check file exists
111
+ try {
112
+ fs.statSync(absolutePath);
113
+ } catch {
114
+ process.exit(0);
115
+ }
116
+
117
+ // Upload to Tower
118
+ uploadFile(apiUrl, taskId, absolutePath);
119
+ });
120
+ }
121
+
122
+ function fetchAllowedTypes(apiUrl, callback) {
123
+ const url = apiUrl + "/api/internal/hooks/upload";
124
+ const mod = url.startsWith("https") ? https : http;
125
+
126
+ const req = mod.get(url, (res) => {
127
+ let body = "";
128
+ res.on("data", (chunk) => { body += chunk; });
129
+ res.on("end", () => {
130
+ try {
131
+ const json = JSON.parse(body);
132
+ if (Array.isArray(json.types)) {
133
+ callback(json.types);
134
+ return;
135
+ }
136
+ } catch {
137
+ // Fall through to defaults
138
+ }
139
+ callback(DEFAULT_TYPES);
140
+ });
141
+ });
142
+
143
+ req.on("error", () => {
144
+ callback(DEFAULT_TYPES);
145
+ });
146
+
147
+ req.setTimeout(3000, () => {
148
+ req.destroy();
149
+ callback(DEFAULT_TYPES);
150
+ });
151
+ }
152
+
153
+ function uploadFile(apiUrl, taskId, filePath) {
154
+ const url = new URL("/api/internal/hooks/upload", apiUrl);
155
+ const payload = JSON.stringify({ taskId, filePath });
156
+ const mod = url.protocol === "https:" ? https : http;
157
+
158
+ const options = {
159
+ hostname: url.hostname,
160
+ port: url.port,
161
+ path: url.pathname,
162
+ method: "POST",
163
+ headers: {
164
+ "Content-Type": "application/json",
165
+ "Content-Length": Buffer.byteLength(payload),
166
+ },
167
+ timeout: 5000,
168
+ };
169
+
170
+ const req = mod.request(options, () => {
171
+ // Response doesn't matter — fire and forget
172
+ process.exit(0);
173
+ });
174
+
175
+ req.on("error", () => {
176
+ process.exit(0);
177
+ });
178
+
179
+ req.on("timeout", () => {
180
+ req.destroy();
181
+ process.exit(0);
182
+ });
183
+
184
+ req.write(payload);
185
+ req.end();
186
+ }
187
+
188
+ main();
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tower SessionStart Hook
4
+ *
5
+ * Reports the Claude CLI session_id to Tower's API so resume/continue works.
6
+ * Runs once when a Claude Code session starts.
7
+ *
8
+ * Environment:
9
+ * TOWER_TASK_ID - Required. Skip if absent (not a Tower session).
10
+ * TOWER_API_URL - Required. Base URL of the Tower server.
11
+ *
12
+ * Stdin: JSON object from Claude Code with { session_id, cwd, ... }
13
+ */
14
+
15
+ "use strict";
16
+
17
+ const http = require("http");
18
+ const https = require("https");
19
+
20
+ function main() {
21
+ const taskId = process.env.TOWER_TASK_ID;
22
+ if (!taskId) process.exit(0);
23
+
24
+ const apiUrl = process.env.TOWER_API_URL;
25
+ if (!apiUrl) process.exit(0);
26
+
27
+ // Validate localhost
28
+ try {
29
+ const parsed = new URL(apiUrl);
30
+ if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
31
+ process.exit(0);
32
+ }
33
+ } catch {
34
+ process.exit(0);
35
+ }
36
+
37
+ let input = "";
38
+ const timeout = setTimeout(() => process.exit(0), 5000);
39
+
40
+ process.stdin.setEncoding("utf8");
41
+ process.stdin.on("data", (chunk) => { input += chunk; });
42
+
43
+ process.stdin.on("end", () => {
44
+ clearTimeout(timeout);
45
+
46
+ let data;
47
+ try { data = JSON.parse(input); } catch { process.exit(0); }
48
+
49
+ const sessionId = data.session_id;
50
+ if (!sessionId) process.exit(0);
51
+
52
+ // POST sessionId to Tower
53
+ const url = new URL("/api/internal/hooks/session", apiUrl);
54
+ const payload = JSON.stringify({ taskId, sessionId });
55
+ const mod = url.protocol === "https:" ? https : http;
56
+
57
+ const req = mod.request({
58
+ hostname: url.hostname,
59
+ port: url.port,
60
+ path: url.pathname,
61
+ method: "POST",
62
+ headers: {
63
+ "Content-Type": "application/json",
64
+ "Content-Length": Buffer.byteLength(payload),
65
+ },
66
+ timeout: 3000,
67
+ }, () => process.exit(0));
68
+
69
+ req.on("error", () => process.exit(0));
70
+ req.on("timeout", () => { req.destroy(); process.exit(0); });
71
+ req.write(payload);
72
+ req.end();
73
+ });
74
+
75
+ process.stdin.on("error", () => { clearTimeout(timeout); process.exit(0); });
76
+ if (process.stdin.isTTY) { clearTimeout(timeout); process.exit(0); }
77
+ }
78
+
79
+ main();
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tower Stop Hook
4
+ *
5
+ * Claude Code Stop hook that fires when Claude finishes responding.
6
+ * Notifies Tower so the UI can show a "response complete" indicator.
7
+ *
8
+ * Environment:
9
+ * TOWER_TASK_ID - Required. Skip if absent (not a Tower session).
10
+ * TOWER_API_URL - Required. Base URL of the Tower server.
11
+ *
12
+ * Stdin: JSON object from Claude Code with { session_id, cwd, ... }
13
+ */
14
+
15
+ "use strict";
16
+
17
+ const http = require("http");
18
+ const https = require("https");
19
+
20
+ function main() {
21
+ const taskId = process.env.TOWER_TASK_ID;
22
+ if (!taskId) process.exit(0);
23
+
24
+ const apiUrl = process.env.TOWER_API_URL;
25
+ if (!apiUrl) process.exit(0);
26
+
27
+ // SECURITY: Only talk to localhost
28
+ try {
29
+ const parsed = new URL(apiUrl);
30
+ if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
31
+ process.exit(0);
32
+ }
33
+ } catch {
34
+ process.exit(0);
35
+ }
36
+
37
+ let input = "";
38
+ const timeout = setTimeout(() => process.exit(0), 5000);
39
+
40
+ process.stdin.setEncoding("utf8");
41
+ process.stdin.on("data", (chunk) => { input += chunk; });
42
+
43
+ process.stdin.on("end", () => {
44
+ clearTimeout(timeout);
45
+
46
+ let data;
47
+ try { data = JSON.parse(input); } catch { process.exit(0); }
48
+
49
+ const sessionId = data.session_id || "";
50
+
51
+ // POST to Tower
52
+ const url = new URL("/api/internal/hooks/stop", apiUrl);
53
+ const payload = JSON.stringify({ taskId, sessionId });
54
+ const mod = url.protocol === "https:" ? https : http;
55
+
56
+ const req = mod.request({
57
+ hostname: url.hostname,
58
+ port: url.port,
59
+ path: url.pathname,
60
+ method: "POST",
61
+ headers: {
62
+ "Content-Type": "application/json",
63
+ "Content-Length": Buffer.byteLength(payload),
64
+ },
65
+ timeout: 3000,
66
+ }, () => process.exit(0));
67
+
68
+ req.on("error", () => process.exit(0));
69
+ req.on("timeout", () => { req.destroy(); process.exit(0); });
70
+ req.write(payload);
71
+ req.end();
72
+ });
73
+
74
+ process.stdin.on("error", () => { clearTimeout(timeout); process.exit(0); });
75
+ if (process.stdin.isTTY) { clearTimeout(timeout); process.exit(0); }
76
+ }
77
+
78
+ main();
@@ -1,3 +0,0 @@
1
- module.exports=[750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},134999,a=>{"use strict";var b=a.i(348273),c=a.i(15389),d=a.i(851033),e=a.i(414836),f=a.i(529917),g=a.i(522849),h=a.i(803330),i=a.i(282980);let j=[{key:"notes",icon:f.FileText},{key:"assets",icon:g.FolderOpen},{key:"archive",icon:h.Archive}];a.s(["SubPageNav",0,function({workspaceId:a}){let{t:f}=(0,i.useI18n)(),g=(0,d.usePathname)(),h=j.find(a=>g.includes(`/${a.key}`))?.key;return(0,b.jsxs)("div",{className:"header-sm flex items-center gap-1 px-4 py-2",children:[(0,b.jsxs)(c.default,{href:`/workspaces/${a}`,className:"mr-2 flex items-center gap-1.5 rounded-md px-2 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",children:[(0,b.jsx)(e.ArrowLeft,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:f("archive.backToBoard")})]}),(0,b.jsx)("span",{className:"mr-2 h-4 w-px bg-border"}),j.map(d=>{let e=d.icon,g=h===d.key;return(0,b.jsxs)(c.default,{href:`/workspaces/${a}/${d.key}`,className:`flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors ${g?"bg-accent text-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"}`,children:[(0,b.jsx)(e,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:f(`sidebar.${d.key}`)})]},d.key)})]})}])},727946,a=>{"use strict";a.s(["BOARD_COLUMNS",0,[{id:"TODO",label:"To Do",color:"bg-slate-400"},{id:"IN_PROGRESS",label:"In Progress",color:"bg-amber-400"},{id:"IN_REVIEW",label:"In Review",color:"bg-sky-400"},{id:"DONE",label:"Done",color:"bg-emerald-400"},{id:"CANCELLED",label:"Cancelled",color:"bg-rose-400"}],"NOTE_CATEGORIES_PRESET",0,["账号","环境","需求","备忘"],"PRIORITY_CONFIG",0,{LOW:{label:"低",color:"bg-slate-500/20 text-slate-300 border border-slate-500/30"},MEDIUM:{label:"中",color:"bg-amber-500/20 text-amber-300 border border-amber-500/30"},HIGH:{label:"高",color:"bg-orange-500/20 text-orange-300 border border-orange-500/30"},CRITICAL:{label:"紧急",color:"bg-rose-500/20 text-rose-300 border border-rose-500/30"}},"TOWER_LABEL_NAME",0,"Tower"])},172400,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("401d6f112297a71b6d00b49371f8182b3df55867e9",b.callServer,void 0,b.findSourceMapURL,"deleteAsset");a.s(["deleteAsset",0,c])},262392,421942,a=>{"use strict";let b=(0,a.i(173250).default)("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);a.s(["Upload",0,b],262392);var c=a.i(441388);let d=(0,c.createServerReference)("4079a0cd8630406c41b716cedb13852febfef98ae3",c.callServer,void 0,c.findSourceMapURL,"uploadAsset");a.s(["uploadAsset",0,d],421942)},481030,a=>{"use strict";var b=a.i(163683),c=a.i(944921),d=a.i(340626),e=a.i(707466);let f=(0,d.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:d="default",render:g,...h}){var i;return i={defaultTagName:"span",props:(0,b.mergeProps)({className:(0,e.cn)(f({variant:d}),a)},h),render:g,state:{slot:"badge",variant:d}},(0,c.useRenderElement)(i.defaultTagName??"div",i,i)}],481030)},414836,a=>{"use strict";let b=(0,a.i(173250).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",0,b],414836)},580283,a=>{"use strict";var b=a.i(348273),c=a.i(707466);a.s(["EmptyState",0,function({icon:a,title:d,description:e,action:f,className:g}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex h-48 flex-col items-center justify-center gap-2 text-center",g),children:[a&&(0,b.jsx)(a,{className:"h-10 w-10 text-muted-foreground/40"}),(0,b.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:d}),e&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground/60",children:e}),f&&(0,b.jsx)("div",{className:"mt-2",children:f})]})}])},292441,a=>{"use strict";let b=(0,a.i(173250).default)("circle-play",[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);a.s(["PlayCircle",0,b],292441)},593677,a=>{"use strict";let b=(0,a.i(173250).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",0,b],593677)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0mab0km._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[373346,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("40dfdbab3e2ba9b03e27e586f4855033739d606ccd",b.callServer,void 0,b.findSourceMapURL,"getConfigValues");a.s(["getConfigValues",0,c])},481030,a=>{"use strict";var b=a.i(163683),c=a.i(944921),d=a.i(340626),e=a.i(707466);let f=(0,d.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:d="default",render:g,...h}){var i;return i={defaultTagName:"span",props:(0,b.mergeProps)({className:(0,e.cn)(f({variant:d}),a)},h),render:g,state:{slot:"badge",variant:d}},(0,c.useRenderElement)(i.defaultTagName??"div",i,i)}],481030)},136913,526116,a=>{"use strict";var b=a.i(116840);a.s(["CheckCircle2",()=>b.default],136913);let c=(0,a.i(173250).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.s(["XCircle",0,c],526116)},737316,a=>{"use strict";let b=(0,a.i(173250).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);a.s(["Terminal",0,b],737316)},523053,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("400c873233a97b2c1311dd18d7381863d05c9633e5",b.callServer,void 0,b.findSourceMapURL,"getPrompts");a.s(["getPrompts",0,c])},648667,a=>{"use strict";var b=a.i(348273),c=a.i(707466);a.s(["Label",0,function({className:a,...d}){return(0,b.jsx)("label",{"data-slot":"label",className:(0,c.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",a),...d})}])}];
2
-
3
- //# sourceMappingURL=tower_12sld1c._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[373346,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("40dfdbab3e2ba9b03e27e586f4855033739d606ccd",b.callServer,void 0,b.findSourceMapURL,"getConfigValues");a.s(["getConfigValues",0,c])},580283,a=>{"use strict";var b=a.i(348273),c=a.i(707466);a.s(["EmptyState",0,function({icon:a,title:d,description:e,action:f,className:g}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex h-48 flex-col items-center justify-center gap-2 text-center",g),children:[a&&(0,b.jsx)(a,{className:"h-10 w-10 text-muted-foreground/40"}),(0,b.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:d}),e&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground/60",children:e}),f&&(0,b.jsx)("div",{className:"mt-2",children:f})]})}])},481030,a=>{"use strict";var b=a.i(163683),c=a.i(944921),d=a.i(340626),e=a.i(707466);let f=(0,d.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:d="default",render:g,...h}){var i;return i={defaultTagName:"span",props:(0,b.mergeProps)({className:(0,e.cn)(f({variant:d}),a)},h),render:g,state:{slot:"badge",variant:d}},(0,c.useRenderElement)(i.defaultTagName??"div",i,i)}],481030)},150942,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("40b0be328179f86f28b11332f6259165af2ee8a56c",b.callServer,void 0,b.findSourceMapURL,"stopPtyExecution");a.s(["stopPtyExecution",0,c])},686765,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("78c11d994f9eece26b847bf3139b779d97ec363c54",b.callServer,void 0,b.findSourceMapURL,"startPtyExecution");a.s(["startPtyExecution",0,c])},480346,659560,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("60448ee810344f12b03a536b18e82bfe384bfce12b",b.callServer,void 0,b.findSourceMapURL,"resumePtyExecution");a.s(["resumePtyExecution",0,c],480346);let d=(0,a.i(173250).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",0,d],659560)},530470,a=>{"use strict";var b=a.i(441388);let c=(0,b.createServerReference)("400780c443fb050d9591e15b8073c04e74b57790c1",b.callServer,void 0,b.findSourceMapURL,"openInTerminal");a.s(["openInTerminal",0,c])}];
2
-
3
- //# sourceMappingURL=tower_src_08t.wy-._.js.map
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,251449,302320,e=>{"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function r(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function n(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach(function(t){var r,a;r=t,a=n[t],(r=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t);if("object"!=typeof n)return n;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function s(e){return function t(){for(var r=this,n=arguments.length,a=Array(n),i=0;i<n;i++)a[i]=arguments[i];return a.length>=e.length?e.apply(this,a):function(){for(var e=arguments.length,n=Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.apply(r,[].concat(a,n))}}}function o(e){return({}).toString.call(e).includes("Object")}function c(e){return"function"==typeof e}var l,u,d=s(function(e,t){throw Error(e[t]||e.default)})({initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"}),f=function(e,t){return o(t)||d("changeType"),Object.keys(t).some(function(t){return!Object.prototype.hasOwnProperty.call(e,t)})&&d("changeField"),t},m=function(e){c(e)||d("selectorType")},h=function(e){c(e)||o(e)||d("handlerType"),o(e)&&Object.values(e).some(function(e){return!c(e)})&&d("handlersType")},x=function(e){e||d("initialIsRequired"),o(e)||d("initialType"),Object.keys(e).length||d("initialContent")};function g(e,t){return c(t)?t(e.current):t}function p(e,t){return e.current=i(i({},e.current),t),t}function v(e,t,r){return c(t)?t(e.current):Object.keys(r).forEach(function(r){var n;return null==(n=t[r])?void 0:n.call(t,e.current[r])}),r}var b={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:"Deprecation warning!\n You are using deprecated way of configuration.\n\n Instead of using\n monaco.config({ urls: { monacoBase: '...' } })\n use\n monaco.config({ paths: { vs: '...' } })\n\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\n "},y=(l=function(e,t){throw Error(e[t]||e.default)},function e(){for(var t=this,r=arguments.length,n=Array(r),a=0;a<r;a++)n[a]=arguments[a];return n.length>=l.length?l.apply(this,n):function(){for(var r=arguments.length,a=Array(r),i=0;i<r;i++)a[i]=arguments[i];return e.apply(t,[].concat(n,a))}})(b),j=function(e){return(e||y("configIsRequired"),({}).toString.call(e).includes("Object")||y("configType"),e.urls)?(console.warn(b.deprecation),{paths:{vs:e.urls.monacoBase}}):e},w=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return t.reduceRight(function(e,t){return t(e)},e)}},N={type:"cancelation",msg:"operation is manually canceled"};function k(e){var t=!1,r=new Promise(function(r,n){e.then(function(e){return t?n(N):r(e)}),e.catch(n)});return r.cancel=function(){return t=!0},r}var S=["monaco"],M=function(e){if(Array.isArray(e))return e}(u=({create:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};x(e),h(t);var r={current:e},n=s(v)(r,t),a=s(p)(r),i=s(f)(e),o=s(g)(r);return[function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(e){return e};return m(e),e(r.current)},function(e){(function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return t.reduceRight(function(e,t){return t(e)},e)}})(n,a,i,o)(e)}]}}).create({config:{paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}},isInitialized:!1,resolve:null,reject:null,monaco:null}))||function(e){var t=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,n,a,i,s=[],o=!0,c=!1;try{a=(t=t.call(e)).next,!1;for(;!(o=(r=a.call(t)).done)&&(s.push(r.value),2!==s.length);o=!0);}catch(e){c=!0,n=e}finally{try{if(!o&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(c)throw n}}return s}}(u)||function(e){if(e){if("string"==typeof e)return t(e,2);var r=({}).toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,2):void 0}}(u)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),C=M[0],O=M[1];function R(e){return document.body.appendChild(e)}function E(e){var t,r,n=C(function(e){return{config:e.config,reject:e.reject}}),a=(t="".concat(n.config.paths.vs,"/loader.js"),r=document.createElement("script"),t&&(r.src=t),r);return a.onload=function(){return e()},a.onerror=n.reject,a}function P(){var e=C(function(e){return{config:e.config,resolve:e.resolve,reject:e.reject}}),t=window.require;t.config(e.config),t(["vs/editor/editor.main"],function(t){var r=t.m||t;L(r),e.resolve(r)},function(t){e.reject(t)})}function L(e){C().monaco||O({monaco:e})}var T=new Promise(function(e,t){return O({resolve:e,reject:t})}),D={config:function(e){var t=j(e),r=t.monaco,a=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(({}).hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&({}).propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(t,S);O(function(e){return{config:function e(t,r){return Object.keys(r).forEach(function(n){r[n]instanceof Object&&t[n]&&Object.assign(r[n],e(t[n],r[n]))}),n(n({},t),r)}(e.config,a),monaco:r}})},init:function(){var e=C(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(O({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),k(T);if(window.monaco&&window.monaco.editor)return L(window.monaco),e.resolve(window.monaco),k(T);w(R,E)(P)}return k(T)},__getMonacoInstance:function(){return C(function(e){return e.monaco})}};e.s(["default",0,D],302320);var A=e.i(641338),I={display:"flex",position:"relative",textAlign:"initial"},U={width:"100%"},F={display:"none"},z={display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"},B=function({children:e}){return A.default.createElement("div",{style:z},e)},$=(0,A.memo)(function({width:e,height:t,isEditorReady:r,loading:n,_ref:a,className:i,wrapperProps:s}){return A.default.createElement("section",{style:{...I,width:e,height:t},...s},!r&&A.default.createElement(B,null,n),A.default.createElement("div",{ref:a,style:{...U,...!r&&F},className:i}))}),V=function(e){(0,A.useEffect)(e,[])},q=function(e,t,r=!0){let n=(0,A.useRef)(!0);(0,A.useEffect)(n.current||!r?()=>{n.current=!1}:e,t)};function G(){}function W(e,t,r,n){var a,i,s,o,c,l;return a=e,i=n,a.editor.getModel(_(a,i))||(s=e,o=t,c=r,l=n,s.editor.createModel(o,c,l?_(s,l):void 0))}function _(e,t){return e.Uri.parse(t)}var H=(0,A.memo)(function({original:e,modified:t,language:r,originalLanguage:n,modifiedLanguage:a,originalModelPath:i,modifiedModelPath:s,keepCurrentOriginalModel:o=!1,keepCurrentModifiedModel:c=!1,theme:l="light",loading:u="Loading...",options:d={},height:f="100%",width:m="100%",className:h,wrapperProps:x={},beforeMount:g=G,onMount:p=G}){let[v,b]=(0,A.useState)(!1),[y,j]=(0,A.useState)(!0),w=(0,A.useRef)(null),N=(0,A.useRef)(null),k=(0,A.useRef)(null),S=(0,A.useRef)(p),M=(0,A.useRef)(g),C=(0,A.useRef)(!1);V(()=>{let e=D.init();return e.then(e=>(N.current=e)&&j(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>{let t;return w.current?(t=w.current?.getModel(),void(o||t?.original?.dispose(),c||t?.modified?.dispose(),w.current?.dispose())):e.cancel()}}),q(()=>{if(w.current&&N.current){let t=w.current.getOriginalEditor(),a=W(N.current,e||"",n||r||"text",i||"");a!==t.getModel()&&t.setModel(a)}},[i],v),q(()=>{if(w.current&&N.current){let e=w.current.getModifiedEditor(),n=W(N.current,t||"",a||r||"text",s||"");n!==e.getModel()&&e.setModel(n)}},[s],v),q(()=>{let e=w.current.getModifiedEditor();e.getOption(N.current.editor.EditorOption.readOnly)?e.setValue(t||""):t!==e.getValue()&&(e.executeEdits("",[{range:e.getModel().getFullModelRange(),text:t||"",forceMoveMarkers:!0}]),e.pushUndoStop())},[t],v),q(()=>{w.current?.getModel()?.original.setValue(e||"")},[e],v),q(()=>{let{original:e,modified:t}=w.current.getModel();N.current.editor.setModelLanguage(e,n||r||"text"),N.current.editor.setModelLanguage(t,a||r||"text")},[r,n,a],v),q(()=>{N.current?.editor.setTheme(l)},[l],v),q(()=>{w.current?.updateOptions(d)},[d],v);let O=(0,A.useCallback)(()=>{if(!N.current)return;M.current(N.current);let o=W(N.current,e||"",n||r||"text",i||""),c=W(N.current,t||"",a||r||"text",s||"");w.current?.setModel({original:o,modified:c})},[r,t,a,e,n,i,s]),R=(0,A.useCallback)(()=>{!C.current&&k.current&&(w.current=N.current.editor.createDiffEditor(k.current,{automaticLayout:!0,...d}),O(),N.current?.editor.setTheme(l),b(!0),C.current=!0)},[d,l,O]);return(0,A.useEffect)(()=>{v&&S.current(w.current,N.current)},[v]),(0,A.useEffect)(()=>{y||v||R()},[y,v,R]),A.default.createElement($,{width:m,height:f,isEditorReady:v,loading:u,_ref:k,className:h,wrapperProps:x})}),J=function(e){let t=(0,A.useRef)();return(0,A.useEffect)(()=>{t.current=e},[e]),t.current},K=new Map,X=(0,A.memo)(function({defaultValue:e,defaultLanguage:t,defaultPath:r,value:n,language:a,path:i,theme:s="light",line:o,loading:c="Loading...",options:l={},overrideServices:u={},saveViewState:d=!0,keepCurrentModel:f=!1,width:m="100%",height:h="100%",className:x,wrapperProps:g={},beforeMount:p=G,onMount:v=G,onChange:b,onValidate:y=G}){let[j,w]=(0,A.useState)(!1),[N,k]=(0,A.useState)(!0),S=(0,A.useRef)(null),M=(0,A.useRef)(null),C=(0,A.useRef)(null),O=(0,A.useRef)(v),R=(0,A.useRef)(p),E=(0,A.useRef)(void 0),P=(0,A.useRef)(n),L=J(i),T=(0,A.useRef)(!1),I=(0,A.useRef)(!1);V(()=>{let e=D.init();return e.then(e=>(S.current=e)&&k(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>M.current?void(E.current?.dispose(),f?d&&K.set(i,M.current.saveViewState()):M.current.getModel()?.dispose(),M.current.dispose(),M.current=null,T.current=!1,w(!1)):e.cancel()}),q(()=>{let s=W(S.current,e||n||"",t||a||"",i||r||"");s!==M.current?.getModel()&&(d&&K.set(L,M.current?.saveViewState()),M.current?.setModel(s),d&&M.current?.restoreViewState(K.get(i)))},[i],j),q(()=>{M.current?.updateOptions(l)},[l],j),q(()=>{M.current&&void 0!==n&&(M.current.getOption(S.current.editor.EditorOption.readOnly)?M.current.setValue(n):n!==M.current.getValue()&&(I.current=!0,M.current.executeEdits("",[{range:M.current.getModel().getFullModelRange(),text:n,forceMoveMarkers:!0}]),M.current.pushUndoStop(),I.current=!1))},[n],j),q(()=>{let e=M.current?.getModel();j&&e&&a&&S.current?.editor.setModelLanguage(e,a)},[a,j],j),q(()=>{void 0!==o&&M.current?.revealLine(o)},[o],j),q(()=>{S.current?.editor.setTheme(s)},[s],j);let U=(0,A.useCallback)(()=>{if(!(!C.current||!S.current)&&!T.current){R.current(S.current);let c=i||r,f=W(S.current,n||e||"",t||a||"",c||"");M.current=S.current?.editor.create(C.current,{model:f,automaticLayout:!0,...l},u),d&&M.current.restoreViewState(K.get(c)),S.current.editor.setTheme(s),void 0!==o&&M.current.revealLine(o),w(!0),T.current=!0}},[e,t,r,n,a,i,l,u,d,s,o]);return(0,A.useEffect)(()=>{j&&O.current(M.current,S.current)},[j]),(0,A.useEffect)(()=>{N||j||U()},[N,j,U]),P.current=n,(0,A.useEffect)(()=>{j&&b&&(E.current?.dispose(),E.current=M.current?.onDidChangeModelContent(e=>{I.current||b(M.current.getValue(),e)}))},[j,b]),(0,A.useEffect)(()=>{if(j){let e=S.current.editor.onDidChangeMarkers(e=>{let t=M.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=S.current.editor.getModelMarkers({resource:t});y?.(e)}});return()=>{e?.dispose()}}return()=>{}},[j,y]),A.default.createElement($,{width:m,height:h,isEditorReady:j,loading:c,_ref:C,className:x,wrapperProps:g})});e.s(["DiffEditor",0,H,"Editor",0,X,"default",0,X,"useMonaco",0,function(){let[e,t]=(0,A.useState)(D.__getMonacoInstance());return V(()=>{let r;return e||(r=D.init()).then(e=>{t(e)}),()=>r?.cancel()}),e}],251449)},583315,e=>{"use strict";let t=(0,e.i(258114).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);e.s(["ArrowLeft",0,t],583315)},113205,e=>{"use strict";var t=e.i(430989),r=e.i(47816);e.s(["EmptyState",0,function({icon:e,title:n,description:a,action:i,className:s}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex h-48 flex-col items-center justify-center gap-2 text-center",s),children:[e&&(0,t.jsx)(e,{className:"h-10 w-10 text-muted-foreground/40"}),(0,t.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:n}),a&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground/60",children:a}),i&&(0,t.jsx)("div",{className:"mt-2",children:i})]})}])},2139,e=>{"use strict";let t=(0,e.i(258114).default)("circle-play",[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["PlayCircle",0,t],2139)},653157,e=>{"use strict";let t=(0,e.i(258114).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["Eye",0,t],653157)},180685,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("78c11d994f9eece26b847bf3139b779d97ec363c54",t.callServer,void 0,t.findSourceMapURL,"startPtyExecution");e.s(["startPtyExecution",0,r])},945954,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("40b0be328179f86f28b11332f6259165af2ee8a56c",t.callServer,void 0,t.findSourceMapURL,"stopPtyExecution");e.s(["stopPtyExecution",0,r])},636477,545315,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("60448ee810344f12b03a536b18e82bfe384bfce12b",t.callServer,void 0,t.findSourceMapURL,"resumePtyExecution");e.s(["resumePtyExecution",0,r],636477);let n=(0,e.i(258114).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);e.s(["RotateCcw",0,n],545315)},898604,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("400780c443fb050d9591e15b8073c04e74b57790c1",t.callServer,void 0,t.findSourceMapURL,"openInTerminal");e.s(["openInTerminal",0,r])},793832,474596,246534,510994,509558,942941,567598,539977,757272,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("6051797ae13c7f9f063b7dd8ec4373aa5c366931d0",t.callServer,void 0,t.findSourceMapURL,"listDirectory");e.s(["listDirectory",0,r],793832);let n=(0,t.createServerReference)("70b78aabdff6c2b0a720717a580aab126c0aecc30c",t.callServer,void 0,t.findSourceMapURL,"getGitStatus");e.s(["getGitStatus",0,n],474596);let a=(0,t.createServerReference)("60319a173a6c63c20224da28e585cebd6048355bcc",t.callServer,void 0,t.findSourceMapURL,"createFile");e.s(["createFile",0,a],246534);let i=(0,t.createServerReference)("604db8994a1a9fdaf604fa9620f7645a80ad8e2dfe",t.callServer,void 0,t.findSourceMapURL,"createDirectory");e.s(["createDirectory",0,i],510994);let s=(0,t.createServerReference)("70a44bf6396be70abf75e67ac7f9157582ac3b3c2b",t.callServer,void 0,t.findSourceMapURL,"renameEntry");e.s(["renameEntry",0,s],509558);let o=(0,t.createServerReference)("60cb8dc17b3aa2799997660bd076d3d80b5325d650",t.callServer,void 0,t.findSourceMapURL,"deleteEntry");e.s(["deleteEntry",0,o],942941);let c=(0,t.createServerReference)("40542d7ce68ba4ce25a505be5e3dcdba4ab027f1a2",t.callServer,void 0,t.findSourceMapURL,"listAllFiles");e.s(["listAllFiles",0,c],567598);let l=(0,t.createServerReference)("60b2fffce31254b391b97a4b5ff8ee3fe9c55715e5",t.callServer,void 0,t.findSourceMapURL,"readFileContent");e.s(["readFileContent",0,l],539977);let u=(0,t.createServerReference)("70b0c3e3d6914589ad6ebed3e9cb2fdb44b06ee178",t.callServer,void 0,t.findSourceMapURL,"writeFileContent");e.s(["writeFileContent",0,u],757272)},174145,e=>{"use strict";var t=e.i(228202),r=e.i(703995),n=e.i(555138),a=e.i(47816);let i=(0,n.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});e.s(["Badge",0,function({className:e,variant:n="default",render:s,...o}){var c;return c={defaultTagName:"span",props:(0,t.mergeProps)({className:(0,a.cn)(i({variant:n}),e)},o),render:s,state:{slot:"badge",variant:n}},(0,r.useRenderElement)(c.defaultTagName??"div",c,c)}],174145)},170528,581511,e=>{"use strict";var t=e.i(93850);e.s(["CheckCircle2",()=>t.default],170528);let r=(0,e.i(258114).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["XCircle",0,r],581511)},678978,e=>{"use strict";let t=(0,e.i(258114).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);e.s(["Terminal",0,t],678978)},202830,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("400c873233a97b2c1311dd18d7381863d05c9633e5",t.callServer,void 0,t.findSourceMapURL,"getPrompts");e.s(["getPrompts",0,r])},597736,e=>{"use strict";var t=e.i(794097);e.s(["ChevronRight",()=>t.default])},986633,e=>{"use strict";let t=(0,e.i(258114).default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);e.s(["Square",0,t],986633)},928951,e=>{"use strict";let t=(0,e.i(258114).default)("git-compare",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9",key:"19pyzm"}]]);e.s(["GitCompare",0,t],928951)},421051,e=>{"use strict";var t=e.i(860875);e.s(["AlertTriangle",()=>t.default])},246762,960732,e=>{"use strict";var t=e.i(430989),r=e.i(641338),n=e.i(597736),a=e.i(260949),i=e.i(421051),s=e.i(928951),o=e.i(258114);let c=(0,o.default)("git-commit-horizontal",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]]);var l=e.i(744838),u=e.i(113205),d=e.i(174145),f=e.i(331548),m=e.i(779574),h=e.i(349369);e.s(["TaskDiffView",0,function({files:e,totalAdded:o,totalRemoved:x,hasConflicts:g,conflictFiles:p,onCommit:v,hasUncommitted:b}){let{t:y}=(0,h.useI18n)(),[j,w]=(0,r.useState)(new Set),[N,k]=(0,r.useState)(!1),[S,M]=(0,r.useState)(""),[C,O]=(0,r.useState)(!1);return(0,t.jsxs)("div",{className:"flex flex-col h-full",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-4 py-3 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 text-sm text-muted-foreground",children:[(0,t.jsxs)("span",{className:"font-medium text-foreground",children:[e.length," files changed"]}),(0,t.jsxs)("span",{className:"text-green-400 font-mono text-xs",children:["+",o]}),(0,t.jsxs)("span",{className:"text-red-400 font-mono text-xs",children:["-",x]})]}),(0,t.jsx)("div",{className:"flex items-center gap-2",children:b&&v&&(0,t.jsxs)(l.Button,{variant:"outline",onClick:()=>k(!0),className:"gap-2",children:[(0,t.jsx)(c,{className:"h-4 w-4"}),y("diff.commit")]})})]}),g&&(0,t.jsxs)("div",{className:"flex flex-col gap-2 border-b border-border bg-amber-500/5 px-4 py-3 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-amber-400",children:[(0,t.jsx)(i.AlertTriangle,{className:"h-4 w-4 flex-shrink-0"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:["Merge blocked: ",p.length," conflicting file",1!==p.length?"s":""]})]}),(0,t.jsx)("ul",{className:"ml-6 space-y-1",children:p.map(e=>(0,t.jsx)("li",{className:"text-xs font-mono text-amber-300/80",children:e},e))})]}),(0,t.jsx)("div",{className:"flex-1 overflow-auto",children:0===e.length?(0,t.jsx)(u.EmptyState,{icon:s.GitCompare,title:y("diff.noChanges"),className:"h-full"}):(0,t.jsx)("div",{className:"divide-y divide-border",children:e.map(e=>{let r=j.has(e.filename);return(0,t.jsxs)("div",{children:[(0,t.jsxs)(l.Button,{variant:"ghost",type:"button",onClick:()=>{var t;return t=e.filename,void w(e=>{let r=new Set(e);return r.has(t)?r.delete(t):r.add(t),r})},className:"flex w-full items-center gap-2 px-4 py-2.5 text-left hover:bg-accent/50 transition-colors rounded-none h-auto",children:[r?(0,t.jsx)(a.ChevronDown,{className:"h-3.5 w-3.5 flex-shrink-0 text-muted-foreground"}):(0,t.jsx)(n.ChevronRight,{className:"h-3.5 w-3.5 flex-shrink-0 text-muted-foreground"}),(0,t.jsx)("span",{className:"flex-1 truncate text-sm font-mono text-foreground",children:e.filename}),e.isBinary?(0,t.jsx)(d.Badge,{variant:"secondary",className:"text-[10px] bg-muted text-muted-foreground border border-border",children:"Binary"}):(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)("span",{className:"text-xs font-mono text-green-400",children:["+",e.added]}),(0,t.jsxs)("span",{className:"text-xs font-mono text-red-400",children:["-",e.removed]})]})]}),r&&e.patch&&(0,t.jsx)("div",{className:"border-t border-border bg-background",children:(0,t.jsx)("pre",{className:"overflow-x-auto p-0 text-xs font-mono leading-5",children:e.patch.split("\n").map((e,r)=>{let n=e.startsWith("+")&&!e.startsWith("+++")?"px-4 block bg-green-500/10 text-green-400":e.startsWith("-")&&!e.startsWith("---")?"px-4 block bg-red-500/10 text-red-400":e.startsWith("@@")?"px-4 block bg-blue-500/10 text-blue-300":"px-4 block text-muted-foreground";return(0,t.jsx)("span",{className:n,children:e||" "},r)})})})]},e.filename)})})}),(0,t.jsx)(f.Dialog,{open:N,onOpenChange:k,children:(0,t.jsxs)(f.DialogContent,{className:"max-w-md",children:[(0,t.jsx)(f.DialogHeader,{children:(0,t.jsx)(f.DialogTitle,{children:y("diff.commitChanges")})}),(0,t.jsx)("div",{className:"flex flex-col gap-3",children:(0,t.jsx)(m.Textarea,{value:S,onChange:e=>M(e.target.value),placeholder:y("diff.commitMessagePlaceholder"),rows:5,className:"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder-muted-foreground outline-none resize-y min-h-[80px]"})}),(0,t.jsxs)(f.DialogFooter,{children:[(0,t.jsx)(l.Button,{variant:"ghost",onClick:()=>k(!1),children:y("common.cancel")}),(0,t.jsx)(l.Button,{onClick:async()=>{if(S.trim()&&v){O(!0);try{await v(S.trim()),M(""),k(!1)}finally{O(!1)}}},disabled:!S.trim()||C,children:C?"...":y("diff.commit")})]})]})})]})}],246762);var x=e.i(347880);let g=(0,o.default)("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);var p=e.i(924609);e.s(["TaskMergeConfirmDialog",0,function({open:e,onOpenChange:n,taskId:a,taskTitle:i,baseBranch:s,fileCount:o,commitCount:c,commitLog:u=[],onMergeComplete:d}){let m=(0,x.useRouter)(),[h,v]=(0,r.useState)(!1),[b,y]=(0,r.useState)(null),j=async()=>{v(!0),y(null);try{let e=await fetch(`/api/tasks/${a}/merge`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(e.ok){n(!1),d(),m.refresh();return}let t=await e.json().catch(()=>({error:"Merge failed"}));409===e.status?y(`Merge conflicts detected: ${Array.isArray(t.conflictFiles)?t.conflictFiles.join(", "):"unknown files"}`):y(t.error??"Merge failed")}catch{y("Network error — merge failed")}finally{v(!1)}};return(0,t.jsx)(f.Dialog,{open:e,onOpenChange:n,children:(0,t.jsxs)(f.DialogContent,{showCloseButton:!0,className:"sm:max-w-md",children:[(0,t.jsx)(f.DialogHeader,{children:(0,t.jsxs)(f.DialogTitle,{className:"flex items-center gap-2",children:[(0,t.jsx)(g,{className:"h-4 w-4 text-emerald-400"}),"Confirm Merge"]})}),(0,t.jsxs)("div",{className:"space-y-3 py-2",children:[(0,t.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3 space-y-2.5",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Target branch"}),(0,t.jsx)("code",{className:"text-xs font-mono bg-muted px-2 py-0.5 rounded text-foreground",children:s})]}),(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Changed files"}),(0,t.jsx)("span",{className:"text-xs font-medium text-foreground",children:o})]}),(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Commits"}),(0,t.jsx)("span",{className:"text-xs font-medium text-foreground",children:c})]})]}),u.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground mb-1 block",children:"Commits"}),(0,t.jsx)("div",{className:"rounded-md border border-border bg-muted/30 p-2 space-y-1 max-h-32 overflow-y-auto",children:u.map((e,r)=>(0,t.jsx)("div",{className:"text-xs font-mono text-foreground/80",children:e},r))})]}),b&&(0,t.jsx)("div",{className:"rounded-lg border border-red-500/20 bg-red-500/10 px-3 py-2",children:(0,t.jsx)("p",{className:"text-xs text-red-400",children:b})})]}),(0,t.jsxs)(f.DialogFooter,{children:[(0,t.jsx)(l.Button,{variant:"outline",onClick:()=>n(!1),disabled:h,children:"Cancel"}),(0,t.jsx)(l.Button,{onClick:j,disabled:h,className:"gap-2",children:h?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(p.Loader2,{className:"h-4 w-4 animate-spin"}),"Merging..."]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g,{className:"h-4 w-4"}),"Confirm Merge"]})})]})]})})}],960732)},121505,e=>{"use strict";let t=(0,e.i(258114).default)("arrow-up-from-line",[["path",{d:"m18 9-6-6-6 6",key:"kcunyi"}],["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 21h14",key:"11awu3"}]]);e.s(["ArrowUpFromLine",0,t],121505)},775899,e=>{"use strict";var t=e.i(430989),r=e.i(641338),n=e.i(259104),a=e.i(260949),i=e.i(811163),s=e.i(698300),o=e.i(924609),c=e.i(331548),l=e.i(744838),u=e.i(745943),d=e.i(779574),f=e.i(349369);e.s(["CreateBranchDialog",0,function({open:e,onOpenChange:m,branches:h,currentBranch:x,localPath:g,onCreated:p,onError:v}){let{t:b}=(0,f.useI18n)(),[y,j]=(0,r.useState)(""),[w,N]=(0,r.useState)(x),[k,S]=(0,r.useState)(""),[M,C]=(0,r.useState)(!1),[O,R]=(0,r.useState)(""),[E,P]=(0,r.useState)(!1);(0,r.useEffect)(()=>{e&&(j(""),N(x),S(""),R(""))},[e,x]);let L=[...new Set(h)].filter(e=>e.toLowerCase().includes(O.toLowerCase())),T=async()=>{if(y.trim()){C(!0);try{let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create-branch",path:g,branch:y.trim(),baseBranch:w})});if(e.ok)m(!1),p();else{let t=await e.json();v(t.error||"Unknown error")}}catch{v("Network error")}finally{C(!1)}}};return(0,t.jsx)(c.Dialog,{open:e,onOpenChange:m,children:(0,t.jsxs)(c.DialogContent,{className:"sm:max-w-sm",children:[(0,t.jsx)(c.DialogHeader,{children:(0,t.jsx)(c.DialogTitle,{children:b("git.createBranch")})}),(0,t.jsxs)("div",{className:"space-y-3 py-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:b("git.branchName")}),(0,t.jsx)(u.Input,{value:y,onChange:e=>j(e.target.value),placeholder:b("git.branchNamePlaceholder"),className:"mt-1.5 font-mono text-xs",onKeyDown:e=>"Enter"===e.key&&T()})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:b("git.baseBranch")}),(0,t.jsxs)("div",{className:"relative mt-1.5",children:[(0,t.jsxs)("button",{onClick:()=>P(!E),className:"flex w-full items-center justify-between rounded-lg border border-border bg-muted/50 px-3 py-2 text-left transition-colors hover:bg-accent",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(n.GitBranch,{className:"h-3 w-3 text-emerald-400"}),(0,t.jsx)("span",{className:"font-mono text-xs text-foreground",children:w})]}),(0,t.jsx)(a.ChevronDown,{className:`h-3 w-3 text-muted-foreground transition-transform ${E?"rotate-180":""}`})]}),E&&(0,t.jsxs)("div",{className:"absolute left-0 right-0 top-full z-20 mt-1 rounded-lg border border-border bg-popover shadow-xl",children:[(0,t.jsx)("div",{className:"border-b border-border p-1.5",children:(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(i.Search,{className:"absolute left-2 top-1/2 -translate-y-1/2 h-3 w-3 text-muted-foreground"}),(0,t.jsx)("input",{value:O,onChange:e=>R(e.target.value),placeholder:"Filter...",autoFocus:!0,className:"h-7 w-full rounded-md bg-muted/50 pl-7 pr-2 text-xs text-foreground placeholder-muted-foreground outline-none focus:ring-1 focus:ring-ring"})]})}),(0,t.jsx)("div",{className:"max-h-40 overflow-auto py-1",children:L.map(e=>(0,t.jsxs)("button",{onClick:()=>{N(e),P(!1)},className:`flex w-full items-center gap-2 px-3 py-1.5 text-left transition-colors ${e===w?"bg-emerald-500/10 text-emerald-400":"text-secondary-foreground hover:bg-accent"}`,children:[(0,t.jsx)(n.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs",children:e}),e===w&&(0,t.jsx)(s.Check,{className:"h-3 w-3 ml-auto shrink-0"})]},e))})]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:b("git.branchDesc")}),(0,t.jsx)(d.Textarea,{value:k,onChange:e=>S(e.target.value),placeholder:b("git.branchDescPlaceholder"),rows:2,className:"mt-1.5 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder-muted-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring resize-none"})]})]}),(0,t.jsxs)(c.DialogFooter,{children:[(0,t.jsx)(l.Button,{variant:"outline",onClick:()=>m(!1),children:b("common.cancel")}),(0,t.jsxs)(l.Button,{onClick:T,disabled:!y.trim()||M,className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[M?(0,t.jsx)(o.Loader2,{className:"h-3 w-3 animate-spin mr-1"}):null,b("common.create")]})]})]})})}])},426175,e=>{"use strict";async function t(e,r,n={}){let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:r,path:e,...n})});if(!a.ok)throw Error((await a.json()).error||`${r} failed`);return a.json()}e.s(["gitAction",0,t])},155366,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("609f8c1d7710961168b065bc20bd93438bb2e77880",t.callServer,void 0,t.findSourceMapURL,"updateProject");e.s(["updateProject",0,r])},656284,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("4024f6d9f41e09e98a12ce95afe006665fa0a81c7d",t.callServer,void 0,t.findSourceMapURL,"continueLatestPtyExecution");e.s(["continueLatestPtyExecution",0,r])},697264,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("4072d632192adf6a43f929ae7adc0a98eb7e20c0e2",t.callServer,void 0,t.findSourceMapURL,"getTaskExecutions");e.s(["getTaskExecutions",0,r])},698173,664941,29571,43108,e=>{"use strict";var t=e.i(755683);let r=(0,t.createServerReference)("60f82bde7263a3f07ea777541e73f88165bb7d11d9",t.callServer,void 0,t.findSourceMapURL,"updateTaskStatus");e.s(["updateTaskStatus",0,r],698173);let n=(0,t.createServerReference)("400594b8d851febc7cb9864815ee520e678cd8c582",t.callServer,void 0,t.findSourceMapURL,"checkWorktreeClean");e.s(["checkWorktreeClean",0,n],664941);let a=(0,t.createServerReference)("604a3523f69d9a89b467a06177bf20792b0f8e5cb5",t.callServer,void 0,t.findSourceMapURL,"commitWorktreeChanges");e.s(["commitWorktreeChanges",0,a],29571);let i=(0,e.i(258114).default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);e.s(["Clock",0,i],43108)},586211,e=>{"use strict";let t=(0,e.i(258114).default)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);e.s(["Lightbulb",0,t],586211)},711958,e=>{"use strict";var t=e.i(430989),r=e.i(641338),n=e.i(260949),a=e.i(569021),i=e.i(170528),s=e.i(581511),o=e.i(924609),c=e.i(43108),l=e.i(2139),u=e.i(545315),d=e.i(586211);let f=(0,e.i(258114).default)("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);var m=e.i(744838),h=e.i(113205),x=e.i(349369);function g({status:e}){switch(e){case"COMPLETED":return(0,t.jsx)(i.CheckCircle2,{className:"h-4 w-4 text-emerald-400"});case"FAILED":return(0,t.jsx)(s.XCircle,{className:"h-4 w-4 text-red-400"});case"RUNNING":return(0,t.jsx)(o.Loader2,{className:"h-4 w-4 text-blue-400 animate-spin"});default:return(0,t.jsx)(c.Clock,{className:"h-4 w-4 text-neutral-500"})}}e.s(["ExecutionTimeline",0,function({executions:e,onResume:i,onContinueLatest:s}){let{t:o,locale:c}=(0,x.useI18n)(),[p,v]=(0,r.useState)(null),[b,y]=(0,r.useState)(null);return 0===e.length?(0,t.jsx)(h.EmptyState,{icon:f,title:o("execution.noHistory")}):(0,t.jsxs)("div",{className:"space-y-2 p-3",children:[(0,t.jsx)("p",{className:"px-1 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:o("execution.history")}),e.map(r=>{let f=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(r.gitStats??null),h=function(e,t){if(!e||!t)return"";let r=new Date(t).getTime()-new Date(e).getTime();if(r<0)return"";let n=Math.floor(r/1e3);if(n<60)return`${n}s`;let a=Math.floor(n/60);if(a<60)return`${a}m ${n%60}s`;let i=Math.floor(a/60);return`${i}h ${a%60}m`}(r.startedAt??null,r.endedAt??null),x=p===r.id;return(0,t.jsxs)("div",{className:"rounded-lg border border-border bg-background/50 overflow-hidden",children:[(0,t.jsxs)("div",{className:"p-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,t.jsx)(g,{status:r.status}),(0,t.jsx)("span",{className:`font-medium ${function(e){switch(e){case"COMPLETED":return"text-emerald-400";case"FAILED":return"text-red-400";case"RUNNING":return"text-blue-400";default:return"text-neutral-400"}}(r.status)}`,children:function(e,t){switch(e){case"COMPLETED":return t("execution.success");case"FAILED":return t("execution.failed");case"RUNNING":return t("execution.running");default:return e}}(r.status,o)}),(0,t.jsx)("span",{className:"text-muted-foreground",children:function(e,t="zh"){if(!e)return"";let r=new Date(e),n=Math.floor((new Date().getTime()-r.getTime())/864e5),a="zh"===t?"zh-CN":"en-US",i=r.toLocaleTimeString(a,{hour:"2-digit",minute:"2-digit"});return 0===n?i:1===n?"zh"===t?`昨天 ${i}`:`Yesterday ${i}`:n<7?"zh"===t?`${n}天前 ${i}`:`${n}d ago ${i}`:r.toLocaleDateString(a,{month:"2-digit",day:"2-digit"})+" "+i}(r.startedAt??null,c)}),h&&(0,t.jsxs)("span",{className:"text-muted-foreground/60",children:["(",h,")"]})]}),(0,t.jsx)("p",{className:"mt-1.5 text-sm text-foreground/80 line-clamp-2",children:r.summary||o("execution.noSummary")}),f&&(f.commits||f.filesChanged)&&(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-2 text-[11px] text-muted-foreground font-mono",children:[f.commits?(0,t.jsxs)("span",{children:[f.commits," ",o("execution.commits")]}):null,f.filesChanged?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"·"}),(0,t.jsxs)("span",{children:[f.filesChanged," ",o("execution.files")]})]}):null,f.insertions||f.deletions?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"·"}),f.insertions?(0,t.jsxs)("span",{className:"text-emerald-500",children:["+",f.insertions]}):null,f.deletions?(0,t.jsxs)("span",{className:"text-red-400",children:["-",f.deletions]}):null]}):null]}),r.insightNote&&(0,t.jsxs)("div",{className:"mt-2",children:[(0,t.jsxs)("button",{onClick:()=>y(b===r.id?null:r.id),className:"flex items-center gap-1.5 text-xs text-primary/90 hover:text-primary transition-colors",children:[(0,t.jsx)(d.Lightbulb,{className:"h-3.5 w-3.5"}),(0,t.jsxs)("span",{className:"font-medium",children:[o("execution.insight"),":"]}),(0,t.jsx)("span",{className:"text-foreground/70 truncate max-w-[200px]",children:r.insightNote.title}),b===r.id?(0,t.jsx)(a.ChevronUp,{className:"h-3 w-3"}):(0,t.jsx)(n.ChevronDown,{className:"h-3 w-3"})]}),b===r.id&&(0,t.jsx)("div",{className:"mt-2 rounded-md bg-primary/[0.06] border border-primary/10 p-3 text-xs text-foreground/80 whitespace-pre-wrap",children:r.insightNote.content})]}),(0,t.jsxs)("div",{className:"mt-2.5 flex items-center gap-2",children:[r.sessionId&&i?(0,t.jsxs)(m.Button,{size:"sm",onClick:()=>i(r.sessionId),className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[(0,t.jsx)(l.PlayCircle,{className:"h-3.5 w-3.5"}),o("execution.resume")]}):!r.sessionId&&"FAILED"===r.status&&r.id===e[0]?.id&&s?(0,t.jsxs)(m.Button,{size:"sm",onClick:s,className:"bg-blue-500/15 text-blue-300 ring-1 ring-blue-500/20 hover:bg-blue-500/25",children:[(0,t.jsx)(u.RotateCcw,{className:"h-3.5 w-3.5"}),o("execution.tryRecover")]}):null,(0,t.jsxs)(m.Button,{variant:"ghost",size:"sm",onClick:()=>v(x?null:r.id),className:"bg-muted text-muted-foreground",children:[x?(0,t.jsx)(a.ChevronUp,{className:"h-3.5 w-3.5"}):(0,t.jsx)(n.ChevronDown,{className:"h-3.5 w-3.5"}),x?o("execution.collapse"):o("execution.details")]})]})]}),x&&(0,t.jsxs)("div",{className:"border-t border-border px-3 pb-3 space-y-3",children:[r.gitLog&&(0,t.jsxs)("div",{className:"mt-3",children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground mb-1.5",children:o("execution.gitLog")}),(0,t.jsx)("pre",{className:"rounded-md bg-muted/50 p-2.5 text-xs font-mono text-foreground/70 overflow-x-auto whitespace-pre-wrap",children:r.gitLog.split("\n").slice(0,3).join("\n")})]}),r.terminalLog&&(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground mb-1.5",children:o("execution.terminalOutput")}),(0,t.jsx)("pre",{className:"rounded-md bg-[#0f1419] p-2.5 text-xs font-mono text-neutral-300 overflow-x-auto max-h-48 overflow-y-auto whitespace-pre-wrap",children:r.terminalLog})]}),"FAILED"===r.status&&null!=r.exitCode&&(0,t.jsxs)("p",{className:"text-xs text-red-400/70",children:["Exit code: ",r.exitCode]})]})]},r.id)})]})}],711958)},555273,e=>{e.v(t=>Promise.all(["static/chunks/0ttrpz.l-v-yv.js"].map(t=>e.l(t))).then(()=>t(425393)))},286723,e=>{e.v(t=>Promise.all(["static/chunks/0tcl81ybuob5i.js"].map(t=>e.l(t))).then(()=>t(466255)))},885431,e=>{e.v(t=>Promise.all(["static/chunks/16w-ap~msrwpj.js"].map(t=>e.l(t))).then(()=>t(649318)))}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,755167,e=>{"use strict";var t=e.i(430989),s=e.i(226549),a=e.i(347880),r=e.i(583315),l=e.i(652459),n=e.i(819614),i=e.i(306308),o=e.i(349369);let d=[{key:"notes",icon:l.FileText},{key:"assets",icon:n.FolderOpen},{key:"archive",icon:i.Archive}];e.s(["SubPageNav",0,function({workspaceId:e}){let{t:l}=(0,o.useI18n)(),n=(0,a.usePathname)(),i=d.find(e=>n.includes(`/${e.key}`))?.key;return(0,t.jsxs)("div",{className:"header-sm flex items-center gap-1 px-4 py-2",children:[(0,t.jsxs)(s.default,{href:`/workspaces/${e}`,className:"mr-2 flex items-center gap-1.5 rounded-md px-2 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",children:[(0,t.jsx)(r.ArrowLeft,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:l("archive.backToBoard")})]}),(0,t.jsx)("span",{className:"mr-2 h-4 w-px bg-border"}),d.map(a=>{let r=a.icon,n=i===a.key;return(0,t.jsxs)(s.default,{href:`/workspaces/${e}/${a.key}`,className:`flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors ${n?"bg-accent text-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"}`,children:[(0,t.jsx)(r,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:l(`sidebar.${a.key}`)})]},a.key)})]})}])},107414,e=>{"use strict";e.s(["BOARD_COLUMNS",0,[{id:"TODO",label:"To Do",color:"bg-slate-400"},{id:"IN_PROGRESS",label:"In Progress",color:"bg-amber-400"},{id:"IN_REVIEW",label:"In Review",color:"bg-sky-400"},{id:"DONE",label:"Done",color:"bg-emerald-400"},{id:"CANCELLED",label:"Cancelled",color:"bg-rose-400"}],"NOTE_CATEGORIES_PRESET",0,["账号","环境","需求","备忘"],"PRIORITY_CONFIG",0,{LOW:{label:"低",color:"bg-slate-500/20 text-slate-300 border border-slate-500/30"},MEDIUM:{label:"中",color:"bg-amber-500/20 text-amber-300 border border-amber-500/30"},HIGH:{label:"高",color:"bg-orange-500/20 text-orange-300 border border-orange-500/30"},CRITICAL:{label:"紧急",color:"bg-rose-500/20 text-rose-300 border border-rose-500/30"}},"TOWER_LABEL_NAME",0,"Tower"])},981142,e=>{"use strict";var t=e.i(755683);let s=(0,t.createServerReference)("401d6f112297a71b6d00b49371f8182b3df55867e9",t.callServer,void 0,t.findSourceMapURL,"deleteAsset");e.s(["deleteAsset",0,s])},512839,916416,e=>{"use strict";let t=(0,e.i(258114).default)("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);e.s(["Upload",0,t],512839);var s=e.i(755683);let a=(0,s.createServerReference)("4079a0cd8630406c41b716cedb13852febfef98ae3",s.callServer,void 0,s.findSourceMapURL,"uploadAsset");e.s(["uploadAsset",0,a],916416)},174145,e=>{"use strict";var t=e.i(228202),s=e.i(703995),a=e.i(555138),r=e.i(47816);let l=(0,a.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});e.s(["Badge",0,function({className:e,variant:a="default",render:n,...i}){var o;return o={defaultTagName:"span",props:(0,t.mergeProps)({className:(0,r.cn)(l({variant:a}),e)},i),render:n,state:{slot:"badge",variant:a}},(0,s.useRenderElement)(o.defaultTagName??"div",o,o)}],174145)},583315,e=>{"use strict";let t=(0,e.i(258114).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);e.s(["ArrowLeft",0,t],583315)},113205,e=>{"use strict";var t=e.i(430989),s=e.i(47816);e.s(["EmptyState",0,function({icon:e,title:a,description:r,action:l,className:n}){return(0,t.jsxs)("div",{className:(0,s.cn)("flex h-48 flex-col items-center justify-center gap-2 text-center",n),children:[e&&(0,t.jsx)(e,{className:"h-10 w-10 text-muted-foreground/40"}),(0,t.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:a}),r&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground/60",children:r}),l&&(0,t.jsx)("div",{className:"mt-2",children:l})]})}])},2139,e=>{"use strict";let t=(0,e.i(258114).default)("circle-play",[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["PlayCircle",0,t],2139)},653157,e=>{"use strict";let t=(0,e.i(258114).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["Eye",0,t],653157)},99752,e=>{"use strict";var t=e.i(430989),s=e.i(641338),a=e.i(924609),r=e.i(755167),l=e.i(349369),n=e.i(981142),i=e.i(755683);let o=(0,i.createServerReference)("4011a8812b82ca66706fd0e3919d60716c87892a40",i.callServer,void 0,i.findSourceMapURL,"getProjectAssets");var d=e.i(819614),c=e.i(113205),x=e.i(652459),u=e.i(653157),m=e.i(584451),h=e.i(744838);function p(e){let t=e.match(/(?:^|\/)(?:storage|data)\/assets\/([^/]+)\/([^/]+)$/);return t?`/api/files/assets/${t[1]}/${t[2]}`:e}function f({asset:e,onPreview:s,onReveal:a,onDelete:r,onTaskClick:n}){var i;let{t:o}=(0,l.useI18n)(),c=p(e.path),g=e.mimeType?.startsWith("image/");return(0,t.jsxs)("div",{className:"flex items-center gap-4 rounded-lg border border-border bg-card px-4 py-3 transition-colors hover:bg-accent/20",children:[(0,t.jsx)(h.Button,{variant:"ghost",onClick:()=>s(e),className:"flex-shrink-0 cursor-pointer p-0 h-auto",children:g?(0,t.jsx)("img",{src:c,alt:e.filename,className:"h-12 w-12 rounded object-cover border border-border"}):(0,t.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded border border-border bg-muted",children:(0,t.jsx)(x.FileText,{className:"h-6 w-6 text-muted-foreground"})})}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("p",{className:"truncate text-sm font-medium text-foreground",children:e.filename}),e.taskTitle&&e.taskId&&(0,t.jsx)(h.Button,{variant:"ghost",onClick:t=>{t.stopPropagation(),n?.(e.taskId)},className:"flex-shrink-0 bg-blue-500/10 text-blue-600 dark:text-blue-400 text-xs px-1.5 py-0.5 rounded cursor-pointer hover:bg-blue-500/20 transition-colors h-auto",children:e.taskTitle.length>20?`[任务: ${e.taskTitle.slice(0,20)}...]`:`[任务: ${e.taskTitle}]`})]}),e.description&&(0,t.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground truncate",children:e.description}),(0,t.jsxs)("div",{className:"mt-0.5 flex items-center gap-3 text-xs text-muted-foreground",children:[(0,t.jsx)("span",{children:null===(i=e.size)?"-":i<1024?`${i} B`:i<1048576?`${(i/1024).toFixed(1)} KB`:i<0x40000000?`${(i/1048576).toFixed(1)} MB`:`${(i/0x40000000).toFixed(1)} GB`}),(0,t.jsx)("span",{children:new Date(e.createdAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1 flex-shrink-0",children:[(0,t.jsx)(h.Button,{variant:"ghost",size:"icon",onClick:()=>s(e),className:"text-muted-foreground","aria-label":o("assets.preview"),children:(0,t.jsx)(u.Eye,{className:"h-4 w-4"})}),(0,t.jsx)(h.Button,{variant:"ghost",size:"icon",onClick:()=>a(e),className:"text-muted-foreground","aria-label":o("assets.revealInFinder"),children:(0,t.jsx)(d.FolderOpen,{className:"h-4 w-4"})}),(0,t.jsx)(h.Button,{variant:"ghost",size:"icon",onClick:()=>r(e.id),className:"text-muted-foreground hover:text-rose-400","aria-label":o("assets.delete"),children:(0,t.jsx)(m.Trash2,{className:"h-4 w-4"})})]})]})}function g({assets:e,onPreview:s,onReveal:a,onDelete:r,onTaskClick:n}){let{t:i}=(0,l.useI18n)();return 0===e.length?(0,t.jsx)(c.EmptyState,{icon:d.FolderOpen,title:i("assets.empty"),description:i("assets.emptyHint")}):(0,t.jsx)("div",{className:"flex flex-col gap-3",children:e.map(e=>(0,t.jsx)(f,{asset:e,onPreview:s,onReveal:a,onDelete:r,onTaskClick:n},e.id))})}var j=e.i(512839),v=e.i(621994),b=e.i(916416),y=e.i(779574),N=e.i(702431);function w({allWorkspaces:e,initialWsId:a,initialProjectId:r,onUploaded:n}){let i,{t:o}=(0,l.useI18n)(),d=(0,s.useRef)(null),[c,x]=(0,s.useState)(!1),[u,m]=(0,s.useState)(!1),[p,f]=(0,s.useState)(null),[g,k]=(0,s.useState)(a),[S,C]=(0,s.useState)(r),[T,I]=(0,s.useState)(""),O=e.find(e=>e.id===g),D=O?.projects??[],E=()=>{x(!1),f(null),d.current&&(d.current.value="")},R=async()=>{if(p&&S){m(!0);try{let e=new FormData;e.append("file",p),e.append("projectId",S),e.append("description",T.trim()),await (0,b.uploadAsset)(e),n(S),E()}finally{m(!1)}}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(h.Button,{onClick:()=>{k(a),C(r),f(null),I(""),x(!0)},className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[(0,t.jsx)(j.Upload,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:o("assets.upload")})]}),c&&(0,t.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[(0,t.jsx)("div",{className:"absolute inset-0 bg-black/50",onClick:E}),(0,t.jsxs)("div",{className:"relative w-full max-w-md rounded-lg border border-border bg-card p-6 shadow-lg",children:[(0,t.jsx)(h.Button,{variant:"ghost",size:"icon-xs",onClick:E,className:"absolute right-3 top-3 text-muted-foreground",children:(0,t.jsx)(v.X,{className:"h-4 w-4"})}),(0,t.jsx)("h3",{className:"text-sm font-semibold text-foreground mb-4",children:o("assets.uploadTitle")}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:o("assets.workspace")}),(0,t.jsxs)(N.Select,{value:g,onValueChange:t=>{var s;let a;return k(s=t??""),a=e.find(e=>e.id===s),void C(a?.projects[0]?.id??null)},children:[(0,t.jsx)(N.SelectTrigger,{className:"flex-1 text-xs",children:(0,t.jsx)("span",{className:"truncate",children:O?.name??g})}),(0,t.jsx)(N.SelectContent,{children:e.map(e=>(0,t.jsx)(N.SelectItem,{value:e.id,children:e.name},e.id))})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:o("assets.project")}),D.length>0?(0,t.jsxs)(N.Select,{value:S??"",onValueChange:e=>C(e??""),children:[(0,t.jsx)(N.SelectTrigger,{className:"flex-1 text-xs",children:(0,t.jsx)("span",{className:"truncate",children:(i=D.find(e=>e.id===S))?i.alias?`${i.name} (${i.alias})`:i.name:S})}),(0,t.jsx)(N.SelectContent,{children:D.map(e=>{let s=e.alias?`${e.name} (${e.alias})`:e.name;return(0,t.jsx)(N.SelectItem,{value:e.id,children:s},e.id)})})]}):(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:o("assets.noProject")})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:o("assets.file")}),(0,t.jsx)("input",{type:"file",ref:d,onChange:e=>{f(e.target.files?.[0]??null)},className:"hidden"}),(0,t.jsx)(h.Button,{variant:"outline",onClick:()=>{d.current?.click()},className:"flex-1 border-dashed bg-background px-3 py-2 text-xs text-muted-foreground hover:border-primary/50 hover:text-foreground transition-colors text-left justify-start",children:p?p.name:o("assets.selectFile")})]}),(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0 pt-1.5",children:o("assets.description")}),(0,t.jsx)(y.Textarea,{value:T,onChange:e=>I(e.target.value),placeholder:o("assets.descriptionPlaceholder"),className:"flex-1 rounded-md border border-border bg-background px-3 py-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring resize-none h-20"})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 justify-end mt-6",children:[(0,t.jsx)(h.Button,{variant:"outline",onClick:E,children:o("notes.cancel")}),(0,t.jsx)(h.Button,{onClick:R,disabled:!p||!S||!T.trim()||u,className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:o(u?"assets.uploading":"assets.upload")})]})]})]})]})}var k=e.i(331548);function S({imageUrl:e,filename:a,open:r,onOpenChange:l}){let[n,i]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{i(!1)},[r]),(0,t.jsx)(k.Dialog,{open:r,onOpenChange:l,children:(0,t.jsxs)(k.DialogContent,{showCloseButton:!1,className:"max-w-[90vw] max-h-[90vh] p-0 overflow-hidden bg-black/90 ring-0",children:[(0,t.jsx)(k.DialogClose,{render:(0,t.jsx)(h.Button,{variant:"ghost",className:"absolute top-2 right-2 z-10 h-8 w-8 p-0 text-white hover:bg-white/20 hover:text-white"}),"aria-label":"Close",children:(0,t.jsx)(v.X,{className:"h-4 w-4"})}),e&&(0,t.jsx)(t.Fragment,{children:n?(0,t.jsx)("div",{className:"overflow-auto max-w-[90vw] max-h-[90vh]",children:(0,t.jsx)("img",{src:e,alt:a,onClick:()=>i(!1),className:"w-auto h-auto max-w-none cursor-zoom-out"})}):(0,t.jsx)("img",{src:e,alt:a,onClick:()=>i(!0),className:"max-w-full max-h-[85vh] object-contain cursor-zoom-in mx-auto"})}),(0,t.jsx)("span",{className:"absolute bottom-2 left-3 text-xs text-white/70 truncate max-w-[60%]",children:a})]})})}var C=e.i(201853),T=e.i(680538);function I({url:e,filename:r,open:n,onOpenChange:i}){let{t:o}=(0,l.useI18n)(),[d,c]=(0,s.useState)(null),[x,u]=(0,s.useState)(!1),[m,h]=(0,s.useState)(null);(0,s.useEffect)(()=>{if(!n||!e){c(null),h(null);return}let t=!1;return u(!0),h(null),c(null),fetch(e).then(e=>{let t=e.headers.get("content-length");if(t&&parseInt(t,10)>1048576)throw Error("FILE_TOO_LARGE");return e.text()}).then(e=>{if(e.length>1048576)throw Error("FILE_TOO_LARGE");t||(c(e),u(!1))}).catch(e=>{t||(e instanceof Error&&"FILE_TOO_LARGE"===e.message?h(o("assets.fileTooLarge")):h(o("assets.previewError")),u(!1))}),()=>{t=!0}},[n,e,o]);let p=r.split(".").pop()?.toLowerCase();return(0,t.jsx)(k.Dialog,{open:n,onOpenChange:i,children:(0,t.jsxs)(k.DialogContent,{className:"max-w-3xl max-h-[80vh] flex flex-col",children:[(0,t.jsx)("h3",{className:"text-sm font-medium truncate px-4 pt-4",children:r}),(0,t.jsx)("div",{className:"flex-1 overflow-auto px-4 pb-4 pt-2",children:(()=>{if(x)return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 gap-2",children:[(0,t.jsx)(a.Loader2,{className:"size-5 animate-spin text-muted-foreground"}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:o("assets.loadingPreview")})]});if(m)return(0,t.jsx)("p",{className:"text-sm text-destructive",children:m});if(null===d)return null;if("md"===p)return(0,t.jsx)("div",{className:"prose prose-sm dark:prose-invert max-w-none",children:(0,t.jsx)(C.default,{remarkPlugins:[T.default],children:d})});if("json"===p){let e;try{e=JSON.stringify(JSON.parse(d),null,2)}catch{e=d}return(0,t.jsx)("pre",{className:"font-mono text-xs whitespace-pre-wrap text-foreground",children:e})}return(0,t.jsx)("pre",{className:"font-mono text-sm whitespace-pre-wrap text-foreground",children:d})})()})]})})}var O=e.i(799038),D=e.i(47816),E=e.i(943931);function R({...e}){return(0,t.jsx)(O.Dialog.Root,{"data-slot":"sheet",...e})}function A({...e}){return(0,t.jsx)(O.Dialog.Portal,{"data-slot":"sheet-portal",...e})}function B({className:e,...s}){return(0,t.jsx)(O.Dialog.Backdrop,{"data-slot":"sheet-overlay",className:(0,D.cn)("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",e),...s})}function $({className:e,children:s,side:a="right",showCloseButton:r=!0,...l}){return(0,t.jsxs)(A,{children:[(0,t.jsx)(B,{}),(0,t.jsxs)(O.Dialog.Popup,{"data-slot":"sheet-content","data-side":a,className:(0,D.cn)("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",e),...l,children:[s,r&&(0,t.jsxs)(O.Dialog.Close,{"data-slot":"sheet-close",render:(0,t.jsx)(h.Button,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[(0,t.jsx)(E.XIcon,{}),(0,t.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function P({className:e,...s}){return(0,t.jsx)("div",{"data-slot":"sheet-header",className:(0,D.cn)("flex flex-col gap-0.5 p-4",e),...s})}function L({className:e,...s}){return(0,t.jsx)(O.Dialog.Title,{"data-slot":"sheet-title",className:(0,D.cn)("font-heading text-base font-medium text-foreground",e),...s})}function z({className:e,...s}){return(0,t.jsx)(O.Dialog.Description,{"data-slot":"sheet-description",className:(0,D.cn)("text-sm text-muted-foreground",e),...s})}var F=e.i(24887),M=e.i(174145);let _=(0,i.createServerReference)("40e0e30d8c635f001b5014c2e2755d52b89c9ec792",i.callServer,void 0,i.findSourceMapURL,"getTaskOverview");var U=e.i(107414),G=e.i(258114);let V=(0,G.default)("calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]),W=(0,G.default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);var H=e.i(2139);function J({open:e,onOpenChange:a,taskId:r}){let{t:n}=(0,l.useI18n)(),[i,o]=(0,s.useState)(null),[d,c]=(0,s.useTransition)();(0,s.useEffect)(()=>{r&&e?c(async()=>{let e=await _(r);e&&o(e)}):o(null)},[r,e]);let x=i?U.BOARD_COLUMNS.find(e=>e.id===i.status):null,u=i?U.PRIORITY_CONFIG[i.priority]:null,m=i?.executions?.[0]??null;return(0,t.jsx)(R,{open:e,onOpenChange:a,children:(0,t.jsxs)($,{side:"right",className:"w-[380px] sm:max-w-[380px] p-0",children:[(0,t.jsxs)(P,{className:"px-4 pt-4 pb-3 border-b border-border",children:[(0,t.jsx)(L,{className:"text-base font-semibold leading-tight pr-8",children:i?.title??""}),(0,t.jsx)(z,{className:"sr-only",children:n("taskDrawer.title")}),i&&(0,t.jsxs)("div",{className:"flex items-center gap-2 mt-2",children:[x&&(0,t.jsxs)(M.Badge,{variant:"secondary",className:"text-xs",children:[(0,t.jsx)("span",{className:`inline-block w-2 h-2 rounded-full mr-1.5 ${x.color}`}),x.label]}),u&&(0,t.jsx)(M.Badge,{variant:"secondary",className:`text-xs ${u.color}`,children:u.label})]})]}),(0,t.jsx)(F.ScrollArea,{className:"flex-1 h-[calc(100%-80px)]",children:d&&!i?(0,t.jsx)("div",{className:"flex items-center justify-center h-32 text-sm text-muted-foreground",children:n("assets.loading")}):i?(0,t.jsxs)("div",{className:"p-4 space-y-4",children:[(0,t.jsxs)("section",{children:[(0,t.jsx)("h4",{className:"text-xs font-medium text-muted-foreground mb-1",children:n("taskDrawer.description")}),(0,t.jsx)("p",{className:"text-sm text-foreground whitespace-pre-wrap",children:i.description||n("taskDrawer.noDescription")})]}),i.labels.length>0&&(0,t.jsxs)("section",{children:[(0,t.jsx)("h4",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:n("taskDrawer.labels")}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:i.labels.map(e=>(0,t.jsx)(M.Badge,{variant:"secondary",className:"text-xs",style:{backgroundColor:`${e.label.color}20`,color:e.label.color,borderColor:`${e.label.color}40`},children:e.label.name},e.label.id))})]}),(0,t.jsxs)("section",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,t.jsx)(V,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:n("taskDrawer.createdAt")}),(0,t.jsx)("span",{className:"text-foreground",children:new Date(i.createdAt).toLocaleDateString()})]}),(0,t.jsxs)("section",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,t.jsx)(W,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:n("taskDrawer.resources")}),(0,t.jsx)("span",{className:"text-foreground",children:i._count.assets})]}),(0,t.jsxs)("section",{children:[(0,t.jsxs)("h4",{className:"text-xs font-medium text-muted-foreground mb-1.5 flex items-center gap-1.5",children:[(0,t.jsx)(H.PlayCircle,{className:"h-3.5 w-3.5"}),n("taskDrawer.lastExecution")]}),m?(0,t.jsxs)("div",{className:"rounded-md border border-border p-2.5 text-sm",children:[(0,t.jsx)(M.Badge,{variant:"secondary",className:"text-xs mb-1.5",children:m.status}),m.summary&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground line-clamp-4",children:m.summary.slice(0,200)})]}):(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:n("taskDrawer.noExecution")})]})]}):null})]})})}var K=e.i(151201);e.s(["AssetsPageClient",0,function({allWorkspaces:e,initialWorkspaceId:i,initialProjectId:d,initialAssets:c}){let x,{t:u}=(0,l.useI18n)(),[m,h]=(0,s.useTransition)(),[f,j]=(0,s.useState)(i),[v,b]=(0,s.useState)(d),[y,k]=(0,s.useState)(c),[C,T]=(0,s.useState)(null),O=e.find(e=>e.id===f),D=O?.projects??[],E=(0,s.useCallback)(e=>{e?h(async()=>{k(await o(e))}):k([])},[h]),[R,A]=(0,s.useState)(null),B=R?R.mimeType?.startsWith("image/")?"image":/\.(txt|md|json)$/i.test(R.filename)?"text":null:null,$=async e=>{try{let t=await fetch("/api/internal/assets/reveal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.path})});if(!t.ok){let e=await t.json().catch(()=>({}));K.toast.error(e.error||"Failed to reveal file")}}catch{K.toast.error("Failed to reveal file")}},P=async e=>{let t=y.find(t=>t.id===e);confirm(u("assets.deleteConfirm",{filename:t?.filename??e}))&&(await (0,n.deleteAsset)(e),E(v))};return(0,t.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,t.jsx)(r.SubPageNav,{workspaceId:f}),(0,t.jsxs)("div",{className:"header-sm flex items-center gap-3 px-6 py-2",children:[(0,t.jsxs)(N.Select,{value:f,onValueChange:t=>t&&(t=>{if(t===f)return;j(t);let s=e.find(e=>e.id===t),a=s?.projects[0]??null;b(a?.id??null),E(a?.id??null)})(t),children:[(0,t.jsx)(N.SelectTrigger,{className:"h-8 w-auto min-w-[120px]",children:(0,t.jsx)("span",{className:"truncate",children:e.find(e=>e.id===f)?.name??f})}),(0,t.jsx)(N.SelectContent,{children:e.map(e=>(0,t.jsx)(N.SelectItem,{value:e.id,children:e.name},e.id))})]}),D.length>0&&(0,t.jsxs)(N.Select,{value:v??"",onValueChange:e=>e&&void(e!==v&&(b(e),E(e))),children:[(0,t.jsx)(N.SelectTrigger,{className:"h-8 w-auto min-w-[140px]",children:(0,t.jsx)("span",{className:"truncate",children:(x=D.find(e=>e.id===v))?x.alias?`${x.name} (${x.alias})`:x.name:""})}),(0,t.jsx)(N.SelectContent,{children:D.map(e=>(0,t.jsxs)(N.SelectItem,{value:e.id,children:[e.name,e.alias?` (${e.alias})`:""]},e.id))})]}),(0,t.jsx)("div",{className:"ml-auto",children:(0,t.jsx)(w,{allWorkspaces:e,initialWsId:f,initialProjectId:v,onUploaded:e=>{e===v&&E(v)}})})]}),(0,t.jsx)("div",{className:"flex-1 overflow-auto px-6 py-4",children:(0,t.jsxs)("div",{className:`relative ${m?"opacity-40 pointer-events-none":""} transition-opacity`,children:[m&&(0,t.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:(0,t.jsx)(a.Loader2,{className:"size-5 animate-spin text-muted-foreground"})}),0===D.length?(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-16 text-center",children:[(0,t.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:u("assets.noProject")}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground/60",children:u("assets.noProjectHint")})]}):(0,t.jsx)(g,{assets:y.map(e=>({...e,taskId:e.task?.id??null,taskTitle:e.task?.title??null})),onPreview:e=>{let t=e.mimeType?.startsWith("image/"),s=/\.(txt|md|json)$/i.test(e.filename);(t||s)&&A(e)},onReveal:$,onDelete:P,onTaskClick:T})]})}),(0,t.jsx)(S,{imageUrl:"image"===B&&R?p(R.path):null,filename:R?.filename??"",open:"image"===B,onOpenChange:e=>{e||A(null)}}),(0,t.jsx)(I,{url:"text"===B&&R?p(R.path):null,filename:R?.filename??"",open:"text"===B,onOpenChange:e=>{e||A(null)}}),(0,t.jsx)(J,{open:!!C,onOpenChange:e=>{e||T(null)},taskId:C})]})}],99752)}]);