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.
- package/.babelrc-cjs +5 -0
- package/.babelrc-esm +5 -0
- package/.gitmodules +4 -0
- package/.prettierrc +6 -0
- package/README.md +90 -0
- package/app/.eslintrc.json +3 -0
- package/app/.mocharc.cjs +6 -0
- package/app/arweave.mjs +87 -0
- package/app/components/Footer.js +76 -0
- package/app/components/Global.js +1128 -0
- package/app/components/Header.js +306 -0
- package/app/components/Left.js +28 -0
- package/app/components/Logo.js +34 -0
- package/app/components/Middle.js +37 -0
- package/app/components/Sidebar.js +93 -0
- package/app/components/Tags.js +42 -0
- package/app/components/editor/Editor.js +322 -0
- package/app/components/editor/FilePath.js +42 -0
- package/app/components/editor/MonacoEditor.js +44 -0
- package/app/components/left/LeftMessages.js +85 -0
- package/app/components/left/LeftModules.js +86 -0
- package/app/components/left/LeftNetworks.js +438 -0
- package/app/components/left/LeftProcesses.js +98 -0
- package/app/components/left/LeftProjects.js +397 -0
- package/app/components/left/LeftTests.js +189 -0
- package/app/components/middle/MiddleBlocks.js +79 -0
- package/app/components/middle/MiddleEntity.js +16 -0
- package/app/components/middle/MiddleEntityAccount.js +264 -0
- package/app/components/middle/MiddleEntityAssignment.js +104 -0
- package/app/components/middle/MiddleEntityBlock.js +148 -0
- package/app/components/middle/MiddleEntityMessage.js +430 -0
- package/app/components/middle/MiddleEntityModule.js +183 -0
- package/app/components/middle/MiddleEntityProcess.js +323 -0
- package/app/components/middle/MiddleEntityTx.js +211 -0
- package/app/components/middle/MiddleMessages.js +87 -0
- package/app/components/middle/MiddleModules.js +89 -0
- package/app/components/middle/MiddleNetworks.js +516 -0
- package/app/components/middle/MiddleProcesses.js +87 -0
- package/app/components/middle/MiddleTests.js +134 -0
- package/app/components/modals/CreateFileModal.js +115 -0
- package/app/components/modals/CreateFolderModal.js +83 -0
- package/app/components/modals/CreateProjectModal.js +63 -0
- package/app/components/modals/FSModal.js +141 -0
- package/app/components/modals/ImportModal.js +105 -0
- package/app/components/modals/LaunchNetworkModal.js +95 -0
- package/app/components/modals/Modal.js +38 -0
- package/app/components/modals/ProxyModal.js +122 -0
- package/app/components/modals/RenameFileModal.js +95 -0
- package/app/components/styles/EditorScrollbarStyle.js +29 -0
- package/app/components/styles/EntityScrollbarStyle.js +29 -0
- package/app/components/styles/GlobalStyle.js +102 -0
- package/app/components/styles/XtermStyle.js +37 -0
- package/app/components/terminal/Terminal.js +132 -0
- package/app/components/terminal/Xterm.js +160 -0
- package/app/components/ui/avatar.jsx +49 -0
- package/app/components/ui/checkbox.jsx +17 -0
- package/app/components/ui/close-button.jsx +20 -0
- package/app/components/ui/color-mode.jsx +61 -0
- package/app/components/ui/dialog.jsx +54 -0
- package/app/components/ui/drawer.jsx +44 -0
- package/app/components/ui/field.jsx +22 -0
- package/app/components/ui/input-group.jsx +39 -0
- package/app/components/ui/popover.jsx +49 -0
- package/app/components/ui/provider.jsx +12 -0
- package/app/components/ui/radio.jsx +17 -0
- package/app/components/ui/slider.jsx +107 -0
- package/app/components/ui/toaster.jsx +69 -0
- package/app/components/ui/tooltip.jsx +35 -0
- package/app/index.js +10 -0
- package/app/jsconfig.json +7 -0
- package/app/lib/GithubCSS.js +1218 -0
- package/app/lib/addon-fit.js +72 -0
- package/app/lib/data.js +31 -0
- package/app/lib/github-markdown.css +1169 -0
- package/app/lib/global.js +1 -0
- package/app/lib/guide.js +82 -0
- package/app/lib/hub.js +109 -0
- package/app/lib/scripts.js +47 -0
- package/app/lib/store.js +34 -0
- package/app/lib/use.js +64 -0
- package/app/lib/utils.js +387 -0
- package/app/lib/webrtc.js +217 -0
- package/app/next.config.js +25 -0
- package/app/package.json +62 -0
- package/app/pages/404.js +9 -0
- package/app/pages/_app.js +10 -0
- package/app/pages/_document.js +14 -0
- package/app/pages/index.js +121 -0
- package/app/playwright.config.mjs +41 -0
- package/app/proxy.mjs +21 -0
- package/app/public/assets/cover.png +0 -0
- package/app/public/blueprints/apm.lua +91 -0
- package/app/public/blueprints/arena.lua +345 -0
- package/app/public/blueprints/arns.lua +318 -0
- package/app/public/blueprints/chat.lua +210 -0
- package/app/public/blueprints/chatroom.lua +56 -0
- package/app/public/blueprints/patch-legacy-reply.lua +13 -0
- package/app/public/blueprints/staking.lua +93 -0
- package/app/public/blueprints/token.lua +298 -0
- package/app/public/blueprints/voting.lua +45 -0
- package/app/public/favicon.ico +0 -0
- package/app/public/logo.png +0 -0
- package/cli-esm.js +55 -0
- package/cli.js +54 -0
- package/devnet/app/api.js +129 -0
- package/devnet/app/components/layout.js +89 -0
- package/devnet/app/components/pagination.js +144 -0
- package/devnet/app/components/search.js +159 -0
- package/devnet/app/components/table.js +124 -0
- package/devnet/app/components/tags.js +89 -0
- package/devnet/app/index.html +14 -0
- package/devnet/app/main.js +215 -0
- package/devnet/app/router.js +59 -0
- package/devnet/app/state.js +19 -0
- package/devnet/app/style.css +1606 -0
- package/devnet/app/utils.js +77 -0
- package/devnet/app/views/blocks.js +75 -0
- package/devnet/app/views/dashboard.js +127 -0
- package/devnet/app/views/entity.js +1473 -0
- package/devnet/app/views/messages.js +90 -0
- package/devnet/app/views/modules.js +165 -0
- package/devnet/app/views/processes.js +90 -0
- package/devnet/app/views/schedulers.js +90 -0
- package/devnet/app/views/transactions.js +88 -0
- package/devnet/migrations/0001_initial.sql +51 -0
- package/devnet/package.json +26 -0
- package/devnet/playwright.config.js +7 -0
- package/devnet/src/cu-worker.js +166 -0
- package/devnet/src/index.js +309 -0
- package/devnet/vite.config.js +17 -0
- package/devnet/vitest.config.js +10 -0
- package/devnet/wrangler-cu.toml +32 -0
- package/devnet/wrangler.toml +38 -0
- package/dhfs-tutorial-app/package.json +15 -0
- package/dist/esm/workspace/dashboard/public/favicon.png +0 -0
- package/dist/esm/workspace/src/counter.lua +14 -0
- package/dist/package.json +82 -0
- package/hb.sh +18 -0
- package/hbsig/.babelrc-cjs +5 -0
- package/hbsig/.babelrc-esm +5 -0
- package/hbsig/README.md +1 -0
- package/hbsig/dist/cjs/bin_to_str.js +44 -0
- package/hbsig/dist/cjs/collect-body-keys.js +470 -0
- package/hbsig/dist/cjs/commit.js +330 -0
- package/hbsig/dist/cjs/encode-array-item.js +110 -0
- package/hbsig/dist/cjs/encode-utils.js +242 -0
- package/hbsig/dist/cjs/encode.js +1365 -0
- package/hbsig/dist/cjs/erl_json.js +326 -0
- package/hbsig/dist/cjs/erl_str.js +1042 -0
- package/hbsig/dist/cjs/flat.js +279 -0
- package/hbsig/dist/cjs/http-message-signatures/httpbis.js +489 -0
- package/hbsig/dist/cjs/http-message-signatures/index.js +25 -0
- package/hbsig/dist/cjs/http-message-signatures/structured-header.js +129 -0
- package/hbsig/dist/cjs/httpsig.js +861 -0
- package/hbsig/dist/cjs/id.js +470 -0
- package/hbsig/dist/cjs/index.js +174 -0
- package/hbsig/dist/cjs/nocrypto.js +51 -0
- package/hbsig/dist/cjs/parser.js +201 -0
- package/hbsig/dist/cjs/send-utils.js +1231 -0
- package/hbsig/dist/cjs/send.js +211 -0
- package/hbsig/dist/cjs/signer-utils.js +494 -0
- package/hbsig/dist/cjs/signer.js +436 -0
- package/hbsig/dist/cjs/structured.js +515 -0
- package/hbsig/dist/cjs/test.js +12 -0
- package/hbsig/dist/cjs/utils.js +44 -0
- package/hbsig/dist/esm/bin_to_str.js +46 -0
- package/hbsig/dist/esm/collect-body-keys.js +436 -0
- package/hbsig/dist/esm/commit.js +219 -0
- package/hbsig/dist/esm/encode-array-item.js +112 -0
- package/hbsig/dist/esm/encode-utils.js +191 -0
- package/hbsig/dist/esm/encode.js +1256 -0
- package/hbsig/dist/esm/erl_json.js +292 -0
- package/hbsig/dist/esm/erl_str.js +1144 -0
- package/hbsig/dist/esm/flat.js +250 -0
- package/hbsig/dist/esm/http-message-signatures/httpbis.js +438 -0
- package/hbsig/dist/esm/http-message-signatures/index.js +4 -0
- package/hbsig/dist/esm/http-message-signatures/structured-header.js +105 -0
- package/hbsig/dist/esm/httpsig.js +866 -0
- package/hbsig/dist/esm/id.js +459 -0
- package/hbsig/dist/esm/index.js +13 -0
- package/hbsig/dist/esm/nocrypto.js +4 -0
- package/hbsig/dist/esm/package.json +3 -0
- package/hbsig/dist/esm/parser.js +171 -0
- package/hbsig/dist/esm/send-utils.js +1132 -0
- package/hbsig/dist/esm/send.js +142 -0
- package/hbsig/dist/esm/signer-utils.js +375 -0
- package/hbsig/dist/esm/signer.js +312 -0
- package/hbsig/dist/esm/structured.js +496 -0
- package/hbsig/dist/esm/test.js +2 -0
- package/hbsig/dist/esm/utils.js +29 -0
- package/hbsig/dist/package.json +39 -0
- package/hbsig/make.js +36 -0
- package/hbsig/package.json +39 -0
- package/hbsig/src/bin_to_str.js +46 -0
- package/hbsig/src/collect-body-keys.js +436 -0
- package/hbsig/src/commit.js +219 -0
- package/hbsig/src/encode-array-item.js +112 -0
- package/hbsig/src/encode-utils.js +191 -0
- package/hbsig/src/encode.js +1256 -0
- package/hbsig/src/erl_json.js +292 -0
- package/hbsig/src/erl_str.js +1144 -0
- package/hbsig/src/flat.js +250 -0
- package/hbsig/src/http-message-signatures/httpbis.js +438 -0
- package/hbsig/src/http-message-signatures/index.js +4 -0
- package/hbsig/src/http-message-signatures/structured-header.js +105 -0
- package/hbsig/src/httpsig.js +866 -0
- package/hbsig/src/id.js +459 -0
- package/hbsig/src/index.js +13 -0
- package/hbsig/src/nocrypto.js +4 -0
- package/hbsig/src/parser.js +171 -0
- package/hbsig/src/send-utils.js +1132 -0
- package/hbsig/src/send.js +142 -0
- package/hbsig/src/signer-utils.js +375 -0
- package/hbsig/src/signer.js +312 -0
- package/hbsig/src/structured.js +496 -0
- package/hbsig/src/test.js +2 -0
- package/hbsig/src/utils.js +29 -0
- package/lp/index.html +25 -0
- package/lp/package.json +19 -0
- package/lp/public/cover.png +0 -0
- package/lp/public/favicon.ico +0 -0
- package/lp/public/favicon.png +0 -0
- package/lp/public/images/book.jpg +0 -0
- package/lp/public/images/dashboard.png +0 -0
- package/lp/public/images/devnet.png +0 -0
- package/lp/public/images/hero-bg.png +0 -0
- package/lp/public/images/hyperadd.png +0 -0
- package/lp/public/images/message-flow.png +0 -0
- package/lp/public/images/mobile.png +0 -0
- package/lp/public/images/og-cover.png +0 -0
- package/lp/public/images/scan.png +0 -0
- package/lp/public/images/wao-hub.png +0 -0
- package/lp/public/images/wao-web.png +0 -0
- package/lp/public/logo.png +0 -0
- package/lp/src/App.jsx +29 -0
- package/lp/src/components/CodeBlock.jsx +37 -0
- package/lp/src/components/CodeBlock.module.css +89 -0
- package/lp/src/components/Footer.jsx +22 -0
- package/lp/src/components/Footer.module.css +60 -0
- package/lp/src/components/Nav.jsx +80 -0
- package/lp/src/components/Nav.module.css +177 -0
- package/lp/src/components/SectionWrapper.jsx +15 -0
- package/lp/src/hooks/useReveal.js +25 -0
- package/lp/src/hooks/useScrolled.js +14 -0
- package/lp/src/main.jsx +10 -0
- package/lp/src/sections/Book.jsx +60 -0
- package/lp/src/sections/Book.module.css +204 -0
- package/lp/src/sections/Browser.jsx +46 -0
- package/lp/src/sections/Browser.module.css +67 -0
- package/lp/src/sections/Devnet.jsx +55 -0
- package/lp/src/sections/Devnet.module.css +136 -0
- package/lp/src/sections/GetStarted.jsx +51 -0
- package/lp/src/sections/GetStarted.module.css +128 -0
- package/lp/src/sections/Hero.jsx +67 -0
- package/lp/src/sections/Hero.module.css +202 -0
- package/lp/src/sections/HyperADD.jsx +46 -0
- package/lp/src/sections/HyperADD.module.css +113 -0
- package/lp/src/sections/SDK.jsx +90 -0
- package/lp/src/sections/SDK.module.css +122 -0
- package/lp/src/sections/Testing.jsx +47 -0
- package/lp/src/sections/Testing.module.css +124 -0
- package/lp/src/sections/Vision.jsx +93 -0
- package/lp/src/sections/Vision.module.css +147 -0
- package/lp/src/styles/globals.css +285 -0
- package/lp/src/utils/scrollTo.js +4 -0
- package/lp/vite.config.js +7 -0
- package/make.js +39 -0
- package/package.json +17 -12
- package/patches/@permaweb+ao-loader+0.0.44.patch +64 -0
- package/plan.md +435 -0
- package/rebar.lock +1 -0
- package/src/accounts-web.js +128 -0
- package/src/accounts.js +124 -0
- package/src/adaptor-base.js +622 -0
- package/src/adaptor-cf.js +11 -0
- package/src/adaptor-web.js +11 -0
- package/src/adaptor.js +10 -0
- package/src/ao-loader.js +30660 -0
- package/src/ao.js +1173 -0
- package/src/aoconnect-base.js +1098 -0
- package/src/aoconnect-cf.js +9 -0
- package/src/aoconnect-web.js +8 -0
- package/src/aoconnect.js +8 -0
- package/src/aos_wamr.js +1 -0
- package/src/ar-remote.js +87 -0
- package/src/ar.js +276 -0
- package/src/armem-base.js +529 -0
- package/src/armem-cf.js +67 -0
- package/src/armem-web.js +19 -0
- package/src/armem.js +26 -0
- package/src/bao.js +141 -0
- package/src/bar.js +366 -0
- package/src/build.js +7 -0
- package/src/bundler.js +119 -0
- package/src/car.js +10 -0
- package/src/cf-env.js +29 -0
- package/src/cf.js +11 -0
- package/src/cli.js +561 -0
- package/src/compress.js +112 -0
- package/src/create.js +415 -0
- package/src/devs.js +86 -0
- package/src/dirname.js +1 -0
- package/src/dodb.js +26 -0
- package/src/erl_json.js +289 -0
- package/src/erl_str.js +1139 -0
- package/src/gql.js +229 -0
- package/src/hb.js +967 -0
- package/src/helpers.js +203 -0
- package/src/http.js +619 -0
- package/src/hub/bundler.js +123 -0
- package/src/hub/cu.js +74 -0
- package/src/hub/fs.js +157 -0
- package/src/hub/index.js +85 -0
- package/src/hub/utils.js +64 -0
- package/src/hub/ws-proxy.js +67 -0
- package/src/hyper-aos.js +1 -0
- package/src/hyperbeam-server.js +21 -0
- package/src/hyperbeam.js +585 -0
- package/src/index.js +5 -0
- package/src/keygen.js +47 -0
- package/src/lfdb.js +67 -0
- package/src/lua/aos.wasm +0 -0
- package/src/lua/aos2_0_1.js +1 -0
- package/src/lua/aos2_0_1.wasm +0 -0
- package/src/lua/aos2_0_3.js +1 -0
- package/src/lua/aos2_0_3.wasm +0 -0
- package/src/lua/aos2_0_4_32.js +1 -0
- package/src/lua/aos2_0_4_32.wasm +0 -0
- package/src/lua/aos2_0_6.wasm +0 -0
- package/src/lua/apm.lua +61 -0
- package/src/lua/llama.wasm +0 -0
- package/src/lua/process.wasm +0 -0
- package/src/lua/sqlite.js +1 -0
- package/src/lua/sqlite.wasm +0 -0
- package/src/lua/weavedb_mock.lua +44 -0
- package/src/lua/weavedrive.lua +53 -0
- package/src/run.js +25 -0
- package/src/server.js +173 -0
- package/src/storage-multi.js +183 -0
- package/src/tao.js +12 -0
- package/src/tar.js +10 -0
- package/src/test.js +42 -0
- package/src/tgql-d1.js +407 -0
- package/src/tgql.js +310 -0
- package/src/toerl.js +162 -0
- package/src/utils.js +777 -0
- package/src/wao.js +29 -0
- package/src/waosm/README.md +81 -0
- package/src/waosm/waosm.d.ts +40 -0
- package/src/waosm/waosm.js +240 -0
- package/src/waosm/waosm_bg.wasm +0 -0
- package/src/waosm/waosm_bg.wasm.d.ts +8 -0
- package/src/waosm-node/README.md +81 -0
- package/src/waosm-node/waosm.d.ts +8 -0
- package/src/waosm-node/waosm.js +4 -0
- package/src/waosm-node/waosm_bg.js +147 -0
- package/src/waosm-node/waosm_bg.wasm +0 -0
- package/src/waosm-node/waosm_bg.wasm.d.ts +8 -0
- package/src/waosm-node/waosm_bg.wasm.js +14 -0
- package/src/waosm-node.js +9 -0
- package/src/war.js +10 -0
- package/src/weavedrive.js +376 -0
- package/src/web.js +11 -0
- package/src/workspace/.mcp.json +8 -0
- package/src/workspace/CLAUDE.md +258 -0
- package/src/workspace/README.md +85 -0
- package/src/workspace/dashboard/index.html +163 -0
- package/src/workspace/dashboard/package.json +18 -0
- package/src/workspace/dashboard/public/favicon.ico +0 -0
- package/src/workspace/dashboard/public/favicon.png +0 -0
- package/src/workspace/dashboard/server.js +224 -0
- package/src/workspace/dashboard/src/App.jsx +2350 -0
- package/{cjs/workspace/frontend → src/workspace/dashboard}/vite.config.js +6 -0
- package/src/workspace/package.json +18 -0
- package/src/workspace/src/counter.lua +14 -0
- package/tsconfig.json +18 -0
- package/types/index.d.ts +329 -0
- package/waollama/.eslintrc.json +3 -0
- package/waollama/README.md +19 -0
- package/waollama/arweave.mjs +87 -0
- package/waollama/components/ui/avatar.jsx +49 -0
- package/waollama/components/ui/checkbox.jsx +17 -0
- package/waollama/components/ui/close-button.jsx +20 -0
- package/waollama/components/ui/color-mode.jsx +61 -0
- package/waollama/components/ui/dialog.jsx +54 -0
- package/waollama/components/ui/drawer.jsx +44 -0
- package/waollama/components/ui/field.jsx +22 -0
- package/waollama/components/ui/input-group.jsx +39 -0
- package/waollama/components/ui/popover.jsx +49 -0
- package/waollama/components/ui/provider.jsx +12 -0
- package/waollama/components/ui/radio.jsx +17 -0
- package/waollama/components/ui/slider.jsx +107 -0
- package/waollama/components/ui/tooltip.jsx +35 -0
- package/waollama/index.js +10 -0
- package/waollama/jsconfig.json +7 -0
- package/waollama/lib/ao-loader.js +30654 -0
- package/waollama/lib/client.js +1 -0
- package/waollama/lib/wasm.js +1 -0
- package/waollama/next.config.js +25 -0
- package/waollama/package.json +43 -0
- package/waollama/pages/404.js +9 -0
- package/waollama/pages/_app.js +9 -0
- package/waollama/pages/_document.js +14 -0
- package/waollama/pages/index.js +212 -0
- package/waollama/playwright.config.js +31 -0
- package/waollama/proxy.mjs +21 -0
- package/waollama/public/favicon.ico +0 -0
- package/waollama/public/human.png +0 -0
- package/waollama/public/llama.png +0 -0
- package/waosm/Cargo.toml +11 -0
- package/waosm/README.md +81 -0
- package/waosm/compress.js +112 -0
- package/waosm/make.js +33 -0
- package/waosm/package.json +10 -0
- package/waosm/src/lib.rs +180 -0
- package/waosm/test.js +16 -0
- package/cjs/workspace/.claude/agents/builder.md +0 -99
- package/cjs/workspace/.claude/agents/device-builder.md +0 -86
- package/cjs/workspace/.claude/agents/tester.md +0 -90
- package/cjs/workspace/.claude/mcp/dashboard/server.js +0 -128
- package/cjs/workspace/.claude/rules/deploy.md +0 -45
- package/cjs/workspace/.claude/rules/frontend.md +0 -69
- package/cjs/workspace/.claude/rules/hyperbeam.md +0 -104
- package/cjs/workspace/.claude/rules/lua.md +0 -108
- package/cjs/workspace/.claude/rules/testing.md +0 -257
- package/cjs/workspace/.claude/settings.json +0 -109
- package/cjs/workspace/.claude/skills/build/SKILL.md +0 -214
- package/cjs/workspace/.claude/skills/build-aos/SKILL.md +0 -129
- package/cjs/workspace/.claude/skills/build-device/SKILL.md +0 -192
- package/cjs/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
- package/cjs/workspace/.claude/skills/build-module/SKILL.md +0 -281
- package/cjs/workspace/.claude/skills/create-aos/SKILL.md +0 -63
- package/cjs/workspace/.claude/skills/create-device/SKILL.md +0 -87
- package/cjs/workspace/.claude/skills/create-module/SKILL.md +0 -162
- package/cjs/workspace/.claude/skills/debug/SKILL.md +0 -57
- package/cjs/workspace/.claude/skills/deploy/SKILL.md +0 -85
- package/cjs/workspace/.claude/skills/dev/SKILL.md +0 -32
- package/cjs/workspace/.claude/skills/plan/SKILL.md +0 -176
- package/cjs/workspace/.claude/skills/readme/SKILL.md +0 -186
- package/cjs/workspace/.claude/skills/report/SKILL.md +0 -49
- package/cjs/workspace/.claude/skills/team/SKILL.md +0 -101
- package/cjs/workspace/.claude/skills/test/SKILL.md +0 -56
- package/cjs/workspace/.claude/skills/test-device/SKILL.md +0 -114
- package/cjs/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
- package/cjs/workspace/.claude/skills/test-hb/SKILL.md +0 -76
- package/cjs/workspace/.claude/skills/validate/SKILL.md +0 -96
- package/cjs/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
- package/cjs/workspace/docs/aos-lua.md +0 -428
- package/cjs/workspace/docs/debug.md +0 -230
- package/cjs/workspace/docs/hyperbeam-dev.md +0 -606
- package/cjs/workspace/docs/hyperbeam-devices.md +0 -618
- package/cjs/workspace/docs/wao-sdk.md +0 -807
- package/cjs/workspace/frontend/e2e/.gitkeep +0 -0
- package/cjs/workspace/frontend/index.html +0 -12
- package/cjs/workspace/frontend/package.json +0 -24
- package/cjs/workspace/frontend/playwright.config.js +0 -10
- package/cjs/workspace/frontend/src/App.jsx +0 -24
- package/cjs/workspace/frontend/test/.gitkeep +0 -0
- package/cjs/workspace/frontend/vitest.config.js +0 -10
- package/cjs/workspace/scripts/deploy.js +0 -140
- package/cjs/workspace/scripts/keygen.js +0 -52
- package/cjs/workspace/test/aos.test.js +0 -98
- package/cjs/workspace/test/hyperbeam.test.js +0 -80
- package/esm/compiler/native +0 -0
- package/esm/workspace/.claude/agents/builder.md +0 -99
- package/esm/workspace/.claude/agents/device-builder.md +0 -86
- package/esm/workspace/.claude/agents/tester.md +0 -90
- package/esm/workspace/.claude/mcp/dashboard/server.js +0 -128
- package/esm/workspace/.claude/rules/deploy.md +0 -45
- package/esm/workspace/.claude/rules/frontend.md +0 -69
- package/esm/workspace/.claude/rules/hyperbeam.md +0 -104
- package/esm/workspace/.claude/rules/lua.md +0 -108
- package/esm/workspace/.claude/rules/testing.md +0 -257
- package/esm/workspace/.claude/settings.json +0 -109
- package/esm/workspace/.claude/skills/build/SKILL.md +0 -214
- package/esm/workspace/.claude/skills/build-aos/SKILL.md +0 -129
- package/esm/workspace/.claude/skills/build-device/SKILL.md +0 -192
- package/esm/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
- package/esm/workspace/.claude/skills/build-module/SKILL.md +0 -281
- package/esm/workspace/.claude/skills/create-aos/SKILL.md +0 -63
- package/esm/workspace/.claude/skills/create-device/SKILL.md +0 -87
- package/esm/workspace/.claude/skills/create-module/SKILL.md +0 -162
- package/esm/workspace/.claude/skills/debug/SKILL.md +0 -57
- package/esm/workspace/.claude/skills/deploy/SKILL.md +0 -85
- package/esm/workspace/.claude/skills/dev/SKILL.md +0 -32
- package/esm/workspace/.claude/skills/plan/SKILL.md +0 -176
- package/esm/workspace/.claude/skills/readme/SKILL.md +0 -186
- package/esm/workspace/.claude/skills/report/SKILL.md +0 -49
- package/esm/workspace/.claude/skills/team/SKILL.md +0 -101
- package/esm/workspace/.claude/skills/test/SKILL.md +0 -56
- package/esm/workspace/.claude/skills/test-device/SKILL.md +0 -114
- package/esm/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
- package/esm/workspace/.claude/skills/test-hb/SKILL.md +0 -76
- package/esm/workspace/.claude/skills/validate/SKILL.md +0 -96
- package/esm/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
- package/esm/workspace/docs/aos-lua.md +0 -428
- package/esm/workspace/docs/debug.md +0 -230
- package/esm/workspace/docs/hyperbeam-dev.md +0 -606
- package/esm/workspace/docs/hyperbeam-devices.md +0 -618
- package/esm/workspace/docs/wao-sdk.md +0 -807
- package/esm/workspace/frontend/e2e/.gitkeep +0 -0
- package/esm/workspace/frontend/index.html +0 -12
- package/esm/workspace/frontend/package.json +0 -24
- package/esm/workspace/frontend/playwright.config.js +0 -10
- package/esm/workspace/frontend/src/App.jsx +0 -24
- package/esm/workspace/frontend/src/main.jsx +0 -9
- package/esm/workspace/frontend/test/.gitkeep +0 -0
- package/esm/workspace/frontend/vite.config.js +0 -6
- package/esm/workspace/frontend/vitest.config.js +0 -10
- package/esm/workspace/scripts/deploy.js +0 -140
- package/esm/workspace/scripts/keygen.js +0 -52
- package/esm/workspace/test/aos.test.js +0 -98
- package/esm/workspace/test/hyperbeam.test.js +0 -80
- /package/{cjs/workspace/dashboard/public → devnet/app}/favicon.ico +0 -0
- /package/{cjs/workspace → dhfs-tutorial-app}/src/counter.lua +0 -0
- /package/{cjs → dist/cjs}/accounts-web.js +0 -0
- /package/{cjs → dist/cjs}/accounts.js +0 -0
- /package/{cjs → dist/cjs}/adaptor-base.js +0 -0
- /package/{cjs → dist/cjs}/adaptor-cf.js +0 -0
- /package/{cjs → dist/cjs}/adaptor-web.js +0 -0
- /package/{cjs → dist/cjs}/adaptor.js +0 -0
- /package/{cjs → dist/cjs}/ao-loader.js +0 -0
- /package/{cjs → dist/cjs}/ao.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect-base.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect-cf.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect-web.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect.js +0 -0
- /package/{cjs → dist/cjs}/aos_wamr.js +0 -0
- /package/{cjs → dist/cjs}/ar-remote.js +0 -0
- /package/{cjs → dist/cjs}/ar.js +0 -0
- /package/{cjs → dist/cjs}/armem-base.js +0 -0
- /package/{cjs → dist/cjs}/armem-cf.js +0 -0
- /package/{cjs → dist/cjs}/armem-web.js +0 -0
- /package/{cjs → dist/cjs}/armem.js +0 -0
- /package/{cjs → dist/cjs}/bao.js +0 -0
- /package/{cjs → dist/cjs}/bar.js +0 -0
- /package/{cjs → dist/cjs}/build.js +0 -0
- /package/{cjs → dist/cjs}/bundler.js +0 -0
- /package/{cjs → dist/cjs}/car.js +0 -0
- /package/{cjs → dist/cjs}/cf-env.js +0 -0
- /package/{cjs → dist/cjs}/cf.js +0 -0
- /package/{cjs → dist/cjs}/cli.js +0 -0
- /package/{cjs → dist/cjs}/compress.js +0 -0
- /package/{cjs → dist/cjs}/create.js +0 -0
- /package/{cjs → dist/cjs}/devs.js +0 -0
- /package/{cjs → dist/cjs}/dirname.js +0 -0
- /package/{cjs → dist/cjs}/dodb.js +0 -0
- /package/{cjs → dist/cjs}/erl_json.js +0 -0
- /package/{cjs → dist/cjs}/erl_str.js +0 -0
- /package/{cjs → dist/cjs}/gql.js +0 -0
- /package/{cjs → dist/cjs}/hb.js +0 -0
- /package/{cjs → dist/cjs}/helpers.js +0 -0
- /package/{cjs → dist/cjs}/http.js +0 -0
- /package/{cjs → dist/cjs}/hub/bundler.js +0 -0
- /package/{cjs → dist/cjs}/hub/cu.js +0 -0
- /package/{cjs → dist/cjs}/hub/fs.js +0 -0
- /package/{cjs → dist/cjs}/hub/index.js +0 -0
- /package/{cjs → dist/cjs}/hub/utils.js +0 -0
- /package/{cjs → dist/cjs}/hub/ws-proxy.js +0 -0
- /package/{cjs → dist/cjs}/hyper-aos.js +0 -0
- /package/{cjs → dist/cjs}/hyperbeam-server.js +0 -0
- /package/{cjs → dist/cjs}/hyperbeam.js +0 -0
- /package/{cjs → dist/cjs}/index.js +0 -0
- /package/{cjs → dist/cjs}/keygen.js +0 -0
- /package/{cjs → dist/cjs}/lfdb.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_1.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_1.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_3.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_3.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_4_32.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_4_32.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_6.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/apm.lua +0 -0
- /package/{cjs → dist/cjs}/lua/llama.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/process.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/sqlite.js +0 -0
- /package/{cjs → dist/cjs}/lua/sqlite.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/weavedb_mock.lua +0 -0
- /package/{cjs → dist/cjs}/lua/weavedrive.lua +0 -0
- /package/{cjs → dist/cjs}/run.js +0 -0
- /package/{cjs → dist/cjs}/server.js +0 -0
- /package/{cjs → dist/cjs}/storage-multi.js +0 -0
- /package/{cjs → dist/cjs}/tao.js +0 -0
- /package/{cjs → dist/cjs}/tar.js +0 -0
- /package/{cjs → dist/cjs}/test.js +0 -0
- /package/{cjs → dist/cjs}/tgql-d1.js +0 -0
- /package/{cjs → dist/cjs}/tgql.js +0 -0
- /package/{cjs → dist/cjs}/toerl.js +0 -0
- /package/{cjs → dist/cjs}/utils.js +0 -0
- /package/{cjs → dist/cjs}/wao.js +0 -0
- /package/{cjs → dist/cjs}/waosm/waosm.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm_bg.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node.js +0 -0
- /package/{cjs → dist/cjs}/war.js +0 -0
- /package/{cjs → dist/cjs}/weavedrive.js +0 -0
- /package/{cjs → dist/cjs}/web.js +0 -0
- /package/{cjs → dist/cjs}/workspace/.mcp.json +0 -0
- /package/{cjs → dist/cjs}/workspace/CLAUDE.md +0 -0
- /package/{cjs → dist/cjs}/workspace/README.md +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/index.html +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/package.json +0 -0
- /package/{esm → dist/cjs}/workspace/dashboard/public/favicon.ico +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/public/favicon.png +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/server.js +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/src/App.jsx +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/src/main.jsx +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/vite.config.js +0 -0
- /package/{cjs → dist/cjs}/workspace/package.json +0 -0
- /package/{esm → dist/cjs}/workspace/src/counter.lua +0 -0
- /package/{esm → dist/esm}/accounts-web.js +0 -0
- /package/{esm → dist/esm}/accounts.js +0 -0
- /package/{esm → dist/esm}/adaptor-base.js +0 -0
- /package/{esm → dist/esm}/adaptor-cf.js +0 -0
- /package/{esm → dist/esm}/adaptor-web.js +0 -0
- /package/{esm → dist/esm}/adaptor.js +0 -0
- /package/{esm → dist/esm}/ao-loader.js +0 -0
- /package/{esm → dist/esm}/ao.js +0 -0
- /package/{esm → dist/esm}/aoconnect-base.js +0 -0
- /package/{esm → dist/esm}/aoconnect-cf.js +0 -0
- /package/{esm → dist/esm}/aoconnect-web.js +0 -0
- /package/{esm → dist/esm}/aoconnect.js +0 -0
- /package/{esm → dist/esm}/aos_wamr.js +0 -0
- /package/{esm → dist/esm}/ar-remote.js +0 -0
- /package/{esm → dist/esm}/ar.js +0 -0
- /package/{esm → dist/esm}/armem-base.js +0 -0
- /package/{esm → dist/esm}/armem-cf.js +0 -0
- /package/{esm → dist/esm}/armem-web.js +0 -0
- /package/{esm → dist/esm}/armem.js +0 -0
- /package/{esm → dist/esm}/bao.js +0 -0
- /package/{esm → dist/esm}/bar.js +0 -0
- /package/{esm → dist/esm}/build.js +0 -0
- /package/{esm → dist/esm}/bundler.js +0 -0
- /package/{esm → dist/esm}/car.js +0 -0
- /package/{esm → dist/esm}/cf-env.js +0 -0
- /package/{esm → dist/esm}/cf.js +0 -0
- /package/{esm → dist/esm}/cli.js +0 -0
- /package/{esm → dist/esm}/compress.js +0 -0
- /package/{esm → dist/esm}/create.js +0 -0
- /package/{esm → dist/esm}/devs.js +0 -0
- /package/{esm → dist/esm}/dirname.js +0 -0
- /package/{esm → dist/esm}/dodb.js +0 -0
- /package/{esm → dist/esm}/erl_json.js +0 -0
- /package/{esm → dist/esm}/erl_str.js +0 -0
- /package/{esm → dist/esm}/gql.js +0 -0
- /package/{esm → dist/esm}/hb.js +0 -0
- /package/{esm → dist/esm}/helpers.js +0 -0
- /package/{esm → dist/esm}/http.js +0 -0
- /package/{esm → dist/esm}/hub/bundler.js +0 -0
- /package/{esm → dist/esm}/hub/cu.js +0 -0
- /package/{esm → dist/esm}/hub/fs.js +0 -0
- /package/{esm → dist/esm}/hub/index.js +0 -0
- /package/{esm → dist/esm}/hub/utils.js +0 -0
- /package/{esm → dist/esm}/hub/ws-proxy.js +0 -0
- /package/{esm → dist/esm}/hyper-aos.js +0 -0
- /package/{esm → dist/esm}/hyperbeam-server.js +0 -0
- /package/{esm → dist/esm}/hyperbeam.js +0 -0
- /package/{esm → dist/esm}/index.js +0 -0
- /package/{esm → dist/esm}/keygen.js +0 -0
- /package/{esm → dist/esm}/lfdb.js +0 -0
- /package/{esm → dist/esm}/lua/aos.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_1.js +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_1.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_3.js +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_3.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_4_32.js +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_4_32.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_6.wasm +0 -0
- /package/{esm → dist/esm}/lua/apm.lua +0 -0
- /package/{esm → dist/esm}/lua/llama.wasm +0 -0
- /package/{esm → dist/esm}/lua/process.wasm +0 -0
- /package/{esm → dist/esm}/lua/sqlite.js +0 -0
- /package/{esm → dist/esm}/lua/sqlite.wasm +0 -0
- /package/{esm → dist/esm}/lua/weavedb_mock.lua +0 -0
- /package/{esm → dist/esm}/lua/weavedrive.lua +0 -0
- /package/{esm → dist/esm}/package.json +0 -0
- /package/{esm → dist/esm}/run.js +0 -0
- /package/{esm → dist/esm}/server.js +0 -0
- /package/{esm → dist/esm}/storage-multi.js +0 -0
- /package/{esm → dist/esm}/tao.js +0 -0
- /package/{esm → dist/esm}/tar.js +0 -0
- /package/{esm → dist/esm}/test.js +0 -0
- /package/{esm → dist/esm}/tgql-d1.js +0 -0
- /package/{esm → dist/esm}/tgql.js +0 -0
- /package/{esm → dist/esm}/toerl.js +0 -0
- /package/{esm → dist/esm}/utils.js +0 -0
- /package/{esm → dist/esm}/wao.js +0 -0
- /package/{esm → dist/esm}/waosm/README.md +0 -0
- /package/{esm → dist/esm}/waosm/waosm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm/waosm.js +0 -0
- /package/{esm → dist/esm}/waosm/waosm_bg.wasm +0 -0
- /package/{esm → dist/esm}/waosm/waosm_bg.wasm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm-node/README.md +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm.js +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.js +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.js +0 -0
- /package/{esm → dist/esm}/waosm-node.js +0 -0
- /package/{esm → dist/esm}/war.js +0 -0
- /package/{esm → dist/esm}/weavedrive.js +0 -0
- /package/{esm → dist/esm}/web.js +0 -0
- /package/{esm → dist/esm}/workspace/.mcp.json +0 -0
- /package/{esm → dist/esm}/workspace/CLAUDE.md +0 -0
- /package/{esm → dist/esm}/workspace/README.md +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/index.html +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/package.json +0 -0
- /package/{esm/workspace/dashboard/public/favicon.png → dist/esm/workspace/dashboard/public/favicon.ico} +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/server.js +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/src/App.jsx +0 -0
- /package/{cjs/workspace/frontend → dist/esm/workspace/dashboard}/src/main.jsx +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/vite.config.js +0 -0
- /package/{esm → dist/esm}/workspace/package.json +0 -0
- /package/{postinstall.cjs → dist/postinstall.cjs} +0 -0
- /package/{esm → src}/workspace/dashboard/src/main.jsx +0 -0
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "test/**/*.js"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Testing Rules
|
|
7
|
-
|
|
8
|
-
For full SDK API reference, read `docs/wao-sdk.md`.
|
|
9
|
-
|
|
10
|
-
## Framework
|
|
11
|
-
|
|
12
|
-
Node.js built-in test runner (`node:test`). No external test framework needed.
|
|
13
|
-
|
|
14
|
-
```js
|
|
15
|
-
import assert from "assert"
|
|
16
|
-
import { describe, it, before, after } from "node:test"
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## In-Memory AOS Testing (legacynet units)
|
|
20
|
-
|
|
21
|
-
Runs AOS WASM directly in Node.js — no server, no Erlang. Instant. Best for unit testing AOS script logic.
|
|
22
|
-
|
|
23
|
-
```js
|
|
24
|
-
import { AO, acc } from "wao/test"
|
|
25
|
-
import { readFileSync } from "fs"
|
|
26
|
-
import { resolve } from "path"
|
|
27
|
-
|
|
28
|
-
const src_data = readFileSync(
|
|
29
|
-
resolve(import.meta.dirname, "../src/file.lua"),
|
|
30
|
-
"utf8"
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
describe("My AOS Script", function () {
|
|
34
|
-
it("should work", async () => {
|
|
35
|
-
const ao = await new AO().init(acc[0])
|
|
36
|
-
const { p, pid } = await ao.deploy({ src_data })
|
|
37
|
-
|
|
38
|
-
// dry-run (read-only, no state change)
|
|
39
|
-
const result = await p.d("ActionName", false)
|
|
40
|
-
|
|
41
|
-
// message (mutates state)
|
|
42
|
-
const result2 = await p.m("ActionName", false)
|
|
43
|
-
|
|
44
|
-
// message with extra tags
|
|
45
|
-
const result3 = await p.m("ActionName", { SomeTag: "value" }, false)
|
|
46
|
-
})
|
|
47
|
-
})
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Process Handle Shorthand
|
|
51
|
-
|
|
52
|
-
- `p.d("Action", false)` — dry-run, returns Data string
|
|
53
|
-
- `p.m("Action", false)` — send message, returns Data string
|
|
54
|
-
- `p.m("Action", { Tag: "val" }, false)` — send message with tags
|
|
55
|
-
- `p.v("State")` — get Lua variable as JSON
|
|
56
|
-
- `p.v("Table.items[1]")` — nested access
|
|
57
|
-
|
|
58
|
-
### get/check Patterns
|
|
59
|
-
|
|
60
|
-
```js
|
|
61
|
-
// get: extract output
|
|
62
|
-
await p.d("Get", false) // Data as string
|
|
63
|
-
await p.d("Get", { get: { data: true, json: true } }) // Data as parsed JSON
|
|
64
|
-
await p.msg("Inc", { get: "Status" }) // Specific tag value
|
|
65
|
-
await p.d("Get", { get: { from: "pid", json: true } }) // Filter by sender
|
|
66
|
-
|
|
67
|
-
// check: validate response
|
|
68
|
-
await p.msg("Inc", { check: { Status: "ok" } }) // Tag value check
|
|
69
|
-
await p.msg("Inc", { check: /Success/ }) // Regex match
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## HyperBEAM AOS Testing (integration)
|
|
73
|
-
|
|
74
|
-
Spawns a real Erlang HyperBEAM node. AOS processes run on the HyperBEAM stack via `genesis-wasm` device. Messages go through HTTP with slot-based scheduling. Best for integration testing the full production stack.
|
|
75
|
-
|
|
76
|
-
### Raw HyperBEAM API
|
|
77
|
-
|
|
78
|
-
```js
|
|
79
|
-
import { HyperBEAM } from "wao/test"
|
|
80
|
-
|
|
81
|
-
describe("HyperBEAM", function () {
|
|
82
|
-
let hbeam, hb
|
|
83
|
-
|
|
84
|
-
before(async () => {
|
|
85
|
-
hbeam = await new HyperBEAM({ reset: true }).ready()
|
|
86
|
-
hb = hbeam.hb
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
after(async () => hbeam.kill())
|
|
90
|
-
|
|
91
|
-
it("should work", async () => {
|
|
92
|
-
await hb.post({ path: "/~meta@1.0/info", key: "value" })
|
|
93
|
-
const { out } = await hb.get({ path: "/~meta@1.0/info" })
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### HyperBEAM Spawn Patterns
|
|
99
|
-
|
|
100
|
-
```js
|
|
101
|
-
// Basic spawn (default device)
|
|
102
|
-
const { pid } = await hb.spawn({})
|
|
103
|
-
|
|
104
|
-
// Legacy AOS (genesis-wasm CU)
|
|
105
|
-
const { pid } = await hb.spawnLegacy()
|
|
106
|
-
const { pid } = await hb.spawnAOS()
|
|
107
|
-
|
|
108
|
-
// Lua VM
|
|
109
|
-
const { pid } = await hb.spawnLua()
|
|
110
|
-
|
|
111
|
-
// Custom execution device
|
|
112
|
-
const { pid } = await hb.spawn({ "execution-device": "wao@1.0" })
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Device Stack Testing
|
|
116
|
-
|
|
117
|
-
```js
|
|
118
|
-
const { pid } = await hb.spawn({
|
|
119
|
-
"execution-device": "stack@1.0",
|
|
120
|
-
"device-stack": ["wao@1.0", "patch@1.0"],
|
|
121
|
-
"patch-from": "/results",
|
|
122
|
-
"patch-to": "/cache",
|
|
123
|
-
})
|
|
124
|
-
const { slot } = await hb.schedule({ pid })
|
|
125
|
-
const result = await hb.compute({ pid, slot, path: "/cache/key" })
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### AOS on HyperBEAM (via HB client)
|
|
129
|
-
|
|
130
|
-
```js
|
|
131
|
-
import { HyperBEAM, HB } from "wao/test"
|
|
132
|
-
|
|
133
|
-
let hbeam = await new HyperBEAM({ reset: true, genesis_wasm: true }).ready()
|
|
134
|
-
let hb = await new HB({ url: hbeam.url }).init(jwk)
|
|
135
|
-
|
|
136
|
-
// Spawn AOS process on HyperBEAM
|
|
137
|
-
const { pid } = await hb.spawnLegacy()
|
|
138
|
-
|
|
139
|
-
// Send message (slot-based scheduling)
|
|
140
|
-
const { slot } = await hb.scheduleLegacy({ pid, action: "Inc", data })
|
|
141
|
-
|
|
142
|
-
// Get result
|
|
143
|
-
const result = await hb.computeLegacy({ pid, slot })
|
|
144
|
-
|
|
145
|
-
hbeam.kill()
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### AOS class routed through HyperBEAM
|
|
149
|
-
|
|
150
|
-
```js
|
|
151
|
-
import { AO } from "wao"
|
|
152
|
-
import { HyperBEAM } from "wao/test"
|
|
153
|
-
|
|
154
|
-
let hbeam = await new HyperBEAM({ reset: true, genesis_wasm: true }).ready()
|
|
155
|
-
let ao = await new AO({ hb: hbeam.url }).init(hbeam.jwk)
|
|
156
|
-
|
|
157
|
-
const { pid, p } = await ao.deploy({ src_data })
|
|
158
|
-
await p.m("Inc")
|
|
159
|
-
const result = await p.d("Get")
|
|
160
|
-
|
|
161
|
-
hbeam.kill()
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
Always call `hbeam.kill()` in `after()` to clean up the HyperBEAM Erlang process.
|
|
165
|
-
|
|
166
|
-
## Multi-User Testing
|
|
167
|
-
|
|
168
|
-
Share memory between AO instances to simulate multiple users:
|
|
169
|
-
|
|
170
|
-
```js
|
|
171
|
-
const ao1 = await new AO().init(acc[0])
|
|
172
|
-
const { p, pid } = await ao1.deploy({ src_data })
|
|
173
|
-
|
|
174
|
-
// second user shares the same memory
|
|
175
|
-
const ao2 = await new AO({ mem: ao1.mem }).init(acc[1])
|
|
176
|
-
const p2 = ao2.p(pid)
|
|
177
|
-
await p2.m("Transfer", { Recipient: acc[0].addr, Quantity: "100" })
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## Payment Testing
|
|
181
|
-
|
|
182
|
-
### Simple Pay
|
|
183
|
-
|
|
184
|
-
```js
|
|
185
|
-
const hbeam = await new HyperBEAM({
|
|
186
|
-
simple_pay: true,
|
|
187
|
-
simple_pay_price: 2,
|
|
188
|
-
operator: HyperBEAM.OPERATOR,
|
|
189
|
-
}).ready()
|
|
190
|
-
|
|
191
|
-
// Topup user
|
|
192
|
-
await operator.hb.p("/~simple-pay@1.0/topup", { amount: 15, recipient: user.addr })
|
|
193
|
-
const bal = await user.hb.p("/~simple-pay@1.0/balance")
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### FAFF (Access Control)
|
|
197
|
-
|
|
198
|
-
```js
|
|
199
|
-
const hbeam = await new HyperBEAM({
|
|
200
|
-
faff: [HyperBEAM.OPERATOR, allowedAddr],
|
|
201
|
-
}).ready()
|
|
202
|
-
await assert.rejects(disallowed.hb.p(...)) // rejected
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
### P4 Payment
|
|
206
|
-
|
|
207
|
-
```js
|
|
208
|
-
const hbeam = await new HyperBEAM({
|
|
209
|
-
p4_lua: {
|
|
210
|
-
processor: { body: ledgerScript, name: "ledger.lua" },
|
|
211
|
-
client: { body: clientScript, name: "client.lua" },
|
|
212
|
-
admin: addr,
|
|
213
|
-
balance: { [addr]: 1000 },
|
|
214
|
-
},
|
|
215
|
-
}).ready()
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## Cron Testing
|
|
219
|
-
|
|
220
|
-
```js
|
|
221
|
-
const { body: taskId } = await hb.post({
|
|
222
|
-
path: "/~cron@1.0/every",
|
|
223
|
-
"cron-path": `/~wao@1.0/cron`,
|
|
224
|
-
interval: "1000-milliseconds",
|
|
225
|
-
target: pid,
|
|
226
|
-
})
|
|
227
|
-
await wait(3000)
|
|
228
|
-
await hb.post({ path: "/~cron@1.0/stop", task: taskId })
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
## ANS-104 Format Testing
|
|
232
|
-
|
|
233
|
-
```js
|
|
234
|
-
const hb = new HB({ url: hbeam.url, format: "ans104" })
|
|
235
|
-
const { pid } = await hb.spawn({
|
|
236
|
-
"execution-device": "wao@1.0",
|
|
237
|
-
"Data-Protocol": "ao",
|
|
238
|
-
Variant: "ao.WDB.1",
|
|
239
|
-
})
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
## Port Cleanup
|
|
243
|
-
|
|
244
|
-
Before HyperBEAM tests, kill stale processes:
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
pkill -f beam.smp 2>/dev/null || true
|
|
248
|
-
lsof -ti :10000-10010 | xargs -r kill -9 2>/dev/null || true
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## Running Tests
|
|
252
|
-
|
|
253
|
-
```bash
|
|
254
|
-
yarn test test/aos.test.js # in-memory AOS (fast unit tests)
|
|
255
|
-
yarn test test/hyperbeam.test.js # HyperBEAM (integration tests)
|
|
256
|
-
yarn test # all test files
|
|
257
|
-
```
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"env": {
|
|
3
|
-
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
|
|
4
|
-
},
|
|
5
|
-
"permissions": {
|
|
6
|
-
"allow": [
|
|
7
|
-
"Bash(yarn test *)",
|
|
8
|
-
"Bash(yarn deploy *)",
|
|
9
|
-
"Bash(node *)",
|
|
10
|
-
"Bash(pkill -f beam.smp *)",
|
|
11
|
-
"Bash(lsof *)",
|
|
12
|
-
"Bash(cd HyperBEAM && rebar3 compile)",
|
|
13
|
-
"Bash(cd HyperBEAM && rebar3 as genesis_wasm compile)",
|
|
14
|
-
"Bash(cd HyperBEAM && rebar3 eunit *)",
|
|
15
|
-
"Bash(cd frontend && npm *)",
|
|
16
|
-
"Bash(cd frontend && npx playwright *)"
|
|
17
|
-
],
|
|
18
|
-
"deny": [
|
|
19
|
-
"Bash(rm -rf *)",
|
|
20
|
-
"Edit(.wallet.json)",
|
|
21
|
-
"Edit(.env*)"
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
|
-
"hooks": {
|
|
25
|
-
"PreToolUse": [
|
|
26
|
-
{
|
|
27
|
-
"matcher": "Bash",
|
|
28
|
-
"hooks": [
|
|
29
|
-
{
|
|
30
|
-
"type": "command",
|
|
31
|
-
"command": "INPUT=$(cat); CMD=$(echo \"$INPUT\" | jq -r '.tool_input.command // empty'); if echo \"$CMD\" | grep -qE 'rm\\s+-rf\\s+src/'; then echo 'Blocked: destructive command on src/' >&2; exit 2; fi; exit 0"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
],
|
|
36
|
-
"PostToolUse": [
|
|
37
|
-
{
|
|
38
|
-
"matcher": "Edit|Write",
|
|
39
|
-
"hooks": [
|
|
40
|
-
{
|
|
41
|
-
"type": "command",
|
|
42
|
-
"command": "INPUT=$(cat); FILE=$(echo \"$INPUT\" | jq -r '.tool_input.file_path // empty'); if echo \"$FILE\" | grep -qE '\\.(lua|js)$'; then echo \"File modified: $FILE — run yarn test to verify\" >&2; fi; exit 0"
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
],
|
|
47
|
-
"SessionStart": [
|
|
48
|
-
{
|
|
49
|
-
"matcher": "compact",
|
|
50
|
-
"hooks": [
|
|
51
|
-
{
|
|
52
|
-
"type": "command",
|
|
53
|
-
"command": "MSG='WAO context restored after compaction: Send().receive() does NOT work on genesis-wasm — use fire-and-forget + separate AOS scripts. Action tags must be uppercase. Always kill stale beam.smp before HyperBEAM tests. Always call hbeam.kill() in after(). Read docs/ for full API references: wao-sdk.md (JS), aos-lua.md (Lua), hyperbeam-devices.md (devices), hyperbeam-dev.md (Erlang), debug.md (troubleshooting). Dashboard: yarn start (API :3333 + Vite :5174). MCP: get_progress / open_dashboard.'; if [ -f tasks.json ]; then FEATURE=$(cat tasks.json | jq -r '.feature // \"unknown\"'); STEP=$(cat tasks.json | jq -r '.current_step // 0'); PENDING=$(cat tasks.json | jq '[.tasks[] | select(.status != \"done\")] | length'); MSG=\"$MSG BUILD STATE: \\\"$FEATURE\\\" — step $STEP, $PENDING tasks remaining.\"; fi; echo \"$MSG\""
|
|
54
|
-
}
|
|
55
|
-
]
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"hooks": [
|
|
59
|
-
{
|
|
60
|
-
"type": "command",
|
|
61
|
-
"command": "if [ -f tasks.json ] && [ -f plan.md ]; then STEP=$(cat tasks.json | jq -r '.current_step // 0'); PENDING=$(cat tasks.json | jq '[.tasks[] | select(.status != \"done\")] | length'); FEATURE=$(cat tasks.json | jq -r '.feature // \"unknown\"'); echo \"BUILD RESUME: \\\"$FEATURE\\\" has $PENDING remaining tasks (current_step: $STEP). Read tasks.json and resume /build from the first pending task.\"; else echo 'NO ACTIVE BUILD: Run /build <feature> to start a new build workflow.'; fi"
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
"TaskCompleted": [
|
|
67
|
-
{
|
|
68
|
-
"hooks": [
|
|
69
|
-
{
|
|
70
|
-
"type": "command",
|
|
71
|
-
"command": "INPUT=$(cat); TASK=$(echo \"$INPUT\" | jq -r '.task.subject // empty'); if echo \"$TASK\" | grep -qiE '(build|implement|add|create|fix|update)'; then echo '=== Unit tests ===' >&2; cd \"$(pwd)\" && yarn test 2>&1 | tail -5; R1=$?; R2=0; R3=0; if command -v erl >/dev/null 2>&1 && ls test/*.test.js >/dev/null 2>&1; then echo '=== HyperBEAM integration ===' >&2; yarn test 2>&1 | tail -5; R2=$?; fi; if [ -d frontend ]; then echo '=== Frontend tests ===' >&2; cd frontend && npm run test:unit 2>&1 | tail -5; R3=$?; cd ..; fi; if [ $R1 -ne 0 ] || [ $R2 -ne 0 ] || [ $R3 -ne 0 ]; then echo 'BLOCKED: Tests are failing. Fix before marking complete.' >&2; exit 2; fi; fi; exit 0"
|
|
72
|
-
}
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
],
|
|
76
|
-
"Stop": [
|
|
77
|
-
{
|
|
78
|
-
"hooks": [
|
|
79
|
-
{
|
|
80
|
-
"type": "command",
|
|
81
|
-
"command": "INPUT=$(cat); REASON=$(echo \"$INPUT\" | jq -r '.reason // empty'); if [ \"$REASON\" = \"user\" ]; then exit 0; fi; echo 'Check: are all tasks completed and tests passing?' >&2; exit 0"
|
|
82
|
-
}
|
|
83
|
-
]
|
|
84
|
-
}
|
|
85
|
-
],
|
|
86
|
-
"Notification": [
|
|
87
|
-
{
|
|
88
|
-
"hooks": [
|
|
89
|
-
{
|
|
90
|
-
"type": "command",
|
|
91
|
-
"command": "INPUT=$(cat); MSG=$(echo \"$INPUT\" | jq -r '.message // empty'); echo \"$MSG\" >&2; exit 0"
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
}
|
|
95
|
-
],
|
|
96
|
-
"TeammateIdle": [
|
|
97
|
-
{
|
|
98
|
-
"hooks": [
|
|
99
|
-
{
|
|
100
|
-
"type": "command",
|
|
101
|
-
"command": "INPUT=$(cat); echo 'Before going idle: verify all assigned tasks are done, tests pass, and no stale beam.smp processes are running.' >&2; exit 0"
|
|
102
|
-
}
|
|
103
|
-
]
|
|
104
|
-
}
|
|
105
|
-
]
|
|
106
|
-
},
|
|
107
|
-
"teammateMode": "in-process",
|
|
108
|
-
"teammatePermissionMode": "dangerously-skip-permissions"
|
|
109
|
-
}
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: build
|
|
3
|
-
description: "Full build workflow — plan, build, test, validate. Manages tasks.json throughout every step. Use when user says 'build this', 'start building', 'implement this feature', or 'make this'. Not for single-file fixes — use /build-aos, /build-device, or /build-module directly."
|
|
4
|
-
argument-hint: "<feature-description>"
|
|
5
|
-
disable-model-invocation: true
|
|
6
|
-
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
Full build orchestrator. Sequences through plan → build → test → validate → README, managing `tasks.json` throughout.
|
|
10
|
-
|
|
11
|
-
## Performance Notes
|
|
12
|
-
- Take your time on each task — quality is more important than speed
|
|
13
|
-
- Read the relevant docs thoroughly before writing code
|
|
14
|
-
- Do not skip validation steps even if they seem redundant
|
|
15
|
-
- When iterating on test failures, identify the root cause before changing code
|
|
16
|
-
|
|
17
|
-
## Examples
|
|
18
|
-
|
|
19
|
-
### Start a new build
|
|
20
|
-
```
|
|
21
|
-
/build A counter app that tracks clicks per user, with a leaderboard showing top 10
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### Resume an interrupted build
|
|
25
|
-
```
|
|
26
|
-
/build
|
|
27
|
-
```
|
|
28
|
-
(Automatically detects tasks.json and resumes)
|
|
29
|
-
|
|
30
|
-
## Steps
|
|
31
|
-
|
|
32
|
-
### 1. Check for existing plan (resume support)
|
|
33
|
-
|
|
34
|
-
Read `plan.md` and `tasks.json` at the project root. If both exist and tasks.json has `"current_step"`, resume:
|
|
35
|
-
|
|
36
|
-
1. Find the first task with `"status": "in_progress"` — resume debugging that task immediately.
|
|
37
|
-
2. If no `in_progress` task, find the first task with `"status": "pending"` — start it.
|
|
38
|
-
3. If ALL tasks are `"done"`, **re-verify every test task** by running its tests:
|
|
39
|
-
- `aos-test` → `yarn test <files>`
|
|
40
|
-
- `aos-integration` → `yarn test <files>`
|
|
41
|
-
- `device` → `cd $HB_DIR && rebar3 eunit --module=<module>`
|
|
42
|
-
- `device-integration` → `yarn test <files>`
|
|
43
|
-
- `frontend-test` → `cd frontend && npm run test:unit`
|
|
44
|
-
- `frontend-integration` → `cd frontend && npm run test:e2e`
|
|
45
|
-
- `validate` → run all validation gates
|
|
46
|
-
|
|
47
|
-
If any test task fails, set that task back to `"in_progress"` in tasks.json and resume debugging it. Do NOT skip over failing tests just because the task was previously marked done.
|
|
48
|
-
|
|
49
|
-
If no plan exists, proceed to step 2.
|
|
50
|
-
|
|
51
|
-
### 2. Plan
|
|
52
|
-
|
|
53
|
-
**Enter plan mode using the `EnterPlanMode` tool immediately.** Do not skip this step.
|
|
54
|
-
|
|
55
|
-
If `$ARGUMENTS` is provided, use it as the feature description. If `$ARGUMENTS` is empty, ask the user what they want to build — but only this one question, then proceed immediately.
|
|
56
|
-
|
|
57
|
-
While in plan mode, read `.claude/skills/plan/SKILL.md` and execute ALL of its steps:
|
|
58
|
-
1. Ask the user which tracks to build (AOS / Custom Modules / Device / Frontend)
|
|
59
|
-
2. Read the relevant docs for the selected tracks
|
|
60
|
-
3. Design the feature
|
|
61
|
-
4. Write `plan.md` and `tasks.json` at the project root
|
|
62
|
-
|
|
63
|
-
Once `plan.md` and `tasks.json` are written, **use `ExitPlanMode` to present the plan for user approval.** This exits plan mode and asks the user to approve before building begins.
|
|
64
|
-
|
|
65
|
-
After the user approves, update `plan.md` status to `APPROVED` and proceed to step 3.
|
|
66
|
-
|
|
67
|
-
### 3. Clean up sample files
|
|
68
|
-
|
|
69
|
-
Remove the starter reference files that ship with the template. These exist so users can explore the project before building, but should be cleared before a real build:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
rm -f src/counter.lua test/aos.test.js test/hyperbeam.test.js
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Also remove any other sample files (`src/registry.lua`, `src/token.lua`, `test/registry.test.js`, `test/token.test.js`) if they exist:
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
rm -f src/registry.lua src/token.lua test/registry.test.js test/token.test.js
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### 4. Verify prerequisites
|
|
82
|
-
|
|
83
|
-
Before starting the build loop, check which tracks are selected and verify their prerequisites.
|
|
84
|
-
|
|
85
|
-
**Device track or integration tests** — require HyperBEAM configured via `.env.hyperbeam`:
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
grep '^CWD=' .env.hyperbeam 2>/dev/null | cut -d= -f2-
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
If the plan includes `device`, `device-integration`, `aos-integration`, `module-lua`, `module-wasm`, or `module-test` tasks, verify:
|
|
92
|
-
|
|
93
|
-
1. `.env.hyperbeam` exists and has a `CWD` value
|
|
94
|
-
2. The `CWD` path points to a valid HyperBEAM directory (`$CWD/src` exists)
|
|
95
|
-
3. `rebar3` is available (for device compilation)
|
|
96
|
-
|
|
97
|
-
If any check fails, **stop and tell the user**:
|
|
98
|
-
|
|
99
|
-
> Device/integration tasks require HyperBEAM. Configure `.env.hyperbeam`:
|
|
100
|
-
> ```bash
|
|
101
|
-
> echo "CWD=/path/to/your/HyperBEAM" >> .env.hyperbeam
|
|
102
|
-
> ```
|
|
103
|
-
>
|
|
104
|
-
> Or re-run `npx wao create` and choose option 1 (clone) or 2 (link).
|
|
105
|
-
|
|
106
|
-
Only proceed once all prerequisites are met.
|
|
107
|
-
|
|
108
|
-
### 5. Build loop
|
|
109
|
-
|
|
110
|
-
For each task in `tasks.json` (in `id` order):
|
|
111
|
-
|
|
112
|
-
a. Update the task status to `"in_progress"` in `tasks.json` and update `current_step`.
|
|
113
|
-
|
|
114
|
-
b. Read the skill file for this task's type and follow its instructions. The mapping from task type to skill file:
|
|
115
|
-
|
|
116
|
-
| Task type | Read and follow |
|
|
117
|
-
|-----------|-----------------|
|
|
118
|
-
| `aos` | `.claude/skills/build-aos/SKILL.md` |
|
|
119
|
-
| `aos-test` | `.claude/skills/build-aos/SKILL.md` |
|
|
120
|
-
| `aos-integration` | `.claude/skills/test-hb/SKILL.md` |
|
|
121
|
-
| `module-lua` | `.claude/skills/build-module/SKILL.md` |
|
|
122
|
-
| `module-wasm` | `.claude/skills/build-module/SKILL.md` |
|
|
123
|
-
| `module-test` | `.claude/skills/build-module/SKILL.md` |
|
|
124
|
-
| `device` | `.claude/skills/build-device/SKILL.md` (eunit tests are inline — same file) |
|
|
125
|
-
| `device-integration` | `.claude/skills/test-device/SKILL.md` |
|
|
126
|
-
| `frontend` | `.claude/skills/build-frontend/SKILL.md` |
|
|
127
|
-
| `frontend-test` | `.claude/skills/build-frontend/SKILL.md` |
|
|
128
|
-
| `frontend-integration` | `.claude/skills/test-e2e/SKILL.md` |
|
|
129
|
-
| `readme` | `.claude/skills/readme/SKILL.md` |
|
|
130
|
-
| `validate` | `.claude/skills/validate/SKILL.md` |
|
|
131
|
-
|
|
132
|
-
c. Follow the skill's instructions for this task, using the task `id` as context.
|
|
133
|
-
|
|
134
|
-
d. After completing, verify the task's `done_when` criteria are met:
|
|
135
|
-
- For test tasks: tests must pass 100%
|
|
136
|
-
- For build tasks: files must exist and compile/load without errors
|
|
137
|
-
|
|
138
|
-
e. If the criteria are met, update the task status to `"done"` in `tasks.json`.
|
|
139
|
-
|
|
140
|
-
f. **If tests fail, keep debugging.** Do not stop. On each iteration:
|
|
141
|
-
1. Read the full error output — stack traces, assertion messages, log lines
|
|
142
|
-
2. Identify the root cause (wrong logic, missing handler, bad import, timing issue, etc.)
|
|
143
|
-
3. Fix the code — not the test, unless the test itself has a bug
|
|
144
|
-
4. Re-run the failing test file specifically (faster feedback than full suite)
|
|
145
|
-
5. If the same error persists after 3 different fix attempts, step back:
|
|
146
|
-
- Re-read the relevant docs (AOS patterns, HyperBEAM device protocol, etc.)
|
|
147
|
-
- Check if the plan itself has a wrong assumption
|
|
148
|
-
- Try a completely different approach
|
|
149
|
-
6. Continue iterating until all tests pass — there is no retry limit
|
|
150
|
-
|
|
151
|
-
g. Only escalate to the user if:
|
|
152
|
-
- The failure is environmental (port conflict, missing binary, permissions)
|
|
153
|
-
- The test requires user input (wallet, external service URL)
|
|
154
|
-
- You've tried 10+ iterations with no progress on the same error
|
|
155
|
-
|
|
156
|
-
h. Move to the next task.
|
|
157
|
-
|
|
158
|
-
### 6. README
|
|
159
|
-
|
|
160
|
-
After all build and test tasks are done, read `.claude/skills/readme/SKILL.md` and follow its instructions to generate README.md.
|
|
161
|
-
|
|
162
|
-
### 7. Final validation
|
|
163
|
-
|
|
164
|
-
Read `.claude/skills/validate/SKILL.md` and follow its instructions to run all validation gates.
|
|
165
|
-
|
|
166
|
-
### 8. Summary
|
|
167
|
-
|
|
168
|
-
Report final results:
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
## Build Complete
|
|
172
|
-
|
|
173
|
-
Feature: {feature name}
|
|
174
|
-
Tracks: {AOS, Custom Modules, Device, Frontend}
|
|
175
|
-
|
|
176
|
-
| Task | Status |
|
|
177
|
-
|------|--------|
|
|
178
|
-
| ... | done/skipped/failed |
|
|
179
|
-
|
|
180
|
-
Overall: PASS / FAIL
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
## Failure handling
|
|
184
|
-
|
|
185
|
-
- **Test failures are expected.** The build loop is: write code → run tests → read failures → fix → re-run. This is the core loop — never skip it, never give up early.
|
|
186
|
-
- If a skill exits with test failures, read the full output, diagnose the root cause, fix the code (not the test), and re-run. Keep iterating until 100% pass.
|
|
187
|
-
- If a skill cannot be dispatched (unknown type), skip and warn.
|
|
188
|
-
- If the user interrupts, save current state to tasks.json so the next session can resume.
|
|
189
|
-
|
|
190
|
-
## Rollback
|
|
191
|
-
|
|
192
|
-
If a task corrupts working code:
|
|
193
|
-
1. Check git status for what changed
|
|
194
|
-
2. Restore the last working version: `git checkout -- <file>` for specific files
|
|
195
|
-
3. Re-run tests to confirm the rollback worked
|
|
196
|
-
4. Update the task status back to `pending` in tasks.json
|
|
197
|
-
5. Retry with a different approach
|
|
198
|
-
|
|
199
|
-
Never force a task to `done` status with failing tests. The TaskCompleted hook will block it anyway.
|
|
200
|
-
|
|
201
|
-
## Troubleshooting
|
|
202
|
-
|
|
203
|
-
### Build stalls on a single task
|
|
204
|
-
- Check if it's a test failure loop — read the last test output
|
|
205
|
-
- If the same error persists after 3 different fix attempts, step back and reconsider — the plan may have a wrong assumption
|
|
206
|
-
- Run `/debug` to diagnose port/process/WASM issues
|
|
207
|
-
|
|
208
|
-
### Resume doesn't pick up the right task
|
|
209
|
-
- Read `tasks.json` directly and check `current_step` value
|
|
210
|
-
- Verify task statuses — a task stuck as `in_progress` blocks progression
|
|
211
|
-
|
|
212
|
-
### Permission denied on yarn test
|
|
213
|
-
- Check `node --version` is 22+ (24+ recommended)
|
|
214
|
-
- On Node 22, set `NODE_OPTIONS=--experimental-wasm-memory64`; on Node 24+ the flag is default-on and is rejected if passed explicitly
|