wao 0.41.3 → 0.41.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 (719) hide show
  1. package/.babelrc-cjs +5 -0
  2. package/.babelrc-esm +5 -0
  3. package/.gitmodules +4 -0
  4. package/.prettierrc +6 -0
  5. package/README.md +90 -0
  6. package/app/.eslintrc.json +3 -0
  7. package/app/.mocharc.cjs +6 -0
  8. package/app/arweave.mjs +87 -0
  9. package/app/components/Footer.js +76 -0
  10. package/app/components/Global.js +1128 -0
  11. package/app/components/Header.js +306 -0
  12. package/app/components/Left.js +28 -0
  13. package/app/components/Logo.js +34 -0
  14. package/app/components/Middle.js +37 -0
  15. package/app/components/Sidebar.js +93 -0
  16. package/app/components/Tags.js +42 -0
  17. package/app/components/editor/Editor.js +322 -0
  18. package/app/components/editor/FilePath.js +42 -0
  19. package/app/components/editor/MonacoEditor.js +44 -0
  20. package/app/components/left/LeftMessages.js +85 -0
  21. package/app/components/left/LeftModules.js +86 -0
  22. package/app/components/left/LeftNetworks.js +438 -0
  23. package/app/components/left/LeftProcesses.js +98 -0
  24. package/app/components/left/LeftProjects.js +397 -0
  25. package/app/components/left/LeftTests.js +189 -0
  26. package/app/components/middle/MiddleBlocks.js +79 -0
  27. package/app/components/middle/MiddleEntity.js +16 -0
  28. package/app/components/middle/MiddleEntityAccount.js +264 -0
  29. package/app/components/middle/MiddleEntityAssignment.js +104 -0
  30. package/app/components/middle/MiddleEntityBlock.js +148 -0
  31. package/app/components/middle/MiddleEntityMessage.js +430 -0
  32. package/app/components/middle/MiddleEntityModule.js +183 -0
  33. package/app/components/middle/MiddleEntityProcess.js +323 -0
  34. package/app/components/middle/MiddleEntityTx.js +211 -0
  35. package/app/components/middle/MiddleMessages.js +87 -0
  36. package/app/components/middle/MiddleModules.js +89 -0
  37. package/app/components/middle/MiddleNetworks.js +516 -0
  38. package/app/components/middle/MiddleProcesses.js +87 -0
  39. package/app/components/middle/MiddleTests.js +134 -0
  40. package/app/components/modals/CreateFileModal.js +115 -0
  41. package/app/components/modals/CreateFolderModal.js +83 -0
  42. package/app/components/modals/CreateProjectModal.js +63 -0
  43. package/app/components/modals/FSModal.js +141 -0
  44. package/app/components/modals/ImportModal.js +105 -0
  45. package/app/components/modals/LaunchNetworkModal.js +95 -0
  46. package/app/components/modals/Modal.js +38 -0
  47. package/app/components/modals/ProxyModal.js +122 -0
  48. package/app/components/modals/RenameFileModal.js +95 -0
  49. package/app/components/styles/EditorScrollbarStyle.js +29 -0
  50. package/app/components/styles/EntityScrollbarStyle.js +29 -0
  51. package/app/components/styles/GlobalStyle.js +102 -0
  52. package/app/components/styles/XtermStyle.js +37 -0
  53. package/app/components/terminal/Terminal.js +132 -0
  54. package/app/components/terminal/Xterm.js +160 -0
  55. package/app/components/ui/avatar.jsx +49 -0
  56. package/app/components/ui/checkbox.jsx +17 -0
  57. package/app/components/ui/close-button.jsx +20 -0
  58. package/app/components/ui/color-mode.jsx +61 -0
  59. package/app/components/ui/dialog.jsx +54 -0
  60. package/app/components/ui/drawer.jsx +44 -0
  61. package/app/components/ui/field.jsx +22 -0
  62. package/app/components/ui/input-group.jsx +39 -0
  63. package/app/components/ui/popover.jsx +49 -0
  64. package/app/components/ui/provider.jsx +12 -0
  65. package/app/components/ui/radio.jsx +17 -0
  66. package/app/components/ui/slider.jsx +107 -0
  67. package/app/components/ui/toaster.jsx +69 -0
  68. package/app/components/ui/tooltip.jsx +35 -0
  69. package/app/index.js +10 -0
  70. package/app/jsconfig.json +7 -0
  71. package/app/lib/GithubCSS.js +1218 -0
  72. package/app/lib/addon-fit.js +72 -0
  73. package/app/lib/data.js +31 -0
  74. package/app/lib/github-markdown.css +1169 -0
  75. package/app/lib/global.js +1 -0
  76. package/app/lib/guide.js +82 -0
  77. package/app/lib/hub.js +109 -0
  78. package/app/lib/scripts.js +47 -0
  79. package/app/lib/store.js +34 -0
  80. package/app/lib/use.js +64 -0
  81. package/app/lib/utils.js +387 -0
  82. package/app/lib/webrtc.js +217 -0
  83. package/app/next.config.js +25 -0
  84. package/app/package.json +62 -0
  85. package/app/pages/404.js +9 -0
  86. package/app/pages/_app.js +10 -0
  87. package/app/pages/_document.js +14 -0
  88. package/app/pages/index.js +121 -0
  89. package/app/playwright.config.mjs +41 -0
  90. package/app/proxy.mjs +21 -0
  91. package/app/public/assets/cover.png +0 -0
  92. package/app/public/blueprints/apm.lua +91 -0
  93. package/app/public/blueprints/arena.lua +345 -0
  94. package/app/public/blueprints/arns.lua +318 -0
  95. package/app/public/blueprints/chat.lua +210 -0
  96. package/app/public/blueprints/chatroom.lua +56 -0
  97. package/app/public/blueprints/patch-legacy-reply.lua +13 -0
  98. package/app/public/blueprints/staking.lua +93 -0
  99. package/app/public/blueprints/token.lua +298 -0
  100. package/app/public/blueprints/voting.lua +45 -0
  101. package/app/public/favicon.ico +0 -0
  102. package/app/public/logo.png +0 -0
  103. package/cli-esm.js +55 -0
  104. package/cli.js +54 -0
  105. package/devnet/app/api.js +129 -0
  106. package/devnet/app/components/layout.js +89 -0
  107. package/devnet/app/components/pagination.js +144 -0
  108. package/devnet/app/components/search.js +159 -0
  109. package/devnet/app/components/table.js +124 -0
  110. package/devnet/app/components/tags.js +89 -0
  111. package/devnet/app/index.html +14 -0
  112. package/devnet/app/main.js +215 -0
  113. package/devnet/app/router.js +59 -0
  114. package/devnet/app/state.js +19 -0
  115. package/devnet/app/style.css +1606 -0
  116. package/devnet/app/utils.js +77 -0
  117. package/devnet/app/views/blocks.js +75 -0
  118. package/devnet/app/views/dashboard.js +127 -0
  119. package/devnet/app/views/entity.js +1473 -0
  120. package/devnet/app/views/messages.js +90 -0
  121. package/devnet/app/views/modules.js +165 -0
  122. package/devnet/app/views/processes.js +90 -0
  123. package/devnet/app/views/schedulers.js +90 -0
  124. package/devnet/app/views/transactions.js +88 -0
  125. package/devnet/migrations/0001_initial.sql +51 -0
  126. package/devnet/package.json +26 -0
  127. package/devnet/playwright.config.js +7 -0
  128. package/devnet/src/cu-worker.js +166 -0
  129. package/devnet/src/index.js +309 -0
  130. package/devnet/vite.config.js +17 -0
  131. package/devnet/vitest.config.js +10 -0
  132. package/devnet/wrangler-cu.toml +32 -0
  133. package/devnet/wrangler.toml +38 -0
  134. package/dhfs-tutorial-app/package.json +15 -0
  135. package/dist/esm/workspace/dashboard/public/favicon.png +0 -0
  136. package/dist/esm/workspace/src/counter.lua +14 -0
  137. package/dist/package.json +82 -0
  138. package/hb.sh +18 -0
  139. package/hbsig/.babelrc-cjs +5 -0
  140. package/hbsig/.babelrc-esm +5 -0
  141. package/hbsig/README.md +1 -0
  142. package/hbsig/dist/cjs/bin_to_str.js +44 -0
  143. package/hbsig/dist/cjs/collect-body-keys.js +470 -0
  144. package/hbsig/dist/cjs/commit.js +330 -0
  145. package/hbsig/dist/cjs/encode-array-item.js +110 -0
  146. package/hbsig/dist/cjs/encode-utils.js +242 -0
  147. package/hbsig/dist/cjs/encode.js +1365 -0
  148. package/hbsig/dist/cjs/erl_json.js +326 -0
  149. package/hbsig/dist/cjs/erl_str.js +1042 -0
  150. package/hbsig/dist/cjs/flat.js +279 -0
  151. package/hbsig/dist/cjs/http-message-signatures/httpbis.js +489 -0
  152. package/hbsig/dist/cjs/http-message-signatures/index.js +25 -0
  153. package/hbsig/dist/cjs/http-message-signatures/structured-header.js +129 -0
  154. package/hbsig/dist/cjs/httpsig.js +861 -0
  155. package/hbsig/dist/cjs/id.js +470 -0
  156. package/hbsig/dist/cjs/index.js +174 -0
  157. package/hbsig/dist/cjs/nocrypto.js +51 -0
  158. package/hbsig/dist/cjs/parser.js +201 -0
  159. package/hbsig/dist/cjs/send-utils.js +1231 -0
  160. package/hbsig/dist/cjs/send.js +211 -0
  161. package/hbsig/dist/cjs/signer-utils.js +494 -0
  162. package/hbsig/dist/cjs/signer.js +436 -0
  163. package/hbsig/dist/cjs/structured.js +515 -0
  164. package/hbsig/dist/cjs/test.js +12 -0
  165. package/hbsig/dist/cjs/utils.js +44 -0
  166. package/hbsig/dist/esm/bin_to_str.js +46 -0
  167. package/hbsig/dist/esm/collect-body-keys.js +436 -0
  168. package/hbsig/dist/esm/commit.js +219 -0
  169. package/hbsig/dist/esm/encode-array-item.js +112 -0
  170. package/hbsig/dist/esm/encode-utils.js +191 -0
  171. package/hbsig/dist/esm/encode.js +1256 -0
  172. package/hbsig/dist/esm/erl_json.js +292 -0
  173. package/hbsig/dist/esm/erl_str.js +1144 -0
  174. package/hbsig/dist/esm/flat.js +250 -0
  175. package/hbsig/dist/esm/http-message-signatures/httpbis.js +438 -0
  176. package/hbsig/dist/esm/http-message-signatures/index.js +4 -0
  177. package/hbsig/dist/esm/http-message-signatures/structured-header.js +105 -0
  178. package/hbsig/dist/esm/httpsig.js +866 -0
  179. package/hbsig/dist/esm/id.js +459 -0
  180. package/hbsig/dist/esm/index.js +13 -0
  181. package/hbsig/dist/esm/nocrypto.js +4 -0
  182. package/hbsig/dist/esm/package.json +3 -0
  183. package/hbsig/dist/esm/parser.js +171 -0
  184. package/hbsig/dist/esm/send-utils.js +1132 -0
  185. package/hbsig/dist/esm/send.js +142 -0
  186. package/hbsig/dist/esm/signer-utils.js +375 -0
  187. package/hbsig/dist/esm/signer.js +312 -0
  188. package/hbsig/dist/esm/structured.js +496 -0
  189. package/hbsig/dist/esm/test.js +2 -0
  190. package/hbsig/dist/esm/utils.js +29 -0
  191. package/hbsig/dist/package.json +39 -0
  192. package/hbsig/make.js +36 -0
  193. package/hbsig/package.json +39 -0
  194. package/hbsig/src/bin_to_str.js +46 -0
  195. package/hbsig/src/collect-body-keys.js +436 -0
  196. package/hbsig/src/commit.js +219 -0
  197. package/hbsig/src/encode-array-item.js +112 -0
  198. package/hbsig/src/encode-utils.js +191 -0
  199. package/hbsig/src/encode.js +1256 -0
  200. package/hbsig/src/erl_json.js +292 -0
  201. package/hbsig/src/erl_str.js +1144 -0
  202. package/hbsig/src/flat.js +250 -0
  203. package/hbsig/src/http-message-signatures/httpbis.js +438 -0
  204. package/hbsig/src/http-message-signatures/index.js +4 -0
  205. package/hbsig/src/http-message-signatures/structured-header.js +105 -0
  206. package/hbsig/src/httpsig.js +866 -0
  207. package/hbsig/src/id.js +459 -0
  208. package/hbsig/src/index.js +13 -0
  209. package/hbsig/src/nocrypto.js +4 -0
  210. package/hbsig/src/parser.js +171 -0
  211. package/hbsig/src/send-utils.js +1132 -0
  212. package/hbsig/src/send.js +142 -0
  213. package/hbsig/src/signer-utils.js +375 -0
  214. package/hbsig/src/signer.js +312 -0
  215. package/hbsig/src/structured.js +496 -0
  216. package/hbsig/src/test.js +2 -0
  217. package/hbsig/src/utils.js +29 -0
  218. package/lp/index.html +25 -0
  219. package/lp/package.json +19 -0
  220. package/lp/public/cover.png +0 -0
  221. package/lp/public/favicon.ico +0 -0
  222. package/lp/public/favicon.png +0 -0
  223. package/lp/public/images/book.jpg +0 -0
  224. package/lp/public/images/dashboard.png +0 -0
  225. package/lp/public/images/devnet.png +0 -0
  226. package/lp/public/images/hero-bg.png +0 -0
  227. package/lp/public/images/hyperadd.png +0 -0
  228. package/lp/public/images/message-flow.png +0 -0
  229. package/lp/public/images/mobile.png +0 -0
  230. package/lp/public/images/og-cover.png +0 -0
  231. package/lp/public/images/scan.png +0 -0
  232. package/lp/public/images/wao-hub.png +0 -0
  233. package/lp/public/images/wao-web.png +0 -0
  234. package/lp/public/logo.png +0 -0
  235. package/lp/src/App.jsx +29 -0
  236. package/lp/src/components/CodeBlock.jsx +37 -0
  237. package/lp/src/components/CodeBlock.module.css +89 -0
  238. package/lp/src/components/Footer.jsx +22 -0
  239. package/lp/src/components/Footer.module.css +60 -0
  240. package/lp/src/components/Nav.jsx +80 -0
  241. package/lp/src/components/Nav.module.css +177 -0
  242. package/lp/src/components/SectionWrapper.jsx +15 -0
  243. package/lp/src/hooks/useReveal.js +25 -0
  244. package/lp/src/hooks/useScrolled.js +14 -0
  245. package/lp/src/main.jsx +10 -0
  246. package/lp/src/sections/Book.jsx +60 -0
  247. package/lp/src/sections/Book.module.css +204 -0
  248. package/lp/src/sections/Browser.jsx +46 -0
  249. package/lp/src/sections/Browser.module.css +67 -0
  250. package/lp/src/sections/Devnet.jsx +55 -0
  251. package/lp/src/sections/Devnet.module.css +136 -0
  252. package/lp/src/sections/GetStarted.jsx +51 -0
  253. package/lp/src/sections/GetStarted.module.css +128 -0
  254. package/lp/src/sections/Hero.jsx +67 -0
  255. package/lp/src/sections/Hero.module.css +202 -0
  256. package/lp/src/sections/HyperADD.jsx +46 -0
  257. package/lp/src/sections/HyperADD.module.css +113 -0
  258. package/lp/src/sections/SDK.jsx +90 -0
  259. package/lp/src/sections/SDK.module.css +122 -0
  260. package/lp/src/sections/Testing.jsx +47 -0
  261. package/lp/src/sections/Testing.module.css +124 -0
  262. package/lp/src/sections/Vision.jsx +93 -0
  263. package/lp/src/sections/Vision.module.css +147 -0
  264. package/lp/src/styles/globals.css +285 -0
  265. package/lp/src/utils/scrollTo.js +4 -0
  266. package/lp/vite.config.js +7 -0
  267. package/make.js +39 -0
  268. package/package.json +17 -12
  269. package/patches/@permaweb+ao-loader+0.0.44.patch +64 -0
  270. package/plan.md +435 -0
  271. package/rebar.lock +1 -0
  272. package/src/accounts-web.js +128 -0
  273. package/src/accounts.js +124 -0
  274. package/src/adaptor-base.js +622 -0
  275. package/src/adaptor-cf.js +11 -0
  276. package/src/adaptor-web.js +11 -0
  277. package/src/adaptor.js +10 -0
  278. package/src/ao-loader.js +30660 -0
  279. package/src/ao.js +1173 -0
  280. package/src/aoconnect-base.js +1098 -0
  281. package/src/aoconnect-cf.js +9 -0
  282. package/src/aoconnect-web.js +8 -0
  283. package/src/aoconnect.js +8 -0
  284. package/src/aos_wamr.js +1 -0
  285. package/src/ar-remote.js +87 -0
  286. package/src/ar.js +276 -0
  287. package/src/armem-base.js +529 -0
  288. package/src/armem-cf.js +67 -0
  289. package/src/armem-web.js +19 -0
  290. package/src/armem.js +26 -0
  291. package/src/bao.js +141 -0
  292. package/src/bar.js +366 -0
  293. package/src/build.js +7 -0
  294. package/src/bundler.js +119 -0
  295. package/src/car.js +10 -0
  296. package/src/cf-env.js +29 -0
  297. package/src/cf.js +11 -0
  298. package/src/cli.js +561 -0
  299. package/src/compress.js +112 -0
  300. package/src/create.js +415 -0
  301. package/src/devs.js +86 -0
  302. package/src/dirname.js +1 -0
  303. package/src/dodb.js +26 -0
  304. package/src/erl_json.js +289 -0
  305. package/src/erl_str.js +1139 -0
  306. package/src/gql.js +229 -0
  307. package/src/hb.js +967 -0
  308. package/src/helpers.js +203 -0
  309. package/src/http.js +619 -0
  310. package/src/hub/bundler.js +123 -0
  311. package/src/hub/cu.js +74 -0
  312. package/src/hub/fs.js +157 -0
  313. package/src/hub/index.js +85 -0
  314. package/src/hub/utils.js +64 -0
  315. package/src/hub/ws-proxy.js +67 -0
  316. package/src/hyper-aos.js +1 -0
  317. package/src/hyperbeam-server.js +21 -0
  318. package/src/hyperbeam.js +585 -0
  319. package/src/index.js +5 -0
  320. package/src/keygen.js +47 -0
  321. package/src/lfdb.js +67 -0
  322. package/src/lua/aos.wasm +0 -0
  323. package/src/lua/aos2_0_1.js +1 -0
  324. package/src/lua/aos2_0_1.wasm +0 -0
  325. package/src/lua/aos2_0_3.js +1 -0
  326. package/src/lua/aos2_0_3.wasm +0 -0
  327. package/src/lua/aos2_0_4_32.js +1 -0
  328. package/src/lua/aos2_0_4_32.wasm +0 -0
  329. package/src/lua/aos2_0_6.wasm +0 -0
  330. package/src/lua/apm.lua +61 -0
  331. package/src/lua/llama.wasm +0 -0
  332. package/src/lua/process.wasm +0 -0
  333. package/src/lua/sqlite.js +1 -0
  334. package/src/lua/sqlite.wasm +0 -0
  335. package/src/lua/weavedb_mock.lua +44 -0
  336. package/src/lua/weavedrive.lua +53 -0
  337. package/src/run.js +25 -0
  338. package/src/server.js +173 -0
  339. package/src/storage-multi.js +183 -0
  340. package/src/tao.js +12 -0
  341. package/src/tar.js +10 -0
  342. package/src/test.js +42 -0
  343. package/src/tgql-d1.js +407 -0
  344. package/src/tgql.js +310 -0
  345. package/src/toerl.js +162 -0
  346. package/src/utils.js +777 -0
  347. package/src/wao.js +29 -0
  348. package/src/waosm/README.md +81 -0
  349. package/src/waosm/waosm.d.ts +40 -0
  350. package/src/waosm/waosm.js +240 -0
  351. package/src/waosm/waosm_bg.wasm +0 -0
  352. package/src/waosm/waosm_bg.wasm.d.ts +8 -0
  353. package/src/waosm-node/README.md +81 -0
  354. package/src/waosm-node/waosm.d.ts +8 -0
  355. package/src/waosm-node/waosm.js +4 -0
  356. package/src/waosm-node/waosm_bg.js +147 -0
  357. package/src/waosm-node/waosm_bg.wasm +0 -0
  358. package/src/waosm-node/waosm_bg.wasm.d.ts +8 -0
  359. package/src/waosm-node/waosm_bg.wasm.js +14 -0
  360. package/src/waosm-node.js +9 -0
  361. package/src/war.js +10 -0
  362. package/src/weavedrive.js +376 -0
  363. package/src/web.js +11 -0
  364. package/src/workspace/.mcp.json +8 -0
  365. package/src/workspace/CLAUDE.md +258 -0
  366. package/src/workspace/README.md +85 -0
  367. package/src/workspace/dashboard/index.html +163 -0
  368. package/src/workspace/dashboard/package.json +18 -0
  369. package/src/workspace/dashboard/public/favicon.ico +0 -0
  370. package/src/workspace/dashboard/public/favicon.png +0 -0
  371. package/src/workspace/dashboard/server.js +224 -0
  372. package/src/workspace/dashboard/src/App.jsx +2350 -0
  373. package/{cjs/workspace/frontend → src/workspace/dashboard}/vite.config.js +6 -0
  374. package/src/workspace/package.json +18 -0
  375. package/src/workspace/src/counter.lua +14 -0
  376. package/tsconfig.json +18 -0
  377. package/types/index.d.ts +329 -0
  378. package/waollama/.eslintrc.json +3 -0
  379. package/waollama/README.md +19 -0
  380. package/waollama/arweave.mjs +87 -0
  381. package/waollama/components/ui/avatar.jsx +49 -0
  382. package/waollama/components/ui/checkbox.jsx +17 -0
  383. package/waollama/components/ui/close-button.jsx +20 -0
  384. package/waollama/components/ui/color-mode.jsx +61 -0
  385. package/waollama/components/ui/dialog.jsx +54 -0
  386. package/waollama/components/ui/drawer.jsx +44 -0
  387. package/waollama/components/ui/field.jsx +22 -0
  388. package/waollama/components/ui/input-group.jsx +39 -0
  389. package/waollama/components/ui/popover.jsx +49 -0
  390. package/waollama/components/ui/provider.jsx +12 -0
  391. package/waollama/components/ui/radio.jsx +17 -0
  392. package/waollama/components/ui/slider.jsx +107 -0
  393. package/waollama/components/ui/tooltip.jsx +35 -0
  394. package/waollama/index.js +10 -0
  395. package/waollama/jsconfig.json +7 -0
  396. package/waollama/lib/ao-loader.js +30654 -0
  397. package/waollama/lib/client.js +1 -0
  398. package/waollama/lib/wasm.js +1 -0
  399. package/waollama/next.config.js +25 -0
  400. package/waollama/package.json +43 -0
  401. package/waollama/pages/404.js +9 -0
  402. package/waollama/pages/_app.js +9 -0
  403. package/waollama/pages/_document.js +14 -0
  404. package/waollama/pages/index.js +212 -0
  405. package/waollama/playwright.config.js +31 -0
  406. package/waollama/proxy.mjs +21 -0
  407. package/waollama/public/favicon.ico +0 -0
  408. package/waollama/public/human.png +0 -0
  409. package/waollama/public/llama.png +0 -0
  410. package/waosm/Cargo.toml +11 -0
  411. package/waosm/README.md +81 -0
  412. package/waosm/compress.js +112 -0
  413. package/waosm/make.js +33 -0
  414. package/waosm/package.json +10 -0
  415. package/waosm/src/lib.rs +180 -0
  416. package/waosm/test.js +16 -0
  417. package/cjs/workspace/.claude/agents/builder.md +0 -99
  418. package/cjs/workspace/.claude/agents/device-builder.md +0 -86
  419. package/cjs/workspace/.claude/agents/tester.md +0 -90
  420. package/cjs/workspace/.claude/mcp/dashboard/server.js +0 -128
  421. package/cjs/workspace/.claude/rules/deploy.md +0 -45
  422. package/cjs/workspace/.claude/rules/frontend.md +0 -69
  423. package/cjs/workspace/.claude/rules/hyperbeam.md +0 -104
  424. package/cjs/workspace/.claude/rules/lua.md +0 -108
  425. package/cjs/workspace/.claude/rules/testing.md +0 -257
  426. package/cjs/workspace/.claude/settings.json +0 -109
  427. package/cjs/workspace/.claude/skills/build/SKILL.md +0 -214
  428. package/cjs/workspace/.claude/skills/build-aos/SKILL.md +0 -129
  429. package/cjs/workspace/.claude/skills/build-device/SKILL.md +0 -192
  430. package/cjs/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
  431. package/cjs/workspace/.claude/skills/build-module/SKILL.md +0 -281
  432. package/cjs/workspace/.claude/skills/create-aos/SKILL.md +0 -63
  433. package/cjs/workspace/.claude/skills/create-device/SKILL.md +0 -87
  434. package/cjs/workspace/.claude/skills/create-module/SKILL.md +0 -162
  435. package/cjs/workspace/.claude/skills/debug/SKILL.md +0 -57
  436. package/cjs/workspace/.claude/skills/deploy/SKILL.md +0 -85
  437. package/cjs/workspace/.claude/skills/dev/SKILL.md +0 -32
  438. package/cjs/workspace/.claude/skills/plan/SKILL.md +0 -176
  439. package/cjs/workspace/.claude/skills/readme/SKILL.md +0 -186
  440. package/cjs/workspace/.claude/skills/report/SKILL.md +0 -49
  441. package/cjs/workspace/.claude/skills/team/SKILL.md +0 -101
  442. package/cjs/workspace/.claude/skills/test/SKILL.md +0 -56
  443. package/cjs/workspace/.claude/skills/test-device/SKILL.md +0 -114
  444. package/cjs/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
  445. package/cjs/workspace/.claude/skills/test-hb/SKILL.md +0 -76
  446. package/cjs/workspace/.claude/skills/validate/SKILL.md +0 -96
  447. package/cjs/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
  448. package/cjs/workspace/docs/aos-lua.md +0 -428
  449. package/cjs/workspace/docs/debug.md +0 -230
  450. package/cjs/workspace/docs/hyperbeam-dev.md +0 -606
  451. package/cjs/workspace/docs/hyperbeam-devices.md +0 -618
  452. package/cjs/workspace/docs/wao-sdk.md +0 -807
  453. package/cjs/workspace/frontend/e2e/.gitkeep +0 -0
  454. package/cjs/workspace/frontend/index.html +0 -12
  455. package/cjs/workspace/frontend/package.json +0 -24
  456. package/cjs/workspace/frontend/playwright.config.js +0 -10
  457. package/cjs/workspace/frontend/src/App.jsx +0 -24
  458. package/cjs/workspace/frontend/test/.gitkeep +0 -0
  459. package/cjs/workspace/frontend/vitest.config.js +0 -10
  460. package/cjs/workspace/scripts/deploy.js +0 -140
  461. package/cjs/workspace/scripts/keygen.js +0 -52
  462. package/cjs/workspace/test/aos.test.js +0 -98
  463. package/cjs/workspace/test/hyperbeam.test.js +0 -80
  464. package/esm/compiler/native +0 -0
  465. package/esm/workspace/.claude/agents/builder.md +0 -99
  466. package/esm/workspace/.claude/agents/device-builder.md +0 -86
  467. package/esm/workspace/.claude/agents/tester.md +0 -90
  468. package/esm/workspace/.claude/mcp/dashboard/server.js +0 -128
  469. package/esm/workspace/.claude/rules/deploy.md +0 -45
  470. package/esm/workspace/.claude/rules/frontend.md +0 -69
  471. package/esm/workspace/.claude/rules/hyperbeam.md +0 -104
  472. package/esm/workspace/.claude/rules/lua.md +0 -108
  473. package/esm/workspace/.claude/rules/testing.md +0 -257
  474. package/esm/workspace/.claude/settings.json +0 -109
  475. package/esm/workspace/.claude/skills/build/SKILL.md +0 -214
  476. package/esm/workspace/.claude/skills/build-aos/SKILL.md +0 -129
  477. package/esm/workspace/.claude/skills/build-device/SKILL.md +0 -192
  478. package/esm/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
  479. package/esm/workspace/.claude/skills/build-module/SKILL.md +0 -281
  480. package/esm/workspace/.claude/skills/create-aos/SKILL.md +0 -63
  481. package/esm/workspace/.claude/skills/create-device/SKILL.md +0 -87
  482. package/esm/workspace/.claude/skills/create-module/SKILL.md +0 -162
  483. package/esm/workspace/.claude/skills/debug/SKILL.md +0 -57
  484. package/esm/workspace/.claude/skills/deploy/SKILL.md +0 -85
  485. package/esm/workspace/.claude/skills/dev/SKILL.md +0 -32
  486. package/esm/workspace/.claude/skills/plan/SKILL.md +0 -176
  487. package/esm/workspace/.claude/skills/readme/SKILL.md +0 -186
  488. package/esm/workspace/.claude/skills/report/SKILL.md +0 -49
  489. package/esm/workspace/.claude/skills/team/SKILL.md +0 -101
  490. package/esm/workspace/.claude/skills/test/SKILL.md +0 -56
  491. package/esm/workspace/.claude/skills/test-device/SKILL.md +0 -114
  492. package/esm/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
  493. package/esm/workspace/.claude/skills/test-hb/SKILL.md +0 -76
  494. package/esm/workspace/.claude/skills/validate/SKILL.md +0 -96
  495. package/esm/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
  496. package/esm/workspace/docs/aos-lua.md +0 -428
  497. package/esm/workspace/docs/debug.md +0 -230
  498. package/esm/workspace/docs/hyperbeam-dev.md +0 -606
  499. package/esm/workspace/docs/hyperbeam-devices.md +0 -618
  500. package/esm/workspace/docs/wao-sdk.md +0 -807
  501. package/esm/workspace/frontend/e2e/.gitkeep +0 -0
  502. package/esm/workspace/frontend/index.html +0 -12
  503. package/esm/workspace/frontend/package.json +0 -24
  504. package/esm/workspace/frontend/playwright.config.js +0 -10
  505. package/esm/workspace/frontend/src/App.jsx +0 -24
  506. package/esm/workspace/frontend/src/main.jsx +0 -9
  507. package/esm/workspace/frontend/test/.gitkeep +0 -0
  508. package/esm/workspace/frontend/vite.config.js +0 -6
  509. package/esm/workspace/frontend/vitest.config.js +0 -10
  510. package/esm/workspace/scripts/deploy.js +0 -140
  511. package/esm/workspace/scripts/keygen.js +0 -52
  512. package/esm/workspace/test/aos.test.js +0 -98
  513. package/esm/workspace/test/hyperbeam.test.js +0 -80
  514. /package/{cjs/workspace/dashboard/public → devnet/app}/favicon.ico +0 -0
  515. /package/{cjs/workspace → dhfs-tutorial-app}/src/counter.lua +0 -0
  516. /package/{cjs → dist/cjs}/accounts-web.js +0 -0
  517. /package/{cjs → dist/cjs}/accounts.js +0 -0
  518. /package/{cjs → dist/cjs}/adaptor-base.js +0 -0
  519. /package/{cjs → dist/cjs}/adaptor-cf.js +0 -0
  520. /package/{cjs → dist/cjs}/adaptor-web.js +0 -0
  521. /package/{cjs → dist/cjs}/adaptor.js +0 -0
  522. /package/{cjs → dist/cjs}/ao-loader.js +0 -0
  523. /package/{cjs → dist/cjs}/ao.js +0 -0
  524. /package/{cjs → dist/cjs}/aoconnect-base.js +0 -0
  525. /package/{cjs → dist/cjs}/aoconnect-cf.js +0 -0
  526. /package/{cjs → dist/cjs}/aoconnect-web.js +0 -0
  527. /package/{cjs → dist/cjs}/aoconnect.js +0 -0
  528. /package/{cjs → dist/cjs}/aos_wamr.js +0 -0
  529. /package/{cjs → dist/cjs}/ar-remote.js +0 -0
  530. /package/{cjs → dist/cjs}/ar.js +0 -0
  531. /package/{cjs → dist/cjs}/armem-base.js +0 -0
  532. /package/{cjs → dist/cjs}/armem-cf.js +0 -0
  533. /package/{cjs → dist/cjs}/armem-web.js +0 -0
  534. /package/{cjs → dist/cjs}/armem.js +0 -0
  535. /package/{cjs → dist/cjs}/bao.js +0 -0
  536. /package/{cjs → dist/cjs}/bar.js +0 -0
  537. /package/{cjs → dist/cjs}/build.js +0 -0
  538. /package/{cjs → dist/cjs}/bundler.js +0 -0
  539. /package/{cjs → dist/cjs}/car.js +0 -0
  540. /package/{cjs → dist/cjs}/cf-env.js +0 -0
  541. /package/{cjs → dist/cjs}/cf.js +0 -0
  542. /package/{cjs → dist/cjs}/cli.js +0 -0
  543. /package/{cjs → dist/cjs}/compress.js +0 -0
  544. /package/{cjs → dist/cjs}/create.js +0 -0
  545. /package/{cjs → dist/cjs}/devs.js +0 -0
  546. /package/{cjs → dist/cjs}/dirname.js +0 -0
  547. /package/{cjs → dist/cjs}/dodb.js +0 -0
  548. /package/{cjs → dist/cjs}/erl_json.js +0 -0
  549. /package/{cjs → dist/cjs}/erl_str.js +0 -0
  550. /package/{cjs → dist/cjs}/gql.js +0 -0
  551. /package/{cjs → dist/cjs}/hb.js +0 -0
  552. /package/{cjs → dist/cjs}/helpers.js +0 -0
  553. /package/{cjs → dist/cjs}/http.js +0 -0
  554. /package/{cjs → dist/cjs}/hub/bundler.js +0 -0
  555. /package/{cjs → dist/cjs}/hub/cu.js +0 -0
  556. /package/{cjs → dist/cjs}/hub/fs.js +0 -0
  557. /package/{cjs → dist/cjs}/hub/index.js +0 -0
  558. /package/{cjs → dist/cjs}/hub/utils.js +0 -0
  559. /package/{cjs → dist/cjs}/hub/ws-proxy.js +0 -0
  560. /package/{cjs → dist/cjs}/hyper-aos.js +0 -0
  561. /package/{cjs → dist/cjs}/hyperbeam-server.js +0 -0
  562. /package/{cjs → dist/cjs}/hyperbeam.js +0 -0
  563. /package/{cjs → dist/cjs}/index.js +0 -0
  564. /package/{cjs → dist/cjs}/keygen.js +0 -0
  565. /package/{cjs → dist/cjs}/lfdb.js +0 -0
  566. /package/{cjs → dist/cjs}/lua/aos.wasm +0 -0
  567. /package/{cjs → dist/cjs}/lua/aos2_0_1.js +0 -0
  568. /package/{cjs → dist/cjs}/lua/aos2_0_1.wasm +0 -0
  569. /package/{cjs → dist/cjs}/lua/aos2_0_3.js +0 -0
  570. /package/{cjs → dist/cjs}/lua/aos2_0_3.wasm +0 -0
  571. /package/{cjs → dist/cjs}/lua/aos2_0_4_32.js +0 -0
  572. /package/{cjs → dist/cjs}/lua/aos2_0_4_32.wasm +0 -0
  573. /package/{cjs → dist/cjs}/lua/aos2_0_6.wasm +0 -0
  574. /package/{cjs → dist/cjs}/lua/apm.lua +0 -0
  575. /package/{cjs → dist/cjs}/lua/llama.wasm +0 -0
  576. /package/{cjs → dist/cjs}/lua/process.wasm +0 -0
  577. /package/{cjs → dist/cjs}/lua/sqlite.js +0 -0
  578. /package/{cjs → dist/cjs}/lua/sqlite.wasm +0 -0
  579. /package/{cjs → dist/cjs}/lua/weavedb_mock.lua +0 -0
  580. /package/{cjs → dist/cjs}/lua/weavedrive.lua +0 -0
  581. /package/{cjs → dist/cjs}/run.js +0 -0
  582. /package/{cjs → dist/cjs}/server.js +0 -0
  583. /package/{cjs → dist/cjs}/storage-multi.js +0 -0
  584. /package/{cjs → dist/cjs}/tao.js +0 -0
  585. /package/{cjs → dist/cjs}/tar.js +0 -0
  586. /package/{cjs → dist/cjs}/test.js +0 -0
  587. /package/{cjs → dist/cjs}/tgql-d1.js +0 -0
  588. /package/{cjs → dist/cjs}/tgql.js +0 -0
  589. /package/{cjs → dist/cjs}/toerl.js +0 -0
  590. /package/{cjs → dist/cjs}/utils.js +0 -0
  591. /package/{cjs → dist/cjs}/wao.js +0 -0
  592. /package/{cjs → dist/cjs}/waosm/waosm.js +0 -0
  593. /package/{cjs → dist/cjs}/waosm-node/waosm.js +0 -0
  594. /package/{cjs → dist/cjs}/waosm-node/waosm_bg.js +0 -0
  595. /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm +0 -0
  596. /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm.js +0 -0
  597. /package/{cjs → dist/cjs}/waosm-node.js +0 -0
  598. /package/{cjs → dist/cjs}/war.js +0 -0
  599. /package/{cjs → dist/cjs}/weavedrive.js +0 -0
  600. /package/{cjs → dist/cjs}/web.js +0 -0
  601. /package/{cjs → dist/cjs}/workspace/.mcp.json +0 -0
  602. /package/{cjs → dist/cjs}/workspace/CLAUDE.md +0 -0
  603. /package/{cjs → dist/cjs}/workspace/README.md +0 -0
  604. /package/{cjs → dist/cjs}/workspace/dashboard/index.html +0 -0
  605. /package/{cjs → dist/cjs}/workspace/dashboard/package.json +0 -0
  606. /package/{esm → dist/cjs}/workspace/dashboard/public/favicon.ico +0 -0
  607. /package/{cjs → dist/cjs}/workspace/dashboard/public/favicon.png +0 -0
  608. /package/{cjs → dist/cjs}/workspace/dashboard/server.js +0 -0
  609. /package/{cjs → dist/cjs}/workspace/dashboard/src/App.jsx +0 -0
  610. /package/{cjs → dist/cjs}/workspace/dashboard/src/main.jsx +0 -0
  611. /package/{cjs → dist/cjs}/workspace/dashboard/vite.config.js +0 -0
  612. /package/{cjs → dist/cjs}/workspace/package.json +0 -0
  613. /package/{esm → dist/cjs}/workspace/src/counter.lua +0 -0
  614. /package/{esm → dist/esm}/accounts-web.js +0 -0
  615. /package/{esm → dist/esm}/accounts.js +0 -0
  616. /package/{esm → dist/esm}/adaptor-base.js +0 -0
  617. /package/{esm → dist/esm}/adaptor-cf.js +0 -0
  618. /package/{esm → dist/esm}/adaptor-web.js +0 -0
  619. /package/{esm → dist/esm}/adaptor.js +0 -0
  620. /package/{esm → dist/esm}/ao-loader.js +0 -0
  621. /package/{esm → dist/esm}/ao.js +0 -0
  622. /package/{esm → dist/esm}/aoconnect-base.js +0 -0
  623. /package/{esm → dist/esm}/aoconnect-cf.js +0 -0
  624. /package/{esm → dist/esm}/aoconnect-web.js +0 -0
  625. /package/{esm → dist/esm}/aoconnect.js +0 -0
  626. /package/{esm → dist/esm}/aos_wamr.js +0 -0
  627. /package/{esm → dist/esm}/ar-remote.js +0 -0
  628. /package/{esm → dist/esm}/ar.js +0 -0
  629. /package/{esm → dist/esm}/armem-base.js +0 -0
  630. /package/{esm → dist/esm}/armem-cf.js +0 -0
  631. /package/{esm → dist/esm}/armem-web.js +0 -0
  632. /package/{esm → dist/esm}/armem.js +0 -0
  633. /package/{esm → dist/esm}/bao.js +0 -0
  634. /package/{esm → dist/esm}/bar.js +0 -0
  635. /package/{esm → dist/esm}/build.js +0 -0
  636. /package/{esm → dist/esm}/bundler.js +0 -0
  637. /package/{esm → dist/esm}/car.js +0 -0
  638. /package/{esm → dist/esm}/cf-env.js +0 -0
  639. /package/{esm → dist/esm}/cf.js +0 -0
  640. /package/{esm → dist/esm}/cli.js +0 -0
  641. /package/{esm → dist/esm}/compress.js +0 -0
  642. /package/{esm → dist/esm}/create.js +0 -0
  643. /package/{esm → dist/esm}/devs.js +0 -0
  644. /package/{esm → dist/esm}/dirname.js +0 -0
  645. /package/{esm → dist/esm}/dodb.js +0 -0
  646. /package/{esm → dist/esm}/erl_json.js +0 -0
  647. /package/{esm → dist/esm}/erl_str.js +0 -0
  648. /package/{esm → dist/esm}/gql.js +0 -0
  649. /package/{esm → dist/esm}/hb.js +0 -0
  650. /package/{esm → dist/esm}/helpers.js +0 -0
  651. /package/{esm → dist/esm}/http.js +0 -0
  652. /package/{esm → dist/esm}/hub/bundler.js +0 -0
  653. /package/{esm → dist/esm}/hub/cu.js +0 -0
  654. /package/{esm → dist/esm}/hub/fs.js +0 -0
  655. /package/{esm → dist/esm}/hub/index.js +0 -0
  656. /package/{esm → dist/esm}/hub/utils.js +0 -0
  657. /package/{esm → dist/esm}/hub/ws-proxy.js +0 -0
  658. /package/{esm → dist/esm}/hyper-aos.js +0 -0
  659. /package/{esm → dist/esm}/hyperbeam-server.js +0 -0
  660. /package/{esm → dist/esm}/hyperbeam.js +0 -0
  661. /package/{esm → dist/esm}/index.js +0 -0
  662. /package/{esm → dist/esm}/keygen.js +0 -0
  663. /package/{esm → dist/esm}/lfdb.js +0 -0
  664. /package/{esm → dist/esm}/lua/aos.wasm +0 -0
  665. /package/{esm → dist/esm}/lua/aos2_0_1.js +0 -0
  666. /package/{esm → dist/esm}/lua/aos2_0_1.wasm +0 -0
  667. /package/{esm → dist/esm}/lua/aos2_0_3.js +0 -0
  668. /package/{esm → dist/esm}/lua/aos2_0_3.wasm +0 -0
  669. /package/{esm → dist/esm}/lua/aos2_0_4_32.js +0 -0
  670. /package/{esm → dist/esm}/lua/aos2_0_4_32.wasm +0 -0
  671. /package/{esm → dist/esm}/lua/aos2_0_6.wasm +0 -0
  672. /package/{esm → dist/esm}/lua/apm.lua +0 -0
  673. /package/{esm → dist/esm}/lua/llama.wasm +0 -0
  674. /package/{esm → dist/esm}/lua/process.wasm +0 -0
  675. /package/{esm → dist/esm}/lua/sqlite.js +0 -0
  676. /package/{esm → dist/esm}/lua/sqlite.wasm +0 -0
  677. /package/{esm → dist/esm}/lua/weavedb_mock.lua +0 -0
  678. /package/{esm → dist/esm}/lua/weavedrive.lua +0 -0
  679. /package/{esm → dist/esm}/package.json +0 -0
  680. /package/{esm → dist/esm}/run.js +0 -0
  681. /package/{esm → dist/esm}/server.js +0 -0
  682. /package/{esm → dist/esm}/storage-multi.js +0 -0
  683. /package/{esm → dist/esm}/tao.js +0 -0
  684. /package/{esm → dist/esm}/tar.js +0 -0
  685. /package/{esm → dist/esm}/test.js +0 -0
  686. /package/{esm → dist/esm}/tgql-d1.js +0 -0
  687. /package/{esm → dist/esm}/tgql.js +0 -0
  688. /package/{esm → dist/esm}/toerl.js +0 -0
  689. /package/{esm → dist/esm}/utils.js +0 -0
  690. /package/{esm → dist/esm}/wao.js +0 -0
  691. /package/{esm → dist/esm}/waosm/README.md +0 -0
  692. /package/{esm → dist/esm}/waosm/waosm.d.ts +0 -0
  693. /package/{esm → dist/esm}/waosm/waosm.js +0 -0
  694. /package/{esm → dist/esm}/waosm/waosm_bg.wasm +0 -0
  695. /package/{esm → dist/esm}/waosm/waosm_bg.wasm.d.ts +0 -0
  696. /package/{esm → dist/esm}/waosm-node/README.md +0 -0
  697. /package/{esm → dist/esm}/waosm-node/waosm.d.ts +0 -0
  698. /package/{esm → dist/esm}/waosm-node/waosm.js +0 -0
  699. /package/{esm → dist/esm}/waosm-node/waosm_bg.js +0 -0
  700. /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm +0 -0
  701. /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.d.ts +0 -0
  702. /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.js +0 -0
  703. /package/{esm → dist/esm}/waosm-node.js +0 -0
  704. /package/{esm → dist/esm}/war.js +0 -0
  705. /package/{esm → dist/esm}/weavedrive.js +0 -0
  706. /package/{esm → dist/esm}/web.js +0 -0
  707. /package/{esm → dist/esm}/workspace/.mcp.json +0 -0
  708. /package/{esm → dist/esm}/workspace/CLAUDE.md +0 -0
  709. /package/{esm → dist/esm}/workspace/README.md +0 -0
  710. /package/{esm → dist/esm}/workspace/dashboard/index.html +0 -0
  711. /package/{esm → dist/esm}/workspace/dashboard/package.json +0 -0
  712. /package/{esm/workspace/dashboard/public/favicon.png → dist/esm/workspace/dashboard/public/favicon.ico} +0 -0
  713. /package/{esm → dist/esm}/workspace/dashboard/server.js +0 -0
  714. /package/{esm → dist/esm}/workspace/dashboard/src/App.jsx +0 -0
  715. /package/{cjs/workspace/frontend → dist/esm/workspace/dashboard}/src/main.jsx +0 -0
  716. /package/{esm → dist/esm}/workspace/dashboard/vite.config.js +0 -0
  717. /package/{esm → dist/esm}/workspace/package.json +0 -0
  718. /package/{postinstall.cjs → dist/postinstall.cjs} +0 -0
  719. /package/{esm → src}/workspace/dashboard/src/main.jsx +0 -0
@@ -0,0 +1,1128 @@
1
+ // react
2
+ import { useRef, useEffect } from "react"
3
+ import use from "/lib/use"
4
+ import { AR } from "wao"
5
+
6
+ // chakra-ui
7
+ import { Box, Flex, Icon } from "@chakra-ui/react"
8
+ import { toaster } from "@/components/ui/toaster"
9
+
10
+ import {
11
+ FaRegFolder,
12
+ FaRegFolderOpen,
13
+ FaAngleDown,
14
+ FaAngleRight,
15
+ } from "react-icons/fa6"
16
+
17
+ //data
18
+ import { mod, hb_url } from "/lib/data"
19
+
20
+ // ao
21
+ import { Bundle } from "arbundles"
22
+
23
+ // utils
24
+ import chalk from "chalk"
25
+ import lf from "localforage"
26
+
27
+ import {
28
+ ftype,
29
+ getPreview,
30
+ useResizeObserver,
31
+ resolvePath,
32
+ tags,
33
+ toAddr,
34
+ isWasm64,
35
+ } from "/lib/utils"
36
+
37
+ import g from "/lib/global"
38
+
39
+ import {
40
+ prop,
41
+ indexBy,
42
+ includes,
43
+ clone,
44
+ map,
45
+ filter,
46
+ mergeLeft,
47
+ addIndex,
48
+ prepend,
49
+ sortBy,
50
+ } from "ramda"
51
+
52
+ // wao sdk
53
+ import { AO, acc } from "wao/web"
54
+
55
+ // guide
56
+ import { bps, bfiles } from "/lib/guide"
57
+
58
+ const tg = m => m?.msg?.Tags ?? m?.tags ?? m?.tags ?? []
59
+
60
+ export default function Global({}) {
61
+ g.filesRef = useRef(null)
62
+ g.openFilesRef = useRef(null)
63
+ g.editorRef = useRef(null)
64
+ g.fileRef = useRef(null)
65
+ g.containerRef = useRef(null)
66
+ g.walletRef = useRef(null)
67
+ g.fileInputRef = useRef(null)
68
+
69
+ const { width, height } = useResizeObserver(g.containerRef)
70
+ const [path, setPath] = use("path")
71
+ const [blocks, setBlocks] = use("blocks")
72
+ const [entity, setEntity] = use("entity")
73
+ const [projects, setProjects] = use("projects")
74
+ const [tab, setTab] = use("tab")
75
+ const [ctype, setCtype] = use("ctype")
76
+ const [cache, setCache] = use("cache")
77
+ const [init, setInit] = use("init")
78
+ const [dryrun, setDryrun] = use("dryrun")
79
+ const [proc, setProc] = use("proc")
80
+ const [file, setFile] = use("file")
81
+ const [previewContent, setPreviewContent] = use("previewContent")
82
+ const [logs, setLogs] = use("logs")
83
+ const [localFS, setLocalFS] = use("localFS")
84
+ const [localFSOpen, setLocalFSOpen] = use("localFSOpen")
85
+ const [wallet, setWallet] = use("wallet")
86
+ const [modules, setModules] = use("modules")
87
+ const [module, setModule] = use("module")
88
+ const [procs, setProcs] = use("procs")
89
+ const [messages, setMessages] = use("messages")
90
+ const [message, setMessage] = use("message")
91
+ const [files, setFiles] = use("files")
92
+ const [openFiles, setOpenFiles] = use("openFiles")
93
+ const [preview, setPreview] = use("preview")
94
+ const [selDir, setSelDir] = use("selDir")
95
+ const [networks, setNetworks] = use("networks")
96
+ const [terminal, setTerminal] = use("terminal")
97
+ const [wasm64, setWasm64] = use("wasm64")
98
+ useEffect(() => {
99
+ isWasm64().then(support => setWasm64(support))
100
+ g.dryrun = true
101
+ g.peer2 = {}
102
+ }, [])
103
+
104
+ useEffect(() => {
105
+ ;(async () => {
106
+ if (proc && g.ao && proc.id !== terminal) await g.connectProc(proc)
107
+ //if (proc) g.updateMsgs()
108
+ })()
109
+ }, [proc])
110
+
111
+ useEffect(() => {
112
+ if (g.fitAddon) g.fitAddon.fit()
113
+ }, [height, width])
114
+
115
+ useEffect(() => {
116
+ const handler = e => {
117
+ const el = e.target.closest("a.relative-link")
118
+ if (el) {
119
+ e.preventDefault()
120
+ const href = el.getAttribute("data-href")
121
+ const idmap = []
122
+ const get = (p, d) => {
123
+ for (let v of g.filesRef.current) {
124
+ if (v.pid === g.fileRef.current.pid) {
125
+ if (v.path === p) {
126
+ idmap.push({
127
+ ...v,
128
+ dirname: d,
129
+ filename: `${d}${v.name}${v.dir ? "/" : ""}`,
130
+ })
131
+ if (v.dir) get(`${p}${v.id}/`, `${d}${v.name}/`)
132
+ }
133
+ }
134
+ }
135
+ }
136
+ get("/", "/")
137
+ const idmap2 = indexBy(prop("filename"))(idmap)
138
+ const idmap3 = indexBy(prop("id"))(idmap)
139
+ const p = decodeURIComponent(
140
+ resolvePath(idmap3[g.fileRef.current.id].dirname, href)
141
+ )
142
+ if (idmap2[p]) g.clickFile(idmap2[p])
143
+ }
144
+ }
145
+ document.addEventListener("click", handler)
146
+ return () => document.removeEventListener("click", handler)
147
+ }, [])
148
+ useEffect(() => {
149
+ if (init) {
150
+ switch (tab) {
151
+ case "Processes":
152
+ g.listProcesses()
153
+ case "Modules":
154
+ g.listModules()
155
+ case "Blocks":
156
+ g.listBlocks()
157
+ case "Messages":
158
+ g.listMessages()
159
+ }
160
+ }
161
+ }, [tab, init])
162
+ useEffect(() => {
163
+ ;(async () => {
164
+ const _wallet = await lf.getItem("wallet")
165
+ if (_wallet) {
166
+ g.walletRef.current = _wallet
167
+ setWallet(_wallet)
168
+ }
169
+ })()
170
+ }, [])
171
+
172
+ useEffect(() => {
173
+ g.dryrun = dryrun
174
+ }, [dryrun])
175
+
176
+ useEffect(() => {
177
+ ;(async () => {
178
+ const _prs = await lf.getItem("projects")
179
+ if (_prs) setProjects(_prs)
180
+ let _files = (await lf.getItem("files")) ?? []
181
+ setFiles([...bfiles, ...bps, ..._files])
182
+ const networks = await lf.getItem("networks")
183
+ if (networks) setNetworks(networks)
184
+ })()
185
+ }, [])
186
+
187
+ useEffect(() => {
188
+ g.fileRef.current = file
189
+ }, [file])
190
+
191
+ useEffect(() => {
192
+ g.openFilesRef.current = openFiles
193
+ }, [openFiles])
194
+
195
+ useEffect(() => {
196
+ g.filesRef.current = [...(localFS ?? []), ...files]
197
+ }, [files, localFS])
198
+
199
+ useEffect(() => {
200
+ ;(async () => {
201
+ // wao 0.41.x: in-memory mode is the app's primary runtime — the IDE's
202
+ // sidebar/middle panels read from `ao.mem.{env,msgs,txs,modules,wasms,
203
+ // blockmap}` and the Adaptor proxy/FS modal exposes that state to a
204
+ // separately-connected HyperBEAM via WebSocket. `hb_url` is consumed by
205
+ // ProxyModal/FSModal/LeftNetworks when the user wires up a connection.
206
+ g.ao = await new AO({ variant: cache }).init(acc[0])
207
+ await g.ao.mem.init()
208
+ // Expose `g` on window in dev so Playwright E2E tests can probe state
209
+ // (AO instance, mem, processes, modules). Stripped automatically from
210
+ // production bundles because process.env.NODE_ENV folds to "production".
211
+ if (typeof window !== "undefined" && process.env.NODE_ENV !== "production") {
212
+ window.g = g
213
+ }
214
+ g.listModules()
215
+ g.listProcesses()
216
+ g.listMessages()
217
+ g.listBlocks()
218
+ g._setModule(mod)
219
+ setMessage(null)
220
+ setInit(true)
221
+ })()
222
+ }, [cache])
223
+
224
+ useEffect(() => {
225
+ if (init && g.ao) {
226
+ ;(async () => {
227
+ let default_process = await lf.getItem("default_process")
228
+ if (!default_process) {
229
+ const { p, pid } = await g.ao.deploy({
230
+ module: mod,
231
+ tags: { Name: "Default Process" },
232
+ })
233
+ g.logSpawn(pid)
234
+ default_process = { id: pid }
235
+ await lf.setItem("default_process", default_process)
236
+ }
237
+ g.welcome()
238
+ g._setProcess(default_process.id)
239
+ })()
240
+ }
241
+ }, [init])
242
+
243
+ g.msg = id => {
244
+ let proc = g.ao.mem.env[id] ?? null
245
+ if (proc) {
246
+ proc = clone(proc)
247
+ delete proc.memory
248
+ }
249
+ let msg = g.ao.mem.msgs[id] ?? null
250
+ if (msg) msg = clone(msg)
251
+ const _tags = clone(tg(msg))
252
+ const t = tags(_tags)
253
+ let tx = g.ao.mem.txs[id] ?? null
254
+ let block = null
255
+ if (tx) {
256
+ if (tx.bundle) tx = g.ao.mem.txs[tx.bundle]
257
+ if (tx) tx = clone(tx)
258
+ block = g.ao.mem.blockmap[tx.block] ?? null
259
+ if (block) block = clone(block)
260
+ }
261
+ return { proc, msg, tags: _tags, t, tx, block }
262
+ }
263
+
264
+ g.mmap = () => {
265
+ let mmap = {}
266
+ for (let k in g.ao.mem.modules) mmap[g.ao.mem.modules[k]] = k
267
+ return mmap
268
+ }
269
+
270
+ g.getEOS = id => {
271
+ let a = {
272
+ type: "Account",
273
+ id,
274
+ outgoing: [],
275
+ incoming: [],
276
+ tokens: [{ ticker: "AO", balance: "0" }],
277
+ spawn: [],
278
+ }
279
+ let mmap = g.mmap()
280
+ for (let k in g.ao.mem.env) {
281
+ const pr = g.ao.mem.env[k]
282
+ let { proc, msg, tags, t, tx, block } = g.msg(k)
283
+ if (pr.owner === id) {
284
+ a.spawn.push({
285
+ name: t.Name,
286
+ id: k,
287
+ module: mmap[pr.module],
288
+ incoming: proc?.results.length,
289
+ timestamp: block?.timestamp,
290
+ })
291
+ }
292
+ }
293
+ for (let k in g.ao.mem.msgs) {
294
+ const msg = g.ao.mem.msgs[k]
295
+ if (msg?.msg?.From === id) {
296
+ let { proc, msg, tags, t, tx, block } = g.msg(k)
297
+ a.outgoing.push({
298
+ id: k,
299
+ act: t.Action,
300
+ from: msg?.msg?.From,
301
+ to: msg?.msg?.Target ?? msg.target,
302
+ })
303
+ } else if (msg?.msg?.Target === id || msg.target === id) {
304
+ let { proc, msg, tags, t, tx, block } = g.msg(k)
305
+ a.incoming.push({
306
+ id: k,
307
+ act: t.Action,
308
+ from: msg?.msg?.From,
309
+ to: msg?.msg?.Target ?? msg.target,
310
+ })
311
+ }
312
+ }
313
+ setEntity(a)
314
+ setTab("Entity")
315
+ }
316
+
317
+ g.searchAssignment = id => {
318
+ try {
319
+ if (g.ao.mem.txs[id].bundle) {
320
+ const tx = g.ao.mem.txs[g.ao.mem.txs[id].bundle]
321
+ const items = new Bundle(tx.data).items
322
+ for (let v of items) {
323
+ if (v.id === id) {
324
+ const t = tags(tg(v))
325
+ if (t.Assignment === "Assingment") return true
326
+ }
327
+ }
328
+ }
329
+ } catch (e) {
330
+ console.log(e)
331
+ }
332
+ return null
333
+ }
334
+ g.getAssignment = id => {
335
+ try {
336
+ if (g.ao.mem.txs[id].bundle) {
337
+ const tx = g.ao.mem.txs[g.ao.mem.txs[id].bundle]
338
+ const items = new Bundle(tx.data).items
339
+ for (let v of items) {
340
+ if (v.id === id) {
341
+ const t = tags(tg(v))
342
+ const addr = toAddr(v.owner)
343
+ const block = g.ao.mem.blockmap[tx.block]
344
+ const a = {
345
+ id,
346
+ tags: tg(v),
347
+ target: v.target,
348
+ from: addr,
349
+ timestamp: block.timestamp,
350
+ type: "Assignment",
351
+ }
352
+ setEntity(a)
353
+ setTab("Entity")
354
+ break
355
+ }
356
+ }
357
+ }
358
+ } catch (e) {
359
+ console.log(e)
360
+ }
361
+ }
362
+
363
+ g.getTx = id => {
364
+ setEntity({ ...g.ao.mem.txs[id], type: "Tx" })
365
+ setTab("Entity")
366
+ }
367
+
368
+ g.getAccount = (id, type) => {
369
+ if (g.ao.mem.wasms[id]) {
370
+ g.getModule(id)
371
+ } else if (g.ao.mem.env[id]) {
372
+ g.getProcess(id)
373
+ } else if (!g.ao.mem.msgs[id] && !g.ao.mem.txs[id]) {
374
+ g.getEOS(id)
375
+ } else if (g.ao.mem.msgs[id]) {
376
+ g.getMessage(id)
377
+ } else if (g.ao.mem.txs[id] && !g.ao.mem.txs[id].bundle) {
378
+ g.getTx(id)
379
+ } else {
380
+ g.getAssignment(id)
381
+ }
382
+ }
383
+
384
+ g.refmap = () => {
385
+ let refs = {}
386
+ let xrefs = {}
387
+ for (let k in g.ao.mem.msgs) {
388
+ const m = g.ao.mem.msgs[k]
389
+ const t = tags(tg(m))
390
+ const tar = m.target ?? m?.msg?.Target
391
+ if (t.Reference) {
392
+ refs[m.from] ??= {}
393
+ refs[m.from][t.Reference] = { id: k, to: tar, from: m.from }
394
+ }
395
+ if (t["X-Reference"]) {
396
+ xrefs[m.from] ??= {}
397
+ xrefs[m.from][t["X-Reference"]] = { id: k, to: tar, from: m.from }
398
+ }
399
+ }
400
+ return { refs, xrefs }
401
+ }
402
+
403
+ g.getMessage = id => {
404
+ let _path = []
405
+ const mmap = g.mmap()
406
+ let { msg, tags: _tags, t, tx, block } = g.msg(id)
407
+ let { proc, t: t2 } = g.msg(msg.process)
408
+ _path.push({
409
+ type: "module",
410
+ id: proc?.module,
411
+ name: mmap[proc?.module],
412
+ })
413
+ _path.push({
414
+ type: "process",
415
+ id: msg.process,
416
+ name: t2.Name,
417
+ })
418
+ _path.push({
419
+ type: "message",
420
+ id,
421
+ action: t.Action,
422
+ name: t.Name,
423
+ })
424
+ let m = {
425
+ from: msg?.msg?.From,
426
+ to: msg?.msg?.Target ?? msg.target,
427
+ ...msg,
428
+ name: t.Name ?? null,
429
+ tags: _tags,
430
+ id,
431
+ type: "Message",
432
+ timestamp: block?.timestamp ?? null,
433
+ resulted: [],
434
+ linked: [],
435
+ }
436
+ const r = g.refmap()
437
+ const _getM = id => {
438
+ let { t, msg, block } = g.msg(id)
439
+ return {
440
+ type: t.Type,
441
+ from: msg?.msg?.From ?? msg.from,
442
+ to: msg?.msg?.Target ?? msg.target,
443
+ id,
444
+ timestamp: block?.timestamp ?? 0,
445
+ act: t.Action,
446
+ res: msg.res,
447
+ }
448
+ }
449
+ const getM = (v, pr) => {
450
+ const t2 = tags(tg(v))
451
+ const id = r.refs[pr]?.[t2.Reference]?.id
452
+ if (id) return _getM(id)
453
+ return null
454
+ }
455
+ if (m.res) {
456
+ if (t.Type === "Process") m.process = id
457
+ for (let v of m.res.Messages || []) {
458
+ const m2 = getM(v, m.process)
459
+ if (m2) m.resulted.unshift(m2)
460
+ }
461
+ for (let v of m.res.Assignments || []) {
462
+ const m2 = getM(v, m.process)
463
+ if (m2) m.resulted.unshift(m2)
464
+ }
465
+ for (let v of m.res.Spawns || []) {
466
+ const m2 = getM(v, m.process)
467
+ if (m2) m.resulted.unshift(m2)
468
+ }
469
+ }
470
+
471
+ const getLinked = (_m, depth) => {
472
+ if (depth > 4) return
473
+ if (_m.res) {
474
+ if (t.Type === "Process") _m.process = id
475
+ for (let v of _m.res.Messages || []) {
476
+ const m2 = getM(v, _m.process ?? _m.to)
477
+ if (!m2) return
478
+ m2.depth = depth
479
+ if (m2) m.linked.push(m2)
480
+ getLinked(m2, depth + 1)
481
+ }
482
+ for (let v of _m.res.Assignments || []) {
483
+ const m2 = getM(v, _m.process ?? _m.to)
484
+ if (!m2) return
485
+ m2.depth = depth
486
+ if (m2) m.linkedu.push(m2)
487
+ }
488
+ for (let v of _m.res.Spawns || []) {
489
+ const m2 = getM(v, _m.process ?? _m.to)
490
+ if (!m2) return
491
+ m2.depth = depth
492
+ if (m2) m.linked.push(m2)
493
+ getLinked(m2, depth + 1)
494
+ }
495
+ }
496
+ }
497
+ let depth = 0
498
+ if (t.Reference) {
499
+ const from = t["From-Process"]
500
+ const mid = t["Pushed-For"]
501
+ let m2 = _getM(mid)
502
+ m2.depth = 0
503
+ depth = 1
504
+ m.linked.push(m2)
505
+ }
506
+ let m2 = _getM(id)
507
+ m2.depth = depth
508
+ m.linked.push(m2)
509
+ getLinked(m2, depth + 1)
510
+ setPath(_path)
511
+ setEntity(m)
512
+ setTab("Entity")
513
+ }
514
+
515
+ g.getProcess = id => {
516
+ let _path = []
517
+ const mmap = g.mmap()
518
+ let { proc, msg, tags: _tags, t, tx, block } = g.msg(id)
519
+ _path.push({
520
+ type: "module",
521
+ id: proc?.module,
522
+ name: mmap[proc?.module],
523
+ })
524
+ _path.push({
525
+ type: "process",
526
+ id,
527
+ name: t.Name,
528
+ })
529
+ const p = {
530
+ ...proc,
531
+ name: t.Name ?? null,
532
+ tags: _tags,
533
+ id,
534
+ type: "Process",
535
+ timestamp: block?.timestamp ?? null,
536
+ incoming: [],
537
+ outgoing: [],
538
+ spawn: [],
539
+ }
540
+ let i = 0
541
+ for (let v of proc.results) {
542
+ let { msg, tags, t, tx, block } = g.msg(v)
543
+ p.incoming.push({
544
+ slot: i,
545
+ id: v,
546
+ timestamp: block?.timestamp ?? 0,
547
+ act: t.Action,
548
+ from: msg?.msg?.From,
549
+ to: msg?.msg?.Target ?? msg.target,
550
+ })
551
+ i++
552
+ }
553
+
554
+ for (let k in g.ao.mem.msgs) {
555
+ const m = g.ao.mem.msgs[k]
556
+ const t = tags(tg(m))
557
+ if (t["From-Process"] === id) {
558
+ if (t.Type === "Message") {
559
+ let { msg, tags, t, tx, block } = g.msg(k)
560
+ p.outgoing.push({
561
+ id: k,
562
+ timestamp: block?.timestamp ?? 0,
563
+ act: t.Action,
564
+ to: msg?.msg?.Target ?? msg.target,
565
+ from: msg?.msg?.From,
566
+ })
567
+ } else if (t.Type === "Process") {
568
+ let { proc, msg, tags, t, tx, block } = g.msg(k)
569
+ let name = null
570
+ name = t.Name ?? null
571
+ let timestamp = null
572
+ if (tx.bundle) {
573
+ const bdl = g.ao.mem.txs[tx.bundle]
574
+ const block = g.ao.mem.blockmap[bdl.block]
575
+ timestamp = block.timestamp
576
+ }
577
+ p.spawn.push({
578
+ id: k,
579
+ name,
580
+ module: mmap[proc.module],
581
+ timestamp,
582
+ incoming: g.ao.mem.env[k]?.results.length,
583
+ })
584
+ }
585
+ }
586
+ }
587
+ setPath(_path)
588
+ setEntity(p)
589
+ setTab("Entity")
590
+ }
591
+
592
+ g.getModule = id => {
593
+ let _path = []
594
+ let mmap = g.mmap()
595
+ let _procs = []
596
+ let mod = clone(g.ao.mem.txs[id])
597
+ mod.name = mmap[id]
598
+ mod.type = "Module"
599
+ if (mod) {
600
+ const tx = g.ao.mem.txs[id]
601
+ let timestamp = null
602
+ const bdl = g.ao.mem.txs[id]
603
+ const block = g.ao.mem.blockmap[bdl.block]
604
+ mod.timestamp = block?.timestamp ?? 0
605
+ mod.processes = []
606
+ for (let k in g.ao.mem.env) {
607
+ for (let v of tg(g.ao.mem.msgs[k])) {
608
+ if (v.name === "Module" && v.value === mod.id) {
609
+ const val = g.ao.mem.env[k]
610
+ let name = null
611
+ if (g.ao.mem.msgs[k]) {
612
+ name = tags(tg(g.ao.mem.msgs[k])).Name ?? null
613
+ }
614
+ const tx = g.ao.mem.txs[k]
615
+ let timestamp = null
616
+ if (tx.bundle) {
617
+ const bdl = g.ao.mem.txs[tx.bundle]
618
+ const block = g.ao.mem.blockmap[bdl.block]
619
+ timestamp = block.timestamp
620
+ }
621
+ mod.processes.push({
622
+ id: k,
623
+ name,
624
+ module: mmap[val.module],
625
+ timestamp,
626
+ outgoing: g.ao.mem.env[k]?.results.length,
627
+ })
628
+ _procs.push({
629
+ id: k,
630
+ module: mmap[val.module],
631
+ })
632
+ }
633
+ }
634
+ }
635
+ _path.push({ type: "module", id: mod.id, name: mod.name })
636
+ setPath(_path)
637
+ setEntity(mod)
638
+ setTab("Entity")
639
+ }
640
+ }
641
+
642
+ g.getBlock = id => {
643
+ const block = g.ao.mem.blockmap[id]
644
+ let b = {
645
+ ...block,
646
+ type: "Block",
647
+ }
648
+ let txs = 0
649
+ let msgs = 0
650
+ let _txs = {}
651
+ for (let v of block.txs) {
652
+ const tx = g.ao.mem.txs[v]
653
+ if (tx.bundle) {
654
+ msgs++
655
+ _txs[tx.bundle] ??= { type: "bundle", txs: [], id: tx.bundle }
656
+ _txs[tx.bundle].txs.push(v)
657
+ _txs[tx.bundle].type = "bundle"
658
+ } else {
659
+ _txs[v] ??= { type: "tx", txs: [], id: v }
660
+ txs++
661
+ }
662
+ }
663
+ b.transactions = []
664
+ for (let k in _txs) {
665
+ let tmap = {}
666
+ try {
667
+ const bd = new Bundle(g.ao.mem.txs[k].data)
668
+ for (let v of bd.items) {
669
+ const id = v.id
670
+ const t = tags(tg(v))
671
+ tmap[id] = t.Type
672
+ }
673
+ } catch (e) {}
674
+ _txs[k].txs = map(v => ({ id: v, type: tmap[v] }))(_txs[k].txs)
675
+ b.transactions.push(_txs[k])
676
+ }
677
+
678
+ b.tx_count = txs
679
+ b.msg_count = msgs
680
+ setEntity(b)
681
+ setTab("Entity")
682
+ }
683
+
684
+ g.listBlocks = () => {
685
+ let _blocks = []
686
+ for (let v of g.ao.mem.blocks) {
687
+ const block = g.ao.mem.blockmap[v]
688
+ _blocks.push({
689
+ id: v,
690
+ timestamp: block.timestamp,
691
+ txs: block.txs.length,
692
+ height: block.height,
693
+ })
694
+ }
695
+ setBlocks(sortBy(v => v.timestamp * -1)(_blocks))
696
+ }
697
+
698
+ g.listModules = () => {
699
+ let _modules = []
700
+ let mmap = {}
701
+ for (let k in g.ao.mem.modules) {
702
+ const txid = g.ao.mem.modules[k]
703
+ const tx = g.ao.mem.txs[txid]
704
+ const block = g.ao.mem.blockmap[tx.block]
705
+ const t = tags(tg(tx))
706
+ _modules.push({
707
+ name: k,
708
+ id: txid,
709
+ timestamp: block.timestamp,
710
+ memory: t["Memory-Limit"],
711
+ format: t["Module-Format"],
712
+ compute: t["Compute-Limit"],
713
+ })
714
+ mmap[g.ao.mem.modules[k]] = k
715
+ }
716
+ setModules(_modules)
717
+ }
718
+
719
+ g.listProcesses = () => {
720
+ let _procs = []
721
+ let mmap = g.mmap()
722
+ for (let k in g.ao.mem.env) {
723
+ let { proc, msg, tags, t, tx, block } = g.msg(k)
724
+ _procs.unshift({
725
+ name: t.Name,
726
+ id: k,
727
+ module: mmap[proc.module],
728
+ timestamp: block?.timestamp ?? 0,
729
+ incoming: proc.results.length,
730
+ })
731
+ }
732
+ setProcs(_procs)
733
+ }
734
+
735
+ g.listMessages = () => {
736
+ let msgs = []
737
+ for (let k in g.ao.mem.msgs) {
738
+ let { proc, msg, tags, t, tx, block } = g.msg(k)
739
+ msgs.unshift({
740
+ from: msg?.msg?.From,
741
+ to: msg?.msg?.Target ?? msg.target,
742
+ id: k,
743
+ timestamp: block?.timestamp ?? 0,
744
+ act: t.Action,
745
+ })
746
+ }
747
+ setMessages(msgs)
748
+ }
749
+
750
+ g.updateMsgs = () => {
751
+ if (proc) {
752
+ setMessages(
753
+ addIndex(map)((v, i) => {
754
+ if (!v.http_msg) {
755
+ return {
756
+ http_msg: g.ao.mem.msgs[v],
757
+ id: v,
758
+ slot: i,
759
+ }
760
+ } else {
761
+ return g.ao.mem.msgs[v]
762
+ }
763
+ })(proc.results)
764
+ )
765
+ }
766
+ }
767
+
768
+ g.addMsg = mid => {
769
+ if (proc) {
770
+ if (g.ao.mem.msgs[mid]?.process === proc.id) {
771
+ let _proc = clone(proc)
772
+ _proc.results.push(mid)
773
+ setProc(_proc)
774
+ }
775
+ }
776
+ }
777
+
778
+ g.getDirs = () => {
779
+ let dirs = []
780
+ let dmap = {}
781
+ const get = (pid, _path) => {
782
+ for (let v of files) {
783
+ if (v.dir !== true || v.pid !== pid) continue
784
+ let p = filter(v => v !== "")(v.path.split("/"))
785
+ dmap[v.pid] ??= {}
786
+ if (_path !== v.path) continue
787
+ dmap[v.pid][v.id] = {
788
+ p,
789
+ path: v.path,
790
+ name: v.name,
791
+ id: v.id,
792
+ open: new RegExp(`^${v.path}${v.id}`).test(selDir.path),
793
+ show:
794
+ v.pid === selDir.pid && new RegExp(`^${v.path}`).test(selDir.path),
795
+ }
796
+ if (v.dir) get(pid, `${v.path}${v.id}/`)
797
+ }
798
+ }
799
+ let pdirs = {}
800
+ for (let v of projects) {
801
+ if (includes(v.id, ["0", "3"])) continue
802
+ get(v.id, "/")
803
+ dirs.push({
804
+ project: true,
805
+ name: v.name,
806
+ id: v.id,
807
+ open: false,
808
+ })
809
+ pdirs[v.id] ??= []
810
+ for (let k in dmap[v.id] ?? {}) {
811
+ pdirs[v.id].push(dmap[v.id][k])
812
+ }
813
+ }
814
+ return map(v => {
815
+ const sel = v.id === selDir?.pid
816
+ return (
817
+ <>
818
+ <Flex
819
+ h="25px"
820
+ px={4}
821
+ align="center"
822
+ bg={sel ? "#5137c5" : "#eee"}
823
+ color={sel ? "#ddd" : "#222"}
824
+ onClick={() => setSelDir({ pid: v.id, path: "/" })}
825
+ css={{ cursor: "pointer", _hover: { opacity: 0.75 } }}
826
+ >
827
+ <Icon size="sm" color={sel ? "#ddd" : "#5137c5"} mr={2}>
828
+ {sel ? <FaAngleDown /> : <FaAngleRight />}
829
+ </Icon>
830
+ <Box>{v.name}</Box>
831
+ <Box flex={1} />
832
+ </Flex>
833
+ {map(v2 => {
834
+ return !v2.show ? null : (
835
+ <Flex
836
+ bg={v2.open ? "#5137C5" : "white"}
837
+ color={v2.open ? "#ddd" : "#222"}
838
+ h="25px"
839
+ px={4}
840
+ align="center"
841
+ css={{
842
+ cursor: "pointer",
843
+ _hover: { opacity: 0.75 },
844
+ }}
845
+ onClick={() => {
846
+ if (v2.open) {
847
+ setSelDir({ pid: v.id, path: v2.path })
848
+ } else {
849
+ setSelDir({ pid: v.id, path: v2.path + `${v2.id}/` })
850
+ }
851
+ }}
852
+ >
853
+ <Box pl={20 * (v2.p.length + 1) + "px"} />
854
+ <Icon
855
+ size="sm"
856
+ color={!v2.open ? "#5137C5" : "#ddd"}
857
+ mr={2}
858
+ key={v2.path + "-icon"}
859
+ >
860
+ {v2.open ? <FaRegFolderOpen /> : <FaRegFolder />}
861
+ </Icon>
862
+ <Box>{v2.name}</Box>
863
+ </Flex>
864
+ )
865
+ })(pdirs[v.id] ?? [])}
866
+ </>
867
+ )
868
+ }, dirs)
869
+ }
870
+
871
+ g._setModule = id => {
872
+ let mmap = g.mmap()
873
+ let _procs = []
874
+ let mod = clone(g.ao.mem.txs[id])
875
+ if (mod) {
876
+ mod.processes = []
877
+ for (let k in g.ao.mem.env) {
878
+ for (let v of tg(g.ao.mem.msgs[k])) {
879
+ if (v.name === "Module" && v.value === mod.id) {
880
+ const val = g.ao.mem.env[k]
881
+ let name = null
882
+ if (g.ao.mem.msgs[k]) {
883
+ name = tags(tg(g.ao.mem.msgs[k])).Name ?? null
884
+ }
885
+ mod.processes.push({ id: k, name, module: mmap[val.module] })
886
+ _procs.push({ id: k, module: mmap[val.module] })
887
+ }
888
+ }
889
+ }
890
+ setModule(mod)
891
+ }
892
+ }
893
+
894
+ g._setProcess = id => {
895
+ let _proc = clone(g.ao.mem.env[id])
896
+ if (_proc) {
897
+ delete _proc.memory
898
+ _proc.tags = clone(tg(g.ao.mem.msgs[id]))
899
+ _proc.id = id
900
+ setProc(_proc)
901
+ g.listProcesses()
902
+ }
903
+ }
904
+
905
+ g.clickFile = async v => {
906
+ let opens = clone(g.openFilesRef.current)
907
+ let exists = false
908
+ for (let v2 of g.openFilesRef.current) {
909
+ if (v2.id === v.id) {
910
+ exists = true
911
+ break
912
+ }
913
+ }
914
+ if (!exists) {
915
+ let _opens = []
916
+ for (let v2 of g.openFilesRef.current) {
917
+ _opens.push(v2.id === g.fileRef.current.id ? v : v2)
918
+ }
919
+ setOpenFiles(_opens)
920
+ }
921
+ setFile(v)
922
+ g.setType(v.ext)
923
+ if (v.pid === "2") {
924
+ g.hub1.socket.send(
925
+ JSON.stringify({
926
+ type: "data",
927
+ path: v.filename,
928
+ })
929
+ )
930
+ } else {
931
+ let txt = ""
932
+ if (v.fetch) {
933
+ txt = await fetch(v.fetch).then(r => r.text())
934
+ } else {
935
+ txt = (await lf.getItem(`file-${v.id}`)) ?? ""
936
+ }
937
+ setTimeout(() => g.editorRef.current.setValue(txt), 100)
938
+ if (v.ext === "md" && preview) setPreviewContent(await getPreview(txt))
939
+ }
940
+ }
941
+
942
+ g.connectProc = async proc => {
943
+ setTerminal(proc.id)
944
+ g.setDryrun = setDryrun
945
+ g.proc = proc
946
+ g.stats = async (txt, wallet) => {
947
+ let owner = null
948
+ txt += `Process:\t${proc.id}\n`
949
+ owner = g.ao.mem.env[proc.id]?.owner
950
+ txt += `Owner:\t\t${owner}\n`
951
+ let addr = null
952
+ if (wallet) {
953
+ addr = await wallet.getActiveAddress()
954
+ txt += `Wallet:\t\t${addr}\n\n`
955
+ } else {
956
+ addr = g.ao.ar.addr
957
+ txt += `Wallet:\t\t${g.ao.ar.addr}\n\n`
958
+ }
959
+ if (addr !== owner) {
960
+ const txt2 = chalk.red(
961
+ `you are not the owner of the process, which limits certain features like Eval...\n\n`
962
+ )
963
+ txt += txt2
964
+ }
965
+ return txt
966
+ }
967
+
968
+ g.connect = async (txt = "") => {
969
+ txt += `connecting to a process... ${proc.id}]\n\n`
970
+ const wallet = await g.getWallet()
971
+ if (!wallet) {
972
+ txt += `wallet not connected, using the preset default wallet...\n\n`
973
+ }
974
+ return await g.stats(txt, wallet)
975
+ }
976
+
977
+ g.prompt = async txt => {
978
+ const { res } = await g.ao.dry({
979
+ act: "Eval",
980
+ pid: proc.id,
981
+ data: "ao.id",
982
+ })
983
+ const prompt = res?.Output?.prompt ?? res?.Output?.data?.prompt
984
+ if (prompt) {
985
+ g.term.write("\u001b[2K\r")
986
+ if (txt) {
987
+ txt = `${txt}\n`
988
+ } else if (txt === false) {
989
+ txt = ""
990
+ } else {
991
+ txt = await g.connect()
992
+ }
993
+ g.term.write(txt)
994
+ g.term.write(prompt)
995
+ // Reprint current input
996
+ g.term.write(g.inputRef.current)
997
+
998
+ // Restore cursor position
999
+ const tail = g.inputRef.current.slice(g.cur)
1000
+ if (tail.length > 0) g.term.write(`\x1b[${tail.length}D`)
1001
+ g.plen = g.term.buffer.active.cursorX
1002
+ setTimeout(() => (g.plen = g.term.buffer.active.cursorX), 0)
1003
+ }
1004
+ }
1005
+ await g.prompt()
1006
+ if (!proc && g.term) {
1007
+ g.term.write("\u001b[2K\r")
1008
+ g.term.write(`select a process......`)
1009
+ g.term.write(`${g.inputRef.current}`)
1010
+ } else {
1011
+ g.log(`Connected to Process: ${proc.id}`, {
1012
+ title: "Connected to Process!",
1013
+ type: "success",
1014
+ description: proc.id.slice(0, 30) + "...",
1015
+ })
1016
+ }
1017
+ }
1018
+
1019
+ g.setType = fileext =>
1020
+ g.monacoRef.current.editor.setModelLanguage(
1021
+ g.editorRef.current.getModel(),
1022
+ ftype(fileext)
1023
+ )
1024
+ const _projects = [
1025
+ ...(localFS.length > 0
1026
+ ? [{ id: "2", name: "Local Computer", open: localFSOpen }]
1027
+ : []),
1028
+ ...projects,
1029
+ ]
1030
+
1031
+ const pmap = indexBy(prop("id"), _projects)
1032
+ const _files = [...(localFS ?? []), ...files]
1033
+ let dirmap = {}
1034
+ for (let v of _files) {
1035
+ if (!v.dir) continue
1036
+ dirmap[`${v.pid}${v.path}${v.id}/`] = v.open ?? false
1037
+ }
1038
+
1039
+ const isShow = v => {
1040
+ if (!pmap[v.pid]) return false
1041
+ const path = `${v.pid}${v.path}`
1042
+ let sp = path.split("/")
1043
+ sp.pop()
1044
+ sp.shift()
1045
+ let ok = true
1046
+ if (sp.length > 0) {
1047
+ for (let i = 0; i < sp.length; i++) {
1048
+ const p = `${v.pid}/${sp.slice(0, sp.length - i).join("/")}/`
1049
+ if (!dirmap[p]) {
1050
+ ok = false
1051
+ break
1052
+ }
1053
+ }
1054
+ }
1055
+ return pmap[v.pid].open && ok
1056
+ }
1057
+
1058
+ g.getFiles = () => {
1059
+ let dirs = []
1060
+ let dmap = {}
1061
+ const get = (pid, _path) => {
1062
+ for (let v of _files) {
1063
+ if (v.pid !== pid) continue
1064
+ let p = filter(v => v !== "")(v.path.split("/"))
1065
+ dmap[v.pid] ??= {}
1066
+ if (_path !== v.path) continue
1067
+ dmap[v.pid][v.id] = mergeLeft({ p, show: isShow(v) }, v)
1068
+ get(pid, `${v.path}${v.id}/`)
1069
+ }
1070
+ }
1071
+ let pdirs = {}
1072
+ for (let v of _projects) {
1073
+ get(v.id, "/")
1074
+ dirs.push({ project: true, name: v.name, id: v.id, open: false })
1075
+ pdirs[v.id] ??= []
1076
+ for (let k in dmap[v.id] ?? {}) pdirs[v.id].push(dmap[v.id][k])
1077
+ }
1078
+ return pdirs
1079
+ }
1080
+
1081
+ g.log = (desc, toast, opt = {}) => {
1082
+ let log = { desc, ...opt }
1083
+ log.date ??= Date.now()
1084
+ setLogs([...logs, log])
1085
+ if (toast) toaster.create(toast)
1086
+ }
1087
+
1088
+ g.logSpawn = pid => {
1089
+ g.log(`Process Spawned: ${pid}`, {
1090
+ title: "Process Spawned!",
1091
+ type: "success",
1092
+ description: pid.slice(0, 25) + "...",
1093
+ action: {
1094
+ label: "View",
1095
+ onClick: () => g.getProcess(pid),
1096
+ },
1097
+ })
1098
+ }
1099
+
1100
+ g.logMsg = mid => {
1101
+ g.log(`New Message: ${mid}`, {
1102
+ title: "New Message!",
1103
+ type: "success",
1104
+ description: mid.slice(0, 25) + "...",
1105
+ action: {
1106
+ label: "View",
1107
+ onClick: () => g.getMessage(mid),
1108
+ },
1109
+ })
1110
+ }
1111
+
1112
+ g.getWallet = async () => {
1113
+ if (!g.walletRef.current) return null
1114
+ arweaveWallet.connect(
1115
+ ["ACCESS_ADDRESS", "SIGN_TRANSACTION", "ACCESS_PUBLIC_KEY"],
1116
+ {
1117
+ name: "WAO LOCALNET",
1118
+ }
1119
+ )
1120
+ const userAddress = await arweaveWallet.getActiveAddress()
1121
+ if (g.walletRef.current.address !== userAddress) {
1122
+ return null
1123
+ } else {
1124
+ return userAddress ? arweaveWallet : null
1125
+ }
1126
+ }
1127
+ return null
1128
+ }