@factiii/stack 0.1.33 → 0.1.35
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/README.md +441 -441
- package/bin/stack +46 -0
- package/dist/cli/fix.d.ts.map +1 -1
- package/dist/cli/fix.js +17 -11
- package/dist/cli/fix.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +20 -7
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/scan.d.ts.map +1 -1
- package/dist/cli/scan.js +14 -22
- package/dist/cli/scan.js.map +1 -1
- package/dist/generators/generate-stack-yml.d.ts +1 -1
- package/dist/generators/generate-stack-yml.d.ts.map +1 -1
- package/dist/generators/generate-stack-yml.js +96 -69
- package/dist/generators/generate-stack-yml.js.map +1 -1
- package/dist/plugins/addons/openclaw/index.d.ts +45 -0
- package/dist/plugins/addons/openclaw/index.d.ts.map +1 -0
- package/dist/plugins/addons/openclaw/index.js +107 -0
- package/dist/plugins/addons/openclaw/index.js.map +1 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.d.ts +19 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.d.ts.map +1 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.js +441 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.js.map +1 -0
- package/dist/plugins/frameworks/expo/index.d.ts +45 -0
- package/dist/plugins/frameworks/expo/index.d.ts.map +1 -0
- package/dist/plugins/frameworks/expo/index.js +549 -0
- package/dist/plugins/frameworks/expo/index.js.map +1 -0
- package/dist/plugins/frameworks/prisma-trpc/index.js +8 -8
- package/dist/plugins/frameworks/prisma-trpc/index.js.map +1 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +16 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/pipelines/aws/index.js +15 -15
- package/dist/plugins/pipelines/aws/prod.js +7 -7
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts +3 -1
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js +17 -7
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/config.js +4 -4
- package/dist/plugins/pipelines/aws/scanfix/config.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts +1 -1
- package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/credentials.js +30 -76
- package/dist/plugins/pipelines/aws/scanfix/credentials.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts +1 -4
- package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/db-replication.js +11 -41
- package/dist/plugins/pipelines/aws/scanfix/db-replication.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ec2.js +64 -113
- package/dist/plugins/pipelines/aws/scanfix/ec2.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ecr.js +27 -36
- package/dist/plugins/pipelines/aws/scanfix/ecr.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/iam.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/iam.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/iam.js +37 -46
- package/dist/plugins/pipelines/aws/scanfix/iam.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/rds.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/rds.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/rds.js +43 -108
- package/dist/plugins/pipelines/aws/scanfix/rds.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/s3.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/s3.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/s3.js +46 -55
- package/dist/plugins/pipelines/aws/scanfix/s3.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/security-groups.js +83 -82
- package/dist/plugins/pipelines/aws/scanfix/security-groups.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ses.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ses.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ses.js +31 -53
- package/dist/plugins/pipelines/aws/scanfix/ses.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts +17 -0
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js +180 -0
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/vpc.js +97 -98
- package/dist/plugins/pipelines/aws/scanfix/vpc.js.map +1 -1
- package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts +101 -28
- package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/utils/aws-helpers.js +428 -76
- package/dist/plugins/pipelines/aws/utils/aws-helpers.js.map +1 -1
- package/dist/plugins/pipelines/factiii/index.d.ts +11 -1
- package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/index.js +183 -33
- package/dist/plugins/pipelines/factiii/index.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/ansible.js +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/ansible.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/bootstrap.js +6 -6
- package/dist/plugins/pipelines/factiii/scanfix/bootstrap.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/config.d.ts +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/config.js +4 -4
- package/dist/plugins/pipelines/factiii/scanfix/config.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/env-files.js +7 -7
- package/dist/plugins/pipelines/factiii/scanfix/env-files.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js +73 -13
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js +52 -4
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js.map +1 -1
- package/dist/plugins/servers/mac/index.js +13 -13
- package/dist/plugins/servers/mac/scanfix/config.js +5 -5
- package/dist/plugins/servers/mac/scanfix/config.js.map +1 -1
- package/dist/plugins/servers/mac/scanfix/containers.js +1 -1
- package/dist/plugins/servers/mac/scanfix/containers.js.map +1 -1
- package/dist/plugins/servers/mac/scanfix/system.js +6 -6
- package/dist/plugins/servers/mac/scanfix/system.js.map +1 -1
- package/dist/plugins/servers/mac/staging.js +4 -4
- package/dist/plugins/servers/windows/index.js +2 -2
- package/dist/plugins/servers/windows/index.js.map +1 -1
- package/dist/scanfix/fixes/certbot.js +1 -1
- package/dist/scripts/validate-example-values.d.ts +1 -1
- package/dist/scripts/validate-example-values.js +6 -6
- package/dist/utils/config-helpers.d.ts +3 -0
- package/dist/utils/config-helpers.d.ts.map +1 -1
- package/dist/utils/config-helpers.js.map +1 -1
- package/dist/utils/secret-prompts.d.ts +5 -2
- package/dist/utils/secret-prompts.d.ts.map +1 -1
- package/dist/utils/secret-prompts.js +55 -32
- package/dist/utils/secret-prompts.js.map +1 -1
- package/dist/utils/template-generator.js +71 -71
- package/package.json +8 -1
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw Addon Scanfixes
|
|
4
|
+
*
|
|
5
|
+
* Automates the full chain for running OpenClaw (autonomous AI agent)
|
|
6
|
+
* inside a Tart VM with a local LLM via Ollama:
|
|
7
|
+
*
|
|
8
|
+
* 1. Install Tart on the host Mac
|
|
9
|
+
* 2. Ensure a Tart VM exists and is running
|
|
10
|
+
* 3. SSH into the VM to install Ollama
|
|
11
|
+
* 4. Pull a compatible model (must support tool calling)
|
|
12
|
+
* 5. Install OpenClaw inside the VM
|
|
13
|
+
* 6. Configure OpenClaw to use the local Ollama model
|
|
14
|
+
*
|
|
15
|
+
* OpenClaw and Ollama run INSIDE the Tart VM, not on the host.
|
|
16
|
+
* The host only needs Tart installed.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.openclawFixes = void 0;
|
|
20
|
+
const child_process_1 = require("child_process");
|
|
21
|
+
// ============================================================
|
|
22
|
+
// HELPER FUNCTIONS
|
|
23
|
+
// ============================================================
|
|
24
|
+
const DEFAULT_MODEL = 'qwen2.5-coder:7b';
|
|
25
|
+
/**
|
|
26
|
+
* Get OpenClaw config merged from stack.yml and stack.local.yml
|
|
27
|
+
* Local config wins (per-developer override)
|
|
28
|
+
*/
|
|
29
|
+
function getOpenClawConfig(config, rootDir) {
|
|
30
|
+
const defaults = { model: DEFAULT_MODEL };
|
|
31
|
+
// Check stack.yml
|
|
32
|
+
const globalConf = config.openclaw;
|
|
33
|
+
// Check stack.local.yml
|
|
34
|
+
let localConf;
|
|
35
|
+
try {
|
|
36
|
+
const { loadLocalConfig } = require('../../../../utils/config-helpers.js');
|
|
37
|
+
const local = loadLocalConfig(rootDir);
|
|
38
|
+
localConf = local.openclaw;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// No local config
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
model: localConf?.model ?? globalConf?.model ?? defaults.model,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the model name from config
|
|
49
|
+
*/
|
|
50
|
+
function getModelName(config, rootDir) {
|
|
51
|
+
return getOpenClawConfig(config, rootDir).model;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if Tart CLI is installed on the host
|
|
55
|
+
*/
|
|
56
|
+
function isTartInstalled() {
|
|
57
|
+
try {
|
|
58
|
+
(0, child_process_1.execSync)('which tart', { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Auto-detect the first Tart VM name from `tart list`
|
|
67
|
+
*/
|
|
68
|
+
function getTartVmName() {
|
|
69
|
+
try {
|
|
70
|
+
const output = (0, child_process_1.execSync)('tart list', {
|
|
71
|
+
encoding: 'utf8',
|
|
72
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
73
|
+
});
|
|
74
|
+
const lines = output.trim().split('\n');
|
|
75
|
+
for (let i = 1; i < lines.length; i++) {
|
|
76
|
+
const line = lines[i];
|
|
77
|
+
if (!line)
|
|
78
|
+
continue;
|
|
79
|
+
const parts = line.trim().split(/\s+/);
|
|
80
|
+
if (parts.length >= 2 && parts[1]) {
|
|
81
|
+
return parts[1];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if a Tart VM is currently running
|
|
92
|
+
*/
|
|
93
|
+
function isVmRunning(vmName) {
|
|
94
|
+
try {
|
|
95
|
+
const output = (0, child_process_1.execSync)('tart list', {
|
|
96
|
+
encoding: 'utf8',
|
|
97
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
98
|
+
});
|
|
99
|
+
const lines = output.trim().split('\n');
|
|
100
|
+
for (let i = 1; i < lines.length; i++) {
|
|
101
|
+
const line = lines[i];
|
|
102
|
+
if (!line)
|
|
103
|
+
continue;
|
|
104
|
+
const parts = line.trim().split(/\s+/);
|
|
105
|
+
if (parts.length >= 4 && parts[1] === vmName) {
|
|
106
|
+
return parts[3] === 'running';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get the IP address of a running Tart VM
|
|
117
|
+
*/
|
|
118
|
+
function getVmIp(vmName) {
|
|
119
|
+
try {
|
|
120
|
+
const ip = (0, child_process_1.execSync)('tart ip ' + vmName, {
|
|
121
|
+
encoding: 'utf8',
|
|
122
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
123
|
+
timeout: 10000,
|
|
124
|
+
}).trim();
|
|
125
|
+
return ip || null;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Execute a command inside the Tart VM via SSH
|
|
133
|
+
*/
|
|
134
|
+
function sshVm(ip, cmd) {
|
|
135
|
+
return (0, child_process_1.execSync)('ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 admin@' + ip + ' "' + cmd + '"', {
|
|
136
|
+
encoding: 'utf8',
|
|
137
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
138
|
+
timeout: 30000,
|
|
139
|
+
}).trim();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if a binary is installed inside the VM
|
|
143
|
+
*/
|
|
144
|
+
function isInstalledInVm(ip, binary) {
|
|
145
|
+
try {
|
|
146
|
+
sshVm(ip, 'which ' + binary);
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if Ollama is running inside the VM
|
|
155
|
+
*/
|
|
156
|
+
function isOllamaRunningInVm(ip) {
|
|
157
|
+
try {
|
|
158
|
+
sshVm(ip, 'ollama list');
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if a model is pulled in Ollama inside the VM
|
|
167
|
+
*/
|
|
168
|
+
function isModelPulledInVm(ip, model) {
|
|
169
|
+
try {
|
|
170
|
+
const output = sshVm(ip, 'ollama list');
|
|
171
|
+
// Model names in ollama list may include tag, e.g. "qwen2.5-coder:7b"
|
|
172
|
+
const baseName = model.split(':')[0] ?? model;
|
|
173
|
+
return output.includes(baseName);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the VM IP if all prerequisites are met (tart installed, VM exists, running, has IP)
|
|
181
|
+
* Returns null if any prerequisite fails
|
|
182
|
+
*/
|
|
183
|
+
function getReadyVmIp() {
|
|
184
|
+
if (!isTartInstalled())
|
|
185
|
+
return null;
|
|
186
|
+
const vmName = getTartVmName();
|
|
187
|
+
if (!vmName)
|
|
188
|
+
return null;
|
|
189
|
+
if (!isVmRunning(vmName))
|
|
190
|
+
return null;
|
|
191
|
+
return getVmIp(vmName);
|
|
192
|
+
}
|
|
193
|
+
// ============================================================
|
|
194
|
+
// SCANFIXES
|
|
195
|
+
// ============================================================
|
|
196
|
+
exports.openclawFixes = [
|
|
197
|
+
// 1. Tart CLI must be installed on the host
|
|
198
|
+
{
|
|
199
|
+
id: 'openclaw-tart-not-installed',
|
|
200
|
+
stage: 'dev',
|
|
201
|
+
os: 'mac',
|
|
202
|
+
severity: 'critical',
|
|
203
|
+
description: 'Tart VM manager is not installed (required for OpenClaw)',
|
|
204
|
+
scan: async (_config, _rootDir) => {
|
|
205
|
+
return !isTartInstalled();
|
|
206
|
+
},
|
|
207
|
+
fix: async (_config, _rootDir) => {
|
|
208
|
+
try {
|
|
209
|
+
console.log(' Installing Tart...');
|
|
210
|
+
(0, child_process_1.execSync)('brew install cirruslabs/cli/tart', {
|
|
211
|
+
stdio: 'inherit',
|
|
212
|
+
timeout: 120000,
|
|
213
|
+
});
|
|
214
|
+
return isTartInstalled();
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
manualFix: 'Run: brew install cirruslabs/cli/tart',
|
|
221
|
+
},
|
|
222
|
+
// 2. A Tart VM must exist
|
|
223
|
+
{
|
|
224
|
+
id: 'openclaw-tart-vm-missing',
|
|
225
|
+
stage: 'dev',
|
|
226
|
+
os: 'mac',
|
|
227
|
+
severity: 'critical',
|
|
228
|
+
description: 'No Tart VM image found (required for OpenClaw)',
|
|
229
|
+
scan: async (_config, _rootDir) => {
|
|
230
|
+
if (!isTartInstalled())
|
|
231
|
+
return false;
|
|
232
|
+
return getTartVmName() === null;
|
|
233
|
+
},
|
|
234
|
+
fix: null,
|
|
235
|
+
manualFix: 'Run: tart clone ghcr.io/cirruslabs/macos-sequoia-base:latest sequoia-base',
|
|
236
|
+
},
|
|
237
|
+
// 3. The Tart VM must be running
|
|
238
|
+
{
|
|
239
|
+
id: 'openclaw-tart-vm-not-running',
|
|
240
|
+
stage: 'dev',
|
|
241
|
+
os: 'mac',
|
|
242
|
+
severity: 'critical',
|
|
243
|
+
description: 'Tart VM is not running (required for OpenClaw)',
|
|
244
|
+
scan: async (_config, _rootDir) => {
|
|
245
|
+
if (!isTartInstalled())
|
|
246
|
+
return false;
|
|
247
|
+
const vmName = getTartVmName();
|
|
248
|
+
if (!vmName)
|
|
249
|
+
return false;
|
|
250
|
+
return !isVmRunning(vmName);
|
|
251
|
+
},
|
|
252
|
+
fix: async (_config, _rootDir) => {
|
|
253
|
+
const vmName = getTartVmName();
|
|
254
|
+
if (!vmName)
|
|
255
|
+
return false;
|
|
256
|
+
try {
|
|
257
|
+
console.log(' Starting Tart VM: ' + vmName + '...');
|
|
258
|
+
(0, child_process_1.execSync)('tart run ' + vmName + ' &', {
|
|
259
|
+
stdio: 'ignore',
|
|
260
|
+
timeout: 5000,
|
|
261
|
+
});
|
|
262
|
+
(0, child_process_1.execSync)('sleep 10', { stdio: 'ignore' });
|
|
263
|
+
return isVmRunning(vmName);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
manualFix: 'Run: tart run <vm-name> (in a separate terminal)',
|
|
270
|
+
},
|
|
271
|
+
// 4. The VM must have an IP (network ready)
|
|
272
|
+
{
|
|
273
|
+
id: 'openclaw-tart-vm-no-ip',
|
|
274
|
+
stage: 'dev',
|
|
275
|
+
os: 'mac',
|
|
276
|
+
severity: 'critical',
|
|
277
|
+
description: 'Cannot get Tart VM IP address (VM may still be booting)',
|
|
278
|
+
scan: async (_config, _rootDir) => {
|
|
279
|
+
if (!isTartInstalled())
|
|
280
|
+
return false;
|
|
281
|
+
const vmName = getTartVmName();
|
|
282
|
+
if (!vmName)
|
|
283
|
+
return false;
|
|
284
|
+
if (!isVmRunning(vmName))
|
|
285
|
+
return false;
|
|
286
|
+
return getVmIp(vmName) === null;
|
|
287
|
+
},
|
|
288
|
+
fix: null,
|
|
289
|
+
manualFix: 'Wait 1-2 minutes for the VM to fully boot, then retry. Check: tart ip <vm-name>',
|
|
290
|
+
},
|
|
291
|
+
// 5. Ollama must be installed inside the VM
|
|
292
|
+
{
|
|
293
|
+
id: 'openclaw-ollama-not-installed',
|
|
294
|
+
stage: 'dev',
|
|
295
|
+
os: 'mac',
|
|
296
|
+
severity: 'critical',
|
|
297
|
+
description: 'Ollama is not installed inside the Tart VM',
|
|
298
|
+
scan: async (_config, _rootDir) => {
|
|
299
|
+
const ip = getReadyVmIp();
|
|
300
|
+
if (!ip)
|
|
301
|
+
return false;
|
|
302
|
+
return !isInstalledInVm(ip, 'ollama');
|
|
303
|
+
},
|
|
304
|
+
fix: async (_config, _rootDir) => {
|
|
305
|
+
const ip = getReadyVmIp();
|
|
306
|
+
if (!ip)
|
|
307
|
+
return false;
|
|
308
|
+
try {
|
|
309
|
+
console.log(' Installing Ollama inside VM...');
|
|
310
|
+
sshVm(ip, 'brew install ollama');
|
|
311
|
+
return isInstalledInVm(ip, 'ollama');
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
manualFix: 'SSH into VM and install: ssh admin@$(tart ip <vm-name>) "brew install ollama"',
|
|
318
|
+
},
|
|
319
|
+
// 6. Ollama must be running inside the VM
|
|
320
|
+
{
|
|
321
|
+
id: 'openclaw-ollama-not-running',
|
|
322
|
+
stage: 'dev',
|
|
323
|
+
os: 'mac',
|
|
324
|
+
severity: 'critical',
|
|
325
|
+
description: 'Ollama is not running inside the Tart VM',
|
|
326
|
+
scan: async (_config, _rootDir) => {
|
|
327
|
+
const ip = getReadyVmIp();
|
|
328
|
+
if (!ip)
|
|
329
|
+
return false;
|
|
330
|
+
if (!isInstalledInVm(ip, 'ollama'))
|
|
331
|
+
return false;
|
|
332
|
+
return !isOllamaRunningInVm(ip);
|
|
333
|
+
},
|
|
334
|
+
fix: async (_config, _rootDir) => {
|
|
335
|
+
const ip = getReadyVmIp();
|
|
336
|
+
if (!ip)
|
|
337
|
+
return false;
|
|
338
|
+
try {
|
|
339
|
+
console.log(' Starting Ollama inside VM...');
|
|
340
|
+
// Start ollama serve in background
|
|
341
|
+
(0, child_process_1.execSync)('ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 admin@' + ip +
|
|
342
|
+
' "nohup ollama serve > /dev/null 2>&1 &"', { stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
|
|
343
|
+
(0, child_process_1.execSync)('sleep 3', { stdio: 'ignore' });
|
|
344
|
+
return isOllamaRunningInVm(ip);
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
manualFix: 'SSH into VM and start: ssh admin@$(tart ip <vm-name>) "ollama serve"',
|
|
351
|
+
},
|
|
352
|
+
// 7. The configured model must be pulled
|
|
353
|
+
{
|
|
354
|
+
id: 'openclaw-model-not-pulled',
|
|
355
|
+
stage: 'dev',
|
|
356
|
+
os: 'mac',
|
|
357
|
+
severity: 'critical',
|
|
358
|
+
description: 'Ollama model not pulled inside the Tart VM',
|
|
359
|
+
scan: async (config, rootDir) => {
|
|
360
|
+
const ip = getReadyVmIp();
|
|
361
|
+
if (!ip)
|
|
362
|
+
return false;
|
|
363
|
+
if (!isOllamaRunningInVm(ip))
|
|
364
|
+
return false;
|
|
365
|
+
const model = getModelName(config, rootDir);
|
|
366
|
+
return !isModelPulledInVm(ip, model);
|
|
367
|
+
},
|
|
368
|
+
fix: async (config, rootDir) => {
|
|
369
|
+
const ip = getReadyVmIp();
|
|
370
|
+
if (!ip)
|
|
371
|
+
return false;
|
|
372
|
+
const model = getModelName(config, rootDir);
|
|
373
|
+
try {
|
|
374
|
+
console.log(' Pulling model ' + model + ' inside VM (this may take several minutes)...');
|
|
375
|
+
(0, child_process_1.execSync)('ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 admin@' + ip +
|
|
376
|
+
' "ollama pull ' + model + '"', { stdio: 'inherit', timeout: 600000 } // 10 min timeout for model download
|
|
377
|
+
);
|
|
378
|
+
return isModelPulledInVm(ip, model);
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
manualFix: 'SSH into VM and pull: ssh admin@$(tart ip <vm-name>) "ollama pull ' + DEFAULT_MODEL + '"',
|
|
385
|
+
},
|
|
386
|
+
// 8. OpenClaw must be installed inside the VM
|
|
387
|
+
{
|
|
388
|
+
id: 'openclaw-not-installed',
|
|
389
|
+
stage: 'dev',
|
|
390
|
+
os: 'mac',
|
|
391
|
+
severity: 'critical',
|
|
392
|
+
description: 'OpenClaw is not installed inside the Tart VM',
|
|
393
|
+
scan: async (_config, _rootDir) => {
|
|
394
|
+
const ip = getReadyVmIp();
|
|
395
|
+
if (!ip)
|
|
396
|
+
return false;
|
|
397
|
+
return !isInstalledInVm(ip, 'openclaw');
|
|
398
|
+
},
|
|
399
|
+
fix: async (_config, _rootDir) => {
|
|
400
|
+
const ip = getReadyVmIp();
|
|
401
|
+
if (!ip)
|
|
402
|
+
return false;
|
|
403
|
+
try {
|
|
404
|
+
console.log(' Installing OpenClaw inside VM...');
|
|
405
|
+
sshVm(ip, 'brew install openclaw-cli');
|
|
406
|
+
return isInstalledInVm(ip, 'openclaw');
|
|
407
|
+
}
|
|
408
|
+
catch {
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
manualFix: 'SSH into VM and install: ssh admin@$(tart ip <vm-name>) "brew install openclaw-cli"',
|
|
413
|
+
},
|
|
414
|
+
// 9. OpenClaw must be configured to use the local Ollama model
|
|
415
|
+
{
|
|
416
|
+
id: 'openclaw-not-configured',
|
|
417
|
+
stage: 'dev',
|
|
418
|
+
os: 'mac',
|
|
419
|
+
severity: 'warning',
|
|
420
|
+
description: 'OpenClaw is not configured inside the Tart VM',
|
|
421
|
+
scan: async (_config, _rootDir) => {
|
|
422
|
+
const ip = getReadyVmIp();
|
|
423
|
+
if (!ip)
|
|
424
|
+
return false;
|
|
425
|
+
if (!isInstalledInVm(ip, 'openclaw'))
|
|
426
|
+
return false;
|
|
427
|
+
try {
|
|
428
|
+
sshVm(ip, 'test -f ~/.openclaw/openclaw.json');
|
|
429
|
+
return false; // Config exists, no issue
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
return true; // Config missing
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
fix: null,
|
|
436
|
+
manualFix: 'SSH into VM and run the onboarding wizard:\n' +
|
|
437
|
+
' ssh admin@$(tart ip <vm-name>)\n' +
|
|
438
|
+
' openclaw onboard --install-daemon',
|
|
439
|
+
},
|
|
440
|
+
];
|
|
441
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../../src/plugins/addons/openclaw/scanfix/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expo (React Native) Framework Plugin
|
|
3
|
+
*
|
|
4
|
+
* Validates all dependencies needed for EAS Build to work.
|
|
5
|
+
* Each dependency has its own scanfix so `eas build` succeeds
|
|
6
|
+
* once all checks pass.
|
|
7
|
+
*/
|
|
8
|
+
import type { FactiiiConfig, Fix, DeployResult } from '../../../types/index.js';
|
|
9
|
+
interface DetectedConfig {
|
|
10
|
+
has_expo: boolean;
|
|
11
|
+
expo_version?: string | null;
|
|
12
|
+
has_app_json: boolean;
|
|
13
|
+
has_eas_json: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare class ExpoPlugin {
|
|
16
|
+
static readonly id = "expo";
|
|
17
|
+
static readonly name = "Expo (React Native)";
|
|
18
|
+
static readonly category: 'framework';
|
|
19
|
+
static readonly version = "1.0.0";
|
|
20
|
+
static readonly requiredEnvVars: string[];
|
|
21
|
+
static readonly configSchema: Record<string, unknown>;
|
|
22
|
+
static readonly autoConfigSchema: Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Determine if this plugin should be loaded for this project
|
|
25
|
+
* Loads if 'expo' is in package.json dependencies
|
|
26
|
+
*/
|
|
27
|
+
static shouldLoad(rootDir: string, _config: FactiiiConfig): Promise<boolean>;
|
|
28
|
+
static readonly fixes: Fix[];
|
|
29
|
+
/**
|
|
30
|
+
* Auto-detect Expo configuration
|
|
31
|
+
*/
|
|
32
|
+
static detectConfig(rootDir: string): Promise<DetectedConfig | null>;
|
|
33
|
+
private _config;
|
|
34
|
+
constructor(config: FactiiiConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Deploy - trigger EAS Build
|
|
37
|
+
*/
|
|
38
|
+
deploy(_config: FactiiiConfig, environment: string): Promise<DeployResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Undeploy - nothing to do for Expo
|
|
41
|
+
*/
|
|
42
|
+
undeploy(_config: FactiiiConfig, _environment: string): Promise<DeployResult>;
|
|
43
|
+
}
|
|
44
|
+
export default ExpoPlugin;
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/frameworks/expo/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAkBhF,UAAU,cAAc;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAsCD,cAAM,UAAU;IAKd,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAyB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAe;IACpD,MAAM,CAAC,QAAQ,CAAC,OAAO,WAAW;IAElC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IAE/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAInD;IAEF,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKtD;IAEF;;;OAGG;WACU,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAqW1B;IAMF;;OAEG;WACU,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA0B1E,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoBhF;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAGpF;AAED,eAAe,UAAU,CAAC"}
|