gitextract_d_p9wdmp/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ └── feature-request.yml │ ├── copilot-instructions.md │ ├── dependabot.yml │ └── workflows/ │ ├── build-helper.yml │ ├── bump-version.yml │ ├── codeql.yml │ ├── copilot-setup-steps.yml │ ├── deploy-docsite.yml │ ├── merge-gatekeeper.yml │ ├── publish-release.yml │ ├── testdriver-build.yml │ └── testdriver.yml ├── .gitignore ├── .golangci.yml ├── .kilocode/ │ ├── rules/ │ │ ├── overview.md │ │ └── rules.md │ └── skills/ │ ├── add-config/ │ │ └── SKILL.md │ ├── add-rpc/ │ │ └── SKILL.md │ ├── add-wshcmd/ │ │ └── SKILL.md │ ├── context-menu/ │ │ └── SKILL.md │ ├── create-view/ │ │ └── SKILL.md │ ├── electron-api/ │ │ └── SKILL.md │ ├── waveenv/ │ │ └── SKILL.md │ └── wps-events/ │ └── SKILL.md ├── .prettierignore ├── .roo/ │ └── rules/ │ ├── overview.md │ └── rules.md ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── .zed/ │ └── settings.json ├── ACKNOWLEDGEMENTS.md ├── BUILD.md ├── CNAME ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── README.ko.md ├── README.md ├── RELEASES.md ├── ROADMAP.md ├── SECURITY.md ├── Taskfile.yml ├── aiprompts/ │ ├── aimodesconfig.md │ ├── aisdk-streaming.md │ ├── aisdk-uimessage-type.md │ ├── anthropic-messages-api.md │ ├── anthropic-streaming.md │ ├── blockcontroller-lifecycle.md │ ├── config-system.md │ ├── conn-arch.md │ ├── contextmenu.md │ ├── fe-conn-arch.md │ ├── focus-layout.md │ ├── focus.md │ ├── getsetconfigvar.md │ ├── layout-simplification.md │ ├── layout.md │ ├── monaco-v0.53.md │ ├── newview.md │ ├── openai-request.md │ ├── openai-streaming-text.md │ ├── openai-streaming.md │ ├── tailwind-container-queries.md │ ├── tsunami-builder.md │ ├── usechat-backend-design.md │ ├── view-prompt.md │ ├── wave-osc-16162.md │ ├── waveai-architecture.md │ ├── waveai-focus-updates.md │ └── wps-events.md ├── build/ │ ├── deb-postinstall.tpl │ ├── entitlements.mac.plist │ └── icon.icns ├── cmd/ │ ├── generatego/ │ │ └── main-generatego.go │ ├── generateschema/ │ │ └── main-generateschema.go │ ├── generatets/ │ │ └── main-generatets.go │ ├── packfiles/ │ │ └── main-packfiles.go │ ├── server/ │ │ └── main-server.go │ ├── test/ │ │ └── test-main.go │ ├── test-conn/ │ │ ├── cliprovider.go │ │ ├── main-test-conn.go │ │ └── testutil.go │ ├── test-streammanager/ │ │ ├── bridge.go │ │ ├── deliverypipe.go │ │ ├── generator.go │ │ ├── main-test-streammanager.go │ │ ├── metrics.go │ │ └── verifier.go │ ├── testai/ │ │ ├── main-testai.go │ │ └── testschema.json │ ├── testopenai/ │ │ └── main-testopenai.go │ ├── testsummarize/ │ │ └── main-testsummarize.go │ └── wsh/ │ ├── cmd/ │ │ ├── csscolormap.go │ │ ├── setmeta_test.go │ │ ├── wshcmd-ai.go │ │ ├── wshcmd-badge.go │ │ ├── wshcmd-blocks.go │ │ ├── wshcmd-conn.go │ │ ├── wshcmd-connserver.go │ │ ├── wshcmd-createblock.go │ │ ├── wshcmd-debug.go │ │ ├── wshcmd-debugterm.go │ │ ├── wshcmd-debugterm_test.go │ │ ├── wshcmd-deleteblock.go │ │ ├── wshcmd-editconfig.go │ │ ├── wshcmd-editor.go │ │ ├── wshcmd-file-util.go │ │ ├── wshcmd-file.go │ │ ├── wshcmd-focusblock.go │ │ ├── wshcmd-getmeta.go │ │ ├── wshcmd-getvar.go │ │ ├── wshcmd-jobdebug.go │ │ ├── wshcmd-jobmanager.go │ │ ├── wshcmd-launch.go │ │ ├── wshcmd-notify.go │ │ ├── wshcmd-rcfiles.go │ │ ├── wshcmd-readfile.go │ │ ├── wshcmd-root.go │ │ ├── wshcmd-run.go │ │ ├── wshcmd-secret.go │ │ ├── wshcmd-setbg.go │ │ ├── wshcmd-setconfig.go │ │ ├── wshcmd-setmeta.go │ │ ├── wshcmd-setvar.go │ │ ├── wshcmd-shell-unix.go │ │ ├── wshcmd-shell-win.go │ │ ├── wshcmd-ssh.go │ │ ├── wshcmd-ssh_test.go │ │ ├── wshcmd-tabindicator.go │ │ ├── wshcmd-term.go │ │ ├── wshcmd-termscrollback.go │ │ ├── wshcmd-test.go │ │ ├── wshcmd-token.go │ │ ├── wshcmd-version.go │ │ ├── wshcmd-view.go │ │ ├── wshcmd-wavepath.go │ │ ├── wshcmd-web.go │ │ ├── wshcmd-workspace.go │ │ └── wshcmd-wsl.go │ └── main-wsh.go ├── db/ │ ├── db.go │ ├── migrations-filestore/ │ │ ├── 000001_init.down.sql │ │ └── 000001_init.up.sql │ └── migrations-wstore/ │ ├── 000001_init.down.sql │ ├── 000001_init.up.sql │ ├── 000002_init.down.sql │ ├── 000002_init.up.sql │ ├── 000003_activity.down.sql │ ├── 000003_activity.up.sql │ ├── 000004_history.down.sql │ ├── 000004_history.up.sql │ ├── 000005_blockparent.down.sql │ ├── 000005_blockparent.up.sql │ ├── 000006_workspace.down.sql │ ├── 000006_workspace.up.sql │ ├── 000007_events.down.sql │ ├── 000007_events.up.sql │ ├── 000008_aimeta.down.sql │ ├── 000008_aimeta.up.sql │ ├── 000009_mainserver.down.sql │ ├── 000009_mainserver.up.sql │ ├── 000010_merge_pinned_tabs.down.sql │ ├── 000010_merge_pinned_tabs.up.sql │ ├── 000011_job.down.sql │ └── 000011_job.up.sql ├── docs/ │ ├── .editorconfig │ ├── .gitignore │ ├── .prettierignore │ ├── .remarkrc │ ├── README.md │ ├── babel.config.js │ ├── docs/ │ │ ├── ai-presets.mdx │ │ ├── claude-code.mdx │ │ ├── config.mdx │ │ ├── connections.mdx │ │ ├── customization.mdx │ │ ├── customwidgets.mdx │ │ ├── durable-sessions.mdx │ │ ├── faq.mdx │ │ ├── gettingstarted.mdx │ │ ├── index.mdx │ │ ├── keybindings.mdx │ │ ├── layout.mdx │ │ ├── presets.mdx │ │ ├── releasenotes.mdx │ │ ├── secrets.mdx │ │ ├── tabs.mdx │ │ ├── telemetry-old.mdx │ │ ├── telemetry.mdx │ │ ├── waveai-modes.mdx │ │ ├── waveai.mdx │ │ ├── widgets.mdx │ │ ├── workspaces.mdx │ │ ├── wsh-reference.mdx │ │ └── wsh.mdx │ ├── docusaurus.config.ts │ ├── eslint.config.js │ ├── package.json │ ├── prettier.config.cjs │ ├── src/ │ │ ├── components/ │ │ │ ├── card.css │ │ │ ├── card.tsx │ │ │ ├── kbd.css │ │ │ ├── kbd.tsx │ │ │ ├── platformcontext.css │ │ │ ├── platformcontext.tsx │ │ │ ├── versionbadge.css │ │ │ └── versionbadge.tsx │ │ ├── css/ │ │ │ └── custom.scss │ │ ├── renderer/ │ │ │ └── image-renderers.ts │ │ └── theme/ │ │ └── MDXComponents/ │ │ └── Heading.tsx │ ├── static/ │ │ └── .nojekyll │ └── tsconfig.json ├── electron-builder.config.cjs ├── electron.vite.config.ts ├── emain/ │ ├── authkey.ts │ ├── emain-activity.ts │ ├── emain-builder.ts │ ├── emain-events.ts │ ├── emain-ipc.ts │ ├── emain-log.ts │ ├── emain-menu.ts │ ├── emain-platform.ts │ ├── emain-tabview.ts │ ├── emain-util.ts │ ├── emain-wavesrv.ts │ ├── emain-web.ts │ ├── emain-window.ts │ ├── emain-wsh.ts │ ├── emain.ts │ ├── launchsettings.ts │ ├── preload-webview.ts │ ├── preload.ts │ └── updater.ts ├── eslint.config.js ├── frontend/ │ ├── app/ │ │ ├── aipanel/ │ │ │ ├── ai-utils.ts │ │ │ ├── aidroppedfiles.tsx │ │ │ ├── aifeedbackbuttons.tsx │ │ │ ├── aimessage.tsx │ │ │ ├── aimode.tsx │ │ │ ├── aipanel-contextmenu.ts │ │ │ ├── aipanel.tsx │ │ │ ├── aipanelheader.tsx │ │ │ ├── aipanelinput.tsx │ │ │ ├── aipanelmessages.tsx │ │ │ ├── airatelimitstrip.tsx │ │ │ ├── aitooluse.tsx │ │ │ ├── aitypes.ts │ │ │ ├── byokannouncement.tsx │ │ │ ├── restorebackupmodal.tsx │ │ │ ├── telemetryrequired.tsx │ │ │ ├── waveai-focus-utils.ts │ │ │ └── waveai-model.tsx │ │ ├── app-bg.tsx │ │ ├── app.scss │ │ ├── app.tsx │ │ ├── block/ │ │ │ ├── block-model.ts │ │ │ ├── block.scss │ │ │ ├── block.tsx │ │ │ ├── blockenv.ts │ │ │ ├── blockframe-header.tsx │ │ │ ├── blockframe.tsx │ │ │ ├── blocktypes.ts │ │ │ ├── blockutil.tsx │ │ │ ├── connectionbutton.tsx │ │ │ ├── connstatusoverlay.tsx │ │ │ └── durable-session-flyover.tsx │ │ ├── element/ │ │ │ ├── ansiline.tsx │ │ │ ├── button.scss │ │ │ ├── button.tsx │ │ │ ├── copybutton.scss │ │ │ ├── copybutton.tsx │ │ │ ├── emojibutton.tsx │ │ │ ├── emojipalette.scss │ │ │ ├── emojipalette.tsx │ │ │ ├── errorboundary.tsx │ │ │ ├── expandablemenu.scss │ │ │ ├── expandablemenu.tsx │ │ │ ├── flyoutmenu.scss │ │ │ ├── flyoutmenu.tsx │ │ │ ├── iconbutton.scss │ │ │ ├── iconbutton.tsx │ │ │ ├── input.scss │ │ │ ├── input.tsx │ │ │ ├── linkbutton.scss │ │ │ ├── linkbutton.tsx │ │ │ ├── magnify.scss │ │ │ ├── magnify.tsx │ │ │ ├── markdown-contentblock-plugin.ts │ │ │ ├── markdown-util.ts │ │ │ ├── markdown.scss │ │ │ ├── markdown.tsx │ │ │ ├── menubutton.scss │ │ │ ├── menubutton.tsx │ │ │ ├── modal.scss │ │ │ ├── modal.tsx │ │ │ ├── multilineinput.scss │ │ │ ├── multilineinput.tsx │ │ │ ├── popover.scss │ │ │ ├── popover.tsx │ │ │ ├── progressbar.scss │ │ │ ├── progressbar.tsx │ │ │ ├── quickelems.scss │ │ │ ├── quickelems.tsx │ │ │ ├── quicktips.tsx │ │ │ ├── remark-mermaid-to-tag.ts │ │ │ ├── search.scss │ │ │ ├── search.tsx │ │ │ ├── streamdown.tsx │ │ │ ├── toggle.scss │ │ │ ├── toggle.tsx │ │ │ ├── tooltip.tsx │ │ │ ├── typingindicator.scss │ │ │ └── typingindicator.tsx │ │ ├── hook/ │ │ │ ├── useDimensions.tsx │ │ │ └── useLongClick.tsx │ │ ├── modals/ │ │ │ ├── about.tsx │ │ │ ├── conntypeahead.tsx │ │ │ ├── messagemodal.scss │ │ │ ├── messagemodal.tsx │ │ │ ├── modal.scss │ │ │ ├── modal.tsx │ │ │ ├── modalregistry.tsx │ │ │ ├── modalsrenderer.tsx │ │ │ ├── typeaheadmodal.scss │ │ │ ├── typeaheadmodal.tsx │ │ │ └── userinputmodal.tsx │ │ ├── monaco/ │ │ │ ├── monaco-env.ts │ │ │ ├── monaco-react.tsx │ │ │ ├── schemaendpoints.ts │ │ │ └── yamlworker.js │ │ ├── onboarding/ │ │ │ ├── fakechat.tsx │ │ │ ├── onboarding-command.tsx │ │ │ ├── onboarding-common.tsx │ │ │ ├── onboarding-durable.tsx │ │ │ ├── onboarding-features-footer.tsx │ │ │ ├── onboarding-features.tsx │ │ │ ├── onboarding-layout-term.tsx │ │ │ ├── onboarding-layout.tsx │ │ │ ├── onboarding-starask.tsx │ │ │ ├── onboarding-upgrade-minor.tsx │ │ │ ├── onboarding-upgrade-patch.tsx │ │ │ ├── onboarding-upgrade-v0121.tsx │ │ │ ├── onboarding-upgrade-v0122.tsx │ │ │ ├── onboarding-upgrade-v0123.tsx │ │ │ ├── onboarding-upgrade-v0130.tsx │ │ │ ├── onboarding-upgrade-v0131.tsx │ │ │ ├── onboarding-upgrade-v0140.tsx │ │ │ ├── onboarding-upgrade-v0141.tsx │ │ │ ├── onboarding-upgrade-v0142.tsx │ │ │ ├── onboarding-upgrade.tsx │ │ │ └── onboarding.tsx │ │ ├── reset.scss │ │ ├── shadcn/ │ │ │ └── lib/ │ │ │ └── utils.ts │ │ ├── store/ │ │ │ ├── badge.ts │ │ │ ├── client-model.ts │ │ │ ├── connections-model.ts │ │ │ ├── contextmenu.test.ts │ │ │ ├── contextmenu.ts │ │ │ ├── counters.ts │ │ │ ├── focusManager.ts │ │ │ ├── global-atoms.test.ts │ │ │ ├── global-atoms.ts │ │ │ ├── global-model.ts │ │ │ ├── global.ts │ │ │ ├── jotaiStore.ts │ │ │ ├── keymodel.ts │ │ │ ├── modalmodel.ts │ │ │ ├── services.ts │ │ │ ├── tab-model.ts │ │ │ ├── tabrpcclient.ts │ │ │ ├── windowtype.ts │ │ │ ├── wos.ts │ │ │ ├── wps.ts │ │ │ ├── ws.ts │ │ │ ├── wshclient.ts │ │ │ ├── wshclientapi.ts │ │ │ ├── wshrouter.ts │ │ │ ├── wshrpcutil-base.ts │ │ │ └── wshrpcutil.ts │ │ ├── suggestion/ │ │ │ └── suggestion.tsx │ │ ├── tab/ │ │ │ ├── tab.scss │ │ │ ├── tab.tsx │ │ │ ├── tabbadges.tsx │ │ │ ├── tabbar-model.ts │ │ │ ├── tabbar.scss │ │ │ ├── tabbar.tsx │ │ │ ├── tabbarenv.ts │ │ │ ├── tabcontent.tsx │ │ │ ├── tabcontextmenu.ts │ │ │ ├── updatebanner.tsx │ │ │ ├── vtab.test.tsx │ │ │ ├── vtab.tsx │ │ │ ├── vtabbar.tsx │ │ │ ├── vtabbarenv.ts │ │ │ ├── workspaceeditor.scss │ │ │ ├── workspaceeditor.tsx │ │ │ ├── workspaceswitcher.scss │ │ │ └── workspaceswitcher.tsx │ │ ├── theme.scss │ │ ├── treeview/ │ │ │ ├── treeview.test.ts │ │ │ └── treeview.tsx │ │ ├── view/ │ │ │ ├── aifilediff/ │ │ │ │ └── aifilediff.tsx │ │ │ ├── codeeditor/ │ │ │ │ ├── codeeditor.tsx │ │ │ │ └── diffviewer.tsx │ │ │ ├── helpview/ │ │ │ │ └── helpview.tsx │ │ │ ├── launcher/ │ │ │ │ └── launcher.tsx │ │ │ ├── preview/ │ │ │ │ ├── csvview.scss │ │ │ │ ├── csvview.tsx │ │ │ │ ├── directorypreview.scss │ │ │ │ ├── entry-manager.tsx │ │ │ │ ├── preview-directory-utils.tsx │ │ │ │ ├── preview-directory.tsx │ │ │ │ ├── preview-edit.tsx │ │ │ │ ├── preview-error-overlay.tsx │ │ │ │ ├── preview-markdown.tsx │ │ │ │ ├── preview-model.tsx │ │ │ │ ├── preview-streaming.tsx │ │ │ │ ├── preview.tsx │ │ │ │ └── previewenv.ts │ │ │ ├── quicktipsview/ │ │ │ │ └── quicktipsview.tsx │ │ │ ├── sysinfo/ │ │ │ │ └── sysinfo.tsx │ │ │ ├── term/ │ │ │ │ ├── fitaddon.ts │ │ │ │ ├── ijson.tsx │ │ │ │ ├── osc-handlers.ts │ │ │ │ ├── shellblocking.ts │ │ │ │ ├── term-model.ts │ │ │ │ ├── term-tooltip.tsx │ │ │ │ ├── term-wsh.tsx │ │ │ │ ├── term.scss │ │ │ │ ├── term.tsx │ │ │ │ ├── termsticker.tsx │ │ │ │ ├── termtheme.ts │ │ │ │ ├── termutil.ts │ │ │ │ ├── termwrap.ts │ │ │ │ └── xterm.css │ │ │ ├── tsunami/ │ │ │ │ └── tsunami.tsx │ │ │ ├── vdom/ │ │ │ │ ├── vdom-model.tsx │ │ │ │ ├── vdom-utils.tsx │ │ │ │ └── vdom.tsx │ │ │ ├── waveai/ │ │ │ │ ├── waveai.scss │ │ │ │ └── waveai.tsx │ │ │ ├── waveconfig/ │ │ │ │ ├── secretscontent.tsx │ │ │ │ ├── waveaivisual.tsx │ │ │ │ ├── waveconfig-model.ts │ │ │ │ ├── waveconfig.tsx │ │ │ │ └── waveconfigenv.ts │ │ │ └── webview/ │ │ │ ├── webview.scss │ │ │ ├── webview.test.tsx │ │ │ ├── webview.tsx │ │ │ └── webviewenv.ts │ │ ├── waveenv/ │ │ │ ├── mockboundary.tsx │ │ │ ├── waveenv.ts │ │ │ └── waveenvimpl.ts │ │ └── workspace/ │ │ ├── widgetfilter.test.ts │ │ ├── widgetfilter.ts │ │ ├── widgets.tsx │ │ ├── workspace-layout-model.ts │ │ └── workspace.tsx │ ├── builder/ │ │ ├── app-selection-modal.tsx │ │ ├── builder-app.tsx │ │ ├── builder-apppanel.tsx │ │ ├── builder-buildpanel.tsx │ │ ├── builder-workspace.tsx │ │ ├── store/ │ │ │ ├── builder-apppanel-model.ts │ │ │ ├── builder-buildpanel-model.ts │ │ │ └── builder-focusmanager.ts │ │ ├── tabs/ │ │ │ ├── builder-codetab.tsx │ │ │ ├── builder-configdatatab.tsx │ │ │ ├── builder-filestab.tsx │ │ │ ├── builder-previewtab.tsx │ │ │ └── builder-secrettab.tsx │ │ └── utils/ │ │ └── builder-focus-utils.ts │ ├── layout/ │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── TileLayout.tsx │ │ │ ├── layoutAtom.ts │ │ │ ├── layoutModel.ts │ │ │ ├── layoutModelHooks.ts │ │ │ ├── layoutNode.ts │ │ │ ├── layoutTree.ts │ │ │ ├── nodeRefMap.ts │ │ │ ├── tilelayout.scss │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tests/ │ │ ├── layoutNode.test.ts │ │ ├── layoutTree.test.ts │ │ ├── model.ts │ │ └── utils.test.ts │ ├── preview/ │ │ ├── index.html │ │ ├── mock/ │ │ │ ├── defaultconfig.ts │ │ │ ├── mock-node-model.ts │ │ │ ├── mockfilesystem.ts │ │ │ ├── mockwaveenv.test.ts │ │ │ ├── mockwaveenv.ts │ │ │ ├── preview-electron-api.ts │ │ │ ├── tabbar-mock.tsx │ │ │ └── use-rpc-override.ts │ │ ├── preview-contextmenu.tsx │ │ ├── preview.css │ │ ├── preview.tsx │ │ ├── previews/ │ │ │ ├── .gitkeep │ │ │ ├── aifilediff.preview-util.ts │ │ │ ├── aifilediff.preview.test.ts │ │ │ ├── aifilediff.preview.tsx │ │ │ ├── modal-about.preview.tsx │ │ │ ├── onboarding.preview.tsx │ │ │ ├── sysinfo.preview-util.ts │ │ │ ├── sysinfo.preview.test.ts │ │ │ ├── sysinfo.preview.tsx │ │ │ ├── tab.preview.tsx │ │ │ ├── tabbar.preview.tsx │ │ │ ├── treeview.preview.tsx │ │ │ ├── vtabbar.preview.tsx │ │ │ ├── web.preview.tsx │ │ │ └── widgets.preview.tsx │ │ └── vite.config.ts │ ├── tailwindsetup.css │ ├── types/ │ │ ├── custom.d.ts │ │ ├── gotypes.d.ts │ │ ├── jsx.d.ts │ │ ├── media.d.ts │ │ ├── vite-env.d.ts │ │ └── waveevent.d.ts │ ├── util/ │ │ ├── color-validator.test.ts │ │ ├── color-validator.ts │ │ ├── endpoints.ts │ │ ├── fetchutil.ts │ │ ├── focusutil.ts │ │ ├── fontutil.ts │ │ ├── getenv.ts │ │ ├── historyutil.ts │ │ ├── ijson.ts │ │ ├── isdev.ts │ │ ├── keyutil.ts │ │ ├── platformutil.ts │ │ ├── previewutil.ts │ │ ├── sharedconst.ts │ │ ├── util.ts │ │ ├── waveutil.ts │ │ └── wsutil.ts │ └── wave.ts ├── go.mod ├── go.sum ├── index.html ├── package.json ├── pkg/ │ ├── aiusechat/ │ │ ├── aiutil/ │ │ │ └── aiutil.go │ │ ├── anthropic/ │ │ │ ├── anthropic-backend.go │ │ │ ├── anthropic-backend_test.go │ │ │ └── anthropic-convertmessage.go │ │ ├── chatstore/ │ │ │ └── chatstore.go │ │ ├── gemini/ │ │ │ ├── doc.go │ │ │ ├── gemini-backend.go │ │ │ ├── gemini-convertmessage.go │ │ │ └── gemini-types.go │ │ ├── google/ │ │ │ ├── doc.go │ │ │ ├── google-summarize.go │ │ │ └── google-summarize_test.go │ │ ├── openai/ │ │ │ ├── openai-backend.go │ │ │ ├── openai-convertmessage.go │ │ │ ├── openai-util.go │ │ │ ├── stream-sample.txt │ │ │ └── tool-sample.txt │ │ ├── openaichat/ │ │ │ ├── openaichat-backend.go │ │ │ ├── openaichat-convertmessage.go │ │ │ └── openaichat-types.go │ │ ├── toolapproval.go │ │ ├── tools.go │ │ ├── tools_builder.go │ │ ├── tools_readdir.go │ │ ├── tools_readdir_test.go │ │ ├── tools_readfile.go │ │ ├── tools_screenshot.go │ │ ├── tools_term.go │ │ ├── tools_tsunami.go │ │ ├── tools_web.go │ │ ├── tools_writefile.go │ │ ├── uctypes/ │ │ │ └── uctypes.go │ │ ├── usechat-backend.go │ │ ├── usechat-mode.go │ │ ├── usechat-prompts.go │ │ ├── usechat-utils.go │ │ ├── usechat.go │ │ └── usechat_mode_test.go │ ├── authkey/ │ │ └── authkey.go │ ├── baseds/ │ │ └── baseds.go │ ├── blockcontroller/ │ │ ├── .gitignore │ │ ├── blockcontroller.go │ │ ├── durableshellcontroller.go │ │ ├── shellcontroller.go │ │ └── tsunamicontroller.go │ ├── blocklogger/ │ │ └── blocklogger.go │ ├── buildercontroller/ │ │ └── buildercontroller.go │ ├── eventbus/ │ │ └── eventbus.go │ ├── faviconcache/ │ │ └── faviconcache.go │ ├── filebackup/ │ │ └── filebackup.go │ ├── filestore/ │ │ ├── blockstore.go │ │ ├── blockstore_cache.go │ │ ├── blockstore_dbops.go │ │ ├── blockstore_dbsetup.go │ │ └── blockstore_test.go │ ├── genconn/ │ │ ├── genconn.go │ │ ├── ssh-impl.go │ │ └── wsl-impl.go │ ├── gogen/ │ │ ├── gogen.go │ │ └── gogen_test.go │ ├── ijson/ │ │ ├── ijson.go │ │ └── ijson_test.go │ ├── jobcontroller/ │ │ └── jobcontroller.go │ ├── jobmanager/ │ │ ├── cirbuf.go │ │ ├── jobcmd.go │ │ ├── jobmanager.go │ │ ├── jobmanager_unix.go │ │ ├── jobmanager_windows.go │ │ ├── mainserverconn.go │ │ ├── streammanager.go │ │ └── streammanager_test.go │ ├── panichandler/ │ │ └── panichandler.go │ ├── remote/ │ │ ├── conncontroller/ │ │ │ ├── conncontroller.go │ │ │ └── connmonitor.go │ │ ├── connparse/ │ │ │ ├── connparse.go │ │ │ └── connparse_test.go │ │ ├── connutil.go │ │ ├── fileshare/ │ │ │ ├── fspath/ │ │ │ │ └── fspath.go │ │ │ ├── fsutil/ │ │ │ │ └── fsutil.go │ │ │ └── wshfs/ │ │ │ └── wshfs.go │ │ ├── sshagent_unix.go │ │ ├── sshagent_unix_test.go │ │ ├── sshagent_windows.go │ │ ├── sshagent_windows_test.go │ │ └── sshclient.go │ ├── schema/ │ │ └── schema.go │ ├── secretstore/ │ │ └── secretstore.go │ ├── service/ │ │ ├── blockservice/ │ │ │ └── blockservice.go │ │ ├── clientservice/ │ │ │ └── clientservice.go │ │ ├── objectservice/ │ │ │ └── objectservice.go │ │ ├── service.go │ │ ├── userinputservice/ │ │ │ └── userinputservice.go │ │ ├── windowservice/ │ │ │ └── windowservice.go │ │ └── workspaceservice/ │ │ └── workspaceservice.go │ ├── shellexec/ │ │ ├── conninterface.go │ │ └── shellexec.go │ ├── streamclient/ │ │ ├── stream_test.go │ │ ├── streambroker.go │ │ ├── streambroker_test.go │ │ ├── streamreader.go │ │ └── streamwriter.go │ ├── suggestion/ │ │ ├── filewalk.go │ │ └── suggestion.go │ ├── telemetry/ │ │ ├── telemetry.go │ │ └── telemetrydata/ │ │ └── telemetrydata.go │ ├── trimquotes/ │ │ └── trimquotes.go │ ├── tsgen/ │ │ ├── tsgen.go │ │ ├── tsgen_wshclientapi_test.go │ │ ├── tsgenevent.go │ │ ├── tsgenevent_test.go │ │ └── tsgenmeta/ │ │ └── tsgenmeta.go │ ├── tsunamiutil/ │ │ └── tsunamiutil.go │ ├── userinput/ │ │ └── userinput.go │ ├── util/ │ │ ├── daystr/ │ │ │ ├── daystr.go │ │ │ └── daystr_test.go │ │ ├── dbutil/ │ │ │ ├── dbmappable.go │ │ │ └── dbutil.go │ │ ├── ds/ │ │ │ ├── expmap.go │ │ │ ├── syncmap.go │ │ │ └── syncmap_test.go │ │ ├── envutil/ │ │ │ └── envutil.go │ │ ├── fileutil/ │ │ │ ├── fileutil.go │ │ │ ├── fileutil_test.go │ │ │ ├── mimetypes.go │ │ │ └── readdir.go │ │ ├── iochan/ │ │ │ ├── iochan.go │ │ │ ├── iochan_test.go │ │ │ └── iochantypes/ │ │ │ └── iochantypes.go │ │ ├── iterfn/ │ │ │ ├── iterfn.go │ │ │ └── iterfn_test.go │ │ ├── logutil/ │ │ │ └── logutil.go │ │ ├── logview/ │ │ │ ├── logview.go │ │ │ └── multibuf.go │ │ ├── migrateutil/ │ │ │ └── migrateutil.go │ │ ├── packetparser/ │ │ │ └── packetparser.go │ │ ├── pamparse/ │ │ │ ├── pamparse.go │ │ │ └── pamparse_test.go │ │ ├── readutil/ │ │ │ └── readutil.go │ │ ├── shellutil/ │ │ │ ├── shellintegration/ │ │ │ │ ├── bash_bashrc.sh │ │ │ │ ├── bash_preexec.sh │ │ │ │ ├── fish_wavefish.sh │ │ │ │ ├── pwsh_wavepwsh.sh │ │ │ │ ├── zsh_zlogin.sh │ │ │ │ ├── zsh_zprofile.sh │ │ │ │ ├── zsh_zshenv.sh │ │ │ │ └── zsh_zshrc.sh │ │ │ ├── shellquote.go │ │ │ ├── shellquote_test.go │ │ │ ├── shellutil.go │ │ │ └── tokenswap.go │ │ ├── sigutil/ │ │ │ ├── sigusr1_notwindows.go │ │ │ ├── sigusr1_windows.go │ │ │ └── sigutil.go │ │ ├── syncbuf/ │ │ │ └── syncbuf.go │ │ ├── unixutil/ │ │ │ ├── unixutil_unix.go │ │ │ └── unixutil_windows.go │ │ └── utilfn/ │ │ ├── compare.go │ │ ├── marshal.go │ │ ├── partial.go │ │ ├── partial_test.go │ │ ├── streamtolines.go │ │ └── utilfn.go │ ├── utilds/ │ │ ├── codederror.go │ │ ├── idlist.go │ │ ├── multireaderlinebuffer.go │ │ ├── quickreorderqueue.go │ │ ├── quickreorderqueue_test.go │ │ ├── readerlinebuffer.go │ │ ├── synccache.go │ │ ├── versionts.go │ │ └── workqueue.go │ ├── vdom/ │ │ ├── cssparser/ │ │ │ ├── cssparser.go │ │ │ └── cssparser_test.go │ │ ├── vdom.go │ │ ├── vdom_comp.go │ │ ├── vdom_html.go │ │ ├── vdom_root.go │ │ ├── vdom_test.go │ │ └── vdom_types.go │ ├── waveai/ │ │ ├── anthropicbackend.go │ │ ├── cloudbackend.go │ │ ├── googlebackend.go │ │ ├── openaibackend.go │ │ ├── perplexitybackend.go │ │ └── waveai.go │ ├── waveapp/ │ │ ├── streamingresp.go │ │ ├── waveapp.go │ │ └── waveappserverimpl.go │ ├── waveappstore/ │ │ └── waveappstore.go │ ├── waveapputil/ │ │ └── waveapputil.go │ ├── wavebase/ │ │ ├── wavebase-posix.go │ │ ├── wavebase-win.go │ │ └── wavebase.go │ ├── wavejwt/ │ │ └── wavejwt.go │ ├── waveobj/ │ │ ├── ctxupdate.go │ │ ├── metaconsts.go │ │ ├── metamap.go │ │ ├── objrtinfo.go │ │ ├── waveobj.go │ │ ├── wtype.go │ │ └── wtypemeta.go │ ├── wcloud/ │ │ ├── wcloud.go │ │ └── wclouddata.go │ ├── wconfig/ │ │ ├── defaultconfig/ │ │ │ ├── defaultconfig.go │ │ │ ├── mimetypes.json │ │ │ ├── presets/ │ │ │ │ └── ai.json │ │ │ ├── presets.json │ │ │ ├── settings.json │ │ │ ├── termthemes.json │ │ │ ├── waveai.json │ │ │ └── widgets.json │ │ ├── filewatcher.go │ │ ├── metaconsts.go │ │ └── settingsconfig.go │ ├── wcore/ │ │ ├── badge.go │ │ ├── block.go │ │ ├── layout.go │ │ ├── wcore.go │ │ ├── window.go │ │ └── workspace.go │ ├── web/ │ │ ├── sse/ │ │ │ └── ssehandler.go │ │ ├── web.go │ │ ├── webcmd/ │ │ │ └── webcmd.go │ │ ├── webvdomproto.go │ │ └── ws.go │ ├── wps/ │ │ ├── wps.go │ │ └── wpstypes.go │ ├── wshrpc/ │ │ ├── wshclient/ │ │ │ ├── barerpcclient.go │ │ │ ├── wshclient.go │ │ │ └── wshclientutil.go │ │ ├── wshremote/ │ │ │ ├── sysinfo.go │ │ │ ├── wshremote.go │ │ │ ├── wshremote_file.go │ │ │ └── wshremote_job.go │ │ ├── wshrpcmeta.go │ │ ├── wshrpcmeta_test.go │ │ ├── wshrpctypes.go │ │ ├── wshrpctypes_builder.go │ │ ├── wshrpctypes_const.go │ │ ├── wshrpctypes_file.go │ │ └── wshserver/ │ │ ├── resolvers.go │ │ ├── wshserver.go │ │ └── wshserverutil.go │ ├── wshutil/ │ │ ├── wshadapter.go │ │ ├── wshcmdreader.go │ │ ├── wshevent.go │ │ ├── wshproxy.go │ │ ├── wshrouter.go │ │ ├── wshrouter_controlimpl.go │ │ ├── wshrpc.go │ │ ├── wshrpcio.go │ │ ├── wshstreamadapter.go │ │ └── wshutil.go │ ├── wsl/ │ │ ├── wsl-unix.go │ │ └── wsl-win.go │ ├── wslconn/ │ │ ├── wsl-util.go │ │ └── wslconn.go │ └── wstore/ │ ├── wstore.go │ ├── wstore_dboldmigration.go │ ├── wstore_dbops.go │ ├── wstore_dbsetup.go │ └── wstore_rtinfo.go ├── postinstall.cjs ├── prettier.config.cjs ├── schema/ │ ├── aipresets.json │ ├── bgpresets.json │ ├── connections.json │ ├── settings.json │ ├── waveai.json │ └── widgets.json ├── staticcheck.conf ├── testdriver/ │ └── onboarding.yml ├── tests/ │ └── copytests/ │ ├── cases/ │ │ ├── test000.sh │ │ ├── test001.sh │ │ ├── test002.sh │ │ ├── test003.sh │ │ ├── test004.sh │ │ ├── test005.sh │ │ ├── test006.sh │ │ ├── test007.sh │ │ ├── test008.sh │ │ ├── test009.sh │ │ ├── test010.sh │ │ ├── test011.sh │ │ ├── test012.sh │ │ ├── test013.sh │ │ ├── test014.sh │ │ ├── test015.sh │ │ ├── test016.sh │ │ ├── test017.sh │ │ ├── test018.sh │ │ ├── test019.sh │ │ ├── test020.sh │ │ ├── test021.sh │ │ ├── test022.sh │ │ ├── test023.sh │ │ ├── test024.sh │ │ ├── test025.sh │ │ ├── test026.sh │ │ ├── test027.sh │ │ ├── test028.sh │ │ ├── test029.sh │ │ ├── test030.sh │ │ ├── test032.sh │ │ ├── test034.sh │ │ ├── test036.sh │ │ ├── test037.sh │ │ ├── test038.sh │ │ ├── test040.sh │ │ ├── test041.sh │ │ ├── test042.sh │ │ ├── test043.sh │ │ ├── test044.sh │ │ ├── test045.sh │ │ ├── test046.sh │ │ ├── test047.sh │ │ ├── test048.sh │ │ ├── test049.sh │ │ ├── test051.sh │ │ └── test052.sh │ ├── runner.sh │ └── testutil.sh ├── tsconfig.json ├── tsunami/ │ ├── .gitignore │ ├── app/ │ │ ├── atom.go │ │ ├── defaultclient.go │ │ └── hooks.go │ ├── build/ │ │ ├── build-ast.go │ │ ├── build.go │ │ └── buildutil.go │ ├── cmd/ │ │ └── main-tsunami.go │ ├── demo/ │ │ ├── .gitignore │ │ ├── cpuchart/ │ │ │ ├── app.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── static/ │ │ │ └── tw.css │ │ ├── githubaction/ │ │ │ ├── app.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── static/ │ │ │ └── tw.css │ │ ├── modaltest/ │ │ │ ├── app.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── static/ │ │ │ └── tw.css │ │ ├── pomodoro/ │ │ │ ├── app.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── static/ │ │ │ └── tw.css │ │ ├── recharts/ │ │ │ ├── app.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── static/ │ │ │ └── tw.css │ │ ├── tabletest/ │ │ │ ├── app.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── static/ │ │ │ └── tw.css │ │ ├── todo/ │ │ │ ├── app.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── static/ │ │ │ │ └── tw.css │ │ │ └── style.css │ │ └── tsunamiconfig/ │ │ ├── app.go │ │ ├── go.mod │ │ ├── go.sum │ │ └── static/ │ │ └── tw.css │ ├── engine/ │ │ ├── asyncnotify.go │ │ ├── atomimpl.go │ │ ├── clientimpl.go │ │ ├── comp.go │ │ ├── errcomponent.go │ │ ├── globalctx.go │ │ ├── hooks.go │ │ ├── render.go │ │ ├── render.md │ │ ├── rootelem.go │ │ ├── schema.go │ │ └── serverhandlers.go │ ├── frontend/ │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.tsx │ │ │ ├── element/ │ │ │ │ ├── markdown.tsx │ │ │ │ ├── modals.tsx │ │ │ │ └── tsunamiterm.tsx │ │ │ ├── input.tsx │ │ │ ├── main.tsx │ │ │ ├── model/ │ │ │ │ ├── model-utils.ts │ │ │ │ └── tsunami-model.tsx │ │ │ ├── recharts/ │ │ │ │ └── recharts.tsx │ │ │ ├── tailwind.css │ │ │ ├── types/ │ │ │ │ ├── custom.d.ts │ │ │ │ └── vdom.d.ts │ │ │ ├── util/ │ │ │ │ ├── base64.ts │ │ │ │ ├── clientid.ts │ │ │ │ ├── keyutil.ts │ │ │ │ └── platformutil.ts │ │ │ └── vdom.tsx │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── go.mod │ ├── go.sum │ ├── rpctypes/ │ │ └── protocoltypes.go │ ├── templates/ │ │ ├── app-init.go.tmpl │ │ ├── app-main.go.tmpl │ │ ├── empty-gomod.tmpl │ │ ├── gitignore.tmpl │ │ ├── package.json.tmpl │ │ └── tailwind.css │ ├── tsunamibase/ │ │ └── tsunamibase.go │ ├── ui/ │ │ └── table.go │ ├── util/ │ │ ├── compare.go │ │ ├── marshal.go │ │ ├── streamtolines.go │ │ └── util.go │ └── vdom/ │ ├── vdom.go │ ├── vdom_test.go │ └── vdom_types.go ├── version.cjs └── vitest.config.ts