@poolzin/pool-bot 2026.1.38 → 2026.2.0

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 (336) hide show
  1. package/assets/chrome-extension/README.md +3 -3
  2. package/assets/chrome-extension/background.js +5 -5
  3. package/assets/chrome-extension/manifest.json +3 -3
  4. package/assets/chrome-extension/options.html +4 -4
  5. package/assets/chrome-extension/options.js +1 -1
  6. package/dist/acp/client.js +3 -3
  7. package/dist/acp/types.js +1 -1
  8. package/dist/agents/agent-paths.js +3 -3
  9. package/dist/agents/auth-profiles/paths.js +3 -3
  10. package/dist/agents/cli-runner/helpers.js +1 -1
  11. package/dist/agents/cli-runner.js +2 -2
  12. package/dist/agents/cloudflare-ai-gateway.js +31 -0
  13. package/dist/agents/compaction.js +16 -2
  14. package/dist/agents/context-window-guard.js +13 -10
  15. package/dist/agents/context.js +4 -4
  16. package/dist/agents/docs-path.js +1 -1
  17. package/dist/agents/minimax-vlm.js +1 -1
  18. package/dist/agents/model-auth.js +12 -1
  19. package/dist/agents/model-catalog.js +4 -4
  20. package/dist/agents/model-selection.js +10 -4
  21. package/dist/agents/models-config.js +3 -3
  22. package/dist/agents/models-config.providers.js +147 -39
  23. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  24. package/dist/agents/pi-embedded-runner/compact.js +8 -8
  25. package/dist/agents/pi-embedded-runner/model.js +2 -2
  26. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -6
  27. package/dist/agents/pi-embedded-runner/run.js +4 -4
  28. package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
  29. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  30. package/dist/agents/pi-model-discovery.js +10 -0
  31. package/dist/agents/pi-tool-definition-adapter.js +50 -9
  32. package/dist/agents/pi-tools.before-tool-call.js +67 -0
  33. package/dist/agents/pi-tools.js +10 -5
  34. package/dist/agents/pi-tools.read.js +2 -2
  35. package/dist/agents/session-file-repair.js +83 -0
  36. package/dist/agents/session-transcript-repair.js +68 -0
  37. package/dist/agents/skills/frontmatter.js +1 -1
  38. package/dist/agents/skills/workspace.js +2 -2
  39. package/dist/agents/system-prompt.js +28 -4
  40. package/dist/agents/together-models.js +127 -0
  41. package/dist/agents/tool-images.js +1 -1
  42. package/dist/agents/tool-policy.js +1 -1
  43. package/dist/agents/tools/browser-tool.js +3 -3
  44. package/dist/agents/tools/image-tool.js +2 -2
  45. package/dist/agents/tools/memory-tool.js +94 -7
  46. package/dist/agents/tools/web-search.js +1 -1
  47. package/dist/agents/workspace.js +1 -5
  48. package/dist/auto-reply/commands-registry.data.js +1 -1
  49. package/dist/auto-reply/reply/commands-context-report.js +2 -2
  50. package/dist/auto-reply/reply/commands-session.js +2 -2
  51. package/dist/auto-reply/reply/get-reply-run.js +14 -4
  52. package/dist/auto-reply/reply/groups.js +1 -1
  53. package/dist/auto-reply/reply/inbound-context.js +4 -0
  54. package/dist/auto-reply/reply/inbound-meta.js +130 -0
  55. package/dist/auto-reply/reply/untrusted-context.js +15 -0
  56. package/dist/auto-reply/status.js +1 -1
  57. package/dist/browser/client-fetch.js +1 -1
  58. package/dist/browser/config.js +1 -1
  59. package/dist/browser/extension-relay.js +3 -3
  60. package/dist/browser/server-context.js +2 -2
  61. package/dist/build-info.json +3 -3
  62. package/dist/canvas-host/a2ui.js +3 -3
  63. package/dist/channels/plugins/agent-tools/whatsapp-login.js +1 -17
  64. package/dist/channels/plugins/catalog.js +2 -2
  65. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  66. package/dist/channels/plugins/onboarding/signal.js +1 -1
  67. package/dist/channels/plugins/onboarding/slack.js +4 -4
  68. package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
  69. package/dist/channels/plugins/pairing-message.js +1 -1
  70. package/dist/cli/browser-cli-extension.js +2 -2
  71. package/dist/cli/docs-cli.js +1 -1
  72. package/dist/cli/gateway-cli/dev.js +1 -1
  73. package/dist/cli/memory-cli.js +25 -15
  74. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  75. package/dist/cli/plugins-cli.js +1 -1
  76. package/dist/cli/run-main.js +2 -2
  77. package/dist/cli/security-cli.js +1 -1
  78. package/dist/cli/tagline.js +1 -1
  79. package/dist/cli/update-cli.js +4 -4
  80. package/dist/cli/webhooks-cli.js +5 -5
  81. package/dist/commands/agents.commands.add.js +1 -1
  82. package/dist/commands/auth-choice.apply.api-providers.js +305 -17
  83. package/dist/commands/auth-choice.apply.js +4 -1
  84. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  85. package/dist/commands/auth-choice.apply.xai.js +63 -0
  86. package/dist/commands/auth-choice.preferred-provider.js +7 -1
  87. package/dist/commands/configure.wizard.js +1 -1
  88. package/dist/commands/dashboard.js +1 -1
  89. package/dist/commands/docs.js +1 -1
  90. package/dist/commands/doctor-gateway-services.js +3 -3
  91. package/dist/commands/doctor-state-integrity.js +2 -14
  92. package/dist/commands/doctor-update.js +3 -3
  93. package/dist/commands/doctor.js +1 -1
  94. package/dist/commands/models/list.probe.js +2 -2
  95. package/dist/commands/models/list.registry.js +4 -4
  96. package/dist/commands/models/list.status-command.js +2 -2
  97. package/dist/commands/onboard-auth.config-core.js +366 -28
  98. package/dist/commands/onboard-auth.credentials.js +71 -9
  99. package/dist/commands/onboard-auth.js +3 -3
  100. package/dist/commands/onboard-auth.models.js +26 -24
  101. package/dist/commands/onboard-non-interactive/local/auth-choice.js +140 -6
  102. package/dist/commands/status-all/report-lines.js +1 -1
  103. package/dist/commands/status.command.js +1 -1
  104. package/dist/commands/uninstall.js +3 -3
  105. package/dist/compat/legacy-names.js +1 -1
  106. package/dist/config/io.js +3 -3
  107. package/dist/config/schema.js +1 -1
  108. package/dist/config/types.js +0 -1
  109. package/dist/config/types.memory.js +1 -0
  110. package/dist/config/version.js +4 -4
  111. package/dist/config/zod-schema.js +0 -6
  112. package/dist/daemon/constants.js +7 -7
  113. package/dist/daemon/inspect.js +6 -6
  114. package/dist/daemon/systemd-unit.js +1 -1
  115. package/dist/discord/monitor/message-handler.process.js +6 -4
  116. package/dist/gateway/client.js +0 -14
  117. package/dist/gateway/live-image-probe.js +1 -66
  118. package/dist/gateway/openai-http.js +2 -2
  119. package/dist/gateway/openresponses-http.js +4 -4
  120. package/dist/gateway/server-discovery.js +2 -2
  121. package/dist/gateway/server-http.js +1 -1
  122. package/dist/gateway/server.impl.js +2 -6
  123. package/dist/hooks/frontmatter.js +1 -1
  124. package/dist/hooks/hooks-status.js +1 -1
  125. package/dist/hooks/install.js +2 -2
  126. package/dist/hooks/loader.js +1 -1
  127. package/dist/hooks/workspace.js +3 -3
  128. package/dist/index.js +2 -2
  129. package/dist/infra/bonjour.js +3 -3
  130. package/dist/infra/path-env.js +3 -3
  131. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  132. package/dist/infra/restart.js +1 -1
  133. package/dist/infra/tailscale.js +1 -1
  134. package/dist/macos/relay.js +2 -2
  135. package/dist/media/input-files.js +1 -1
  136. package/dist/media/mime.js +4 -0
  137. package/dist/media/png-encode.js +74 -0
  138. package/dist/media-understanding/providers/image.js +2 -2
  139. package/dist/memory/backend-config.js +207 -0
  140. package/dist/memory/embeddings.js +1 -1
  141. package/dist/memory/index.js +0 -5
  142. package/dist/memory/manager.js +3 -25
  143. package/dist/memory/types.js +1 -0
  144. package/dist/node-host/runner.js +2 -2
  145. package/dist/pairing/pairing-messages.js +1 -1
  146. package/dist/plugins/discovery.js +1 -1
  147. package/dist/plugins/install.js +2 -2
  148. package/dist/plugins/update.js +1 -1
  149. package/dist/security/audit.js +2 -2
  150. package/dist/shared/text/reasoning-tags.js +52 -7
  151. package/dist/slack/monitor/message-handler/prepare.js +10 -4
  152. package/dist/slack/monitor/slash.js +10 -4
  153. package/dist/tailscale/detect.js +146 -0
  154. package/dist/telegram/bot-message-context.js +1 -1
  155. package/dist/test-helpers/workspace.js +11 -0
  156. package/dist/test-utils/channel-plugins.js +82 -0
  157. package/dist/test-utils/ports.js +73 -0
  158. package/dist/utils/shell-argv.js +61 -0
  159. package/dist/utils.js +10 -0
  160. package/dist/web/qr-image.js +1 -61
  161. package/dist/wizard/onboarding.finalize.js +7 -7
  162. package/dist/wizard/onboarding.js +3 -3
  163. package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
  164. package/docs/_config.yml +2 -2
  165. package/docs/_layouts/default.html +9 -9
  166. package/docs/concepts/typebox.md +1 -1
  167. package/docs/docs.json +1 -1
  168. package/docs/northflank.mdx +7 -7
  169. package/docs/railway.mdx +3 -3
  170. package/docs/render.mdx +5 -5
  171. package/docs/start/lore.md +2 -2
  172. package/extensions/bluebubbles/index.ts +2 -2
  173. package/extensions/bluebubbles/package.json +1 -1
  174. package/extensions/bluebubbles/src/accounts.ts +8 -8
  175. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  176. package/extensions/bluebubbles/src/actions.ts +5 -5
  177. package/extensions/bluebubbles/src/attachments.ts +2 -2
  178. package/extensions/bluebubbles/src/channel.ts +16 -16
  179. package/extensions/bluebubbles/src/chat.ts +2 -2
  180. package/extensions/bluebubbles/src/media-send.ts +2 -2
  181. package/extensions/bluebubbles/src/monitor.test.ts +46 -46
  182. package/extensions/bluebubbles/src/monitor.ts +5 -5
  183. package/extensions/bluebubbles/src/onboarding.ts +7 -7
  184. package/extensions/bluebubbles/src/reactions.ts +2 -2
  185. package/extensions/bluebubbles/src/send.ts +2 -2
  186. package/extensions/copilot-proxy/README.md +1 -1
  187. package/extensions/copilot-proxy/package.json +1 -1
  188. package/extensions/diagnostics-otel/index.ts +2 -2
  189. package/extensions/diagnostics-otel/package.json +1 -1
  190. package/extensions/diagnostics-otel/src/service.ts +3 -3
  191. package/extensions/discord/index.ts +2 -2
  192. package/extensions/discord/package.json +1 -1
  193. package/extensions/google-antigravity-auth/README.md +1 -1
  194. package/extensions/google-antigravity-auth/index.ts +1 -1
  195. package/extensions/google-antigravity-auth/package.json +1 -1
  196. package/extensions/google-gemini-cli-auth/README.md +1 -1
  197. package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
  198. package/extensions/google-gemini-cli-auth/package.json +1 -1
  199. package/extensions/googlechat/index.ts +3 -3
  200. package/extensions/googlechat/package.json +1 -1
  201. package/extensions/googlechat/src/accounts.ts +8 -8
  202. package/extensions/googlechat/src/actions.ts +6 -6
  203. package/extensions/googlechat/src/channel.ts +21 -21
  204. package/extensions/googlechat/src/monitor.ts +8 -8
  205. package/extensions/googlechat/src/onboarding.ts +10 -10
  206. package/extensions/imessage/index.ts +2 -2
  207. package/extensions/imessage/package.json +1 -1
  208. package/extensions/line/index.ts +2 -2
  209. package/extensions/line/package.json +1 -1
  210. package/extensions/line/src/card-command.ts +2 -2
  211. package/extensions/line/src/channel.logout.test.ts +4 -4
  212. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  213. package/extensions/line/src/channel.ts +3 -3
  214. package/extensions/llm-task/README.md +3 -3
  215. package/extensions/llm-task/index.ts +2 -2
  216. package/extensions/llm-task/package.json +1 -1
  217. package/extensions/llm-task/src/llm-task-tool.ts +4 -4
  218. package/extensions/lobster/README.md +6 -6
  219. package/extensions/lobster/index.ts +2 -2
  220. package/extensions/lobster/src/lobster-tool.test.ts +4 -4
  221. package/extensions/lobster/src/lobster-tool.ts +2 -2
  222. package/extensions/matrix/index.ts +2 -2
  223. package/extensions/matrix/package.json +1 -1
  224. package/extensions/matrix/src/matrix/client/config.ts +1 -1
  225. package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
  226. package/extensions/matrix/src/onboarding.ts +1 -1
  227. package/extensions/mattermost/index.ts +2 -2
  228. package/extensions/mattermost/package.json +1 -1
  229. package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
  230. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  231. package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
  232. package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
  233. package/extensions/mattermost/src/onboarding.ts +2 -2
  234. package/extensions/memory-core/index.ts +2 -2
  235. package/extensions/memory-core/package.json +1 -4
  236. package/extensions/memory-lancedb/index.ts +3 -3
  237. package/extensions/memory-lancedb/package.json +1 -1
  238. package/extensions/msteams/index.ts +2 -2
  239. package/extensions/msteams/package.json +1 -1
  240. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  241. package/extensions/msteams/src/channel.ts +2 -2
  242. package/extensions/msteams/src/graph-upload.ts +4 -4
  243. package/extensions/msteams/src/monitor-handler.ts +2 -2
  244. package/extensions/msteams/src/monitor.ts +2 -2
  245. package/extensions/msteams/src/onboarding.ts +9 -9
  246. package/extensions/msteams/src/reply-dispatcher.ts +2 -2
  247. package/extensions/msteams/src/send-context.ts +2 -2
  248. package/extensions/msteams/src/send.ts +4 -4
  249. package/extensions/nextcloud-talk/index.ts +2 -2
  250. package/extensions/nextcloud-talk/package.json +1 -1
  251. package/extensions/nextcloud-talk/src/channel.ts +7 -7
  252. package/extensions/nextcloud-talk/src/inbound.ts +7 -7
  253. package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
  254. package/extensions/nostr/README.md +2 -2
  255. package/extensions/nostr/index.ts +5 -5
  256. package/extensions/nostr/package.json +1 -1
  257. package/extensions/nostr/src/types.ts +4 -4
  258. package/extensions/open-prose/index.ts +2 -2
  259. package/extensions/qwen-portal-auth/README.md +1 -1
  260. package/extensions/signal/index.ts +2 -2
  261. package/extensions/signal/package.json +1 -1
  262. package/extensions/slack/index.ts +2 -2
  263. package/extensions/slack/package.json +1 -1
  264. package/extensions/telegram/index.ts +2 -2
  265. package/extensions/telegram/package.json +1 -1
  266. package/extensions/telegram/src/channel.ts +2 -2
  267. package/extensions/tlon/README.md +2 -2
  268. package/extensions/tlon/index.ts +2 -2
  269. package/extensions/tlon/package.json +1 -1
  270. package/extensions/tlon/src/channel.ts +13 -13
  271. package/extensions/tlon/src/monitor/index.ts +3 -3
  272. package/extensions/tlon/src/onboarding.ts +3 -3
  273. package/extensions/tlon/src/types.ts +3 -3
  274. package/extensions/twitch/README.md +1 -1
  275. package/extensions/twitch/index.ts +2 -2
  276. package/extensions/twitch/package.json +1 -1
  277. package/extensions/twitch/src/config.ts +3 -3
  278. package/extensions/twitch/src/monitor.ts +3 -3
  279. package/extensions/twitch/src/onboarding.ts +9 -9
  280. package/extensions/twitch/src/outbound.test.ts +2 -2
  281. package/extensions/twitch/src/plugin.test.ts +2 -2
  282. package/extensions/twitch/src/plugin.ts +8 -8
  283. package/extensions/twitch/src/send.test.ts +2 -2
  284. package/extensions/twitch/src/send.ts +4 -4
  285. package/extensions/twitch/src/token.test.ts +8 -8
  286. package/extensions/twitch/src/token.ts +3 -3
  287. package/extensions/twitch/src/twitch-client.ts +3 -3
  288. package/extensions/twitch/src/types.ts +3 -3
  289. package/extensions/twitch/src/utils/markdown.ts +1 -1
  290. package/extensions/voice-call/README.md +3 -3
  291. package/extensions/voice-call/package.json +1 -1
  292. package/extensions/voice-call/src/core-bridge.ts +2 -2
  293. package/extensions/voice-call/src/response-generator.ts +1 -1
  294. package/extensions/whatsapp/index.ts +2 -2
  295. package/extensions/whatsapp/package.json +1 -1
  296. package/extensions/zalo/README.md +1 -1
  297. package/extensions/zalo/index.ts +2 -2
  298. package/extensions/zalo/package.json +1 -1
  299. package/extensions/zalo/src/accounts.ts +8 -8
  300. package/extensions/zalo/src/actions.ts +4 -4
  301. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  302. package/extensions/zalo/src/channel.ts +18 -18
  303. package/extensions/zalo/src/monitor.ts +9 -9
  304. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  305. package/extensions/zalo/src/onboarding.ts +24 -24
  306. package/extensions/zalo/src/send.ts +2 -2
  307. package/extensions/zalouser/README.md +2 -2
  308. package/extensions/zalouser/index.ts +2 -2
  309. package/extensions/zalouser/package.json +1 -1
  310. package/extensions/zalouser/src/accounts.ts +9 -9
  311. package/extensions/zalouser/src/channel.ts +24 -24
  312. package/extensions/zalouser/src/monitor.ts +4 -4
  313. package/extensions/zalouser/src/onboarding.ts +28 -28
  314. package/package.json +13 -250
  315. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  316. package/skills/tmux/scripts/find-sessions.sh +1 -1
  317. package/CHANGELOG.md +0 -200
  318. package/README-header.png +0 -0
  319. package/git-hooks/pre-commit +0 -4
  320. package/scripts/format-staged.js +0 -148
  321. package/scripts/postinstall.js +0 -300
  322. package/scripts/setup-git-hooks.js +0 -96
  323. package/skills/webgpu-threejs-tsl/REFERENCE.md +0 -283
  324. package/skills/webgpu-threejs-tsl/SKILL.md +0 -91
  325. package/skills/webgpu-threejs-tsl/docs/compute-shaders.md +0 -404
  326. package/skills/webgpu-threejs-tsl/docs/core-concepts.md +0 -453
  327. package/skills/webgpu-threejs-tsl/docs/materials.md +0 -353
  328. package/skills/webgpu-threejs-tsl/docs/post-processing.md +0 -434
  329. package/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +0 -324
  330. package/skills/webgpu-threejs-tsl/examples/basic-setup.js +0 -87
  331. package/skills/webgpu-threejs-tsl/examples/custom-material.js +0 -170
  332. package/skills/webgpu-threejs-tsl/examples/earth-shader.js +0 -292
  333. package/skills/webgpu-threejs-tsl/examples/particle-system.js +0 -259
  334. package/skills/webgpu-threejs-tsl/examples/post-processing.js +0 -199
  335. package/skills/webgpu-threejs-tsl/templates/compute-shader.js +0 -305
  336. package/skills/webgpu-threejs-tsl/templates/webgpu-project.js +0 -276
@@ -1,324 +0,0 @@
1
- # WGSL Integration
2
-
3
- TSL allows embedding raw WGSL (WebGPU Shading Language) code when you need direct GPU control.
4
-
5
- ## wgslFn - Custom WGSL Functions
6
-
7
- ### Basic Usage
8
-
9
- ```javascript
10
- import { wgslFn, float, vec3 } from 'three/tsl';
11
-
12
- // Define WGSL function
13
- const gammaCorrect = wgslFn(`
14
- fn gammaCorrect(color: vec3<f32>, gamma: f32) -> vec3<f32> {
15
- return pow(color, vec3<f32>(1.0 / gamma));
16
- }
17
- `);
18
-
19
- // Use in TSL
20
- material.colorNode = gammaCorrect(inputColor, float(2.2));
21
- ```
22
-
23
- ### Function with Multiple Parameters
24
-
25
- ```javascript
26
- const blendColors = wgslFn(`
27
- fn blendColors(a: vec3<f32>, b: vec3<f32>, t: f32) -> vec3<f32> {
28
- return mix(a, b, t);
29
- }
30
- `);
31
-
32
- material.colorNode = blendColors(colorA, colorB, blendFactor);
33
- ```
34
-
35
- ### Advanced Math Functions
36
-
37
- ```javascript
38
- const fresnelSchlick = wgslFn(`
39
- fn fresnelSchlick(cosTheta: f32, F0: vec3<f32>) -> vec3<f32> {
40
- return F0 + (vec3<f32>(1.0) - F0) * pow(1.0 - cosTheta, 5.0);
41
- }
42
- `);
43
-
44
- const GGX = wgslFn(`
45
- fn distributionGGX(N: vec3<f32>, H: vec3<f32>, roughness: f32) -> f32 {
46
- let a = roughness * roughness;
47
- let a2 = a * a;
48
- let NdotH = max(dot(N, H), 0.0);
49
- let NdotH2 = NdotH * NdotH;
50
-
51
- let num = a2;
52
- let denom = (NdotH2 * (a2 - 1.0) + 1.0);
53
- denom = 3.14159265359 * denom * denom;
54
-
55
- return num / denom;
56
- }
57
- `);
58
- ```
59
-
60
- ### Noise Functions
61
-
62
- ```javascript
63
- const simplexNoise = wgslFn(`
64
- fn mod289(x: vec3<f32>) -> vec3<f32> {
65
- return x - floor(x * (1.0 / 289.0)) * 289.0;
66
- }
67
-
68
- fn permute(x: vec3<f32>) -> vec3<f32> {
69
- return mod289(((x * 34.0) + 1.0) * x);
70
- }
71
-
72
- fn snoise(v: vec2<f32>) -> f32 {
73
- let C = vec4<f32>(
74
- 0.211324865405187,
75
- 0.366025403784439,
76
- -0.577350269189626,
77
- 0.024390243902439
78
- );
79
-
80
- var i = floor(v + dot(v, C.yy));
81
- let x0 = v - i + dot(i, C.xx);
82
-
83
- var i1: vec2<f32>;
84
- if (x0.x > x0.y) {
85
- i1 = vec2<f32>(1.0, 0.0);
86
- } else {
87
- i1 = vec2<f32>(0.0, 1.0);
88
- }
89
-
90
- var x12 = x0.xyxy + C.xxzz;
91
- x12 = vec4<f32>(x12.xy - i1, x12.zw);
92
-
93
- i = mod289(vec3<f32>(i, 0.0)).xy;
94
- let p = permute(permute(i.y + vec3<f32>(0.0, i1.y, 1.0)) + i.x + vec3<f32>(0.0, i1.x, 1.0));
95
-
96
- var m = max(vec3<f32>(0.5) - vec3<f32>(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), vec3<f32>(0.0));
97
- m = m * m;
98
- m = m * m;
99
-
100
- let x = 2.0 * fract(p * C.www) - 1.0;
101
- let h = abs(x) - 0.5;
102
- let ox = floor(x + 0.5);
103
- let a0 = x - ox;
104
-
105
- m = m * (1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h));
106
-
107
- let g = vec3<f32>(
108
- a0.x * x0.x + h.x * x0.y,
109
- a0.y * x12.x + h.y * x12.y,
110
- a0.z * x12.z + h.z * x12.w
111
- );
112
-
113
- return 130.0 * dot(m, g);
114
- }
115
- `);
116
-
117
- // Use noise
118
- const noiseValue = simplexNoise(uv().mul(10.0));
119
- ```
120
-
121
- ### FBM (Fractal Brownian Motion)
122
-
123
- ```javascript
124
- const fbm = wgslFn(`
125
- fn fbm(p: vec2<f32>, octaves: i32) -> f32 {
126
- var value = 0.0;
127
- var amplitude = 0.5;
128
- var frequency = 1.0;
129
- var pos = p;
130
-
131
- for (var i = 0; i < octaves; i = i + 1) {
132
- value = value + amplitude * snoise(pos * frequency);
133
- amplitude = amplitude * 0.5;
134
- frequency = frequency * 2.0;
135
- }
136
-
137
- return value;
138
- }
139
- `);
140
- ```
141
-
142
- ## WGSL Types Reference
143
-
144
- ### Scalar Types
145
- ```wgsl
146
- bool // Boolean
147
- i32 // 32-bit signed integer
148
- u32 // 32-bit unsigned integer
149
- f32 // 32-bit float
150
- f16 // 16-bit float (if enabled)
151
- ```
152
-
153
- ### Vector Types
154
- ```wgsl
155
- vec2<f32> // 2D float vector
156
- vec3<f32> // 3D float vector
157
- vec4<f32> // 4D float vector
158
- vec2<i32> // 2D integer vector
159
- vec2<u32> // 2D unsigned integer vector
160
- ```
161
-
162
- ### Matrix Types
163
- ```wgsl
164
- mat2x2<f32> // 2x2 matrix
165
- mat3x3<f32> // 3x3 matrix
166
- mat4x4<f32> // 4x4 matrix
167
- mat2x3<f32> // 2 columns, 3 rows
168
- ```
169
-
170
- ### Texture Types
171
- ```wgsl
172
- texture_2d<f32>
173
- texture_3d<f32>
174
- texture_cube<f32>
175
- texture_storage_2d<rgba8unorm, write>
176
- ```
177
-
178
- ## WGSL Syntax Reference
179
-
180
- ### Variables
181
- ```wgsl
182
- let x = 1.0; // Immutable
183
- var y = 2.0; // Mutable
184
- const PI = 3.14159; // Compile-time constant
185
- ```
186
-
187
- ### Control Flow
188
- ```wgsl
189
- // If-else
190
- if (condition) {
191
- // ...
192
- } else if (other) {
193
- // ...
194
- } else {
195
- // ...
196
- }
197
-
198
- // For loop
199
- for (var i = 0; i < 10; i = i + 1) {
200
- // ...
201
- }
202
-
203
- // While loop
204
- while (condition) {
205
- // ...
206
- }
207
-
208
- // Switch
209
- switch (value) {
210
- case 0: { /* ... */ }
211
- case 1, 2: { /* ... */ }
212
- default: { /* ... */ }
213
- }
214
- ```
215
-
216
- ### Built-in Functions
217
- ```wgsl
218
- // Math
219
- abs(x), sign(x), floor(x), ceil(x), round(x)
220
- fract(x), trunc(x)
221
- min(a, b), max(a, b), clamp(x, lo, hi)
222
- mix(a, b, t), step(edge, x), smoothstep(lo, hi, x)
223
- sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y, x)
224
- pow(x, y), exp(x), log(x), exp2(x), log2(x)
225
- sqrt(x), inverseSqrt(x)
226
-
227
- // Vector
228
- length(v), distance(a, b)
229
- dot(a, b), cross(a, b)
230
- normalize(v), faceForward(n, i, nref)
231
- reflect(i, n), refract(i, n, eta)
232
-
233
- // Matrix
234
- transpose(m), determinant(m)
235
-
236
- // Texture
237
- textureSample(t, s, coord)
238
- textureLoad(t, coord, level)
239
- textureStore(t, coord, value)
240
- textureDimensions(t)
241
- ```
242
-
243
- ## Combining TSL and WGSL
244
-
245
- ### TSL Wrapper for WGSL
246
-
247
- ```javascript
248
- import { Fn, wgslFn, float, vec2, vec3 } from 'three/tsl';
249
-
250
- // WGSL implementation
251
- const wgslNoise = wgslFn(`
252
- fn noise2d(p: vec2<f32>) -> f32 {
253
- return fract(sin(dot(p, vec2<f32>(12.9898, 78.233))) * 43758.5453);
254
- }
255
- `);
256
-
257
- // TSL wrapper with nice API
258
- const noise = Fn(([position, scale = 1.0]) => {
259
- return wgslNoise(position.xy.mul(scale));
260
- });
261
-
262
- // Use
263
- material.colorNode = vec3(noise(positionWorld, 10.0));
264
- ```
265
-
266
- ### Hybrid Approach
267
-
268
- ```javascript
269
- // Complex math in WGSL
270
- const complexMath = wgslFn(`
271
- fn complexOperation(a: vec3<f32>, b: vec3<f32>, t: f32) -> vec3<f32> {
272
- let blended = mix(a, b, t);
273
- let rotated = vec3<f32>(
274
- blended.x * cos(t) - blended.y * sin(t),
275
- blended.x * sin(t) + blended.y * cos(t),
276
- blended.z
277
- );
278
- return normalize(rotated);
279
- }
280
- `);
281
-
282
- // Simple logic in TSL
283
- const finalColor = Fn(() => {
284
- const base = texture(diffuseMap).rgb;
285
- const processed = complexMath(base, vec3(1, 0, 0), time);
286
- return mix(base, processed, oscSine(time));
287
- });
288
-
289
- material.colorNode = finalColor();
290
- ```
291
-
292
- ## Performance Tips
293
-
294
- ### Avoid Branching When Possible
295
- ```wgsl
296
- // Instead of:
297
- if (x > 0.5) {
298
- result = a;
299
- } else {
300
- result = b;
301
- }
302
-
303
- // Use:
304
- result = mix(b, a, step(0.5, x));
305
- ```
306
-
307
- ### Use Local Variables
308
- ```wgsl
309
- fn compute(p: vec2<f32>) -> f32 {
310
- // Cache repeated calculations
311
- let p2 = p * p;
312
- let p4 = p2 * p2;
313
- return p2.x + p2.y + p4.x * p4.y;
314
- }
315
- ```
316
-
317
- ### Minimize Texture Samples
318
- ```wgsl
319
- // Sample once, use multiple times
320
- let sample = textureSample(tex, sampler, uv);
321
- let r = sample.r;
322
- let g = sample.g;
323
- let b = sample.b;
324
- ```
@@ -1,87 +0,0 @@
1
- /**
2
- * Basic WebGPU Three.js Setup
3
- *
4
- * Minimal example showing WebGPU renderer initialization
5
- * with a simple animated mesh using TSL.
6
- *
7
- * Based on Three.js examples (MIT License)
8
- * https://github.com/mrdoob/three.js
9
- */
10
-
11
- import * as THREE from 'three/webgpu';
12
- import { color, time, oscSine, positionLocal, normalWorld } from 'three/tsl';
13
- import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
14
-
15
- let camera, scene, renderer, controls;
16
-
17
- async function init() {
18
- // Camera
19
- camera = new THREE.PerspectiveCamera(
20
- 70,
21
- window.innerWidth / window.innerHeight,
22
- 0.1,
23
- 100
24
- );
25
- camera.position.z = 4;
26
-
27
- // Scene
28
- scene = new THREE.Scene();
29
- scene.background = new THREE.Color(0x111111);
30
-
31
- // Lighting
32
- const ambientLight = new THREE.AmbientLight(0x404040);
33
- scene.add(ambientLight);
34
-
35
- const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
36
- directionalLight.position.set(5, 5, 5);
37
- scene.add(directionalLight);
38
-
39
- // Create mesh with TSL material
40
- const geometry = new THREE.TorusKnotGeometry(1, 0.3, 128, 32);
41
- const material = new THREE.MeshStandardNodeMaterial();
42
-
43
- // Animated color using TSL
44
- material.colorNode = color(0x0088ff).mul(
45
- oscSine(time.mul(0.5)).mul(0.5).add(0.5)
46
- );
47
-
48
- // Add slight position wobble
49
- material.positionNode = positionLocal.add(
50
- normalWorld.mul(oscSine(time.mul(2.0).add(positionLocal.y)).mul(0.05))
51
- );
52
-
53
- const mesh = new THREE.Mesh(geometry, material);
54
- scene.add(mesh);
55
-
56
- // Renderer
57
- renderer = new THREE.WebGPURenderer({ antialias: true });
58
- renderer.setSize(window.innerWidth, window.innerHeight);
59
- renderer.setPixelRatio(window.devicePixelRatio);
60
- document.body.appendChild(renderer.domElement);
61
-
62
- // Initialize WebGPU
63
- await renderer.init();
64
-
65
- // Controls
66
- controls = new OrbitControls(camera, renderer.domElement);
67
- controls.enableDamping = true;
68
-
69
- // Handle resize
70
- window.addEventListener('resize', onWindowResize);
71
-
72
- // Start animation loop
73
- renderer.setAnimationLoop(animate);
74
- }
75
-
76
- function onWindowResize() {
77
- camera.aspect = window.innerWidth / window.innerHeight;
78
- camera.updateProjectionMatrix();
79
- renderer.setSize(window.innerWidth, window.innerHeight);
80
- }
81
-
82
- function animate() {
83
- controls.update();
84
- renderer.render(scene, camera);
85
- }
86
-
87
- init();
@@ -1,170 +0,0 @@
1
- /**
2
- * Custom TSL Material Example
3
- *
4
- * Demonstrates creating custom shader effects using TSL:
5
- * - Fresnel rim lighting
6
- * - Animated patterns
7
- * - Dynamic displacement
8
- *
9
- * Based on Three.js examples (MIT License)
10
- * https://github.com/mrdoob/three.js
11
- */
12
-
13
- import * as THREE from 'three/webgpu';
14
- import {
15
- Fn,
16
- color,
17
- float,
18
- vec2,
19
- vec3,
20
- uniform,
21
- texture,
22
- uv,
23
- time,
24
- mix,
25
- smoothstep,
26
- sin,
27
- cos,
28
- positionLocal,
29
- positionWorld,
30
- normalLocal,
31
- normalWorld,
32
- cameraPosition
33
- } from 'three/tsl';
34
- import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
35
-
36
- let camera, scene, renderer, controls;
37
- let rimColor, patternScale, displacementStrength;
38
-
39
- async function init() {
40
- // Setup
41
- camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1, 100);
42
- camera.position.z = 3;
43
-
44
- scene = new THREE.Scene();
45
- scene.background = new THREE.Color(0x000000);
46
-
47
- // Uniforms for runtime control
48
- rimColor = uniform(new THREE.Color(0x00ffff));
49
- patternScale = uniform(5.0);
50
- displacementStrength = uniform(0.1);
51
-
52
- // Create custom material
53
- const material = createCustomMaterial();
54
-
55
- // Mesh
56
- const geometry = new THREE.IcosahedronGeometry(1, 64);
57
- const mesh = new THREE.Mesh(geometry, material);
58
- scene.add(mesh);
59
-
60
- // Renderer
61
- renderer = new THREE.WebGPURenderer({ antialias: true });
62
- renderer.setSize(window.innerWidth, window.innerHeight);
63
- renderer.setPixelRatio(window.devicePixelRatio);
64
- document.body.appendChild(renderer.domElement);
65
- await renderer.init();
66
-
67
- // Controls
68
- controls = new OrbitControls(camera, renderer.domElement);
69
- controls.enableDamping = true;
70
-
71
- // Events
72
- window.addEventListener('resize', onWindowResize);
73
-
74
- // GUI (optional - requires lil-gui)
75
- setupGUI();
76
-
77
- renderer.setAnimationLoop(animate);
78
- }
79
-
80
- function createCustomMaterial() {
81
- const material = new THREE.MeshStandardNodeMaterial();
82
-
83
- // --- Fresnel Rim Effect ---
84
- const fresnel = Fn(() => {
85
- const viewDir = cameraPosition.sub(positionWorld).normalize();
86
- const nDotV = normalWorld.dot(viewDir).saturate();
87
- return float(1.0).sub(nDotV).pow(3.0);
88
- });
89
-
90
- // --- Animated Pattern ---
91
- const animatedPattern = Fn(() => {
92
- const uvCoord = uv().mul(patternScale);
93
- const t = time.mul(0.5);
94
-
95
- // Create animated wave pattern
96
- const wave1 = sin(uvCoord.x.mul(10.0).add(t)).mul(0.5).add(0.5);
97
- const wave2 = sin(uvCoord.y.mul(10.0).sub(t.mul(1.3))).mul(0.5).add(0.5);
98
- const wave3 = sin(uvCoord.x.add(uvCoord.y).mul(7.0).add(t.mul(0.7))).mul(0.5).add(0.5);
99
-
100
- return wave1.mul(wave2).mul(wave3);
101
- });
102
-
103
- // --- Displacement ---
104
- const displacement = Fn(() => {
105
- const pattern = animatedPattern();
106
- return normalLocal.mul(pattern.mul(displacementStrength));
107
- });
108
-
109
- // Apply displacement
110
- material.positionNode = positionLocal.add(displacement());
111
-
112
- // --- Color ---
113
- const baseColor = color(0x222244);
114
- const highlightColor = color(0x4444ff);
115
-
116
- // Mix colors based on pattern
117
- const pattern = animatedPattern();
118
- const surfaceColor = mix(baseColor, highlightColor, pattern);
119
-
120
- material.colorNode = surfaceColor;
121
-
122
- // --- Rim lighting ---
123
- material.emissiveNode = rimColor.mul(fresnel());
124
-
125
- // --- PBR properties ---
126
- material.roughnessNode = float(0.3).add(pattern.mul(0.4));
127
- material.metalnessNode = float(0.1);
128
-
129
- return material;
130
- }
131
-
132
- function setupGUI() {
133
- // Only setup if lil-gui is available
134
- if (typeof window.GUI === 'undefined') {
135
- console.log('Add lil-gui for interactive controls');
136
- return;
137
- }
138
-
139
- const gui = new GUI();
140
- const params = {
141
- rimColor: '#00ffff',
142
- patternScale: 5.0,
143
- displacementStrength: 0.1
144
- };
145
-
146
- gui.addColor(params, 'rimColor').onChange((value) => {
147
- rimColor.value.set(value);
148
- });
149
-
150
- gui.add(params, 'patternScale', 1, 20).onChange((value) => {
151
- patternScale.value = value;
152
- });
153
-
154
- gui.add(params, 'displacementStrength', 0, 0.5).onChange((value) => {
155
- displacementStrength.value = value;
156
- });
157
- }
158
-
159
- function onWindowResize() {
160
- camera.aspect = window.innerWidth / window.innerHeight;
161
- camera.updateProjectionMatrix();
162
- renderer.setSize(window.innerWidth, window.innerHeight);
163
- }
164
-
165
- function animate() {
166
- controls.update();
167
- renderer.render(scene, camera);
168
- }
169
-
170
- init();