@openreef/cli 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +14 -7
  2. package/dist/commands/install.d.ts +14 -0
  3. package/dist/commands/install.d.ts.map +1 -0
  4. package/dist/commands/install.js +612 -0
  5. package/dist/commands/install.js.map +1 -0
  6. package/dist/commands/list.d.ts +5 -0
  7. package/dist/commands/list.d.ts.map +1 -0
  8. package/dist/commands/list.js +81 -0
  9. package/dist/commands/list.js.map +1 -0
  10. package/dist/commands/logs.d.ts +8 -0
  11. package/dist/commands/logs.d.ts.map +1 -0
  12. package/dist/commands/logs.js +118 -0
  13. package/dist/commands/logs.js.map +1 -0
  14. package/dist/commands/repair.d.ts +10 -0
  15. package/dist/commands/repair.d.ts.map +1 -0
  16. package/dist/commands/repair.js +328 -0
  17. package/dist/commands/repair.js.map +1 -0
  18. package/dist/commands/status.d.ts +8 -0
  19. package/dist/commands/status.d.ts.map +1 -0
  20. package/dist/commands/status.js +181 -0
  21. package/dist/commands/status.js.map +1 -0
  22. package/dist/commands/uninstall.d.ts +9 -0
  23. package/dist/commands/uninstall.d.ts.map +1 -0
  24. package/dist/commands/uninstall.js +166 -0
  25. package/dist/commands/uninstall.js.map +1 -0
  26. package/dist/commands/update.d.ts +12 -0
  27. package/dist/commands/update.d.ts.map +1 -0
  28. package/dist/commands/update.js +518 -0
  29. package/dist/commands/update.js.map +1 -0
  30. package/dist/core/agents-md-generator.d.ts +3 -0
  31. package/dist/core/agents-md-generator.d.ts.map +1 -0
  32. package/dist/core/agents-md-generator.js +24 -0
  33. package/dist/core/agents-md-generator.js.map +1 -0
  34. package/dist/core/config-patcher.d.ts +32 -0
  35. package/dist/core/config-patcher.d.ts.map +1 -0
  36. package/dist/core/config-patcher.js +156 -0
  37. package/dist/core/config-patcher.js.map +1 -0
  38. package/dist/core/device-identity.d.ts +37 -0
  39. package/dist/core/device-identity.d.ts.map +1 -0
  40. package/dist/core/device-identity.js +135 -0
  41. package/dist/core/device-identity.js.map +1 -0
  42. package/dist/core/gateway-client.d.ts +98 -0
  43. package/dist/core/gateway-client.d.ts.map +1 -0
  44. package/dist/core/gateway-client.js +238 -0
  45. package/dist/core/gateway-client.js.map +1 -0
  46. package/dist/core/log-reader.d.ts +28 -0
  47. package/dist/core/log-reader.d.ts.map +1 -0
  48. package/dist/core/log-reader.js +69 -0
  49. package/dist/core/log-reader.js.map +1 -0
  50. package/dist/core/migration-planner.d.ts +37 -0
  51. package/dist/core/migration-planner.d.ts.map +1 -0
  52. package/dist/core/migration-planner.js +160 -0
  53. package/dist/core/migration-planner.js.map +1 -0
  54. package/dist/core/openclaw-paths.d.ts +23 -0
  55. package/dist/core/openclaw-paths.d.ts.map +1 -0
  56. package/dist/core/openclaw-paths.js +189 -0
  57. package/dist/core/openclaw-paths.js.map +1 -0
  58. package/dist/core/state-differ.d.ts +15 -0
  59. package/dist/core/state-differ.d.ts.map +1 -0
  60. package/dist/core/state-differ.js +135 -0
  61. package/dist/core/state-differ.js.map +1 -0
  62. package/dist/core/state-manager.d.ts +7 -0
  63. package/dist/core/state-manager.d.ts.map +1 -0
  64. package/dist/core/state-manager.js +61 -0
  65. package/dist/core/state-manager.js.map +1 -0
  66. package/dist/core/variable-resolver.d.ts +1 -0
  67. package/dist/core/variable-resolver.d.ts.map +1 -1
  68. package/dist/core/variable-resolver.js +21 -10
  69. package/dist/core/variable-resolver.js.map +1 -1
  70. package/dist/index.js +133 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/types/state.d.ts +55 -0
  73. package/dist/types/state.d.ts.map +1 -0
  74. package/dist/types/state.js +2 -0
  75. package/dist/types/state.js.map +1 -0
  76. package/dist/utils/identifiers.d.ts +18 -0
  77. package/dist/utils/identifiers.d.ts.map +1 -0
  78. package/dist/utils/identifiers.js +50 -0
  79. package/dist/utils/identifiers.js.map +1 -0
  80. package/package.json +6 -3
  81. package/template/reef.json +6 -6
@@ -0,0 +1,612 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import { loadManifest } from '../core/manifest-loader.js';
6
+ import { validateSchema } from '../core/schema-validator.js';
7
+ import { validateStructure } from '../core/structural-validator.js';
8
+ import { resolveVariables } from '../core/variable-resolver.js';
9
+ import { interpolate } from '../core/template-interpolator.js';
10
+ import { resolveWorkspacePath, resolveGatewayUrl, validateAgentIds, } from '../core/openclaw-paths.js';
11
+ import { readConfig, writeConfig, addAgentEntry, removeAgentEntry, addBinding, removeBinding, setAgentToAgent, removeAgentToAgent, } from '../core/config-patcher.js';
12
+ import { GatewayClient, resolveGatewayAuth } from '../core/gateway-client.js';
13
+ import { loadState, saveState, deleteState, listStates, computeFileHash, } from '../core/state-manager.js';
14
+ import { generateAgentsMd } from '../core/agents-md-generator.js';
15
+ import { listFiles } from '../utils/fs.js';
16
+ import { icons, header, label, value, table } from '../utils/output.js';
17
+ const TOKEN_RE = /\{\{\w+\}\}/;
18
+ function isBinaryBuffer(buf) {
19
+ const check = buf.subarray(0, 8192);
20
+ return check.includes(0);
21
+ }
22
+ function parseSets(sets) {
23
+ const result = {};
24
+ if (!sets)
25
+ return result;
26
+ for (const s of sets) {
27
+ const eq = s.indexOf('=');
28
+ if (eq === -1)
29
+ continue;
30
+ result[s.slice(0, eq)] = s.slice(eq + 1);
31
+ }
32
+ return result;
33
+ }
34
+ export async function install(formationPath, options) {
35
+ // ── Phase 1: Parse + Validate IDs ──
36
+ const spinner = ora('Loading formation...').start();
37
+ let manifest;
38
+ try {
39
+ manifest = await loadManifest(formationPath);
40
+ }
41
+ catch (err) {
42
+ spinner.fail('Failed to load formation');
43
+ throw err;
44
+ }
45
+ const schemaResult = await validateSchema(manifest);
46
+ if (!schemaResult.valid) {
47
+ spinner.fail('Schema validation failed');
48
+ for (const issue of schemaResult.issues) {
49
+ console.error(` ${icons.error} ${issue.message}`);
50
+ }
51
+ process.exit(1);
52
+ }
53
+ const structResult = await validateStructure(manifest, formationPath);
54
+ if (!structResult.valid) {
55
+ spinner.fail('Structural validation failed');
56
+ for (const issue of structResult.issues) {
57
+ if (issue.severity === 'error') {
58
+ console.error(` ${icons.error} ${issue.message}`);
59
+ }
60
+ }
61
+ process.exit(1);
62
+ }
63
+ const namespace = options.namespace ?? manifest.namespace;
64
+ const slugs = Object.keys(manifest.agents);
65
+ const idValidation = validateAgentIds(slugs, namespace);
66
+ if (!idValidation.valid) {
67
+ spinner.fail('Agent ID validation failed');
68
+ for (const error of idValidation.errors) {
69
+ console.error(` ${icons.error} ${error}`);
70
+ }
71
+ process.exit(1);
72
+ }
73
+ spinner.succeed('Formation loaded and validated');
74
+ // ── Phase 2: Variables ──
75
+ const { resolved: resolvedVars, missing } = await resolveVariables(manifest.variables ?? {}, formationPath, {
76
+ interactive: !options.yes,
77
+ cliOverrides: parseSets(options.set),
78
+ noEnv: options.noEnv,
79
+ });
80
+ if (missing.length > 0) {
81
+ console.error(`${icons.error} Missing required variables: ${missing.join(', ')}`);
82
+ console.error(' Use --set KEY=VALUE or set them in .env / environment.');
83
+ process.exit(1);
84
+ }
85
+ // ── Phase 3: Conflicts ──
86
+ const { config, path: configPath } = await readConfig();
87
+ const existingState = await loadState(namespace, manifest.name);
88
+ // DRY-RUN: report conflicts and planned changes, then exit cleanly
89
+ if (options.dryRun) {
90
+ console.log('');
91
+ console.log(header('Dry Run — No changes will be made'));
92
+ console.log('');
93
+ // Report conflicts informationally
94
+ if (existingState && !options.force && !options.merge) {
95
+ console.log(`${icons.warning} Conflict: Formation "${namespace}/${manifest.name}" is already installed.`);
96
+ console.log(' With --force: would remove existing installation first.');
97
+ console.log(' With --merge: would update in-place.');
98
+ console.log('');
99
+ }
100
+ // Show what --force would do
101
+ if (options.force && existingState) {
102
+ console.log('Would first remove existing installation:');
103
+ for (const agent of Object.values(existingState.agents)) {
104
+ console.log(` - Agent ${agent.id} from config`);
105
+ console.log(` - Workspace ${agent.workspace}`);
106
+ }
107
+ for (const binding of existingState.bindings) {
108
+ console.log(` - Binding ${binding.match.channel} → ${binding.agentId}`);
109
+ }
110
+ for (const job of existingState.cronJobs) {
111
+ console.log(` - Cron job ${job.name} (${job.id})`);
112
+ }
113
+ console.log(` - State file ${existingState.namespace}/${existingState.name}`);
114
+ console.log('');
115
+ console.log('Then deploy fresh:');
116
+ }
117
+ else {
118
+ console.log('Would deploy:');
119
+ }
120
+ // Show deploy plan
121
+ console.log(` ${label('Formation:')} ${value(`${namespace}/${manifest.name}`)} v${manifest.version}`);
122
+ for (const [slug, agentDef] of Object.entries(manifest.agents)) {
123
+ const agentId = idValidation.ids.get(slug);
124
+ console.log(` + Agent ${slug} → ${agentId}${agentDef.model ? ` (model: ${agentDef.model})` : ''}`);
125
+ }
126
+ for (const binding of manifest.bindings ?? []) {
127
+ const resolvedAgentId = idValidation.ids.get(binding.agent);
128
+ if (resolvedAgentId) {
129
+ console.log(` + Binding ${binding.channel} → ${resolvedAgentId}`);
130
+ }
131
+ }
132
+ for (const cronEntry of manifest.cron ?? []) {
133
+ console.log(` + Cron ${cronEntry.schedule} → ${namespace}-${cronEntry.agent}`);
134
+ }
135
+ console.log(` + State file ${namespace}/${manifest.name} v${manifest.version}`);
136
+ return;
137
+ }
138
+ if (existingState && !options.force && !options.merge) {
139
+ console.error(`${icons.error} Formation "${namespace}/${manifest.name}" is already installed.`);
140
+ console.error(' Use --force to replace or --merge to update.');
141
+ process.exit(1);
142
+ }
143
+ // Check for agent ID conflicts in config (from other formations)
144
+ if (!options.force && !options.merge) {
145
+ const agentsList = config.agents?.list ?? [];
146
+ const conflicting = agentsList.filter((a) => {
147
+ const id = a.id;
148
+ return id.startsWith(`${namespace}-`) && idValidation.ids.has(slugs.find((s) => `${namespace}-${s}` === id) ?? '');
149
+ });
150
+ if (conflicting.length > 0) {
151
+ console.error(`${icons.error} Config already contains agents with matching IDs:`);
152
+ for (const a of conflicting) {
153
+ console.error(` - ${a.id}`);
154
+ }
155
+ console.error(' Use --force to replace.');
156
+ process.exit(1);
157
+ }
158
+ }
159
+ // --force cleanup
160
+ if (options.force && existingState) {
161
+ if (!options.yes) {
162
+ const { confirm } = await import('@inquirer/prompts');
163
+ const ok = await confirm({
164
+ message: `This will remove the existing installation of "${namespace}/${manifest.name}". Continue?`,
165
+ });
166
+ if (!ok) {
167
+ console.log('Aborted.');
168
+ process.exit(0);
169
+ }
170
+ }
171
+ const cleanupSpinner = ora('Cleaning up existing installation...').start();
172
+ // Remove cron jobs via RPC
173
+ if (existingState.cronJobs.length > 0) {
174
+ try {
175
+ const gwUrl = options.gatewayUrl ?? resolveGatewayUrl(config, process.env);
176
+ const gwAuth = resolveGatewayAuth({
177
+ gatewayUrl: options.gatewayUrl,
178
+ gatewayToken: options.gatewayToken,
179
+ gatewayPassword: options.gatewayPassword,
180
+ config,
181
+ });
182
+ const gw = new GatewayClient({
183
+ url: gwUrl,
184
+ ...gwAuth,
185
+ });
186
+ await gw.connect();
187
+ for (const job of existingState.cronJobs) {
188
+ try {
189
+ await gw.cronRemove(job.id);
190
+ }
191
+ catch {
192
+ // Job may already be gone
193
+ }
194
+ }
195
+ gw.close();
196
+ }
197
+ catch {
198
+ cleanupSpinner.warn('Could not connect to Gateway for cron cleanup — jobs may be orphaned');
199
+ }
200
+ }
201
+ // Remove from config
202
+ let cleanConfig = config;
203
+ for (const agent of Object.values(existingState.agents)) {
204
+ cleanConfig = removeAgentEntry(cleanConfig, agent.id);
205
+ }
206
+ for (const binding of existingState.bindings) {
207
+ cleanConfig = removeBinding(cleanConfig, binding);
208
+ }
209
+ // Remove agentToAgent allow entry
210
+ if (existingState.agentToAgent?.allowAdded) {
211
+ const allStates = await listStates();
212
+ const otherInNamespace = allStates.some((s) => s.namespace === namespace &&
213
+ s.name !== existingState.name);
214
+ cleanConfig = removeAgentToAgent(cleanConfig, namespace, otherInNamespace, existingState.agentToAgent.wasEnabled);
215
+ }
216
+ await writeConfig(configPath, cleanConfig, { silent: true });
217
+ // Delete workspaces
218
+ const { rm } = await import('node:fs/promises');
219
+ for (const agent of Object.values(existingState.agents)) {
220
+ try {
221
+ await rm(agent.workspace, { recursive: true, force: true });
222
+ }
223
+ catch {
224
+ // Already gone
225
+ }
226
+ }
227
+ await deleteState(namespace, manifest.name);
228
+ cleanupSpinner.succeed('Cleaned up existing installation');
229
+ }
230
+ // ── Phase 4: Dependencies ──
231
+ if (manifest.dependencies?.skills) {
232
+ const skills = Object.keys(manifest.dependencies.skills);
233
+ if (skills.length > 0) {
234
+ console.log(`${icons.warning} ${chalk.yellow('Skills not yet installed (ClawHub integration planned):')} ${skills.join(', ')}`);
235
+ }
236
+ }
237
+ if (manifest.dependencies?.services?.length) {
238
+ const unconfigured = manifest.dependencies.services.filter((s) => s.required);
239
+ if (unconfigured.length > 0) {
240
+ console.log(`${icons.warning} ${chalk.yellow('Required services — ensure they are configured:')} ${unconfigured.map((s) => s.name).join(', ')}`);
241
+ }
242
+ }
243
+ // ── Phase 5: Confirm ──
244
+ if (!options.yes && !options.merge) {
245
+ console.log('');
246
+ console.log(header('Deployment Plan'));
247
+ console.log('');
248
+ console.log(`${label('Formation:')} ${value(`${namespace}/${manifest.name}`)} v${manifest.version}`);
249
+ console.log('');
250
+ // Agents
251
+ console.log(label('Agents:'));
252
+ const agentRows = [];
253
+ for (const [slug] of Object.entries(manifest.agents)) {
254
+ agentRows.push([
255
+ ` ${slug}`,
256
+ `→ ${idValidation.ids.get(slug)}`,
257
+ ]);
258
+ }
259
+ console.log(table(agentRows));
260
+ // Bindings
261
+ if (manifest.bindings?.length) {
262
+ console.log('');
263
+ console.log(label('Channel Bindings:'));
264
+ for (const b of manifest.bindings) {
265
+ console.log(` ${b.channel} → ${namespace}-${b.agent}`);
266
+ }
267
+ }
268
+ // Cron
269
+ if (manifest.cron?.length) {
270
+ console.log('');
271
+ console.log(label('Cron Jobs:'));
272
+ for (const c of manifest.cron) {
273
+ console.log(` ${c.schedule} → ${namespace}-${c.agent}: "${c.prompt.slice(0, 60)}${c.prompt.length > 60 ? '...' : ''}"`);
274
+ }
275
+ }
276
+ // Variables
277
+ if (manifest.variables && Object.keys(manifest.variables).length > 0) {
278
+ console.log('');
279
+ console.log(label('Variables:'));
280
+ for (const [name, config] of Object.entries(manifest.variables)) {
281
+ const val = config.sensitive
282
+ ? '********'
283
+ : (resolvedVars[name] ?? '(not set)');
284
+ console.log(` ${name} = ${val}`);
285
+ }
286
+ }
287
+ console.log('');
288
+ const { confirm } = await import('@inquirer/prompts');
289
+ const proceed = await confirm({ message: 'Deploy this formation?' });
290
+ if (!proceed) {
291
+ console.log('Aborted.');
292
+ process.exit(0);
293
+ }
294
+ }
295
+ // ── Phase 6: Deploy ──
296
+ const deploySpinner = ora('Deploying formation...').start();
297
+ const agentStates = {};
298
+ const fileHashes = {};
299
+ const cronJobStates = [];
300
+ const openClawBindings = [];
301
+ // Deploy workspace files
302
+ deploySpinner.text = 'Writing workspace files...';
303
+ for (const [slug, agentDef] of Object.entries(manifest.agents)) {
304
+ const agentId = idValidation.ids.get(slug);
305
+ const workspacePath = resolveWorkspacePath(agentId);
306
+ await mkdir(workspacePath, { recursive: true });
307
+ const sourceDir = join(formationPath, agentDef.source);
308
+ const files = await listFiles(sourceDir);
309
+ const deployedFiles = [];
310
+ for (const relativePath of files) {
311
+ const srcFile = join(sourceDir, relativePath);
312
+ const destPath = join(workspacePath, relativePath);
313
+ await mkdir(dirname(destPath), { recursive: true });
314
+ const rawBytes = await readFile(srcFile);
315
+ if (isBinaryBuffer(rawBytes)) {
316
+ // --merge: skip unchanged files
317
+ if (options.merge && existingState) {
318
+ const hash = computeFileHash(rawBytes);
319
+ const existingHash = existingState.fileHashes[`${agentId}:${relativePath}`];
320
+ if (existingHash === hash) {
321
+ deployedFiles.push(relativePath);
322
+ fileHashes[`${agentId}:${relativePath}`] = hash;
323
+ continue;
324
+ }
325
+ }
326
+ await writeFile(destPath, rawBytes);
327
+ fileHashes[`${agentId}:${relativePath}`] = computeFileHash(rawBytes);
328
+ deployedFiles.push(relativePath);
329
+ continue;
330
+ }
331
+ let content = rawBytes.toString('utf-8');
332
+ if (TOKEN_RE.test(content)) {
333
+ content = interpolate(content, resolvedVars);
334
+ }
335
+ const written = Buffer.from(content, 'utf-8');
336
+ // --merge: skip unchanged files
337
+ if (options.merge && existingState) {
338
+ const hash = computeFileHash(written);
339
+ const existingHash = existingState.fileHashes[`${agentId}:${relativePath}`];
340
+ if (existingHash === hash) {
341
+ deployedFiles.push(relativePath);
342
+ fileHashes[`${agentId}:${relativePath}`] = hash;
343
+ continue;
344
+ }
345
+ }
346
+ await writeFile(destPath, written);
347
+ fileHashes[`${agentId}:${relativePath}`] = computeFileHash(written);
348
+ deployedFiles.push(relativePath);
349
+ }
350
+ // Generate AGENTS.md
351
+ if (manifest.agentToAgent?.[slug]?.length) {
352
+ const agentsMd = generateAgentsMd(manifest, slug, namespace);
353
+ const buf = Buffer.from(agentsMd, 'utf-8');
354
+ await writeFile(join(workspacePath, 'AGENTS.md'), buf);
355
+ fileHashes[`${agentId}:AGENTS.md`] = computeFileHash(buf);
356
+ deployedFiles.push('AGENTS.md');
357
+ }
358
+ agentStates[slug] = {
359
+ id: agentId,
360
+ slug,
361
+ workspace: workspacePath,
362
+ files: deployedFiles,
363
+ model: agentDef.model,
364
+ };
365
+ }
366
+ // Patch config
367
+ deploySpinner.text = 'Patching OpenClaw config...';
368
+ let patchedConfig = (await readConfig(configPath)).config;
369
+ for (const [slug, agentDef] of Object.entries(manifest.agents)) {
370
+ const agentId = idValidation.ids.get(slug);
371
+ patchedConfig = addAgentEntry(patchedConfig, {
372
+ id: agentId,
373
+ name: slug,
374
+ workspace: resolveWorkspacePath(agentId),
375
+ model: agentDef.model,
376
+ });
377
+ }
378
+ // Map bindings — use validated IDs from the map, not raw string composition
379
+ for (const binding of manifest.bindings ?? []) {
380
+ if (binding.direction) {
381
+ console.log(`\n${icons.warning} ${chalk.yellow(`'direction' field in binding ${binding.channel} → ${binding.agent} is ignored (OpenClaw bindings are always inbound)`)}`);
382
+ }
383
+ const resolvedAgentId = idValidation.ids.get(binding.agent);
384
+ if (!resolvedAgentId) {
385
+ console.log(`\n${icons.warning} ${chalk.yellow(`Binding references unknown agent "${binding.agent}" — skipped`)}`);
386
+ continue;
387
+ }
388
+ const openClawBinding = {
389
+ agentId: resolvedAgentId,
390
+ match: { channel: binding.channel },
391
+ };
392
+ patchedConfig = addBinding(patchedConfig, openClawBinding);
393
+ openClawBindings.push(openClawBinding);
394
+ }
395
+ // Agent-to-agent messaging
396
+ const a2aState = { wasEnabled: false, allowAdded: false };
397
+ if (manifest.agentToAgent &&
398
+ Object.keys(manifest.agentToAgent).length > 0) {
399
+ const tools = patchedConfig.tools;
400
+ const a2a = tools?.agentToAgent;
401
+ a2aState.wasEnabled = a2a?.enabled === true;
402
+ patchedConfig = setAgentToAgent(patchedConfig, namespace);
403
+ a2aState.allowAdded = true;
404
+ }
405
+ await writeConfig(configPath, patchedConfig, { silent: options.merge });
406
+ // Cron jobs via Gateway RPC
407
+ if (manifest.cron?.length) {
408
+ deploySpinner.text = 'Creating cron jobs...';
409
+ const gwUrl = options.gatewayUrl ?? resolveGatewayUrl(patchedConfig, process.env);
410
+ const gwAuth = resolveGatewayAuth({
411
+ gatewayUrl: options.gatewayUrl,
412
+ gatewayToken: options.gatewayToken,
413
+ gatewayPassword: options.gatewayPassword,
414
+ config: patchedConfig,
415
+ });
416
+ const gw = new GatewayClient({
417
+ url: gwUrl,
418
+ ...gwAuth,
419
+ });
420
+ try {
421
+ await gw.connect();
422
+ if (options.merge && existingState) {
423
+ // --merge: update existing cron jobs, add new ones
424
+ const existingJobs = await gw.cronList({ includeDisabled: true });
425
+ const existingByName = new Map(existingJobs.map((j) => [j.name, j]));
426
+ for (const [i, cronEntry] of manifest.cron.entries()) {
427
+ const jobName = `reef:${namespace}:${cronEntry.agent}-${i}`;
428
+ const existing = existingByName.get(jobName);
429
+ if (existing) {
430
+ // Update in-place
431
+ await gw.cronUpdate(existing.id, {
432
+ schedule: {
433
+ kind: 'cron',
434
+ expr: cronEntry.schedule,
435
+ tz: cronEntry.timezone,
436
+ },
437
+ payload: {
438
+ kind: 'agentTurn',
439
+ message: cronEntry.prompt,
440
+ },
441
+ agentId: idValidation.ids.get(cronEntry.agent),
442
+ enabled: true,
443
+ });
444
+ cronJobStates.push({
445
+ id: existing.id,
446
+ name: jobName,
447
+ agentSlug: cronEntry.agent,
448
+ schedule: cronEntry.schedule,
449
+ timezone: cronEntry.timezone,
450
+ prompt: cronEntry.prompt,
451
+ });
452
+ }
453
+ else {
454
+ // Add new
455
+ const result = await gw.cronAdd({
456
+ name: jobName,
457
+ agentId: idValidation.ids.get(cronEntry.agent),
458
+ enabled: true,
459
+ schedule: {
460
+ kind: 'cron',
461
+ expr: cronEntry.schedule,
462
+ tz: cronEntry.timezone,
463
+ },
464
+ sessionTarget: 'isolated',
465
+ wakeMode: 'now',
466
+ payload: {
467
+ kind: 'agentTurn',
468
+ message: cronEntry.prompt,
469
+ },
470
+ });
471
+ cronJobStates.push({
472
+ id: result.id,
473
+ name: jobName,
474
+ agentSlug: cronEntry.agent,
475
+ schedule: cronEntry.schedule,
476
+ timezone: cronEntry.timezone,
477
+ prompt: cronEntry.prompt,
478
+ });
479
+ }
480
+ }
481
+ }
482
+ else {
483
+ // Fresh install
484
+ for (const [i, cronEntry] of manifest.cron.entries()) {
485
+ const jobName = `reef:${namespace}:${cronEntry.agent}-${i}`;
486
+ const cronAgentId = idValidation.ids.get(cronEntry.agent);
487
+ if (!cronAgentId) {
488
+ console.log(`\n${icons.warning} ${chalk.yellow(`Cron job references unknown agent "${cronEntry.agent}" — skipped`)}`);
489
+ continue;
490
+ }
491
+ const result = await gw.cronAdd({
492
+ name: jobName,
493
+ agentId: cronAgentId,
494
+ enabled: true,
495
+ schedule: {
496
+ kind: 'cron',
497
+ expr: cronEntry.schedule,
498
+ tz: cronEntry.timezone,
499
+ },
500
+ sessionTarget: 'isolated',
501
+ wakeMode: 'now',
502
+ payload: {
503
+ kind: 'agentTurn',
504
+ message: cronEntry.prompt,
505
+ },
506
+ });
507
+ cronJobStates.push({
508
+ id: result.id,
509
+ name: jobName,
510
+ agentSlug: cronEntry.agent,
511
+ schedule: cronEntry.schedule,
512
+ timezone: cronEntry.timezone,
513
+ prompt: cronEntry.prompt,
514
+ });
515
+ }
516
+ }
517
+ }
518
+ catch (err) {
519
+ deploySpinner.fail('Failed to create cron jobs');
520
+ console.error(`${icons.error} Gateway error: ${err instanceof Error ? err.message : err}`);
521
+ console.error(' Ensure OpenClaw Gateway is running. Config and workspace files were deployed successfully.');
522
+ // Still save state for what we deployed
523
+ }
524
+ finally {
525
+ gw.close();
526
+ }
527
+ }
528
+ // ── Phase 7: Validate ──
529
+ deploySpinner.text = 'Validating deployment...';
530
+ const finalConfig = (await readConfig(configPath)).config;
531
+ const agentsList = finalConfig.agents?.list ?? [];
532
+ // agent_exists: check agents in config
533
+ for (const [slug] of Object.entries(manifest.agents)) {
534
+ const agentId = idValidation.ids.get(slug);
535
+ const found = agentsList.some((a) => a.id === agentId);
536
+ if (!found) {
537
+ console.log(`\n${icons.warning} Agent "${agentId}" not found in config after deploy`);
538
+ }
539
+ }
540
+ // binding_active: check bindings in config
541
+ const finalBindings = (finalConfig.bindings ?? []);
542
+ for (const binding of openClawBindings) {
543
+ const found = finalBindings.some((b) => {
544
+ const match = b.match;
545
+ return b.agentId === binding.agentId && match?.channel === binding.match.channel;
546
+ });
547
+ if (!found) {
548
+ console.log(`\n${icons.warning} Binding ${binding.match.channel} → ${binding.agentId} not found in config after deploy`);
549
+ }
550
+ }
551
+ // cron_exists: verify cron jobs via Gateway (if we created any and Gateway is reachable)
552
+ if (cronJobStates.length > 0) {
553
+ try {
554
+ const gwUrl = options.gatewayUrl ?? resolveGatewayUrl(patchedConfig, process.env);
555
+ const gwAuth = resolveGatewayAuth({
556
+ gatewayUrl: options.gatewayUrl,
557
+ gatewayToken: options.gatewayToken,
558
+ gatewayPassword: options.gatewayPassword,
559
+ config: patchedConfig,
560
+ });
561
+ const verifyGw = new GatewayClient({
562
+ url: gwUrl,
563
+ ...gwAuth,
564
+ });
565
+ await verifyGw.connect();
566
+ const liveJobs = await verifyGw.cronList({ includeDisabled: true });
567
+ verifyGw.close();
568
+ const liveIds = new Set(liveJobs.map((j) => j.id));
569
+ for (const job of cronJobStates) {
570
+ if (!liveIds.has(job.id)) {
571
+ console.log(`\n${icons.warning} Cron job "${job.name}" (${job.id}) not found on Gateway after deploy`);
572
+ }
573
+ }
574
+ }
575
+ catch {
576
+ // Gateway not reachable for verification — skip
577
+ }
578
+ }
579
+ // ── Phase 8: State ──
580
+ const variablesForState = {};
581
+ for (const [name, config] of Object.entries(manifest.variables ?? {})) {
582
+ if (config.sensitive) {
583
+ // Store as env var reference, not the secret value
584
+ variablesForState[name] = `$${name}`;
585
+ }
586
+ else {
587
+ variablesForState[name] = resolvedVars[name] ?? '';
588
+ }
589
+ }
590
+ const state = {
591
+ name: manifest.name,
592
+ version: manifest.version,
593
+ namespace,
594
+ installedAt: new Date().toISOString(),
595
+ agents: agentStates,
596
+ bindings: openClawBindings,
597
+ cronJobs: cronJobStates,
598
+ variables: variablesForState,
599
+ fileHashes,
600
+ agentToAgent: a2aState.allowAdded ? a2aState : undefined,
601
+ sourcePath: formationPath,
602
+ agentToAgentEdges: manifest.agentToAgent ?? undefined,
603
+ };
604
+ await saveState(state);
605
+ deploySpinner.succeed('Formation deployed');
606
+ console.log('');
607
+ console.log(`${icons.success} ${chalk.green(`${Object.keys(agentStates).length} agents deployed, ${openClawBindings.length} bindings wired, ${cronJobStates.length} cron jobs scheduled`)}`);
608
+ console.log('');
609
+ console.log(` ${label('Manage:')} reef status ${namespace}/${manifest.name}`);
610
+ console.log(` ${label('Remove:')} reef uninstall ${namespace}/${manifest.name}`);
611
+ }
612
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface ListOptions {
2
+ json?: boolean;
3
+ }
4
+ export declare function list(options: ListOptions): Promise<void>;
5
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAaD,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF9D"}