wednesdayai 0.5.1-dev.25 → 0.5.1-dev.27

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 (160) hide show
  1. package/dist/{agent-scope-BKsGMXqc.js → agent-scope-DCgndASv.js} +3 -3
  2. package/dist/{agent-turn-runner-LKV3FMwQ.js → agent-turn-runner-CX7rX8by.js} +6 -6
  3. package/dist/{api-key-rotation-DZNFm4xG.js → api-key-rotation-dv2YbGr8.js} +2 -2
  4. package/dist/{audio-preflight-DQous9JR.js → audio-preflight-Qwb3oAbc.js} +29 -29
  5. package/dist/{audio-transcription-runner-BK3cV_ad.js → audio-transcription-runner-C4eHWIy0.js} +26 -26
  6. package/dist/build-info.json +3 -3
  7. package/dist/bundled/boot-md/handler.js +60 -60
  8. package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
  9. package/dist/bundled/command-logger/handler.js +2 -2
  10. package/dist/bundled/session-journal/handler.js +60 -60
  11. package/dist/bundled/session-memory/handler.js +60 -60
  12. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  13. package/dist/{channel-activity-BAxUpg5h.js → channel-activity-Kn1_ykXE.js} +3 -3
  14. package/dist/{chat-content-BWkiC3u3.js → chat-content-CX7Bfpgy.js} +34 -34
  15. package/dist/{chrome-Dzgbe0zH.js → chrome-Bukcguhv.js} +31 -31
  16. package/dist/{chunk-Bvf22vTh.js → chunk-CEygNI3g.js} +3 -3
  17. package/dist/{command-queue-BOMFLCHM.js → command-queue-DOzYI9q4.js} +1 -1
  18. package/dist/{commands-registry-Da3c0MbL.js → commands-registry-Cof4HjvY.js} +2 -2
  19. package/dist/config.js +9 -9
  20. package/dist/{deliver-CJjQbaJE.js → deliver-BaTG7V5x.js} +29 -29
  21. package/dist/{diagnostic-Dn_o8RGN.js → diagnostic-DMrDenZI.js} +5 -5
  22. package/dist/{errors-1FTZDNVR.js → errors-COs_vQr3.js} +1 -1
  23. package/dist/{fetch-CnDdghbc.js → fetch-B1ohBh6A.js} +8 -8
  24. package/dist/{fetch-guard-B6BYdjiQ.js → fetch-guard-BXzVwvnJ.js} +3 -3
  25. package/dist/{frontmatter-DvbDhvt1.js → frontmatter-Cw_6jMAR.js} +3 -3
  26. package/dist/{fs-safe-IYMDplSg.js → fs-safe-BK5ALzKD.js} +26 -26
  27. package/dist/github-copilot-token-DYYKoDuV.js +106 -0
  28. package/dist/{image-ops-BuzZGoUm.js → image-ops-C-5VgbLB.js} +1 -1
  29. package/dist/{ir-CBsM7qoP.js → ir-DioI2VyB.js} +5 -5
  30. package/dist/{legacy-names-Ckds5WWe.js → legacy-names-CghFcfry.js} +1 -1
  31. package/dist/llm-slug-generator.js +60 -60
  32. package/dist/{logger-BeXVb5cn.js → logger-J4xjy-6D.js} +1 -1
  33. package/dist/{manager-BujYLKny.js → manager-D728Thsn.js} +18 -18
  34. package/dist/{markdown-tables-WuCFdPlC.js → markdown-tables-DfLMw9ti.js} +2 -2
  35. package/dist/{model-selection-CHi8o17y.js → model-selection-BHGpQSa9.js} +83 -83
  36. package/dist/{models-config-CAlyknIh.js → models-config-CJUMccZW.js} +2 -2
  37. package/dist/{outbound-attachment-C6mfyze2.js → outbound-attachment-DtVXUXnX.js} +2 -2
  38. package/dist/{outbound-message-hooks-jUzcd2OQ.js → outbound-message-hooks-7ErHCBLv.js} +5 -5
  39. package/dist/{path-alias-guards-BgOxr6f8.js → path-alias-guards-E9ntDORB.js} +1 -1
  40. package/dist/paths-BIDPYPVC.js +233 -0
  41. package/dist/{pi-embedded-aOKwlbog.js → pi-embedded-DpTacVAX.js} +277 -277
  42. package/dist/{pi-embedded-utils-BGvDJMAA.js → pi-embedded-utils-BAaHvb5G.js} +3 -3
  43. package/dist/{pi-model-discovery-CYfRyzsD.js → pi-model-discovery-BaH_6win.js} +7 -7
  44. package/dist/plugin-sdk/{agent-turn-execute-C6g1y27e.js → agent-turn-execute-Dg4sVJSk.js} +12 -12
  45. package/dist/plugin-sdk/{agent-turn-runner-BkP71ySA.js → agent-turn-runner-CD9Y0Gsf.js} +4 -4
  46. package/dist/plugin-sdk/{audio-preflight-CsMLbzm_.js → audio-preflight-GgmY1Zte.js} +5 -5
  47. package/dist/plugin-sdk/{audio-transcription-runner-2bpzZm3F.js → audio-transcription-runner-0gef4Ef0.js} +1 -1
  48. package/dist/plugin-sdk/{chat-content-CCOQCwrz.js → chat-content-Dpzf2nbZ.js} +3 -3
  49. package/dist/plugin-sdk/{chrome-C2bUQR0d.js → chrome-D9DwZOSC.js} +8 -8
  50. package/dist/plugin-sdk/{command-queue-J0ZpvnYU.js → command-queue-Cm8QKC0F.js} +1 -1
  51. package/dist/plugin-sdk/{deliver-CT3Lk2kq.js → deliver-CZVPDUrt.js} +1 -1
  52. package/dist/plugin-sdk/{deliver-dkNTCb3Z.js → deliver-D6hs0zDt.js} +3 -3
  53. package/dist/plugin-sdk/{diagnostic-C-Clqb63.js → diagnostic-Bi52EuT5.js} +1 -1
  54. package/dist/plugin-sdk/{monitor-BHeL2-is.js → monitor-BrUwRgsT.js} +32 -32
  55. package/dist/plugin-sdk/{pi-embedded-utils-BmeLQMRx.js → pi-embedded-utils-CeNVVYT3.js} +1 -1
  56. package/dist/plugin-sdk/{provider-dispatcher-BkEWKVLB.js → provider-dispatcher-Bx_RMlu-.js} +12 -12
  57. package/dist/plugin-sdk/{provider-image-QDVfXKph.js → provider-image-CBXOs7yQ.js} +4 -4
  58. package/dist/plugin-sdk/{provider-image-BSV8WjkR.js → provider-image-DH8Jro3J.js} +1 -1
  59. package/dist/plugin-sdk/{pw-ai-QlS2E2LB.js → pw-ai-BP4Kwaqc.js} +1 -1
  60. package/dist/plugin-sdk/{runs-8iACp6xv.js → runs-C1Lvxfri.js} +3 -3
  61. package/dist/plugin-sdk/{runs-D0UdtKVI.js → runs-DG49eFuR.js} +5 -5
  62. package/dist/plugin-sdk/{send-BP8o2l4w.js → send-BguPpGBL.js} +2 -2
  63. package/dist/plugin-sdk/{send-CYZi6dwK.js → send-CcEF6VcP.js} +1 -1
  64. package/dist/plugin-sdk/{subagent-registry-DA50ITkO.js → subagent-registry-B4EmS6cu.js} +12 -12
  65. package/dist/plugin-sdk/testing.js +12 -12
  66. package/dist/{provider-image-CNBkTbhu.js → provider-image-BSkZoSBN.js} +6 -6
  67. package/dist/{proxy-Ds4gxPy8.js → proxy-CrSpy5Aw.js} +1 -1
  68. package/dist/{proxy-env-DAf-b2bM.js → proxy-env-BxR4m86L.js} +1 -1
  69. package/dist/{proxy-fetch-M3YAp_Kv.js → proxy-fetch-g109vqdt.js} +1 -1
  70. package/dist/{pw-ai-BcibeG9a.js → pw-ai-CNTt9O_x.js} +14 -14
  71. package/dist/{qmd-manager-C3UBJiCk.js → qmd-manager-CU9iEql0.js} +12 -12
  72. package/dist/{query-expansion-BT5lS0um.js → query-expansion-B_2rETEo.js} +13 -13
  73. package/dist/{recorder-B08vNxya.js → recorder-Clg9Kbqu.js} +2 -2
  74. package/dist/{redact-CKI6SufO.js → redact-DpE5Tg36.js} +1 -1
  75. package/dist/{replies-BHkXhmOj.js → replies-Cty02S3t.js} +5 -5
  76. package/dist/{reply-directives-DkfwzHl4.js → reply-directives-BIh2AkNd.js} +2 -2
  77. package/dist/{reply-prefix-DS2s69iC.js → reply-prefix-C-DjHvQK.js} +1 -1
  78. package/dist/{resolve-route-DxuZn3_M.js → resolve-route-DKZiteo6.js} +5 -5
  79. package/dist/{runs-DFvW_PVw.js → runs-6Q7RU60m.js} +9 -9
  80. package/dist/{send-D2WSE41A.js → send-Bf4geLyV.js} +8 -8
  81. package/dist/{send-mILKKt54.js → send-CsDSBjFo.js} +6 -6
  82. package/dist/{send-yIxOvEiz.js → send-DQvfLvpJ.js} +6 -6
  83. package/dist/{send-2aTk7PU-.js → send-VDe5tGbO.js} +28 -28
  84. package/dist/{send-odd2G3DX.js → send-bwKTbNlJ.js} +7 -7
  85. package/dist/{session-meta-B8B6RwSE.js → session-meta-5XI6vLtM.js} +1 -1
  86. package/dist/{sessions-DC7A0bw-.js → sessions-DF9biCmh.js} +5 -5
  87. package/dist/{skill-commands-DdVSQNce.js → skill-commands-CAOvM2sb.js} +8 -8
  88. package/dist/{skills-BXMjgvRl.js → skills-VN1CJK6W.js} +21 -21
  89. package/dist/{store-BVdeIl7N.js → store-HgGweM4u.js} +7 -7
  90. package/dist/subsystem-BZy3aWdW.js +2761 -0
  91. package/dist/{tables-yHwb0GsI.js → tables-DkwNUhx1.js} +1 -1
  92. package/dist/{tokens-CXBau-U0.js → tokens-PMai9bNL.js} +1 -1
  93. package/dist/{tool-loop-detection-Bw8B0hV3.js → tool-loop-detection-BqyMjpvr.js} +2 -2
  94. package/dist/{user-run-recording-8MZq1Us4.js → user-run-recording-B1HujJiT.js} +2 -2
  95. package/dist/{workspace-DK2ZEkpT.js → workspace-Bj1Jegt-.js} +27 -27
  96. package/extensions/acpx/package.json +1 -1
  97. package/extensions/anthropic/package.json +1 -1
  98. package/extensions/bifrost/package.json +1 -1
  99. package/extensions/bluebubbles/package.json +1 -1
  100. package/extensions/copilot-proxy/package.json +1 -1
  101. package/extensions/deepgram/package.json +1 -1
  102. package/extensions/deepinfra/package.json +1 -1
  103. package/extensions/diagnostics-otel/package.json +1 -1
  104. package/extensions/diffs/package.json +1 -1
  105. package/extensions/discord/package.json +1 -1
  106. package/extensions/dream-cycle/package.json +1 -1
  107. package/extensions/elevenlabs/package.json +1 -1
  108. package/extensions/feishu/package.json +1 -1
  109. package/extensions/gemini-search/package.json +1 -1
  110. package/extensions/google/package.json +1 -1
  111. package/extensions/google-gemini-cli-auth/package.json +1 -1
  112. package/extensions/googlechat/package.json +1 -1
  113. package/extensions/grok-search/package.json +1 -1
  114. package/extensions/groq/package.json +1 -1
  115. package/extensions/imessage/package.json +1 -1
  116. package/extensions/irc/package.json +1 -1
  117. package/extensions/kimi-search/package.json +1 -1
  118. package/extensions/learning-core/package.json +1 -1
  119. package/extensions/line/package.json +1 -1
  120. package/extensions/llm-task/package.json +1 -1
  121. package/extensions/lobster/package.json +1 -1
  122. package/extensions/matrix/CHANGELOG.md +1 -1
  123. package/extensions/matrix/package.json +1 -1
  124. package/extensions/mattermost/package.json +1 -1
  125. package/extensions/memory-core/package.json +1 -1
  126. package/extensions/memory-lancedb/package.json +1 -1
  127. package/extensions/minimax/package.json +1 -1
  128. package/extensions/minimax-portal-auth/package.json +1 -1
  129. package/extensions/mistral/package.json +1 -1
  130. package/extensions/moonshot/package.json +1 -1
  131. package/extensions/msteams/CHANGELOG.md +1 -1
  132. package/extensions/msteams/package.json +1 -1
  133. package/extensions/nextcloud-talk/package.json +1 -1
  134. package/extensions/nostr/CHANGELOG.md +1 -1
  135. package/extensions/nostr/package.json +1 -1
  136. package/extensions/open-prose/package.json +1 -1
  137. package/extensions/openai/package.json +1 -1
  138. package/extensions/openai-realtime/package.json +1 -1
  139. package/extensions/openrouter/package.json +1 -1
  140. package/extensions/perplexity-search/package.json +1 -1
  141. package/extensions/searxng-search/package.json +1 -1
  142. package/extensions/signal/package.json +1 -1
  143. package/extensions/slack/package.json +1 -1
  144. package/extensions/synology-chat/package.json +1 -1
  145. package/extensions/telegram/package.json +1 -1
  146. package/extensions/tlon/package.json +1 -1
  147. package/extensions/twitch/CHANGELOG.md +1 -1
  148. package/extensions/twitch/package.json +1 -1
  149. package/extensions/ui-surfaces/package.json +1 -1
  150. package/extensions/voice-call/CHANGELOG.md +1 -1
  151. package/extensions/voice-call/package.json +1 -1
  152. package/extensions/whatsapp/package.json +1 -1
  153. package/extensions/zai/package.json +1 -1
  154. package/extensions/zalo/CHANGELOG.md +1 -1
  155. package/extensions/zalo/package.json +1 -1
  156. package/extensions/zalouser/CHANGELOG.md +1 -1
  157. package/extensions/zalouser/package.json +1 -1
  158. package/package.json +6 -3
  159. package/scripts/install.ps1 +329 -0
  160. package/scripts/install.sh +2479 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wednesdayai/perplexity-search",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "private": true,
5
5
  "description": "WednesdayAI Perplexity Sonar web search provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wednesdayai/searxng-search",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "private": true,
5
5
  "description": "WednesdayAI SearXNG web search plugin — self-hosted meta-search, no API key required",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/signal",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "private": true,
5
5
  "description": "OpenClaw Signal channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/slack",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "private": true,
5
5
  "description": "OpenClaw Slack channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/synology-chat",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "Synology Chat channel plugin for OpenClaw",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/telegram",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "private": true,
5
5
  "description": "OpenClaw Telegram channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/tlon",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "OpenClaw Tlon/Urbit channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.5.1-dev.25+31e65a965
3
+ ## 0.5.1-dev.27+2cec8714b
4
4
 
5
5
  ### Changes
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/twitch",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "OpenClaw Twitch channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/ui-surfaces",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "private": true,
5
5
  "description": "Assistant UI surfaces plugin: show_ui tool and the Canvas surface store",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.5.1-dev.25+31e65a965
3
+ ## 0.5.1-dev.27+2cec8714b
4
4
 
5
5
  ### Changes
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/voice-call",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "OpenClaw voice-call plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wednesdayai/whatsapp",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "WednesdayAI WhatsApp channel plugin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wednesdayai/zai",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "private": true,
5
5
  "description": "Z.ai media understanding: GLM image description.",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.5.1-dev.25+31e65a965
3
+ ## 0.5.1-dev.27+2cec8714b
4
4
 
5
5
  ### Changes
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/zalo",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "OpenClaw Zalo channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.5.1-dev.25+31e65a965
3
+ ## 0.5.1-dev.27+2cec8714b
4
4
 
5
5
  ### Changes
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/zalouser",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "OpenClaw Zalo Personal Account plugin via native zca-js integration",
5
5
  "type": "module",
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wednesdayai",
3
- "version": "0.5.1-dev.25+31e65a965",
3
+ "version": "0.5.1-dev.27+2cec8714b",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/ExpansionX/WednesdayAI-core#readme",
@@ -31,6 +31,8 @@
31
31
  "dist/",
32
32
  "docs/reference/templates/",
33
33
  "extensions/",
34
+ "scripts/install.ps1",
35
+ "scripts/install.sh",
34
36
  "skills/",
35
37
  "wednesdayai-logs.mjs"
36
38
  ],
@@ -78,8 +80,8 @@
78
80
  "build:plugin-sdk:dts": "tsc -p tsconfig.plugin-sdk.dts.json",
79
81
  "build:strict-smoke": "pnpm canvas:a2ui:bundle && tsdown && pnpm build:plugin-sdk:dts",
80
82
  "canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
81
- "check": "pnpm format:check && pnpm tsgo && pnpm tsgo:web && pnpm tsgo:control && pnpm lint && pnpm lint:tmp:no-random-messaging && pnpm lint:tmp:channel-agnostic-boundaries && pnpm lint:tmp:no-raw-channel-fetch && pnpm lint:agent:ingress-owner && pnpm lint:plugins:no-register-http-handler && pnpm lint:webhook:no-low-level-body-read && pnpm lint:auth:no-pairing-store-group && pnpm lint:auth:pairing-account-scope && pnpm lint:extensions:no-core-tables && pnpm lint:scripts:direct-run",
82
- "check:docs": "pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-links",
83
+ "check": "pnpm format:check && pnpm tsgo && pnpm tsgo:web && pnpm tsgo:control && pnpm lint && pnpm lint:tmp:no-random-messaging && pnpm lint:tmp:channel-agnostic-boundaries && pnpm lint:tmp:no-raw-channel-fetch && pnpm lint:agent:ingress-owner && pnpm lint:plugins:no-register-http-handler && pnpm lint:webhook:no-low-level-body-read && pnpm lint:auth:no-pairing-store-group && pnpm lint:auth:pairing-account-scope && pnpm lint:extensions:no-core-tables && pnpm lint:scripts:direct-run && pnpm lint:installer-hosts",
84
+ "check:docs": "pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-links && pnpm lint:installer-hosts",
83
85
  "check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500",
84
86
  "control:build": "pnpm --dir apps/control build",
85
87
  "control:build:packaged": "node scripts/build-web-app.mjs --app control",
@@ -119,6 +121,7 @@
119
121
  "lint:docs:fix": "pnpm dlx markdownlint-cli2@0.23.3 --fix",
120
122
  "lint:extensions:no-core-tables": "node --import tsx scripts/check-extension-core-table-access.ts",
121
123
  "lint:fix": "oxlint --type-aware --fix && pnpm format",
124
+ "lint:installer-hosts": "node scripts/installer-host-guard.mjs",
122
125
  "lint:plugins:no-register-http-handler": "node scripts/check-no-register-http-handler.mjs",
123
126
  "lint:scripts:direct-run": "node scripts/check-scripts-direct-run.mjs",
124
127
  "lint:tmp:channel-agnostic-boundaries": "node scripts/check-channel-agnostic-boundaries.mjs",
@@ -0,0 +1,329 @@
1
+ # OpenClaw Installer for Windows (PowerShell)
2
+ # Usage: iwr -useb https://wednesdayai.dev/install.ps1 | iex
3
+ # Or: & ([scriptblock]::Create((iwr -useb https://wednesdayai.dev/install.ps1))) -NoOnboard
4
+
5
+ param(
6
+ [string]$InstallMethod = "npm",
7
+ [string]$Tag = "latest",
8
+ [string]$GitDir = "$env:USERPROFILE\openclaw",
9
+ [switch]$NoOnboard,
10
+ [switch]$NoGitUpdate,
11
+ [switch]$DryRun
12
+ )
13
+
14
+ $ErrorActionPreference = "Stop"
15
+
16
+ # Colors
17
+ $ACCENT = "`e[38;2;255;77;77m" # coral-bright
18
+ $SUCCESS = "`e[38;2;0;229;204m" # cyan-bright
19
+ $WARN = "`e[38;2;255;176;32m" # amber
20
+ $ERROR = "`e[38;2;230;57;70m" # coral-mid
21
+ $MUTED = "`e[38;2;90;100;128m" # text-muted
22
+ $NC = "`e[0m" # No Color
23
+
24
+ function Write-Host {
25
+ param([string]$Message, [string]$Level = "info")
26
+ $msg = switch ($Level) {
27
+ "success" { "$SUCCESS✓$NC $Message" }
28
+ "warn" { "$WARN!$NC $Message" }
29
+ "error" { "$ERROR✗$NC $Message" }
30
+ default { "$MUTED·$NC $Message" }
31
+ }
32
+ Microsoft.PowerShell.Host\Write-Host $msg
33
+ }
34
+
35
+ function Write-Banner {
36
+ Write-Host ""
37
+ Write-Host "${ACCENT} 🦞 OpenClaw Installer$NC" -Level info
38
+ Write-Host "${MUTED} All your chats, one OpenClaw.$NC" -Level info
39
+ Write-Host ""
40
+ }
41
+
42
+ function Get-ExecutionPolicyStatus {
43
+ $policy = Get-ExecutionPolicy
44
+ if ($policy -eq "Restricted" -or $policy -eq "AllSigned") {
45
+ return @{ Blocked = $true; Policy = $policy }
46
+ }
47
+ return @{ Blocked = $false; Policy = $policy }
48
+ }
49
+
50
+ function Test-Admin {
51
+ $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
52
+ $principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
53
+ return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
54
+ }
55
+
56
+ function Ensure-ExecutionPolicy {
57
+ $status = Get-ExecutionPolicyStatus
58
+ if ($status.Blocked) {
59
+ Write-Host "PowerShell execution policy is set to: $($status.Policy)" -Level warn
60
+ Write-Host "This prevents scripts like npm.ps1 from running." -Level warn
61
+ Write-Host ""
62
+
63
+ # Try to set execution policy for current process
64
+ try {
65
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -ErrorAction Stop
66
+ Write-Host "Set execution policy to RemoteSigned for current process" -Level success
67
+ return $true
68
+ } catch {
69
+ Write-Host "Could not automatically set execution policy" -Level error
70
+ Write-Host ""
71
+ Write-Host "To fix this, run:" -Level info
72
+ Write-Host " Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process" -Level info
73
+ Write-Host ""
74
+ Write-Host "Or run PowerShell as Administrator and execute:" -Level info
75
+ Write-Host " Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine" -Level info
76
+ return $false
77
+ }
78
+ }
79
+ return $true
80
+ }
81
+
82
+ function Get-NodeVersion {
83
+ try {
84
+ $version = node --version 2>$null
85
+ if ($version) {
86
+ return $version -replace '^v', ''
87
+ }
88
+ } catch { }
89
+ return $null
90
+ }
91
+
92
+ function Get-NpmVersion {
93
+ try {
94
+ $version = npm --version 2>$null
95
+ if ($version) {
96
+ return $version
97
+ }
98
+ } catch { }
99
+ return $null
100
+ }
101
+
102
+ function Install-Node {
103
+ Write-Host "Node.js not found" -Level info
104
+ Write-Host "Installing Node.js..." -Level info
105
+
106
+ # Try winget first
107
+ if (Get-Command winget -ErrorAction SilentlyContinue) {
108
+ Write-Host " Using winget..." -Level info
109
+ try {
110
+ winget install OpenJS.NodeJS.LTS --accept-package-agreements --accept-source-agreements 2>&1 | Out-Null
111
+ # Refresh PATH
112
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
113
+ Write-Host " Node.js installed via winget" -Level success
114
+ return $true
115
+ } catch {
116
+ Write-Host " Winget install failed: $_" -Level warn
117
+ }
118
+ }
119
+
120
+ # Try chocolatey
121
+ if (Get-Command choco -ErrorAction SilentlyContinue) {
122
+ Write-Host " Using chocolatey..." -Level info
123
+ try {
124
+ choco install nodejs-lts -y 2>&1 | Out-Null
125
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
126
+ Write-Host " Node.js installed via chocolatey" -Level success
127
+ return $true
128
+ } catch {
129
+ Write-Host " Chocolatey install failed: $_" -Level warn
130
+ }
131
+ }
132
+
133
+ # Try scoop
134
+ if (Get-Command scoop -ErrorAction SilentlyContinue) {
135
+ Write-Host " Using scoop..." -Level info
136
+ try {
137
+ scoop install nodejs-lts 2>&1 | Out-Null
138
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
139
+ Write-Host " Node.js installed via scoop" -Level success
140
+ return $true
141
+ } catch {
142
+ Write-Host " Scoop install failed: $_" -Level warn
143
+ }
144
+ }
145
+
146
+ Write-Host "Could not install Node.js automatically" -Level error
147
+ Write-Host "Please install Node.js 24+ manually from: https://nodejs.org" -Level info
148
+ return $false
149
+ }
150
+
151
+ function Ensure-Node {
152
+ $nodeVersion = Get-NodeVersion
153
+ if ($nodeVersion) {
154
+ $major = [int]($nodeVersion -split '\.')[0]
155
+ if ($major -ge 24) {
156
+ Write-Host "Node.js v$nodeVersion found" -Level success
157
+ return $true
158
+ }
159
+ Write-Host "Node.js v$nodeVersion found, but need v24+" -Level warn
160
+ }
161
+ return Install-Node
162
+ }
163
+
164
+ function Get-GitVersion {
165
+ try {
166
+ $version = git --version 2>$null
167
+ if ($version) {
168
+ return $version
169
+ }
170
+ } catch { }
171
+ return $null
172
+ }
173
+
174
+ function Install-Git {
175
+ Write-Host "Git not found" -Level info
176
+
177
+ if (Get-Command winget -ErrorAction SilentlyContinue) {
178
+ Write-Host " Installing Git via winget..." -Level info
179
+ try {
180
+ winget install Git.Git --accept-package-agreements --accept-source-agreements 2>&1 | Out-Null
181
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
182
+ Write-Host " Git installed" -Level success
183
+ return $true
184
+ } catch {
185
+ Write-Host " Winget install failed" -Level warn
186
+ }
187
+ }
188
+
189
+ Write-Host "Please install Git for Windows from: https://git-scm.com" -Level error
190
+ return $false
191
+ }
192
+
193
+ function Ensure-Git {
194
+ $gitVersion = Get-GitVersion
195
+ if ($gitVersion) {
196
+ Write-Host "$gitVersion found" -Level success
197
+ return $true
198
+ }
199
+ return Install-Git
200
+ }
201
+
202
+ function Install-OpenClawNpm {
203
+ param([string]$Version = "latest")
204
+
205
+ Write-Host "Installing OpenClaw (wednesdayai@$Version)..." -Level info
206
+
207
+ try {
208
+ # Use -ExecutionPolicy Bypass to handle restricted execution policy
209
+ npm install -g wednesdayai@$Version --no-fund --no-audit 2>&1
210
+ Write-Host "OpenClaw installed" -Level success
211
+ return $true
212
+ } catch {
213
+ Write-Host "npm install failed: $_" -Level error
214
+ return $false
215
+ }
216
+ }
217
+
218
+ function Install-OpenClawGit {
219
+ param([string]$RepoDir, [switch]$Update)
220
+
221
+ Write-Host "Installing OpenClaw from git..." -Level info
222
+
223
+ if (!(Test-Path $RepoDir)) {
224
+ Write-Host " Cloning repository..." -Level info
225
+ git clone https://github.com/ExpansionX/WednesdayAI-core.git $RepoDir 2>&1
226
+ } elseif ($Update) {
227
+ Write-Host " Updating repository..." -Level info
228
+ git -C $RepoDir pull --rebase 2>&1
229
+ }
230
+
231
+ # Install pnpm if not present
232
+ if (!(Get-Command pnpm -ErrorAction SilentlyContinue)) {
233
+ Write-Host " Installing pnpm..." -Level info
234
+ npm install -g pnpm 2>&1
235
+ }
236
+
237
+ # Install dependencies
238
+ Write-Host " Installing dependencies..." -Level info
239
+ pnpm install --dir $RepoDir 2>&1
240
+
241
+ # Build
242
+ Write-Host " Building..." -Level info
243
+ pnpm --dir $RepoDir build 2>&1
244
+
245
+ # Create wrapper
246
+ $wrapperDir = "$env:USERPROFILE\.local\bin"
247
+ if (!(Test-Path $wrapperDir)) {
248
+ New-Item -ItemType Directory -Path $wrapperDir -Force | Out-Null
249
+ }
250
+
251
+ @"
252
+ @echo off
253
+ node "%~dp0..\openclaw\dist\entry.js" %*
254
+ "@ | Out-File -FilePath "$wrapperDir\openclaw.cmd" -Encoding ASCII -Force
255
+
256
+ Write-Host "OpenClaw installed" -Level success
257
+ return $true
258
+ }
259
+
260
+ function Add-ToPath {
261
+ param([string]$Path)
262
+
263
+ $currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
264
+ if ($currentPath -notlike "*$Path*") {
265
+ [Environment]::SetEnvironmentVariable("Path", "$currentPath;$Path", "User")
266
+ Write-Host "Added $Path to user PATH" -Level info
267
+ }
268
+ }
269
+
270
+ # Main
271
+ function Main {
272
+ Write-Banner
273
+
274
+ Write-Host "Windows detected" -Level success
275
+
276
+ # Check and handle execution policy FIRST, before any npm calls
277
+ if (!(Ensure-ExecutionPolicy)) {
278
+ Write-Host ""
279
+ Write-Host "Installation cannot continue due to execution policy restrictions" -Level error
280
+ exit 1
281
+ }
282
+
283
+ if (!(Ensure-Node)) {
284
+ exit 1
285
+ }
286
+
287
+ if ($InstallMethod -eq "git") {
288
+ if (!(Ensure-Git)) {
289
+ exit 1
290
+ }
291
+
292
+ if ($DryRun) {
293
+ Write-Host "[DRY RUN] Would install OpenClaw from git to $GitDir" -Level info
294
+ } else {
295
+ Install-OpenClawGit -RepoDir $GitDir -Update:(-not $NoGitUpdate)
296
+ }
297
+ } else {
298
+ # npm method
299
+ if (!(Ensure-Git)) {
300
+ Write-Host "Git is required for npm installs. Please install Git and try again." -Level warn
301
+ }
302
+
303
+ if ($DryRun) {
304
+ Write-Host "[DRY RUN] Would install OpenClaw via npm (tag: $Tag)" -Level info
305
+ } else {
306
+ if (!(Install-OpenClawNpm -Version $Tag)) {
307
+ exit 1
308
+ }
309
+ }
310
+ }
311
+
312
+ # Try to add npm global bin to PATH
313
+ try {
314
+ $npmPrefix = npm config get prefix 2>$null
315
+ if ($npmPrefix) {
316
+ Add-ToPath -Path "$npmPrefix"
317
+ }
318
+ } catch { }
319
+
320
+ if (!$NoOnboard -and !$DryRun) {
321
+ Write-Host ""
322
+ Write-Host "Run 'openclaw onboard' to complete setup" -Level info
323
+ }
324
+
325
+ Write-Host ""
326
+ Write-Host "🦞 OpenClaw installed successfully!" -Level success
327
+ }
328
+
329
+ Main