dev3000 0.0.131 → 0.0.134

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 (106) hide show
  1. package/bin/dev3000 +90 -0
  2. package/dist/cli.js +202 -33
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/cloud-fix.js +8 -8
  5. package/dist/commands/cloud-fix.js.map +1 -1
  6. package/dist/components/AgentSelector.d.ts +12 -0
  7. package/dist/components/AgentSelector.d.ts.map +1 -0
  8. package/dist/components/AgentSelector.js +99 -0
  9. package/dist/components/AgentSelector.js.map +1 -0
  10. package/dist/components/SkillSelector.d.ts +9 -0
  11. package/dist/components/SkillSelector.d.ts.map +1 -0
  12. package/dist/components/SkillSelector.js +70 -0
  13. package/dist/components/SkillSelector.js.map +1 -0
  14. package/dist/dev-environment.d.ts +37 -0
  15. package/dist/dev-environment.d.ts.map +1 -1
  16. package/dist/dev-environment.js +245 -106
  17. package/dist/dev-environment.js.map +1 -1
  18. package/dist/src/tui-interface-impl.tsx +32 -20
  19. package/dist/tui-interface-impl.d.ts +10 -6
  20. package/dist/tui-interface-impl.d.ts.map +1 -1
  21. package/dist/tui-interface-impl.js +20 -14
  22. package/dist/tui-interface-impl.js.map +1 -1
  23. package/dist/tui-interface.d.ts +11 -7
  24. package/dist/tui-interface.d.ts.map +1 -1
  25. package/dist/tui-interface.js +6 -6
  26. package/dist/tui-interface.js.map +1 -1
  27. package/dist/utils/agent-selection.d.ts +24 -0
  28. package/dist/utils/agent-selection.d.ts.map +1 -0
  29. package/dist/utils/agent-selection.js +34 -0
  30. package/dist/utils/agent-selection.js.map +1 -0
  31. package/dist/utils/project-name.d.ts +6 -0
  32. package/dist/utils/project-name.d.ts.map +1 -1
  33. package/dist/utils/project-name.js +10 -0
  34. package/dist/utils/project-name.js.map +1 -1
  35. package/dist/utils/skill-installer.d.ts +29 -0
  36. package/dist/utils/skill-installer.d.ts.map +1 -0
  37. package/dist/utils/skill-installer.js +185 -0
  38. package/dist/utils/skill-installer.js.map +1 -0
  39. package/dist/utils/tmux-helpers.d.ts.map +1 -1
  40. package/dist/utils/tmux-helpers.js +4 -2
  41. package/dist/utils/tmux-helpers.js.map +1 -1
  42. package/dist/utils/user-config.d.ts +6 -0
  43. package/dist/utils/user-config.d.ts.map +1 -1
  44. package/dist/utils/user-config.js +30 -5
  45. package/dist/utils/user-config.js.map +1 -1
  46. package/dist/utils/version-check.d.ts +10 -1
  47. package/dist/utils/version-check.d.ts.map +1 -1
  48. package/dist/utils/version-check.js +60 -2
  49. package/dist/utils/version-check.js.map +1 -1
  50. package/mcp-server/.next/BUILD_ID +1 -1
  51. package/mcp-server/.next/build-manifest.json +2 -2
  52. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  53. package/mcp-server/.next/next-minimal-server.js.nft.json +1 -1
  54. package/mcp-server/.next/next-server.js.nft.json +1 -1
  55. package/mcp-server/.next/prerender-manifest.json +3 -3
  56. package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
  57. package/mcp-server/.next/server/app/_global-error.html +2 -2
  58. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  59. package/mcp-server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  60. package/mcp-server/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  61. package/mcp-server/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  62. package/mcp-server/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  63. package/mcp-server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  64. package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
  65. package/mcp-server/.next/server/app/_not-found.html +1 -1
  66. package/mcp-server/.next/server/app/_not-found.rsc +1 -1
  67. package/mcp-server/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  68. package/mcp-server/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  69. package/mcp-server/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  70. package/mcp-server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  71. package/mcp-server/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  72. package/mcp-server/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  73. package/mcp-server/.next/server/app/api/jank/[session]/route.js.nft.json +1 -1
  74. package/mcp-server/.next/server/app/api/logs/append/route.js.nft.json +1 -1
  75. package/mcp-server/.next/server/app/api/logs/head/route.js.nft.json +1 -1
  76. package/mcp-server/.next/server/app/api/logs/list/route.js.nft.json +1 -1
  77. package/mcp-server/.next/server/app/api/logs/rotate/route.js.nft.json +1 -1
  78. package/mcp-server/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
  79. package/mcp-server/.next/server/app/api/logs/tail/route.js.nft.json +1 -1
  80. package/mcp-server/.next/server/app/api/orchestrator/route.js.nft.json +1 -1
  81. package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js.nft.json +1 -1
  82. package/mcp-server/.next/server/app/api/screenshots/capture/route.js.nft.json +1 -1
  83. package/mcp-server/.next/server/app/api/screenshots/clear/route.js.nft.json +1 -1
  84. package/mcp-server/.next/server/app/api/screenshots/list/route.js.nft.json +1 -1
  85. package/mcp-server/.next/server/app/api/teams/route.js.nft.json +1 -1
  86. package/mcp-server/.next/server/app/api/tools/route.js.nft.json +1 -1
  87. package/mcp-server/.next/server/app/index.html +1 -1
  88. package/mcp-server/.next/server/app/index.rsc +1 -1
  89. package/mcp-server/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  90. package/mcp-server/.next/server/app/index.segments/_full.segment.rsc +1 -1
  91. package/mcp-server/.next/server/app/index.segments/_head.segment.rsc +1 -1
  92. package/mcp-server/.next/server/app/index.segments/_index.segment.rsc +1 -1
  93. package/mcp-server/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  94. package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
  95. package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
  96. package/mcp-server/.next/server/app/page.js.nft.json +1 -1
  97. package/mcp-server/.next/server/app/video/[session]/page.js.nft.json +1 -1
  98. package/mcp-server/.next/server/pages/404.html +1 -1
  99. package/mcp-server/.next/server/pages/500.html +2 -2
  100. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  101. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  102. package/package.json +11 -4
  103. package/src/tui-interface-impl.tsx +32 -20
  104. /package/mcp-server/.next/static/{i5SOhj7cf3JSMPksTBNpr → Fekb6bDxTd8hH8dFQNlIK}/_buildManifest.js +0 -0
  105. /package/mcp-server/.next/static/{i5SOhj7cf3JSMPksTBNpr → Fekb6bDxTd8hH8dFQNlIK}/_clientMiddlewareManifest.json +0 -0
  106. /package/mcp-server/.next/static/{i5SOhj7cf3JSMPksTBNpr → Fekb6bDxTd8hH8dFQNlIK}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><!--i5SOhj7cf3JSMPksTBNpr--><html lang="en" class="h-full" vt-update="auto"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/59cdeaf92a780e96.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41c5312e59752fb5.js"/><script src="/_next/static/chunks/f09e07f5359ffb6b.js" async=""></script><script src="/_next/static/chunks/f5ae99caea655ac1.js" async=""></script><script src="/_next/static/chunks/0ceacd9ff62ffa24.js" async=""></script><script src="/_next/static/chunks/turbopack-2c2bdfdb92058782.js" async=""></script><script src="/_next/static/chunks/6bd8e9b9ad938cba.js" async=""></script><script src="/_next/static/chunks/4b70aaeeb4b78390.js" async=""></script><meta name="robots" content="noindex"/><title>dev3000</title><link rel="icon" href="/favicon.ico" type="image/x-icon"/><link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="32x32"/><link rel="icon" href="/favicon-16.svg" type="image/svg+xml" sizes="16x16"/><link rel="icon" href="/favicon-64.svg" type="image/svg+xml" sizes="64x64"/><link rel="apple-touch-icon" href="/favicon-180.png"/><link rel="shortcut icon" href="/favicon.svg"/><meta name="theme-color" content="#1f2937"/><title>404: This page could not be found.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="h-full"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/41c5312e59752fb5.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"$Sreact.view_transition\"\n3:I[41452,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n4:I[56089,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n5:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"ViewportBoundary\"]\na:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"MetadataBoundary\"]\nc:I[56911,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n:HL[\"/_next/static/chunks/59cdeaf92a780e96.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"i5SOhj7cf3JSMPksTBNpr\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/59cdeaf92a780e96.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/4b70aaeeb4b78390.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$2\",null,{\"children\":[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"dev3000\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"32x32\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-16.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"16x16\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-64.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"64x64\"}],[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon-180.png\"}],[\"$\",\"link\",null,{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#1f2937\"}]]}],[\"$\",\"body\",null,{\"className\":\"h-full\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"7:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Fekb6bDxTd8hH8dFQNlIK--><html lang="en" class="h-full" vt-update="auto"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/59cdeaf92a780e96.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41c5312e59752fb5.js"/><script src="/_next/static/chunks/f09e07f5359ffb6b.js" async=""></script><script src="/_next/static/chunks/f5ae99caea655ac1.js" async=""></script><script src="/_next/static/chunks/0ceacd9ff62ffa24.js" async=""></script><script src="/_next/static/chunks/turbopack-2c2bdfdb92058782.js" async=""></script><script src="/_next/static/chunks/6bd8e9b9ad938cba.js" async=""></script><script src="/_next/static/chunks/4b70aaeeb4b78390.js" async=""></script><meta name="robots" content="noindex"/><title>dev3000</title><link rel="icon" href="/favicon.ico" type="image/x-icon"/><link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="32x32"/><link rel="icon" href="/favicon-16.svg" type="image/svg+xml" sizes="16x16"/><link rel="icon" href="/favicon-64.svg" type="image/svg+xml" sizes="64x64"/><link rel="apple-touch-icon" href="/favicon-180.png"/><link rel="shortcut icon" href="/favicon.svg"/><meta name="theme-color" content="#1f2937"/><title>404: This page could not be found.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="h-full"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/41c5312e59752fb5.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"$Sreact.view_transition\"\n3:I[41452,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n4:I[56089,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n5:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"ViewportBoundary\"]\na:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"MetadataBoundary\"]\nc:I[56911,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n:HL[\"/_next/static/chunks/59cdeaf92a780e96.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Fekb6bDxTd8hH8dFQNlIK\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/59cdeaf92a780e96.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/4b70aaeeb4b78390.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$2\",null,{\"children\":[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"dev3000\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"32x32\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-16.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"16x16\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-64.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"64x64\"}],[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon-180.png\"}],[\"$\",\"link\",null,{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#1f2937\"}]]}],[\"$\",\"body\",null,{\"className\":\"h-full\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"7:null\nb:[]\n"])</script></body></html>
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--i5SOhj7cf3JSMPksTBNpr--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41c5312e59752fb5.js"/><script src="/_next/static/chunks/f09e07f5359ffb6b.js" async=""></script><script src="/_next/static/chunks/f5ae99caea655ac1.js" async=""></script><script src="/_next/static/chunks/0ceacd9ff62ffa24.js" async=""></script><script src="/_next/static/chunks/turbopack-2c2bdfdb92058782.js" async=""></script><script src="/_next/static/chunks/6bd8e9b9ad938cba.js" async=""></script><script src="/_next/static/chunks/4b70aaeeb4b78390.js" async=""></script><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/41c5312e59752fb5.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[41452,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n3:I[56089,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n4:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"ViewportBoundary\"]\n9:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"MetadataBoundary\"]\nb:I[56911,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"i5SOhj7cf3JSMPksTBNpr\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/4b70aaeeb4b78390.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Fekb6bDxTd8hH8dFQNlIK--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41c5312e59752fb5.js"/><script src="/_next/static/chunks/f09e07f5359ffb6b.js" async=""></script><script src="/_next/static/chunks/f5ae99caea655ac1.js" async=""></script><script src="/_next/static/chunks/0ceacd9ff62ffa24.js" async=""></script><script src="/_next/static/chunks/turbopack-2c2bdfdb92058782.js" async=""></script><script src="/_next/static/chunks/6bd8e9b9ad938cba.js" async=""></script><script src="/_next/static/chunks/4b70aaeeb4b78390.js" async=""></script><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/41c5312e59752fb5.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[41452,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n3:I[56089,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n4:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"ViewportBoundary\"]\n9:I[47985,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"MetadataBoundary\"]\nb:I[56911,[\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"/_next/static/chunks/4b70aaeeb4b78390.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Fekb6bDxTd8hH8dFQNlIK\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/6bd8e9b9ad938cba.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/4b70aaeeb4b78390.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
@@ -1 +1 @@
1
- self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"pewlONdyIhBiMOPyj+4UnrPlFM2l4Skzn8jfOo94jgA=\"\n}"
1
+ self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"AcQnbb3NuNRqlB90VKugtAs9k2WB69GAfMcdvR7ejzo=\"\n}"
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "node": {},
3
3
  "edge": {},
4
- "encryptionKey": "pewlONdyIhBiMOPyj+4UnrPlFM2l4Skzn8jfOo94jgA="
4
+ "encryptionKey": "AcQnbb3NuNRqlB90VKugtAs9k2WB69GAfMcdvR7ejzo="
5
5
  }
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "dev3000",
3
- "version": "0.0.131",
3
+ "version": "0.0.134",
4
4
  "description": "AI-powered development tools with browser monitoring and MCP server integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
- "dev3000": "dist/cli.js",
9
- "d3k": "dist/cli.js"
8
+ "dev3000": "./bin/dev3000",
9
+ "d3k": "./bin/dev3000"
10
10
  },
11
11
  "files": [
12
+ "bin/",
12
13
  "dist/",
13
14
  "src/tui-interface-impl.tsx",
14
15
  "mcp-server/app/",
@@ -47,7 +48,8 @@
47
48
  "_postinstall": "node scripts/check-install.js || exit 0",
48
49
  "_prepare": "husky",
49
50
  "release": "./scripts/release.sh",
50
- "canary": "./scripts/canary.sh"
51
+ "canary": "./scripts/canary.sh",
52
+ "build:binaries": "bun run scripts/build-binaries.ts"
51
53
  },
52
54
  "keywords": [
53
55
  "nextjs",
@@ -67,6 +69,7 @@
67
69
  "chalk": "^5.3.0",
68
70
  "commander": "^14.0.1",
69
71
  "ink": "^6.5.1",
72
+ "ink-select-input": "^6.2.0",
70
73
  "ink-spinner": "^5.0.0",
71
74
  "ms": "^2.1.3",
72
75
  "next": "16.1.0",
@@ -84,10 +87,14 @@
84
87
  "@types/react": "^19.0.0",
85
88
  "@types/ws": "^8.5.12",
86
89
  "husky": "^9.0.0",
90
+ "react-devtools-core": "^7.0.1",
87
91
  "tsx": "^4.20.3",
88
92
  "turbo": "^2.6.0",
89
93
  "vitest": "^3.2.4"
90
94
  },
95
+ "optionalDependencies": {
96
+ "@d3k/darwin-arm64": "0.0.134"
97
+ },
91
98
  "pnpm": {
92
99
  "peerDependencyRules": {
93
100
  "allowAny": [
@@ -6,6 +6,11 @@ import { memo, useEffect, useRef, useState } from "react"
6
6
  import type { Readable } from "stream"
7
7
  import { LOG_COLORS } from "./constants/log-colors.js"
8
8
 
9
+ export type UpdateInfo =
10
+ | { type: "available"; latestVersion: string }
11
+ | { type: "updated"; newVersion: string; autoHide?: boolean }
12
+ | null
13
+
9
14
  export interface TUIOptions {
10
15
  appPort: string
11
16
  mcpPort: string
@@ -14,9 +19,7 @@ export interface TUIOptions {
14
19
  serversOnly?: boolean
15
20
  version: string
16
21
  projectName?: string
17
- updateAvailable?: {
18
- latestVersion: string
19
- } | null
22
+ updateInfo?: UpdateInfo
20
23
  }
21
24
 
22
25
  interface LogEntry {
@@ -151,20 +154,20 @@ const TUIApp = ({
151
154
  serversOnly,
152
155
  version,
153
156
  projectName,
154
- updateAvailable,
157
+ updateInfo: initialUpdateInfo,
155
158
  onStatusUpdate,
156
159
  onAppPortUpdate,
157
- onUpdateAvailableUpdate
160
+ onUpdateInfoUpdate
158
161
  }: TUIOptions & {
159
162
  onStatusUpdate: (fn: (status: string | null) => void) => void
160
163
  onAppPortUpdate: (fn: (port: string) => void) => void
161
- onUpdateAvailableUpdate: (fn: (info: { latestVersion: string } | null) => void) => void
164
+ onUpdateInfoUpdate: (fn: (info: UpdateInfo) => void) => void
162
165
  }) => {
163
166
  const [logs, setLogs] = useState<LogEntry[]>([])
164
167
  const [scrollOffset, setScrollOffset] = useState(0)
165
168
  const [initStatus, setInitStatus] = useState<string | null>(null)
166
169
  const [appPort, setAppPort] = useState<string>(initialAppPort)
167
- const [updateInfo, setUpdateInfo] = useState<{ latestVersion: string } | null>(updateAvailable || null)
170
+ const [updateInfo, setUpdateInfo] = useState<UpdateInfo>(initialUpdateInfo || null)
168
171
  const [portConfirmed, setPortConfirmed] = useState<boolean>(false)
169
172
  const logIdCounter = useRef(0)
170
173
  const [clearFromLogId, setClearFromLogId] = useState<number>(0) // Track log ID to clear from
@@ -238,12 +241,18 @@ const TUIApp = ({
238
241
  })
239
242
  }, [onAppPortUpdate])
240
243
 
241
- // Provide update available function to parent
244
+ // Provide update info function to parent
242
245
  useEffect(() => {
243
- onUpdateAvailableUpdate((info: { latestVersion: string } | null) => {
246
+ onUpdateInfoUpdate((info: UpdateInfo) => {
244
247
  setUpdateInfo(info)
248
+ // Auto-hide "updated" messages after 10 seconds
249
+ if (info?.type === "updated" && info.autoHide !== false) {
250
+ setTimeout(() => {
251
+ setUpdateInfo(null)
252
+ }, 10000)
253
+ }
245
254
  })
246
- }, [onUpdateAvailableUpdate])
255
+ }, [onUpdateInfoUpdate])
247
256
 
248
257
  // Calculate available lines for logs dynamically based on terminal height and mode
249
258
  const calculateMaxVisibleLogs = () => {
@@ -256,7 +265,7 @@ const TUIApp = ({
256
265
  } else {
257
266
  // Normal mode calculation - account for all UI elements
258
267
  const headerBorderLines = 2 // Top border (with title) + bottom border
259
- const headerContentLines = 5 // Logo is 4 lines tall, +1 for padding
268
+ const headerContentLines = 4 // Logo is 4 lines tall
260
269
  const logBoxBorderLines = 2 // Top and bottom border of log box
261
270
  const logBoxHeaderLines = 1 // "Logs (X total)" text
262
271
  const logBoxFooterLines = 1 // Always reserve space for "(X lines below)" to keep layout stable
@@ -471,7 +480,7 @@ const TUIApp = ({
471
480
  <Text color="#A18CE5">{topBorderLine}</Text>
472
481
 
473
482
  {/* Content with side borders only */}
474
- <Box borderStyle="round" borderColor="#A18CE5" borderTop={false} paddingX={1} paddingY={1}>
483
+ <Box borderStyle="round" borderColor="#A18CE5" borderTop={false} paddingX={1}>
475
484
  <Box flexDirection="row" gap={1}>
476
485
  {/* ASCII Logo on the left */}
477
486
  {/* biome-ignore format: preserve ASCII art alignment */}
@@ -549,7 +558,10 @@ const TUIApp = ({
549
558
  </Text>
550
559
  </Box>
551
560
  <Box gap={2}>
552
- {updateInfo && <Text color="yellow">↑ v{updateInfo.latestVersion} available (d3k upgrade)</Text>}
561
+ {updateInfo?.type === "available" && (
562
+ <Text color="yellow">↑ v{updateInfo.latestVersion} available (d3k upgrade)</Text>
563
+ )}
564
+ {updateInfo?.type === "updated" && <Text color="green">✓ Updated to v{updateInfo.newVersion}</Text>}
553
565
  <Text color="#A18CE5">{ctrlCMessage}</Text>
554
566
  </Box>
555
567
  </Box>
@@ -561,13 +573,13 @@ export async function runTUI(options: TUIOptions): Promise<{
561
573
  app: { unmount: () => void }
562
574
  updateStatus: (status: string | null) => void
563
575
  updateAppPort: (port: string) => void
564
- updateUpdateAvailable: (info: { latestVersion: string } | null) => void
576
+ updateUpdateInfo: (info: UpdateInfo) => void
565
577
  }> {
566
578
  return new Promise((resolve, reject) => {
567
579
  try {
568
580
  let statusUpdater: ((status: string | null) => void) | null = null
569
581
  let appPortUpdater: ((port: string) => void) | null = null
570
- let updateAvailableUpdater: ((info: { latestVersion: string } | null) => void) | null = null
582
+ let updateInfoUpdater: ((info: UpdateInfo) => void) | null = null
571
583
 
572
584
  // Wrap stdout.write to add synchronized update escape sequences
573
585
  // This tells the terminal to buffer all output until the end marker
@@ -604,8 +616,8 @@ export async function runTUI(options: TUIOptions): Promise<{
604
616
  onAppPortUpdate={(fn) => {
605
617
  appPortUpdater = fn
606
618
  }}
607
- onUpdateAvailableUpdate={(fn) => {
608
- updateAvailableUpdater = fn
619
+ onUpdateInfoUpdate={(fn) => {
620
+ updateInfoUpdater = fn
609
621
  }}
610
622
  />,
611
623
  { exitOnCtrlC: false }
@@ -625,9 +637,9 @@ export async function runTUI(options: TUIOptions): Promise<{
625
637
  appPortUpdater(port)
626
638
  }
627
639
  },
628
- updateUpdateAvailable: (info: { latestVersion: string } | null) => {
629
- if (updateAvailableUpdater) {
630
- updateAvailableUpdater(info)
640
+ updateUpdateInfo: (info: UpdateInfo) => {
641
+ if (updateInfoUpdater) {
642
+ updateInfoUpdater(info)
631
643
  }
632
644
  }
633
645
  })