@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.
Files changed (131) hide show
  1. package/README.md +441 -441
  2. package/bin/stack +46 -0
  3. package/dist/cli/fix.d.ts.map +1 -1
  4. package/dist/cli/fix.js +17 -11
  5. package/dist/cli/fix.js.map +1 -1
  6. package/dist/cli/init.d.ts.map +1 -1
  7. package/dist/cli/init.js +20 -7
  8. package/dist/cli/init.js.map +1 -1
  9. package/dist/cli/scan.d.ts.map +1 -1
  10. package/dist/cli/scan.js +14 -22
  11. package/dist/cli/scan.js.map +1 -1
  12. package/dist/generators/generate-stack-yml.d.ts +1 -1
  13. package/dist/generators/generate-stack-yml.d.ts.map +1 -1
  14. package/dist/generators/generate-stack-yml.js +96 -69
  15. package/dist/generators/generate-stack-yml.js.map +1 -1
  16. package/dist/plugins/addons/openclaw/index.d.ts +45 -0
  17. package/dist/plugins/addons/openclaw/index.d.ts.map +1 -0
  18. package/dist/plugins/addons/openclaw/index.js +107 -0
  19. package/dist/plugins/addons/openclaw/index.js.map +1 -0
  20. package/dist/plugins/addons/openclaw/scanfix/setup.d.ts +19 -0
  21. package/dist/plugins/addons/openclaw/scanfix/setup.d.ts.map +1 -0
  22. package/dist/plugins/addons/openclaw/scanfix/setup.js +441 -0
  23. package/dist/plugins/addons/openclaw/scanfix/setup.js.map +1 -0
  24. package/dist/plugins/frameworks/expo/index.d.ts +45 -0
  25. package/dist/plugins/frameworks/expo/index.d.ts.map +1 -0
  26. package/dist/plugins/frameworks/expo/index.js +549 -0
  27. package/dist/plugins/frameworks/expo/index.js.map +1 -0
  28. package/dist/plugins/frameworks/prisma-trpc/index.js +8 -8
  29. package/dist/plugins/frameworks/prisma-trpc/index.js.map +1 -1
  30. package/dist/plugins/index.d.ts.map +1 -1
  31. package/dist/plugins/index.js +16 -0
  32. package/dist/plugins/index.js.map +1 -1
  33. package/dist/plugins/pipelines/aws/index.js +15 -15
  34. package/dist/plugins/pipelines/aws/prod.js +7 -7
  35. package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts +3 -1
  36. package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts.map +1 -1
  37. package/dist/plugins/pipelines/aws/scanfix/aws-cli.js +17 -7
  38. package/dist/plugins/pipelines/aws/scanfix/aws-cli.js.map +1 -1
  39. package/dist/plugins/pipelines/aws/scanfix/config.js +4 -4
  40. package/dist/plugins/pipelines/aws/scanfix/config.js.map +1 -1
  41. package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts +1 -1
  42. package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts.map +1 -1
  43. package/dist/plugins/pipelines/aws/scanfix/credentials.js +30 -76
  44. package/dist/plugins/pipelines/aws/scanfix/credentials.js.map +1 -1
  45. package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts +1 -4
  46. package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts.map +1 -1
  47. package/dist/plugins/pipelines/aws/scanfix/db-replication.js +11 -41
  48. package/dist/plugins/pipelines/aws/scanfix/db-replication.js.map +1 -1
  49. package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts +1 -0
  50. package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts.map +1 -1
  51. package/dist/plugins/pipelines/aws/scanfix/ec2.js +64 -113
  52. package/dist/plugins/pipelines/aws/scanfix/ec2.js.map +1 -1
  53. package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts +1 -0
  54. package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts.map +1 -1
  55. package/dist/plugins/pipelines/aws/scanfix/ecr.js +27 -36
  56. package/dist/plugins/pipelines/aws/scanfix/ecr.js.map +1 -1
  57. package/dist/plugins/pipelines/aws/scanfix/iam.d.ts +1 -0
  58. package/dist/plugins/pipelines/aws/scanfix/iam.d.ts.map +1 -1
  59. package/dist/plugins/pipelines/aws/scanfix/iam.js +37 -46
  60. package/dist/plugins/pipelines/aws/scanfix/iam.js.map +1 -1
  61. package/dist/plugins/pipelines/aws/scanfix/rds.d.ts +1 -0
  62. package/dist/plugins/pipelines/aws/scanfix/rds.d.ts.map +1 -1
  63. package/dist/plugins/pipelines/aws/scanfix/rds.js +43 -108
  64. package/dist/plugins/pipelines/aws/scanfix/rds.js.map +1 -1
  65. package/dist/plugins/pipelines/aws/scanfix/s3.d.ts +1 -0
  66. package/dist/plugins/pipelines/aws/scanfix/s3.d.ts.map +1 -1
  67. package/dist/plugins/pipelines/aws/scanfix/s3.js +46 -55
  68. package/dist/plugins/pipelines/aws/scanfix/s3.js.map +1 -1
  69. package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts +1 -0
  70. package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts.map +1 -1
  71. package/dist/plugins/pipelines/aws/scanfix/security-groups.js +83 -82
  72. package/dist/plugins/pipelines/aws/scanfix/security-groups.js.map +1 -1
  73. package/dist/plugins/pipelines/aws/scanfix/ses.d.ts +1 -0
  74. package/dist/plugins/pipelines/aws/scanfix/ses.d.ts.map +1 -1
  75. package/dist/plugins/pipelines/aws/scanfix/ses.js +31 -53
  76. package/dist/plugins/pipelines/aws/scanfix/ses.js.map +1 -1
  77. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts +17 -0
  78. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts.map +1 -0
  79. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js +180 -0
  80. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js.map +1 -0
  81. package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts +1 -0
  82. package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts.map +1 -1
  83. package/dist/plugins/pipelines/aws/scanfix/vpc.js +97 -98
  84. package/dist/plugins/pipelines/aws/scanfix/vpc.js.map +1 -1
  85. package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts +101 -28
  86. package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts.map +1 -1
  87. package/dist/plugins/pipelines/aws/utils/aws-helpers.js +428 -76
  88. package/dist/plugins/pipelines/aws/utils/aws-helpers.js.map +1 -1
  89. package/dist/plugins/pipelines/factiii/index.d.ts +11 -1
  90. package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -1
  91. package/dist/plugins/pipelines/factiii/index.js +183 -33
  92. package/dist/plugins/pipelines/factiii/index.js.map +1 -1
  93. package/dist/plugins/pipelines/factiii/scanfix/ansible.js +1 -1
  94. package/dist/plugins/pipelines/factiii/scanfix/ansible.js.map +1 -1
  95. package/dist/plugins/pipelines/factiii/scanfix/bootstrap.js +6 -6
  96. package/dist/plugins/pipelines/factiii/scanfix/bootstrap.js.map +1 -1
  97. package/dist/plugins/pipelines/factiii/scanfix/config.d.ts +1 -1
  98. package/dist/plugins/pipelines/factiii/scanfix/config.js +4 -4
  99. package/dist/plugins/pipelines/factiii/scanfix/config.js.map +1 -1
  100. package/dist/plugins/pipelines/factiii/scanfix/env-files.js +7 -7
  101. package/dist/plugins/pipelines/factiii/scanfix/env-files.js.map +1 -1
  102. package/dist/plugins/pipelines/factiii/scanfix/github-cli.js +1 -1
  103. package/dist/plugins/pipelines/factiii/scanfix/github-cli.js.map +1 -1
  104. package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -1
  105. package/dist/plugins/pipelines/factiii/scanfix/secrets.js +73 -13
  106. package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -1
  107. package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts.map +1 -1
  108. package/dist/plugins/pipelines/factiii/scanfix/workflows.js +52 -4
  109. package/dist/plugins/pipelines/factiii/scanfix/workflows.js.map +1 -1
  110. package/dist/plugins/servers/mac/index.js +13 -13
  111. package/dist/plugins/servers/mac/scanfix/config.js +5 -5
  112. package/dist/plugins/servers/mac/scanfix/config.js.map +1 -1
  113. package/dist/plugins/servers/mac/scanfix/containers.js +1 -1
  114. package/dist/plugins/servers/mac/scanfix/containers.js.map +1 -1
  115. package/dist/plugins/servers/mac/scanfix/system.js +6 -6
  116. package/dist/plugins/servers/mac/scanfix/system.js.map +1 -1
  117. package/dist/plugins/servers/mac/staging.js +4 -4
  118. package/dist/plugins/servers/windows/index.js +2 -2
  119. package/dist/plugins/servers/windows/index.js.map +1 -1
  120. package/dist/scanfix/fixes/certbot.js +1 -1
  121. package/dist/scripts/validate-example-values.d.ts +1 -1
  122. package/dist/scripts/validate-example-values.js +6 -6
  123. package/dist/utils/config-helpers.d.ts +3 -0
  124. package/dist/utils/config-helpers.d.ts.map +1 -1
  125. package/dist/utils/config-helpers.js.map +1 -1
  126. package/dist/utils/secret-prompts.d.ts +5 -2
  127. package/dist/utils/secret-prompts.d.ts.map +1 -1
  128. package/dist/utils/secret-prompts.js +55 -32
  129. package/dist/utils/secret-prompts.js.map +1 -1
  130. package/dist/utils/template-generator.js +71 -71
  131. 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"}