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.
- package/dist/{agent-scope-BKsGMXqc.js → agent-scope-DCgndASv.js} +3 -3
- package/dist/{agent-turn-runner-LKV3FMwQ.js → agent-turn-runner-CX7rX8by.js} +6 -6
- package/dist/{api-key-rotation-DZNFm4xG.js → api-key-rotation-dv2YbGr8.js} +2 -2
- package/dist/{audio-preflight-DQous9JR.js → audio-preflight-Qwb3oAbc.js} +29 -29
- package/dist/{audio-transcription-runner-BK3cV_ad.js → audio-transcription-runner-C4eHWIy0.js} +26 -26
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +60 -60
- package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
- package/dist/bundled/command-logger/handler.js +2 -2
- package/dist/bundled/session-journal/handler.js +60 -60
- package/dist/bundled/session-memory/handler.js +60 -60
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-activity-BAxUpg5h.js → channel-activity-Kn1_ykXE.js} +3 -3
- package/dist/{chat-content-BWkiC3u3.js → chat-content-CX7Bfpgy.js} +34 -34
- package/dist/{chrome-Dzgbe0zH.js → chrome-Bukcguhv.js} +31 -31
- package/dist/{chunk-Bvf22vTh.js → chunk-CEygNI3g.js} +3 -3
- package/dist/{command-queue-BOMFLCHM.js → command-queue-DOzYI9q4.js} +1 -1
- package/dist/{commands-registry-Da3c0MbL.js → commands-registry-Cof4HjvY.js} +2 -2
- package/dist/config.js +9 -9
- package/dist/{deliver-CJjQbaJE.js → deliver-BaTG7V5x.js} +29 -29
- package/dist/{diagnostic-Dn_o8RGN.js → diagnostic-DMrDenZI.js} +5 -5
- package/dist/{errors-1FTZDNVR.js → errors-COs_vQr3.js} +1 -1
- package/dist/{fetch-CnDdghbc.js → fetch-B1ohBh6A.js} +8 -8
- package/dist/{fetch-guard-B6BYdjiQ.js → fetch-guard-BXzVwvnJ.js} +3 -3
- package/dist/{frontmatter-DvbDhvt1.js → frontmatter-Cw_6jMAR.js} +3 -3
- package/dist/{fs-safe-IYMDplSg.js → fs-safe-BK5ALzKD.js} +26 -26
- package/dist/github-copilot-token-DYYKoDuV.js +106 -0
- package/dist/{image-ops-BuzZGoUm.js → image-ops-C-5VgbLB.js} +1 -1
- package/dist/{ir-CBsM7qoP.js → ir-DioI2VyB.js} +5 -5
- package/dist/{legacy-names-Ckds5WWe.js → legacy-names-CghFcfry.js} +1 -1
- package/dist/llm-slug-generator.js +60 -60
- package/dist/{logger-BeXVb5cn.js → logger-J4xjy-6D.js} +1 -1
- package/dist/{manager-BujYLKny.js → manager-D728Thsn.js} +18 -18
- package/dist/{markdown-tables-WuCFdPlC.js → markdown-tables-DfLMw9ti.js} +2 -2
- package/dist/{model-selection-CHi8o17y.js → model-selection-BHGpQSa9.js} +83 -83
- package/dist/{models-config-CAlyknIh.js → models-config-CJUMccZW.js} +2 -2
- package/dist/{outbound-attachment-C6mfyze2.js → outbound-attachment-DtVXUXnX.js} +2 -2
- package/dist/{outbound-message-hooks-jUzcd2OQ.js → outbound-message-hooks-7ErHCBLv.js} +5 -5
- package/dist/{path-alias-guards-BgOxr6f8.js → path-alias-guards-E9ntDORB.js} +1 -1
- package/dist/paths-BIDPYPVC.js +233 -0
- package/dist/{pi-embedded-aOKwlbog.js → pi-embedded-DpTacVAX.js} +277 -277
- package/dist/{pi-embedded-utils-BGvDJMAA.js → pi-embedded-utils-BAaHvb5G.js} +3 -3
- package/dist/{pi-model-discovery-CYfRyzsD.js → pi-model-discovery-BaH_6win.js} +7 -7
- package/dist/plugin-sdk/{agent-turn-execute-C6g1y27e.js → agent-turn-execute-Dg4sVJSk.js} +12 -12
- package/dist/plugin-sdk/{agent-turn-runner-BkP71ySA.js → agent-turn-runner-CD9Y0Gsf.js} +4 -4
- package/dist/plugin-sdk/{audio-preflight-CsMLbzm_.js → audio-preflight-GgmY1Zte.js} +5 -5
- package/dist/plugin-sdk/{audio-transcription-runner-2bpzZm3F.js → audio-transcription-runner-0gef4Ef0.js} +1 -1
- package/dist/plugin-sdk/{chat-content-CCOQCwrz.js → chat-content-Dpzf2nbZ.js} +3 -3
- package/dist/plugin-sdk/{chrome-C2bUQR0d.js → chrome-D9DwZOSC.js} +8 -8
- package/dist/plugin-sdk/{command-queue-J0ZpvnYU.js → command-queue-Cm8QKC0F.js} +1 -1
- package/dist/plugin-sdk/{deliver-CT3Lk2kq.js → deliver-CZVPDUrt.js} +1 -1
- package/dist/plugin-sdk/{deliver-dkNTCb3Z.js → deliver-D6hs0zDt.js} +3 -3
- package/dist/plugin-sdk/{diagnostic-C-Clqb63.js → diagnostic-Bi52EuT5.js} +1 -1
- package/dist/plugin-sdk/{monitor-BHeL2-is.js → monitor-BrUwRgsT.js} +32 -32
- package/dist/plugin-sdk/{pi-embedded-utils-BmeLQMRx.js → pi-embedded-utils-CeNVVYT3.js} +1 -1
- package/dist/plugin-sdk/{provider-dispatcher-BkEWKVLB.js → provider-dispatcher-Bx_RMlu-.js} +12 -12
- package/dist/plugin-sdk/{provider-image-QDVfXKph.js → provider-image-CBXOs7yQ.js} +4 -4
- package/dist/plugin-sdk/{provider-image-BSV8WjkR.js → provider-image-DH8Jro3J.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-QlS2E2LB.js → pw-ai-BP4Kwaqc.js} +1 -1
- package/dist/plugin-sdk/{runs-8iACp6xv.js → runs-C1Lvxfri.js} +3 -3
- package/dist/plugin-sdk/{runs-D0UdtKVI.js → runs-DG49eFuR.js} +5 -5
- package/dist/plugin-sdk/{send-BP8o2l4w.js → send-BguPpGBL.js} +2 -2
- package/dist/plugin-sdk/{send-CYZi6dwK.js → send-CcEF6VcP.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-DA50ITkO.js → subagent-registry-B4EmS6cu.js} +12 -12
- package/dist/plugin-sdk/testing.js +12 -12
- package/dist/{provider-image-CNBkTbhu.js → provider-image-BSkZoSBN.js} +6 -6
- package/dist/{proxy-Ds4gxPy8.js → proxy-CrSpy5Aw.js} +1 -1
- package/dist/{proxy-env-DAf-b2bM.js → proxy-env-BxR4m86L.js} +1 -1
- package/dist/{proxy-fetch-M3YAp_Kv.js → proxy-fetch-g109vqdt.js} +1 -1
- package/dist/{pw-ai-BcibeG9a.js → pw-ai-CNTt9O_x.js} +14 -14
- package/dist/{qmd-manager-C3UBJiCk.js → qmd-manager-CU9iEql0.js} +12 -12
- package/dist/{query-expansion-BT5lS0um.js → query-expansion-B_2rETEo.js} +13 -13
- package/dist/{recorder-B08vNxya.js → recorder-Clg9Kbqu.js} +2 -2
- package/dist/{redact-CKI6SufO.js → redact-DpE5Tg36.js} +1 -1
- package/dist/{replies-BHkXhmOj.js → replies-Cty02S3t.js} +5 -5
- package/dist/{reply-directives-DkfwzHl4.js → reply-directives-BIh2AkNd.js} +2 -2
- package/dist/{reply-prefix-DS2s69iC.js → reply-prefix-C-DjHvQK.js} +1 -1
- package/dist/{resolve-route-DxuZn3_M.js → resolve-route-DKZiteo6.js} +5 -5
- package/dist/{runs-DFvW_PVw.js → runs-6Q7RU60m.js} +9 -9
- package/dist/{send-D2WSE41A.js → send-Bf4geLyV.js} +8 -8
- package/dist/{send-mILKKt54.js → send-CsDSBjFo.js} +6 -6
- package/dist/{send-yIxOvEiz.js → send-DQvfLvpJ.js} +6 -6
- package/dist/{send-2aTk7PU-.js → send-VDe5tGbO.js} +28 -28
- package/dist/{send-odd2G3DX.js → send-bwKTbNlJ.js} +7 -7
- package/dist/{session-meta-B8B6RwSE.js → session-meta-5XI6vLtM.js} +1 -1
- package/dist/{sessions-DC7A0bw-.js → sessions-DF9biCmh.js} +5 -5
- package/dist/{skill-commands-DdVSQNce.js → skill-commands-CAOvM2sb.js} +8 -8
- package/dist/{skills-BXMjgvRl.js → skills-VN1CJK6W.js} +21 -21
- package/dist/{store-BVdeIl7N.js → store-HgGweM4u.js} +7 -7
- package/dist/subsystem-BZy3aWdW.js +2761 -0
- package/dist/{tables-yHwb0GsI.js → tables-DkwNUhx1.js} +1 -1
- package/dist/{tokens-CXBau-U0.js → tokens-PMai9bNL.js} +1 -1
- package/dist/{tool-loop-detection-Bw8B0hV3.js → tool-loop-detection-BqyMjpvr.js} +2 -2
- package/dist/{user-run-recording-8MZq1Us4.js → user-run-recording-B1HujJiT.js} +2 -2
- package/dist/{workspace-DK2ZEkpT.js → workspace-Bj1Jegt-.js} +27 -27
- package/extensions/acpx/package.json +1 -1
- package/extensions/anthropic/package.json +1 -1
- package/extensions/bifrost/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/deepgram/package.json +1 -1
- package/extensions/deepinfra/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diffs/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/dream-cycle/package.json +1 -1
- package/extensions/elevenlabs/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/gemini-search/package.json +1 -1
- package/extensions/google/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/grok-search/package.json +1 -1
- package/extensions/groq/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/kimi-search/package.json +1 -1
- package/extensions/learning-core/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +1 -1
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/mistral/package.json +1 -1
- package/extensions/moonshot/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +1 -1
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +1 -1
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/openai/package.json +1 -1
- package/extensions/openai-realtime/package.json +1 -1
- package/extensions/openrouter/package.json +1 -1
- package/extensions/perplexity-search/package.json +1 -1
- package/extensions/searxng-search/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +1 -1
- package/extensions/twitch/package.json +1 -1
- package/extensions/ui-surfaces/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +1 -1
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zai/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +1 -1
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +1 -1
- package/extensions/zalouser/package.json +1 -1
- package/package.json +6 -3
- package/scripts/install.ps1 +329 -0
- package/scripts/install.sh +2479 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wednesdayai",
|
|
3
|
-
"version": "0.5.1-dev.
|
|
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
|