@minimalcorp/tsunagi 0.4.3 → 0.4.4

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 (264) hide show
  1. package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  2. package/.next/standalone/apps/web/.next/build-manifest.json +6 -6
  3. package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/apps/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  5. package/.next/standalone/apps/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  6. package/.next/standalone/apps/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
  8. package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +7 -7
  9. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  10. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  11. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  12. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  13. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/apps/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  15. package/.next/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  16. package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
  18. package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +14 -14
  19. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  20. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  21. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  22. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  23. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  24. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  25. package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
  26. package/.next/standalone/apps/web/.next/server/app/index.rsc +16 -16
  27. package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  28. package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +16 -16
  29. package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +4 -4
  30. package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +9 -9
  31. package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  32. package/.next/standalone/apps/web/.next/server/app/page/build-manifest.json +3 -3
  33. package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
  34. package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/apps/web/.next/server/app/settings/page/build-manifest.json +3 -3
  36. package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  37. package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
  39. package/.next/standalone/apps/web/.next/server/app/settings.rsc +16 -16
  40. package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  41. package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  42. package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  43. package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  44. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  45. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  46. package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page/build-manifest.json +3 -3
  47. package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
  48. package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__005.hr~._.js +3 -0
  50. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0ico9~m._.js → [root-of-the-server]__00puz_c._.js} +2 -2
  51. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__02o_btn._.js +1 -7
  52. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__02q5-1m._.js +3 -0
  53. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0n2qong._.js → [root-of-the-server]__03o2h-e._.js} +2 -2
  54. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0sha5xx._.js → [root-of-the-server]__05wew2i._.js} +2 -2
  55. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__06if0s-._.js +3 -0
  56. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0_kp63e._.js +4 -0
  57. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0_w.d9j._.js +3 -0
  58. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0a58evg._.js +3 -0
  59. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0dq2eci._.js +3 -0
  60. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0zb._6y._.js → [root-of-the-server]__0ea3~0o._.js} +2 -2
  61. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0g_zo8g._.js +3 -0
  62. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0gltout._.js +3 -0
  63. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0hhrm~l._.js +3 -0
  64. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0.c7m6m._.js → [root-of-the-server]__0i9qg2.._.js} +2 -2
  65. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0mzj6x_._.js +3 -0
  66. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0e2_bho._.js → [root-of-the-server]__0qm.zmb._.js} +2 -2
  67. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0a09w3z._.js → [root-of-the-server]__0ttok7z._.js} +2 -2
  68. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0wi.4eb._.js +3 -0
  69. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0tlibqy._.js → [root-of-the-server]__0zl.~s9._.js} +2 -2
  70. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__10~ets0._.js +3 -0
  71. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0-oerzu._.js +3 -0
  72. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0.ix5hx._.js +3 -0
  73. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0.q7f2f._.js +3 -0
  74. package/.next/standalone/apps/web/.next/server/chunks/ssr/_03lm.~7._.js +2 -2
  75. package/.next/standalone/apps/web/.next/server/chunks/ssr/_05fp9lp._.js +3 -0
  76. package/.next/standalone/apps/web/.next/server/chunks/ssr/_07aaj~c._.js +3 -0
  77. package/.next/standalone/apps/web/.next/server/chunks/ssr/_087.824._.js +7 -0
  78. package/.next/standalone/apps/web/.next/server/chunks/ssr/_087u93h._.js +7 -0
  79. package/.next/standalone/apps/web/.next/server/chunks/ssr/_09br4yx._.js +2 -2
  80. package/.next/standalone/apps/web/.next/server/chunks/ssr/{_0g.cd6a._.js → _0cll8v8._.js} +4 -4
  81. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0ewpv3x._.js +3 -0
  82. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0f-.2d8._.js +3 -0
  83. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0gzw46w._.js +3 -0
  84. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0j_5kw4._.js +3 -0
  85. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0lqioz1._.js +3 -0
  86. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0nrfrqx._.js +3 -0
  87. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0pnf7yr._.js +14 -0
  88. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0tgd956._.js +3 -0
  89. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0~zpobw._.js +8 -0
  90. package/.next/standalone/apps/web/.next/server/chunks/ssr/_10gzkhj._.js +3 -0
  91. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_settings_page_tsx_0i6itlb._.js +1 -1
  92. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_tasks_layout_tsx_0hv_h45._.js +3 -0
  93. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_components_ui_input_tsx_10tfquc._.js +3 -0
  94. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0.j_mel._.js +3 -0
  95. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0.k090e._.js +3 -0
  96. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_006_~bg._.js +3 -0
  97. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_03f~che._.js → node_modules_00srdmg._.js} +2 -2
  98. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_01x9jhr._.js +3 -0
  99. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0246kbi._.js +26 -0
  100. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_042s455._.js +3 -0
  101. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_048a-3e._.js +3 -0
  102. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_04wp5xt._.js +3 -0
  103. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_d3-scale_src_0~kn3a6._.js → node_modules_05~6lsn._.js} +2 -2
  104. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_06dbwfx._.js +17 -0
  105. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_0o900rn._.js → node_modules_06e-q5p._.js} +2 -2
  106. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0727fxi._.js +3 -0
  107. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_07o4lep._.js +3 -0
  108. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_09he~u6._.js +3 -0
  109. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_09t5n8h._.js +3 -0
  110. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0_-izm4._.js +17 -0
  111. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0_09.d-._.js → node_modules_0a5ccwh._.js} +3 -3
  112. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0adf7g.._.js +3 -0
  113. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0awk6-u._.js +3 -0
  114. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0b.92cv._.js +31 -0
  115. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0d4bnxq._.js +3 -0
  116. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0e535.c._.js +3 -0
  117. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0mogzs3._.js → node_modules_0e805wu._.js} +2 -2
  118. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0eany8j._.js +3 -0
  119. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0k6b-s.._.js → node_modules_0ef084~._.js} +2 -2
  120. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0e~.z5.._.js +3 -0
  121. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0f_fmlz._.js +3 -0
  122. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0fhe2y1._.js +3 -0
  123. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0gbqzyp._.js +3 -0
  124. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0h9.n77._.js +3 -0
  125. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0j3cdoi._.js +3 -0
  126. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0l1i1-g._.js +17 -0
  127. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0mw17em._.js +3 -0
  128. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0n2.ctn._.js +17 -0
  129. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0nroyub._.js +3 -0
  130. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0o7wk9s._.js +17 -0
  131. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_08av5m5._.js → node_modules_0qj8sd8._.js} +2 -2
  132. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0qlz.rw._.js +3 -0
  133. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0qnxp8p._.js +11 -0
  134. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0r3rp45._.js +3 -0
  135. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0rb60-8._.js +3 -0
  136. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0sxzkm4._.js +3 -0
  137. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0ufhiu0._.js +45 -0
  138. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0ut-0ui._.js +31 -0
  139. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0xwob0c._.js +11 -0
  140. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0ygvzv3._.js +26 -0
  141. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0z.b_s6._.js +3 -0
  142. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0zffsu.._.js +17 -0
  143. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0~dnzen._.js +3 -0
  144. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0~flrfh._.js +17 -0
  145. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0~mdhr-._.js +17 -0
  146. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0~wmeou._.js +3 -0
  147. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_117ifaa._.js +3 -0
  148. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_11vhz_f._.js +3 -0
  149. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_11x_vv~._.js +3 -0
  150. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_12fg7ff._.js +3 -0
  151. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_12nhtkv._.js +45 -0
  152. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_katex_dist_katex_mjs_0kp9p~f._.js +3 -0
  153. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_katex_dist_katex_mjs_0v075ak._.js +3 -0
  154. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_lodash-es_0a8e-..._.js +3 -0
  155. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_06.qh_h._.js +3 -0
  156. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_0rr2bb.._.js +9 -0
  157. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js +6 -0
  158. package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +6 -6
  159. package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
  160. package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  161. package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
  162. package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
  163. package/.next/standalone/apps/web/.next/static/chunks/01xlw8hd842-c.js +1 -0
  164. package/.next/standalone/apps/web/.next/static/chunks/03lipngy2bzgv.js +1 -0
  165. package/.next/standalone/apps/web/.next/static/chunks/05802kvs1cqcr.js +1 -0
  166. package/.next/standalone/apps/web/.next/static/chunks/07j468amjp9_u.js +5 -0
  167. package/.next/standalone/apps/web/.next/static/chunks/09hkvp9eixhrd.js +6 -0
  168. package/.next/standalone/apps/web/.next/static/chunks/09tryc7egq1d-.js +1 -0
  169. package/.next/standalone/apps/web/.next/static/chunks/0_8u4hou0pvbl.js +1 -0
  170. package/.next/standalone/apps/web/.next/static/chunks/0b9~.0l.ortto.js +12 -0
  171. package/.next/standalone/apps/web/.next/static/chunks/0c2kbud31dfzp.js +5 -0
  172. package/.next/standalone/apps/web/.next/static/chunks/0fa94q8j1ob9n.js +1 -0
  173. package/.next/standalone/apps/web/.next/static/chunks/0h2bvf6c.2me1.js +5 -0
  174. package/.next/standalone/apps/web/.next/static/chunks/0hejs.0.z-zgt.js +1 -0
  175. package/.next/standalone/apps/web/.next/static/chunks/0ibllnu3qqge2.js +2 -0
  176. package/.next/standalone/apps/web/.next/static/chunks/0j1vs.65on.~..js +1 -0
  177. package/.next/standalone/apps/web/.next/static/chunks/{1662w8cu9n67h.js → 0kn6j_p.m8q~k.js} +2 -2
  178. package/.next/standalone/apps/web/.next/static/chunks/0kp9e7au9n6c..js +1 -0
  179. package/.next/standalone/apps/web/.next/static/chunks/{0t3d~cifmhdv9.js → 0lvka-xs16a~i.js} +2 -2
  180. package/.next/standalone/apps/web/.next/static/chunks/0nucsyd1g6g0i.js +1 -0
  181. package/.next/standalone/apps/web/.next/static/chunks/0tb8r64zrr_gb.js +1 -0
  182. package/.next/standalone/apps/web/.next/static/chunks/0u5h8b5lgm1ki.css +4 -0
  183. package/.next/standalone/apps/web/.next/static/chunks/0v18jp7h2x2n-.js +1 -0
  184. package/.next/standalone/apps/web/.next/static/chunks/{0yp~t_.pozr-d.js → 0w_b4db5lrkt8.js} +10 -10
  185. package/.next/standalone/apps/web/.next/static/chunks/148ko75-ihlmp.js +1 -0
  186. package/.next/standalone/apps/web/.next/static/chunks/14tyifilnj_k5.js +31 -0
  187. package/.next/standalone/apps/web/.next/static/chunks/14~~793b3ie-s.js +7 -0
  188. package/.next/standalone/apps/web/.next/static/chunks/15d92uby6n-v3.js +1 -0
  189. package/.next/standalone/apps/web/.next/static/chunks/1600wck5zi5.~.js +1 -0
  190. package/.next/standalone/apps/web/.next/static/chunks/162ni7xyo_8_-.js +1 -0
  191. package/.next/standalone/apps/web/.next/static/chunks/16xeyatjk8-e0.js +1 -0
  192. package/.next/standalone/apps/web/.next/static/chunks/{turbopack-0s_.rdhg458.a.js → turbopack-0i5dxy28w4s._.js} +1 -1
  193. package/dist/server/routes/env.js +38 -0
  194. package/npm-shrinkwrap.json +5 -5
  195. package/package.json +1 -1
  196. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__00qk65u._.js +0 -3
  197. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__00xeq7r._.js +0 -3
  198. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__03zxnl6._.js +0 -3
  199. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0cl-0al._.js +0 -3
  200. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0ff1foz._.js +0 -3
  201. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0hhfi7s._.js +0 -3
  202. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0mhr-tu._.js +0 -3
  203. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0qtqq5d._.js +0 -3
  204. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__10s~ptn._.js +0 -3
  205. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__13fmof_._.js +0 -3
  206. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__13yzr3f._.js +0 -4
  207. package/.next/standalone/apps/web/.next/server/chunks/ssr/_01~tp-i._.js +0 -7
  208. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0835zmv._.js +0 -14
  209. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0h-u~an._.js +0 -7
  210. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0kkt7a_._.js +0 -7
  211. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0ts4rpp._.js +0 -3
  212. package/.next/standalone/apps/web/.next/server/chunks/ssr/_13ne7ej._.js +0 -3
  213. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_tasks_[id]_page_tsx_0jshsm2._.js +0 -8
  214. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_06jdmu~._.js +0 -3
  215. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_07xyphe._.js +0 -3
  216. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0ac2-~z._.js +0 -3
  217. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0gglkx9._.js +0 -3
  218. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0h4h_aw._.js +0 -3
  219. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0i5v48e._.js +0 -11
  220. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0j1i92p._.js +0 -3
  221. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0k3x6_w._.js +0 -26
  222. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0mwl~df._.js +0 -3
  223. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0omx0o-._.js +0 -17
  224. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0q8yuvq._.js +0 -3
  225. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0rnsluy._.js +0 -31
  226. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0t-jssg._.js +0 -3
  227. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0t6ysh_._.js +0 -26
  228. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0ut2-yw._.js +0 -3
  229. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0vq~hzy._.js +0 -3
  230. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0w6fm3f._.js +0 -3
  231. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0yb2sh9._.js +0 -31
  232. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0yc~s8p._.js +0 -11
  233. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0zi0w9_._.js +0 -45
  234. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0zzdoud._.js +0 -45
  235. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_d3-shape_src_arc_135n374.js +0 -3
  236. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_lodash-es_0yap81y._.js +0 -3
  237. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_0zerlct._.js +0 -3
  238. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_04x.vut._.js +0 -3
  239. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_0cje6no._.js +0 -3
  240. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_0w_54yy._.js +0 -3
  241. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-FMBD7UC4_mjs_0dox0y0._.js +0 -17
  242. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-YZCP3GAM_mjs_04sswi2._.js +0 -3
  243. package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_next_dist_0xdsm99._.js +0 -6
  244. package/.next/standalone/apps/web/.next/static/chunks/026168y2bx0d~.js +0 -1
  245. package/.next/standalone/apps/web/.next/static/chunks/04ygsac3q3ar..js +0 -1
  246. package/.next/standalone/apps/web/.next/static/chunks/08s3o7outb~0z.js +0 -5
  247. package/.next/standalone/apps/web/.next/static/chunks/0a2u28f44p7t..js +0 -1
  248. package/.next/standalone/apps/web/.next/static/chunks/0dgu~u-1e5b7-.js +0 -5
  249. package/.next/standalone/apps/web/.next/static/chunks/0e8u7rqrqfiiy.js +0 -1
  250. package/.next/standalone/apps/web/.next/static/chunks/0fsi8lw5utejl.js +0 -1
  251. package/.next/standalone/apps/web/.next/static/chunks/0gxhy80~c0gvp.js +0 -1
  252. package/.next/standalone/apps/web/.next/static/chunks/0lxvbkhh7amha.js +0 -1
  253. package/.next/standalone/apps/web/.next/static/chunks/0mqupo29wme26.js +0 -7
  254. package/.next/standalone/apps/web/.next/static/chunks/0mtq6r6l61k.f.js +0 -31
  255. package/.next/standalone/apps/web/.next/static/chunks/0n72w4sxrwoj4.js +0 -5
  256. package/.next/standalone/apps/web/.next/static/chunks/0o1bh_qwdvmid.css +0 -4
  257. package/.next/standalone/apps/web/.next/static/chunks/0rn1kcmsfzjmz.js +0 -12
  258. package/.next/standalone/apps/web/.next/static/chunks/0uugzgqr-ug3_.js +0 -5
  259. package/.next/standalone/apps/web/.next/static/chunks/0ysgl4vmer~v5.js +0 -6
  260. package/.next/standalone/apps/web/.next/static/chunks/11rs2-0jl1rzr.js +0 -2
  261. package/.next/standalone/apps/web/.next/static/chunks/13_9zaka0bif_.js +0 -1
  262. /package/.next/standalone/apps/web/.next/static/{h5xwYydO3EbBSaceTFcLG → 224zD8YM7ARX7LuhyyCln}/_buildManifest.js +0 -0
  263. /package/.next/standalone/apps/web/.next/static/{h5xwYydO3EbBSaceTFcLG → 224zD8YM7ARX7LuhyyCln}/_clientMiddlewareManifest.js +0 -0
  264. /package/.next/standalone/apps/web/.next/static/{h5xwYydO3EbBSaceTFcLG → 224zD8YM7ARX7LuhyyCln}/_ssgManifest.js +0 -0
@@ -0,0 +1,5 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,82341,e=>{"use strict";var t=e.i(18050),s=e.i(71645),a=e.i(18566),r=e.i(471),l=e.i(75254);let n=(0,l.default)("flask-conical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]]);var i=e.i(70935);let o=(0,l.default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]),c=(0,l.default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);var d=e.i(55716),u=e.i(46349),u=u;let m=(0,l.default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);var x=e.i(85902);function h({node:e,isSelected:s,isExpanded:a,depth:r,onSelect:l,onToggle:n}){let i=e.children&&e.children.length>0;return(0,t.jsxs)("div",{onClick:()=>{l(),i&&n&&!a&&n()},className:`
2
+ flex items-center gap-2 px-2 py-1.5 rounded cursor-pointer
3
+ transition-colors
4
+ ${s?"bg-accent":"hover:bg-accent"}
5
+ `,style:{paddingLeft:`${16*r+8}px`},children:[i&&(0,t.jsx)(x.Button,{variant:"ghost",size:"icon-xs",onClick:e=>{e.stopPropagation(),n&&n()},className:"size-4",children:a?(0,t.jsx)(m,{className:"w-3 h-3 text-muted-foreground"}):(0,t.jsx)(u.default,{className:"w-3 h-3 text-muted-foreground"})}),!i&&(0,t.jsx)("div",{className:"w-3"}),(0,t.jsx)("div",{className:"text-foreground",children:(()=>{switch(e.type){case"global":return(0,t.jsx)(o,{className:"w-4 h-4"});case"owner":return(0,t.jsx)(c,{className:"w-4 h-4"});case"repo":return(0,t.jsx)(d.GitBranch,{className:"w-4 h-4"})}})()}),(0,t.jsx)("span",{className:"text-sm text-foreground truncate",children:e.label})]})}function p({selectedNode:e,onNodeSelect:a,refreshKey:r}){let[l,n]=(0,s.useState)([]),[o,c]=(0,s.useState)(new Set),[d,u]=(0,s.useState)(!0);(0,s.useEffect)(()=>{let e=localStorage.getItem("tsunagi:env-tree-expanded");if(e)try{let t=JSON.parse(e);c(new Set(t))}catch(e){console.error("Failed to parse expanded owners:",e)}},[]),(0,s.useEffect)(()=>{localStorage.setItem("tsunagi:env-tree-expanded",JSON.stringify([...o]))},[o]),(0,s.useEffect)(()=>{(async()=>{u(!0);try{let e=await fetch((0,i.apiUrl)("/api/owners"));if(!e.ok)throw Error("Failed to fetch owners");let t=((await e.json()).data.owners||[]).map(e=>({id:`owner:${e.name}`,type:"owner",label:e.name,scope:"owner",owner:e.name,children:e.repositories.map(e=>({id:`repo:${e.owner}/${e.repo}`,type:"repo",label:e.repo,scope:"repo",owner:e.owner,repo:e.repo}))}));n([{id:"global",type:"global",label:"Global",scope:"global"},...t])}catch(e){console.error("Failed to load tree:",e)}finally{u(!1)}})()},[r]);let m=(s,r=0)=>{let l=e?.scope===s.scope&&e?.owner===s.owner&&e?.repo===s.repo,n=o.has(s.id);return(0,t.jsxs)("div",{children:[(0,t.jsx)(h,{node:s,isSelected:l,isExpanded:n,depth:r,onSelect:()=>{a({scope:s.scope,owner:s.owner,repo:s.repo,label:s.label})},onToggle:()=>{var e;return e=s.id,void c(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})}}),n&&s.children?.map(e=>m(e,r+1))]},s.id)};return d?(0,t.jsx)("div",{className:"p-4 text-muted-foreground text-sm",children:"Loading..."}):0===l.length?(0,t.jsx)("div",{className:"p-4 text-muted-foreground text-sm",children:"No repositories found"}):(0,t.jsx)("div",{className:"h-full overflow-y-auto",children:(0,t.jsx)("div",{className:"p-2",children:l.map(e=>m(e))})})}var g=e.i(7233),f=e.i(37727),j=e.i(43531);let v=(0,l.default)("clipboard-paste",[["path",{d:"M11 14h10",key:"1w8e9d"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v1.344",key:"1e62lh"}],["path",{d:"m17 18 4-4-4-4",key:"z2g111"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113",key:"bjbb7m"}],["rect",{x:"8",y:"2",width:"8",height:"4",rx:"1",key:"ublpy"}]]),b=/^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/,N=/^(?:export\s+|set\s+|\$env:)/i;var y=e.i(57024),k=e.i(86536);let w=(0,l.default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var C=e.i(27612),S=e.i(88699),L=e.i(10012);function z({variable:e,onToggle:a,onDelete:r,onUpdate:l,isDeletable:n=!0}){let[i,o]=(0,s.useState)(!1),[c,d]=(0,s.useState)(!1),[u,m]=(0,s.useState)(!1),[h,p]=(0,s.useState)(e.value),g=async t=>{d(!0);try{await a(e.key,t.target.checked)}finally{d(!1)}},v=async()=>{await r(e.key)},b=async()=>{try{await l(e.key,h),m(!1)}catch(e){console.error("Failed to update variable:",e),alert("Failed to update variable")}};return(0,t.jsxs)("div",{className:"border border-border rounded p-3 space-y-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-sm font-mono text-foreground",children:e.key}),!u&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer",children:[(0,t.jsx)("input",{type:"checkbox",checked:e.enabled,onChange:g,disabled:c,className:"w-4 h-4 cursor-pointer"}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"Enabled"})]}),(0,t.jsx)(x.Button,{variant:"ghost",size:"icon-lg",onClick:()=>o(!i),title:i?"Hide value":"Show value",children:i?(0,t.jsx)(w,{className:"w-4 h-4 text-muted-foreground"}):(0,t.jsx)(k.Eye,{className:"w-4 h-4 text-muted-foreground"})}),(0,t.jsx)(x.Button,{variant:"ghost",size:"icon-lg",onClick:()=>{m(!0),p(e.value)},title:"Edit",children:(0,t.jsx)(S.Pencil,{className:"w-4 h-4 text-muted-foreground"})}),n&&(0,t.jsx)(x.Button,{variant:"ghost",size:"icon-lg",onClick:v,title:"Delete",children:(0,t.jsx)(C.Trash2,{className:"w-4 h-4 text-destructive"})})]})]}),u?(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(L.Input,{type:"password",value:h,onChange:e=>p(e.target.value),className:"w-full font-mono",autoFocus:!0}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(x.Button,{variant:"outline",size:"sm",onClick:()=>{m(!1),p(e.value)},className:"active:scale-95",children:(0,t.jsx)(f.X,{className:"w-4 h-4"})}),(0,t.jsx)(x.Button,{size:"sm",onClick:b,className:"active:scale-95",children:(0,t.jsx)(j.Check,{className:"w-4 h-4"})})]})]}):(0,t.jsx)("div",{children:(0,t.jsx)(L.Input,{type:i?"text":"password",value:e.value,readOnly:!0,className:"w-full font-mono"})})]})}var E=e.i(37870),O=e.i(68995);let M=["ANTHROPIC_API_KEY","CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CONFIG_DIR","TSUNAGI_CLAUDE_PROFILE","CODEX_API_KEY","CODEX_ACCESS_TOKEN","CODEX_HOME","TSUNAGI_CODEX_PROFILE"];function $({selectedNode:e}){let[a,r]=(0,s.useState)([]),[l,n]=(0,s.useState)(!0),[o,c]=(0,s.useState)(null),[d,u]=(0,s.useState)(!1),[m,h]=(0,s.useState)(""),[p,k]=(0,s.useState)(""),[w,C]=(0,s.useState)(""),[S,P]=(0,s.useState)(null),D=async()=>{let t=new URLSearchParams({scope:e.scope});e.owner&&t.set("owner",e.owner),e.repo&&t.set("repo",e.repo);let s=await fetch((0,i.apiUrl)(`/api/env/list?${t}`));if(!s.ok)throw Error("Failed to fetch environment variables");return(await s.json()).data.envVars||[]};(0,s.useEffect)(()=>{(async()=>{n(!0),c(null);try{let t=new URLSearchParams({scope:e.scope});e.owner&&t.set("owner",e.owner),e.repo&&t.set("repo",e.repo);let s=await fetch((0,i.apiUrl)(`/api/env/list?${t}`));if(!s.ok)throw Error("Failed to fetch environment variables");let a=await s.json();r(a.data.envVars||[])}catch(e){console.error("Failed to load environment variables:",e),c("Failed to load environment variables")}finally{n(!1)}})()},[e]);let U=async(t,s)=>{try{if(!(await fetch((0,i.apiUrl)("/api/env/toggle"),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:t,scope:e.scope,owner:e.owner,repo:e.repo,enabled:s})})).ok)throw Error("Failed to toggle environment variable");r(e=>e.map(e=>e.key===t?{...e,enabled:s}:e))}catch(e){console.error("Failed to toggle environment variable:",e),r(e=>e.map(e=>e.key===t?{...e,enabled:!s}:e))}},I=async t=>{if(confirm(`Delete ${t}?`))try{let s=new URLSearchParams({key:t,scope:e.scope});if(e.owner&&s.set("owner",e.owner),e.repo&&s.set("repo",e.repo),!(await fetch((0,i.apiUrl)(`/api/env?${s}`),{method:"DELETE"})).ok)throw Error("Failed to delete environment variable");r(e=>e.filter(e=>e.key!==t))}catch(e){console.error("Failed to delete environment variable:",e),alert("Failed to delete environment variable")}},T=async(t,s)=>{try{if(!(await fetch((0,i.apiUrl)("/api/env"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:t,value:s,scope:e.scope,owner:e.owner,repo:e.repo})})).ok)throw Error("Failed to update environment variable");r(e=>e.map(e=>e.key===t?{...e,value:s}:e))}catch(e){throw console.error("Failed to update environment variable:",e),e}},F=async()=>{var t;if(C(""),!m.trim())return void C("Key is required");if(!p.trim())return void C("Value is required");if(t=m.trim(),/^[A-Z0-9_]+$/.test(t)?M.includes(t)?(C("エージェントの認証は Claude Profile / Codex Profile で設定してください"),!1):!a.some(e=>e.key===t)||(C(`Key "${t}" already exists in this scope`),!1):(C("Key must contain only uppercase letters, numbers, and underscores"),!1))try{if(!(await fetch((0,i.apiUrl)("/api/env"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:m.trim(),value:p.trim(),scope:e.scope,owner:e.owner,repo:e.repo})})).ok)throw Error("Failed to add environment variable");let t=new URLSearchParams({scope:e.scope});e.owner&&t.set("owner",e.owner),e.repo&&t.set("repo",e.repo);let s=await fetch((0,i.apiUrl)(`/api/env/list?${t}`));if(s.ok){let e=await s.json();r(e.data.envVars||[])}u(!1),h(""),k("")}catch(e){console.error("Failed to add environment variable:",e),C("Failed to add environment variable")}},B=()=>{u(!1),h(""),k(""),C("")},A=async t=>{C("");try{let s=await fetch((0,i.apiUrl)("/api/env/bulk"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({scope:e.scope,owner:e.owner,repo:e.repo,vars:t})});if(!s.ok){let e=await s.json().catch(()=>null);throw Error(e?.error||"Failed to import environment variables")}r(await D()),B(),y.toaster.create({type:"success",title:`Imported ${t.length} variable${1===t.length?"":"s"}`,description:t.map(e=>e.key).join(", ")})}catch(e){console.error("Failed to import environment variables:",e),C(e instanceof Error?e.message:"Failed to import environment variables")}};return l?(0,t.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,t.jsx)(E.LoadingSpinner,{size:"md",message:"Loading variables..."})}):o?(0,t.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"text-destructive text-sm",children:o})}):(0,t.jsxs)("div",{className:"h-full flex flex-col",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-lg font-bold text-foreground",children:"Environment Variables"}),!d&&(0,t.jsxs)(x.Button,{size:"sm",onClick:()=>u(!0),className:"active:scale-95",children:[(0,t.jsx)(g.Plus,{className:"w-4 h-4"}),"Add Variable"]})]}),(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto space-y-3",children:[d&&(0,t.jsxs)("div",{className:"border border-border rounded p-3 bg-accent space-y-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("div",{className:"text-sm font-medium text-foreground",children:"New Variable"}),(0,t.jsxs)("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",title:"Paste `export KEY=value` / `KEY=value` / `SET KEY=value` lines to import them all at once",children:[(0,t.jsx)(v,{className:"w-3.5 h-3.5"}),(0,t.jsx)("span",{children:"Paste to import"})]})]}),(0,t.jsx)(L.Input,{type:"text",value:m,onChange:e=>h(e.target.value.toUpperCase()),onPaste:e=>{let t=function(e){let t=new Map,s=0;for(let a of e.split(/\r?\n/)){let e=a.trim();if(!e||e.startsWith("#")||e.startsWith(";")||/^\[.*\]$/.test(e))continue;let r=b.exec(e.replace(N,""));if(!r){s++;continue}let l=function(e){let t=e.trim();if(t.length>=2){let e=t[0],s=t[t.length-1];if(('"'===e||"'"===e)&&e===s)return t.slice(1,-1)}return t}(r[2]);if(!l||l.startsWith("=")){s++;continue}let n=r[1].toUpperCase();t.delete(n),t.set(n,l)}return{entries:Array.from(t,([e,t])=>({key:e,value:t})),unparsedLineCount:s}}(e.clipboardData.getData("text"));if(!(t.entries.length>0&&0===t.unparsedLineCount))return;e.preventDefault(),C("");let s=t.entries.filter(e=>M.includes(e.key)),r=t.entries.filter(e=>!M.includes(e.key));if(s.length>0&&y.toaster.create({type:"warning",title:"Skipped reserved keys",description:`${s.map(e=>e.key).join(", ")} — エージェントの認証は Claude Profile / Codex Profile で設定してください`}),0===r.length)return;let l=new Set(a.map(e=>e.key)),n=r.filter(e=>l.has(e.key)).map(e=>e.key);n.length>0?P({entries:r,overwriting:n}):A(r)},placeholder:"VARIABLE_NAME",className:"w-full font-mono",autoFocus:!0}),(0,t.jsx)(L.Input,{type:"password",value:p,onChange:e=>k(e.target.value),placeholder:"value",className:"w-full font-mono"}),w&&(0,t.jsx)("div",{className:"text-xs text-destructive",children:w}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(x.Button,{variant:"outline",size:"sm",onClick:B,className:"active:scale-95",children:(0,t.jsx)(f.X,{className:"w-4 h-4"})}),(0,t.jsx)(x.Button,{size:"sm",onClick:F,className:"active:scale-95",children:(0,t.jsx)(j.Check,{className:"w-4 h-4"})})]})]}),0!==a.length||d?a.map(e=>(0,t.jsx)(z,{variable:e,onToggle:U,onDelete:I,onUpdate:T,isDeletable:!0},e.key)):(0,t.jsx)("div",{className:"text-center text-muted-foreground text-sm py-4",children:"No environment variables"})]}),(0,t.jsx)(O.ConfirmDialog,{open:null!==S,onOpenChange:({open:e})=>{e||P(null)},title:"Overwrite existing variables?",message:(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("p",{children:"The following variables already exist in this scope and will be overwritten:"}),(0,t.jsx)("ul",{className:"font-mono text-foreground list-disc pl-5",children:S?.overwriting.map(e=>(0,t.jsx)("li",{children:e},e))})]}),confirmLabel:"Overwrite",variant:"danger",onConfirm:()=>{S&&A(S.entries)}})]})}var P=e.i(61653),P=P,D=e.i(78917);let U=(0,l.default)("log-in",[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]]),I=(0,l.default)("user-round",[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]]);var T=e.i(28962),F=e.i(52088),B=e.i(1048),A=e.i(67211),u=u;async function R(e,t){let s=await fetch((0,i.apiUrl)(e),t),a=await s.json().catch(()=>null);if(!s.ok||a?.data===void 0)throw Error(a?.error||`HTTPエラー: ${s.status}`);return a.data}function _(e,t){return R(e,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}function G(e){return e instanceof Error?e.message:String(e)}function X({children:e}){return(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-2 rounded-md border border-border bg-muted/30 px-3 py-2 text-sm",children:e})}function V({label:e,hint:s,children:a}){return(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:e}),a,s&&(0,t.jsx)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:s})]})}function H({children:e}){let[a,r]=(0,s.useState)(!1);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("button",{type:"button",onClick:()=>r(e=>!e),className:"flex items-center gap-1 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[(0,t.jsx)(u.default,{className:`size-3.5 transition-transform ${a?"rotate-90":""}`}),"詳細設定"]}),a&&(0,t.jsx)("div",{className:"mt-3 flex flex-col gap-3 border-l border-border pl-3",children:e})]})}function q({children:e}){return(0,t.jsx)("code",{className:"rounded bg-muted px-1",children:e})}let W={claude:"ブラウザで認証してください。ブラウザが開かない場合は表示された URL を開き、表示されたコードをこのターミナルに貼り付けます。",codex:"ブラウザで認証してください。ブラウザが開かない場合は表示された URL を開きます。ログイン済みの場合、今のログインはこの時点で解除されています。"};function J({sessionId:e}){let[a,r]=(0,s.useState)(""),[l,n]=(0,s.useState)(!1),[i,o]=(0,s.useState)(null);return(0,t.jsxs)("form",{onSubmit:t=>{t.preventDefault(),n(!0),o(null),R(`/api/agent-profiles/login/${e}/callback`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:a})}).then(()=>r("")).catch(e=>o(G(e))).finally(()=>n(!1))},className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"認証後にブラウザが 127.0.0.1 のページを開けなかったら、そのアドレスバーの URL を貼り付けてください。"}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(L.Input,{value:a,onChange:e=>r(e.target.value),placeholder:"http://127.0.0.1:1455/auth/callback?code=...","aria-label":"Callback URL"}),(0,t.jsx)(x.Button,{type:"submit",disabled:!a.trim()||l,children:"Submit"})]}),i&&(0,t.jsx)("p",{className:"text-xs text-destructive",children:i})]})}function K({profile:e,onClose:a}){let[r,l]=(0,s.useState)(null),n=r?.sessionId??null,[o,c]=(0,s.useState)(null),[d,u]=(0,s.useState)(null);(0,s.useEffect)(()=>{let t=null,s=!1;return R(`/api/agent-profiles/${e.agent}/${e.slug}/login`,{method:"POST"}).then(e=>{(t=e.sessionId,s)?fetch((0,i.apiUrl)(`/api/agent-profiles/login/${t}`),{method:"DELETE"}):l(e)}).catch(e=>c(G(e))),()=>{s=!0,t&&fetch((0,i.apiUrl)(`/api/agent-profiles/login/${t}`),{method:"DELETE"})}},[e.agent,e.slug]);let m=d?.loggedIn??!1;return(0,s.useEffect)(()=>{if(!n||m)return;let t=setInterval(()=>{R(`/api/agent-profiles/${e.agent}/${e.slug}/status`).then(t=>{t.status.loggedIn&&!e.status.loggedIn&&u(t.status)}).catch(()=>void 0)},2e3);return()=>clearInterval(t)},[n,m,e.agent,e.slug,e.status.loggedIn]),(0,t.jsx)(O.Dialog,{open:!0,onOpenChange:e=>{e.open||a()},title:`Login: ${e.name}`,maxWidth:"4xl",children:(0,t.jsxs)("div",{className:"space-y-3",children:[m&&d?(0,t.jsxs)("div",{className:"flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",children:[(0,t.jsx)(B.CircleCheck,{className:"size-4"}),(0,t.jsxs)("span",{className:"flex-1",children:["Logged in",d.email?` as ${d.email}`:"",d.orgName?` (${d.orgName})`:""]}),(0,t.jsx)(x.Button,{size:"sm",onClick:a,children:"Done"})]}):(0,t.jsxs)("p",{className:"text-xs text-muted-foreground",children:[W[e.agent],e.status.loggedIn&&" 再ログインが終わったら閉じてください。"]}),!m&&r?.callbackPaste&&(0,t.jsx)(J,{sessionId:r.sessionId}),(0,t.jsx)("div",{className:"h-[420px] overflow-hidden rounded-md border border-border",children:o?(0,t.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-destructive",children:o}):n?(0,t.jsx)(A.TerminalView,{tabId:n,hideToolbar:!0,isActive:!0}):(0,t.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,t.jsx)(E.LoadingSpinner,{size:"sm",message:"Starting..."})})})]})})}let Y="default",Z={claude:{label:"Claude",cliLabel:"Claude Code",installUrl:"https://docs.claude.com/en/docs/claude-code/overview",configDirEnv:"CLAUDE_CONFIG_DIR",defaultConfigDir:"~/.claude",loginCommand:"claude auth login"},codex:{label:"Codex",cliLabel:"Codex",installUrl:"https://developers.openai.com/codex/cli",configDirEnv:"CODEX_HOME",defaultConfigDir:"~/.codex",loginCommand:"codex login"}},Q=Object.keys(Z),ee=/^[A-Za-z0-9 _-]+$/;function et(e){return e.trim().replace(/\s+/g,"-").toLowerCase()}function es({agent:e,availability:s}){let a=Z[e];return!s||s.supported?null:(0,t.jsxs)("p",{className:"flex items-center gap-1.5 text-sm text-muted-foreground",children:[(0,t.jsx)(P.default,{className:"size-4 shrink-0 text-warning"}),s.installed?(0,T.agentOutdatedReason)(a.cliLabel,s):(0,t.jsxs)("span",{children:[a.cliLabel," の CLI が見つかりません。",(0,t.jsxs)("a",{href:a.installUrl,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-0.5 text-primary hover:underline",children:["インストール",(0,t.jsx)(D.ExternalLink,{className:"size-3"})]}),"すると使えます"]})]})}function ea({agent:e,availability:a,selectedNode:r}){let l,n=Z[e],o=`${n.label} Profile`,[c,d]=(0,s.useState)(null),[u,m]=(0,s.useState)(null),[h,p]=(0,s.useState)(null),[v,b]=(0,s.useState)(!1),[N,k]=(0,s.useState)(""),[w,S]=(0,s.useState)(null),[z,M]=(0,s.useState)(null),$="global"===r.scope,D=a?.installed===!1,T=(0,s.useCallback)(async()=>{try{let t=await R(`/api/agent-profiles/${e}`);d(t.profiles)}catch(e){p(G(e))}},[e]),B=(0,s.useCallback)(async()=>{try{let t,s=await R(`/api/agent-profiles/${e}/assignment?${(t=new URLSearchParams({scope:r.scope}),r.owner&&t.set("owner",r.owner),r.repo&&t.set("repo",r.repo),t.toString())}`);m(s.assignment)}catch(e){p(G(e))}},[e,r]);(0,s.useEffect)(()=>{T()},[T]),(0,s.useEffect)(()=>{m(null),B()},[B]);let A=async t=>{try{let s=await R(`/api/agent-profiles/${e}/assignment`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({scope:r.scope,owner:r.owner,repo:r.repo,slug:""===t?null:t})});m(s.assignment)}catch(e){y.toaster.create({type:"error",title:"プロファイルを変更できません",description:G(e)})}},_=async()=>{try{let t=await R(`/api/agent-profiles/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:N.trim()})});b(!1),k(""),await T(),S(t.profile.slug)}catch(e){y.toaster.create({type:"error",title:"プロファイルを追加できません",description:G(e)})}},X=async t=>{try{let s=await fetch((0,i.apiUrl)(`/api/agent-profiles/${e}/${t.slug}`),{method:"DELETE"});if(!s.ok)throw Error(`HTTPエラー: ${s.status}`);await Promise.all([T(),B()])}catch(e){y.toaster.create({type:"error",title:"プロファイルを削除できません",description:G(e)})}};if(h)return(0,t.jsxs)("section",{className:"space-y-3",children:[(0,t.jsx)("h2",{className:"text-lg font-bold text-foreground",children:o}),(0,t.jsx)("p",{className:"text-sm text-destructive",children:h})]});if(!c||!u)return(0,t.jsxs)("section",{className:"space-y-3",children:[(0,t.jsx)("h2",{className:"text-lg font-bold text-foreground",children:o}),(0,t.jsx)(E.LoadingSpinner,{size:"sm",message:"Loading profiles..."})]});let H=function(e,t){let s=e.trim();if(!s)return null;if(!ee.test(s))return'Use only letters, numbers, spaces, "-" and "_"';let a=et(s);return t.some(e=>e.slug===a)?`"${a}" already exists`:null}(N,c),W=c.find(e=>e.slug===w);return(0,t.jsxs)("section",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("h2",{className:"text-lg font-bold text-foreground",children:o}),(0,t.jsx)(es,{agent:e,availability:a})]}),(0,t.jsxs)("fieldset",{disabled:D,className:(0,F.cn)("min-w-0 space-y-3",D&&"opacity-50"),children:[(0,t.jsx)(V,{label:$?"Default profile":"Profile for this scope",hint:`このスコープのタスクのターミナル・${n.label} で使うアカウント。変更は開いているタブにも自動で反映されます`,children:(0,t.jsxs)("select",{value:u.assigned??"",onChange:e=>void A(e.target.value),className:"h-9 w-full rounded-md border border-input bg-transparent pl-3 pr-10 text-sm text-foreground shadow-xs",children:[!$&&(0,t.jsxs)("option",{value:"",children:["Inherit (",(l=u.effective,c.find(e=>e.slug===l)?.name??l),")"]}),c.map(e=>(0,t.jsx)("option",{value:$&&e.slug===Y?"":e.slug,children:e.name},e.slug))]})}),$&&(0,t.jsxs)("div",{className:"space-y-2",children:[c.map(e=>{var s;return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-md border border-border p-3",children:[(0,t.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,t.jsx)(I,{className:"size-4 shrink-0 text-muted-foreground"}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("div",{className:"text-sm font-medium text-foreground",children:e.name}),!D&&(0,t.jsxs)("div",{className:"flex items-center gap-1 truncate text-xs text-muted-foreground",children:[e.status.loggedIn?(0,t.jsx)(j.Check,{className:"size-3 shrink-0 text-success"}):(0,t.jsx)(P.default,{className:"size-3 shrink-0 text-warning"}),(0,t.jsx)("span",{className:"truncate",children:(s=e.status).loggedIn?[s.email,s.orgName??s.subscriptionType].filter(Boolean).join(" · ")||s.authMethod||"Logged in":"Not logged in"})]}),(0,t.jsx)("div",{className:"truncate text-[0.65rem] text-muted-foreground",children:(0,t.jsx)(q,{children:e.configDir??`${n.configDirEnv} 未指定(${n.defaultConfigDir})`})})]})]}),(0,t.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[(0,t.jsxs)(x.Button,{variant:e.status.loggedIn?"ghost":"default",size:"sm",onClick:()=>S(e.slug),title:n.loginCommand,children:[(0,t.jsx)(U,{className:"size-4"}),e.status.loggedIn?"Re-login":"Login"]}),e.slug!==Y&&(0,t.jsx)(x.Button,{variant:"ghost",size:"icon",onClick:()=>M(e),className:"hover:bg-destructive/10",title:"Delete",children:(0,t.jsx)(C.Trash2,{className:"size-4 text-destructive"})})]})]},e.slug)}),v?(0,t.jsxs)("div",{className:"space-y-2 rounded-md border border-border bg-accent p-3",children:[(0,t.jsx)(L.Input,{value:N,onChange:e=>k(e.target.value),onKeyDown:e=>{"Enter"===e.key&&N.trim()&&!H&&_()},placeholder:"Profile name (e.g. work)",autoFocus:!0}),H?(0,t.jsx)("p",{className:"text-xs text-destructive",children:H}):N.trim()&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:(0,t.jsxs)(q,{children:["~/.tsunagi/",e,"-profiles/",et(N)]})}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(x.Button,{variant:"outline",size:"sm",onClick:()=>{b(!1),k("")},children:(0,t.jsx)(f.X,{className:"size-4"})}),(0,t.jsx)(x.Button,{size:"sm",onClick:()=>void _(),disabled:!N.trim()||!!H,children:(0,t.jsx)(j.Check,{className:"size-4"})})]})]}):(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:()=>b(!0),children:[(0,t.jsx)(g.Plus,{className:"size-4"}),"Add Profile"]})]})]}),W&&(0,t.jsx)(K,{profile:W,onClose:()=>{S(null),T()}}),(0,t.jsx)(O.ConfirmDialog,{open:null!==z,onOpenChange:e=>{e.open||M(null)},title:"Delete Profile",message:z?`${z.name} からログアウトし、${z.configDir} を削除します。このプロファイルを使っているスコープは親の設定を継承します。`:"",confirmLabel:"Delete",variant:"danger",onConfirm:()=>{z&&X(z)}})]})}let er=(0,l.default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);var el=e.i(5352);function en(){let[e,a]=(0,s.useState)([]),[r,l]=(0,s.useState)({}),[n,o]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1),[u,h]=(0,s.useState)(!1),p=(0,s.useCallback)(async()=>{try{let[e,t]=await Promise.all([fetch((0,i.apiUrl)("/api/repos")).then(e=>e.json()),fetch((0,i.apiUrl)("/api/tasks")).then(e=>e.json())]);a(e.data??[]);let s={};for(let e of t.data?.tasks??[]){let t=`${e.owner}/${e.repo}`;s[t]=(s[t]??0)+1}l(s)}catch(e){console.error("Failed to load repositories:",e)}},[]);(0,s.useEffect)(()=>{p()},[p]);let g=async()=>{if(n){d(!0);try{if(!(await fetch((0,i.apiUrl)(`/api/repos/${n.owner}/${n.repo}`),{method:"DELETE"})).ok)throw Error("Failed to delete repository");await p()}catch(e){console.error("Failed to delete repository:",e)}finally{d(!1),o(null)}}},f=(0,s.useCallback)(async(t,s)=>{let r=t+s;if(r<0||r>=e.length)return;let l=[...e];[l[t],l[r]]=[l[r],l[t]],a(l.map((e,t)=>({...e,order:t}))),h(!0);try{if(!(await fetch((0,i.apiUrl)("/api/repos/reorder"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({repoIds:l.map(e=>e.id)})})).ok)throw Error("Failed to reorder repositories")}catch(e){console.error("Failed to reorder repositories:",e),await p()}finally{h(!1)}},[e,p]);return 0===e.length?(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"No repositories cloned yet."}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(O.ConfirmDialog,{open:null!==n,onOpenChange:e=>{e.open||o(null)},title:"Delete Repository",message:n?`Delete ${n.owner}/${n.repo}? This will also delete ${r[`${n.owner}/${n.repo}`]??0} associated task(s), all worktrees, and the bare repository. This action cannot be undone.`:"",confirmLabel:c?"Deleting...":"Delete",cancelLabel:"Cancel",onConfirm:g,variant:"danger"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"この並び順がトップページの列の並び順になります"}),(0,t.jsx)("div",{className:"space-y-2",children:e.map((s,a)=>{let l=`${s.owner}/${s.repo}`,n=(0,el.getRepoColor)(s.owner,s.repo),i=r[l]??0;return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-md border border-border p-3",children:[(0,t.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,t.jsx)("span",{className:`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${n.bg} ${n.text}`,children:l}),(0,t.jsxs)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:[i," task",1!==i?"s":""]})]}),(0,t.jsxs)("div",{className:"flex flex-shrink-0 items-center",children:[(0,t.jsx)(x.Button,{variant:"ghost",size:"icon",onClick:()=>f(a,-1),disabled:0===a||u,className:"text-muted-foreground",title:"Move up",children:(0,t.jsx)(er,{className:"size-4"})}),(0,t.jsx)(x.Button,{variant:"ghost",size:"icon",onClick:()=>f(a,1),disabled:a===e.length-1||u,className:"text-muted-foreground",title:"Move down",children:(0,t.jsx)(m,{className:"size-4"})}),(0,t.jsx)(x.Button,{variant:"ghost",size:"icon",onClick:()=>o(s),className:"text-muted-foreground hover:text-destructive",title:"Delete repository",children:(0,t.jsx)(C.Trash2,{className:"size-4"})})]})]},s.id)})})]})}var ei=e.i(69068);function eo({owner:e,repo:a,onDeleted:r}){let[l,n]=(0,s.useState)(!1),[o,c]=(0,s.useState)(""),[d,u]=(0,s.useState)(!1),m=`${e}/${a}`,h=o===m,p=async()=>{if(h){u(!0);try{if(!(await fetch((0,i.apiUrl)(`/api/repos/${e}/${a}`),{method:"DELETE"})).ok)throw Error("Failed to delete repository");r()}catch(e){console.error("Failed to delete repository:",e)}finally{u(!1),n(!1),c("")}}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"rounded-md border border-destructive/30 p-4 space-y-3",children:[(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold text-destructive",children:"Remove Repository"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"Remove this repository and all associated data including tasks, worktrees, and environment variables. This action cannot be undone."})]}),(0,t.jsxs)(x.Button,{variant:"destructive",size:"sm",onClick:()=>n(!0),children:[(0,t.jsx)(C.Trash2,{className:"size-4"}),"Remove Repository"]})]}),(0,t.jsx)(ei.Dialog,{open:l,onOpenChange:n,children:(0,t.jsxs)(ei.DialogContent,{showCloseButton:!1,children:[(0,t.jsxs)(ei.DialogHeader,{children:[(0,t.jsx)(ei.DialogTitle,{children:"Remove Repository"}),(0,t.jsxs)(ei.DialogDescription,{children:["This will permanently delete ",(0,t.jsx)("strong",{children:m})," and all associated tasks, worktrees, and environment variables."]})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-xs text-muted-foreground",children:["Type ",(0,t.jsx)("strong",{children:m})," to confirm"]}),(0,t.jsx)(L.Input,{value:o,onChange:e=>c(e.target.value),placeholder:m,autoComplete:"off"})]}),(0,t.jsxs)(ei.DialogFooter,{children:[(0,t.jsx)(x.Button,{variant:"outline",size:"sm",onClick:()=>{n(!1),c("")},disabled:d,children:"Cancel"}),(0,t.jsx)(x.Button,{variant:"destructive",size:"sm",onClick:p,disabled:!h||d,children:d?"Removing...":"Remove"})]})]})})]})}let ec=(0,l.default)("mic",[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]]);function ed(){return(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-foreground",children:"Voice Input"}),(0,t.jsxs)("div",{className:"flex items-center gap-3 rounded-md border border-border p-3",children:[(0,t.jsx)(ec,{className:"size-4 shrink-0 text-muted-foreground"}),(0,t.jsx)("p",{className:"min-w-0 flex-1 text-sm text-muted-foreground",children:"音声入力は mukuchi(macOS / Windows・無料)をご利用ください。話した内容をターミナルにそのまま入力できます"}),(0,t.jsxs)("a",{href:"https://mukuchi.minimalcorp.com/",target:"_blank",rel:"noreferrer",className:"inline-flex h-8 shrink-0 items-center gap-1 rounded-md border border-input bg-background px-3 text-sm shadow-xs transition-colors hover:bg-accent",children:["mukuchi",(0,t.jsx)(D.ExternalLink,{className:"size-3"})]})]})]})}var eu=e.i(63209),em=e.i(95468);let ex=(0,l.default)("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);var eh=e.i(66992),ep=e.i(31278);let eg=(0,l.default)("memory-stick",[["path",{d:"M12 12v-2",key:"fwoke6"}],["path",{d:"M12 18v-2",key:"qj6yno"}],["path",{d:"M16 12v-2",key:"heuere"}],["path",{d:"M16 18v-2",key:"s1ct0w"}],["path",{d:"M2 11h1.5",key:"15p63e"}],["path",{d:"M20 18v-2",key:"12ehxp"}],["path",{d:"M20.5 11H22",key:"khsy7a"}],["path",{d:"M4 18v-2",key:"1c3oqr"}],["path",{d:"M8 12v-2",key:"1mwtfd"}],["path",{d:"M8 18v-2",key:"qcmpov"}],["rect",{x:"2",y:"6",width:"20",height:"10",rx:"2",key:"1qcswk"}]]);var ef=e.i(31343);let ej=(0,l.default)("power-off",[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15",key:"dxknvb"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68",key:"1x7qb5"}],["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var ev=e.i(16715);function eb({className:e,size:s="default",...a}){return(0,t.jsx)("div",{"data-slot":"card","data-size":s,className:(0,F.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-lg bg-card py-4 text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",e),...a})}function eN({className:e,...s}){return(0,t.jsx)("div",{"data-slot":"card-header",className:(0,F.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",e),...s})}function ey({className:e,...s}){return(0,t.jsx)("div",{"data-slot":"card-title",className:(0,F.cn)("font-heading text-sm font-medium",e),...s})}function ek({className:e,...s}){return(0,t.jsx)("div",{"data-slot":"card-description",className:(0,F.cn)("text-xs/relaxed text-muted-foreground",e),...s})}function ew({className:e,...s}){return(0,t.jsx)("div",{"data-slot":"card-content",className:(0,F.cn)("px-4 group-data-[size=sm]/card:px-3",e),...s})}var eC=e.i(47161),eS=e.i(41247),eL=e.i(93355),ez=e.i(38078);let eE={k:1024,m:1048576},eO=[32768,65536,131072,262144];function eM(e){let t=e.trim().replace(/[,_\s]/g,"").toLowerCase().match(/^(\d+(?:\.\d+)?)([km]?)$/);if(!t)return null;let s=Number(t[1])*(t[2]?eE[t[2]]:1);return Number.isInteger(s)&&s>0?s:null}function e$(e){return e>=eE.m&&e%eE.m==0?`${e/eE.m}m`:e>=eE.k&&e%eE.k==0?`${e/eE.k}k`:String(e)}var eP=e.i(64691);function eD({value:e,onChange:a,max:r}){let l=(0,s.useId)(),n=eM(e),i=null!==n&&void 0!==r&&r>0&&n>r,o=eO.filter(e=>!r||e<=r);return(0,t.jsxs)("div",{children:[(0,t.jsx)(L.Input,{value:e,onChange:e=>a(e.target.value),placeholder:"64k",list:l,"aria-invalid":null===n||i,className:"font-mono"}),(0,t.jsx)("datalist",{id:l,children:o.map(e=>(0,t.jsx)("option",{value:e$(e)},e))}),(0,t.jsx)("p",{className:`mt-1 text-[0.65rem] ${null===n||i?"text-destructive":"text-muted-foreground"}`,children:null===n?"64k / 128k / 1m または整数で入力してください(k = 1024)":i?`このモデルの最大値(${e$(r)})を超えています`:`${n.toLocaleString()} tokens`})]})}function eU(e,t){return`${e}:${t}`}function eI(e){let t=e.indexOf(":");if(t<0)return null;let s=e.slice(0,t);return"ollama"!==s&&"lmstudio"!==s?null:{provider:s,model:e.slice(t+1)}}function eT({status:e}){let s=e.active?`${e.active.model}(${eP.LOCAL_LLM_PROVIDER_LABEL[e.active.provider]}・${e$(e.active.contextTokens)})`:"";switch(e.state){case"unconfigured":return(0,t.jsx)("span",{className:"text-muted-foreground",children:"使用するモデルが未設定です"});case"loading":return(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),"読み込み中: ",s]});case"loaded":return(0,t.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,t.jsx)(em.CheckCircle2,{className:"size-4"}),"読み込み済み: ",s]});case"unloaded":return(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(eg,{className:"size-4"}),"解放済み: ",s,"(次の発言で読み込みます)"]});case"error":return(0,t.jsxs)("span",{className:"flex items-center gap-2 text-destructive",children:[(0,t.jsx)(eu.AlertCircle,{className:"size-4"}),e.error]})}}function eF(){var e;let a,{settings:r,setSettings:l}=(0,ez.useLocalLlmSettings)(),[n,i]=(0,s.useState)(null),[o,c]=(0,s.useState)(null),[d,u]=(0,s.useState)(null),[m,h]=(0,s.useState)(!1),[p,g]=(0,s.useState)(null),[f,j]=(0,s.useState)(!1),[v,b]=(0,s.useState)(!1),[N,k]=(0,s.useState)(!1);(0,s.useEffect)(()=>{var e;r&&i({selection:(e=r).active?eU(e.active.provider,e.active.model):"",context:e$(e.active?.contextTokens??65536),idleUnloadMinutes:String(e.idleUnloadMinutes),unloadOnExit:e.unloadOnExit,webSearch:e.webSearch,extraEnvText:Object.entries(e.extraEnv).map(([e,t])=>`${e}=${t}`).join("\n")})},[r]);let w=(0,s.useCallback)(async()=>{try{c(await R("/api/settings/local-llm/status"))}catch(e){console.error("Failed to fetch local LLM status:",e)}},[]),C=(0,s.useCallback)(async()=>{h(!0);try{u(await R("/api/settings/local-llm/models"))}catch(e){y.toaster.create({type:"error",title:"モデル一覧を取得できません",description:G(e)})}finally{h(!1)}},[]);(0,s.useEffect)(()=>{w(),C();let e=setInterval(()=>void w(),3e3);return()=>clearInterval(e)},[w,C]);let S=n?eI(n.selection):null,z=(0,s.useMemo)(()=>d?.models.find(e=>e.provider===S?.provider&&e.model===S?.model),[d,S?.provider,S?.model]),E=z?.maxContextLength??void 0,M=S?.provider==="lmstudio"?S.model:"",$=n?eM(n.context):null;(0,s.useEffect)(()=>{if(g(null),!M||!$)return;let e=new AbortController,t=setTimeout(()=>{let t=new URLSearchParams({model:M,contextTokens:String($)});R(`/api/settings/local-llm/estimate?${t}`,{signal:e.signal}).then(g).catch(()=>g(null))},600);return()=>{clearTimeout(t),e.abort()}},[M,$]);let P=Number(n?.idleUnloadMinutes),D=null!==n&&(e=n.context,null!==(a=eM(e))&&(!E||a<=E))&&Number.isInteger(P)&&P>=0,U=(0,s.useCallback)(async()=>{if(!n||!D)return;let e=eI(n.selection),t={active:e?{...e,contextTokens:eM(n.context)??65536}:null,idleUnloadMinutes:Number(n.idleUnloadMinutes),unloadOnExit:n.unloadOnExit,webSearch:n.webSearch,extraEnv:function(e){let t={};for(let s of e.split("\n")){let e=s.trim();if(!e||e.startsWith("#"))continue;let a=e.indexOf("=");a<=0||(t[e.slice(0,a).trim()]=e.slice(a+1).trim())}return t}(n.extraEnvText)},s=JSON.stringify(r?.active)!==JSON.stringify(t.active);j(!0);try{l(await _("/api/settings/local-llm",t)),y.toaster.create({type:"success",title:s?"使用するモデルを切り替えました(他のモデルは解放します)":"ローカルLLMの設定を保存しました"}),w()}catch(e){y.toaster.create({type:"error",title:"ローカルLLMの設定を保存できませんでした",description:G(e)})}finally{j(!1)}},[n,D,r?.active,l,w]),I=(0,s.useCallback)(async(e,t)=>{b(!0);try{c(await R(e,{method:"POST"}))}catch(e){y.toaster.create({type:"error",title:t,description:G(e)})}finally{b(!1)}},[]),T=e=>i(t=>t?{...t,...e}:t),F=(d?.models??[]).map(e=>{var t;return{value:eU(e.provider,e.model),label:[e.displayName,e.format.toUpperCase(),e.sizeBytes?(t=e.sizeBytes)>=0x40000000?`${(t/0x40000000).toFixed(1)} GB`:`${Math.round(t/1048576)} MB`:null,e.maxContextLength?`最大 ${e$(e.maxContextLength)}`:null].filter(Boolean).join(" · "),group:eP.LOCAL_LLM_PROVIDER_LABEL[e.provider]}}),B=r?.active;B&&!F.some(e=>e.value===eU(B.provider,B.model))&&F.unshift({value:eU(B.provider,B.model),label:`${B.model}(一覧にありません)`,group:eP.LOCAL_LLM_PROVIDER_LABEL[B.provider]});let A=null!==d&&0===d.models.length&&0===d.errors.length;return(0,t.jsxs)(eb,{children:[(0,t.jsxs)(eN,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsx)(ey,{children:"Claude Code のローカルLLM"}),(0,t.jsx)(x.Button,{variant:"ghost",size:"icon-sm",onClick:()=>k(!0),title:"ローカルLLMについて",children:(0,t.jsx)(ex,{})})]}),(0,t.jsxs)(ek,{children:["Ollama / LM Studio のローカルLLMで Claude Code を起動します。",(0,t.jsx)("strong",{className:"font-medium text-foreground",children:"使用するモデルは1つだけで、全てのローカルLLMタブで共有します"}),"。切り替えると他のモデルはメモリから解放されます。"]})]}),(0,t.jsx)(ew,{className:"flex flex-col gap-3",children:r&&n?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(X,{children:[o?(0,t.jsx)(eT,{status:o}):(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),(0,t.jsxs)("div",{className:"ml-auto flex items-center gap-2",children:[o?.state==="unloaded"&&(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:()=>void I("/api/settings/local-llm/load","モデルを読み込めません"),disabled:v,children:[(0,t.jsx)(ef.Play,{}),"読み込む"]}),(o?.state==="loaded"||o?.state==="error")&&(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:()=>void I("/api/settings/local-llm/unload","モデルを解放できません"),disabled:v||(o?.inflight??0)>0,title:"メモリから外す(次の発言で自動で読み込み直します)",children:[v?(0,t.jsx)(ep.Loader2,{className:"animate-spin"}):(0,t.jsx)(ej,{}),"解放"]})]})]}),o&&o.inflight>0&&(0,t.jsxs)("p",{className:"text-[0.65rem] text-muted-foreground",children:["応答を生成中のタブがあります(",o.inflight,"件)。完了するまでモデルは切り替えられません。"]}),A?(0,t.jsx)("p",{className:"text-xs text-warning",children:"下の Ollama / LM Studio のどちらかを有効にすると、モデルを選べるようになります。"}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(V,{label:"使用するモデル",hint:d?.errors.length?(0,t.jsx)("span",{className:"text-destructive",children:d.errors.map(e=>`${eP.LOCAL_LLM_PROVIDER_LABEL[e.provider]}: ${e.message}`).join(" / ")}):`有効なプロバイダーにダウンロード済みのモデル(${d?.models.length??0}件)`,children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(eC.Combobox,{options:F,value:n.selection,onChange:e=>T({selection:String(e)}),placeholder:"モデルを選択",className:"flex-1"}),(0,t.jsx)(x.Button,{variant:"outline",size:"icon",onClick:()=>void C(),disabled:m,title:"モデル一覧を再取得",children:(0,t.jsx)(ev.RefreshCw,{className:m?"animate-spin":void 0})})]})}),(0,t.jsxs)(V,{label:"コンテキスト長",children:[(0,t.jsx)(eD,{value:n.context,onChange:e=>T({context:e}),max:E}),S?.provider==="lmstudio"&&(0,t.jsxs)("p",{className:"mt-1 flex items-center gap-1 text-[0.65rem] text-muted-foreground",children:[(0,t.jsx)(eh.Cpu,{className:"size-3"}),"必要メモリ(見積もり): ",p?.totalMemory??"-",z?.format==="mlx"&&"。MLX はモデルの最大値で読み込まれ、メモリは使った分だけ増えます"]}),S?.provider==="ollama"&&(0,t.jsxs)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:["このコンテキスト長を固定した派生モデル(",(0,t.jsx)(q,{children:"<モデル>-tsunagi-ctx<長さ>"}),")を作成して使います(重みは共有されます)。"]})]})]}),(0,t.jsx)(V,{label:"自動解放(分)",hint:"最後のリクエストからこの時間がたったらモデルをメモリから外します(0 で無効)。次の発言で自動で読み込み直します",children:(0,t.jsx)(L.Input,{type:"number",min:0,value:n.idleUnloadMinutes,onChange:e=>T({idleUnloadMinutes:e.target.value}),className:"w-32 font-mono"})}),(0,t.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,t.jsx)("input",{type:"checkbox",checked:n.unloadOnExit,onChange:e=>T({unloadOnExit:e.target.checked}),className:"size-4 accent-primary"}),"tsunagi の終了時にモデルを解放する"]}),(0,t.jsxs)(V,{label:"WebSearch",children:[(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(x.Button,{size:"sm",variant:"local"===n.webSearch?"default":"outline",onClick:()=>T({webSearch:"local"}),children:"ローカル検索(SearXNG)"}),(0,t.jsx)(x.Button,{size:"sm",variant:"ollama"===n.webSearch?"default":"outline",onClick:()=>T({webSearch:"ollama"}),children:"ollama.com(Ollama のみ・要サインイン)"})]}),(0,t.jsxs)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:["local"===n.webSearch?"組み込みの WebSearch を無効化し、ローカル検索(SearXNG)の web_search ツールを使います。":"使用するモデルが Ollama のとき、Ollama が ollama.com の Web 検索 API で代行します(Ollama 欄でサインイン状態を確認できます)。LM Studio のときはローカル検索になります。","設定はこの後に作成・起動したタブから反映されます。"]})]}),(0,t.jsx)(H,{children:(0,t.jsx)(V,{label:"追加の環境変数 (任意)",hint:"ローカルLLMタブにのみ適用されます。同名の既定値より優先されます",children:(0,t.jsx)(eS.Textarea,{value:n.extraEnvText,onChange:e=>T({extraEnvText:e.target.value}),placeholder:"KEY=VALUE(1行に1つ)",className:"min-h-16 font-mono text-xs"})})}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsxs)(x.Button,{size:"default",onClick:()=>void U(),disabled:f||!D,children:[f?(0,t.jsx)(ep.Loader2,{className:"animate-spin"}):S&&(0,t.jsx)(eL.LocalLlmIcon,{provider:S.provider,className:"size-4"}),"保存"]}),(0,t.jsx)("span",{className:"text-[0.65rem] text-muted-foreground",children:"モデルを変えて保存すると、他のモデルを解放して読み込みを始めます"})]})]}):(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),"読み込み中..."]})}),(0,t.jsx)(O.Dialog,{open:N,onOpenChange:({open:e})=>k(e),title:"ローカルLLMについて",maxWidth:"2xl",children:(0,t.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-foreground",children:"実験的機能です"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"Claude Code の接続先を tsunagi の中継口に切り替え、tsunagi が Ollama / LM Studio の Anthropic 互換 API に転送します。Anthropic はClaude以外のモデルへの接続をサポートしていないため、動作は保証されません。"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-foreground",children:"モデルは1つだけ"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"20〜30GB 級のモデルを2つ同時にメモリへ載せられるマシンは少ないため、使用するモデルは1つにし、全てのローカルLLMタブで共有します。切り替えると他のモデルは解放され、各タブは次の発言で会話全体を新しいモデルで読み直します(数十秒〜数分)。"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-foreground",children:"/model について"}),(0,t.jsxs)("p",{className:"text-muted-foreground",children:["ローカルLLMタブでは ",(0,t.jsx)(q,{children:"/model"})," ","によるモデルの切り替えを無効にしています(Claude Code が切り替えたモデルを通常の Claude タブの既定値として保存してしまうため)。切り替えはここで行ってください。"]})]})]})})]})}var eB=e.i(82458),eB=eB;function eA(){let{settings:e,setSettings:a}=(0,ez.useOllamaSettings)(),[r,l]=(0,s.useState)(""),[n,i]=(0,s.useState)(!1),[c,d]=(0,s.useState)(null),[u,m]=(0,s.useState)(null),[h,p]=(0,s.useState)(!1),[g,f]=(0,s.useState)(null);(0,s.useEffect)(()=>{e&&l(e.baseUrl)},[e]);let j=(0,s.useCallback)(async e=>{i(!0);try{return a(await _("/api/settings/ollama",e)),!0}catch(e){return y.toaster.create({type:"error",title:"Ollama の設定を保存できませんでした",description:G(e)}),!1}finally{i(!1)}},[a]),v=(0,s.useCallback)(async e=>{try{d(await R(`/api/settings/ollama/status?baseUrl=${encodeURIComponent(e)}`))}catch(e){console.error("Failed to fetch Ollama status:",e)}},[]),b=(0,s.useCallback)(async e=>{p(!0),f(null);try{m(await R(`/api/settings/ollama/account?baseUrl=${encodeURIComponent(e)}`))}catch(e){m(null),f(G(e))}finally{p(!1)}},[]),N=e?.enabled===!0,k=e?.baseUrl;(0,s.useEffect)(()=>{if(!N||!k)return;v(k),b(k);let e=setInterval(()=>void v(k),5e3);return()=>clearInterval(e)},[N,k,v,b]);let w=(0,s.useCallback)(async()=>{e&&await j({...e,baseUrl:r})&&y.toaster.create({type:"success",title:"Ollama の設定を保存しました"})},[e,r,j]);return(0,t.jsxs)(eb,{children:[(0,t.jsxs)(eN,{children:[(0,t.jsx)(ey,{children:"Ollama"}),(0,t.jsxs)(ek,{children:["ローカルLLMのプロバイダーとして Ollama を使います。Ollama のインストール・モデルの pull・起動はご自身で行ってください(例:"," ",(0,t.jsx)(q,{children:"ollama pull qwen3.6:35b-a3b-coding-nvfp4"}),")。"]})]}),(0,t.jsx)(ew,{className:"flex flex-col gap-3",children:e?N?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(X,{children:[c?c.reachable?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,t.jsx)(em.CheckCircle2,{className:"size-4"}),"接続中",c.version&&` (v${c.version})`]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:c.loaded.length>0?`読み込み中: ${c.loaded.map(e=>`${e.name}${e.contextLength?` (${e$(e.contextLength)})`:""}`).join(", ")}`:"読み込み中のモデルなし"})]}):(0,t.jsxs)("span",{className:"flex items-center gap-2 text-warning",children:[(0,t.jsx)(eB.default,{className:"size-4"}),"Ollama に接続できません。Ollama アプリを起動してください"]}):(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),"確認中..."]}),(0,t.jsx)(x.Button,{variant:"outline",size:"sm",className:"ml-auto",onClick:()=>void j({...e,enabled:!1}),disabled:n,children:"無効にする"})]}),(0,t.jsx)(V,{label:"ollama.com(WebSearch を Ollama に代行させる場合)",hint:(0,t.jsxs)(t.Fragment,{children:["「Claude Code のローカルLLM」欄の WebSearch を「ollama.com」にした場合のみ必要です。Ollama を動かしているマシンで"," ",(0,t.jsx)(q,{children:"ollama signin"})," を実行してください(検索クエリは ollama.com に送信されます)。"]}),children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[h?(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),"確認中..."]}):u?.signedIn?(0,t.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,t.jsx)(o,{className:"size-4"}),"サインイン済み(",u.name,")"]}):u?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(eB.default,{className:"size-4"}),"未サインイン"]}),u.signinUrl&&(0,t.jsxs)("a",{href:u.signinUrl,target:"_blank",rel:"noreferrer",className:(0,x.buttonVariants)({variant:"outline",size:"sm"}),children:[(0,t.jsx)(D.ExternalLink,{}),"サインイン"]})]}):(0,t.jsx)("span",{className:"text-xs text-destructive",children:g}),(0,t.jsx)(x.Button,{variant:"outline",size:"icon",onClick:()=>void b(e.baseUrl),disabled:h,title:"サインイン状態を再確認",children:(0,t.jsx)(ev.RefreshCw,{className:h?"animate-spin":void 0})})]})}),(0,t.jsx)(H,{children:(0,t.jsx)(V,{label:"Base URL",hint:(0,t.jsxs)(t.Fragment,{children:["Docker で tsunagi を動かしている場合は"," ",(0,t.jsx)(q,{children:"http://host.docker.internal:11434"})]}),children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(L.Input,{value:r,onChange:e=>l(e.target.value),placeholder:"http://localhost:11434"}),(0,t.jsx)(x.Button,{size:"default",onClick:()=>void w(),disabled:n||r===e.baseUrl,children:"保存"})]})})})]}):(0,t.jsxs)(x.Button,{size:"default",onClick:()=>void j({...e,enabled:!0}),disabled:n,children:[(0,t.jsx)(eL.OllamaIcon,{className:"size-4"}),"Ollama を有効化する"]}):(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),"読み込み中..."]})})]})}let eR=(0,l.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);var eB=eB;function e_(){let{settings:e,setSettings:a}=(0,ez.useLmStudioSettings)(),[r,l]=(0,s.useState)(null),[n,i]=(0,s.useState)(!1),[o,c]=(0,s.useState)(null),[d,u]=(0,s.useState)(!1);(0,s.useEffect)(()=>{e&&l({baseUrl:e.baseUrl,apiToken:e.apiToken,lmsPath:e.lmsPath})},[e]);let m=e?.enabled===!0,h=(0,s.useCallback)(async()=>{try{c(await R("/api/settings/lmstudio/status"))}catch(e){console.error("Failed to fetch LM Studio status:",e)}},[]);(0,s.useEffect)(()=>{if(!m)return;h();let e=setInterval(()=>void h(),5e3);return()=>clearInterval(e)},[m,h]);let p=(0,s.useCallback)(async e=>{i(!0);try{return a(await _("/api/settings/lmstudio",e)),!0}catch(e){return y.toaster.create({type:"error",title:"LM Studio の設定を保存できませんでした",description:G(e)}),!1}finally{i(!1)}},[a]),g=(0,s.useCallback)(async e=>{u(!0);try{c(await R(`/api/settings/lmstudio/server/${e}`,{method:"POST"}))}catch(t){y.toaster.create({type:"error",title:"start"===e?"サーバーを起動できません":"サーバーを停止できません",description:G(t)})}finally{u(!1)}},[]),f=(0,s.useCallback)(async()=>{e&&r&&await p({...e,...r})&&(y.toaster.create({type:"success",title:"LM Studio の設定を保存しました"}),h())},[e,r,p,h]),j=e=>l(t=>t?{...t,...e}:t);return(0,t.jsxs)(eb,{children:[(0,t.jsxs)(eN,{children:[(0,t.jsx)(ey,{children:"LM Studio"}),(0,t.jsxs)(ek,{children:["ローカルLLMのプロバイダーとして LM Studio(0.4.1 以降)を使います。",(0,t.jsx)("a",{href:"https://lmstudio.ai/download",target:"_blank",rel:"noreferrer",className:"underline",children:"LM Studio"}),"のインストールとモデルのダウンロードはご自身で行ってください(例:"," ",(0,t.jsx)(q,{children:"mlx-community/Qwen3.6-35B-A3B-4bit"}),")。一度起動すると lms CLI が入ります。"]})]}),(0,t.jsx)(ew,{className:"flex flex-col gap-3",children:e&&r?m?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(X,{children:[o?o.serverRunning?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,t.jsx)(em.CheckCircle2,{className:"size-4"}),"サーバー起動中"]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:o.loaded.length>0?`読み込み中: ${o.loaded.map(e=>`${e.key} (${e$(e.contextLength)})`).join(", ")}`:"読み込み中のモデルなし"})]}):(0,t.jsxs)("span",{className:"flex items-center gap-2 text-warning",children:[(0,t.jsx)(eB.default,{className:"size-4"}),"サーバー停止中"]}):(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),"確認中..."]}),(0,t.jsxs)("div",{className:"ml-auto flex items-center gap-2",children:[o&&o.lmsPath?o.serverRunning?(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:()=>void g("stop"),disabled:d,children:[d?(0,t.jsx)(ep.Loader2,{className:"animate-spin"}):(0,t.jsx)(eR,{}),"停止"]}):(0,t.jsxs)(x.Button,{size:"sm",onClick:()=>void g("start"),disabled:d,children:[d?(0,t.jsx)(ep.Loader2,{className:"animate-spin"}):(0,t.jsx)(ef.Play,{}),"起動"]}):null,(0,t.jsx)(x.Button,{variant:"outline",size:"sm",onClick:()=>void p({...e,enabled:!1}),disabled:n,children:"無効にする"})]})]}),o&&!o.lmsPath&&!o.serverRunning&&(0,t.jsxs)("p",{className:"text-xs text-muted-foreground",children:["tsunagi から LM Studio のサーバーを起動するための lms CLI が見つかりません(tsunagi を Docker で動かしている場合も同様です)。LM Studio アプリの Developer タブでサーバーを起動するか、LM Studio を動かしているマシンで"," ",(0,t.jsx)(q,{children:"lms server start"})," を実行してください。lms がある場合は詳細設定でパスを指定できます。"]}),(0,t.jsxs)(H,{children:[(0,t.jsx)(V,{label:"Base URL",children:(0,t.jsx)(L.Input,{value:r.baseUrl,onChange:e=>j({baseUrl:e.target.value}),placeholder:"http://localhost:1234"})}),(0,t.jsx)(V,{label:"API トークン (任意)",hint:"LM Studio で「Require Authentication」を有効にしている場合のみ",children:(0,t.jsx)(L.Input,{type:"password",value:r.apiToken,onChange:e=>j({apiToken:e.target.value})})}),(0,t.jsx)(V,{label:"lms のパス (任意)",hint:"空欄なら ~/.lmstudio/bin/lms → PATH の順で探します",children:(0,t.jsx)(L.Input,{value:r.lmsPath,onChange:e=>j({lmsPath:e.target.value}),placeholder:o?.lmsPath??"~/.lmstudio/bin/lms",className:"font-mono"})}),(0,t.jsx)("div",{children:(0,t.jsxs)(x.Button,{size:"default",onClick:()=>void f(),disabled:n,children:[n&&(0,t.jsx)(ep.Loader2,{className:"animate-spin"}),"保存"]})})]})]}):(0,t.jsxs)(x.Button,{size:"default",onClick:()=>void p({...e,enabled:!0}),disabled:n,children:[(0,t.jsx)(eL.LmStudioIcon,{className:"size-4"}),"LM Studio を有効化する"]}):(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),"読み込み中..."]})})]})}let eG=(0,l.default)("container",[["path",{d:"M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z",key:"1t2lqe"}],["path",{d:"M10 21.9V14L2.1 9.1",key:"o7czzq"}],["path",{d:"m10 14 11.9-6.9",key:"zm5e20"}],["path",{d:"M14 19.8v-8.1",key:"159ecu"}],["path",{d:"M18 17.5V9.4",key:"11uown"}]]),eX=(0,l.default)("package-x",[["path",{d:"M21 10V8a2 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.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}],["path",{d:"m17 13 5 5m-5 0 5-5",key:"im3w4b"}]]);var eV=e.i(91810);let eH=(0,l.default)("square-terminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]),eq={auto:"自動(searxng-run → Docker の順)",process:"searxng-run",docker:"Docker"};function eW({status:e}){let s,{state:a,runner:r,docker:l}=e;if("not-installed"===a)return null;let n=(0,t.jsx)(q,{children:l.container}),i=(0,t.jsx)(q,{children:e.binPath??"searxng-run"});return s="external"===a?"docker"===r?(0,t.jsxs)(t.Fragment,{children:["Docker コンテナ ",n,"(tsunagi 外で起動したため、tsunagi は停止しません)"]}):(0,t.jsx)(t.Fragment,{children:"tsunagi 外で起動した SearXNG(起動方法は不明。tsunagi は停止しません)"}):"running"===a?"docker"===r?(0,t.jsxs)(t.Fragment,{children:["Docker コンテナ ",n," を tsunagi が起動しました(停止時・終了時に停止します)"]}):(0,t.jsxs)(t.Fragment,{children:[i," を tsunagi が起動しました(停止時・終了時に停止します)"]}):"docker"===r?null===l.containerExists?(0,t.jsxs)(t.Fragment,{children:["Docker コンテナ ",n," を起動します(Docker が応答しません。Docker Desktop を起動してください)"]}):l.containerExists?(0,t.jsxs)(t.Fragment,{children:["Docker コンテナ ",n," を起動します"]}):(0,t.jsxs)(t.Fragment,{children:["Docker コンテナ ",n," を作成して起動します(初回はイメージの取得に数分かかります)"]}):(0,t.jsxs)(t.Fragment,{children:[i," を起動します"]}),(0,t.jsxs)("p",{className:"flex items-start gap-1.5 text-xs text-muted-foreground",children:[(0,t.jsx)("docker"===r?eG:eH,{className:"mt-px size-3.5 shrink-0","aria-label":"起動方法"}),(0,t.jsx)("span",{children:s})]})}function eJ(){let[e,a]=(0,s.useState)(null),[r,l]=(0,s.useState)(null),[n,i]=(0,s.useState)(null),[o,c]=(0,s.useState)(!1),[d,u]=(0,s.useState)(!1),m=(0,s.useCallback)(async()=>{try{a(await R("/api/settings/searxng/status"))}catch(e){console.error("Failed to fetch SearXNG status:",e)}},[]);(0,s.useEffect)(()=>{m(),R("/api/settings/searxng").then(l).catch(e=>console.error("Failed to fetch SearXNG settings:",e));let e=setInterval(()=>void m(),3e3);return()=>clearInterval(e)},[m]),(0,s.useEffect)(()=>{r&&i({port:String(r.port),method:r.method,binPath:r.binPath,settingsPath:r.settingsPath,dockerContainer:r.dockerContainer})},[r]);let h=(0,s.useCallback)(async(e,t)=>{c(!0);try{a(await R(e,{method:"POST"}))}catch(e){y.toaster.create({type:"error",title:t,description:G(e)})}finally{c(!1)}},[]),p=(0,s.useCallback)(async()=>{if(n){c(!0);try{l(await _("/api/settings/searxng",{port:Number(n.port),method:n.method,binPath:n.binPath,settingsPath:n.settingsPath,dockerContainer:n.dockerContainer}))}catch(e){y.toaster.create({type:"error",title:"SearXNG の設定を保存できませんでした",description:G(e)}),c(!1);return}c(!1),await h("/api/settings/searxng/restart","SearXNG を再起動できません")}},[n,h]);if(!e?.required)return null;let g=e=>i(t=>t?{...t,...e}:t);return(0,t.jsxs)(eb,{children:[(0,t.jsxs)(eN,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsx)(ey,{children:"ローカル検索 (SearXNG)"}),(0,t.jsx)(x.Button,{variant:"ghost",size:"icon-sm",onClick:()=>u(!0),title:"ローカル検索について",children:(0,t.jsx)(ex,{})})]}),(0,t.jsxs)(ek,{children:["Ollama / LM Studio タブの WebSearch をローカルの SearXNG で行います。",(0,t.jsx)("strong",{className:"font-medium text-foreground",children:"Ollama か LM Studio が有効な間、tsunagi が自動で起動・停止します"}),"。searxng-run が無ければ Docker で起動します(コンテナが無ければ作成します)。"]})]}),(0,t.jsxs)(ew,{className:"flex flex-col gap-3",children:[(0,t.jsxs)(X,{children:["running"===e.state||"external"===e.state?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,t.jsx)(em.CheckCircle2,{className:"size-4"}),"running"===e.state?"起動中":"起動中(tsunagi 外で起動)"]}),(0,t.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:e.url})]}):"starting"===e.state?(0,t.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(ep.Loader2,{className:"size-4 animate-spin"}),e.message??"起動中","..."]}):"not-installed"===e.state?(0,t.jsxs)("span",{className:"flex items-center gap-2 text-warning",children:[(0,t.jsx)(eX,{className:"size-4"}),"SearXNG を起動できません(",(0,t.jsx)(q,{children:"searxng-run"})," も ",(0,t.jsx)(q,{children:"docker"})," ","も見つかりません)"]}):"error"===e.state?(0,t.jsxs)("span",{className:"flex items-center gap-2 text-destructive",children:[(0,t.jsx)(eu.AlertCircle,{className:"size-4"}),"エラー"]}):(0,t.jsx)("span",{className:"text-muted-foreground",children:"停止中"}),(0,t.jsxs)("div",{className:"ml-auto flex items-center gap-2",children:["external"!==e.state&&"starting"!==e.state&&(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:()=>void h("/api/settings/searxng/restart","SearXNG を起動できません"),disabled:o,children:[(0,t.jsx)(eV.RotateCw,{}),"running"===e.state?"再起動":"起動"]}),"running"===e.state&&(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:()=>void h("/api/settings/searxng/stop","SearXNG を停止できません"),disabled:o,children:[(0,t.jsx)(eR,{}),"停止"]})]})]}),(0,t.jsx)(eW,{status:e}),"error"===e.state&&e.error&&(0,t.jsx)("pre",{className:"max-h-40 overflow-auto rounded-md bg-muted p-2 text-[0.65rem] whitespace-pre-wrap text-destructive",children:e.error}),"not-installed"===e.state&&(0,t.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Docker Desktop を入れると、tsunagi がコンテナを作成して起動します(",(0,t.jsx)("a",{href:"https://minimalcorp.github.io/tsunagi/ja/features/local-search/",target:"_blank",rel:"noreferrer",className:"underline",children:"手順"}),")。Docker を使わない場合は、nix なら ",(0,t.jsx)(q,{children:"nix profile install nixpkgs#searxng"})," ","などで ",(0,t.jsx)(q,{children:"searxng-run"})," を PATH に入れてください(",(0,t.jsx)("a",{href:"https://docs.searxng.org/admin/installation.html",target:"_blank",rel:"noreferrer",className:"underline",children:"インストール方法"}),")。PATH にない場合は詳細設定でパスを指定できます。起動方法を固定したい場合も詳細設定で選べます。"]}),n&&(0,t.jsxs)(H,{children:[(0,t.jsx)(V,{label:"ポート",hint:"既定は 7964(キーパッドで sxng)",children:(0,t.jsx)(L.Input,{type:"number",min:1,max:65535,value:n.port,onChange:e=>g({port:e.target.value}),className:"font-mono"})}),(0,t.jsx)(V,{label:"起動方法",children:(0,t.jsx)("select",{value:n.method,onChange:e=>g({method:e.target.value}),className:"h-9 w-full rounded-md border border-input bg-transparent pl-3 pr-10 text-sm text-foreground shadow-xs",children:Object.keys(eq).map(e=>(0,t.jsx)("option",{value:e,children:eq[e]},e))})}),(0,t.jsx)(V,{label:"Docker のコンテナ名",hint:"無ければ tsunagi が公式イメージで作成します(設定は ~/.tsunagi/searxng/docker/<コンテナ名>/)",children:(0,t.jsx)(L.Input,{value:n.dockerContainer,onChange:e=>g({dockerContainer:e.target.value}),placeholder:"searxng",className:"font-mono"})}),(0,t.jsx)(V,{label:"searxng-run のパス (任意)",hint:"空欄なら PATH から探します",children:(0,t.jsx)(L.Input,{value:n.binPath,onChange:e=>g({binPath:e.target.value}),placeholder:e.binPath??"searxng-run",className:"font-mono"})}),(0,t.jsx)(V,{label:"settings.yml のパス (任意)",hint:"searxng-run で起動するときのみ。空欄なら tsunagi が生成したもの(~/.tsunagi/searxng/settings.yml)を使います。独自のものを使う場合は search.formats に json を含めてください",children:(0,t.jsx)(L.Input,{value:n.settingsPath,onChange:e=>g({settingsPath:e.target.value}),className:"font-mono"})}),(0,t.jsx)("div",{children:(0,t.jsxs)(x.Button,{size:"default",onClick:()=>void p(),disabled:o,children:[o&&(0,t.jsx)(ep.Loader2,{className:"animate-spin"}),"保存して再起動"]})})]})]}),(0,t.jsx)(O.Dialog,{open:d,onOpenChange:({open:e})=>u(e),title:"ローカル検索について",maxWidth:"2xl",children:(0,t.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-foreground",children:"仕組み"}),(0,t.jsxs)("p",{className:"text-muted-foreground",children:["Claude Code の WebSearch は Anthropic のサーバーツールのため、ローカルLLMでは使えません(LM Studio は無視し、Ollama は ollama.com のサインインが必要)。ローカル検索を使うタブでは WebSearch を無効化し、tsunagi の MCP が提供する ",(0,t.jsx)(q,{children:"web_search"})," ツールで SearXNG に検索させます。"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-foreground",children:"自動起動・停止"}),(0,t.jsxs)("p",{className:"text-muted-foreground",children:["Ollama か LM Studio が有効なら、tsunagi の起動時・有効化時に SearXNG を起動し、両方を無効にしたときと tsunagi の終了時に停止します。起動方法は"," ",(0,t.jsx)(q,{children:"searxng-run"})," があればそれを、なければ Docker(コンテナが無ければ作成)を使います。既にポートで SearXNG が動いていればそれを使います(tsunagi は止めません)。SearXNG がなくても tsunagi 自体は通常どおり動きます。"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-foreground",children:"注意"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"SearXNG は Google / Bing / DuckDuckGo などの検索エンジンに問い合わせます。短時間に大量に検索すると、検索エンジン側で一時的にブロックされることがあります。"})]})]})})]})}var eK=e.i(43034),eY=e.i(37837),eZ=e.i(99059),eQ=e.i(44142);function e0(){let e=(0,eQ.useUpdateStatus)(),a=(0,eQ.useCheckForUpdate)(),[r,l]=(0,s.useState)(!1),n=async()=>{l(!0);try{await a()}catch(e){y.toaster.create({type:"error",title:"Failed to check for updates",description:e instanceof Error?e.message:String(e)})}finally{l(!1)}};return(0,t.jsxs)("div",{className:"border-t border-border p-3 space-y-1 text-xs",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-1",children:[(0,t.jsxs)("span",{className:"font-medium text-foreground",children:["tsunagi ",e?.current?`v${e.current}`:"dev"]}),e?.current&&(0,t.jsx)(x.Button,{variant:"ghost",size:"icon-sm",onClick:()=>void n(),disabled:r,title:"Check for updates","aria-label":"Check for updates",children:(0,t.jsx)(ev.RefreshCw,{className:(0,F.cn)(r&&"animate-spin")})})]}),e?.updateAvailable?(0,t.jsxs)(eY.Popover,{children:[(0,t.jsx)(eY.PopoverTrigger,{className:"flex items-center gap-1 rounded-sm text-info hover:underline cursor-pointer outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",children:"ready"===e.autoUpdate.state?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eV.RotateCw,{className:"size-3.5"}),"Restart to update to v",e.autoUpdate.version]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eK.ArrowUpCircle,{className:"size-3.5"}),"v",e.latest," available"]})}),(0,t.jsx)(eZ.UpdatePopoverContent,{status:e})]}):e?.checkedAt?(0,t.jsxs)("div",{className:"flex items-center gap-1 text-success",children:[(0,t.jsx)(em.CheckCircle2,{className:"size-3.5"}),"Up to date"]}):(0,t.jsxs)("div",{className:"flex items-center gap-1 text-muted-foreground",children:[(0,t.jsx)(ex,{className:"size-3.5"}),"Not checked"]}),e?.entryOutdated&&!e.updateAvailable&&(0,t.jsxs)(eY.Popover,{children:[(0,t.jsxs)(eY.PopoverTrigger,{className:"flex items-center gap-1 rounded-sm text-warning hover:underline cursor-pointer outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",children:[(0,t.jsx)(eu.AlertCircle,{className:"size-3.5"}),"Reinstall recommended"]}),(0,t.jsx)(eZ.UpdatePopoverContent,{status:e})]}),e?.checkedAt&&(0,t.jsxs)("div",{className:"text-muted-foreground",children:["Last checked: ",new Date(e.checkedAt).toLocaleString()]})]})}var e1=e.i(51846),e2=e.i(81671);e.s(["default",0,function(){let e=(0,a.useRouter)();(0,e1.useDocumentTitle)("settings");let l=(0,e2.useAgentAvailability)(),o=l?.find(e=>"claude"===e.agent),c=o?.installed===!1,d=()=>{{let e=localStorage.getItem("tsunagi:env-selected-node");if(e)try{return JSON.parse(e)}catch(e){console.error("Failed to parse selected node:",e)}}return{scope:"global",label:"Global"}},[u,m]=(0,s.useState)(null),[h,g]=(0,s.useState)(0);return(0,s.useEffect)(()=>{fetch((0,i.apiUrl)("/api/onboarding/status")).then(e=>e.json()).then(e=>{e.data?.completed?m(d()):m({scope:"global",label:"Global"})}).catch(e=>{console.error("Failed to fetch onboarding status:",e),m(d())})},[]),(0,s.useEffect)(()=>{u&&localStorage.setItem("tsunagi:env-selected-node",JSON.stringify(u))},[u]),(0,t.jsxs)("div",{className:"h-screen flex flex-col bg-background",children:[(0,t.jsx)("div",{className:"sticky top-0 z-50 p-4 border-b border-border bg-card",children:(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)(x.Button,{variant:"ghost",onClick:()=>e.push("/"),className:"text-primary font-medium hover:bg-primary/10 hover:text-foreground",children:[(0,t.jsx)(r.ArrowLeft,{className:"w-4 h-4"}),"Back to Board"]}),(0,t.jsx)("h1",{className:"text-xl font-bold text-foreground absolute left-1/2 -translate-x-1/2",children:"Settings"}),(0,t.jsx)(eZ.UpdateIndicator,{})]})}),(0,t.jsxs)("div",{className:"flex-1 flex min-h-0",children:[(0,t.jsxs)("div",{className:"w-64 border-r border-border bg-card flex flex-col",children:[(0,t.jsx)("div",{className:"flex-1 min-h-0",children:(0,t.jsx)(p,{selectedNode:u,onNodeSelect:e=>{m(e)},refreshKey:h})}),(0,t.jsx)(e0,{})]}),(0,t.jsx)("div",{className:"flex-1 bg-card p-4 overflow-y-auto",children:u?(0,t.jsxs)("div",{className:"space-y-6",children:[Q.map(e=>(0,t.jsx)(ea,{agent:e,availability:l?.find(t=>t.agent===e),selectedNode:u},e)),(0,t.jsx)($,{selectedNode:u}),"global"===u.scope&&(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-foreground",children:"Repositories"}),(0,t.jsx)(en,{})]}),"global"===u.scope&&(0,t.jsx)(ed,{}),"global"===u.scope&&(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 pt-2 text-muted-foreground",children:[(0,t.jsx)(n,{className:"size-4"}),(0,t.jsx)("span",{className:"text-sm font-semibold",children:"Experimental"}),(0,t.jsx)("div",{className:"h-px flex-1 bg-border"})]}),(0,t.jsx)(es,{agent:"claude",availability:o}),(0,t.jsxs)("fieldset",{disabled:c,className:(0,F.cn)("min-w-0 space-y-6",c&&"opacity-50"),children:[(0,t.jsx)(eF,{}),(0,t.jsx)(eA,{}),(0,t.jsx)(e_,{})]}),(0,t.jsx)(eJ,{})]}),"repo"===u.scope&&u.owner&&u.repo&&(0,t.jsx)(eo,{owner:u.owner,repo:u.repo,onDeleted:()=>{m({scope:"global",label:"Global"}),g(e=>e+1)}})]}):(0,t.jsx)("div",{className:"h-full flex items-center justify-center text-muted-foreground text-sm",children:"Select a node from the left panel"})})]})]})}],82341)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,10012,54943,e=>{"use strict";var t,r=e.i(18050);e.i(47167);var a=e.i(71645);e.s([],19485),e.i(19485);var i=e.i(76477),l=e.i(67805),n=e.i(17514);let s=((t={}).disabled="data-disabled",t.valid="data-valid",t.invalid="data-invalid",t.touched="data-touched",t.dirty="data-dirty",t.filled="data-filled",t.focused="data-focused",t),o={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},u={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},d={disabled:!1,...u},c={valid:e=>null===e?null:e?{[s.valid]:""}:{[s.invalid]:""}},f=a.createContext({invalid:void 0,name:void 0,validityData:{state:o,errors:[],error:"",value:"",initialValue:null},setValidityData:n.NOOP,disabled:void 0,touched:u.touched,setTouched:n.NOOP,dirty:u.dirty,setDirty:n.NOOP,filled:u.filled,setFilled:n.NOOP,focused:u.focused,setFocused:n.NOOP,validate:()=>null,validationMode:"onSubmit",validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:d,markedDirtyRef:{current:!1},validation:{getValidationProps:(e=n.EMPTY_OBJECT)=>e,getInputValidationProps:(e=n.EMPTY_OBJECT)=>e,inputRef:{current:null},commit:async()=>{}}});function m(e=!0){let t=a.useContext(f);if(t.setValidityData===n.NOOP&&!e)throw Error((0,l.default)(28));return t}let p=a.createContext({legendId:void 0,setLegendId:()=>{},disabled:void 0}),v=a.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:n.NOOP,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function g(){return a.useContext(v)}var b=e.i(30628),x=e.i(19805),h=e.i(89879);let y=a.createContext({controlId:void 0,registerControlId:n.NOOP,labelId:void 0,setLabelId:n.NOOP,messageIds:[],setMessageIds:n.NOOP,getDescriptionProps:e=>e});function k(){return a.useContext(y)}let j=function(e){let t=(0,h.useBaseUiId)(),l=void 0===e.controlId?t:e.controlId,[n,s]=a.useState(l),[o,u]=a.useState(e.labelId),[d,c]=a.useState([]),f=(0,b.useRefWithInit)(()=>new Map),{messageIds:m}=k(),p=(0,i.useStableCallback)((e,t)=>{let r=f.current;void 0===t?r.delete(e):(r.set(e,t),s(e=>{let t;if(0!==r.size){for(let a of r.values()){if(void 0!==e&&a===e)return e;void 0===t&&(t=a)}return t}}))}),v=a.useCallback(e=>(0,x.mergeProps)({"aria-describedby":m.concat(d).join(" ")||void 0},e),[m,d]),g=a.useMemo(()=>({controlId:n,registerControlId:p,labelId:o,setLabelId:u,messageIds:d,setMessageIds:c,getDescriptionProps:v}),[n,p,o,u,d,c,v]);return(0,r.jsx)(y.Provider,{value:g,children:e.children})};var C=e.i(27601),w=e.i(66745);function R(e,t){return{...e,state:{...e.state,valid:!t&&e.state.valid}}}let M=Object.keys(o),N=a.forwardRef(function(e,t){let{errors:s,validationMode:u,submitAttemptedRef:d}=g(),{render:m,className:v,validate:b,validationDebounceTime:h=0,validationMode:y=u,name:j,disabled:N=!1,invalid:E,dirty:I,touched:S,actionsRef:P,...O}=e,{disabled:T}=function(e=!1){let t=a.useContext(p);if(!t&&!e)throw Error((0,l.default)(86));return t}(),A=(0,i.useStableCallback)(b||(()=>null)),V=T||N,[L,U]=a.useState(!1),[D,B]=a.useState(!1),[F,z]=a.useState(!1),[$,q]=a.useState(!1),J=I??D,H=S??L,_=a.useRef(!1),K=(0,i.useStableCallback)(e=>{void 0===I&&(e&&(_.current=!0),B(e))}),W=(0,i.useStableCallback)(e=>{void 0===S&&U(e)}),Y=(0,i.useStableCallback)(()=>"onChange"===y||"onSubmit"===y&&d.current),G=!!j&&Object.hasOwn(s,j)&&void 0!==s[j],Q=!0===E||G,[X,Z]=a.useState({state:o,error:"",errors:[],value:null,initialValue:null}),ee=!Q&&X.state.valid,et=a.useMemo(()=>({disabled:V,touched:H,dirty:J,valid:ee,filled:F,focused:$}),[V,H,J,ee,F,$]),er=function(e){let{formRef:t,clearErrors:r}=g(),{setValidityData:l,validate:s,validityData:u,validationDebounceTime:d,invalid:c,markedDirtyRef:f,state:m,name:p,shouldValidateOnChange:v}=e,{controlId:b,getDescriptionProps:h}=k(),y=(0,w.useTimeout)(),j=a.useRef(null),C=(0,i.useStableCallback)(async(e,r=!1)=>{let a,i=j.current;if(!i)return;if(r){if(!1!==m.valid)return;let r=i.validity;if(!r.valueMissing){let r={value:e,state:{...o,valid:!0},error:"",errors:[],initialValue:u.initialValue};if(i.setCustomValidity(""),b){let e=t.current.fields.get(b);e&&t.current.fields.set(b,{...e,...R(r,!1)})}l(r);return}let a=M.reduce((e,t)=>(e[t]=r[t],e),{});if(!a.valid&&!function(e){if(!e||e.valid||!e.valueMissing)return!1;let t=!1;for(let r of M)"valid"!==r&&("valueMissing"===r&&(t=e[r]),e[r]&&(t=!1));return t}(a))return}y.clear();let n=null,d=[],p=function(e){let t=M.reduce((t,r)=>(t[r]=e.validity[r],t),{}),r=!1;for(let e of M)if("valid"!==e){if("valueMissing"===e&&t[e])r=!0;else if(t[e])return t}return r&&!f.current&&(t.valid=!0,t.valueMissing=!1),t}(i),g=v();if(i.validationMessage&&!g)a=i.validationMessage,d=[i.validationMessage];else{let r=s(e,Array.from(t.current.fields.values()).reduce((e,t)=>(t.name&&(e[t.name]=t.getValue()),e),{}));null!==(n="object"==typeof r&&null!==r&&"then"in r?await r:r)?(p.valid=!1,p.customError=!0,Array.isArray(n)?(d=n,i.setCustomValidity(n.join("\n"))):n&&(d=[n],i.setCustomValidity(n))):g&&(i.setCustomValidity(""),p.customError=!1,i.validationMessage?(a=i.validationMessage,d=[i.validationMessage]):i.validity.valid&&!p.valid&&(p.valid=!0))}let x={value:e,state:p,error:a??(Array.isArray(n)?n[0]:n??""),errors:d,initialValue:u.initialValue};if(b){let e=t.current.fields.get(b);e&&t.current.fields.set(b,{...e,...R(x,c)})}l(x)}),N=a.useCallback((e={})=>(0,x.mergeProps)(h,!1===m.valid?{"aria-invalid":!0}:n.EMPTY_OBJECT,e),[h,m.valid]),E=a.useCallback((e={})=>(0,x.mergeProps)({onChange(e){if(e.nativeEvent.defaultPrevented)return;if(r(p),!v())return void C(e.currentTarget.value,!0);let t=e.currentTarget;""===t.value?C(t.value):(y.clear(),d?y.start(d,()=>{C(t.value)}):C(t.value))}},N(e)),[N,r,p,y,C,d,v]);return a.useMemo(()=>({getValidationProps:N,getInputValidationProps:E,inputRef:j,commit:C}),[N,E,C])}({setValidityData:Z,validate:A,validityData:X,validationDebounceTime:h,invalid:Q,markedDirtyRef:_,state:et,name:j,shouldValidateOnChange:Y}),ea=a.useCallback(()=>{_.current=!0,er.commit(X.value)},[er,X]);a.useImperativeHandle(P,()=>({validate:ea}),[ea]);let ei=a.useMemo(()=>({invalid:Q,name:j,validityData:X,setValidityData:Z,disabled:V,touched:H,setTouched:W,dirty:J,setDirty:K,filled:F,setFilled:z,focused:$,setFocused:q,validate:A,validationMode:y,validationDebounceTime:h,shouldValidateOnChange:Y,state:et,markedDirtyRef:_,validation:er}),[Q,j,X,V,H,W,J,K,F,z,$,q,A,y,h,Y,et,er]),el=(0,C.useRenderElement)("div",e,{ref:t,state:et,props:O,stateAttributesMapping:c});return(0,r.jsx)(f.Provider,{value:ei,children:el})}),E=a.forwardRef(function(e,t){return(0,r.jsx)(j,{children:(0,r.jsx)(N,{...e,ref:t})})});var I=e.i(29315),S=e.i(90219),P=e.i(47857),O=e.i(24564);let T=a.forwardRef(function(e,t){let{render:r,className:l,id:n,nativeLabel:s=!0,...o}=e,u=m(!1),{labelId:d}=k(),f=a.useRef(null),p=function(e={}){let{id:t,fallbackControlId:r,native:a=!1,setLabelId:l,focusControl:n}=e,{controlId:s,setLabelId:o}=k(),u=(0,i.useStableCallback)(e=>{o(e),l?.(e)}),d=(0,O.useRegisteredLabelId)(t,u),c=s??r;function f(e){let t=(0,P.getTarget)(e.nativeEvent);t?.closest("button,input,select,textarea")||(!e.defaultPrevented&&e.detail>1&&e.preventDefault(),a||function(e){if(n)return n(e,c);if(!c)return;let t=(0,S.ownerDocument)(e.currentTarget).getElementById(c);(0,I.isHTMLElement)(t)&&t.focus({focusVisible:!0})}(e))}return a?{id:d,htmlFor:c??void 0,onMouseDown:f}:{id:d,onClick:f,onPointerDown(e){e.preventDefault()}}}({id:d??n,native:s});return(0,C.useRenderElement)("label",e,{ref:[t,f],state:u.state,props:[p,o],stateAttributesMapping:c})});var A=e.i(977),V=e.i(89269),L=e.i(84759),U=e.i(88841);let D={...c,...L.transitionStatusMapping},B=a.forwardRef(function(e,t){let{render:i,id:l,className:n,match:s,...o}=e,u=(0,h.useBaseUiId)(l),{validityData:d,state:c,name:f}=m(!1),{setMessageIds:p}=k(),{errors:v}=g(),b=f?v[f]:null,x=!1;x=!!b||!0===s||(s?!!d.state[s]:!1===d.state.valid);let{mounted:y,transitionStatus:j,setMounted:w}=(0,U.useTransitionStatus)(x);(0,A.useIsoLayoutEffect)(()=>{if(x&&u)return p(e=>e.concat(u)),()=>{p(e=>e.filter(e=>e!==u))}},[x,u,p]);let R=a.useRef(null),[M,N]=a.useState(null),[E,I]=a.useState(null),S=b||(d.errors.length>1?(0,r.jsx)("ul",{children:d.errors.map(e=>(0,r.jsx)("li",{children:e},e))}):d.error),P=d.error;null!=b?P=Array.isArray(b)?JSON.stringify(b):b:d.errors.length>1&&(P=JSON.stringify(d.errors)),x&&P!==E&&(I(P),N(S)),(0,V.useOpenChangeComplete)({open:x,ref:R,onComplete(){x||w(!1)}});let O={...c,transitionStatus:j},T=(0,C.useRenderElement)("div",e,{ref:[t,R],state:O,props:[{id:u,children:x?S:M},o],stateAttributesMapping:D,enabled:y});return y?T:null}),F=a.forwardRef(function(e,t){let{render:r,id:a,className:i,...l}=e,n=(0,h.useBaseUiId)(a),s=m(!1),{setMessageIds:o}=k();return(0,A.useIsoLayoutEffect)(()=>{if(n)return o(e=>e.concat(n)),()=>{o(e=>e.filter(e=>e!==n))}},[n,o]),(0,C.useRenderElement)("p",e,{ref:t,state:s.state,props:[{id:n},l],stateAttributesMapping:c})});var z=e.i(94349),$=e.i(74080),q=e.i(5963),J=e.i(3404);let H=a.forwardRef(function(e,t){let{render:r,className:l,id:s,name:o,value:u,disabled:d=!1,onValueChange:f,defaultValue:p,autoFocus:v=!1,...x}=e,{state:y,name:j,disabled:w,setTouched:M,setDirty:N,validityData:E,setFocused:O,setFilled:T,validationMode:V,validation:L}=m(),U=w||d,D=j??o,B={...y,disabled:U},{labelId:F}=k(),H=function(e={}){let{id:t,implicit:r=!1,controlRef:l}=e,{controlId:s,registerControlId:o}=k(),u=(0,h.useBaseUiId)(t),d=r?s:void 0,c=(0,b.useRefWithInit)(()=>Symbol("labelable-control")),f=a.useRef(!1),m=a.useRef(null!=t),p=(0,i.useStableCallback)(()=>{f.current&&o!==n.NOOP&&(f.current=!1,o(c.current,void 0))});return(0,A.useIsoLayoutEffect)(()=>{let e;if(o!==n.NOOP){if(r){let r=l?.current;e=(0,I.isElement)(r)&&null!=r.closest("label")?t??null:d??u}else if(null!=t)m.current=!0,e=t;else{if(!m.current)return void p();e=u}if(void 0===e)return void p();f.current=!0,o(c.current,e)}},[t,l,d,o,r,u,c,p]),a.useEffect(()=>p,[p]),s??u}({id:s});(0,A.useIsoLayoutEffect)(()=>{let e=null!=u;L.inputRef.current?.value||e&&""!==u?T(!0):e&&""===u&&T(!1)},[L.inputRef,T,u]);let _=a.useRef(null);(0,A.useIsoLayoutEffect)(()=>{v&&_.current===(0,P.activeElement)((0,S.ownerDocument)(_.current))&&O(!0)},[v,O]);let[K]=(0,z.useControlled)({controlled:u,default:p,name:"FieldControl",state:"value"}),W=void 0!==u,Y=W?K:void 0;return!function(e){let{enabled:t=!0,value:r,id:a,name:l,controlRef:n,commit:s}=e,{formRef:o}=g(),{invalid:u,markedDirtyRef:d,validityData:c,setValidityData:f}=m(),p=(0,i.useStableCallback)(e.getValue);(0,A.useIsoLayoutEffect)(()=>{if(!t)return;let e=r;void 0===e&&(e=p()),null===c.initialValue&&null!==e&&f(t=>({...t,initialValue:e}))},[t,f,r,c.initialValue,p]),(0,A.useIsoLayoutEffect)(()=>{t&&a&&o.current.fields.set(a,{getValue:p,name:l,controlRef:n,validityData:R(c,u),validate(e=!0){let t=r;void 0===t&&(t=p()),d.current=!0,e?$.flushSync(()=>s(t)):s(t)}})},[s,n,t,o,p,a,u,d,l,c,r]),(0,A.useIsoLayoutEffect)(()=>{let e=o.current.fields;return()=>{a&&e.delete(a)}},[o,a])}({id:H,name:D,commit:L.commit,value:Y,getValue:()=>L.inputRef.current?.value,controlRef:L.inputRef}),(0,C.useRenderElement)("input",e,{ref:[t,_],state:B,props:[{id:H,disabled:U,name:D,ref:L.inputRef,"aria-labelledby":F,autoFocus:v,...W?{value:Y}:{defaultValue:p},onChange(e){let t=e.currentTarget.value;f?.(t,(0,q.createChangeEventDetails)(J.REASONS.none,e.nativeEvent)),N(t!==E.initialValue),T(""!==t)},onFocus(){O(!0)},onBlur(e){M(!0),O(!1),"onBlur"===V&&L.commit(e.currentTarget.value)},onKeyDown(e){"INPUT"===e.currentTarget.tagName&&"Enter"===e.key&&(M(!0),L.commit(e.currentTarget.value))}},L.getInputValidationProps(),x],stateAttributesMapping:c})}),_=a.createContext({disabled:!1}),K=a.createContext(void 0),W=a.forwardRef(function(e,t){let{render:i,className:n,disabled:s=!1,...o}=e,{state:u,disabled:d}=m(!1),f=d||s,p=function(e=!0){let t=a.useContext(K);if(void 0===t&&!e)throw Error((0,l.default)(3));return t}(),v=p?.parent.id,g=p?.allValues!==void 0,b=a.useMemo(()=>({disabled:f}),[f]),x=(0,C.useRenderElement)("div",e,{ref:t,state:u,props:o,stateAttributesMapping:c});return(0,r.jsx)(j,{controlId:g?v:void 0,children:(0,r.jsx)(_.Provider,{value:b,children:x})})});e.s(["Control",0,H,"Description",0,F,"Error",0,B,"Item",0,W,"Label",0,T,"Root",0,E,"Validity",0,function(e){let{children:t}=e,{validityData:i,invalid:l}=m(!1),n=a.useMemo(()=>R(i,l),[i,l]),s=!1===n.state.valid,{transitionStatus:o}=(0,U.useTransitionStatus)(s),u=a.useMemo(()=>({...n,validity:n.state,transitionStatus:o}),[n,o]);return(0,r.jsx)(a.Fragment,{children:t(u)})}],71975);var Y=e.i(71975),Y=Y;let G=a.forwardRef(function(e,t){return(0,r.jsx)(Y.Control,{ref:t,...e})});var Q=e.i(52088);e.s(["Input",0,function({className:e,type:t,...a}){return(0,r.jsx)(G,{type:t,"data-slot":"input",className:(0,Q.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-input/20 px-3 py-1 text-sm transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...a})}],10012);let X=(0,e.i(75254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["default",0,X],54943)},57024,e=>{"use strict";var t=e.i(85699);function r(e){let{type:r,title:a,description:i,duration:l}=e,n=e.id??crypto.randomUUID(),s={id:n,description:i,duration:l};switch(r){case"loading":t.toast.loading(a,s);break;case"success":t.toast.success(a,s);break;case"error":t.toast.error(a,s);break;case"warning":t.toast.warning(a,s);break;case"info":t.toast.info(a,s);break;default:(0,t.toast)(a,s)}return n}e.s(["toaster",0,{create:e=>r(e),update:(e,t)=>{r({...t,id:e})},dismiss:e=>{t.toast.dismiss(e)}}])},61653,e=>{"use strict";let t=(0,e.i(75254).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["default",0,t])},16715,e=>{"use strict";let t=(0,e.i(75254).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",0,t],16715)},77814,63337,e=>{"use strict";var t,r=e.i(18050);e.s([],33847),e.i(33847),e.i(47167);var a=e.i(71645),i=e.i(231),l=e.i(62372);let n=new Map;function s(e,t,r){return null==e?"":(function(e,t){let r=JSON.stringify({locale:e,options:t}),a=n.get(r);if(a)return a;let i=new Intl.NumberFormat(e,t);return n.set(r,i),i})(t,r).format(e)}var o=e.i(27601),u=e.i(67805);let d=a.createContext(void 0);function c(){let e=a.useContext(d);if(void 0===e)throw Error((0,u.default)(51));return e}let f=((t={}).complete="data-complete",t.indeterminate="data-indeterminate",t.progressing="data-progressing",t),m={status:e=>"progressing"===e?{[f.progressing]:""}:"complete"===e?{[f.complete]:""}:"indeterminate"===e?{[f.indeterminate]:""}:null};function p(e,t){return null==t?"indeterminate progress":e||`${t}%`}let v=a.forwardRef(function(e,t){var n;let{format:u,getAriaValueText:c=p,locale:f,max:v=100,min:g=0,value:b,render:x,className:h,children:y,...k}=e,[j,C]=a.useState(),w=(0,i.useValueAsRef)(u),R="indeterminate";Number.isFinite(b)&&(R=b===v?"complete":"progressing");let M=(n=w.current,null==b?"":n?s(b,f,n):s(b/100,f,{style:"percent"})),N=a.useMemo(()=>({status:R}),[R]),E={"aria-labelledby":j,"aria-valuemax":v,"aria-valuemin":g,"aria-valuenow":b??void 0,"aria-valuetext":c(M,b),role:"progressbar",children:(0,r.jsxs)(a.Fragment,{children:[y,(0,r.jsx)("span",{role:"presentation",style:l.visuallyHidden,children:"x"})]})},I=a.useMemo(()=>({formattedValue:M,max:v,min:g,setLabelId:C,state:N,status:R,value:b}),[M,v,g,C,N,R,b]),S=(0,o.useRenderElement)("div",e,{state:N,ref:t,props:[E,k],stateAttributesMapping:m});return(0,r.jsx)(d.Provider,{value:I,children:S})}),g=a.forwardRef(function(e,t){let{render:r,className:a,...i}=e,{state:l}=c();return(0,o.useRenderElement)("div",e,{state:l,ref:t,props:i,stateAttributesMapping:m})}),b=a.forwardRef(function(e,t){let{render:r,className:i,...l}=e,{max:n,min:s,value:u,state:d}=c(),f=Number.isFinite(u)&&null!==u?(u-s)*100/(n-s):null,p=a.useCallback(()=>null==f?{}:{insetInlineStart:0,height:"inherit",width:`${f}%`},[f]);return(0,o.useRenderElement)("div",e,{state:d,ref:t,props:[{style:p()},l],stateAttributesMapping:m})}),x=a.forwardRef(function(e,t){let{className:r,render:a,children:i,...l}=e,{value:n,formattedValue:s,state:u}=c(),d=null==n?"indeterminate":s,f=null==n?null:s;return(0,o.useRenderElement)("span",e,{state:u,ref:t,props:[{"aria-hidden":!0,children:"function"==typeof i?i(d,n):f},l],stateAttributesMapping:m})});var h=e.i(24564);let y=a.forwardRef(function(e,t){let{render:r,className:a,id:i,...l}=e,{setLabelId:n,state:s}=c(),u=(0,h.useRegisteredLabelId)(i,n);return(0,o.useRenderElement)("span",e,{state:s,ref:t,props:[{id:u,role:"presentation"},l],stateAttributesMapping:m})});e.s(["Indicator",0,b,"Label",0,y,"Root",0,v,"Track",0,g,"Value",0,x],45929);var k=e.i(45929),k=k,j=e.i(52088);function C({className:e,...t}){return(0,r.jsx)(k.Track,{className:(0,j.cn)("relative flex h-1 w-full items-center overflow-x-hidden rounded-md bg-muted",e),"data-slot":"progress-track",...t})}function w({className:e,...t}){return(0,r.jsx)(k.Indicator,{"data-slot":"progress-indicator",className:(0,j.cn)("h-full bg-primary",e),style:{transition:"width 500ms ease-in-out"},...t})}function R(e){let t=e.filter(e=>"deleted"!==e.status),r=new Set(t.filter(e=>"completed"===e.status&&e.id).map(e=>e.id)),a=new Set(t.map(e=>e.id).filter(Boolean)),i=t.map(e=>{let t="pending"===e.status&&(e.blockedBy??[]).some(e=>a.has(e)&&!r.has(e));return{...e,displayStatus:t?"blocked":e.status}}),l=i.find(e=>"in_progress"===e.status);return{items:i,completed:i.filter(e=>"completed"===e.status).length,total:i.length,current:l?l.activeForm||l.content:void 0}}e.s(["Progress",0,function({className:e,children:t,value:a,...i}){return(0,r.jsxs)(k.Root,{value:a,"data-slot":"progress",className:(0,j.cn)("flex flex-wrap gap-3",e),...i,children:[t,(0,r.jsx)(C,{children:(0,r.jsx)(w,{})})]})}],77814),e.s(["computeTodoProgress",0,R,"sumTodoProgress",0,function(e){let t=e.map(R);return{items:t.flatMap(e=>e.items),completed:t.reduce((e,t)=>e+t.completed,0),total:t.reduce((e,t)=>e+t.total,0),current:t.find(e=>e.current)?.current}}],63337)},63209,e=>{"use strict";var t=e.i(61653);e.s(["AlertCircle",()=>t.default])},91810,e=>{"use strict";let t=(0,e.i(75254).default)("rotate-cw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);e.s(["RotateCw",0,t],91810)},43034,e=>{"use strict";let t=(0,e.i(75254).default)("circle-arrow-up",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);e.s(["ArrowUpCircle",0,t],43034)},99059,e=>{"use strict";var t=e.i(18050),r=e.i(71645),a=e.i(63209),i=e.i(43034),l=e.i(43531),n=e.i(74886),s=e.i(78917),o=e.i(31278),u=e.i(91810),d=e.i(85902),c=e.i(37837),f=e.i(57024),m=e.i(44142),p=e.i(52088);let v=["npm i -g @minimalcorp/tsunagi@latest","npx @minimalcorp/tsunagi@latest"];function g({command:e}){let[a,i]=(0,r.useState)(!1),s=async()=>{try{await navigator.clipboard.writeText(e),i(!0),setTimeout(()=>i(!1),2e3)}catch(e){console.error("Failed to copy command:",e)}};return(0,t.jsxs)("div",{className:"flex items-center gap-1 rounded-md border border-border bg-muted/50 pl-2",children:[(0,t.jsx)("code",{className:"flex-1 truncate font-mono text-xs",children:e}),(0,t.jsx)(d.Button,{variant:"ghost",size:"icon",onClick:s,title:a?"Copied!":"Copy command","aria-label":a?"Copied to clipboard":"Copy command to clipboard",children:a?(0,t.jsx)(l.Check,{className:"text-success"}):(0,t.jsx)(n.Copy,{})})]})}function b(){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"space-y-1.5",children:v.map(e=>(0,t.jsx)(g,{command:e},e))}),(0,t.jsxs)("div",{className:"flex items-center justify-between text-muted-foreground",children:[(0,t.jsx)("span",{children:"Restart tsunagi to apply"}),(0,t.jsxs)("a",{href:"https://www.npmjs.com/package/@minimalcorp/tsunagi",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 hover:text-foreground",children:["npm",(0,t.jsx)(s.ExternalLink,{className:"size-3"})]})]})]})}function x(){let{restarting:e,restart:i}=(0,m.useRestartToUpdate)(),[l,n]=(0,r.useState)(!1),[s,c]=(0,r.useState)([]),p=async()=>{n(!0);try{let e=await i();c(e.ok?[]:e.blockers)}catch(e){f.toaster.create({type:"error",title:"Failed to restart",description:e instanceof Error?e.message:String(e)})}finally{n(!1)}};return e?(0,t.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(o.Loader2,{className:"size-4 animate-spin"}),"Restarting..."]}):(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)(d.Button,{className:"w-full",onClick:()=>void p(),disabled:l,children:[l?(0,t.jsx)(o.Loader2,{className:"animate-spin"}):(0,t.jsx)(u.RotateCw,{}),"Restart to update"]}),s.length>0?(0,t.jsxs)("div",{className:"space-y-1 text-warning",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsx)(a.AlertCircle,{className:"size-3.5"}),"Wait for running tasks to finish"]}),(0,t.jsx)("ul",{className:"list-disc space-y-0.5 pl-5 text-muted-foreground",children:s.map(e=>(0,t.jsx)("li",{className:"truncate",children:e.title},e.taskId))})]}):(0,t.jsx)("p",{className:"text-muted-foreground",children:"Open terminal sessions will be closed."})]})}function h(){return(0,t.jsxs)("div",{className:"space-y-1.5",children:[(0,t.jsxs)("div",{className:"flex items-start gap-1 text-warning",children:[(0,t.jsx)(a.AlertCircle,{className:"mt-0.5 size-3.5 shrink-0"}),"Reinstall tsunagi to keep auto-update up to date"]}),(0,t.jsx)(g,{command:v[0]})]})}function y({status:e}){let{state:r,version:i,error:l}=e.autoUpdate;return"ready"===r?(0,t.jsx)(x,{}):"idle"===r||"installing"===r?(0,t.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,t.jsx)(o.Loader2,{className:"size-4 animate-spin"}),"Downloading v",i??e.latest,"..."]}):(0,t.jsxs)(t.Fragment,{children:["error"===r&&l&&(0,t.jsxs)("div",{className:"flex items-start gap-1 text-destructive",children:[(0,t.jsx)(a.AlertCircle,{className:"mt-0.5 size-3.5 shrink-0"}),(0,t.jsx)("span",{className:"line-clamp-3 break-all",children:l})]}),(0,t.jsx)(b,{})]})}function k({status:e}){let{state:r,version:a}=e.autoUpdate,i="ready"===r&&a?a:e.latest;return(0,t.jsxs)(c.PopoverContent,{align:"end",className:"w-80 gap-3",children:[(0,t.jsxs)(c.PopoverHeader,{children:[(0,t.jsx)(c.PopoverTitle,{children:e.updateAvailable?"New version available":"Reinstall recommended"}),e.updateAvailable&&(0,t.jsxs)(c.PopoverDescription,{children:["v",e.current," → v",i]})]}),e.updateAvailable&&(0,t.jsx)(y,{status:e}),e.entryOutdated&&(0,t.jsx)(h,{})]})}e.s(["UpdateIndicator",0,function({className:e}){let r=(0,m.useUpdateStatus)(),{restarting:a}=(0,m.useRestartToUpdate)();if(a)return(0,t.jsxs)(d.Button,{variant:"outline",size:"lg",className:(0,p.cn)("border-info/50 text-info",e),disabled:!0,title:"Restarting to apply the update",children:[(0,t.jsx)(o.Loader2,{className:"animate-spin"}),"Restarting"]});if(!r||!r.updateAvailable&&!r.entryOutdated)return null;let l="ready"===r.autoUpdate.state,n=r.updateAvailable?`v${l&&r.autoUpdate.version?r.autoUpdate.version:r.latest}`:"Reinstall";return(0,t.jsxs)(c.Popover,{children:[(0,t.jsxs)(c.PopoverTrigger,{render:(0,t.jsx)(d.Button,{variant:"outline",size:"lg",className:(0,p.cn)("relative border-info/50 text-info hover:text-info active:scale-95",e),title:l?"Restart to update":r.updateAvailable?"New version available":"Reinstall recommended"}),children:[l?(0,t.jsx)(u.RotateCw,{}):(0,t.jsx)(i.ArrowUpCircle,{}),n,(0,t.jsx)("span",{className:"absolute -top-0.5 -right-0.5 size-2 rounded-full bg-info"})]}),(0,t.jsx)(k,{status:r})]})},"UpdatePopoverContent",0,k])},51846,e=>{"use strict";var t=e.i(71645);e.s(["useDocumentTitle",0,function(e,r=0){(0,t.useEffect)(()=>{let t=r>0?`(${r}) 繋`:"繋",a=e?`${t} | ${e}`:t,i=document.title;return document.title=a,()=>{document.title=i}},[e,r])}])},55716,e=>{"use strict";let t=(0,e.i(75254).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",0,t],55716)},7233,5352,e=>{"use strict";let t=(0,e.i(75254).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",0,t],7233);let r=[{bg:"bg-blue-100 dark:bg-blue-900/30",text:"text-blue-700 dark:text-blue-300"},{bg:"bg-emerald-100 dark:bg-emerald-900/30",text:"text-emerald-700 dark:text-emerald-300"},{bg:"bg-violet-100 dark:bg-violet-900/30",text:"text-violet-700 dark:text-violet-300"},{bg:"bg-amber-100 dark:bg-amber-900/30",text:"text-amber-700 dark:text-amber-300"},{bg:"bg-rose-100 dark:bg-rose-900/30",text:"text-rose-700 dark:text-rose-300"},{bg:"bg-cyan-100 dark:bg-cyan-900/30",text:"text-cyan-700 dark:text-cyan-300"},{bg:"bg-orange-100 dark:bg-orange-900/30",text:"text-orange-700 dark:text-orange-300"},{bg:"bg-teal-100 dark:bg-teal-900/30",text:"text-teal-700 dark:text-teal-300"},{bg:"bg-indigo-100 dark:bg-indigo-900/30",text:"text-indigo-700 dark:text-indigo-300"},{bg:"bg-pink-100 dark:bg-pink-900/30",text:"text-pink-700 dark:text-pink-300"},{bg:"bg-lime-100 dark:bg-lime-900/30",text:"text-lime-700 dark:text-lime-300"},{bg:"bg-fuchsia-100 dark:bg-fuchsia-900/30",text:"text-fuchsia-700 dark:text-fuchsia-300"}];e.s(["getRepoColor",0,function(e,t){let a=function(e){let t=5381;for(let r=0;r<e.length;r++)t=33*t^e.charCodeAt(r);return t>>>0}(`${e}/${t}`)%r.length;return r[a]}],5352)}]);