vforclaude2 0.3.87

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 (1908) hide show
  1. package/.claude/.claude.json +5 -0
  2. package/.claude/backups/.claude.json.backup.1772012846605 +4 -0
  3. package/.claude/cowork_plugins/install-counts-cache.json +634 -0
  4. package/.claude/cowork_plugins/known_marketplaces.json +10 -0
  5. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/.claude-plugin/marketplace.json +115 -0
  6. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/LICENSE +202 -0
  7. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/README.md +80 -0
  8. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/.claude-plugin/plugin.json +8 -0
  9. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/.mcp.json +44 -0
  10. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/LICENSE +202 -0
  11. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/README.md +82 -0
  12. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/instrument-data-to-allotrope/LICENSE.txt +201 -0
  13. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/instrument-data-to-allotrope/requirements.txt +26 -0
  14. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/nextflow-development/LICENSE.txt +201 -0
  15. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/scientific-problem-selection/LICENSE.txt +201 -0
  16. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/scvi-tools/LICENSE.txt +201 -0
  17. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/single-cell-rna-qc/LICENSE.txt +201 -0
  18. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/.claude-plugin/plugin.json +8 -0
  19. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/LICENSE +202 -0
  20. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/skills/cowork-plugin-customizer/LICENSE.txt +202 -0
  21. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/skills/cowork-plugin-customizer/examples/customized-mcp.json +40 -0
  22. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/.claude-plugin/plugin.json +8 -0
  23. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/.mcp.json +40 -0
  24. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/LICENSE +202 -0
  25. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/README.md +139 -0
  26. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/design/.claude-plugin/plugin.json +8 -0
  27. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/design/.mcp.json +40 -0
  28. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/design/README.md +116 -0
  29. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/engineering/.claude-plugin/plugin.json +8 -0
  30. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/engineering/.mcp.json +44 -0
  31. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/engineering/README.md +135 -0
  32. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/.claude-plugin/plugin.json +8 -0
  33. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/.mcp.json +36 -0
  34. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/LICENSE +202 -0
  35. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/README.md +156 -0
  36. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/.claude-plugin/plugin.json +8 -0
  37. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/.mcp.json +32 -0
  38. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/LICENSE +202 -0
  39. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/README.md +91 -0
  40. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/human-resources/.claude-plugin/plugin.json +8 -0
  41. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/human-resources/.mcp.json +28 -0
  42. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/human-resources/README.md +134 -0
  43. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/.claude-plugin/plugin.json +8 -0
  44. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/.mcp.json +36 -0
  45. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/LICENSE +202 -0
  46. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/README.md +229 -0
  47. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/.claude-plugin/plugin.json +8 -0
  48. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/.mcp.json +48 -0
  49. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/LICENSE +202 -0
  50. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/README.md +88 -0
  51. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/operations/.claude-plugin/plugin.json +8 -0
  52. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/operations/.mcp.json +36 -0
  53. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/operations/README.md +134 -0
  54. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/.claude-plugin/plugin.json +13 -0
  55. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/.mcp.json +8 -0
  56. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/LICENSE +21 -0
  57. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/README.md +99 -0
  58. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/.claude-plugin/marketplace.json +20 -0
  59. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/.claude-plugin/plugin.json +9 -0
  60. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/.mcp.json +32 -0
  61. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/LICENSE +21 -0
  62. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/README.md +132 -0
  63. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/settings/brand-voice.local.md.example +42 -0
  64. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/.claude-plugin/plugin.json +9 -0
  65. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/.mcp.json +8 -0
  66. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/LICENSE +202 -0
  67. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/README.md +64 -0
  68. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/.claude-plugin/plugin.json +11 -0
  69. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/.mcp.json +12 -0
  70. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/LICENSE +21 -0
  71. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/README.md +108 -0
  72. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/.claude-plugin/plugin.json +8 -0
  73. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/.mcp.json +64 -0
  74. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/LICENSE +202 -0
  75. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/README.md +102 -0
  76. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/.claude-plugin/plugin.json +8 -0
  77. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/.mcp.json +44 -0
  78. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/LICENSE +202 -0
  79. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/README.md +96 -0
  80. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/skills/dashboard.html +3098 -0
  81. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/.claude-plugin/plugin.json +8 -0
  82. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/.mcp.json +60 -0
  83. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/LICENSE +202 -0
  84. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/README.md +143 -0
  85. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/skills/create-an-asset/README.md +169 -0
  86. package/.claude/cowork_settings.json +10 -0
  87. package/.claude/debug/93c847f7-9a51-4a5f-9a41-6fd84fab16d3.txt +37 -0
  88. package/.claude/settings.local.json +7 -0
  89. package/.next/BUILD_ID +1 -0
  90. package/.next/app-path-routes-manifest.json +104 -0
  91. package/.next/build-manifest.json +20 -0
  92. package/.next/diagnostics/build-diagnostics.json +6 -0
  93. package/.next/diagnostics/framework.json +1 -0
  94. package/.next/export-marker.json +6 -0
  95. package/.next/images-manifest.json +68 -0
  96. package/.next/next-minimal-server.js.nft.json +1 -0
  97. package/.next/next-server.js.nft.json +1 -0
  98. package/.next/package.json +1 -0
  99. package/.next/prerender-manifest.json +527 -0
  100. package/.next/react-loadable-manifest.json +8 -0
  101. package/.next/required-server-files.js +365 -0
  102. package/.next/required-server-files.json +365 -0
  103. package/.next/routes-manifest.json +709 -0
  104. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -0
  105. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -0
  106. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -0
  107. package/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -0
  108. package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -0
  109. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -0
  110. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -0
  111. package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -0
  112. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -0
  113. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -0
  114. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -0
  115. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -0
  116. package/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -0
  117. package/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -0
  118. package/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -0
  119. package/.next/server/app/(dashboard)/dashboard/page.js +2 -0
  120. package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -0
  121. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -0
  122. package/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -0
  123. package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -0
  124. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -0
  125. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -0
  126. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -0
  127. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -0
  128. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -0
  129. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -0
  130. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -0
  131. package/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -0
  132. package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -0
  133. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -0
  134. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -0
  135. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -0
  136. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -0
  137. package/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -0
  138. package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -0
  139. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -0
  140. package/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -0
  141. package/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -0
  142. package/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -0
  143. package/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -0
  144. package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -0
  145. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -0
  146. package/.next/server/app/_global-error/page.js +32 -0
  147. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  148. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  149. package/.next/server/app/_global-error.html +1 -0
  150. package/.next/server/app/_global-error.meta +16 -0
  151. package/.next/server/app/_global-error.rsc +14 -0
  152. package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  153. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  154. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  155. package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  156. package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  157. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  158. package/.next/server/app/_not-found/page.js +2 -0
  159. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  160. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  161. package/.next/server/app/_not-found.html +1 -0
  162. package/.next/server/app/_not-found.meta +16 -0
  163. package/.next/server/app/_not-found.rsc +20 -0
  164. package/.next/server/app/_not-found.segments/_full.segment.rsc +20 -0
  165. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  166. package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
  167. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  168. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  169. package/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -0
  170. package/.next/server/app/api/auth/login/route.js +1 -0
  171. package/.next/server/app/api/auth/login/route.js.nft.json +1 -0
  172. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
  173. package/.next/server/app/api/auth/logout/route.js +1 -0
  174. package/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  175. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
  176. package/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -0
  177. package/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -0
  178. package/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -0
  179. package/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -0
  180. package/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -0
  181. package/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -0
  182. package/.next/server/app/api/cli-tools/claude-settings/route.js +2 -0
  183. package/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -0
  184. package/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -0
  185. package/.next/server/app/api/cli-tools/codex-settings/route.js +32 -0
  186. package/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -0
  187. package/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -0
  188. package/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -0
  189. package/.next/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -0
  190. package/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -0
  191. package/.next/server/app/api/cli-tools/droid-settings/route.js +2 -0
  192. package/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -0
  193. package/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -0
  194. package/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -0
  195. package/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -0
  196. package/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -0
  197. package/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -0
  198. package/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -0
  199. package/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -0
  200. package/.next/server/app/api/cloud/auth/route.js +1 -0
  201. package/.next/server/app/api/cloud/auth/route.js.nft.json +1 -0
  202. package/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -0
  203. package/.next/server/app/api/cloud/credentials/update/route.js +1 -0
  204. package/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -0
  205. package/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -0
  206. package/.next/server/app/api/cloud/model/resolve/route.js +1 -0
  207. package/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -0
  208. package/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -0
  209. package/.next/server/app/api/cloud/models/alias/route.js +1 -0
  210. package/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -0
  211. package/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -0
  212. package/.next/server/app/api/combos/[id]/route.js +1 -0
  213. package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -0
  214. package/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -0
  215. package/.next/server/app/api/combos/route.js +1 -0
  216. package/.next/server/app/api/combos/route.js.nft.json +1 -0
  217. package/.next/server/app/api/combos/route_client-reference-manifest.js +1 -0
  218. package/.next/server/app/api/init/route.js +1 -0
  219. package/.next/server/app/api/init/route.js.nft.json +1 -0
  220. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -0
  221. package/.next/server/app/api/keys/[id]/route.js +1 -0
  222. package/.next/server/app/api/keys/[id]/route.js.nft.json +1 -0
  223. package/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -0
  224. package/.next/server/app/api/keys/route.js +1 -0
  225. package/.next/server/app/api/keys/route.js.nft.json +1 -0
  226. package/.next/server/app/api/keys/route_client-reference-manifest.js +1 -0
  227. package/.next/server/app/api/locale/route.js +1 -0
  228. package/.next/server/app/api/locale/route.js.nft.json +1 -0
  229. package/.next/server/app/api/locale/route_client-reference-manifest.js +1 -0
  230. package/.next/server/app/api/models/alias/route.js +1 -0
  231. package/.next/server/app/api/models/alias/route.js.nft.json +1 -0
  232. package/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -0
  233. package/.next/server/app/api/models/availability/route.js +1 -0
  234. package/.next/server/app/api/models/availability/route.js.nft.json +1 -0
  235. package/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -0
  236. package/.next/server/app/api/models/route.js +1 -0
  237. package/.next/server/app/api/models/route.js.nft.json +1 -0
  238. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  239. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -0
  240. package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -0
  241. package/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -0
  242. package/.next/server/app/api/oauth/cursor/auto-import/route.js +4 -0
  243. package/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -0
  244. package/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -0
  245. package/.next/server/app/api/oauth/cursor/import/route.js +1 -0
  246. package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -0
  247. package/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -0
  248. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -0
  249. package/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -0
  250. package/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -0
  251. package/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -0
  252. package/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -0
  253. package/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -0
  254. package/.next/server/app/api/oauth/kiro/import/route.js +1 -0
  255. package/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -0
  256. package/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -0
  257. package/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -0
  258. package/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -0
  259. package/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -0
  260. package/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -0
  261. package/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -0
  262. package/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -0
  263. package/.next/server/app/api/pricing/route.js +1 -0
  264. package/.next/server/app/api/pricing/route.js.nft.json +1 -0
  265. package/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -0
  266. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -0
  267. package/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -0
  268. package/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -0
  269. package/.next/server/app/api/provider-nodes/route.js +1 -0
  270. package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -0
  271. package/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -0
  272. package/.next/server/app/api/provider-nodes/validate/route.js +1 -0
  273. package/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -0
  274. package/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -0
  275. package/.next/server/app/api/providers/[id]/models/route.js +1 -0
  276. package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -0
  277. package/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -0
  278. package/.next/server/app/api/providers/[id]/route.js +1 -0
  279. package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
  280. package/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
  281. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -0
  282. package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -0
  283. package/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -0
  284. package/.next/server/app/api/providers/client/route.js +1 -0
  285. package/.next/server/app/api/providers/client/route.js.nft.json +1 -0
  286. package/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -0
  287. package/.next/server/app/api/providers/route.js +1 -0
  288. package/.next/server/app/api/providers/route.js.nft.json +1 -0
  289. package/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
  290. package/.next/server/app/api/providers/test-batch/route.js +1 -0
  291. package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -0
  292. package/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -0
  293. package/.next/server/app/api/providers/validate/route.js +1 -0
  294. package/.next/server/app/api/providers/validate/route.js.nft.json +1 -0
  295. package/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -0
  296. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -0
  297. package/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -0
  298. package/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -0
  299. package/.next/server/app/api/proxy-pools/route.js +1 -0
  300. package/.next/server/app/api/proxy-pools/route.js.nft.json +1 -0
  301. package/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -0
  302. package/.next/server/app/api/settings/database/route.js +1 -0
  303. package/.next/server/app/api/settings/database/route.js.nft.json +1 -0
  304. package/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -0
  305. package/.next/server/app/api/settings/proxy-test/route.js +1 -0
  306. package/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -0
  307. package/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -0
  308. package/.next/server/app/api/settings/require-login/route.js +1 -0
  309. package/.next/server/app/api/settings/require-login/route.js.nft.json +1 -0
  310. package/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -0
  311. package/.next/server/app/api/settings/route.js +1 -0
  312. package/.next/server/app/api/settings/route.js.nft.json +1 -0
  313. package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  314. package/.next/server/app/api/shutdown/route.js +1 -0
  315. package/.next/server/app/api/shutdown/route.js.nft.json +1 -0
  316. package/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -0
  317. package/.next/server/app/api/tags/route.js +1 -0
  318. package/.next/server/app/api/tags/route.js.nft.json +1 -0
  319. package/.next/server/app/api/tags/route_client-reference-manifest.js +1 -0
  320. package/.next/server/app/api/translator/console-logs/route.js +1 -0
  321. package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -0
  322. package/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -0
  323. package/.next/server/app/api/translator/console-logs/stream/route.js +7 -0
  324. package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -0
  325. package/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -0
  326. package/.next/server/app/api/translator/load/route.js +1 -0
  327. package/.next/server/app/api/translator/load/route.js.nft.json +1 -0
  328. package/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -0
  329. package/.next/server/app/api/translator/save/route.js +1 -0
  330. package/.next/server/app/api/translator/save/route.js.nft.json +1 -0
  331. package/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -0
  332. package/.next/server/app/api/translator/send/route.js +1 -0
  333. package/.next/server/app/api/translator/send/route.js.nft.json +1 -0
  334. package/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -0
  335. package/.next/server/app/api/translator/translate/route.js +1 -0
  336. package/.next/server/app/api/translator/translate/route.js.nft.json +1 -0
  337. package/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -0
  338. package/.next/server/app/api/tunnel/disable/route.js +1 -0
  339. package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -0
  340. package/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -0
  341. package/.next/server/app/api/tunnel/enable/route.js +1 -0
  342. package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -0
  343. package/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -0
  344. package/.next/server/app/api/tunnel/status/route.js +1 -0
  345. package/.next/server/app/api/tunnel/status/route.js.nft.json +1 -0
  346. package/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -0
  347. package/.next/server/app/api/usage/[connectionId]/route.js +1 -0
  348. package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -0
  349. package/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -0
  350. package/.next/server/app/api/usage/chart/route.js +1 -0
  351. package/.next/server/app/api/usage/chart/route.js.nft.json +1 -0
  352. package/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -0
  353. package/.next/server/app/api/usage/history/route.js +1 -0
  354. package/.next/server/app/api/usage/history/route.js.nft.json +1 -0
  355. package/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -0
  356. package/.next/server/app/api/usage/providers/route.js +1 -0
  357. package/.next/server/app/api/usage/providers/route.js.nft.json +1 -0
  358. package/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -0
  359. package/.next/server/app/api/usage/request-details/route.js +1 -0
  360. package/.next/server/app/api/usage/request-details/route.js.nft.json +1 -0
  361. package/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -0
  362. package/.next/server/app/api/usage/request-logs/route.js +1 -0
  363. package/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -0
  364. package/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -0
  365. package/.next/server/app/api/usage/stats/route.js +1 -0
  366. package/.next/server/app/api/usage/stats/route.js.nft.json +1 -0
  367. package/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -0
  368. package/.next/server/app/api/usage/stream/route.js +7 -0
  369. package/.next/server/app/api/usage/stream/route.js.nft.json +1 -0
  370. package/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -0
  371. package/.next/server/app/api/v1/api/chat/route.js +1 -0
  372. package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -0
  373. package/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -0
  374. package/.next/server/app/api/v1/chat/completions/route.js +1 -0
  375. package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -0
  376. package/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -0
  377. package/.next/server/app/api/v1/embeddings/route.js +1 -0
  378. package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -0
  379. package/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -0
  380. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -0
  381. package/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -0
  382. package/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -0
  383. package/.next/server/app/api/v1/messages/route.js +1 -0
  384. package/.next/server/app/api/v1/messages/route.js.nft.json +1 -0
  385. package/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -0
  386. package/.next/server/app/api/v1/models/route.js +1 -0
  387. package/.next/server/app/api/v1/models/route.js.nft.json +1 -0
  388. package/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -0
  389. package/.next/server/app/api/v1/responses/route.js +1 -0
  390. package/.next/server/app/api/v1/responses/route.js.nft.json +1 -0
  391. package/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -0
  392. package/.next/server/app/api/v1/route.js +1 -0
  393. package/.next/server/app/api/v1/route.js.nft.json +1 -0
  394. package/.next/server/app/api/v1/route_client-reference-manifest.js +1 -0
  395. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -0
  396. package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -0
  397. package/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -0
  398. package/.next/server/app/api/v1beta/models/route.js +1 -0
  399. package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -0
  400. package/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -0
  401. package/.next/server/app/api/version/route.js +1 -0
  402. package/.next/server/app/api/version/route.js.nft.json +1 -0
  403. package/.next/server/app/api/version/route_client-reference-manifest.js +1 -0
  404. package/.next/server/app/callback/page.js +2 -0
  405. package/.next/server/app/callback/page.js.nft.json +1 -0
  406. package/.next/server/app/callback/page_client-reference-manifest.js +1 -0
  407. package/.next/server/app/callback.html +1 -0
  408. package/.next/server/app/callback.meta +15 -0
  409. package/.next/server/app/callback.rsc +24 -0
  410. package/.next/server/app/callback.segments/_full.segment.rsc +24 -0
  411. package/.next/server/app/callback.segments/_head.segment.rsc +6 -0
  412. package/.next/server/app/callback.segments/_index.segment.rsc +8 -0
  413. package/.next/server/app/callback.segments/_tree.segment.rsc +4 -0
  414. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +9 -0
  415. package/.next/server/app/callback.segments/callback.segment.rsc +5 -0
  416. package/.next/server/app/dashboard/cli-tools.html +1 -0
  417. package/.next/server/app/dashboard/cli-tools.meta +17 -0
  418. package/.next/server/app/dashboard/cli-tools.rsc +24 -0
  419. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +6 -0
  420. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +5 -0
  421. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  422. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  423. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +24 -0
  424. package/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +6 -0
  425. package/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +8 -0
  426. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +5 -0
  427. package/.next/server/app/dashboard/combos.html +1 -0
  428. package/.next/server/app/dashboard/combos.meta +17 -0
  429. package/.next/server/app/dashboard/combos.rsc +26 -0
  430. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +9 -0
  431. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +5 -0
  432. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  433. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  434. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +26 -0
  435. package/.next/server/app/dashboard/combos.segments/_head.segment.rsc +6 -0
  436. package/.next/server/app/dashboard/combos.segments/_index.segment.rsc +8 -0
  437. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +5 -0
  438. package/.next/server/app/dashboard/endpoint.html +1 -0
  439. package/.next/server/app/dashboard/endpoint.meta +17 -0
  440. package/.next/server/app/dashboard/endpoint.rsc +24 -0
  441. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +6 -0
  442. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +5 -0
  443. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  444. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  445. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +24 -0
  446. package/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +6 -0
  447. package/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +8 -0
  448. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +5 -0
  449. package/.next/server/app/dashboard/mitm.html +1 -0
  450. package/.next/server/app/dashboard/mitm.meta +17 -0
  451. package/.next/server/app/dashboard/mitm.rsc +23 -0
  452. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +6 -0
  453. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +5 -0
  454. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  455. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  456. package/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +23 -0
  457. package/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +6 -0
  458. package/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +8 -0
  459. package/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +5 -0
  460. package/.next/server/app/dashboard/profile.html +1 -0
  461. package/.next/server/app/dashboard/profile.meta +17 -0
  462. package/.next/server/app/dashboard/profile.rsc +26 -0
  463. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +9 -0
  464. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +5 -0
  465. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  466. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  467. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +26 -0
  468. package/.next/server/app/dashboard/profile.segments/_head.segment.rsc +6 -0
  469. package/.next/server/app/dashboard/profile.segments/_index.segment.rsc +8 -0
  470. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +5 -0
  471. package/.next/server/app/dashboard/providers/new.html +1 -0
  472. package/.next/server/app/dashboard/providers/new.meta +18 -0
  473. package/.next/server/app/dashboard/providers/new.rsc +26 -0
  474. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +9 -0
  475. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +5 -0
  476. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  477. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  478. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  479. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +26 -0
  480. package/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +6 -0
  481. package/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +8 -0
  482. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +5 -0
  483. package/.next/server/app/dashboard/providers.html +1 -0
  484. package/.next/server/app/dashboard/providers.meta +17 -0
  485. package/.next/server/app/dashboard/providers.rsc +26 -0
  486. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +9 -0
  487. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  488. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  489. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  490. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +26 -0
  491. package/.next/server/app/dashboard/providers.segments/_head.segment.rsc +6 -0
  492. package/.next/server/app/dashboard/providers.segments/_index.segment.rsc +8 -0
  493. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +5 -0
  494. package/.next/server/app/dashboard/proxy-pools.html +1 -0
  495. package/.next/server/app/dashboard/proxy-pools.meta +17 -0
  496. package/.next/server/app/dashboard/proxy-pools.rsc +26 -0
  497. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +9 -0
  498. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +5 -0
  499. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  500. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  501. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +26 -0
  502. package/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +6 -0
  503. package/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +8 -0
  504. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +5 -0
  505. package/.next/server/app/dashboard/quota.html +1 -0
  506. package/.next/server/app/dashboard/quota.meta +17 -0
  507. package/.next/server/app/dashboard/quota.rsc +24 -0
  508. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +7 -0
  509. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +5 -0
  510. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  511. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  512. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +24 -0
  513. package/.next/server/app/dashboard/quota.segments/_head.segment.rsc +6 -0
  514. package/.next/server/app/dashboard/quota.segments/_index.segment.rsc +8 -0
  515. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +5 -0
  516. package/.next/server/app/dashboard/settings/pricing/page.js +2 -0
  517. package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -0
  518. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -0
  519. package/.next/server/app/dashboard/settings/pricing.html +1 -0
  520. package/.next/server/app/dashboard/settings/pricing.meta +17 -0
  521. package/.next/server/app/dashboard/settings/pricing.rsc +24 -0
  522. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +24 -0
  523. package/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +6 -0
  524. package/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +8 -0
  525. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +4 -0
  526. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +9 -0
  527. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +5 -0
  528. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +5 -0
  529. package/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +5 -0
  530. package/.next/server/app/dashboard/translator.html +1 -0
  531. package/.next/server/app/dashboard/translator.meta +17 -0
  532. package/.next/server/app/dashboard/translator.rsc +26 -0
  533. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +9 -0
  534. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +5 -0
  535. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  536. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  537. package/.next/server/app/dashboard/translator.segments/_full.segment.rsc +26 -0
  538. package/.next/server/app/dashboard/translator.segments/_head.segment.rsc +6 -0
  539. package/.next/server/app/dashboard/translator.segments/_index.segment.rsc +8 -0
  540. package/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +5 -0
  541. package/.next/server/app/dashboard/usage.html +1 -0
  542. package/.next/server/app/dashboard/usage.meta +17 -0
  543. package/.next/server/app/dashboard/usage.rsc +26 -0
  544. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +9 -0
  545. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +5 -0
  546. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  547. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  548. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +26 -0
  549. package/.next/server/app/dashboard/usage.segments/_head.segment.rsc +6 -0
  550. package/.next/server/app/dashboard/usage.segments/_index.segment.rsc +8 -0
  551. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +5 -0
  552. package/.next/server/app/dashboard.html +1 -0
  553. package/.next/server/app/dashboard.meta +16 -0
  554. package/.next/server/app/dashboard.rsc +24 -0
  555. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +6 -0
  556. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  557. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  558. package/.next/server/app/dashboard.segments/_full.segment.rsc +24 -0
  559. package/.next/server/app/dashboard.segments/_head.segment.rsc +6 -0
  560. package/.next/server/app/dashboard.segments/_index.segment.rsc +8 -0
  561. package/.next/server/app/dashboard.segments/_tree.segment.rsc +5 -0
  562. package/.next/server/app/favicon.ico/route.js +1 -0
  563. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  564. package/.next/server/app/favicon.ico.body +0 -0
  565. package/.next/server/app/favicon.ico.meta +1 -0
  566. package/.next/server/app/index.html +1 -0
  567. package/.next/server/app/index.meta +16 -0
  568. package/.next/server/app/index.rsc +19 -0
  569. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -0
  570. package/.next/server/app/index.segments/_full.segment.rsc +19 -0
  571. package/.next/server/app/index.segments/_head.segment.rsc +6 -0
  572. package/.next/server/app/index.segments/_index.segment.rsc +8 -0
  573. package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  574. package/.next/server/app/landing/page.js +2 -0
  575. package/.next/server/app/landing/page.js.nft.json +1 -0
  576. package/.next/server/app/landing/page_client-reference-manifest.js +1 -0
  577. package/.next/server/app/landing.html +1 -0
  578. package/.next/server/app/landing.meta +15 -0
  579. package/.next/server/app/landing.rsc +24 -0
  580. package/.next/server/app/landing.segments/_full.segment.rsc +24 -0
  581. package/.next/server/app/landing.segments/_head.segment.rsc +6 -0
  582. package/.next/server/app/landing.segments/_index.segment.rsc +8 -0
  583. package/.next/server/app/landing.segments/_tree.segment.rsc +4 -0
  584. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +9 -0
  585. package/.next/server/app/landing.segments/landing.segment.rsc +5 -0
  586. package/.next/server/app/login/page.js +2 -0
  587. package/.next/server/app/login/page.js.nft.json +1 -0
  588. package/.next/server/app/login/page_client-reference-manifest.js +1 -0
  589. package/.next/server/app/login.html +1 -0
  590. package/.next/server/app/login.meta +15 -0
  591. package/.next/server/app/login.rsc +25 -0
  592. package/.next/server/app/login.segments/_full.segment.rsc +25 -0
  593. package/.next/server/app/login.segments/_head.segment.rsc +6 -0
  594. package/.next/server/app/login.segments/_index.segment.rsc +8 -0
  595. package/.next/server/app/login.segments/_tree.segment.rsc +5 -0
  596. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +10 -0
  597. package/.next/server/app/login.segments/login.segment.rsc +5 -0
  598. package/.next/server/app/manifest.webmanifest/route.js +16 -0
  599. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  600. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
  601. package/.next/server/app/manifest.webmanifest.body +1 -0
  602. package/.next/server/app/manifest.webmanifest.meta +1 -0
  603. package/.next/server/app/page.js +2 -0
  604. package/.next/server/app/page.js.nft.json +1 -0
  605. package/.next/server/app/page_client-reference-manifest.js +1 -0
  606. package/.next/server/app-paths-manifest.json +104 -0
  607. package/.next/server/chunks/1130.js +1 -0
  608. package/.next/server/chunks/1220.js +3 -0
  609. package/.next/server/chunks/1424.js +1 -0
  610. package/.next/server/chunks/1705.js +1 -0
  611. package/.next/server/chunks/1813.js +1 -0
  612. package/.next/server/chunks/241.js +1 -0
  613. package/.next/server/chunks/2417.js +1 -0
  614. package/.next/server/chunks/289.js +1 -0
  615. package/.next/server/chunks/318.js +164 -0
  616. package/.next/server/chunks/3245.js +1 -0
  617. package/.next/server/chunks/3832.js +1 -0
  618. package/.next/server/chunks/412.js +7 -0
  619. package/.next/server/chunks/4124.js +1 -0
  620. package/.next/server/chunks/4642.js +1 -0
  621. package/.next/server/chunks/4689.js +1 -0
  622. package/.next/server/chunks/4741.js +18 -0
  623. package/.next/server/chunks/4755.js +1 -0
  624. package/.next/server/chunks/4989.js +2 -0
  625. package/.next/server/chunks/5270.js +1 -0
  626. package/.next/server/chunks/5296.js +1 -0
  627. package/.next/server/chunks/5297.js +1 -0
  628. package/.next/server/chunks/5573.js +1 -0
  629. package/.next/server/chunks/6108.js +1 -0
  630. package/.next/server/chunks/6182.js +5 -0
  631. package/.next/server/chunks/63.js +45 -0
  632. package/.next/server/chunks/6446.js +1 -0
  633. package/.next/server/chunks/649.js +15 -0
  634. package/.next/server/chunks/6649.js +1 -0
  635. package/.next/server/chunks/6844.js +1 -0
  636. package/.next/server/chunks/7341.js +1 -0
  637. package/.next/server/chunks/7774.js +120 -0
  638. package/.next/server/chunks/7861.js +1 -0
  639. package/.next/server/chunks/7890.js +3 -0
  640. package/.next/server/chunks/7898.js +1 -0
  641. package/.next/server/chunks/7924.js +1 -0
  642. package/.next/server/chunks/8332.js +1 -0
  643. package/.next/server/chunks/8895.js +4 -0
  644. package/.next/server/chunks/9201.js +1 -0
  645. package/.next/server/chunks/9609.js +1 -0
  646. package/.next/server/chunks/9713.js +1 -0
  647. package/.next/server/chunks/9718.js +1 -0
  648. package/.next/server/functions-config-manifest.json +18 -0
  649. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  650. package/.next/server/middleware-build-manifest.js +1 -0
  651. package/.next/server/middleware-manifest.json +6 -0
  652. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  653. package/.next/server/middleware.js +56 -0
  654. package/.next/server/middleware.js.nft.json +1 -0
  655. package/.next/server/next-font-manifest.js +1 -0
  656. package/.next/server/next-font-manifest.json +1 -0
  657. package/.next/server/pages/404.html +1 -0
  658. package/.next/server/pages/500.html +1 -0
  659. package/.next/server/pages-manifest.json +4 -0
  660. package/.next/server/prefetch-hints.json +1 -0
  661. package/.next/server/server-reference-manifest.js +1 -0
  662. package/.next/server/server-reference-manifest.json +1 -0
  663. package/.next/server/webpack-runtime.js +1 -0
  664. package/.next/standalone/.next/BUILD_ID +1 -0
  665. package/.next/standalone/.next/app-path-routes-manifest.json +104 -0
  666. package/.next/standalone/.next/build-manifest.json +20 -0
  667. package/.next/standalone/.next/package.json +1 -0
  668. package/.next/standalone/.next/prerender-manifest.json +527 -0
  669. package/.next/standalone/.next/react-loadable-manifest.json +8 -0
  670. package/.next/standalone/.next/required-server-files.json +365 -0
  671. package/.next/standalone/.next/routes-manifest.json +709 -0
  672. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -0
  673. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -0
  674. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -0
  675. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -0
  676. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -0
  677. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -0
  678. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -0
  679. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -0
  680. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -0
  681. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -0
  682. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -0
  683. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -0
  684. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -0
  685. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -0
  686. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -0
  687. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page.js +2 -0
  688. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -0
  689. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -0
  690. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -0
  691. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -0
  692. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -0
  693. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -0
  694. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -0
  695. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -0
  696. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -0
  697. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -0
  698. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -0
  699. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -0
  700. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -0
  701. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -0
  702. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -0
  703. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -0
  704. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -0
  705. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -0
  706. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -0
  707. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -0
  708. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -0
  709. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -0
  710. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -0
  711. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -0
  712. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -0
  713. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -0
  714. package/.next/standalone/.next/server/app/_global-error/page.js +32 -0
  715. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -0
  716. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  717. package/.next/standalone/.next/server/app/_global-error.html +1 -0
  718. package/.next/standalone/.next/server/app/_global-error.meta +16 -0
  719. package/.next/standalone/.next/server/app/_global-error.rsc +14 -0
  720. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  721. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  722. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  723. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  724. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  725. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  726. package/.next/standalone/.next/server/app/_not-found/page.js +2 -0
  727. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -0
  728. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  729. package/.next/standalone/.next/server/app/_not-found.html +1 -0
  730. package/.next/standalone/.next/server/app/_not-found.meta +16 -0
  731. package/.next/standalone/.next/server/app/_not-found.rsc +20 -0
  732. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +20 -0
  733. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  734. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
  735. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  736. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  737. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -0
  738. package/.next/standalone/.next/server/app/api/auth/login/route.js +1 -0
  739. package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -0
  740. package/.next/standalone/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
  741. package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -0
  742. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  743. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
  744. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -0
  745. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -0
  746. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -0
  747. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -0
  748. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -0
  749. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -0
  750. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route.js +2 -0
  751. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -0
  752. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -0
  753. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route.js +32 -0
  754. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -0
  755. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -0
  756. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -0
  757. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -0
  758. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -0
  759. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route.js +2 -0
  760. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -0
  761. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -0
  762. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -0
  763. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -0
  764. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -0
  765. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -0
  766. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -0
  767. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -0
  768. package/.next/standalone/.next/server/app/api/cloud/auth/route.js +1 -0
  769. package/.next/standalone/.next/server/app/api/cloud/auth/route.js.nft.json +1 -0
  770. package/.next/standalone/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -0
  771. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route.js +1 -0
  772. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -0
  773. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -0
  774. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route.js +1 -0
  775. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -0
  776. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -0
  777. package/.next/standalone/.next/server/app/api/cloud/models/alias/route.js +1 -0
  778. package/.next/standalone/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -0
  779. package/.next/standalone/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -0
  780. package/.next/standalone/.next/server/app/api/combos/[id]/route.js +1 -0
  781. package/.next/standalone/.next/server/app/api/combos/[id]/route.js.nft.json +1 -0
  782. package/.next/standalone/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -0
  783. package/.next/standalone/.next/server/app/api/combos/route.js +1 -0
  784. package/.next/standalone/.next/server/app/api/combos/route.js.nft.json +1 -0
  785. package/.next/standalone/.next/server/app/api/combos/route_client-reference-manifest.js +1 -0
  786. package/.next/standalone/.next/server/app/api/init/route.js +1 -0
  787. package/.next/standalone/.next/server/app/api/init/route.js.nft.json +1 -0
  788. package/.next/standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -0
  789. package/.next/standalone/.next/server/app/api/keys/[id]/route.js +1 -0
  790. package/.next/standalone/.next/server/app/api/keys/[id]/route.js.nft.json +1 -0
  791. package/.next/standalone/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -0
  792. package/.next/standalone/.next/server/app/api/keys/route.js +1 -0
  793. package/.next/standalone/.next/server/app/api/keys/route.js.nft.json +1 -0
  794. package/.next/standalone/.next/server/app/api/keys/route_client-reference-manifest.js +1 -0
  795. package/.next/standalone/.next/server/app/api/locale/route.js +1 -0
  796. package/.next/standalone/.next/server/app/api/locale/route.js.nft.json +1 -0
  797. package/.next/standalone/.next/server/app/api/locale/route_client-reference-manifest.js +1 -0
  798. package/.next/standalone/.next/server/app/api/models/alias/route.js +1 -0
  799. package/.next/standalone/.next/server/app/api/models/alias/route.js.nft.json +1 -0
  800. package/.next/standalone/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -0
  801. package/.next/standalone/.next/server/app/api/models/availability/route.js +1 -0
  802. package/.next/standalone/.next/server/app/api/models/availability/route.js.nft.json +1 -0
  803. package/.next/standalone/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -0
  804. package/.next/standalone/.next/server/app/api/models/route.js +1 -0
  805. package/.next/standalone/.next/server/app/api/models/route.js.nft.json +1 -0
  806. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  807. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -0
  808. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -0
  809. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -0
  810. package/.next/standalone/.next/server/app/api/oauth/cursor/auto-import/route.js +4 -0
  811. package/.next/standalone/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -0
  812. package/.next/standalone/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -0
  813. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route.js +1 -0
  814. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -0
  815. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -0
  816. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route.js +1 -0
  817. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -0
  818. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -0
  819. package/.next/standalone/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -0
  820. package/.next/standalone/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -0
  821. package/.next/standalone/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -0
  822. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route.js +1 -0
  823. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -0
  824. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -0
  825. package/.next/standalone/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -0
  826. package/.next/standalone/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -0
  827. package/.next/standalone/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -0
  828. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -0
  829. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -0
  830. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -0
  831. package/.next/standalone/.next/server/app/api/pricing/route.js +1 -0
  832. package/.next/standalone/.next/server/app/api/pricing/route.js.nft.json +1 -0
  833. package/.next/standalone/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -0
  834. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route.js +1 -0
  835. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -0
  836. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -0
  837. package/.next/standalone/.next/server/app/api/provider-nodes/route.js +1 -0
  838. package/.next/standalone/.next/server/app/api/provider-nodes/route.js.nft.json +1 -0
  839. package/.next/standalone/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -0
  840. package/.next/standalone/.next/server/app/api/provider-nodes/validate/route.js +1 -0
  841. package/.next/standalone/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -0
  842. package/.next/standalone/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -0
  843. package/.next/standalone/.next/server/app/api/providers/[id]/models/route.js +1 -0
  844. package/.next/standalone/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -0
  845. package/.next/standalone/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -0
  846. package/.next/standalone/.next/server/app/api/providers/[id]/route.js +1 -0
  847. package/.next/standalone/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
  848. package/.next/standalone/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
  849. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route.js +1 -0
  850. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -0
  851. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -0
  852. package/.next/standalone/.next/server/app/api/providers/client/route.js +1 -0
  853. package/.next/standalone/.next/server/app/api/providers/client/route.js.nft.json +1 -0
  854. package/.next/standalone/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -0
  855. package/.next/standalone/.next/server/app/api/providers/route.js +1 -0
  856. package/.next/standalone/.next/server/app/api/providers/route.js.nft.json +1 -0
  857. package/.next/standalone/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
  858. package/.next/standalone/.next/server/app/api/providers/test-batch/route.js +1 -0
  859. package/.next/standalone/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -0
  860. package/.next/standalone/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -0
  861. package/.next/standalone/.next/server/app/api/providers/validate/route.js +1 -0
  862. package/.next/standalone/.next/server/app/api/providers/validate/route.js.nft.json +1 -0
  863. package/.next/standalone/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -0
  864. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route.js +1 -0
  865. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -0
  866. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -0
  867. package/.next/standalone/.next/server/app/api/proxy-pools/route.js +1 -0
  868. package/.next/standalone/.next/server/app/api/proxy-pools/route.js.nft.json +1 -0
  869. package/.next/standalone/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -0
  870. package/.next/standalone/.next/server/app/api/settings/database/route.js +1 -0
  871. package/.next/standalone/.next/server/app/api/settings/database/route.js.nft.json +1 -0
  872. package/.next/standalone/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -0
  873. package/.next/standalone/.next/server/app/api/settings/proxy-test/route.js +1 -0
  874. package/.next/standalone/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -0
  875. package/.next/standalone/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -0
  876. package/.next/standalone/.next/server/app/api/settings/require-login/route.js +1 -0
  877. package/.next/standalone/.next/server/app/api/settings/require-login/route.js.nft.json +1 -0
  878. package/.next/standalone/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -0
  879. package/.next/standalone/.next/server/app/api/settings/route.js +1 -0
  880. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -0
  881. package/.next/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  882. package/.next/standalone/.next/server/app/api/shutdown/route.js +1 -0
  883. package/.next/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -0
  884. package/.next/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -0
  885. package/.next/standalone/.next/server/app/api/tags/route.js +1 -0
  886. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -0
  887. package/.next/standalone/.next/server/app/api/tags/route_client-reference-manifest.js +1 -0
  888. package/.next/standalone/.next/server/app/api/translator/console-logs/route.js +1 -0
  889. package/.next/standalone/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -0
  890. package/.next/standalone/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -0
  891. package/.next/standalone/.next/server/app/api/translator/console-logs/stream/route.js +7 -0
  892. package/.next/standalone/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -0
  893. package/.next/standalone/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -0
  894. package/.next/standalone/.next/server/app/api/translator/load/route.js +1 -0
  895. package/.next/standalone/.next/server/app/api/translator/load/route.js.nft.json +1 -0
  896. package/.next/standalone/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -0
  897. package/.next/standalone/.next/server/app/api/translator/save/route.js +1 -0
  898. package/.next/standalone/.next/server/app/api/translator/save/route.js.nft.json +1 -0
  899. package/.next/standalone/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -0
  900. package/.next/standalone/.next/server/app/api/translator/send/route.js +1 -0
  901. package/.next/standalone/.next/server/app/api/translator/send/route.js.nft.json +1 -0
  902. package/.next/standalone/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -0
  903. package/.next/standalone/.next/server/app/api/translator/translate/route.js +1 -0
  904. package/.next/standalone/.next/server/app/api/translator/translate/route.js.nft.json +1 -0
  905. package/.next/standalone/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -0
  906. package/.next/standalone/.next/server/app/api/tunnel/disable/route.js +1 -0
  907. package/.next/standalone/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -0
  908. package/.next/standalone/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -0
  909. package/.next/standalone/.next/server/app/api/tunnel/enable/route.js +1 -0
  910. package/.next/standalone/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -0
  911. package/.next/standalone/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -0
  912. package/.next/standalone/.next/server/app/api/tunnel/status/route.js +1 -0
  913. package/.next/standalone/.next/server/app/api/tunnel/status/route.js.nft.json +1 -0
  914. package/.next/standalone/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -0
  915. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route.js +1 -0
  916. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -0
  917. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -0
  918. package/.next/standalone/.next/server/app/api/usage/chart/route.js +1 -0
  919. package/.next/standalone/.next/server/app/api/usage/chart/route.js.nft.json +1 -0
  920. package/.next/standalone/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -0
  921. package/.next/standalone/.next/server/app/api/usage/history/route.js +1 -0
  922. package/.next/standalone/.next/server/app/api/usage/history/route.js.nft.json +1 -0
  923. package/.next/standalone/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -0
  924. package/.next/standalone/.next/server/app/api/usage/providers/route.js +1 -0
  925. package/.next/standalone/.next/server/app/api/usage/providers/route.js.nft.json +1 -0
  926. package/.next/standalone/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -0
  927. package/.next/standalone/.next/server/app/api/usage/request-details/route.js +1 -0
  928. package/.next/standalone/.next/server/app/api/usage/request-details/route.js.nft.json +1 -0
  929. package/.next/standalone/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -0
  930. package/.next/standalone/.next/server/app/api/usage/request-logs/route.js +1 -0
  931. package/.next/standalone/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -0
  932. package/.next/standalone/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -0
  933. package/.next/standalone/.next/server/app/api/usage/stats/route.js +1 -0
  934. package/.next/standalone/.next/server/app/api/usage/stats/route.js.nft.json +1 -0
  935. package/.next/standalone/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -0
  936. package/.next/standalone/.next/server/app/api/usage/stream/route.js +7 -0
  937. package/.next/standalone/.next/server/app/api/usage/stream/route.js.nft.json +1 -0
  938. package/.next/standalone/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -0
  939. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js +1 -0
  940. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -0
  941. package/.next/standalone/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -0
  942. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js +1 -0
  943. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -0
  944. package/.next/standalone/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -0
  945. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js +1 -0
  946. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -0
  947. package/.next/standalone/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -0
  948. package/.next/standalone/.next/server/app/api/v1/messages/count_tokens/route.js +1 -0
  949. package/.next/standalone/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -0
  950. package/.next/standalone/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -0
  951. package/.next/standalone/.next/server/app/api/v1/messages/route.js +1 -0
  952. package/.next/standalone/.next/server/app/api/v1/messages/route.js.nft.json +1 -0
  953. package/.next/standalone/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -0
  954. package/.next/standalone/.next/server/app/api/v1/models/route.js +1 -0
  955. package/.next/standalone/.next/server/app/api/v1/models/route.js.nft.json +1 -0
  956. package/.next/standalone/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -0
  957. package/.next/standalone/.next/server/app/api/v1/responses/route.js +1 -0
  958. package/.next/standalone/.next/server/app/api/v1/responses/route.js.nft.json +1 -0
  959. package/.next/standalone/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -0
  960. package/.next/standalone/.next/server/app/api/v1/route.js +1 -0
  961. package/.next/standalone/.next/server/app/api/v1/route.js.nft.json +1 -0
  962. package/.next/standalone/.next/server/app/api/v1/route_client-reference-manifest.js +1 -0
  963. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js +1 -0
  964. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -0
  965. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -0
  966. package/.next/standalone/.next/server/app/api/v1beta/models/route.js +1 -0
  967. package/.next/standalone/.next/server/app/api/v1beta/models/route.js.nft.json +1 -0
  968. package/.next/standalone/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -0
  969. package/.next/standalone/.next/server/app/api/version/route.js +1 -0
  970. package/.next/standalone/.next/server/app/api/version/route.js.nft.json +1 -0
  971. package/.next/standalone/.next/server/app/api/version/route_client-reference-manifest.js +1 -0
  972. package/.next/standalone/.next/server/app/callback/page.js +2 -0
  973. package/.next/standalone/.next/server/app/callback/page.js.nft.json +1 -0
  974. package/.next/standalone/.next/server/app/callback/page_client-reference-manifest.js +1 -0
  975. package/.next/standalone/.next/server/app/callback.html +1 -0
  976. package/.next/standalone/.next/server/app/callback.meta +15 -0
  977. package/.next/standalone/.next/server/app/callback.rsc +24 -0
  978. package/.next/standalone/.next/server/app/callback.segments/_full.segment.rsc +24 -0
  979. package/.next/standalone/.next/server/app/callback.segments/_head.segment.rsc +6 -0
  980. package/.next/standalone/.next/server/app/callback.segments/_index.segment.rsc +8 -0
  981. package/.next/standalone/.next/server/app/callback.segments/_tree.segment.rsc +4 -0
  982. package/.next/standalone/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +9 -0
  983. package/.next/standalone/.next/server/app/callback.segments/callback.segment.rsc +5 -0
  984. package/.next/standalone/.next/server/app/dashboard/cli-tools.html +1 -0
  985. package/.next/standalone/.next/server/app/dashboard/cli-tools.meta +17 -0
  986. package/.next/standalone/.next/server/app/dashboard/cli-tools.rsc +24 -0
  987. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +6 -0
  988. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +5 -0
  989. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  990. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  991. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +24 -0
  992. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +6 -0
  993. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +8 -0
  994. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +5 -0
  995. package/.next/standalone/.next/server/app/dashboard/combos.html +1 -0
  996. package/.next/standalone/.next/server/app/dashboard/combos.meta +17 -0
  997. package/.next/standalone/.next/server/app/dashboard/combos.rsc +26 -0
  998. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +9 -0
  999. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +5 -0
  1000. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1001. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1002. package/.next/standalone/.next/server/app/dashboard/combos.segments/_full.segment.rsc +26 -0
  1003. package/.next/standalone/.next/server/app/dashboard/combos.segments/_head.segment.rsc +6 -0
  1004. package/.next/standalone/.next/server/app/dashboard/combos.segments/_index.segment.rsc +8 -0
  1005. package/.next/standalone/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +5 -0
  1006. package/.next/standalone/.next/server/app/dashboard/endpoint.html +1 -0
  1007. package/.next/standalone/.next/server/app/dashboard/endpoint.meta +17 -0
  1008. package/.next/standalone/.next/server/app/dashboard/endpoint.rsc +24 -0
  1009. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +6 -0
  1010. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +5 -0
  1011. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1012. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1013. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +24 -0
  1014. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +6 -0
  1015. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +8 -0
  1016. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +5 -0
  1017. package/.next/standalone/.next/server/app/dashboard/mitm.html +1 -0
  1018. package/.next/standalone/.next/server/app/dashboard/mitm.meta +17 -0
  1019. package/.next/standalone/.next/server/app/dashboard/mitm.rsc +23 -0
  1020. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +6 -0
  1021. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +5 -0
  1022. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1023. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1024. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +23 -0
  1025. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +6 -0
  1026. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +8 -0
  1027. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +5 -0
  1028. package/.next/standalone/.next/server/app/dashboard/profile.html +1 -0
  1029. package/.next/standalone/.next/server/app/dashboard/profile.meta +17 -0
  1030. package/.next/standalone/.next/server/app/dashboard/profile.rsc +26 -0
  1031. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +9 -0
  1032. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +5 -0
  1033. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1034. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1035. package/.next/standalone/.next/server/app/dashboard/profile.segments/_full.segment.rsc +26 -0
  1036. package/.next/standalone/.next/server/app/dashboard/profile.segments/_head.segment.rsc +6 -0
  1037. package/.next/standalone/.next/server/app/dashboard/profile.segments/_index.segment.rsc +8 -0
  1038. package/.next/standalone/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +5 -0
  1039. package/.next/standalone/.next/server/app/dashboard/providers/new.html +1 -0
  1040. package/.next/standalone/.next/server/app/dashboard/providers/new.meta +18 -0
  1041. package/.next/standalone/.next/server/app/dashboard/providers/new.rsc +26 -0
  1042. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +9 -0
  1043. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +5 -0
  1044. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  1045. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1046. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1047. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +26 -0
  1048. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +6 -0
  1049. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +8 -0
  1050. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +5 -0
  1051. package/.next/standalone/.next/server/app/dashboard/providers.html +1 -0
  1052. package/.next/standalone/.next/server/app/dashboard/providers.meta +17 -0
  1053. package/.next/standalone/.next/server/app/dashboard/providers.rsc +26 -0
  1054. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +9 -0
  1055. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  1056. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1057. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1058. package/.next/standalone/.next/server/app/dashboard/providers.segments/_full.segment.rsc +26 -0
  1059. package/.next/standalone/.next/server/app/dashboard/providers.segments/_head.segment.rsc +6 -0
  1060. package/.next/standalone/.next/server/app/dashboard/providers.segments/_index.segment.rsc +8 -0
  1061. package/.next/standalone/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +5 -0
  1062. package/.next/standalone/.next/server/app/dashboard/proxy-pools.html +1 -0
  1063. package/.next/standalone/.next/server/app/dashboard/proxy-pools.meta +17 -0
  1064. package/.next/standalone/.next/server/app/dashboard/proxy-pools.rsc +26 -0
  1065. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +9 -0
  1066. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +5 -0
  1067. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1068. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1069. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +26 -0
  1070. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +6 -0
  1071. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +8 -0
  1072. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +5 -0
  1073. package/.next/standalone/.next/server/app/dashboard/quota.html +1 -0
  1074. package/.next/standalone/.next/server/app/dashboard/quota.meta +17 -0
  1075. package/.next/standalone/.next/server/app/dashboard/quota.rsc +24 -0
  1076. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +7 -0
  1077. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +5 -0
  1078. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1079. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1080. package/.next/standalone/.next/server/app/dashboard/quota.segments/_full.segment.rsc +24 -0
  1081. package/.next/standalone/.next/server/app/dashboard/quota.segments/_head.segment.rsc +6 -0
  1082. package/.next/standalone/.next/server/app/dashboard/quota.segments/_index.segment.rsc +8 -0
  1083. package/.next/standalone/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +5 -0
  1084. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page.js +2 -0
  1085. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -0
  1086. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -0
  1087. package/.next/standalone/.next/server/app/dashboard/settings/pricing.html +1 -0
  1088. package/.next/standalone/.next/server/app/dashboard/settings/pricing.meta +17 -0
  1089. package/.next/standalone/.next/server/app/dashboard/settings/pricing.rsc +24 -0
  1090. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +24 -0
  1091. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +6 -0
  1092. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +8 -0
  1093. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +4 -0
  1094. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +9 -0
  1095. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +5 -0
  1096. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +5 -0
  1097. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +5 -0
  1098. package/.next/standalone/.next/server/app/dashboard/translator.html +1 -0
  1099. package/.next/standalone/.next/server/app/dashboard/translator.meta +17 -0
  1100. package/.next/standalone/.next/server/app/dashboard/translator.rsc +26 -0
  1101. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +9 -0
  1102. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +5 -0
  1103. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1104. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1105. package/.next/standalone/.next/server/app/dashboard/translator.segments/_full.segment.rsc +26 -0
  1106. package/.next/standalone/.next/server/app/dashboard/translator.segments/_head.segment.rsc +6 -0
  1107. package/.next/standalone/.next/server/app/dashboard/translator.segments/_index.segment.rsc +8 -0
  1108. package/.next/standalone/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +5 -0
  1109. package/.next/standalone/.next/server/app/dashboard/usage.html +1 -0
  1110. package/.next/standalone/.next/server/app/dashboard/usage.meta +17 -0
  1111. package/.next/standalone/.next/server/app/dashboard/usage.rsc +26 -0
  1112. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +9 -0
  1113. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +5 -0
  1114. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1115. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1116. package/.next/standalone/.next/server/app/dashboard/usage.segments/_full.segment.rsc +26 -0
  1117. package/.next/standalone/.next/server/app/dashboard/usage.segments/_head.segment.rsc +6 -0
  1118. package/.next/standalone/.next/server/app/dashboard/usage.segments/_index.segment.rsc +8 -0
  1119. package/.next/standalone/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +5 -0
  1120. package/.next/standalone/.next/server/app/dashboard.html +1 -0
  1121. package/.next/standalone/.next/server/app/dashboard.meta +16 -0
  1122. package/.next/standalone/.next/server/app/dashboard.rsc +24 -0
  1123. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +6 -0
  1124. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1125. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1126. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +24 -0
  1127. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +6 -0
  1128. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +8 -0
  1129. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +5 -0
  1130. package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -0
  1131. package/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  1132. package/.next/standalone/.next/server/app/favicon.ico.body +0 -0
  1133. package/.next/standalone/.next/server/app/favicon.ico.meta +1 -0
  1134. package/.next/standalone/.next/server/app/index.html +1 -0
  1135. package/.next/standalone/.next/server/app/index.meta +16 -0
  1136. package/.next/standalone/.next/server/app/index.rsc +19 -0
  1137. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -0
  1138. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +19 -0
  1139. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +6 -0
  1140. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +8 -0
  1141. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  1142. package/.next/standalone/.next/server/app/landing/page.js +2 -0
  1143. package/.next/standalone/.next/server/app/landing/page.js.nft.json +1 -0
  1144. package/.next/standalone/.next/server/app/landing/page_client-reference-manifest.js +1 -0
  1145. package/.next/standalone/.next/server/app/landing.html +1 -0
  1146. package/.next/standalone/.next/server/app/landing.meta +15 -0
  1147. package/.next/standalone/.next/server/app/landing.rsc +24 -0
  1148. package/.next/standalone/.next/server/app/landing.segments/_full.segment.rsc +24 -0
  1149. package/.next/standalone/.next/server/app/landing.segments/_head.segment.rsc +6 -0
  1150. package/.next/standalone/.next/server/app/landing.segments/_index.segment.rsc +8 -0
  1151. package/.next/standalone/.next/server/app/landing.segments/_tree.segment.rsc +4 -0
  1152. package/.next/standalone/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +9 -0
  1153. package/.next/standalone/.next/server/app/landing.segments/landing.segment.rsc +5 -0
  1154. package/.next/standalone/.next/server/app/login/page.js +2 -0
  1155. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -0
  1156. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -0
  1157. package/.next/standalone/.next/server/app/login.html +1 -0
  1158. package/.next/standalone/.next/server/app/login.meta +15 -0
  1159. package/.next/standalone/.next/server/app/login.rsc +25 -0
  1160. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +25 -0
  1161. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +6 -0
  1162. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +8 -0
  1163. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +5 -0
  1164. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +10 -0
  1165. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +5 -0
  1166. package/.next/standalone/.next/server/app/manifest.webmanifest/route.js +16 -0
  1167. package/.next/standalone/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  1168. package/.next/standalone/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
  1169. package/.next/standalone/.next/server/app/manifest.webmanifest.body +1 -0
  1170. package/.next/standalone/.next/server/app/manifest.webmanifest.meta +1 -0
  1171. package/.next/standalone/.next/server/app/page.js +2 -0
  1172. package/.next/standalone/.next/server/app/page.js.nft.json +1 -0
  1173. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -0
  1174. package/.next/standalone/.next/server/app-paths-manifest.json +104 -0
  1175. package/.next/standalone/.next/server/chunks/1130.js +1 -0
  1176. package/.next/standalone/.next/server/chunks/1220.js +3 -0
  1177. package/.next/standalone/.next/server/chunks/1424.js +1 -0
  1178. package/.next/standalone/.next/server/chunks/1705.js +1 -0
  1179. package/.next/standalone/.next/server/chunks/1813.js +1 -0
  1180. package/.next/standalone/.next/server/chunks/241.js +1 -0
  1181. package/.next/standalone/.next/server/chunks/2417.js +1 -0
  1182. package/.next/standalone/.next/server/chunks/289.js +1 -0
  1183. package/.next/standalone/.next/server/chunks/318.js +164 -0
  1184. package/.next/standalone/.next/server/chunks/3245.js +1 -0
  1185. package/.next/standalone/.next/server/chunks/3832.js +1 -0
  1186. package/.next/standalone/.next/server/chunks/412.js +7 -0
  1187. package/.next/standalone/.next/server/chunks/4124.js +1 -0
  1188. package/.next/standalone/.next/server/chunks/4642.js +1 -0
  1189. package/.next/standalone/.next/server/chunks/4689.js +1 -0
  1190. package/.next/standalone/.next/server/chunks/4741.js +18 -0
  1191. package/.next/standalone/.next/server/chunks/4755.js +1 -0
  1192. package/.next/standalone/.next/server/chunks/4989.js +2 -0
  1193. package/.next/standalone/.next/server/chunks/5270.js +1 -0
  1194. package/.next/standalone/.next/server/chunks/5296.js +1 -0
  1195. package/.next/standalone/.next/server/chunks/5297.js +1 -0
  1196. package/.next/standalone/.next/server/chunks/5573.js +1 -0
  1197. package/.next/standalone/.next/server/chunks/6108.js +1 -0
  1198. package/.next/standalone/.next/server/chunks/6182.js +5 -0
  1199. package/.next/standalone/.next/server/chunks/63.js +45 -0
  1200. package/.next/standalone/.next/server/chunks/6446.js +1 -0
  1201. package/.next/standalone/.next/server/chunks/649.js +15 -0
  1202. package/.next/standalone/.next/server/chunks/6649.js +1 -0
  1203. package/.next/standalone/.next/server/chunks/6844.js +1 -0
  1204. package/.next/standalone/.next/server/chunks/7341.js +1 -0
  1205. package/.next/standalone/.next/server/chunks/7774.js +120 -0
  1206. package/.next/standalone/.next/server/chunks/7861.js +1 -0
  1207. package/.next/standalone/.next/server/chunks/7890.js +3 -0
  1208. package/.next/standalone/.next/server/chunks/7898.js +1 -0
  1209. package/.next/standalone/.next/server/chunks/7924.js +1 -0
  1210. package/.next/standalone/.next/server/chunks/8332.js +1 -0
  1211. package/.next/standalone/.next/server/chunks/8895.js +4 -0
  1212. package/.next/standalone/.next/server/chunks/9201.js +1 -0
  1213. package/.next/standalone/.next/server/chunks/9609.js +1 -0
  1214. package/.next/standalone/.next/server/chunks/9713.js +1 -0
  1215. package/.next/standalone/.next/server/chunks/9718.js +1 -0
  1216. package/.next/standalone/.next/server/functions-config-manifest.json +18 -0
  1217. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -0
  1218. package/.next/standalone/.next/server/middleware-manifest.json +6 -0
  1219. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -0
  1220. package/.next/standalone/.next/server/middleware.js +56 -0
  1221. package/.next/standalone/.next/server/next-font-manifest.js +1 -0
  1222. package/.next/standalone/.next/server/next-font-manifest.json +1 -0
  1223. package/.next/standalone/.next/server/pages/404.html +1 -0
  1224. package/.next/standalone/.next/server/pages/500.html +1 -0
  1225. package/.next/standalone/.next/server/pages-manifest.json +4 -0
  1226. package/.next/standalone/.next/server/prefetch-hints.json +1 -0
  1227. package/.next/standalone/.next/server/server-reference-manifest.js +1 -0
  1228. package/.next/standalone/.next/server/server-reference-manifest.json +1 -0
  1229. package/.next/standalone/.next/server/webpack-runtime.js +1 -0
  1230. package/.next/standalone/package.json +68 -0
  1231. package/.next/standalone/server.js +38 -0
  1232. package/.next/standalone/src/mitm/server.js +233 -0
  1233. package/.next/standalone/src/shared/utils/apiKey.js +98 -0
  1234. package/.next/static/2ZXkRcWLgj32_7M6Za4Gl/_buildManifest.js +1 -0
  1235. package/.next/static/2ZXkRcWLgj32_7M6Za4Gl/_ssgManifest.js +1 -0
  1236. package/.next/static/chunks/123-2df5178dd6863198.js +1 -0
  1237. package/.next/static/chunks/1a258343-4af2572c60ed5a11.js +1 -0
  1238. package/.next/static/chunks/2652-9390de91ba4d998f.js +1 -0
  1239. package/.next/static/chunks/3794-123fdf632563f469.js +32 -0
  1240. package/.next/static/chunks/4007-4208afb61e702563.js +3 -0
  1241. package/.next/static/chunks/4bd1b696-e356ca5ba0218e27.js +1 -0
  1242. package/.next/static/chunks/5497-b4d17d3cec4555c6.js +7 -0
  1243. package/.next/static/chunks/5772-81f907ca6ec17897.js +3 -0
  1244. package/.next/static/chunks/8202.1ffc6ce531e066ce.js +1 -0
  1245. package/.next/static/chunks/9242-f68cd69d27fb178b.js +15 -0
  1246. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-36c60da33f0ce9c4.js +1 -0
  1247. package/.next/static/chunks/app/(dashboard)/dashboard/combos/page-4bdb0cadb949e4c1.js +1 -0
  1248. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-361c438ee7bf7fe0.js +1 -0
  1249. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-e8a8912b2e1c9349.js +1 -0
  1250. package/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-89d121ff185bee59.js +1 -0
  1251. package/.next/static/chunks/app/(dashboard)/dashboard/page-1daa9c7d16bfa9fc.js +1 -0
  1252. package/.next/static/chunks/app/(dashboard)/dashboard/profile/page-7c0d1d4d4402ec80.js +1 -0
  1253. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-c3d0d307be6d0e43.js +1 -0
  1254. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-893168550a4af7e2.js +1 -0
  1255. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-4db55fc79a3b45eb.js +1 -0
  1256. package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-d19487b5634c925f.js +2 -0
  1257. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-283b404ae2c56609.js +1 -0
  1258. package/.next/static/chunks/app/(dashboard)/dashboard/translator/page-05a40a08f82c93d8.js +1 -0
  1259. package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-1374719e2cd7805e.js +1 -0
  1260. package/.next/static/chunks/app/(dashboard)/layout-7b5c73fdeec705a5.js +1 -0
  1261. package/.next/static/chunks/app/_global-error/page-5e254d0ad05b8e8a.js +1 -0
  1262. package/.next/static/chunks/app/_not-found/page-89be6743514e5f9f.js +1 -0
  1263. package/.next/static/chunks/app/api/auth/login/route-5e254d0ad05b8e8a.js +1 -0
  1264. package/.next/static/chunks/app/api/auth/logout/route-5e254d0ad05b8e8a.js +1 -0
  1265. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-5e254d0ad05b8e8a.js +1 -0
  1266. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-5e254d0ad05b8e8a.js +1 -0
  1267. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-5e254d0ad05b8e8a.js +1 -0
  1268. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-5e254d0ad05b8e8a.js +1 -0
  1269. package/.next/static/chunks/app/api/cli-tools/copilot-settings/route-5e254d0ad05b8e8a.js +1 -0
  1270. package/.next/static/chunks/app/api/cli-tools/droid-settings/route-5e254d0ad05b8e8a.js +1 -0
  1271. package/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-5e254d0ad05b8e8a.js +1 -0
  1272. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-5e254d0ad05b8e8a.js +1 -0
  1273. package/.next/static/chunks/app/api/cloud/auth/route-5e254d0ad05b8e8a.js +1 -0
  1274. package/.next/static/chunks/app/api/cloud/credentials/update/route-5e254d0ad05b8e8a.js +1 -0
  1275. package/.next/static/chunks/app/api/cloud/model/resolve/route-5e254d0ad05b8e8a.js +1 -0
  1276. package/.next/static/chunks/app/api/cloud/models/alias/route-5e254d0ad05b8e8a.js +1 -0
  1277. package/.next/static/chunks/app/api/combos/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1278. package/.next/static/chunks/app/api/combos/route-5e254d0ad05b8e8a.js +1 -0
  1279. package/.next/static/chunks/app/api/init/route-5e254d0ad05b8e8a.js +1 -0
  1280. package/.next/static/chunks/app/api/keys/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1281. package/.next/static/chunks/app/api/keys/route-5e254d0ad05b8e8a.js +1 -0
  1282. package/.next/static/chunks/app/api/locale/route-5e254d0ad05b8e8a.js +1 -0
  1283. package/.next/static/chunks/app/api/models/alias/route-5e254d0ad05b8e8a.js +1 -0
  1284. package/.next/static/chunks/app/api/models/availability/route-5e254d0ad05b8e8a.js +1 -0
  1285. package/.next/static/chunks/app/api/models/route-5e254d0ad05b8e8a.js +1 -0
  1286. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-5e254d0ad05b8e8a.js +1 -0
  1287. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-5e254d0ad05b8e8a.js +1 -0
  1288. package/.next/static/chunks/app/api/oauth/cursor/import/route-5e254d0ad05b8e8a.js +1 -0
  1289. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-5e254d0ad05b8e8a.js +1 -0
  1290. package/.next/static/chunks/app/api/oauth/kiro/auto-import/route-5e254d0ad05b8e8a.js +1 -0
  1291. package/.next/static/chunks/app/api/oauth/kiro/import/route-5e254d0ad05b8e8a.js +1 -0
  1292. package/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-5e254d0ad05b8e8a.js +1 -0
  1293. package/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-5e254d0ad05b8e8a.js +1 -0
  1294. package/.next/static/chunks/app/api/pricing/route-5e254d0ad05b8e8a.js +1 -0
  1295. package/.next/static/chunks/app/api/provider-nodes/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1296. package/.next/static/chunks/app/api/provider-nodes/route-5e254d0ad05b8e8a.js +1 -0
  1297. package/.next/static/chunks/app/api/provider-nodes/validate/route-5e254d0ad05b8e8a.js +1 -0
  1298. package/.next/static/chunks/app/api/providers/[id]/models/route-5e254d0ad05b8e8a.js +1 -0
  1299. package/.next/static/chunks/app/api/providers/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1300. package/.next/static/chunks/app/api/providers/[id]/test-models/route-5e254d0ad05b8e8a.js +1 -0
  1301. package/.next/static/chunks/app/api/providers/client/route-5e254d0ad05b8e8a.js +1 -0
  1302. package/.next/static/chunks/app/api/providers/route-5e254d0ad05b8e8a.js +1 -0
  1303. package/.next/static/chunks/app/api/providers/test-batch/route-5e254d0ad05b8e8a.js +1 -0
  1304. package/.next/static/chunks/app/api/providers/validate/route-5e254d0ad05b8e8a.js +1 -0
  1305. package/.next/static/chunks/app/api/proxy-pools/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1306. package/.next/static/chunks/app/api/proxy-pools/route-5e254d0ad05b8e8a.js +1 -0
  1307. package/.next/static/chunks/app/api/settings/database/route-5e254d0ad05b8e8a.js +1 -0
  1308. package/.next/static/chunks/app/api/settings/proxy-test/route-5e254d0ad05b8e8a.js +1 -0
  1309. package/.next/static/chunks/app/api/settings/require-login/route-5e254d0ad05b8e8a.js +1 -0
  1310. package/.next/static/chunks/app/api/settings/route-5e254d0ad05b8e8a.js +1 -0
  1311. package/.next/static/chunks/app/api/shutdown/route-5e254d0ad05b8e8a.js +1 -0
  1312. package/.next/static/chunks/app/api/tags/route-5e254d0ad05b8e8a.js +1 -0
  1313. package/.next/static/chunks/app/api/translator/console-logs/route-5e254d0ad05b8e8a.js +1 -0
  1314. package/.next/static/chunks/app/api/translator/console-logs/stream/route-5e254d0ad05b8e8a.js +1 -0
  1315. package/.next/static/chunks/app/api/translator/load/route-5e254d0ad05b8e8a.js +1 -0
  1316. package/.next/static/chunks/app/api/translator/save/route-5e254d0ad05b8e8a.js +1 -0
  1317. package/.next/static/chunks/app/api/translator/send/route-5e254d0ad05b8e8a.js +1 -0
  1318. package/.next/static/chunks/app/api/translator/translate/route-5e254d0ad05b8e8a.js +1 -0
  1319. package/.next/static/chunks/app/api/tunnel/disable/route-5e254d0ad05b8e8a.js +1 -0
  1320. package/.next/static/chunks/app/api/tunnel/enable/route-5e254d0ad05b8e8a.js +1 -0
  1321. package/.next/static/chunks/app/api/tunnel/status/route-5e254d0ad05b8e8a.js +1 -0
  1322. package/.next/static/chunks/app/api/usage/[connectionId]/route-5e254d0ad05b8e8a.js +1 -0
  1323. package/.next/static/chunks/app/api/usage/chart/route-5e254d0ad05b8e8a.js +1 -0
  1324. package/.next/static/chunks/app/api/usage/history/route-5e254d0ad05b8e8a.js +1 -0
  1325. package/.next/static/chunks/app/api/usage/providers/route-5e254d0ad05b8e8a.js +1 -0
  1326. package/.next/static/chunks/app/api/usage/request-details/route-5e254d0ad05b8e8a.js +1 -0
  1327. package/.next/static/chunks/app/api/usage/request-logs/route-5e254d0ad05b8e8a.js +1 -0
  1328. package/.next/static/chunks/app/api/usage/stats/route-5e254d0ad05b8e8a.js +1 -0
  1329. package/.next/static/chunks/app/api/usage/stream/route-5e254d0ad05b8e8a.js +1 -0
  1330. package/.next/static/chunks/app/api/v1/api/chat/route-5e254d0ad05b8e8a.js +1 -0
  1331. package/.next/static/chunks/app/api/v1/chat/completions/route-5e254d0ad05b8e8a.js +1 -0
  1332. package/.next/static/chunks/app/api/v1/embeddings/route-5e254d0ad05b8e8a.js +1 -0
  1333. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-5e254d0ad05b8e8a.js +1 -0
  1334. package/.next/static/chunks/app/api/v1/messages/route-5e254d0ad05b8e8a.js +1 -0
  1335. package/.next/static/chunks/app/api/v1/models/route-5e254d0ad05b8e8a.js +1 -0
  1336. package/.next/static/chunks/app/api/v1/responses/route-5e254d0ad05b8e8a.js +1 -0
  1337. package/.next/static/chunks/app/api/v1/route-5e254d0ad05b8e8a.js +1 -0
  1338. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-5e254d0ad05b8e8a.js +1 -0
  1339. package/.next/static/chunks/app/api/v1beta/models/route-5e254d0ad05b8e8a.js +1 -0
  1340. package/.next/static/chunks/app/api/version/route-5e254d0ad05b8e8a.js +1 -0
  1341. package/.next/static/chunks/app/callback/page-e98c5f2afe1b798f.js +1 -0
  1342. package/.next/static/chunks/app/dashboard/settings/pricing/page-4c6fd0ccbb51bb83.js +1 -0
  1343. package/.next/static/chunks/app/landing/page-9b546784307784bd.js +1 -0
  1344. package/.next/static/chunks/app/layout-57aeb5f3175a0cc5.js +1 -0
  1345. package/.next/static/chunks/app/login/page-008d17f2ddd1c0e0.js +1 -0
  1346. package/.next/static/chunks/app/manifest.webmanifest/route-5e254d0ad05b8e8a.js +1 -0
  1347. package/.next/static/chunks/app/page-5e254d0ad05b8e8a.js +1 -0
  1348. package/.next/static/chunks/framework-711ef29bc66f648c.js +1 -0
  1349. package/.next/static/chunks/main-414816c17bbd344f.js +5 -0
  1350. package/.next/static/chunks/main-app-bdbe0c27f86d4694.js +1 -0
  1351. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  1352. package/.next/static/chunks/webpack-819d2440cd722d0f.js +1 -0
  1353. package/.next/static/css/4a48b8c90d7cf506.css +3 -0
  1354. package/.next/static/css/599369d853c61df7.css +31 -0
  1355. package/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  1356. package/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
  1357. package/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  1358. package/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  1359. package/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  1360. package/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  1361. package/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  1362. package/.next/trace +8 -0
  1363. package/.next/trace-build +1 -0
  1364. package/.next/types/app/(dashboard)/dashboard/cli-tools/page.ts +87 -0
  1365. package/.next/types/app/(dashboard)/dashboard/combos/page.ts +87 -0
  1366. package/.next/types/app/(dashboard)/dashboard/console-log/page.ts +87 -0
  1367. package/.next/types/app/(dashboard)/dashboard/endpoint/page.ts +87 -0
  1368. package/.next/types/app/(dashboard)/dashboard/mitm/page.ts +87 -0
  1369. package/.next/types/app/(dashboard)/dashboard/page.ts +87 -0
  1370. package/.next/types/app/(dashboard)/dashboard/profile/page.ts +87 -0
  1371. package/.next/types/app/(dashboard)/dashboard/providers/[id]/page.ts +87 -0
  1372. package/.next/types/app/(dashboard)/dashboard/providers/new/page.ts +87 -0
  1373. package/.next/types/app/(dashboard)/dashboard/providers/page.ts +87 -0
  1374. package/.next/types/app/(dashboard)/dashboard/proxy-pools/page.ts +87 -0
  1375. package/.next/types/app/(dashboard)/dashboard/quota/page.ts +87 -0
  1376. package/.next/types/app/(dashboard)/dashboard/translator/page.ts +87 -0
  1377. package/.next/types/app/(dashboard)/dashboard/usage/page.ts +87 -0
  1378. package/.next/types/app/api/auth/login/route.ts +351 -0
  1379. package/.next/types/app/api/auth/logout/route.ts +351 -0
  1380. package/.next/types/app/api/cli-tools/antigravity-mitm/alias/route.ts +351 -0
  1381. package/.next/types/app/api/cli-tools/antigravity-mitm/route.ts +351 -0
  1382. package/.next/types/app/api/cli-tools/claude-settings/route.ts +351 -0
  1383. package/.next/types/app/api/cli-tools/codex-settings/route.ts +351 -0
  1384. package/.next/types/app/api/cli-tools/copilot-settings/route.ts +351 -0
  1385. package/.next/types/app/api/cli-tools/droid-settings/route.ts +351 -0
  1386. package/.next/types/app/api/cli-tools/openclaw-settings/route.ts +351 -0
  1387. package/.next/types/app/api/cli-tools/opencode-settings/route.ts +351 -0
  1388. package/.next/types/app/api/cloud/auth/route.ts +351 -0
  1389. package/.next/types/app/api/cloud/credentials/update/route.ts +351 -0
  1390. package/.next/types/app/api/cloud/model/resolve/route.ts +351 -0
  1391. package/.next/types/app/api/cloud/models/alias/route.ts +351 -0
  1392. package/.next/types/app/api/combos/[id]/route.ts +351 -0
  1393. package/.next/types/app/api/combos/route.ts +351 -0
  1394. package/.next/types/app/api/init/route.ts +351 -0
  1395. package/.next/types/app/api/keys/[id]/route.ts +351 -0
  1396. package/.next/types/app/api/keys/route.ts +351 -0
  1397. package/.next/types/app/api/locale/route.ts +351 -0
  1398. package/.next/types/app/api/models/alias/route.ts +351 -0
  1399. package/.next/types/app/api/models/availability/route.ts +351 -0
  1400. package/.next/types/app/api/models/route.ts +351 -0
  1401. package/.next/types/app/api/oauth/[provider]/[action]/route.ts +351 -0
  1402. package/.next/types/app/api/oauth/cursor/auto-import/route.ts +351 -0
  1403. package/.next/types/app/api/oauth/cursor/import/route.ts +351 -0
  1404. package/.next/types/app/api/oauth/iflow/cookie/route.ts +351 -0
  1405. package/.next/types/app/api/oauth/kiro/auto-import/route.ts +351 -0
  1406. package/.next/types/app/api/oauth/kiro/import/route.ts +351 -0
  1407. package/.next/types/app/api/oauth/kiro/social-authorize/route.ts +351 -0
  1408. package/.next/types/app/api/oauth/kiro/social-exchange/route.ts +351 -0
  1409. package/.next/types/app/api/pricing/route.ts +351 -0
  1410. package/.next/types/app/api/provider-nodes/[id]/route.ts +351 -0
  1411. package/.next/types/app/api/provider-nodes/route.ts +351 -0
  1412. package/.next/types/app/api/provider-nodes/validate/route.ts +351 -0
  1413. package/.next/types/app/api/providers/[id]/models/route.ts +351 -0
  1414. package/.next/types/app/api/providers/[id]/route.ts +351 -0
  1415. package/.next/types/app/api/providers/[id]/test-models/route.ts +351 -0
  1416. package/.next/types/app/api/providers/client/route.ts +351 -0
  1417. package/.next/types/app/api/providers/route.ts +351 -0
  1418. package/.next/types/app/api/providers/test-batch/route.ts +351 -0
  1419. package/.next/types/app/api/providers/validate/route.ts +351 -0
  1420. package/.next/types/app/api/proxy-pools/[id]/route.ts +351 -0
  1421. package/.next/types/app/api/proxy-pools/route.ts +351 -0
  1422. package/.next/types/app/api/settings/database/route.ts +351 -0
  1423. package/.next/types/app/api/settings/proxy-test/route.ts +351 -0
  1424. package/.next/types/app/api/settings/require-login/route.ts +351 -0
  1425. package/.next/types/app/api/settings/route.ts +351 -0
  1426. package/.next/types/app/api/shutdown/route.ts +351 -0
  1427. package/.next/types/app/api/tags/route.ts +351 -0
  1428. package/.next/types/app/api/translator/console-logs/route.ts +351 -0
  1429. package/.next/types/app/api/translator/console-logs/stream/route.ts +351 -0
  1430. package/.next/types/app/api/translator/load/route.ts +351 -0
  1431. package/.next/types/app/api/translator/save/route.ts +351 -0
  1432. package/.next/types/app/api/translator/send/route.ts +351 -0
  1433. package/.next/types/app/api/translator/translate/route.ts +351 -0
  1434. package/.next/types/app/api/tunnel/disable/route.ts +351 -0
  1435. package/.next/types/app/api/tunnel/enable/route.ts +351 -0
  1436. package/.next/types/app/api/tunnel/status/route.ts +351 -0
  1437. package/.next/types/app/api/usage/[connectionId]/route.ts +351 -0
  1438. package/.next/types/app/api/usage/chart/route.ts +351 -0
  1439. package/.next/types/app/api/usage/history/route.ts +351 -0
  1440. package/.next/types/app/api/usage/providers/route.ts +351 -0
  1441. package/.next/types/app/api/usage/request-details/route.ts +351 -0
  1442. package/.next/types/app/api/usage/request-logs/route.ts +351 -0
  1443. package/.next/types/app/api/usage/stats/route.ts +351 -0
  1444. package/.next/types/app/api/usage/stream/route.ts +351 -0
  1445. package/.next/types/app/api/v1/api/chat/route.ts +351 -0
  1446. package/.next/types/app/api/v1/chat/completions/route.ts +351 -0
  1447. package/.next/types/app/api/v1/embeddings/route.ts +351 -0
  1448. package/.next/types/app/api/v1/messages/count_tokens/route.ts +351 -0
  1449. package/.next/types/app/api/v1/messages/route.ts +351 -0
  1450. package/.next/types/app/api/v1/models/route.ts +351 -0
  1451. package/.next/types/app/api/v1/responses/route.ts +351 -0
  1452. package/.next/types/app/api/v1/route.ts +351 -0
  1453. package/.next/types/app/api/v1beta/models/[...path]/route.ts +351 -0
  1454. package/.next/types/app/api/v1beta/models/route.ts +351 -0
  1455. package/.next/types/app/api/version/route.ts +351 -0
  1456. package/.next/types/app/callback/page.ts +87 -0
  1457. package/.next/types/app/dashboard/settings/pricing/page.ts +87 -0
  1458. package/.next/types/app/landing/page.ts +87 -0
  1459. package/.next/types/app/login/page.ts +87 -0
  1460. package/.next/types/app/page.ts +87 -0
  1461. package/.next/types/package.json +1 -0
  1462. package/.next/types/routes.d.ts +156 -0
  1463. package/.next/types/validator.ts +17 -0
  1464. package/LICENSE +21 -0
  1465. package/cloud/README.md +25 -0
  1466. package/cloud/migrations/0001_init.sql +9 -0
  1467. package/cloud/package.json +17 -0
  1468. package/cloud/src/handlers/cache.js +37 -0
  1469. package/cloud/src/handlers/chat.js +305 -0
  1470. package/cloud/src/handlers/cleanup.js +34 -0
  1471. package/cloud/src/handlers/countTokens.js +46 -0
  1472. package/cloud/src/handlers/embeddings.js +285 -0
  1473. package/cloud/src/handlers/forward.js +75 -0
  1474. package/cloud/src/handlers/forwardRaw.js +173 -0
  1475. package/cloud/src/handlers/sync.js +227 -0
  1476. package/cloud/src/handlers/verify.js +60 -0
  1477. package/cloud/src/index.js +233 -0
  1478. package/cloud/src/services/landingPage.js +27 -0
  1479. package/cloud/src/services/storage.js +88 -0
  1480. package/cloud/src/services/tokenRefresh.js +11 -0
  1481. package/cloud/src/stubs/usageDb.js +8 -0
  1482. package/cloud/src/utils/apiKey.js +72 -0
  1483. package/cloud/src/utils/logger.js +84 -0
  1484. package/cloud/wrangler.toml +17 -0
  1485. package/open-sse/config/appConstants.js +130 -0
  1486. package/open-sse/config/codexInstructions.js +120 -0
  1487. package/open-sse/config/constants.js +4 -0
  1488. package/open-sse/config/defaultThinkingSignature.js +7 -0
  1489. package/open-sse/config/ollamaModels.js +19 -0
  1490. package/open-sse/config/providerModels.js +390 -0
  1491. package/open-sse/config/providers.js +313 -0
  1492. package/open-sse/config/runtimeConfig.js +92 -0
  1493. package/open-sse/executors/antigravity.js +261 -0
  1494. package/open-sse/executors/base.js +130 -0
  1495. package/open-sse/executors/codex.js +108 -0
  1496. package/open-sse/executors/cursor.js +742 -0
  1497. package/open-sse/executors/default.js +213 -0
  1498. package/open-sse/executors/gemini-cli.js +67 -0
  1499. package/open-sse/executors/github.js +305 -0
  1500. package/open-sse/executors/iflow.js +104 -0
  1501. package/open-sse/executors/index.js +45 -0
  1502. package/open-sse/executors/kiro.js +448 -0
  1503. package/open-sse/executors/vertex.js +120 -0
  1504. package/open-sse/handlers/chatCore/nonStreamingHandler.js +204 -0
  1505. package/open-sse/handlers/chatCore/requestDetail.js +102 -0
  1506. package/open-sse/handlers/chatCore/sseToJsonHandler.js +161 -0
  1507. package/open-sse/handlers/chatCore/streamingHandler.js +99 -0
  1508. package/open-sse/handlers/chatCore.js +213 -0
  1509. package/open-sse/handlers/embeddingsCore.js +302 -0
  1510. package/open-sse/handlers/responsesHandler.js +103 -0
  1511. package/open-sse/index.js +74 -0
  1512. package/open-sse/services/accountFallback.js +251 -0
  1513. package/open-sse/services/combo.js +111 -0
  1514. package/open-sse/services/compact.js +71 -0
  1515. package/open-sse/services/model.js +169 -0
  1516. package/open-sse/services/projectId.js +307 -0
  1517. package/open-sse/services/provider.js +356 -0
  1518. package/open-sse/services/tokenRefresh.js +731 -0
  1519. package/open-sse/services/usage.js +708 -0
  1520. package/open-sse/transformer/responsesTransformer.js +439 -0
  1521. package/open-sse/transformer/streamToJsonConverter.js +103 -0
  1522. package/open-sse/translator/formats.js +31 -0
  1523. package/open-sse/translator/helpers/claudeHelper.js +198 -0
  1524. package/open-sse/translator/helpers/geminiHelper.js +337 -0
  1525. package/open-sse/translator/helpers/maxTokensHelper.js +25 -0
  1526. package/open-sse/translator/helpers/openaiHelper.js +127 -0
  1527. package/open-sse/translator/helpers/responsesApiHelper.js +129 -0
  1528. package/open-sse/translator/helpers/toolCallHelper.js +111 -0
  1529. package/open-sse/translator/index.js +204 -0
  1530. package/open-sse/translator/request/antigravity-to-openai.js +223 -0
  1531. package/open-sse/translator/request/claude-to-openai.js +232 -0
  1532. package/open-sse/translator/request/gemini-to-openai.js +147 -0
  1533. package/open-sse/translator/request/openai-responses.js +277 -0
  1534. package/open-sse/translator/request/openai-to-claude.js +348 -0
  1535. package/open-sse/translator/request/openai-to-cursor.js +181 -0
  1536. package/open-sse/translator/request/openai-to-gemini.js +431 -0
  1537. package/open-sse/translator/request/openai-to-kiro.js +306 -0
  1538. package/open-sse/translator/request/openai-to-kiro.old.js +278 -0
  1539. package/open-sse/translator/request/openai-to-ollama.js +159 -0
  1540. package/open-sse/translator/response/claude-to-openai.js +206 -0
  1541. package/open-sse/translator/response/cursor-to-openai.js +30 -0
  1542. package/open-sse/translator/response/gemini-to-openai.js +240 -0
  1543. package/open-sse/translator/response/kiro-to-openai.js +189 -0
  1544. package/open-sse/translator/response/ollama-to-openai.js +152 -0
  1545. package/open-sse/translator/response/openai-responses.js +571 -0
  1546. package/open-sse/translator/response/openai-to-antigravity.js +120 -0
  1547. package/open-sse/translator/response/openai-to-claude.js +223 -0
  1548. package/open-sse/utils/bypassHandler.js +298 -0
  1549. package/open-sse/utils/claudeCloaking.js +60 -0
  1550. package/open-sse/utils/cursorChecksum.js +149 -0
  1551. package/open-sse/utils/cursorProtobuf.js +904 -0
  1552. package/open-sse/utils/error.js +185 -0
  1553. package/open-sse/utils/ollamaTransform.js +85 -0
  1554. package/open-sse/utils/proxyFetch.js +258 -0
  1555. package/open-sse/utils/requestLogger.js +260 -0
  1556. package/open-sse/utils/sessionManager.js +82 -0
  1557. package/open-sse/utils/stream.js +392 -0
  1558. package/open-sse/utils/streamHandler.js +138 -0
  1559. package/open-sse/utils/streamHelpers.js +122 -0
  1560. package/open-sse/utils/usageTracking.js +325 -0
  1561. package/package.json +68 -0
  1562. package/public/favicon.svg +11 -0
  1563. package/public/file.svg +1 -0
  1564. package/public/globe.svg +1 -0
  1565. package/public/i18n/literals/ar.json +196 -0
  1566. package/public/i18n/literals/az.json +196 -0
  1567. package/public/i18n/literals/bn.json +196 -0
  1568. package/public/i18n/literals/cs.json +196 -0
  1569. package/public/i18n/literals/da.json +196 -0
  1570. package/public/i18n/literals/de.json +196 -0
  1571. package/public/i18n/literals/el.json +196 -0
  1572. package/public/i18n/literals/es.json +196 -0
  1573. package/public/i18n/literals/fi.json +196 -0
  1574. package/public/i18n/literals/fr.json +196 -0
  1575. package/public/i18n/literals/he.json +196 -0
  1576. package/public/i18n/literals/hi.json +196 -0
  1577. package/public/i18n/literals/hu.json +196 -0
  1578. package/public/i18n/literals/id.json +196 -0
  1579. package/public/i18n/literals/it.json +196 -0
  1580. package/public/i18n/literals/ja.json +196 -0
  1581. package/public/i18n/literals/ko.json +196 -0
  1582. package/public/i18n/literals/nl.json +196 -0
  1583. package/public/i18n/literals/no.json +196 -0
  1584. package/public/i18n/literals/pl.json +196 -0
  1585. package/public/i18n/literals/pt-BR.json +196 -0
  1586. package/public/i18n/literals/pt-PT.json +196 -0
  1587. package/public/i18n/literals/ro.json +196 -0
  1588. package/public/i18n/literals/ru.json +196 -0
  1589. package/public/i18n/literals/sv.json +196 -0
  1590. package/public/i18n/literals/th.json +196 -0
  1591. package/public/i18n/literals/tl.json +196 -0
  1592. package/public/i18n/literals/tr.json +196 -0
  1593. package/public/i18n/literals/uk.json +196 -0
  1594. package/public/i18n/literals/ur.json +196 -0
  1595. package/public/i18n/literals/vi.json +196 -0
  1596. package/public/i18n/literals/zh-CN.json +515 -0
  1597. package/public/i18n/literals/zh-TW.json +196 -0
  1598. package/public/icons/icon-192.svg +10 -0
  1599. package/public/icons/icon-512.svg +10 -0
  1600. package/public/next.svg +1 -0
  1601. package/public/providers/alicode-intl.png +0 -0
  1602. package/public/providers/alicode.png +0 -0
  1603. package/public/providers/anthropic-m.png +0 -0
  1604. package/public/providers/anthropic.png +0 -0
  1605. package/public/providers/antigravity.png +0 -0
  1606. package/public/providers/cerebras.png +0 -0
  1607. package/public/providers/chutes.png +0 -0
  1608. package/public/providers/claude.png +0 -0
  1609. package/public/providers/cline.png +0 -0
  1610. package/public/providers/codex.png +0 -0
  1611. package/public/providers/cohere.png +0 -0
  1612. package/public/providers/continue.png +0 -0
  1613. package/public/providers/copilot.png +0 -0
  1614. package/public/providers/cursor.png +0 -0
  1615. package/public/providers/deepseek.png +0 -0
  1616. package/public/providers/droid.png +0 -0
  1617. package/public/providers/fireworks.png +0 -0
  1618. package/public/providers/gemini-cli.png +0 -0
  1619. package/public/providers/gemini.png +0 -0
  1620. package/public/providers/github.png +0 -0
  1621. package/public/providers/glm-cn.png +0 -0
  1622. package/public/providers/glm.png +0 -0
  1623. package/public/providers/groq.png +0 -0
  1624. package/public/providers/iflow.png +0 -0
  1625. package/public/providers/kilocode.png +0 -0
  1626. package/public/providers/kimi-coding.png +0 -0
  1627. package/public/providers/kimi.png +0 -0
  1628. package/public/providers/kiro.png +0 -0
  1629. package/public/providers/minimax-cn.png +0 -0
  1630. package/public/providers/minimax.png +0 -0
  1631. package/public/providers/mistral.png +0 -0
  1632. package/public/providers/nebius.png +0 -0
  1633. package/public/providers/nvidia.png +0 -0
  1634. package/public/providers/oai-cc.png +0 -0
  1635. package/public/providers/oai-r.png +0 -0
  1636. package/public/providers/ollama-local.png +0 -0
  1637. package/public/providers/ollama.png +0 -0
  1638. package/public/providers/openai.png +0 -0
  1639. package/public/providers/openclaw.png +0 -0
  1640. package/public/providers/opencode.png +0 -0
  1641. package/public/providers/openrouter.png +0 -0
  1642. package/public/providers/perplexity.png +0 -0
  1643. package/public/providers/qwen.png +0 -0
  1644. package/public/providers/roo.png +0 -0
  1645. package/public/providers/siliconflow.png +0 -0
  1646. package/public/providers/together.png +0 -0
  1647. package/public/providers/vertex-partner.png +0 -0
  1648. package/public/providers/vertex.png +0 -0
  1649. package/public/providers/xai.png +0 -0
  1650. package/public/sw.js +22 -0
  1651. package/public/vercel.svg +1 -0
  1652. package/public/window.svg +1 -0
  1653. package/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.js +206 -0
  1654. package/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js +478 -0
  1655. package/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js +388 -0
  1656. package/src/app/(dashboard)/dashboard/cli-tools/components/CodexToolCard.js +336 -0
  1657. package/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js +295 -0
  1658. package/src/app/(dashboard)/dashboard/cli-tools/components/DefaultToolCard.js +293 -0
  1659. package/src/app/(dashboard)/dashboard/cli-tools/components/DroidToolCard.js +339 -0
  1660. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmServerCard.js +241 -0
  1661. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js +299 -0
  1662. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenClawToolCard.js +352 -0
  1663. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js +308 -0
  1664. package/src/app/(dashboard)/dashboard/cli-tools/components/index.js +11 -0
  1665. package/src/app/(dashboard)/dashboard/cli-tools/page.js +7 -0
  1666. package/src/app/(dashboard)/dashboard/combos/page.js +470 -0
  1667. package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.js +91 -0
  1668. package/src/app/(dashboard)/dashboard/console-log/page.js +8 -0
  1669. package/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js +772 -0
  1670. package/src/app/(dashboard)/dashboard/endpoint/page.js +7 -0
  1671. package/src/app/(dashboard)/dashboard/mitm/MitmPageClient.js +108 -0
  1672. package/src/app/(dashboard)/dashboard/mitm/page.js +5 -0
  1673. package/src/app/(dashboard)/dashboard/page.js +7 -0
  1674. package/src/app/(dashboard)/dashboard/profile/page.js +631 -0
  1675. package/src/app/(dashboard)/dashboard/providers/[id]/page.js +2235 -0
  1676. package/src/app/(dashboard)/dashboard/providers/[id]/page.new.js +1724 -0
  1677. package/src/app/(dashboard)/dashboard/providers/components/ModelAvailabilityBadge.js +185 -0
  1678. package/src/app/(dashboard)/dashboard/providers/new/page.js +220 -0
  1679. package/src/app/(dashboard)/dashboard/providers/page.js +454 -0
  1680. package/src/app/(dashboard)/dashboard/proxy-pools/page.js +489 -0
  1681. package/src/app/(dashboard)/dashboard/quota/page.js +11 -0
  1682. package/src/app/(dashboard)/dashboard/translator/page.js +300 -0
  1683. package/src/app/(dashboard)/dashboard/usage/components/OverviewCards.js +35 -0
  1684. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.js +190 -0
  1685. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.js +127 -0
  1686. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.js +160 -0
  1687. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js +416 -0
  1688. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.js +201 -0
  1689. package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.js +266 -0
  1690. package/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js +425 -0
  1691. package/src/app/(dashboard)/dashboard/usage/components/UsageChart.js +141 -0
  1692. package/src/app/(dashboard)/dashboard/usage/components/UsageTable.js +247 -0
  1693. package/src/app/(dashboard)/dashboard/usage/page.js +64 -0
  1694. package/src/app/(dashboard)/layout.js +6 -0
  1695. package/src/app/api/auth/login/route.js +54 -0
  1696. package/src/app/api/auth/logout/route.js +8 -0
  1697. package/src/app/api/cli-tools/antigravity-mitm/alias/route.js +51 -0
  1698. package/src/app/api/cli-tools/antigravity-mitm/route.js +133 -0
  1699. package/src/app/api/cli-tools/claude-settings/route.js +194 -0
  1700. package/src/app/api/cli-tools/codex-settings/route.js +218 -0
  1701. package/src/app/api/cli-tools/copilot-settings/route.js +148 -0
  1702. package/src/app/api/cli-tools/droid-settings/route.js +175 -0
  1703. package/src/app/api/cli-tools/openclaw-settings/route.js +180 -0
  1704. package/src/app/api/cli-tools/opencode-settings/route.js +153 -0
  1705. package/src/app/api/cloud/auth/route.js +50 -0
  1706. package/src/app/api/cloud/credentials/update/route.js +57 -0
  1707. package/src/app/api/cloud/model/resolve/route.js +50 -0
  1708. package/src/app/api/cloud/models/alias/route.js +72 -0
  1709. package/src/app/api/combos/[id]/route.js +71 -0
  1710. package/src/app/api/combos/route.js +48 -0
  1711. package/src/app/api/init/route.js +7 -0
  1712. package/src/app/api/keys/[id]/route.js +58 -0
  1713. package/src/app/api/keys/route.js +42 -0
  1714. package/src/app/api/locale/route.js +30 -0
  1715. package/src/app/api/models/alias/route.js +53 -0
  1716. package/src/app/api/models/availability/route.js +121 -0
  1717. package/src/app/api/models/route.js +55 -0
  1718. package/src/app/api/oauth/[provider]/[action]/route.js +166 -0
  1719. package/src/app/api/oauth/cursor/auto-import/route.js +186 -0
  1720. package/src/app/api/oauth/cursor/import/route.js +100 -0
  1721. package/src/app/api/oauth/iflow/cookie/route.js +137 -0
  1722. package/src/app/api/oauth/kiro/auto-import/route.js +85 -0
  1723. package/src/app/api/oauth/kiro/import/route.js +56 -0
  1724. package/src/app/api/oauth/kiro/social-authorize/route.js +43 -0
  1725. package/src/app/api/oauth/kiro/social-exchange/route.js +67 -0
  1726. package/src/app/api/pricing/route.js +134 -0
  1727. package/src/app/api/provider-nodes/[id]/route.js +93 -0
  1728. package/src/app/api/provider-nodes/route.js +83 -0
  1729. package/src/app/api/provider-nodes/validate/route.js +171 -0
  1730. package/src/app/api/providers/[id]/models/route.js +445 -0
  1731. package/src/app/api/providers/[id]/route.js +189 -0
  1732. package/src/app/api/providers/[id]/test-models/route.js +111 -0
  1733. package/src/app/api/providers/client/route.js +20 -0
  1734. package/src/app/api/providers/route.js +186 -0
  1735. package/src/app/api/providers/test-batch/route.js +131 -0
  1736. package/src/app/api/providers/validate/route.js +255 -0
  1737. package/src/app/api/proxy-pools/[id]/route.js +118 -0
  1738. package/src/app/api/proxy-pools/route.js +90 -0
  1739. package/src/app/api/settings/database/route.js +36 -0
  1740. package/src/app/api/settings/proxy-test/route.js +23 -0
  1741. package/src/app/api/settings/require-login/route.js +12 -0
  1742. package/src/app/api/settings/route.js +74 -0
  1743. package/src/app/api/shutdown/route.js +12 -0
  1744. package/src/app/api/tags/route.js +18 -0
  1745. package/src/app/api/translator/console-logs/route.js +24 -0
  1746. package/src/app/api/translator/console-logs/stream/route.js +70 -0
  1747. package/src/app/api/translator/load/route.js +45 -0
  1748. package/src/app/api/translator/save/route.js +44 -0
  1749. package/src/app/api/translator/send/route.js +58 -0
  1750. package/src/app/api/translator/translate/route.js +90 -0
  1751. package/src/app/api/tunnel/disable/route.js +12 -0
  1752. package/src/app/api/tunnel/enable/route.js +16 -0
  1753. package/src/app/api/tunnel/status/route.js +12 -0
  1754. package/src/app/api/usage/[connectionId]/route.js +152 -0
  1755. package/src/app/api/usage/chart/route.js +21 -0
  1756. package/src/app/api/usage/history/route.js +12 -0
  1757. package/src/app/api/usage/providers/route.js +42 -0
  1758. package/src/app/api/usage/request-details/route.js +57 -0
  1759. package/src/app/api/usage/request-logs/route.js +13 -0
  1760. package/src/app/api/usage/stats/route.js +23 -0
  1761. package/src/app/api/usage/stream/route.js +81 -0
  1762. package/src/app/api/v1/api/chat/route.js +38 -0
  1763. package/src/app/api/v1/chat/completions/route.js +54 -0
  1764. package/src/app/api/v1/embeddings/route.js +21 -0
  1765. package/src/app/api/v1/messages/count_tokens/route.js +52 -0
  1766. package/src/app/api/v1/messages/route.js +37 -0
  1767. package/src/app/api/v1/models/route.js +149 -0
  1768. package/src/app/api/v1/responses/route.js +31 -0
  1769. package/src/app/api/v1/route.js +32 -0
  1770. package/src/app/api/v1beta/models/[...path]/route.js +329 -0
  1771. package/src/app/api/v1beta/models/route.js +44 -0
  1772. package/src/app/api/version/route.js +45 -0
  1773. package/src/app/callback/page.js +138 -0
  1774. package/src/app/dashboard/settings/pricing/page.js +173 -0
  1775. package/src/app/favicon.ico +0 -0
  1776. package/src/app/globals.css +219 -0
  1777. package/src/app/landing/components/AnimatedBackground.js +57 -0
  1778. package/src/app/landing/components/Features.js +133 -0
  1779. package/src/app/landing/components/FlowAnimation.js +121 -0
  1780. package/src/app/landing/components/Footer.js +61 -0
  1781. package/src/app/landing/components/GetStarted.js +99 -0
  1782. package/src/app/landing/components/HeroSection.js +47 -0
  1783. package/src/app/landing/components/HowItWorks.js +66 -0
  1784. package/src/app/landing/components/Navigation.js +72 -0
  1785. package/src/app/landing/page.js +106 -0
  1786. package/src/app/layout.js +50 -0
  1787. package/src/app/login/page.js +124 -0
  1788. package/src/app/manifest.js +30 -0
  1789. package/src/app/page.js +7 -0
  1790. package/src/dashboardGuard.js +128 -0
  1791. package/src/i18n/RuntimeI18nProvider.js +27 -0
  1792. package/src/i18n/config.js +150 -0
  1793. package/src/i18n/runtime.js +162 -0
  1794. package/src/lib/consoleLogBuffer.js +79 -0
  1795. package/src/lib/initCloudSync.js +22 -0
  1796. package/src/lib/license/manager.js +36 -0
  1797. package/src/lib/localDb.js +1138 -0
  1798. package/src/lib/network/connectionProxy.js +58 -0
  1799. package/src/lib/network/initOutboundProxy.js +22 -0
  1800. package/src/lib/network/outboundProxy.js +68 -0
  1801. package/src/lib/network/proxyTest.js +91 -0
  1802. package/src/lib/oauth/constants/oauth.js +236 -0
  1803. package/src/lib/oauth/providers.js +999 -0
  1804. package/src/lib/oauth/services/antigravity.js +325 -0
  1805. package/src/lib/oauth/services/claude.js +136 -0
  1806. package/src/lib/oauth/services/codex.js +145 -0
  1807. package/src/lib/oauth/services/cursor.js +179 -0
  1808. package/src/lib/oauth/services/gemini.js +240 -0
  1809. package/src/lib/oauth/services/github.js +225 -0
  1810. package/src/lib/oauth/services/iflow.js +202 -0
  1811. package/src/lib/oauth/services/index.js +16 -0
  1812. package/src/lib/oauth/services/kiro.js +313 -0
  1813. package/src/lib/oauth/services/oauth.js +157 -0
  1814. package/src/lib/oauth/services/openai.js +123 -0
  1815. package/src/lib/oauth/services/qwen.js +170 -0
  1816. package/src/lib/oauth/utils/banner.js +63 -0
  1817. package/src/lib/oauth/utils/pkce.js +38 -0
  1818. package/src/lib/oauth/utils/server.js +116 -0
  1819. package/src/lib/oauth/utils/ui.js +48 -0
  1820. package/src/lib/requestDetailsDb.js +278 -0
  1821. package/src/lib/tunnel/cloudflared.js +326 -0
  1822. package/src/lib/tunnel/state.js +53 -0
  1823. package/src/lib/tunnel/tunnelManager.js +169 -0
  1824. package/src/lib/usage/fetcher.js +208 -0
  1825. package/src/lib/usageDb.js +809 -0
  1826. package/src/mitm/cert/generate.js +32 -0
  1827. package/src/mitm/cert/install.js +176 -0
  1828. package/src/mitm/cert/rootCA.js +173 -0
  1829. package/src/mitm/config.js +27 -0
  1830. package/src/mitm/dns/dnsConfig.js +218 -0
  1831. package/src/mitm/handlers/antigravity.js +20 -0
  1832. package/src/mitm/handlers/base.js +50 -0
  1833. package/src/mitm/handlers/copilot.js +35 -0
  1834. package/src/mitm/handlers/cursor.js +15 -0
  1835. package/src/mitm/handlers/kiro.js +20 -0
  1836. package/src/mitm/logger.js +8 -0
  1837. package/src/mitm/manager.js +618 -0
  1838. package/src/mitm/paths.js +16 -0
  1839. package/src/mitm/server.js +233 -0
  1840. package/src/models/index.js +35 -0
  1841. package/src/proxy.js +5 -0
  1842. package/src/server-init.js +17 -0
  1843. package/src/shared/components/Avatar.js +88 -0
  1844. package/src/shared/components/Badge.js +55 -0
  1845. package/src/shared/components/Button.js +56 -0
  1846. package/src/shared/components/Card.js +122 -0
  1847. package/src/shared/components/CursorAuthModal.js +215 -0
  1848. package/src/shared/components/Drawer.js +89 -0
  1849. package/src/shared/components/Footer.js +132 -0
  1850. package/src/shared/components/Header.js +153 -0
  1851. package/src/shared/components/IFlowCookieModal.js +132 -0
  1852. package/src/shared/components/Input.js +69 -0
  1853. package/src/shared/components/KiroAuthModal.js +383 -0
  1854. package/src/shared/components/KiroOAuthWrapper.js +103 -0
  1855. package/src/shared/components/KiroSocialOAuthModal.js +205 -0
  1856. package/src/shared/components/LanguageSwitcher.js +181 -0
  1857. package/src/shared/components/Loading.js +77 -0
  1858. package/src/shared/components/ManualConfigModal.js +46 -0
  1859. package/src/shared/components/Modal.js +143 -0
  1860. package/src/shared/components/ModelSelectModal.js +356 -0
  1861. package/src/shared/components/OAuthModal.js +476 -0
  1862. package/src/shared/components/Pagination.js +146 -0
  1863. package/src/shared/components/PricingModal.js +208 -0
  1864. package/src/shared/components/RequestLogger.js +121 -0
  1865. package/src/shared/components/SegmentedControl.js +48 -0
  1866. package/src/shared/components/Select.js +70 -0
  1867. package/src/shared/components/Sidebar.js +267 -0
  1868. package/src/shared/components/ThemeProvider.js +15 -0
  1869. package/src/shared/components/ThemeToggle.js +47 -0
  1870. package/src/shared/components/Toggle.js +90 -0
  1871. package/src/shared/components/Tooltip.js +19 -0
  1872. package/src/shared/components/UsageStats.js +465 -0
  1873. package/src/shared/components/index.js +33 -0
  1874. package/src/shared/components/layouts/AuthLayout.js +29 -0
  1875. package/src/shared/components/layouts/DashboardLayout.js +102 -0
  1876. package/src/shared/components/layouts/index.js +4 -0
  1877. package/src/shared/constants/cliTools.js +249 -0
  1878. package/src/shared/constants/colors.js +77 -0
  1879. package/src/shared/constants/config.js +67 -0
  1880. package/src/shared/constants/index.js +4 -0
  1881. package/src/shared/constants/models.js +35 -0
  1882. package/src/shared/constants/pricing.js +876 -0
  1883. package/src/shared/constants/providers.js +120 -0
  1884. package/src/shared/hooks/index.js +2 -0
  1885. package/src/shared/hooks/useCopyToClipboard.js +29 -0
  1886. package/src/shared/hooks/useTheme.js +60 -0
  1887. package/src/shared/services/cloudSyncScheduler.js +122 -0
  1888. package/src/shared/services/initializeApp.js +249 -0
  1889. package/src/shared/services/initializeCloudSync.js +37 -0
  1890. package/src/shared/utils/api.js +93 -0
  1891. package/src/shared/utils/apiKey.js +98 -0
  1892. package/src/shared/utils/clineAuth.js +37 -0
  1893. package/src/shared/utils/cloud.js +40 -0
  1894. package/src/shared/utils/cn.js +11 -0
  1895. package/src/shared/utils/index.js +40 -0
  1896. package/src/shared/utils/machine.js +18 -0
  1897. package/src/shared/utils/machineId.js +60 -0
  1898. package/src/sse/handlers/chat.js +215 -0
  1899. package/src/sse/handlers/embeddings.js +142 -0
  1900. package/src/sse/services/auth.js +267 -0
  1901. package/src/sse/services/model.js +68 -0
  1902. package/src/sse/services/tokenRefresh.js +288 -0
  1903. package/src/sse/utils/logger.js +75 -0
  1904. package/src/store/index.js +6 -0
  1905. package/src/store/notificationStore.js +45 -0
  1906. package/src/store/providerStore.js +48 -0
  1907. package/src/store/themeStore.js +54 -0
  1908. package/src/store/userStore.js +20 -0
@@ -0,0 +1,3098 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Productivity</title>
7
+ <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='4' y='2' width='24' height='28' rx='4' fill='%23faf9f5' stroke='%23D97757' stroke-width='2'/%3E%3Crect x='8' y='0' width='16' height='5' rx='2.5' fill='%23D97757'/%3E%3Cpath d='M9 13l3 3 5-5' fill='none' stroke='%23D97757' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Crect x='20' y='12' width='5' height='2' rx='1' fill='%23c4c4c2'/%3E%3Crect x='9' y='20' width='10' height='2' rx='1' fill='%23c4c4c2'/%3E%3Crect x='9' y='25' width='7' height='2' rx='1' fill='%23c4c4c2'/%3E%3C/svg%3E">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
11
+ <style>
12
+ * { box-sizing: border-box; margin: 0; padding: 0; }
13
+
14
+ :root {
15
+ --bg-primary: #faf9f5;
16
+ --bg-secondary: #F5F4EF;
17
+ --bg-card: #ffffff;
18
+ --text-primary: #141413;
19
+ --text-secondary: #5c5c5a;
20
+ --text-muted: #8c8c8a;
21
+ --accent: #D97757;
22
+ --accent-hover: #c4684a;
23
+ --border: #e5e4df;
24
+ --border-light: #eeeee9;
25
+ --shadow: rgba(20, 20, 19, 0.04);
26
+ --shadow-hover: rgba(20, 20, 19, 0.08);
27
+ }
28
+
29
+ body {
30
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
31
+ background: var(--bg-primary);
32
+ color: var(--text-primary);
33
+ height: 100vh;
34
+ padding: 20px 24px;
35
+ line-height: 1.5;
36
+ overflow: hidden;
37
+ display: flex;
38
+ flex-direction: column;
39
+ }
40
+
41
+ header {
42
+ display: flex;
43
+ justify-content: space-between;
44
+ align-items: center;
45
+ margin-bottom: 16px;
46
+ padding-bottom: 16px;
47
+ border-bottom: 1px solid var(--border);
48
+ flex-shrink: 0;
49
+ }
50
+
51
+ h1 {
52
+ font-size: 1.5rem;
53
+ font-weight: 600;
54
+ letter-spacing: -0.02em;
55
+ }
56
+
57
+ h2 { font-size: 1.1rem; font-weight: 600; margin-bottom: 12px; color: var(--text-secondary); }
58
+
59
+ .header-left {
60
+ display: flex;
61
+ align-items: flex-start;
62
+ gap: 0;
63
+ }
64
+
65
+ .view-toggle {
66
+ display: flex;
67
+ gap: 4px;
68
+ background: var(--bg-secondary);
69
+ padding: 4px;
70
+ border-radius: 8px;
71
+ margin-left: 16px;
72
+ }
73
+
74
+ .view-toggle button {
75
+ background: transparent;
76
+ border: none;
77
+ padding: 6px 14px;
78
+ font-size: 13px;
79
+ color: var(--text-muted);
80
+ border-radius: 6px;
81
+ }
82
+
83
+ .view-toggle button:hover {
84
+ color: var(--text-primary);
85
+ background: transparent;
86
+ }
87
+
88
+ .view-toggle button.active {
89
+ background: var(--bg-card);
90
+ color: var(--text-primary);
91
+ box-shadow: 0 1px 3px var(--shadow);
92
+ }
93
+
94
+ .buttons { display: flex; gap: 12px; }
95
+
96
+ button {
97
+ background: var(--bg-card);
98
+ color: var(--text-primary);
99
+ border: 1px solid var(--border);
100
+ padding: 10px 18px;
101
+ border-radius: 8px;
102
+ cursor: pointer;
103
+ font-size: 14px;
104
+ font-weight: 500;
105
+ font-family: inherit;
106
+ transition: all 0.15s ease;
107
+ }
108
+
109
+ button:hover {
110
+ background: var(--bg-secondary);
111
+ border-color: var(--text-muted);
112
+ }
113
+
114
+ button.primary {
115
+ background: var(--accent);
116
+ color: white;
117
+ border-color: var(--accent);
118
+ }
119
+
120
+ button.primary:hover {
121
+ background: var(--accent-hover);
122
+ border-color: var(--accent-hover);
123
+ }
124
+
125
+ button:disabled {
126
+ opacity: 0.4;
127
+ cursor: not-allowed;
128
+ }
129
+
130
+ /* ===== TASKS STYLES ===== */
131
+
132
+ .board {
133
+ display: flex;
134
+ gap: 24px;
135
+ overflow-x: auto;
136
+ overflow-y: hidden;
137
+ padding-bottom: 24px;
138
+ flex: 1;
139
+ min-height: 0;
140
+ }
141
+
142
+ .column {
143
+ background: var(--bg-secondary);
144
+ border-radius: 12px;
145
+ min-width: 340px;
146
+ max-width: 340px;
147
+ display: flex;
148
+ flex-direction: column;
149
+ height: 100%;
150
+ max-height: 100%;
151
+ }
152
+
153
+ .column-header {
154
+ padding: 16px 18px;
155
+ font-weight: 600;
156
+ font-size: 13px;
157
+ text-transform: uppercase;
158
+ letter-spacing: 0.05em;
159
+ color: var(--text-secondary);
160
+ display: flex;
161
+ justify-content: space-between;
162
+ align-items: center;
163
+ cursor: grab;
164
+ }
165
+
166
+ .column-header:active {
167
+ cursor: grabbing;
168
+ }
169
+
170
+ .column.dragging-column {
171
+ opacity: 0.5;
172
+ }
173
+
174
+ .column-drop-indicator {
175
+ width: 3px;
176
+ background: var(--accent);
177
+ border-radius: 2px;
178
+ margin: 0 -2px;
179
+ min-height: 100px;
180
+ }
181
+
182
+ .column-header .count {
183
+ background: var(--bg-card);
184
+ padding: 3px 10px;
185
+ border-radius: 12px;
186
+ font-size: 12px;
187
+ font-weight: 500;
188
+ color: var(--text-muted);
189
+ }
190
+
191
+ .cards {
192
+ flex: 1;
193
+ overflow-y: auto;
194
+ padding: 0 12px 12px;
195
+ min-height: 100px;
196
+ }
197
+
198
+ .cards.drag-over {
199
+ background: rgba(217, 119, 87, 0.05);
200
+ border-radius: 8px;
201
+ }
202
+
203
+ .task-card {
204
+ background: var(--bg-card);
205
+ border: 1px solid var(--border-light);
206
+ border-radius: 10px;
207
+ padding: 14px 16px;
208
+ margin-bottom: 10px;
209
+ cursor: grab;
210
+ transition: all 0.15s ease;
211
+ box-shadow: 0 1px 3px var(--shadow);
212
+ position: relative;
213
+ }
214
+
215
+ .task-card:hover {
216
+ box-shadow: 0 4px 12px var(--shadow-hover);
217
+ border-color: var(--border);
218
+ }
219
+
220
+ .task-card .add-on-hover {
221
+ display: none;
222
+ }
223
+
224
+ .task-card:hover .add-on-hover {
225
+ display: block;
226
+ }
227
+
228
+ .task-card .delete-btn {
229
+ display: none;
230
+ position: absolute;
231
+ top: 8px;
232
+ right: 8px;
233
+ background: transparent;
234
+ border: none;
235
+ color: var(--text-muted);
236
+ cursor: pointer;
237
+ padding: 4px 6px;
238
+ font-size: 14px;
239
+ line-height: 1;
240
+ border-radius: 4px;
241
+ }
242
+
243
+ .task-card:hover .delete-btn {
244
+ display: block;
245
+ }
246
+
247
+ .task-card .delete-btn:hover {
248
+ background: var(--bg-secondary);
249
+ color: var(--accent);
250
+ }
251
+
252
+ .task-card.dragging {
253
+ opacity: 0.5;
254
+ transform: rotate(2deg);
255
+ }
256
+
257
+ .card-title {
258
+ font-size: 14px;
259
+ font-weight: 500;
260
+ line-height: 1.5;
261
+ color: var(--text-primary);
262
+ }
263
+
264
+ .card-note {
265
+ font-size: 13px;
266
+ color: var(--text-muted);
267
+ margin-top: 6px;
268
+ line-height: 1.4;
269
+ overflow-wrap: break-word;
270
+ word-break: break-word;
271
+ }
272
+
273
+ .card-subtasks {
274
+ margin-top: 10px;
275
+ padding-top: 10px;
276
+ border-top: 1px solid var(--border-light);
277
+ font-size: 13px;
278
+ color: var(--text-secondary);
279
+ }
280
+
281
+ .subtask {
282
+ padding: 3px 0;
283
+ display: flex;
284
+ align-items: flex-start;
285
+ gap: 8px;
286
+ }
287
+
288
+ .checkbox {
289
+ width: 18px;
290
+ height: 18px;
291
+ min-width: 18px;
292
+ min-height: 18px;
293
+ flex-shrink: 0;
294
+ border: 2px solid var(--border);
295
+ border-radius: 5px;
296
+ display: inline-flex;
297
+ align-items: center;
298
+ justify-content: center;
299
+ vertical-align: middle;
300
+ cursor: pointer;
301
+ transition: all 0.15s ease;
302
+ background: var(--bg-card);
303
+ }
304
+
305
+ .checkbox:hover {
306
+ border-color: var(--accent);
307
+ }
308
+
309
+ .checkbox.checked {
310
+ background: var(--accent);
311
+ border-color: var(--accent);
312
+ }
313
+
314
+ .checkbox.checked::after {
315
+ content: '';
316
+ width: 5px;
317
+ height: 9px;
318
+ border: solid white;
319
+ border-width: 0 2px 2px 0;
320
+ transform: rotate(45deg);
321
+ margin-bottom: 2px;
322
+ }
323
+
324
+ .empty-state {
325
+ text-align: center;
326
+ padding: 80px 40px;
327
+ color: var(--text-muted);
328
+ }
329
+
330
+ .empty-state button {
331
+ font-size: 16px;
332
+ padding: 14px 28px;
333
+ background: var(--accent);
334
+ border: none;
335
+ color: white;
336
+ }
337
+
338
+ .empty-state button:hover {
339
+ background: var(--accent-hover);
340
+ }
341
+
342
+ .status-bar {
343
+ position: fixed;
344
+ bottom: 24px;
345
+ left: 50%;
346
+ transform: translateX(-50%);
347
+ background: var(--text-primary);
348
+ color: var(--bg-primary);
349
+ padding: 12px 24px;
350
+ border-radius: 10px;
351
+ font-size: 13px;
352
+ font-weight: 500;
353
+ opacity: 0;
354
+ transition: opacity 0.2s ease;
355
+ box-shadow: 0 4px 20px rgba(20, 20, 19, 0.15);
356
+ z-index: 200;
357
+ }
358
+
359
+ .status-bar.visible { opacity: 1; }
360
+
361
+ .add-card {
362
+ padding: 12px;
363
+ }
364
+
365
+ .add-card button {
366
+ width: 100%;
367
+ background: transparent;
368
+ border: 2px dashed var(--border);
369
+ color: var(--text-muted);
370
+ font-weight: 500;
371
+ }
372
+
373
+ .add-card button:hover {
374
+ border-color: var(--accent);
375
+ color: var(--accent);
376
+ background: transparent;
377
+ }
378
+
379
+ .new-task-input {
380
+ width: 100%;
381
+ background: var(--bg-card);
382
+ border: 2px solid var(--accent);
383
+ border-radius: 8px;
384
+ padding: 12px;
385
+ color: var(--text-primary);
386
+ font-size: 14px;
387
+ font-family: inherit;
388
+ resize: none;
389
+ }
390
+
391
+ .new-task-input:focus {
392
+ outline: none;
393
+ }
394
+
395
+ .new-task-input::placeholder {
396
+ color: var(--text-muted);
397
+ }
398
+
399
+ /* Scrollbar styling */
400
+ .cards::-webkit-scrollbar,
401
+ .list-view::-webkit-scrollbar {
402
+ width: 6px;
403
+ }
404
+
405
+ .cards::-webkit-scrollbar-track,
406
+ .list-view::-webkit-scrollbar-track {
407
+ background: transparent;
408
+ }
409
+
410
+ .cards::-webkit-scrollbar-thumb,
411
+ .list-view::-webkit-scrollbar-thumb {
412
+ background: var(--border);
413
+ border-radius: 3px;
414
+ }
415
+
416
+ .cards::-webkit-scrollbar-thumb:hover,
417
+ .list-view::-webkit-scrollbar-thumb:hover {
418
+ background: var(--text-muted);
419
+ }
420
+
421
+ /* List View Styles */
422
+ .list-view {
423
+ max-width: 800px;
424
+ margin: 0 auto;
425
+ flex: 1;
426
+ overflow-y: auto;
427
+ overflow-x: hidden;
428
+ min-height: 0;
429
+ }
430
+
431
+ .list-section {
432
+ margin-bottom: 28px;
433
+ }
434
+
435
+ .list-section.drag-over {
436
+ background: rgba(217, 119, 87, 0.05);
437
+ border-radius: 8px;
438
+ margin: 0 -12px 32px;
439
+ padding: 0 12px;
440
+ }
441
+
442
+ .list-section-header {
443
+ font-size: 13px;
444
+ font-weight: 600;
445
+ text-transform: uppercase;
446
+ letter-spacing: 0.05em;
447
+ color: var(--text-secondary);
448
+ padding: 4px 0;
449
+ margin-bottom: 6px;
450
+ display: flex;
451
+ justify-content: space-between;
452
+ align-items: center;
453
+ }
454
+
455
+ .list-section-header .section-title {
456
+ cursor: pointer;
457
+ }
458
+
459
+ .list-section-header .section-title:hover {
460
+ color: var(--text-primary);
461
+ }
462
+
463
+ .list-section-header .count {
464
+ font-size: 12px;
465
+ color: var(--text-muted);
466
+ font-weight: 500;
467
+ }
468
+
469
+ .list-item {
470
+ display: flex;
471
+ align-items: flex-start;
472
+ gap: 12px;
473
+ padding: 12px 14px;
474
+ margin-bottom: 6px;
475
+ background: var(--bg-card);
476
+ border: 1px solid var(--border-light);
477
+ cursor: grab;
478
+ position: relative;
479
+ border-radius: 10px;
480
+ transition: all 0.15s ease;
481
+ box-shadow: 0 1px 3px var(--shadow);
482
+ }
483
+
484
+ .list-item:active {
485
+ cursor: grabbing;
486
+ }
487
+
488
+ .list-item:hover {
489
+ box-shadow: 0 4px 12px var(--shadow-hover);
490
+ border-color: var(--border);
491
+ }
492
+
493
+ .list-item.dragging {
494
+ opacity: 0.5;
495
+ background: var(--bg-secondary);
496
+ }
497
+
498
+ .list-item .checkbox {
499
+ margin-top: 2px;
500
+ flex-shrink: 0;
501
+ }
502
+
503
+ .list-item-content {
504
+ flex: 1;
505
+ min-width: 0;
506
+ }
507
+
508
+ .list-item-title {
509
+ font-size: 15px;
510
+ color: var(--text-primary);
511
+ line-height: 1.4;
512
+ }
513
+
514
+ .list-item-title.checked {
515
+ color: var(--text-muted);
516
+ text-decoration: line-through;
517
+ }
518
+
519
+ .list-item-note {
520
+ font-size: 13px;
521
+ color: var(--text-muted);
522
+ margin-top: 4px;
523
+ cursor: pointer;
524
+ }
525
+
526
+ .list-item-note:hover {
527
+ color: var(--text-secondary);
528
+ }
529
+
530
+ .list-item-note.add-note {
531
+ font-style: italic;
532
+ display: none;
533
+ }
534
+
535
+ .list-item:hover .list-item-note.add-note {
536
+ display: block;
537
+ }
538
+
539
+ .list-item-subtasks {
540
+ margin-top: 8px;
541
+ padding-left: 2px;
542
+ }
543
+
544
+ .list-item-subtask {
545
+ display: flex;
546
+ align-items: flex-start;
547
+ gap: 8px;
548
+ padding: 3px 0;
549
+ font-size: 13px;
550
+ color: var(--text-secondary);
551
+ }
552
+
553
+ .list-item-subtask .checkbox {
554
+ width: 16px;
555
+ height: 16px;
556
+ min-width: 16px;
557
+ min-height: 16px;
558
+ margin-top: 1px;
559
+ }
560
+
561
+ .list-item-subtask span {
562
+ cursor: pointer;
563
+ }
564
+
565
+ .list-item-subtask span:hover {
566
+ color: var(--text-primary);
567
+ }
568
+
569
+ .list-item-add-subtask {
570
+ font-size: 13px;
571
+ color: var(--text-muted);
572
+ font-style: italic;
573
+ cursor: pointer;
574
+ padding: 3px 0;
575
+ padding-left: 24px;
576
+ display: none;
577
+ }
578
+
579
+ .list-item:hover .list-item-add-subtask {
580
+ display: block;
581
+ }
582
+
583
+ .list-item-add-subtask:hover {
584
+ color: var(--accent);
585
+ }
586
+
587
+ .list-item-section {
588
+ font-size: 11px;
589
+ color: var(--text-muted);
590
+ background: var(--bg-secondary);
591
+ padding: 2px 8px;
592
+ border-radius: 4px;
593
+ white-space: nowrap;
594
+ }
595
+
596
+ .list-item-actions {
597
+ display: none;
598
+ position: absolute;
599
+ top: 8px;
600
+ right: 8px;
601
+ }
602
+
603
+ .list-item:hover .list-item-actions {
604
+ display: flex;
605
+ gap: 4px;
606
+ }
607
+
608
+ .list-item-actions button {
609
+ background: transparent;
610
+ border: none;
611
+ color: var(--text-muted);
612
+ cursor: pointer;
613
+ padding: 4px 6px;
614
+ font-size: 14px;
615
+ line-height: 1;
616
+ border-radius: 4px;
617
+ }
618
+
619
+ .list-item-actions button:hover {
620
+ background: var(--bg-card);
621
+ color: var(--accent);
622
+ }
623
+
624
+ .list-drop-indicator {
625
+ height: 3px;
626
+ background: var(--accent);
627
+ border-radius: 2px;
628
+ margin: 2px -12px;
629
+ }
630
+
631
+ .list-add-section {
632
+ margin-top: 16px;
633
+ padding: 16px;
634
+ border: 2px dashed var(--border);
635
+ border-radius: 8px;
636
+ text-align: center;
637
+ cursor: pointer;
638
+ color: var(--text-muted);
639
+ font-size: 14px;
640
+ font-weight: 500;
641
+ transition: all 0.15s ease;
642
+ }
643
+
644
+ .list-add-section:hover {
645
+ border-color: var(--accent);
646
+ color: var(--accent);
647
+ }
648
+
649
+ .quick-add {
650
+ display: flex;
651
+ align-items: center;
652
+ gap: 12px;
653
+ padding: 12px 0;
654
+ }
655
+
656
+ .quick-add-input {
657
+ flex: 1;
658
+ background: transparent;
659
+ border: none;
660
+ font-size: 15px;
661
+ color: var(--text-primary);
662
+ font-family: inherit;
663
+ outline: none;
664
+ }
665
+
666
+ .quick-add-input::placeholder {
667
+ color: var(--text-muted);
668
+ }
669
+
670
+ .quick-add-section {
671
+ font-size: 12px;
672
+ color: var(--text-muted);
673
+ background: var(--bg-secondary);
674
+ padding: 4px 10px;
675
+ border-radius: 6px;
676
+ cursor: pointer;
677
+ border: 1px solid var(--border);
678
+ }
679
+
680
+ .quick-add-section:hover {
681
+ border-color: var(--accent);
682
+ }
683
+
684
+ .section-picker {
685
+ position: absolute;
686
+ background: var(--bg-card);
687
+ border: 1px solid var(--border);
688
+ border-radius: 8px;
689
+ box-shadow: 0 4px 20px var(--shadow-hover);
690
+ padding: 4px;
691
+ z-index: 100;
692
+ }
693
+
694
+ .section-picker button {
695
+ display: block;
696
+ width: 100%;
697
+ text-align: left;
698
+ padding: 8px 12px;
699
+ font-size: 13px;
700
+ background: transparent;
701
+ border: none;
702
+ border-radius: 6px;
703
+ }
704
+
705
+ .section-picker button:hover {
706
+ background: var(--bg-secondary);
707
+ }
708
+
709
+ /* ===== MEMORY STYLES ===== */
710
+
711
+ .memory-tabs {
712
+ display: flex;
713
+ gap: 4px;
714
+ margin-bottom: 12px;
715
+ flex-wrap: wrap;
716
+ background: var(--bg-secondary);
717
+ padding: 4px;
718
+ border-radius: 8px;
719
+ flex-shrink: 0;
720
+ }
721
+
722
+ .memory-tab {
723
+ background: transparent;
724
+ color: var(--text-muted);
725
+ padding: 8px 16px;
726
+ border: none;
727
+ border-radius: 6px;
728
+ cursor: pointer;
729
+ font-size: 13px;
730
+ font-weight: 500;
731
+ transition: all 0.15s ease;
732
+ text-transform: capitalize;
733
+ }
734
+
735
+ .memory-tab:hover { color: var(--text-primary); }
736
+
737
+ .memory-tab.active {
738
+ color: var(--text-primary);
739
+ background: var(--bg-card);
740
+ box-shadow: 0 1px 3px var(--shadow);
741
+ }
742
+
743
+ .memory-tab .count {
744
+ background: var(--bg-secondary);
745
+ padding: 2px 8px;
746
+ border-radius: 10px;
747
+ font-size: 11px;
748
+ margin-left: 6px;
749
+ color: var(--text-muted);
750
+ }
751
+
752
+ .memory-tab.active .count {
753
+ background: var(--border-light);
754
+ }
755
+
756
+ .memory-grid {
757
+ display: grid;
758
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
759
+ gap: 16px;
760
+ }
761
+
762
+ .memory-flat-table {
763
+ width: 100%;
764
+ border-collapse: collapse;
765
+ font-size: 13px;
766
+ }
767
+
768
+ .memory-flat-table th {
769
+ text-align: left;
770
+ padding: 10px 16px;
771
+ font-weight: 500;
772
+ color: var(--text-muted);
773
+ border-bottom: 1px solid var(--border);
774
+ font-size: 12px;
775
+ text-transform: uppercase;
776
+ letter-spacing: 0.03em;
777
+ }
778
+
779
+ .memory-flat-table td {
780
+ padding: 9px 16px;
781
+ border-bottom: 1px solid var(--border-light);
782
+ color: var(--text-primary);
783
+ line-height: 1.4;
784
+ }
785
+
786
+ .memory-flat-table td:first-child {
787
+ color: var(--text-muted);
788
+ font-weight: 500;
789
+ white-space: nowrap;
790
+ width: 120px;
791
+ }
792
+
793
+ .memory-flat-table tr:last-child td {
794
+ border-bottom: none;
795
+ }
796
+
797
+ .memory-flat-table tr:hover td {
798
+ background: var(--bg-secondary);
799
+ }
800
+
801
+ .memory-card {
802
+ background: var(--bg-card);
803
+ border: 1px solid var(--border-light);
804
+ border-radius: 10px;
805
+ padding: 16px;
806
+ cursor: pointer;
807
+ transition: all 0.15s ease;
808
+ box-shadow: 0 1px 3px var(--shadow);
809
+ }
810
+
811
+ .memory-card:hover {
812
+ border-color: var(--accent);
813
+ box-shadow: 0 4px 12px var(--shadow-hover);
814
+ }
815
+
816
+ .memory-card-title {
817
+ font-size: 15px;
818
+ font-weight: 600;
819
+ margin-bottom: 8px;
820
+ display: flex;
821
+ align-items: center;
822
+ gap: 8px;
823
+ color: var(--text-primary);
824
+ }
825
+
826
+ .memory-card-meta {
827
+ font-size: 13px;
828
+ color: var(--text-muted);
829
+ margin-bottom: 8px;
830
+ }
831
+
832
+ .memory-card-preview {
833
+ font-size: 13px;
834
+ color: var(--text-secondary);
835
+ line-height: 1.5;
836
+ overflow: hidden;
837
+ display: -webkit-box;
838
+ -webkit-line-clamp: 4;
839
+ -webkit-box-orient: vertical;
840
+ }
841
+
842
+ .memory-card-fields {
843
+ margin-top: 10px;
844
+ font-size: 12px;
845
+ }
846
+
847
+ .memory-card-field {
848
+ display: flex;
849
+ gap: 8px;
850
+ margin-bottom: 4px;
851
+ }
852
+
853
+ .memory-card-field-label {
854
+ color: var(--text-muted);
855
+ min-width: 80px;
856
+ }
857
+
858
+ .memory-card-field-value {
859
+ color: var(--text-secondary);
860
+ }
861
+
862
+ .file-card {
863
+ background: var(--bg-card);
864
+ border: 1px solid var(--border-light);
865
+ border-radius: 10px;
866
+ margin-bottom: 16px;
867
+ box-shadow: 0 1px 3px var(--shadow);
868
+ }
869
+
870
+ .file-card-header {
871
+ padding: 16px;
872
+ border-bottom: 1px solid var(--border-light);
873
+ display: flex;
874
+ justify-content: space-between;
875
+ align-items: center;
876
+ cursor: pointer;
877
+ }
878
+
879
+ .file-card-header:hover {
880
+ background: var(--bg-secondary);
881
+ }
882
+
883
+ .file-card-title {
884
+ font-size: 14px;
885
+ font-weight: 600;
886
+ color: var(--text-primary);
887
+ }
888
+
889
+ .file-card-content {
890
+ padding: 16px;
891
+ font-size: 13px;
892
+ line-height: 1.6;
893
+ white-space: pre-wrap;
894
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
895
+ overflow-y: auto;
896
+ display: none;
897
+ color: var(--text-secondary);
898
+ }
899
+
900
+ .file-card-content.expanded {
901
+ display: block;
902
+ }
903
+
904
+ .stats {
905
+ display: flex;
906
+ gap: 16px;
907
+ margin-bottom: 24px;
908
+ flex-wrap: wrap;
909
+ }
910
+
911
+ .stat {
912
+ background: var(--bg-card);
913
+ border: 1px solid var(--border-light);
914
+ border-radius: 10px;
915
+ padding: 16px 24px;
916
+ min-width: 100px;
917
+ box-shadow: 0 1px 3px var(--shadow);
918
+ }
919
+
920
+ .stat-value {
921
+ font-size: 28px;
922
+ font-weight: 600;
923
+ color: var(--accent);
924
+ }
925
+
926
+ .stat-label {
927
+ font-size: 12px;
928
+ color: var(--text-muted);
929
+ text-transform: capitalize;
930
+ margin-top: 4px;
931
+ }
932
+
933
+ .search-box {
934
+ background: var(--bg-card);
935
+ border: 1px solid var(--border);
936
+ border-radius: 8px;
937
+ padding: 10px 16px;
938
+ display: flex;
939
+ align-items: center;
940
+ gap: 10px;
941
+ margin-bottom: 20px;
942
+ }
943
+
944
+ .search-box input {
945
+ flex: 1;
946
+ background: transparent;
947
+ border: none;
948
+ color: var(--text-primary);
949
+ font-size: 14px;
950
+ font-family: inherit;
951
+ outline: none;
952
+ }
953
+
954
+ .search-box input::placeholder {
955
+ color: var(--text-muted);
956
+ }
957
+
958
+ .add-btn {
959
+ background: transparent;
960
+ border: 2px dashed var(--border);
961
+ color: var(--text-muted);
962
+ padding: 40px;
963
+ border-radius: 10px;
964
+ cursor: pointer;
965
+ transition: all 0.15s ease;
966
+ display: flex;
967
+ align-items: center;
968
+ justify-content: center;
969
+ font-size: 14px;
970
+ font-weight: 500;
971
+ }
972
+
973
+ .add-btn:hover {
974
+ border-color: var(--accent);
975
+ color: var(--accent);
976
+ }
977
+
978
+ .markdown-content {
979
+ line-height: 1.6;
980
+ color: var(--text-secondary);
981
+ }
982
+
983
+ .markdown-content h1 { font-size: 1.4em; margin: 16px 0 8px; color: var(--text-primary); }
984
+ .markdown-content h2 { font-size: 1.2em; margin: 14px 0 6px; color: var(--text-primary); }
985
+ .markdown-content h3 { font-size: 1.1em; margin: 12px 0 4px; color: var(--text-secondary); }
986
+ .markdown-content p { margin: 8px 0; }
987
+ .markdown-content ul, .markdown-content ol { margin: 8px 0 8px 20px; }
988
+ .markdown-content li { margin: 4px 0; }
989
+ .markdown-content code {
990
+ background: var(--bg-secondary);
991
+ padding: 2px 6px;
992
+ border-radius: 4px;
993
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
994
+ color: var(--text-primary);
995
+ }
996
+ .markdown-content pre {
997
+ background: var(--bg-secondary);
998
+ padding: 12px;
999
+ border-radius: 8px;
1000
+ overflow-x: auto;
1001
+ margin: 8px 0;
1002
+ border: 1px solid var(--border-light);
1003
+ }
1004
+ .markdown-content table {
1005
+ width: 100%;
1006
+ border-collapse: collapse;
1007
+ margin: 8px 0;
1008
+ font-size: 13px;
1009
+ }
1010
+ .markdown-content th, .markdown-content td {
1011
+ padding: 12px 16px;
1012
+ text-align: left;
1013
+ border-bottom: 1px solid var(--border-light);
1014
+ }
1015
+ .markdown-content th {
1016
+ background: var(--bg-secondary);
1017
+ font-weight: 600;
1018
+ font-size: 12px;
1019
+ text-transform: uppercase;
1020
+ letter-spacing: 0.05em;
1021
+ color: var(--text-secondary);
1022
+ }
1023
+
1024
+ /* Modal */
1025
+ .modal-overlay {
1026
+ display: none;
1027
+ position: fixed;
1028
+ top: 0;
1029
+ left: 0;
1030
+ right: 0;
1031
+ bottom: 0;
1032
+ background: rgba(20, 20, 19, 0.5);
1033
+ z-index: 100;
1034
+ align-items: center;
1035
+ justify-content: center;
1036
+ }
1037
+
1038
+ .modal-overlay.visible {
1039
+ display: flex;
1040
+ }
1041
+
1042
+ .modal {
1043
+ background: var(--bg-card);
1044
+ border-radius: 12px;
1045
+ width: 90%;
1046
+ max-width: 800px;
1047
+ max-height: 85vh;
1048
+ overflow: hidden;
1049
+ display: flex;
1050
+ flex-direction: column;
1051
+ box-shadow: 0 20px 60px rgba(20, 20, 19, 0.2);
1052
+ }
1053
+
1054
+ .modal-header {
1055
+ padding: 20px;
1056
+ border-bottom: 1px solid var(--border);
1057
+ display: flex;
1058
+ justify-content: space-between;
1059
+ align-items: center;
1060
+ }
1061
+
1062
+ .modal-header h3 {
1063
+ font-size: 18px;
1064
+ font-weight: 600;
1065
+ color: var(--text-primary);
1066
+ }
1067
+
1068
+ .modal-close {
1069
+ background: transparent;
1070
+ border: none;
1071
+ color: var(--text-muted);
1072
+ font-size: 24px;
1073
+ cursor: pointer;
1074
+ padding: 0;
1075
+ line-height: 1;
1076
+ }
1077
+
1078
+ .modal-close:hover { color: var(--text-primary); }
1079
+
1080
+ .modal-body {
1081
+ padding: 20px;
1082
+ overflow-y: auto;
1083
+ flex: 1;
1084
+ }
1085
+
1086
+ .modal-footer {
1087
+ padding: 16px 20px;
1088
+ border-top: 1px solid var(--border);
1089
+ display: flex;
1090
+ justify-content: flex-end;
1091
+ gap: 10px;
1092
+ }
1093
+
1094
+ .form-group {
1095
+ margin-bottom: 16px;
1096
+ }
1097
+
1098
+ .form-group label {
1099
+ display: block;
1100
+ font-size: 12px;
1101
+ font-weight: 600;
1102
+ color: var(--text-secondary);
1103
+ text-transform: uppercase;
1104
+ letter-spacing: 0.05em;
1105
+ margin-bottom: 6px;
1106
+ }
1107
+
1108
+ .form-group textarea {
1109
+ width: 100%;
1110
+ background: var(--bg-secondary);
1111
+ border: 1px solid var(--border);
1112
+ border-radius: 8px;
1113
+ padding: 12px;
1114
+ color: var(--text-primary);
1115
+ font-size: 13px;
1116
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1117
+ line-height: 1.5;
1118
+ min-height: 300px;
1119
+ resize: vertical;
1120
+ }
1121
+
1122
+ .form-group textarea:focus {
1123
+ outline: none;
1124
+ border-color: var(--accent);
1125
+ }
1126
+
1127
+ /* Tab panel containers */
1128
+ .tab-panel {
1129
+ display: none;
1130
+ flex: 1;
1131
+ min-height: 0;
1132
+ flex-direction: column;
1133
+ }
1134
+
1135
+ .tab-panel.active {
1136
+ display: flex;
1137
+ }
1138
+
1139
+ /* Memory panel scrollable area */
1140
+ .memory-content-area {
1141
+ flex: 1;
1142
+ overflow-y: auto;
1143
+ min-height: 0;
1144
+ }
1145
+
1146
+ .memory-content-area::-webkit-scrollbar {
1147
+ width: 6px;
1148
+ }
1149
+
1150
+ .memory-content-area::-webkit-scrollbar-track {
1151
+ background: transparent;
1152
+ }
1153
+
1154
+ .memory-content-area::-webkit-scrollbar-thumb {
1155
+ background: var(--border);
1156
+ border-radius: 3px;
1157
+ }
1158
+
1159
+ .memory-content-area::-webkit-scrollbar-thumb:hover {
1160
+ background: var(--text-muted);
1161
+ }
1162
+
1163
+ .file-card-content::-webkit-scrollbar,
1164
+ .modal-body::-webkit-scrollbar {
1165
+ width: 6px;
1166
+ }
1167
+
1168
+ .file-card-content::-webkit-scrollbar-track,
1169
+ .modal-body::-webkit-scrollbar-track {
1170
+ background: transparent;
1171
+ }
1172
+
1173
+ .file-card-content::-webkit-scrollbar-thumb,
1174
+ .modal-body::-webkit-scrollbar-thumb {
1175
+ background: var(--border);
1176
+ border-radius: 3px;
1177
+ }
1178
+
1179
+ .file-card-content::-webkit-scrollbar-thumb:hover,
1180
+ .modal-body::-webkit-scrollbar-thumb:hover {
1181
+ background: var(--text-muted);
1182
+ }
1183
+
1184
+ /* File path display */
1185
+ .file-path {
1186
+ font-size: 13px;
1187
+ color: var(--text-muted);
1188
+ margin-top: 2px;
1189
+ }
1190
+ </style>
1191
+ </head>
1192
+ <body>
1193
+ <header>
1194
+ <div class="header-left">
1195
+ <svg width="28" height="28" viewBox="0 0 32 32" style="margin-right: 12px; flex-shrink: 0;">
1196
+ <rect x="4" y="2" width="24" height="28" rx="4" fill="#faf9f5" stroke="#D97757" stroke-width="2"/>
1197
+ <rect x="8" y="0" width="16" height="5" rx="2.5" fill="#D97757"/>
1198
+ <path d="M9 13l3 3 5-5" fill="none" stroke="#D97757" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
1199
+ <rect x="20" y="12" width="5" height="2" rx="1" fill="#c4c4c2"/>
1200
+ <rect x="9" y="20" width="10" height="2" rx="1" fill="#c4c4c2"/>
1201
+ <rect x="9" y="25" width="7" height="2" rx="1" fill="#c4c4c2"/>
1202
+ </svg>
1203
+ <div>
1204
+ <h1>Productivity</h1>
1205
+ <div id="filePath" class="file-path"></div>
1206
+ </div>
1207
+ <div class="view-toggle" id="mainTabToggle">
1208
+ <button id="tasksTabBtn" class="active">Tasks</button>
1209
+ <button id="memoryTabBtn">Memory</button>
1210
+ </div>
1211
+ <div class="view-toggle" id="taskViewToggle">
1212
+ <button id="boardViewBtn" class="active">Board</button>
1213
+ <button id="listViewBtn">List</button>
1214
+ </div>
1215
+ </div>
1216
+ <div class="buttons">
1217
+ <button id="openTaskBtn">Select File</button>
1218
+ <button id="openMemoryBtn" style="display: none;">Open Folder</button>
1219
+ <button id="saveBtn" class="primary" disabled style="display: none;">Save</button>
1220
+ </div>
1221
+ </header>
1222
+
1223
+ <!-- TASKS TAB PANEL -->
1224
+ <div class="tab-panel active" id="tasksPanel">
1225
+ <div class="list-view" id="listView" style="display: none;"></div>
1226
+ <div class="board" id="board">
1227
+ <div class="empty-state" id="boardEmptyState" style="width: 100%;">
1228
+ <p style="margin-bottom: 24px; font-size: 18px; font-weight: 600; color: var(--text-primary);">Select your TASKS.md file</p>
1229
+ <button id="openBtnLarge">Select TASKS.md</button>
1230
+ </div>
1231
+ </div>
1232
+ </div>
1233
+
1234
+ <!-- MEMORY TAB PANEL -->
1235
+ <div class="tab-panel" id="memoryPanel">
1236
+ <div id="memoryEmptyState" class="empty-state">
1237
+ <p style="margin-bottom: 24px; font-size: 18px; font-weight: 600; color: var(--text-primary);">Select your project folder</p>
1238
+ <button id="openMemoryBtnLarge">Select Folder</button>
1239
+ </div>
1240
+ <div id="memoryMainContent" style="display: none; flex-direction: column; min-height: 0; flex: 1;">
1241
+ <div class="memory-tabs" id="memoryTabsContainer"></div>
1242
+ <div class="memory-content-area">
1243
+ <div id="memoryContentContainer"></div>
1244
+ </div>
1245
+ </div>
1246
+ </div>
1247
+
1248
+ <!-- MODAL (shared for memory) -->
1249
+ <div class="modal-overlay" id="modalOverlay">
1250
+ <div class="modal">
1251
+ <div class="modal-header">
1252
+ <h3 id="modalTitle">Edit</h3>
1253
+ <button class="modal-close" id="modalClose">&times;</button>
1254
+ </div>
1255
+ <div class="modal-body" id="modalBody"></div>
1256
+ <div class="modal-footer">
1257
+ <button id="modalCancel">Cancel</button>
1258
+ <button id="modalSave" class="primary">Save</button>
1259
+ </div>
1260
+ </div>
1261
+ </div>
1262
+
1263
+ <div class="status-bar" id="status"></div>
1264
+
1265
+ <script>
1266
+ // ===== SHARED STATE =====
1267
+ let activeMainTab = 'tasks'; // 'tasks' or 'memory'
1268
+
1269
+ const statusEl = document.getElementById('status');
1270
+ const filePathEl = document.getElementById('filePath');
1271
+
1272
+ function showStatus(msg) {
1273
+ statusEl.textContent = msg;
1274
+ statusEl.classList.add('visible');
1275
+ setTimeout(() => statusEl.classList.remove('visible'), 2000);
1276
+ }
1277
+
1278
+ // ===== MAIN TAB SWITCHING =====
1279
+ const tasksTabBtn = document.getElementById('tasksTabBtn');
1280
+ const memoryTabBtn = document.getElementById('memoryTabBtn');
1281
+ const tasksPanel = document.getElementById('tasksPanel');
1282
+ const memoryPanel = document.getElementById('memoryPanel');
1283
+ const taskViewToggle = document.getElementById('taskViewToggle');
1284
+ const openTaskBtn = document.getElementById('openTaskBtn');
1285
+ const openMemoryBtn = document.getElementById('openMemoryBtn');
1286
+ const saveBtn = document.getElementById('saveBtn');
1287
+
1288
+ function switchMainTab(tab) {
1289
+ activeMainTab = tab;
1290
+
1291
+ tasksTabBtn.classList.toggle('active', tab === 'tasks');
1292
+ memoryTabBtn.classList.toggle('active', tab === 'memory');
1293
+
1294
+ tasksPanel.classList.toggle('active', tab === 'tasks');
1295
+ memoryPanel.classList.toggle('active', tab === 'memory');
1296
+
1297
+ // Show/hide view toggle for tasks
1298
+ taskViewToggle.style.display = tab === 'tasks' ? 'flex' : 'none';
1299
+
1300
+ // Show/hide appropriate buttons
1301
+ openTaskBtn.style.display = tab === 'tasks' ? 'inline-flex' : 'none';
1302
+ openMemoryBtn.style.display = tab === 'memory' ? 'inline-flex' : 'none';
1303
+ saveBtn.style.display = tab === 'tasks' ? 'inline-flex' : 'none';
1304
+
1305
+ // Update file path display
1306
+ if (tab === 'tasks') {
1307
+ filePathEl.textContent = taskFileHandle ? taskFileName : '';
1308
+ } else {
1309
+ filePathEl.textContent = memoryDirHandle ? memoryDirHandle.name : '';
1310
+ }
1311
+ }
1312
+
1313
+ tasksTabBtn.addEventListener('click', () => switchMainTab('tasks'));
1314
+ memoryTabBtn.addEventListener('click', () => switchMainTab('memory'));
1315
+
1316
+ // ============================================================
1317
+ // ===== TASKS FUNCTIONALITY =====
1318
+ // ============================================================
1319
+
1320
+ let taskFileHandle = null;
1321
+ let taskFileName = '';
1322
+ let sections = [];
1323
+ let tasks = {};
1324
+ let hasChanges = false;
1325
+ let currentView = 'board';
1326
+ let quickAddSection = null;
1327
+
1328
+ const board = document.getElementById('board');
1329
+ const listView = document.getElementById('listView');
1330
+ const listViewBtn = document.getElementById('listViewBtn');
1331
+ const boardViewBtn = document.getElementById('boardViewBtn');
1332
+
1333
+ function taskSectionId(name) {
1334
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
1335
+ }
1336
+
1337
+ function parseTaskMarkdown(content) {
1338
+ const resultSections = [];
1339
+ const resultTasks = {};
1340
+ let currentSection = null;
1341
+ let currentSectionId = null;
1342
+
1343
+ const lines = content.split('\n');
1344
+ let currentTask = null;
1345
+
1346
+ for (const line of lines) {
1347
+ const headerMatch = line.match(/^## \*{0,2}(.+?)\*{0,2}$/);
1348
+ if (headerMatch) {
1349
+ if (currentTask && currentSectionId) {
1350
+ resultTasks[currentSectionId].push(currentTask);
1351
+ currentTask = null;
1352
+ }
1353
+
1354
+ const sectionName = headerMatch[1].trim();
1355
+ currentSectionId = taskSectionId(sectionName);
1356
+ currentSection = sectionName;
1357
+
1358
+ if (!resultTasks[currentSectionId]) {
1359
+ resultSections.push({ id: currentSectionId, name: sectionName });
1360
+ resultTasks[currentSectionId] = [];
1361
+ }
1362
+ } else if (currentSectionId && line.match(/^- \[[ xX]\]/)) {
1363
+ if (currentTask) {
1364
+ resultTasks[currentSectionId].push(currentTask);
1365
+ }
1366
+ const checked = line.match(/\[[xX]\]/) !== null;
1367
+ let text = line.replace(/^- \[[ xX]\]\s*/, '');
1368
+ let title = text;
1369
+ let note = '';
1370
+
1371
+ const boldMatch = text.match(/^\*\*(.+?)\*\*(.*)$/);
1372
+ if (boldMatch) {
1373
+ title = boldMatch[1];
1374
+ note = boldMatch[2].replace(/^\s*-\s*/, '').trim();
1375
+ }
1376
+
1377
+ currentTask = {
1378
+ id: Date.now() + Math.random(),
1379
+ title,
1380
+ note,
1381
+ checked,
1382
+ subtasks: [],
1383
+ section: currentSectionId
1384
+ };
1385
+ } else if (currentTask && line.match(/^\s+- \[[ xX]\]/)) {
1386
+ const checked = line.match(/\[[xX]\]/) !== null;
1387
+ const text = line.replace(/^\s+- \[[ xX]\]\s*/, '');
1388
+ currentTask.subtasks.push({ text, checked });
1389
+ }
1390
+ }
1391
+
1392
+ if (currentTask && currentSectionId) {
1393
+ resultTasks[currentSectionId].push(currentTask);
1394
+ }
1395
+
1396
+ return { sections: resultSections, tasks: resultTasks };
1397
+ }
1398
+
1399
+ function toMarkdown() {
1400
+ let md = '# Tasks\n';
1401
+
1402
+ sections.forEach((section, idx) => {
1403
+ md += `\n## ${section.name}\n`;
1404
+ const sectionTasks = tasks[section.id] || [];
1405
+ sectionTasks.forEach(t => {
1406
+ const checkbox = t.checked ? '[x]' : '[ ]';
1407
+ const note = t.note ? ` - ${t.note}` : '';
1408
+ md += `- ${checkbox} **${t.title}**${note}\n`;
1409
+ t.subtasks.forEach(st => {
1410
+ const stCheckbox = st.checked ? '[x]' : '[ ]';
1411
+ md += ` - ${stCheckbox} ${st.text}\n`;
1412
+ });
1413
+ });
1414
+ });
1415
+
1416
+ return md.trimEnd() + '\n';
1417
+ }
1418
+
1419
+ function createCard(task) {
1420
+ const card = document.createElement('div');
1421
+ card.className = 'task-card';
1422
+ card.draggable = true;
1423
+ card.dataset.id = task.id;
1424
+
1425
+ let html = `
1426
+ <div style="display: flex; align-items: flex-start; gap: 12px;">
1427
+ <button class="delete-btn" data-action="delete" title="Delete task">&times;</button>
1428
+ <span class="checkbox ${task.checked ? 'checked' : ''}" data-action="toggle"></span>
1429
+ <div class="card-title" data-action="edit-title">${task.title}</div>
1430
+ </div>
1431
+ `;
1432
+
1433
+ if (task.note) {
1434
+ html += `<div class="card-note" data-action="edit-note" style="cursor: pointer; margin-left: 30px;">${task.note}</div>`;
1435
+ } else {
1436
+ html += `<div class="card-note add-on-hover" data-action="edit-note" style="cursor: pointer; margin-left: 30px; font-style: italic;">+ Add note</div>`;
1437
+ }
1438
+
1439
+ if (task.subtasks.length > 0) {
1440
+ html += '<div class="card-subtasks" style="margin-left: 30px;">';
1441
+ task.subtasks.forEach((st, idx) => {
1442
+ html += `<div class="subtask">
1443
+ <span class="checkbox ${st.checked ? 'checked' : ''}" data-action="toggle-sub" data-idx="${idx}" style="width: 16px; height: 16px; min-width: 16px; min-height: 16px;"></span>
1444
+ <span data-action="edit-subtask" data-idx="${idx}" style="cursor: pointer;">${st.text}</span>
1445
+ </div>`;
1446
+ });
1447
+ html += `<div class="subtask add-on-hover" data-action="add-subtask" style="color: var(--text-muted); cursor: pointer; font-style: italic; padding-left: 24px;">+ Add subtask</div>`;
1448
+ html += '</div>';
1449
+ } else {
1450
+ html += `<div class="card-subtasks add-on-hover" style="margin-left: 30px;">
1451
+ <div class="subtask" data-action="add-subtask" style="color: var(--text-muted); cursor: pointer; font-style: italic;">+ Add subtask</div>
1452
+ </div>`;
1453
+ }
1454
+
1455
+ card.innerHTML = html;
1456
+
1457
+ card.addEventListener('dragstart', (e) => {
1458
+ card.classList.add('dragging');
1459
+ e.dataTransfer.setData('text/plain', task.id);
1460
+ });
1461
+
1462
+ card.addEventListener('dragend', () => {
1463
+ card.classList.remove('dragging');
1464
+ });
1465
+
1466
+ card.addEventListener('click', (e) => {
1467
+ const action = e.target.dataset.action;
1468
+ if (action === 'toggle') {
1469
+ task.checked = !task.checked;
1470
+ markChanged();
1471
+ renderTasks();
1472
+ } else if (action === 'toggle-sub') {
1473
+ const idx = parseInt(e.target.dataset.idx);
1474
+ task.subtasks[idx].checked = !task.subtasks[idx].checked;
1475
+ markChanged();
1476
+ renderTasks();
1477
+ } else if (action === 'edit-title') {
1478
+ startEditingTitle(e.target, task);
1479
+ } else if (action === 'edit-note') {
1480
+ startEditingNote(e.target, task);
1481
+ } else if (action === 'edit-subtask') {
1482
+ const idx = parseInt(e.target.dataset.idx);
1483
+ startEditingSubtask(e.target, task, idx);
1484
+ } else if (action === 'add-subtask') {
1485
+ startAddingSubtask(e.target, task);
1486
+ } else if (action === 'delete') {
1487
+ deleteTask(task);
1488
+ }
1489
+ });
1490
+
1491
+ return card;
1492
+ }
1493
+
1494
+ function startEditingTitle(titleEl, task) {
1495
+ const input = document.createElement('input');
1496
+ input.type = 'text';
1497
+ input.value = task.title;
1498
+ input.style.cssText = 'width: 100%; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 6px; padding: 6px 10px; color: var(--text-primary); font-size: 14px; font-family: inherit; outline: none;';
1499
+
1500
+ titleEl.replaceWith(input);
1501
+ input.focus();
1502
+ input.select();
1503
+
1504
+ let saved = false;
1505
+ const saveEdit = () => {
1506
+ if (saved) return;
1507
+ saved = true;
1508
+ const newTitle = input.value.trim();
1509
+ if (newTitle && newTitle !== task.title) {
1510
+ task.title = newTitle;
1511
+ markChanged();
1512
+ }
1513
+ renderTasks();
1514
+ };
1515
+
1516
+ input.addEventListener('keydown', (e) => {
1517
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
1518
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
1519
+ });
1520
+ input.addEventListener('blur', saveEdit);
1521
+ }
1522
+
1523
+ function startEditingNote(noteEl, task) {
1524
+ const input = document.createElement('input');
1525
+ input.type = 'text';
1526
+ input.value = task.note || '';
1527
+ input.placeholder = 'Add a note...';
1528
+ input.style.cssText = 'width: 100%; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 6px; padding: 4px 8px; color: var(--text-primary); font-size: 13px; font-family: inherit; outline: none;';
1529
+
1530
+ noteEl.replaceWith(input);
1531
+ input.focus();
1532
+
1533
+ let saved = false;
1534
+ const saveEdit = () => {
1535
+ if (saved) return;
1536
+ saved = true;
1537
+ task.note = input.value.trim();
1538
+ markChanged();
1539
+ renderTasks();
1540
+ };
1541
+
1542
+ input.addEventListener('keydown', (e) => {
1543
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
1544
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
1545
+ });
1546
+ input.addEventListener('blur', saveEdit);
1547
+ }
1548
+
1549
+ function startEditingSubtask(subtaskEl, task, idx) {
1550
+ const input = document.createElement('input');
1551
+ input.type = 'text';
1552
+ input.value = task.subtasks[idx].text;
1553
+ input.style.cssText = 'width: calc(100% - 30px); background: var(--bg-card); border: 2px solid var(--accent); border-radius: 4px; padding: 2px 6px; color: var(--text-primary); font-size: 13px; font-family: inherit; outline: none;';
1554
+
1555
+ subtaskEl.replaceWith(input);
1556
+ input.focus();
1557
+ input.select();
1558
+
1559
+ let saved = false;
1560
+ const saveEdit = () => {
1561
+ if (saved) return;
1562
+ saved = true;
1563
+ const newText = input.value.trim();
1564
+ if (newText) { task.subtasks[idx].text = newText; }
1565
+ else { task.subtasks.splice(idx, 1); }
1566
+ markChanged();
1567
+ renderTasks();
1568
+ };
1569
+
1570
+ input.addEventListener('keydown', (e) => {
1571
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
1572
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
1573
+ });
1574
+ input.addEventListener('blur', saveEdit);
1575
+ }
1576
+
1577
+ function startAddingSubtask(el, task) {
1578
+ const input = document.createElement('input');
1579
+ input.type = 'text';
1580
+ input.placeholder = 'New subtask...';
1581
+ input.style.cssText = 'width: calc(100% - 10px); background: var(--bg-card); border: 2px solid var(--accent); border-radius: 4px; padding: 2px 6px; color: var(--text-primary); font-size: 13px; font-family: inherit; outline: none;';
1582
+
1583
+ el.replaceWith(input);
1584
+ input.focus();
1585
+
1586
+ let saved = false;
1587
+ const saveEdit = () => {
1588
+ if (saved) return;
1589
+ saved = true;
1590
+ const text = input.value.trim();
1591
+ if (text) { task.subtasks.push({ text, checked: false }); markChanged(); }
1592
+ renderTasks();
1593
+ };
1594
+
1595
+ input.addEventListener('keydown', (e) => {
1596
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
1597
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
1598
+ });
1599
+ input.addEventListener('blur', saveEdit);
1600
+ }
1601
+
1602
+ function startEditingColumnTitle(titleEl, colId) {
1603
+ const section = sections.find(s => s.id === colId);
1604
+ if (!section) return;
1605
+
1606
+ const input = document.createElement('input');
1607
+ input.type = 'text';
1608
+ input.value = section.name;
1609
+ input.style.cssText = 'width: 180px; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 6px; padding: 4px 10px; color: var(--text-primary); font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; font-family: inherit; outline: none;';
1610
+
1611
+ titleEl.replaceWith(input);
1612
+ input.focus();
1613
+ input.select();
1614
+
1615
+ let saved = false;
1616
+ const saveEdit = () => {
1617
+ if (saved) return;
1618
+ saved = true;
1619
+ const newName = input.value.trim();
1620
+ if (newName && newName !== section.name) {
1621
+ const oldId = section.id;
1622
+ section.name = newName;
1623
+ const newId = taskSectionId(newName);
1624
+ if (newId !== oldId) {
1625
+ tasks[newId] = tasks[oldId] || [];
1626
+ delete tasks[oldId];
1627
+ tasks[newId].forEach(t => t.section = newId);
1628
+ section.id = newId;
1629
+ }
1630
+ markChanged();
1631
+ }
1632
+ renderTasks();
1633
+ };
1634
+
1635
+ input.addEventListener('keydown', (e) => {
1636
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
1637
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
1638
+ });
1639
+ input.addEventListener('blur', saveEdit);
1640
+ }
1641
+
1642
+ function createColumn(id, title, items) {
1643
+ const col = document.createElement('div');
1644
+ col.className = 'column';
1645
+ col.innerHTML = `
1646
+ <div class="column-header">
1647
+ <span class="column-title" data-section-id="${id}" style="cursor: pointer;">${title}</span>
1648
+ <span class="count">${items.length}</span>
1649
+ </div>
1650
+ <div class="cards" data-column="${id}"></div>
1651
+ <div class="add-card">
1652
+ <button data-add="${id}">+ Add task</button>
1653
+ </div>
1654
+ `;
1655
+
1656
+ col.querySelector('.column-title').addEventListener('click', (e) => {
1657
+ if (!col.dragging) { startEditingColumnTitle(e.target, id); }
1658
+ });
1659
+
1660
+ const header = col.querySelector('.column-header');
1661
+ header.draggable = true;
1662
+
1663
+ header.addEventListener('dragstart', (e) => {
1664
+ e.stopPropagation();
1665
+ col.classList.add('dragging-column');
1666
+ e.dataTransfer.setData('text/column', id);
1667
+ e.dataTransfer.effectAllowed = 'move';
1668
+ });
1669
+
1670
+ header.addEventListener('dragend', () => {
1671
+ col.classList.remove('dragging-column');
1672
+ board.querySelectorAll('.column-drop-indicator').forEach(el => el.remove());
1673
+ });
1674
+
1675
+ col.addEventListener('dragover', (e) => {
1676
+ if (e.dataTransfer.types.includes('text/column')) {
1677
+ e.preventDefault();
1678
+ e.stopPropagation();
1679
+ board.querySelectorAll('.column-drop-indicator').forEach(el => el.remove());
1680
+ const indicator = document.createElement('div');
1681
+ indicator.className = 'column-drop-indicator';
1682
+ const rect = col.getBoundingClientRect();
1683
+ if (e.clientX < rect.left + rect.width / 2) { col.before(indicator); }
1684
+ else { col.after(indicator); }
1685
+ }
1686
+ });
1687
+
1688
+ col.addEventListener('drop', (e) => {
1689
+ if (e.dataTransfer.types.includes('text/column')) {
1690
+ e.preventDefault();
1691
+ e.stopPropagation();
1692
+ const fromId = e.dataTransfer.getData('text/column');
1693
+ const toId = id;
1694
+ if (fromId !== toId) {
1695
+ const rect = col.getBoundingClientRect();
1696
+ const insertBefore = e.clientX < rect.left + rect.width / 2;
1697
+ moveSection(fromId, toId, insertBefore);
1698
+ }
1699
+ board.querySelectorAll('.column-drop-indicator').forEach(el => el.remove());
1700
+ }
1701
+ });
1702
+
1703
+ const cardsContainer = col.querySelector('.cards');
1704
+ items.forEach(task => { cardsContainer.appendChild(createCard(task)); });
1705
+
1706
+ const getDropPosition = (e) => {
1707
+ const allCards = [...cardsContainer.querySelectorAll('.task-card')];
1708
+ const visibleCards = allCards.filter(c => !c.classList.contains('dragging'));
1709
+ let insertBeforeCard = null;
1710
+ let dropIndex = visibleCards.length;
1711
+ for (let i = 0; i < visibleCards.length; i++) {
1712
+ const rect = visibleCards[i].getBoundingClientRect();
1713
+ if (e.clientY < rect.top + rect.height / 2) {
1714
+ insertBeforeCard = visibleCards[i];
1715
+ dropIndex = i;
1716
+ break;
1717
+ }
1718
+ }
1719
+ return { insertBeforeCard, dropIndex };
1720
+ };
1721
+
1722
+ const showDropIndicator = (e) => {
1723
+ col.querySelectorAll('.drop-indicator').forEach(el => el.remove());
1724
+ const { insertBeforeCard } = getDropPosition(e);
1725
+ const indicator = document.createElement('div');
1726
+ indicator.className = 'drop-indicator';
1727
+ indicator.style.cssText = 'height: 3px; background: var(--accent); border-radius: 2px; margin: 5px 0;';
1728
+ if (insertBeforeCard) { cardsContainer.insertBefore(indicator, insertBeforeCard); }
1729
+ else { cardsContainer.appendChild(indicator); }
1730
+ };
1731
+
1732
+ col.addEventListener('dragover', (e) => {
1733
+ e.preventDefault();
1734
+ cardsContainer.classList.add('drag-over');
1735
+ showDropIndicator(e);
1736
+ });
1737
+
1738
+ col.addEventListener('dragleave', (e) => {
1739
+ if (!col.contains(e.relatedTarget)) {
1740
+ cardsContainer.classList.remove('drag-over');
1741
+ col.querySelectorAll('.drop-indicator').forEach(el => el.remove());
1742
+ }
1743
+ });
1744
+
1745
+ col.addEventListener('drop', (e) => {
1746
+ e.preventDefault();
1747
+ cardsContainer.classList.remove('drag-over');
1748
+ col.querySelectorAll('.drop-indicator').forEach(el => el.remove());
1749
+ const taskId = parseFloat(e.dataTransfer.getData('text/plain'));
1750
+ const { dropIndex } = getDropPosition(e);
1751
+ moveTask(taskId, id, dropIndex);
1752
+ });
1753
+
1754
+ col.querySelector(`[data-add="${id}"]`).addEventListener('click', () => {
1755
+ addNewTask(id, col.querySelector('.cards'));
1756
+ });
1757
+
1758
+ return col;
1759
+ }
1760
+
1761
+ function addNewTask(sectionId, container) {
1762
+ const existing = container.querySelector('.new-task-input');
1763
+ if (existing) return;
1764
+
1765
+ const input = document.createElement('textarea');
1766
+ input.className = 'new-task-input';
1767
+ input.placeholder = 'What needs to be done?';
1768
+ input.rows = 2;
1769
+ container.appendChild(input);
1770
+ input.focus();
1771
+
1772
+ input.addEventListener('keydown', (e) => {
1773
+ if (e.key === 'Enter' && !e.shiftKey) {
1774
+ e.preventDefault();
1775
+ const title = input.value.trim();
1776
+ if (title) {
1777
+ if (!tasks[sectionId]) tasks[sectionId] = [];
1778
+ tasks[sectionId].push({
1779
+ id: Date.now() + Math.random(),
1780
+ title,
1781
+ note: '',
1782
+ checked: false,
1783
+ subtasks: [],
1784
+ section: sectionId
1785
+ });
1786
+ markChanged();
1787
+ renderTasks();
1788
+ } else { input.remove(); }
1789
+ } else if (e.key === 'Escape') { input.remove(); }
1790
+ });
1791
+
1792
+ input.addEventListener('blur', () => { setTimeout(() => input.remove(), 100); });
1793
+ }
1794
+
1795
+ function moveSection(fromId, toId, insertBefore) {
1796
+ const fromIdx = sections.findIndex(s => s.id === fromId);
1797
+ const toIdx = sections.findIndex(s => s.id === toId);
1798
+ if (fromIdx === -1 || toIdx === -1) return;
1799
+ const [section] = sections.splice(fromIdx, 1);
1800
+ let newIdx = sections.findIndex(s => s.id === toId);
1801
+ if (!insertBefore) newIdx++;
1802
+ sections.splice(newIdx, 0, section);
1803
+ markChanged();
1804
+ renderTasks();
1805
+ }
1806
+
1807
+ function moveTask(taskId, toSectionId, dropIndex = -1) {
1808
+ let task = null;
1809
+ for (const section of sections) {
1810
+ const sectionTasks = tasks[section.id] || [];
1811
+ const idx = sectionTasks.findIndex(t => t.id === taskId);
1812
+ if (idx !== -1) {
1813
+ task = sectionTasks.splice(idx, 1)[0];
1814
+ break;
1815
+ }
1816
+ }
1817
+ if (!task) return;
1818
+ task.section = toSectionId;
1819
+ if (!tasks[toSectionId]) tasks[toSectionId] = [];
1820
+ if (dropIndex >= 0 && dropIndex <= tasks[toSectionId].length) {
1821
+ tasks[toSectionId].splice(dropIndex, 0, task);
1822
+ } else {
1823
+ tasks[toSectionId].push(task);
1824
+ }
1825
+ markChanged();
1826
+ renderTasks();
1827
+ }
1828
+
1829
+ function deleteTask(task) {
1830
+ if (!confirm(`Delete "${task.title}"?`)) return;
1831
+ for (const section of sections) {
1832
+ const sectionTasks = tasks[section.id] || [];
1833
+ const idx = sectionTasks.findIndex(t => t.id === task.id);
1834
+ if (idx !== -1) { sectionTasks.splice(idx, 1); break; }
1835
+ }
1836
+ markChanged();
1837
+ renderTasks();
1838
+ }
1839
+
1840
+ let saveTimeout = null;
1841
+ let lastModified = 0;
1842
+ let watchInterval = null;
1843
+ let isSaving = false;
1844
+
1845
+ function markChanged() {
1846
+ hasChanges = true;
1847
+ saveBtn.disabled = false;
1848
+ if (saveTimeout) clearTimeout(saveTimeout);
1849
+ saveTimeout = setTimeout(autoSave, 500);
1850
+ }
1851
+
1852
+ async function autoSave() {
1853
+ if (!taskFileHandle || !hasChanges || isSaving) return;
1854
+ isSaving = true;
1855
+ try {
1856
+ const writable = await taskFileHandle.createWritable();
1857
+ const content = toMarkdown();
1858
+ await writable.write(content);
1859
+ await writable.close();
1860
+ const file = await taskFileHandle.getFile();
1861
+ lastModified = file.lastModified;
1862
+ hasChanges = false;
1863
+ saveBtn.disabled = true;
1864
+ showStatus('Saved');
1865
+ } catch (e) {
1866
+ showStatus('Save failed: ' + e.message);
1867
+ }
1868
+ isSaving = false;
1869
+ }
1870
+
1871
+ async function checkForExternalChanges() {
1872
+ if (!taskFileHandle || hasChanges || isSaving) return;
1873
+ try {
1874
+ const file = await taskFileHandle.getFile();
1875
+ if (file.lastModified > lastModified) {
1876
+ lastModified = file.lastModified;
1877
+ const content = await file.text();
1878
+ const result = parseTaskMarkdown(content);
1879
+ sections = result.sections;
1880
+ tasks = result.tasks;
1881
+ renderTasks();
1882
+ showStatus('Reloaded');
1883
+ }
1884
+ } catch (e) { console.log('Watch error:', e); }
1885
+ }
1886
+
1887
+ function startWatching() {
1888
+ if (watchInterval) clearInterval(watchInterval);
1889
+ watchInterval = setInterval(checkForExternalChanges, 1000);
1890
+ }
1891
+
1892
+ function stopWatching() {
1893
+ if (watchInterval) { clearInterval(watchInterval); watchInterval = null; }
1894
+ }
1895
+
1896
+ function renderTasks() {
1897
+ if (currentView === 'board') { renderBoard(); }
1898
+ else { renderList(); }
1899
+ }
1900
+
1901
+ function renderBoard() {
1902
+ board.innerHTML = '';
1903
+ sections.forEach(section => {
1904
+ const sectionTasks = tasks[section.id] || [];
1905
+ board.appendChild(createColumn(section.id, section.name, sectionTasks));
1906
+ });
1907
+
1908
+ const addSectionBtn = document.createElement('div');
1909
+ addSectionBtn.className = 'column';
1910
+ addSectionBtn.style.cssText = 'background: transparent; border: 2px dashed var(--border); display: flex; align-items: center; justify-content: center; cursor: pointer; min-height: 120px;';
1911
+ addSectionBtn.innerHTML = '<span style="color: var(--text-muted); font-size: 14px; font-weight: 500;">+ Add Section</span>';
1912
+ addSectionBtn.addEventListener('click', () => startAddingSection(addSectionBtn));
1913
+ board.appendChild(addSectionBtn);
1914
+ }
1915
+
1916
+ function renderList() {
1917
+ listView.innerHTML = '';
1918
+
1919
+ if (!quickAddSection && sections.length > 0) {
1920
+ quickAddSection = sections[0].id;
1921
+ }
1922
+
1923
+ // Quick add at top
1924
+ const quickAdd = document.createElement('div');
1925
+ quickAdd.className = 'quick-add';
1926
+ quickAdd.style.cssText = 'border-bottom: 2px solid var(--border); margin-bottom: 24px; padding-bottom: 16px;';
1927
+
1928
+ const sectionName = sections.find(s => s.id === quickAddSection)?.name || 'Select section';
1929
+ quickAdd.innerHTML = `
1930
+ <span class="checkbox" style="opacity: 0.3;"></span>
1931
+ <input type="text" class="quick-add-input" placeholder="Add a task..." id="quickAddInput">
1932
+ <span class="quick-add-section" id="quickAddSectionBtn">${sectionName}</span>
1933
+ `;
1934
+ listView.appendChild(quickAdd);
1935
+
1936
+ const quickInput = document.getElementById('quickAddInput');
1937
+ const sectionBtn = document.getElementById('quickAddSectionBtn');
1938
+
1939
+ quickInput.addEventListener('keydown', (e) => {
1940
+ if (e.key === 'Enter' && quickInput.value.trim()) {
1941
+ const title = quickInput.value.trim();
1942
+ if (!tasks[quickAddSection]) tasks[quickAddSection] = [];
1943
+ tasks[quickAddSection].unshift({
1944
+ id: Date.now() + Math.random(),
1945
+ title,
1946
+ note: '',
1947
+ checked: false,
1948
+ subtasks: [],
1949
+ section: quickAddSection
1950
+ });
1951
+ quickInput.value = '';
1952
+ markChanged();
1953
+ renderTasks();
1954
+ setTimeout(() => document.getElementById('quickAddInput')?.focus(), 10);
1955
+ }
1956
+ });
1957
+
1958
+ sectionBtn.addEventListener('click', (e) => { showSectionPicker(e.target); });
1959
+
1960
+ // Render each section
1961
+ sections.forEach(section => {
1962
+ const sectionTasks = tasks[section.id] || [];
1963
+ const sectionEl = document.createElement('div');
1964
+ sectionEl.className = 'list-section';
1965
+ sectionEl.dataset.sectionId = section.id;
1966
+
1967
+ const header = document.createElement('div');
1968
+ header.className = 'list-section-header';
1969
+ header.innerHTML = `
1970
+ <span class="section-title" data-section-id="${section.id}">${section.name}</span>
1971
+ <span class="count">${sectionTasks.length}</span>
1972
+ `;
1973
+
1974
+ header.querySelector('.section-title').addEventListener('click', (e) => {
1975
+ startEditingListSectionTitle(e.target, section);
1976
+ });
1977
+
1978
+ sectionEl.appendChild(header);
1979
+
1980
+ const tasksContainer = document.createElement('div');
1981
+ tasksContainer.className = 'list-tasks-container';
1982
+ tasksContainer.dataset.sectionId = section.id;
1983
+
1984
+ sectionTasks.forEach(task => {
1985
+ tasksContainer.appendChild(createListItem(task, section));
1986
+ });
1987
+
1988
+ sectionEl.appendChild(tasksContainer);
1989
+
1990
+ // Drag-and-drop handlers for section
1991
+ const getDropPosition = (e, container) => {
1992
+ const items = [...container.querySelectorAll('.list-item:not(.dragging)')];
1993
+ let insertBeforeEl = null;
1994
+ let dropIndex = items.length;
1995
+ for (let i = 0; i < items.length; i++) {
1996
+ const rect = items[i].getBoundingClientRect();
1997
+ if (e.clientY < rect.top + rect.height / 2) {
1998
+ insertBeforeEl = items[i];
1999
+ dropIndex = i;
2000
+ break;
2001
+ }
2002
+ }
2003
+ return { insertBeforeEl, dropIndex };
2004
+ };
2005
+
2006
+ const showDropIndicator = (e) => {
2007
+ tasksContainer.querySelectorAll('.list-drop-indicator').forEach(el => el.remove());
2008
+ const { insertBeforeEl } = getDropPosition(e, tasksContainer);
2009
+ const indicator = document.createElement('div');
2010
+ indicator.className = 'list-drop-indicator';
2011
+ if (insertBeforeEl) { tasksContainer.insertBefore(indicator, insertBeforeEl); }
2012
+ else { tasksContainer.appendChild(indicator); }
2013
+ };
2014
+
2015
+ sectionEl.addEventListener('dragover', (e) => {
2016
+ e.preventDefault();
2017
+ sectionEl.classList.add('drag-over');
2018
+ showDropIndicator(e);
2019
+ });
2020
+
2021
+ sectionEl.addEventListener('dragleave', (e) => {
2022
+ if (!sectionEl.contains(e.relatedTarget)) {
2023
+ sectionEl.classList.remove('drag-over');
2024
+ tasksContainer.querySelectorAll('.list-drop-indicator').forEach(el => el.remove());
2025
+ }
2026
+ });
2027
+
2028
+ sectionEl.addEventListener('drop', (e) => {
2029
+ e.preventDefault();
2030
+ sectionEl.classList.remove('drag-over');
2031
+ tasksContainer.querySelectorAll('.list-drop-indicator').forEach(el => el.remove());
2032
+ const taskId = parseFloat(e.dataTransfer.getData('text/plain'));
2033
+ if (!taskId) return;
2034
+ const { dropIndex } = getDropPosition(e, tasksContainer);
2035
+ moveTask(taskId, section.id, dropIndex);
2036
+ });
2037
+
2038
+ listView.appendChild(sectionEl);
2039
+ });
2040
+
2041
+ // Add Section button
2042
+ const addSectionBtn = document.createElement('div');
2043
+ addSectionBtn.className = 'list-add-section';
2044
+ addSectionBtn.textContent = '+ Add Section';
2045
+ addSectionBtn.addEventListener('click', () => { startAddingListSection(addSectionBtn); });
2046
+ listView.appendChild(addSectionBtn);
2047
+ }
2048
+
2049
+ function startEditingListSectionTitle(titleEl, section) {
2050
+ const input = document.createElement('input');
2051
+ input.type = 'text';
2052
+ input.value = section.name;
2053
+ input.style.cssText = 'width: 200px; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 6px; padding: 4px 10px; color: var(--text-primary); font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; font-family: inherit; outline: none;';
2054
+
2055
+ titleEl.replaceWith(input);
2056
+ input.focus();
2057
+ input.select();
2058
+
2059
+ let saved = false;
2060
+ const saveEdit = () => {
2061
+ if (saved) return;
2062
+ saved = true;
2063
+ const newName = input.value.trim();
2064
+ if (newName && newName !== section.name) {
2065
+ const oldId = section.id;
2066
+ section.name = newName;
2067
+ const newId = taskSectionId(newName);
2068
+ if (newId !== oldId) {
2069
+ tasks[newId] = tasks[oldId] || [];
2070
+ delete tasks[oldId];
2071
+ tasks[newId].forEach(t => t.section = newId);
2072
+ section.id = newId;
2073
+ }
2074
+ markChanged();
2075
+ }
2076
+ renderTasks();
2077
+ };
2078
+
2079
+ input.addEventListener('keydown', (e) => {
2080
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
2081
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
2082
+ });
2083
+ input.addEventListener('blur', saveEdit);
2084
+ }
2085
+
2086
+ function startAddingListSection(btn) {
2087
+ const input = document.createElement('input');
2088
+ input.type = 'text';
2089
+ input.placeholder = 'Section name...';
2090
+ input.style.cssText = 'width: 100%; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 8px; padding: 12px 16px; color: var(--text-primary); font-size: 14px; font-family: inherit; outline: none; text-align: left;';
2091
+
2092
+ btn.innerHTML = '';
2093
+ btn.style.border = '2px solid var(--accent)';
2094
+ btn.style.cursor = 'default';
2095
+ btn.appendChild(input);
2096
+ input.focus();
2097
+
2098
+ let saved = false;
2099
+ const saveSection = () => {
2100
+ if (saved) return;
2101
+ saved = true;
2102
+ const name = input.value.trim();
2103
+ if (name) {
2104
+ const id = taskSectionId(name);
2105
+ if (!tasks[id]) {
2106
+ sections.push({ id, name });
2107
+ tasks[id] = [];
2108
+ markChanged();
2109
+ }
2110
+ }
2111
+ renderTasks();
2112
+ };
2113
+
2114
+ input.addEventListener('keydown', (e) => {
2115
+ if (e.key === 'Enter') { e.preventDefault(); saveSection(); }
2116
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
2117
+ });
2118
+ input.addEventListener('blur', saveSection);
2119
+ }
2120
+
2121
+ function createListItem(task, section) {
2122
+ const item = document.createElement('div');
2123
+ item.className = 'list-item';
2124
+ item.draggable = true;
2125
+ item.dataset.taskId = task.id;
2126
+
2127
+ item.addEventListener('dragstart', (e) => {
2128
+ item.classList.add('dragging');
2129
+ e.dataTransfer.setData('text/plain', task.id);
2130
+ e.dataTransfer.effectAllowed = 'move';
2131
+ });
2132
+
2133
+ item.addEventListener('dragend', () => {
2134
+ item.classList.remove('dragging');
2135
+ document.querySelectorAll('.list-drop-indicator').forEach(el => el.remove());
2136
+ document.querySelectorAll('.list-section.drag-over').forEach(el => el.classList.remove('drag-over'));
2137
+ });
2138
+
2139
+ const checkbox = document.createElement('span');
2140
+ checkbox.className = `checkbox ${task.checked ? 'checked' : ''}`;
2141
+ checkbox.addEventListener('click', (e) => {
2142
+ e.stopPropagation();
2143
+ task.checked = !task.checked;
2144
+ markChanged();
2145
+ renderTasks();
2146
+ });
2147
+
2148
+ const content = document.createElement('div');
2149
+ content.className = 'list-item-content';
2150
+
2151
+ const title = document.createElement('div');
2152
+ title.className = `list-item-title ${task.checked ? 'checked' : ''}`;
2153
+ title.textContent = task.title;
2154
+ title.addEventListener('click', (e) => {
2155
+ e.stopPropagation();
2156
+ startEditingListItem(title, task);
2157
+ });
2158
+ content.appendChild(title);
2159
+
2160
+ if (task.note) {
2161
+ const note = document.createElement('div');
2162
+ note.className = 'list-item-note';
2163
+ note.textContent = task.note;
2164
+ note.addEventListener('click', (e) => {
2165
+ e.stopPropagation();
2166
+ startEditingListNote(note, task);
2167
+ });
2168
+ content.appendChild(note);
2169
+ } else {
2170
+ const addNote = document.createElement('div');
2171
+ addNote.className = 'list-item-note add-note';
2172
+ addNote.textContent = '+ Add note';
2173
+ addNote.addEventListener('click', (e) => {
2174
+ e.stopPropagation();
2175
+ startEditingListNote(addNote, task);
2176
+ });
2177
+ content.appendChild(addNote);
2178
+ }
2179
+
2180
+ if (task.subtasks && task.subtasks.length > 0) {
2181
+ const subtasksContainer = document.createElement('div');
2182
+ subtasksContainer.className = 'list-item-subtasks';
2183
+
2184
+ task.subtasks.forEach((st, idx) => {
2185
+ const subtaskEl = document.createElement('div');
2186
+ subtaskEl.className = 'list-item-subtask';
2187
+
2188
+ const stCheckbox = document.createElement('span');
2189
+ stCheckbox.className = `checkbox ${st.checked ? 'checked' : ''}`;
2190
+ stCheckbox.addEventListener('click', (e) => {
2191
+ e.stopPropagation();
2192
+ st.checked = !st.checked;
2193
+ markChanged();
2194
+ renderTasks();
2195
+ });
2196
+
2197
+ const stText = document.createElement('span');
2198
+ stText.textContent = st.text;
2199
+ if (st.checked) {
2200
+ stText.style.textDecoration = 'line-through';
2201
+ stText.style.color = 'var(--text-muted)';
2202
+ }
2203
+ stText.addEventListener('click', (e) => {
2204
+ e.stopPropagation();
2205
+ startEditingListSubtask(stText, task, idx);
2206
+ });
2207
+
2208
+ subtaskEl.appendChild(stCheckbox);
2209
+ subtaskEl.appendChild(stText);
2210
+ subtasksContainer.appendChild(subtaskEl);
2211
+ });
2212
+
2213
+ content.appendChild(subtasksContainer);
2214
+ }
2215
+
2216
+ const addSubtask = document.createElement('div');
2217
+ addSubtask.className = 'list-item-add-subtask';
2218
+ addSubtask.textContent = '+ Add subtask';
2219
+ addSubtask.addEventListener('click', (e) => {
2220
+ e.stopPropagation();
2221
+ startAddingListSubtask(addSubtask, task);
2222
+ });
2223
+ content.appendChild(addSubtask);
2224
+
2225
+ const actions = document.createElement('div');
2226
+ actions.className = 'list-item-actions';
2227
+ actions.innerHTML = '<button title="Delete task">&times;</button>';
2228
+ actions.querySelector('button').addEventListener('click', (e) => {
2229
+ e.stopPropagation();
2230
+ deleteTask(task);
2231
+ });
2232
+
2233
+ item.appendChild(checkbox);
2234
+ item.appendChild(content);
2235
+ item.appendChild(actions);
2236
+
2237
+ return item;
2238
+ }
2239
+
2240
+ function startEditingListNote(noteEl, task) {
2241
+ const input = document.createElement('input');
2242
+ input.type = 'text';
2243
+ input.value = task.note || '';
2244
+ input.placeholder = 'Add a note...';
2245
+ input.style.cssText = 'width: 100%; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 6px; padding: 4px 8px; color: var(--text-primary); font-size: 13px; font-family: inherit; outline: none;';
2246
+
2247
+ noteEl.replaceWith(input);
2248
+ input.focus();
2249
+
2250
+ let saved = false;
2251
+ const saveEdit = () => {
2252
+ if (saved) return;
2253
+ saved = true;
2254
+ task.note = input.value.trim();
2255
+ markChanged();
2256
+ renderTasks();
2257
+ };
2258
+
2259
+ input.addEventListener('keydown', (e) => {
2260
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
2261
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
2262
+ });
2263
+ input.addEventListener('blur', saveEdit);
2264
+ }
2265
+
2266
+ function startEditingListSubtask(subtaskEl, task, idx) {
2267
+ const input = document.createElement('input');
2268
+ input.type = 'text';
2269
+ input.value = task.subtasks[idx].text;
2270
+ input.style.cssText = 'width: calc(100% - 30px); background: var(--bg-card); border: 2px solid var(--accent); border-radius: 4px; padding: 2px 6px; color: var(--text-primary); font-size: 13px; font-family: inherit; outline: none;';
2271
+
2272
+ subtaskEl.replaceWith(input);
2273
+ input.focus();
2274
+ input.select();
2275
+
2276
+ let saved = false;
2277
+ const saveEdit = () => {
2278
+ if (saved) return;
2279
+ saved = true;
2280
+ const newText = input.value.trim();
2281
+ if (newText) { task.subtasks[idx].text = newText; }
2282
+ else { task.subtasks.splice(idx, 1); }
2283
+ markChanged();
2284
+ renderTasks();
2285
+ };
2286
+
2287
+ input.addEventListener('keydown', (e) => {
2288
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
2289
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
2290
+ });
2291
+ input.addEventListener('blur', saveEdit);
2292
+ }
2293
+
2294
+ function startAddingListSubtask(el, task) {
2295
+ const input = document.createElement('input');
2296
+ input.type = 'text';
2297
+ input.placeholder = 'New subtask...';
2298
+ input.style.cssText = 'width: calc(100% - 10px); background: var(--bg-card); border: 2px solid var(--accent); border-radius: 4px; padding: 2px 6px; color: var(--text-primary); font-size: 13px; font-family: inherit; outline: none;';
2299
+
2300
+ el.replaceWith(input);
2301
+ input.focus();
2302
+
2303
+ let saved = false;
2304
+ const saveEdit = () => {
2305
+ if (saved) return;
2306
+ saved = true;
2307
+ const text = input.value.trim();
2308
+ if (text) {
2309
+ if (!task.subtasks) task.subtasks = [];
2310
+ task.subtasks.push({ text, checked: false });
2311
+ markChanged();
2312
+ }
2313
+ renderTasks();
2314
+ };
2315
+
2316
+ input.addEventListener('keydown', (e) => {
2317
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
2318
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
2319
+ });
2320
+ input.addEventListener('blur', saveEdit);
2321
+ }
2322
+
2323
+ function startEditingListItem(titleEl, task) {
2324
+ const input = document.createElement('input');
2325
+ input.type = 'text';
2326
+ input.value = task.title;
2327
+ input.style.cssText = 'width: 100%; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 6px; padding: 8px 12px; color: var(--text-primary); font-size: 15px; font-family: inherit; outline: none;';
2328
+
2329
+ titleEl.replaceWith(input);
2330
+ input.focus();
2331
+ input.select();
2332
+
2333
+ let saved = false;
2334
+ const saveEdit = () => {
2335
+ if (saved) return;
2336
+ saved = true;
2337
+ const newTitle = input.value.trim();
2338
+ if (newTitle && newTitle !== task.title) {
2339
+ task.title = newTitle;
2340
+ markChanged();
2341
+ }
2342
+ renderTasks();
2343
+ };
2344
+
2345
+ input.addEventListener('keydown', (e) => {
2346
+ if (e.key === 'Enter') { e.preventDefault(); saveEdit(); }
2347
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
2348
+ });
2349
+ input.addEventListener('blur', saveEdit);
2350
+ }
2351
+
2352
+ function showSectionPicker(anchorEl) {
2353
+ document.querySelectorAll('.section-picker').forEach(el => el.remove());
2354
+ const picker = document.createElement('div');
2355
+ picker.className = 'section-picker';
2356
+ const rect = anchorEl.getBoundingClientRect();
2357
+ picker.style.top = (rect.bottom + 4) + 'px';
2358
+ picker.style.right = (window.innerWidth - rect.right) + 'px';
2359
+
2360
+ sections.forEach(section => {
2361
+ const btn = document.createElement('button');
2362
+ btn.textContent = section.name;
2363
+ btn.addEventListener('click', () => {
2364
+ quickAddSection = section.id;
2365
+ picker.remove();
2366
+ renderTasks();
2367
+ setTimeout(() => document.getElementById('quickAddInput')?.focus(), 10);
2368
+ });
2369
+ picker.appendChild(btn);
2370
+ });
2371
+
2372
+ document.body.appendChild(picker);
2373
+ setTimeout(() => {
2374
+ document.addEventListener('click', function closeHandler(e) {
2375
+ if (!picker.contains(e.target)) {
2376
+ picker.remove();
2377
+ document.removeEventListener('click', closeHandler);
2378
+ }
2379
+ });
2380
+ }, 10);
2381
+ }
2382
+
2383
+ function switchTaskView(view) {
2384
+ currentView = view;
2385
+ if (view === 'list') {
2386
+ listView.style.display = 'block';
2387
+ board.style.display = 'none';
2388
+ listViewBtn.classList.add('active');
2389
+ boardViewBtn.classList.remove('active');
2390
+ } else {
2391
+ listView.style.display = 'none';
2392
+ board.style.display = 'flex';
2393
+ listViewBtn.classList.remove('active');
2394
+ boardViewBtn.classList.add('active');
2395
+ }
2396
+ renderTasks();
2397
+ }
2398
+
2399
+ listViewBtn.addEventListener('click', () => switchTaskView('list'));
2400
+ boardViewBtn.addEventListener('click', () => switchTaskView('board'));
2401
+
2402
+ function startAddingSection(btn) {
2403
+ const input = document.createElement('input');
2404
+ input.type = 'text';
2405
+ input.placeholder = 'Section name...';
2406
+ input.style.cssText = 'width: 220px; background: var(--bg-card); border: 2px solid var(--accent); border-radius: 8px; padding: 10px 14px; color: var(--text-primary); font-size: 14px; font-family: inherit; outline: none;';
2407
+
2408
+ btn.innerHTML = '';
2409
+ btn.style.cssText = 'background: var(--bg-secondary); border: 2px dashed var(--accent); display: flex; align-items: center; justify-content: center; cursor: default; min-height: 120px; min-width: 340px; border-radius: 12px;';
2410
+ btn.appendChild(input);
2411
+ input.focus();
2412
+
2413
+ let saved = false;
2414
+ const saveSection = () => {
2415
+ if (saved) return;
2416
+ saved = true;
2417
+ const name = input.value.trim();
2418
+ if (name) {
2419
+ const id = taskSectionId(name);
2420
+ if (!tasks[id]) {
2421
+ sections.push({ id, name });
2422
+ tasks[id] = [];
2423
+ markChanged();
2424
+ }
2425
+ }
2426
+ renderTasks();
2427
+ };
2428
+
2429
+ input.addEventListener('keydown', (e) => {
2430
+ if (e.key === 'Enter') { e.preventDefault(); saveSection(); }
2431
+ else if (e.key === 'Escape') { saved = true; renderTasks(); }
2432
+ });
2433
+ input.addEventListener('blur', saveSection);
2434
+ }
2435
+
2436
+ async function openTaskFile() {
2437
+ try {
2438
+ [taskFileHandle] = await window.showOpenFilePicker({
2439
+ types: [{ description: 'Markdown', accept: { 'text/markdown': ['.md'] } }]
2440
+ });
2441
+ const file = await taskFileHandle.getFile();
2442
+ const content = await file.text();
2443
+ lastModified = file.lastModified;
2444
+ const result = parseTaskMarkdown(content);
2445
+ sections = result.sections;
2446
+ tasks = result.tasks;
2447
+ switchTaskView('board');
2448
+ startWatching();
2449
+ taskFileName = file.name;
2450
+ filePathEl.textContent = file.name;
2451
+ showStatus('Loaded ' + file.name);
2452
+ } catch (e) {
2453
+ if (e.name !== 'AbortError') { showStatus('Error: ' + e.message); }
2454
+ }
2455
+ }
2456
+
2457
+ openTaskBtn.addEventListener('click', openTaskFile);
2458
+ document.getElementById('openBtnLarge')?.addEventListener('click', openTaskFile);
2459
+
2460
+ saveBtn.addEventListener('click', async () => {
2461
+ if (!taskFileHandle) return;
2462
+ try {
2463
+ const writable = await taskFileHandle.createWritable();
2464
+ await writable.write(toMarkdown());
2465
+ await writable.close();
2466
+ hasChanges = false;
2467
+ saveBtn.disabled = true;
2468
+ showStatus('Saved');
2469
+ } catch (e) { showStatus('Error: ' + e.message); }
2470
+ });
2471
+
2472
+ window.addEventListener('beforeunload', (e) => {
2473
+ if (hasChanges) { e.preventDefault(); e.returnValue = ''; }
2474
+ });
2475
+
2476
+ // ============================================================
2477
+ // ===== MEMORY FUNCTIONALITY =====
2478
+ // ============================================================
2479
+
2480
+ let memoryDirHandle = null;
2481
+ let memoryData = {
2482
+ claudeMd: null,
2483
+ memoryFiles: [],
2484
+ memoryDirs: {}
2485
+ };
2486
+
2487
+ const memoryEmptyState = document.getElementById('memoryEmptyState');
2488
+ const memoryMainContent = document.getElementById('memoryMainContent');
2489
+ const memoryTabsContainer = document.getElementById('memoryTabsContainer');
2490
+ const memoryContentContainer = document.getElementById('memoryContentContainer');
2491
+ const modalOverlay = document.getElementById('modalOverlay');
2492
+
2493
+ function escapeHtml(text) {
2494
+ const div = document.createElement('div');
2495
+ div.textContent = text || '';
2496
+ return div.innerHTML;
2497
+ }
2498
+
2499
+ function parseMemoryMarkdown(content) {
2500
+ const parsed = {
2501
+ title: '',
2502
+ fields: {},
2503
+ sections: {},
2504
+ tables: [],
2505
+ rawContent: content
2506
+ };
2507
+
2508
+ const lines = content.split('\n');
2509
+ let currentSection = '_intro';
2510
+ parsed.sections[currentSection] = [];
2511
+
2512
+ for (let i = 0; i < lines.length; i++) {
2513
+ const line = lines[i];
2514
+
2515
+ if (line.match(/^# /)) {
2516
+ parsed.title = line.replace(/^# /, '').trim();
2517
+ continue;
2518
+ }
2519
+
2520
+ if (line.match(/^## /)) {
2521
+ currentSection = line.replace(/^## /, '').trim();
2522
+ parsed.sections[currentSection] = [];
2523
+ continue;
2524
+ }
2525
+
2526
+ const kvMatch = line.match(/^\*\*(.+?):\*\*\s*(.*)$/);
2527
+ if (kvMatch) {
2528
+ parsed.fields[kvMatch[1]] = kvMatch[2];
2529
+ continue;
2530
+ }
2531
+
2532
+ parsed.sections[currentSection].push(line);
2533
+ }
2534
+
2535
+ for (const key in parsed.sections) {
2536
+ parsed.sections[key] = parsed.sections[key].join('\n').trim();
2537
+ }
2538
+
2539
+ const tableRegex = /\|(.+)\|\n\|[-| ]+\|\n((?:\|.+\|\n?)+)/g;
2540
+ let match;
2541
+ while ((match = tableRegex.exec(content)) !== null) {
2542
+ const headers = match[1].split('|').map(h => h.trim()).filter(h => h);
2543
+ const rowLines = match[2].trim().split('\n');
2544
+ const rows = rowLines.map(row => row.split('|').map(c => c.trim()).filter(c => c));
2545
+ parsed.tables.push({ headers, rows });
2546
+ }
2547
+
2548
+ return parsed;
2549
+ }
2550
+
2551
+ function getPreview(content, maxLength = 150) {
2552
+ let preview = content
2553
+ .replace(/^#+ .+$/gm, '')
2554
+ .replace(/\*\*(.+?):\*\*.*/g, '')
2555
+ .replace(/\|.+\|/g, '')
2556
+ .replace(/[-=]{3,}/g, '')
2557
+ .trim()
2558
+ .substring(0, maxLength);
2559
+ if (content.length > maxLength) preview += '...';
2560
+ return preview;
2561
+ }
2562
+
2563
+ function getDisplayName(filename) {
2564
+ return filename
2565
+ .replace('.md', '')
2566
+ .split(/[-_]/)
2567
+ .map(w => w.charAt(0).toUpperCase() + w.slice(1))
2568
+ .join(' ');
2569
+ }
2570
+
2571
+ async function loadMemoryDirectory() {
2572
+ try {
2573
+ memoryDirHandle = await window.showDirectoryPicker();
2574
+
2575
+ memoryData = { claudeMd: null, memoryFiles: [], memoryDirs: {} };
2576
+
2577
+ try {
2578
+ const claudeFileHandle = await memoryDirHandle.getFileHandle('CLAUDE.md');
2579
+ const file = await claudeFileHandle.getFile();
2580
+ memoryData.claudeMd = { content: await file.text(), fileHandle: claudeFileHandle };
2581
+ } catch (e) { console.log('No CLAUDE.md found'); }
2582
+
2583
+ try {
2584
+ const memoryDir = await memoryDirHandle.getDirectoryHandle('memory');
2585
+ for await (const entry of memoryDir.values()) {
2586
+ if (entry.kind === 'file' && entry.name.endsWith('.md')) {
2587
+ const file = await entry.getFile();
2588
+ memoryData.memoryFiles.push({
2589
+ name: entry.name,
2590
+ content: await file.text(),
2591
+ fileHandle: entry
2592
+ });
2593
+ } else if (entry.kind === 'directory') {
2594
+ memoryData.memoryDirs[entry.name] = [];
2595
+ const subDirHandle = entry;
2596
+ for await (const subEntry of subDirHandle.values()) {
2597
+ if (subEntry.kind === 'file' && subEntry.name.endsWith('.md')) {
2598
+ const file = await subEntry.getFile();
2599
+ const content = await file.text();
2600
+ memoryData.memoryDirs[entry.name].push({
2601
+ name: subEntry.name,
2602
+ content: content,
2603
+ fileHandle: subEntry,
2604
+ dirHandle: subDirHandle,
2605
+ parsed: parseMemoryMarkdown(content)
2606
+ });
2607
+ }
2608
+ }
2609
+ }
2610
+ }
2611
+ } catch (e) { console.log('No memory/ directory found'); }
2612
+
2613
+ renderMemory();
2614
+ memoryEmptyState.style.display = 'none';
2615
+ memoryMainContent.style.display = 'flex';
2616
+ filePathEl.textContent = memoryDirHandle.name;
2617
+ showStatus('Loaded memory from ' + memoryDirHandle.name);
2618
+
2619
+ } catch (e) {
2620
+ if (e.name !== 'AbortError') { showStatus('Error: ' + e.message); }
2621
+ }
2622
+ }
2623
+
2624
+ function renderMemory() {
2625
+ renderMemoryTabs();
2626
+ renderMemoryContent();
2627
+ }
2628
+
2629
+ function renderMemoryTabs() {
2630
+ let html = '';
2631
+
2632
+ if (memoryData.claudeMd) {
2633
+ html += `<button class="memory-tab active" data-tab="overview">Overview</button>`;
2634
+ }
2635
+
2636
+ for (const file of memoryData.memoryFiles) {
2637
+ const name = file.name.replace('.md', '');
2638
+ html += `<button class="memory-tab${!memoryData.claudeMd && memoryData.memoryFiles[0] === file ? ' active' : ''}" data-tab="file-${name}">${name}</button>`;
2639
+ }
2640
+
2641
+ for (const dirName of Object.keys(memoryData.memoryDirs).sort()) {
2642
+ const files = memoryData.memoryDirs[dirName];
2643
+ let count;
2644
+ if (dirName === 'context') {
2645
+ count = 0;
2646
+ for (const file of files) {
2647
+ const p = file.parsed;
2648
+ count += Object.keys(p.fields).length;
2649
+ for (const table of p.tables) {
2650
+ count += table.rows.length;
2651
+ }
2652
+ for (const [sName, sContent] of Object.entries(p.sections)) {
2653
+ if (sContent && sName !== '_intro') {
2654
+ count += sContent.split('\n').filter(l => l.trim() && !l.trim().startsWith('|')).length;
2655
+ }
2656
+ }
2657
+ }
2658
+ } else {
2659
+ count = files.length;
2660
+ }
2661
+ html += `<button class="memory-tab" data-tab="dir-${dirName}">${dirName} <span class="count">${count}</span></button>`;
2662
+ }
2663
+
2664
+ memoryTabsContainer.innerHTML = html;
2665
+
2666
+ memoryTabsContainer.querySelectorAll('.memory-tab').forEach(tab => {
2667
+ tab.addEventListener('click', () => {
2668
+ memoryTabsContainer.querySelectorAll('.memory-tab').forEach(t => t.classList.remove('active'));
2669
+ tab.classList.add('active');
2670
+ renderMemoryContent();
2671
+ });
2672
+ });
2673
+ }
2674
+
2675
+ function renderMemoryContent() {
2676
+ const activeTab = memoryTabsContainer.querySelector('.memory-tab.active');
2677
+ if (!activeTab) return;
2678
+
2679
+ const tabId = activeTab.dataset.tab;
2680
+
2681
+ if (tabId === 'overview') { renderMemoryOverview(); }
2682
+ else if (tabId.startsWith('file-')) {
2683
+ const fileName = tabId.replace('file-', '') + '.md';
2684
+ renderMemoryFile(fileName);
2685
+ } else if (tabId.startsWith('dir-')) {
2686
+ const dirName = tabId.replace('dir-', '');
2687
+ renderMemoryDirectory(dirName);
2688
+ }
2689
+ }
2690
+
2691
+ function renderMemoryOverview() {
2692
+ if (!memoryData.claudeMd) return;
2693
+
2694
+ let statsHtml = '<div class="stats">';
2695
+ for (const [dirName, files] of Object.entries(memoryData.memoryDirs)) {
2696
+ let count;
2697
+ if (dirName === 'context') {
2698
+ count = 0;
2699
+ for (const file of files) {
2700
+ const p = file.parsed;
2701
+ count += Object.keys(p.fields).length;
2702
+ for (const table of p.tables) { count += table.rows.length; }
2703
+ for (const [sName, sContent] of Object.entries(p.sections)) {
2704
+ if (sContent && sName !== '_intro') {
2705
+ count += sContent.split('\n').filter(l => l.trim() && !l.trim().startsWith('|')).length;
2706
+ }
2707
+ }
2708
+ }
2709
+ } else {
2710
+ count = files.length;
2711
+ }
2712
+ statsHtml += `
2713
+ <div class="stat">
2714
+ <div class="stat-value">${count}</div>
2715
+ <div class="stat-label">${dirName}</div>
2716
+ </div>
2717
+ `;
2718
+ }
2719
+ statsHtml += '</div>';
2720
+
2721
+ const claudeContent = renderMarkdownToHtml(memoryData.claudeMd.content);
2722
+
2723
+ memoryContentContainer.innerHTML = `
2724
+ ${statsHtml}
2725
+ <div class="file-card">
2726
+ <div class="file-card-header" onclick="this.nextElementSibling.classList.toggle('expanded'); this.querySelector('.toggle').textContent = this.nextElementSibling.classList.contains('expanded') ? '\u2212' : '+'">
2727
+ <span class="file-card-title">CLAUDE.md</span>
2728
+ <span class="toggle" style="color: var(--text-muted);">&minus;</span>
2729
+ </div>
2730
+ <div class="file-card-content expanded markdown-content">${claudeContent}</div>
2731
+ </div>
2732
+ <button onclick="openEditModal('CLAUDE.md', 'claudeMd')" style="margin-top: 10px;">Edit CLAUDE.md</button>
2733
+ `;
2734
+ }
2735
+
2736
+ function renderMemoryFile(fileName) {
2737
+ const file = memoryData.memoryFiles.find(f => f.name === fileName);
2738
+ if (!file) return;
2739
+
2740
+ const content = renderMarkdownToHtml(file.content);
2741
+
2742
+ memoryContentContainer.innerHTML = `
2743
+ <div class="file-card">
2744
+ <div class="file-card-header">
2745
+ <span class="file-card-title">${fileName}</span>
2746
+ </div>
2747
+ <div class="file-card-content expanded markdown-content">${content}</div>
2748
+ </div>
2749
+ <button onclick="openEditModal('${fileName}', 'memoryFile')" style="margin-top: 10px;">Edit ${fileName}</button>
2750
+ `;
2751
+ }
2752
+
2753
+ function renderMemoryDirectory(dirName) {
2754
+ const files = memoryData.memoryDirs[dirName] || [];
2755
+
2756
+ // Context directory uses flat list view
2757
+ if (dirName === 'context') {
2758
+ renderMemoryDirectoryFlat(dirName, files);
2759
+ return;
2760
+ }
2761
+
2762
+ // All other directories use card grid view
2763
+ let html = `
2764
+ <div class="search-box">
2765
+ <span style="color: var(--text-muted);">&#128269;</span>
2766
+ <input type="text" placeholder="Search ${dirName}..." id="dirSearch" oninput="filterMemoryDirectory('${dirName}', this.value)">
2767
+ </div>
2768
+ <div class="memory-grid" id="dirGrid">
2769
+ `;
2770
+
2771
+ for (const file of files) {
2772
+ const p = file.parsed;
2773
+ const title = p.title || getDisplayName(file.name);
2774
+
2775
+ let fieldsHtml = '';
2776
+ const fieldEntries = Object.entries(p.fields).slice(0, 3);
2777
+ if (fieldEntries.length > 0) {
2778
+ fieldsHtml = '<div class="memory-card-fields">';
2779
+ for (const [key, value] of fieldEntries) {
2780
+ fieldsHtml += `
2781
+ <div class="memory-card-field">
2782
+ <span class="memory-card-field-label">${escapeHtml(key)}</span>
2783
+ <span class="memory-card-field-value">${escapeHtml(value)}</span>
2784
+ </div>
2785
+ `;
2786
+ }
2787
+ fieldsHtml += '</div>';
2788
+ }
2789
+
2790
+ let preview = '';
2791
+ for (const [sectionName, sectionContent] of Object.entries(p.sections)) {
2792
+ if (sectionContent && sectionName !== '_intro') {
2793
+ preview = getPreview(sectionContent, 100);
2794
+ break;
2795
+ }
2796
+ }
2797
+ if (!preview) preview = getPreview(p.rawContent, 100);
2798
+
2799
+ html += `
2800
+ <div class="memory-card" onclick="openFileModal('${dirName}', '${file.name}')" data-search="${escapeHtml((title + ' ' + JSON.stringify(p.fields) + ' ' + p.rawContent).toLowerCase())}">
2801
+ <div class="memory-card-title">${escapeHtml(title)}</div>
2802
+ ${fieldsHtml}
2803
+ <div class="memory-card-preview">${escapeHtml(preview)}</div>
2804
+ </div>
2805
+ `;
2806
+ }
2807
+
2808
+ html += `
2809
+ <div class="add-btn" onclick="openNewFileModal('${dirName}')">
2810
+ + Add to ${dirName}
2811
+ </div>
2812
+ </div>`;
2813
+
2814
+ memoryContentContainer.innerHTML = html;
2815
+ }
2816
+
2817
+ function renderMemoryDirectoryFlat(dirName, files) {
2818
+ let html = `
2819
+ <div class="search-box">
2820
+ <span style="color: var(--text-muted);">&#128269;</span>
2821
+ <input type="text" placeholder="Search ${dirName}..." id="dirSearch" oninput="filterMemoryDirectory('${dirName}', this.value)">
2822
+ </div>
2823
+ <div id="dirGrid">
2824
+ `;
2825
+
2826
+ for (const file of files) {
2827
+ const p = file.parsed;
2828
+
2829
+ // Render fields as a key-value table
2830
+ const fieldEntries = Object.entries(p.fields);
2831
+ if (fieldEntries.length > 0) {
2832
+ html += `<div class="file-card" style="margin-bottom: 16px;"><table class="memory-flat-table"><tbody>`;
2833
+ for (const [key, value] of fieldEntries) {
2834
+ html += `<tr data-search="${escapeHtml((key + ' ' + value).toLowerCase())}"><td>${escapeHtml(key)}</td><td>${escapeHtml(value)}</td></tr>`;
2835
+ }
2836
+ html += `</tbody></table></div>`;
2837
+ }
2838
+
2839
+ // Render parsed tables (teams, tools, etc.) as proper HTML tables
2840
+ for (const table of p.tables) {
2841
+ html += `<div class="file-card" style="margin-bottom: 16px;"><table class="memory-flat-table"><thead><tr>`;
2842
+ for (const h of table.headers) {
2843
+ html += `<th>${escapeHtml(h)}</th>`;
2844
+ }
2845
+ html += `</tr></thead><tbody>`;
2846
+ for (const row of table.rows) {
2847
+ const searchData = row.join(' ').toLowerCase();
2848
+ html += `<tr data-search="${escapeHtml(searchData)}">`;
2849
+ for (const cell of row) {
2850
+ html += `<td>${escapeHtml(cell)}</td>`;
2851
+ }
2852
+ html += `</tr>`;
2853
+ }
2854
+ html += `</tbody></table></div>`;
2855
+ }
2856
+
2857
+ // Render non-table section content as list items
2858
+ for (const [sectionName, sectionContent] of Object.entries(p.sections)) {
2859
+ if (!sectionContent || sectionName === '_intro') continue;
2860
+ const lines = sectionContent.split('\n').filter(l => l.trim() && !l.trim().startsWith('|'));
2861
+ if (lines.length === 0) continue;
2862
+ html += `<div class="file-card" style="margin-bottom: 16px;"><table class="memory-flat-table"><thead><tr><th colspan="2">${escapeHtml(sectionName)}</th></tr></thead><tbody>`;
2863
+ for (const line of lines) {
2864
+ const cleanLine = line.replace(/^[-*]\s*/, '').replace(/\*\*(.+?)\*\*/g, '$1').trim();
2865
+ if (!cleanLine) continue;
2866
+ html += `<tr data-search="${escapeHtml((sectionName + ' ' + cleanLine).toLowerCase())}"><td colspan="2">${escapeHtml(cleanLine)}</td></tr>`;
2867
+ }
2868
+ html += `</tbody></table></div>`;
2869
+ }
2870
+ }
2871
+
2872
+ html += `</div>`;
2873
+ memoryContentContainer.innerHTML = html;
2874
+ }
2875
+
2876
+ function filterMemoryDirectory(dirName, searchTerm) {
2877
+ const grid = document.getElementById('dirGrid');
2878
+ const items = grid.querySelectorAll('.memory-card, tr[data-search]');
2879
+ const search = searchTerm.toLowerCase();
2880
+ items.forEach(item => {
2881
+ const searchData = item.dataset.search || '';
2882
+ item.style.display = (!search || searchData.includes(search)) ? '' : 'none';
2883
+ });
2884
+ }
2885
+
2886
+ function renderMarkdownToHtml(md) {
2887
+ let html = escapeHtml(md);
2888
+
2889
+ html = html.replace(/^### (.+)$/gm, '<h3>$1</h3>');
2890
+ html = html.replace(/^## (.+)$/gm, '<h2>$1</h2>');
2891
+ html = html.replace(/^# (.+)$/gm, '<h1>$1</h1>');
2892
+ html = html.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>');
2893
+ html = html.replace(/\*(.+?)\*/g, '<em>$1</em>');
2894
+ html = html.replace(/```[\s\S]*?```/g, match => {
2895
+ const code = match.replace(/```\w*\n?/g, '');
2896
+ return '<pre><code>' + code + '</code></pre>';
2897
+ });
2898
+ html = html.replace(/`([^`]+)`/g, '<code>$1</code>');
2899
+ html = html.replace(/(\|.+\|\n\|[-| ]+\|\n(?:\|.+\|\n?)+)/g, match => {
2900
+ const lines = match.trim().split('\n');
2901
+ const headers = lines[0].split('|').filter(c => c.trim());
2902
+ const rows = lines.slice(2).map(row => row.split('|').filter(c => c.trim()));
2903
+ let table = '<table><thead><tr>';
2904
+ headers.forEach(h => table += `<th>${h.trim()}</th>`);
2905
+ table += '</tr></thead><tbody>';
2906
+ rows.forEach(row => {
2907
+ table += '<tr>';
2908
+ row.forEach(cell => table += `<td>${cell.trim()}</td>`);
2909
+ table += '</tr>';
2910
+ });
2911
+ table += '</tbody></table>';
2912
+ return table;
2913
+ });
2914
+ html = html.replace(/^- (.+)$/gm, '<li>$1</li>');
2915
+ html = html.replace(/(<li>.*<\/li>\n?)+/g, '<ul>$&</ul>');
2916
+ html = html.replace(/^(?!<[hupol]|<li|<table|<pre)(.+)$/gm, '<p>$1</p>');
2917
+ html = html.replace(/<p><\/p>/g, '');
2918
+ html = html.replace(/<p>\s*<\/p>/g, '');
2919
+
2920
+ return html;
2921
+ }
2922
+
2923
+ // Modal functions
2924
+ function openFileModal(dirName, fileName) {
2925
+ const files = memoryData.memoryDirs[dirName];
2926
+ const file = files.find(f => f.name === fileName);
2927
+ if (!file) return;
2928
+
2929
+ document.getElementById('modalTitle').textContent = getDisplayName(fileName);
2930
+ document.getElementById('modalBody').innerHTML = `
2931
+ <div class="markdown-content" style="margin-bottom: 20px;">
2932
+ ${renderMarkdownToHtml(file.content)}
2933
+ </div>
2934
+ <div class="form-group">
2935
+ <label>Edit Raw Markdown</label>
2936
+ <textarea id="editContent">${escapeHtml(file.content)}</textarea>
2937
+ </div>
2938
+ `;
2939
+
2940
+ modalOverlay.classList.add('visible');
2941
+ modalOverlay.dataset.type = 'dirFile';
2942
+ modalOverlay.dataset.dirName = dirName;
2943
+ modalOverlay.dataset.fileName = fileName;
2944
+ }
2945
+
2946
+ function openNewFileModal(dirName) {
2947
+ document.getElementById('modalTitle').textContent = `Add to ${dirName}`;
2948
+
2949
+ let template = '# New Entry\n\n';
2950
+ const existingFiles = memoryData.memoryDirs[dirName];
2951
+ if (existingFiles && existingFiles.length > 0) {
2952
+ const sample = existingFiles[0].parsed;
2953
+ for (const key of Object.keys(sample.fields)) {
2954
+ template += `**${key}:** \n`;
2955
+ }
2956
+ template += '\n';
2957
+ for (const section of Object.keys(sample.sections)) {
2958
+ if (section !== '_intro') {
2959
+ template += `## ${section}\n\n`;
2960
+ }
2961
+ }
2962
+ }
2963
+
2964
+ document.getElementById('modalBody').innerHTML = `
2965
+ <div class="form-group">
2966
+ <label>Filename (without .md)</label>
2967
+ <input type="text" id="newFileName" placeholder="my-new-entry" style="width: 100%; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; color: var(--text-primary); font-size: 14px; font-family: inherit; margin-bottom: 16px;">
2968
+ </div>
2969
+ <div class="form-group">
2970
+ <label>Content</label>
2971
+ <textarea id="editContent">${escapeHtml(template)}</textarea>
2972
+ </div>
2973
+ `;
2974
+
2975
+ modalOverlay.classList.add('visible');
2976
+ modalOverlay.dataset.type = 'newDirFile';
2977
+ modalOverlay.dataset.dirName = dirName;
2978
+ }
2979
+
2980
+ function openEditModal(fileName, type) {
2981
+ let content = '';
2982
+ if (type === 'claudeMd') {
2983
+ content = memoryData.claudeMd.content;
2984
+ } else if (type === 'memoryFile') {
2985
+ const file = memoryData.memoryFiles.find(f => f.name === fileName);
2986
+ if (file) content = file.content;
2987
+ }
2988
+
2989
+ document.getElementById('modalTitle').textContent = `Edit ${fileName}`;
2990
+ document.getElementById('modalBody').innerHTML = `
2991
+ <div class="form-group">
2992
+ <label>Content</label>
2993
+ <textarea id="editContent" style="min-height: 400px;">${escapeHtml(content)}</textarea>
2994
+ </div>
2995
+ `;
2996
+
2997
+ modalOverlay.classList.add('visible');
2998
+ modalOverlay.dataset.type = type;
2999
+ modalOverlay.dataset.fileName = fileName;
3000
+ }
3001
+
3002
+ function closeModal() {
3003
+ modalOverlay.classList.remove('visible');
3004
+ }
3005
+
3006
+ async function saveModal() {
3007
+ const type = modalOverlay.dataset.type;
3008
+ const content = document.getElementById('editContent').value;
3009
+
3010
+ try {
3011
+ if (type === 'claudeMd') {
3012
+ memoryData.claudeMd.content = content;
3013
+ const writable = await memoryData.claudeMd.fileHandle.createWritable();
3014
+ await writable.write(content);
3015
+ await writable.close();
3016
+ showStatus('Saved CLAUDE.md');
3017
+
3018
+ } else if (type === 'memoryFile') {
3019
+ const fileName = modalOverlay.dataset.fileName;
3020
+ const file = memoryData.memoryFiles.find(f => f.name === fileName);
3021
+ if (file) {
3022
+ file.content = content;
3023
+ const writable = await file.fileHandle.createWritable();
3024
+ await writable.write(content);
3025
+ await writable.close();
3026
+ showStatus('Saved ' + fileName);
3027
+ }
3028
+
3029
+ } else if (type === 'dirFile') {
3030
+ const dirName = modalOverlay.dataset.dirName;
3031
+ const fileName = modalOverlay.dataset.fileName;
3032
+ const files = memoryData.memoryDirs[dirName];
3033
+ const file = files.find(f => f.name === fileName);
3034
+ if (file) {
3035
+ file.content = content;
3036
+ file.parsed = parseMemoryMarkdown(content);
3037
+ const writable = await file.fileHandle.createWritable();
3038
+ await writable.write(content);
3039
+ await writable.close();
3040
+ showStatus('Saved ' + fileName);
3041
+ }
3042
+
3043
+ } else if (type === 'newDirFile') {
3044
+ const dirName = modalOverlay.dataset.dirName;
3045
+ let fileName = document.getElementById('newFileName').value.trim();
3046
+ if (!fileName) { showStatus('Please enter a filename'); return; }
3047
+ if (!fileName.endsWith('.md')) fileName += '.md';
3048
+
3049
+ const memoryDir = await memoryDirHandle.getDirectoryHandle('memory');
3050
+ const subDir = await memoryDir.getDirectoryHandle(dirName, { create: true });
3051
+ const fileHandle = await subDir.getFileHandle(fileName, { create: true });
3052
+
3053
+ const writable = await fileHandle.createWritable();
3054
+ await writable.write(content);
3055
+ await writable.close();
3056
+
3057
+ memoryData.memoryDirs[dirName].push({
3058
+ name: fileName,
3059
+ content: content,
3060
+ fileHandle: fileHandle,
3061
+ dirHandle: subDir,
3062
+ parsed: parseMemoryMarkdown(content)
3063
+ });
3064
+
3065
+ showStatus('Created ' + fileName);
3066
+ }
3067
+
3068
+ closeModal();
3069
+ renderMemory();
3070
+
3071
+ } catch (e) {
3072
+ showStatus('Error saving: ' + e.message);
3073
+ }
3074
+ }
3075
+
3076
+ // Memory event listeners
3077
+ openMemoryBtn.addEventListener('click', loadMemoryDirectory);
3078
+ document.getElementById('openMemoryBtnLarge').addEventListener('click', loadMemoryDirectory);
3079
+ document.getElementById('modalClose').addEventListener('click', closeModal);
3080
+ document.getElementById('modalCancel').addEventListener('click', closeModal);
3081
+ document.getElementById('modalSave').addEventListener('click', saveModal);
3082
+
3083
+ modalOverlay.addEventListener('click', (e) => {
3084
+ if (e.target === modalOverlay) closeModal();
3085
+ });
3086
+
3087
+ document.addEventListener('keydown', (e) => {
3088
+ if (e.key === 'Escape') closeModal();
3089
+ });
3090
+
3091
+ // Expose functions to onclick handlers
3092
+ window.openFileModal = openFileModal;
3093
+ window.openNewFileModal = openNewFileModal;
3094
+ window.openEditModal = openEditModal;
3095
+ window.filterMemoryDirectory = filterMemoryDirectory;
3096
+ </script>
3097
+ </body>
3098
+ </html>