clawpad 0.3.4 → 0.3.5

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 (116) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +4 -4
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/api/ai/write/route_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/changes/[id]/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/changes/record/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/changes/revert/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/changes/run/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/chat/abort/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/files/pages/[...path]/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/files/recent/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/files/search/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/files/spaces/[space]/pages/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/files/spaces/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/files/watch/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/gateway/detect/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/gateway/events/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/gateway/features/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/gateway/history/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/gateway/resolve/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/gateway/status/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/openclaw/commands/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/settings/search-status/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/setup/bootstrap/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/setup/bootstrap-workspace/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/setup/status/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/setup/trigger-onboarding/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/index.html +1 -1
  52. package/.next/standalone/.next/server/app/index.rsc +1 -1
  53. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  55. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/settings/connection/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/settings/connection.html +1 -1
  61. package/.next/standalone/.next/server/app/settings/connection.rsc +1 -1
  62. package/.next/standalone/.next/server/app/settings/connection.segments/_full.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/settings/connection.segments/_head.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/settings/connection.segments/_index.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/settings/connection.segments/_tree.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/settings/connection.segments/settings/connection/__PAGE__.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/settings/connection.segments/settings/connection.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/settings/connection.segments/settings.segment.rsc +1 -1
  69. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/settings.html +1 -1
  71. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  72. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  73. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  74. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  75. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  77. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  78. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/setup.html +1 -1
  80. package/.next/standalone/.next/server/app/setup.rsc +1 -1
  81. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +1 -1
  82. package/.next/standalone/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  83. package/.next/standalone/.next/server/app/setup.segments/_index.segment.rsc +1 -1
  84. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
  85. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
  86. package/.next/standalone/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  87. package/.next/standalone/.next/server/app/workspace/[...path]/page_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/workspace/search/page_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/workspace/search.html +2 -2
  91. package/.next/standalone/.next/server/app/workspace/search.rsc +1 -1
  92. package/.next/standalone/.next/server/app/workspace/search.segments/_full.segment.rsc +1 -1
  93. package/.next/standalone/.next/server/app/workspace/search.segments/_head.segment.rsc +1 -1
  94. package/.next/standalone/.next/server/app/workspace/search.segments/_index.segment.rsc +1 -1
  95. package/.next/standalone/.next/server/app/workspace/search.segments/_tree.segment.rsc +1 -1
  96. package/.next/standalone/.next/server/app/workspace/search.segments/workspace/search/__PAGE__.segment.rsc +1 -1
  97. package/.next/standalone/.next/server/app/workspace/search.segments/workspace/search.segment.rsc +1 -1
  98. package/.next/standalone/.next/server/app/workspace/search.segments/workspace.segment.rsc +1 -1
  99. package/.next/standalone/.next/server/app/workspace.html +2 -2
  100. package/.next/standalone/.next/server/app/workspace.rsc +1 -1
  101. package/.next/standalone/.next/server/app/workspace.segments/_full.segment.rsc +1 -1
  102. package/.next/standalone/.next/server/app/workspace.segments/_head.segment.rsc +1 -1
  103. package/.next/standalone/.next/server/app/workspace.segments/_index.segment.rsc +1 -1
  104. package/.next/standalone/.next/server/app/workspace.segments/_tree.segment.rsc +1 -1
  105. package/.next/standalone/.next/server/app/workspace.segments/workspace/__PAGE__.segment.rsc +1 -1
  106. package/.next/standalone/.next/server/app/workspace.segments/workspace.segment.rsc +1 -1
  107. package/.next/standalone/.next/server/app-paths-manifest.json +4 -4
  108. package/.next/standalone/.next/server/pages/404.html +1 -1
  109. package/.next/standalone/.next/server/pages/500.html +2 -2
  110. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  111. package/.next/standalone/package.json +1 -1
  112. package/bin/clawpad.js +108 -1
  113. package/package.json +1 -1
  114. package/public/install.sh +19 -0
  115. /package/.next/static/{qgk2XcOMiy5iDOZJiQk9E → LvUY6ibmmD6EHrRtm1qSH}/_buildManifest.js +0 -0
  116. /package/.next/static/{qgk2XcOMiy5iDOZJiQk9E → LvUY6ibmmD6EHrRtm1qSH}/_ssgManifest.js +0 -0
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--qgk2XcOMiy5iDOZJiQk9E--><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/webpack-0c9808987c6b957c.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-a1f34f01f7efbb58.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.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/webpack-0c9808987c6b957c.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[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"qgk2XcOMiy5iDOZJiQk9E\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"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\":[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.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},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\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"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><!--LvUY6ibmmD6EHrRtm1qSH--><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/webpack-0c9808987c6b957c.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-a1f34f01f7efbb58.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.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/webpack-0c9808987c6b957c.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[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"LvUY6ibmmD6EHrRtm1qSH\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"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\":[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.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},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\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"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
- {"node":{},"edge":{},"encryptionKey":"xWdlNNAHFvIhTo/G5jw9w6bgnwbMe1JKMlV+5It9/kk="}
1
+ {"node":{},"edge":{},"encryptionKey":"IQsEYUHiW/DD+l9g4tE4SJGMrBpUcyruYmHpNGwH+G0="}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawpad",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "A file-based, Notion-style document workspace for OpenClaw",
5
5
  "keywords": [
6
6
  "openclaw",
package/bin/clawpad.js CHANGED
@@ -361,6 +361,104 @@ async function killPortListeners(port) {
361
361
  return { killedAny: true, verifiedFree };
362
362
  }
363
363
 
364
+ function readProcessCommand(pid) {
365
+ try {
366
+ return execSync(`ps -o command= -p ${pid}`, {
367
+ stdio: ["ignore", "pipe", "ignore"],
368
+ })
369
+ .toString()
370
+ .trim();
371
+ } catch {
372
+ return "";
373
+ }
374
+ }
375
+
376
+ function readProcessInfo(pid) {
377
+ if (process.platform === "win32") {
378
+ return null;
379
+ }
380
+
381
+ try {
382
+ const output = execSync(`ps -o ppid=,command= -p ${pid}`, {
383
+ stdio: ["ignore", "pipe", "ignore"],
384
+ })
385
+ .toString()
386
+ .trim();
387
+
388
+ if (!output) return null;
389
+ const match = output.match(/^(\d+)\s+([\s\S]+)$/);
390
+ if (!match) return null;
391
+
392
+ const ppid = Number(match[1]);
393
+ const command = match[2].trim();
394
+ const parentCommand = Number.isFinite(ppid) && ppid > 0 ? readProcessCommand(ppid) : "";
395
+
396
+ return {
397
+ pid: Number(pid),
398
+ ppid,
399
+ command,
400
+ parentCommand,
401
+ };
402
+ } catch {
403
+ return null;
404
+ }
405
+ }
406
+
407
+ function isLikelyClawpadListener(info) {
408
+ if (!info) return false;
409
+ const command = String(info.command || "").toLowerCase();
410
+ const parentCommand = String(info.parentCommand || "").toLowerCase();
411
+
412
+ if (command.includes("clawpad") || parentCommand.includes("clawpad")) {
413
+ return true;
414
+ }
415
+
416
+ if (
417
+ command.includes(".next/standalone/server.js") &&
418
+ (parentCommand.includes("clawpad") || command.includes("node_modules/clawpad"))
419
+ ) {
420
+ return true;
421
+ }
422
+
423
+ if (command.includes("next-server") && parentCommand.includes("clawpad")) {
424
+ return true;
425
+ }
426
+
427
+ return false;
428
+ }
429
+
430
+ async function maybeReplaceExistingClawpadListener(port) {
431
+ if (process.env.CLAWPAD_DISABLE_AUTO_PORT_REPLACE === "1") {
432
+ return { attempted: false, reason: "disabled" };
433
+ }
434
+
435
+ if (process.platform === "win32") {
436
+ return { attempted: false, reason: "unsupported-platform" };
437
+ }
438
+
439
+ const pids = listListeningPids(port);
440
+ if (pids.length === 0) {
441
+ return { attempted: false, reason: "no-listener" };
442
+ }
443
+
444
+ const infos = pids.map((pid) => readProcessInfo(pid)).filter(Boolean);
445
+ if (infos.length === 0) {
446
+ return { attempted: false, reason: "no-process-info" };
447
+ }
448
+
449
+ const allClawpad = infos.every((info) => isLikelyClawpadListener(info));
450
+ if (!allClawpad) {
451
+ return { attempted: false, reason: "non-clawpad-listener" };
452
+ }
453
+
454
+ const kill = await killPortListeners(port);
455
+ return {
456
+ attempted: true,
457
+ infos,
458
+ ...kill,
459
+ };
460
+ }
461
+
364
462
  function resolveUserPath(input) {
365
463
  if (!input || !input.trim()) return input;
366
464
  if (input.startsWith("~")) {
@@ -1092,7 +1190,16 @@ async function main() {
1092
1190
  }
1093
1191
 
1094
1192
  if (await isPortInUse(port)) {
1095
- if (forcePort) {
1193
+ if (!forcePort) {
1194
+ const replaceResult = await maybeReplaceExistingClawpadListener(port);
1195
+ if (replaceResult.attempted && replaceResult.killedAny && replaceResult.verifiedFree) {
1196
+ console.log(` ♻️ Replaced existing ClawPad listener on port ${port}.`);
1197
+ } else if (replaceResult.attempted && replaceResult.killedAny && !replaceResult.verifiedFree) {
1198
+ console.error(` ❌ Found an existing ClawPad listener on port ${port} but could not free it.`);
1199
+ }
1200
+ }
1201
+
1202
+ if (forcePort && (await isPortInUse(port))) {
1096
1203
  const forceResult = await killPortListeners(port);
1097
1204
  if (forceResult.killedAny && forceResult.verifiedFree) {
1098
1205
  console.log(` ✅ Cleared existing listeners on port ${port}.`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawpad",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "A file-based, Notion-style document workspace for OpenClaw",
5
5
  "keywords": [
6
6
  "openclaw",
package/public/install.sh CHANGED
@@ -7,6 +7,7 @@ set -euo pipefail
7
7
  MIN_NODE_MAJOR=18
8
8
  INSTALL_PREFIX="${CLAWPAD_PREFIX:-$HOME/.local}"
9
9
  INSTALL_TIMEOUT_SECONDS="${CLAWPAD_INSTALL_TIMEOUT_SECONDS:-180}"
10
+ PRUNE_DUPLICATES="${CLAWPAD_KEEP_DUPLICATES:-0}"
10
11
 
11
12
  echo "ClawPad installer"
12
13
  echo "[1/5] Checking Node.js..."
@@ -30,6 +31,24 @@ fi
30
31
 
31
32
  echo "[2/5] Preparing install prefix: ${INSTALL_PREFIX}"
32
33
  mkdir -p "${INSTALL_PREFIX}/bin"
34
+ INSTALL_PREFIX_ABS="$(cd "${INSTALL_PREFIX}" && pwd -P)"
35
+
36
+ # Remove older npm-based global installs from other prefixes to prevent PATH/version drift.
37
+ # Set CLAWPAD_KEEP_DUPLICATES=1 to skip this cleanup.
38
+ if [ "${PRUNE_DUPLICATES}" != "1" ]; then
39
+ if command -v clawpad >/dev/null 2>&1; then
40
+ while IFS= read -r existing_bin; do
41
+ [ -n "${existing_bin}" ] || continue
42
+ existing_prefix="$(cd "$(dirname "${existing_bin}")/.." 2>/dev/null && pwd -P || true)"
43
+ [ -n "${existing_prefix}" ] || continue
44
+ [ "${existing_prefix}" = "${INSTALL_PREFIX_ABS}" ] && continue
45
+ if [ -f "${existing_prefix}/lib/node_modules/clawpad/package.json" ]; then
46
+ echo "Pruning duplicate npm install from: ${existing_prefix}"
47
+ npm uninstall -g clawpad --prefix "${existing_prefix}" >/dev/null 2>&1 || true
48
+ fi
49
+ done < <(command -v -a clawpad 2>/dev/null | awk '!seen[$0]++')
50
+ fi
51
+ fi
33
52
 
34
53
  # Make npm quieter and avoid long post-install checks
35
54
  export NPM_CONFIG_FUND=false