dev3000 0.0.130 → 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 (110) hide show
  1. package/bin/dev3000 +90 -0
  2. package/dist/cli.d.ts +1 -1
  3. package/dist/cli.js +216 -51
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/cloud-fix.js +8 -8
  6. package/dist/commands/cloud-fix.js.map +1 -1
  7. package/dist/components/AgentSelector.d.ts +12 -0
  8. package/dist/components/AgentSelector.d.ts.map +1 -0
  9. package/dist/components/AgentSelector.js +99 -0
  10. package/dist/components/AgentSelector.js.map +1 -0
  11. package/dist/components/SkillSelector.d.ts +9 -0
  12. package/dist/components/SkillSelector.d.ts.map +1 -0
  13. package/dist/components/SkillSelector.js +70 -0
  14. package/dist/components/SkillSelector.js.map +1 -0
  15. package/dist/dev-environment.d.ts +38 -0
  16. package/dist/dev-environment.d.ts.map +1 -1
  17. package/dist/dev-environment.js +350 -116
  18. package/dist/dev-environment.js.map +1 -1
  19. package/dist/src/tui-interface-impl.tsx +36 -22
  20. package/dist/tui-interface-impl.d.ts +10 -6
  21. package/dist/tui-interface-impl.d.ts.map +1 -1
  22. package/dist/tui-interface-impl.js +24 -16
  23. package/dist/tui-interface-impl.js.map +1 -1
  24. package/dist/tui-interface.d.ts +11 -7
  25. package/dist/tui-interface.d.ts.map +1 -1
  26. package/dist/tui-interface.js +6 -6
  27. package/dist/tui-interface.js.map +1 -1
  28. package/dist/utils/agent-selection.d.ts +24 -0
  29. package/dist/utils/agent-selection.d.ts.map +1 -0
  30. package/dist/utils/agent-selection.js +34 -0
  31. package/dist/utils/agent-selection.js.map +1 -0
  32. package/dist/utils/project-name.d.ts +6 -0
  33. package/dist/utils/project-name.d.ts.map +1 -1
  34. package/dist/utils/project-name.js +10 -0
  35. package/dist/utils/project-name.js.map +1 -1
  36. package/dist/utils/skill-installer.d.ts +29 -0
  37. package/dist/utils/skill-installer.d.ts.map +1 -0
  38. package/dist/utils/skill-installer.js +185 -0
  39. package/dist/utils/skill-installer.js.map +1 -0
  40. package/dist/utils/tmux-helpers.d.ts +35 -0
  41. package/dist/utils/tmux-helpers.d.ts.map +1 -0
  42. package/dist/utils/tmux-helpers.js +62 -0
  43. package/dist/utils/tmux-helpers.js.map +1 -0
  44. package/dist/utils/user-config.d.ts +6 -0
  45. package/dist/utils/user-config.d.ts.map +1 -1
  46. package/dist/utils/user-config.js +30 -5
  47. package/dist/utils/user-config.js.map +1 -1
  48. package/dist/utils/version-check.d.ts +10 -1
  49. package/dist/utils/version-check.d.ts.map +1 -1
  50. package/dist/utils/version-check.js +60 -2
  51. package/dist/utils/version-check.js.map +1 -1
  52. package/mcp-server/.next/BUILD_ID +1 -1
  53. package/mcp-server/.next/build-manifest.json +2 -2
  54. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  55. package/mcp-server/.next/next-minimal-server.js.nft.json +1 -1
  56. package/mcp-server/.next/next-server.js.nft.json +1 -1
  57. package/mcp-server/.next/prerender-manifest.json +3 -3
  58. package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
  59. package/mcp-server/.next/server/app/_global-error.html +2 -2
  60. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  61. package/mcp-server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  62. package/mcp-server/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  63. package/mcp-server/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  64. package/mcp-server/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  65. package/mcp-server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  66. package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
  67. package/mcp-server/.next/server/app/_not-found.html +1 -1
  68. package/mcp-server/.next/server/app/_not-found.rsc +1 -1
  69. package/mcp-server/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  70. package/mcp-server/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  71. package/mcp-server/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  72. package/mcp-server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  73. package/mcp-server/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  74. package/mcp-server/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  75. package/mcp-server/.next/server/app/api/jank/[session]/route.js.nft.json +1 -1
  76. package/mcp-server/.next/server/app/api/logs/append/route.js.nft.json +1 -1
  77. package/mcp-server/.next/server/app/api/logs/head/route.js.nft.json +1 -1
  78. package/mcp-server/.next/server/app/api/logs/list/route.js.nft.json +1 -1
  79. package/mcp-server/.next/server/app/api/logs/rotate/route.js.nft.json +1 -1
  80. package/mcp-server/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
  81. package/mcp-server/.next/server/app/api/logs/tail/route.js.nft.json +1 -1
  82. package/mcp-server/.next/server/app/api/orchestrator/route.js.nft.json +1 -1
  83. package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js.nft.json +1 -1
  84. package/mcp-server/.next/server/app/api/screenshots/capture/route.js.nft.json +1 -1
  85. package/mcp-server/.next/server/app/api/screenshots/clear/route.js.nft.json +1 -1
  86. package/mcp-server/.next/server/app/api/screenshots/list/route.js.nft.json +1 -1
  87. package/mcp-server/.next/server/app/api/teams/route.js.nft.json +1 -1
  88. package/mcp-server/.next/server/app/api/tools/route.js.nft.json +1 -1
  89. package/mcp-server/.next/server/app/index.html +1 -1
  90. package/mcp-server/.next/server/app/index.rsc +1 -1
  91. package/mcp-server/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  92. package/mcp-server/.next/server/app/index.segments/_full.segment.rsc +1 -1
  93. package/mcp-server/.next/server/app/index.segments/_head.segment.rsc +1 -1
  94. package/mcp-server/.next/server/app/index.segments/_index.segment.rsc +1 -1
  95. package/mcp-server/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  96. package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
  97. package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
  98. package/mcp-server/.next/server/app/page.js.nft.json +1 -1
  99. package/mcp-server/.next/server/app/video/[session]/page.js.nft.json +1 -1
  100. package/mcp-server/.next/server/chunks/[root-of-the-server]__141a5bc7._.js.map +1 -1
  101. package/mcp-server/.next/server/pages/404.html +1 -1
  102. package/mcp-server/.next/server/pages/500.html +2 -2
  103. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  104. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  105. package/mcp-server/app/mcp/route.ts +2 -0
  106. package/package.json +11 -4
  107. package/src/tui-interface-impl.tsx +36 -22
  108. /package/mcp-server/.next/static/{YTIno5QuIO6mgeAWJ8zng → Fekb6bDxTd8hH8dFQNlIK}/_buildManifest.js +0 -0
  109. /package/mcp-server/.next/static/{YTIno5QuIO6mgeAWJ8zng → Fekb6bDxTd8hH8dFQNlIK}/_clientMiddlewareManifest.json +0 -0
  110. /package/mcp-server/.next/static/{YTIno5QuIO6mgeAWJ8zng → Fekb6bDxTd8hH8dFQNlIK}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><!--YTIno5QuIO6mgeAWJ8zng--><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\":\"YTIno5QuIO6mgeAWJ8zng\",\"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><!--YTIno5QuIO6mgeAWJ8zng--><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\":\"YTIno5QuIO6mgeAWJ8zng\",\"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\": \"Sg8FtvNZzfxQQIplphdOAoC2C3C2eiCqMEOOWArQJhY=\"\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": "Sg8FtvNZzfxQQIplphdOAoC2C3C2eiCqMEOOWArQJhY="
4
+ "encryptionKey": "AcQnbb3NuNRqlB90VKugtAs9k2WB69GAfMcdvR7ejzo="
5
5
  }
@@ -455,6 +455,8 @@ const handler = createMcpHandler(
455
455
  })
456
456
 
457
457
  // Allow arbitrary argument objects to pass through to downstream MCPs
458
+ // NOTE: Cannot use JSON Schema directly here - mcp-handler expects Zod schemas
459
+ // and will error with "Cannot read properties of undefined (reading 'typeName')"
458
460
  proxiedTool.inputSchema = z.object({}).passthrough()
459
461
 
460
462
  proxiedTool.update({
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "dev3000",
3
- "version": "0.0.130",
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,25 +154,27 @@ 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
171
174
  const { stdout } = useStdout()
172
- const ctrlCMessageDefault = "^L clear ^C quit"
175
+ // Show pane switching hint if running inside tmux
176
+ const isInTmux = !!process.env.TMUX
177
+ const ctrlCMessageDefault = isInTmux ? "^B←→ panes ^L clear ^C quit" : "^L clear ^C quit"
173
178
  const [ctrlCMessage, setCtrlCMessage] = useState(ctrlCMessageDefault)
174
179
  const maxScrollOffsetRef = useRef(0)
175
180
 
@@ -226,7 +231,7 @@ const TUIApp = ({
226
231
  setInitStatus(status)
227
232
  }
228
233
  })
229
- }, [onStatusUpdate])
234
+ }, [onStatusUpdate, ctrlCMessageDefault])
230
235
 
231
236
  // Provide app port update function to parent
232
237
  useEffect(() => {
@@ -236,12 +241,18 @@ const TUIApp = ({
236
241
  })
237
242
  }, [onAppPortUpdate])
238
243
 
239
- // Provide update available function to parent
244
+ // Provide update info function to parent
240
245
  useEffect(() => {
241
- onUpdateAvailableUpdate((info: { latestVersion: string } | null) => {
246
+ onUpdateInfoUpdate((info: UpdateInfo) => {
242
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
+ }
243
254
  })
244
- }, [onUpdateAvailableUpdate])
255
+ }, [onUpdateInfoUpdate])
245
256
 
246
257
  // Calculate available lines for logs dynamically based on terminal height and mode
247
258
  const calculateMaxVisibleLogs = () => {
@@ -254,7 +265,7 @@ const TUIApp = ({
254
265
  } else {
255
266
  // Normal mode calculation - account for all UI elements
256
267
  const headerBorderLines = 2 // Top border (with title) + bottom border
257
- const headerContentLines = 5 // Logo is 4 lines tall, +1 for padding
268
+ const headerContentLines = 4 // Logo is 4 lines tall
258
269
  const logBoxBorderLines = 2 // Top and bottom border of log box
259
270
  const logBoxHeaderLines = 1 // "Logs (X total)" text
260
271
  const logBoxFooterLines = 1 // Always reserve space for "(X lines below)" to keep layout stable
@@ -469,7 +480,7 @@ const TUIApp = ({
469
480
  <Text color="#A18CE5">{topBorderLine}</Text>
470
481
 
471
482
  {/* Content with side borders only */}
472
- <Box borderStyle="round" borderColor="#A18CE5" borderTop={false} paddingX={1} paddingY={1}>
483
+ <Box borderStyle="round" borderColor="#A18CE5" borderTop={false} paddingX={1}>
473
484
  <Box flexDirection="row" gap={1}>
474
485
  {/* ASCII Logo on the left */}
475
486
  {/* biome-ignore format: preserve ASCII art alignment */}
@@ -547,7 +558,10 @@ const TUIApp = ({
547
558
  </Text>
548
559
  </Box>
549
560
  <Box gap={2}>
550
- {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>}
551
565
  <Text color="#A18CE5">{ctrlCMessage}</Text>
552
566
  </Box>
553
567
  </Box>
@@ -559,13 +573,13 @@ export async function runTUI(options: TUIOptions): Promise<{
559
573
  app: { unmount: () => void }
560
574
  updateStatus: (status: string | null) => void
561
575
  updateAppPort: (port: string) => void
562
- updateUpdateAvailable: (info: { latestVersion: string } | null) => void
576
+ updateUpdateInfo: (info: UpdateInfo) => void
563
577
  }> {
564
578
  return new Promise((resolve, reject) => {
565
579
  try {
566
580
  let statusUpdater: ((status: string | null) => void) | null = null
567
581
  let appPortUpdater: ((port: string) => void) | null = null
568
- let updateAvailableUpdater: ((info: { latestVersion: string } | null) => void) | null = null
582
+ let updateInfoUpdater: ((info: UpdateInfo) => void) | null = null
569
583
 
570
584
  // Wrap stdout.write to add synchronized update escape sequences
571
585
  // This tells the terminal to buffer all output until the end marker
@@ -602,8 +616,8 @@ export async function runTUI(options: TUIOptions): Promise<{
602
616
  onAppPortUpdate={(fn) => {
603
617
  appPortUpdater = fn
604
618
  }}
605
- onUpdateAvailableUpdate={(fn) => {
606
- updateAvailableUpdater = fn
619
+ onUpdateInfoUpdate={(fn) => {
620
+ updateInfoUpdater = fn
607
621
  }}
608
622
  />,
609
623
  { exitOnCtrlC: false }
@@ -623,9 +637,9 @@ export async function runTUI(options: TUIOptions): Promise<{
623
637
  appPortUpdater(port)
624
638
  }
625
639
  },
626
- updateUpdateAvailable: (info: { latestVersion: string } | null) => {
627
- if (updateAvailableUpdater) {
628
- updateAvailableUpdater(info)
640
+ updateUpdateInfo: (info: UpdateInfo) => {
641
+ if (updateInfoUpdater) {
642
+ updateInfoUpdater(info)
629
643
  }
630
644
  }
631
645
  })