@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,81 @@
1
+ import { existsSync } from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import { readConfig } from '../core/config-patcher.js';
4
+ import { listStates } from '../core/state-manager.js';
5
+ import { icons, header, label, table } from '../utils/output.js';
6
+ function computeStatus(state, configAgentIds) {
7
+ const agentsOk = Object.values(state.agents).every((a) => configAgentIds.has(a.id) && existsSync(a.workspace));
8
+ if (!agentsOk)
9
+ return 'degraded';
10
+ return 'healthy';
11
+ }
12
+ export async function list(options) {
13
+ const states = await listStates();
14
+ // Read config once to check agent presence
15
+ let configAgentIds = new Set();
16
+ try {
17
+ const { config } = await readConfig();
18
+ const agentsList = config.agents?.list ?? [];
19
+ configAgentIds = new Set(agentsList.map((a) => a.id));
20
+ }
21
+ catch {
22
+ // Config not readable — all statuses will be 'degraded'
23
+ }
24
+ if (options.json) {
25
+ const output = states.map((s) => ({
26
+ namespace: s.namespace,
27
+ name: s.name,
28
+ version: s.version,
29
+ agents: Object.keys(s.agents).length,
30
+ bindings: s.bindings.length,
31
+ cronJobs: s.cronJobs.length,
32
+ status: computeStatus(s, configAgentIds),
33
+ installedAt: s.installedAt,
34
+ }));
35
+ console.log(JSON.stringify(output, null, 2));
36
+ return;
37
+ }
38
+ if (states.length === 0) {
39
+ console.log(`${icons.info} No formations installed.`);
40
+ console.log('');
41
+ console.log(` ${label('Deploy one:')} reef install <path>`);
42
+ return;
43
+ }
44
+ console.log('');
45
+ console.log(header('Installed Formations'));
46
+ console.log('');
47
+ const rows = [
48
+ [
49
+ chalk.dim('NAMESPACE'),
50
+ chalk.dim('NAME'),
51
+ chalk.dim('VERSION'),
52
+ chalk.dim('AGENTS'),
53
+ chalk.dim('STATUS'),
54
+ chalk.dim('INSTALLED'),
55
+ ],
56
+ ];
57
+ for (const s of states) {
58
+ const date = new Date(s.installedAt);
59
+ const dateStr = date.toLocaleDateString('en-US', {
60
+ year: 'numeric',
61
+ month: 'short',
62
+ day: 'numeric',
63
+ });
64
+ const status = computeStatus(s, configAgentIds);
65
+ const statusText = status === 'healthy'
66
+ ? chalk.green('healthy')
67
+ : chalk.yellow('degraded');
68
+ rows.push([
69
+ s.namespace,
70
+ s.name,
71
+ s.version,
72
+ String(Object.keys(s.agents).length),
73
+ statusText,
74
+ dateStr,
75
+ ]);
76
+ }
77
+ console.log(table(rows));
78
+ console.log('');
79
+ console.log(` ${label('Details:')} reef status <namespace>/<name>`);
80
+ }
81
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface LogsOptions {
2
+ agent?: string;
3
+ lines?: number;
4
+ follow?: boolean;
5
+ path?: string;
6
+ }
7
+ export declare function logs(identifier: string, options: LogsOptions): Promise<void>;
8
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,IAAI,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAoGf"}
@@ -0,0 +1,118 @@
1
+ import { watch } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { existsSync } from 'node:fs';
5
+ import chalk from 'chalk';
6
+ import { discoverLogs, readAgentLogs, readLogTail } from '../core/log-reader.js';
7
+ import { icons, header } from '../utils/output.js';
8
+ import { resolveFormationState, FormationNotFoundError, AmbiguousFormationError, } from '../utils/identifiers.js';
9
+ export async function logs(identifier, options) {
10
+ // If --path is provided, read from that path directly
11
+ if (options.path) {
12
+ if (!existsSync(options.path)) {
13
+ console.error(`${icons.error} Log file not found: ${options.path}`);
14
+ process.exit(1);
15
+ }
16
+ const lines = await readLogTail(options.path, options.lines ?? 50);
17
+ for (const line of lines) {
18
+ console.log(line);
19
+ }
20
+ if (options.follow) {
21
+ await tailFollow(options.path);
22
+ }
23
+ return;
24
+ }
25
+ // Resolve formation
26
+ let state;
27
+ try {
28
+ state = await resolveFormationState(identifier);
29
+ }
30
+ catch (err) {
31
+ if (err instanceof FormationNotFoundError) {
32
+ console.error(`${icons.error} ${err.message}`);
33
+ process.exit(1);
34
+ }
35
+ if (err instanceof AmbiguousFormationError) {
36
+ console.error(`${icons.error} Multiple formations named "${err.message.split('"')[1]}" found:`);
37
+ for (const m of err.matches) {
38
+ console.error(` - ${m.namespace}/${m.name}`);
39
+ }
40
+ console.error(' Specify the full namespace/name.');
41
+ process.exit(1);
42
+ }
43
+ throw err;
44
+ }
45
+ // Filter agents
46
+ const agents = options.agent
47
+ ? Object.values(state.agents).filter((a) => a.slug === options.agent || a.id === options.agent)
48
+ : Object.values(state.agents);
49
+ if (agents.length === 0) {
50
+ console.error(`${icons.error} No agent found matching "${options.agent}" in formation.`);
51
+ process.exit(1);
52
+ }
53
+ let hasLogs = false;
54
+ for (const agent of agents) {
55
+ const entries = await readAgentLogs(agent.id, {
56
+ lines: options.lines ?? 50,
57
+ });
58
+ if (entries.length === 0)
59
+ continue;
60
+ hasLogs = true;
61
+ if (agents.length > 1) {
62
+ console.log('');
63
+ console.log(header(`Agent: ${agent.slug} (${agent.id})`));
64
+ }
65
+ for (const entry of entries) {
66
+ const ts = entry.timestamp
67
+ ? chalk.dim(`[${entry.timestamp}] `)
68
+ : '';
69
+ console.log(`${ts}${entry.line}`);
70
+ }
71
+ }
72
+ if (!hasLogs) {
73
+ console.log(`${icons.info} No logs found for formation "${state.namespace}/${state.name}".`);
74
+ console.log(' Session logs are stored at $STATE_DIR/agents/{agentId}/sessions/*.jsonl');
75
+ console.log(' Use --path to read from a specific log file.');
76
+ }
77
+ // Follow mode for single agent
78
+ if (options.follow && agents.length === 1) {
79
+ const discovery = await discoverLogs(agents[0].id);
80
+ if (discovery && discovery.logFiles.length > 0) {
81
+ const latestFile = join(discovery.sessionDir, discovery.logFiles[discovery.logFiles.length - 1]);
82
+ await tailFollow(latestFile);
83
+ }
84
+ }
85
+ }
86
+ async function tailFollow(filePath) {
87
+ console.log(chalk.dim('\n--- Following (Ctrl+C to stop) ---\n'));
88
+ let lastSize = 0;
89
+ try {
90
+ const { stat: fsStat } = await import('node:fs/promises');
91
+ const s = await fsStat(filePath);
92
+ lastSize = s.size;
93
+ }
94
+ catch {
95
+ // File may not exist yet
96
+ }
97
+ const watcher = watch(filePath, async () => {
98
+ try {
99
+ const content = await readFile(filePath, 'utf-8');
100
+ const newContent = content.slice(lastSize);
101
+ lastSize = content.length;
102
+ if (newContent.trim()) {
103
+ process.stdout.write(newContent);
104
+ }
105
+ }
106
+ catch {
107
+ // File may have been deleted
108
+ }
109
+ });
110
+ // Keep process alive
111
+ await new Promise(() => {
112
+ process.on('SIGINT', () => {
113
+ watcher.close();
114
+ process.exit(0);
115
+ });
116
+ });
117
+ }
118
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface RepairOptions {
2
+ source?: string;
3
+ yes?: boolean;
4
+ dryRun?: boolean;
5
+ gatewayUrl?: string;
6
+ gatewayToken?: string;
7
+ gatewayPassword?: string;
8
+ }
9
+ export declare function repair(identifier: string, options: RepairOptions): Promise<void>;
10
+ //# sourceMappingURL=repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../../src/commands/repair.ts"],"names":[],"mappings":"AAsDA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,MAAM,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Sf"}
@@ -0,0 +1,328 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import { resolveGatewayUrl } from '../core/openclaw-paths.js';
6
+ import { readConfig, writeConfig, addAgentEntry, addBinding, setAgentToAgent, } from '../core/config-patcher.js';
7
+ import { GatewayClient, resolveGatewayAuth } from '../core/gateway-client.js';
8
+ import { saveState, computeFileHash } from '../core/state-manager.js';
9
+ import { loadManifest } from '../core/manifest-loader.js';
10
+ import { interpolate } from '../core/template-interpolator.js';
11
+ import { listFiles } from '../utils/fs.js';
12
+ import { collectDiscrepancies } from '../core/state-differ.js';
13
+ import { icons, header, label, table } from '../utils/output.js';
14
+ import { resolveFormationState, FormationNotFoundError, AmbiguousFormationError, } from '../utils/identifiers.js';
15
+ const TOKEN_RE = /\{\{\w+\}\}/;
16
+ function isBinaryBuffer(buf) {
17
+ const check = buf.subarray(0, 8192);
18
+ return check.includes(0);
19
+ }
20
+ /**
21
+ * Build a safe variables map for interpolation during repair.
22
+ * State stores sensitive vars as "$NAME" placeholders — resolve those
23
+ * from process.env to avoid injecting literal placeholder strings.
24
+ */
25
+ function buildSafeVariables(stateVars) {
26
+ const safe = {};
27
+ for (const [name, val] of Object.entries(stateVars)) {
28
+ if (val.startsWith('$')) {
29
+ const envVal = process.env[val.slice(1)];
30
+ if (envVal !== undefined) {
31
+ safe[name] = envVal;
32
+ }
33
+ // If not in env, omit — template token stays as {{NAME}}
34
+ }
35
+ else {
36
+ safe[name] = val;
37
+ }
38
+ }
39
+ return safe;
40
+ }
41
+ export async function repair(identifier, options) {
42
+ // 1. Resolve formation state
43
+ let state;
44
+ try {
45
+ state = await resolveFormationState(identifier);
46
+ }
47
+ catch (err) {
48
+ if (err instanceof FormationNotFoundError) {
49
+ console.error(`${icons.error} ${err.message}`);
50
+ process.exit(1);
51
+ }
52
+ if (err instanceof AmbiguousFormationError) {
53
+ console.error(`${icons.error} Multiple formations named "${err.message.split('"')[1]}" found:`);
54
+ for (const m of err.matches) {
55
+ console.error(` - ${m.namespace}/${m.name}`);
56
+ }
57
+ console.error(' Specify the full namespace/name.');
58
+ process.exit(1);
59
+ }
60
+ throw err;
61
+ }
62
+ // 2. Read config
63
+ const { config, path: configPath } = await readConfig();
64
+ // 3. Try to get live cron jobs
65
+ let liveCronJobs = null;
66
+ if (state.cronJobs.length > 0) {
67
+ try {
68
+ const gwUrl = options.gatewayUrl ?? resolveGatewayUrl(config, process.env);
69
+ const gwAuth = resolveGatewayAuth({
70
+ gatewayUrl: options.gatewayUrl,
71
+ gatewayToken: options.gatewayToken,
72
+ gatewayPassword: options.gatewayPassword,
73
+ config,
74
+ });
75
+ const gw = new GatewayClient({
76
+ url: gwUrl,
77
+ ...gwAuth,
78
+ });
79
+ await gw.connect();
80
+ liveCronJobs = await gw.cronList({ includeDisabled: true });
81
+ gw.close();
82
+ }
83
+ catch {
84
+ console.log(`${icons.warning} ${chalk.yellow('Gateway not reachable — cannot verify cron jobs')}`);
85
+ }
86
+ }
87
+ // 4. Collect discrepancies
88
+ const discrepancies = collectDiscrepancies(state, config, liveCronJobs);
89
+ if (discrepancies.length === 0) {
90
+ console.log(`${icons.success} ${chalk.green('All resources healthy — nothing to repair')}`);
91
+ return;
92
+ }
93
+ // 5. Print discrepancy table
94
+ console.log('');
95
+ console.log(header('Discrepancies found'));
96
+ console.log('');
97
+ const rows = [
98
+ [chalk.dim('KIND'), chalk.dim('TYPE'), chalk.dim('DESCRIPTION'), chalk.dim('FIX')],
99
+ ];
100
+ for (const d of discrepancies) {
101
+ const fix = d.fixable
102
+ ? chalk.green('auto (from state)')
103
+ : d.needsSource
104
+ ? chalk.yellow('--source required')
105
+ : chalk.red('manual');
106
+ rows.push([d.kind, d.type, d.description, fix]);
107
+ }
108
+ console.log(table(rows));
109
+ // 6. Dry run
110
+ if (options.dryRun) {
111
+ console.log('');
112
+ console.log(label('Dry run — no changes applied.'));
113
+ return;
114
+ }
115
+ // 7. Confirm
116
+ if (!options.yes) {
117
+ console.log('');
118
+ const { confirm } = await import('@inquirer/prompts');
119
+ const ok = await confirm({
120
+ message: 'Repair these discrepancies?',
121
+ });
122
+ if (!ok) {
123
+ console.log('Aborted.');
124
+ process.exit(0);
125
+ }
126
+ }
127
+ // 8. Fix discrepancies
128
+ const spinner = ora('Repairing formation...').start();
129
+ let configModified = false;
130
+ let stateModified = false;
131
+ let fullyRepaired = 0;
132
+ let partiallyRepaired = 0;
133
+ let needsSource = 0;
134
+ let patchedConfig = config;
135
+ for (const d of discrepancies) {
136
+ if (d.kind === 'agent' && d.type === 'missing' && d.fixable) {
137
+ // Restore agent to config from state data
138
+ const agent = Object.values(state.agents).find((a) => a.id === d.agentId);
139
+ if (agent) {
140
+ patchedConfig = addAgentEntry(patchedConfig, {
141
+ id: agent.id,
142
+ name: agent.slug,
143
+ workspace: agent.workspace,
144
+ model: typeof agent.model === 'string' ? agent.model : undefined,
145
+ tools: agent.configTools,
146
+ sandbox: agent.configSandbox,
147
+ identity: agent.configIdentity,
148
+ skills: agent.configSkills,
149
+ });
150
+ configModified = true;
151
+ fullyRepaired++;
152
+ }
153
+ }
154
+ else if (d.kind === 'binding' && d.type === 'missing' && d.fixable) {
155
+ // Restore binding from state
156
+ const binding = state.bindings.find((b) => d.description.includes(b.match.channel) && d.description.includes(b.agentId));
157
+ if (binding) {
158
+ patchedConfig = addBinding(patchedConfig, binding);
159
+ configModified = true;
160
+ fullyRepaired++;
161
+ }
162
+ }
163
+ else if (d.kind === 'a2a' && d.type === 'missing' && d.fixable) {
164
+ patchedConfig = setAgentToAgent(patchedConfig, state.namespace);
165
+ configModified = true;
166
+ fullyRepaired++;
167
+ }
168
+ else if (d.kind === 'cron' && d.type === 'missing' && d.fixable) {
169
+ // Restore cron job from state
170
+ const job = state.cronJobs.find((j) => d.description.includes(j.id));
171
+ if (job && job.schedule && job.prompt) {
172
+ try {
173
+ const gwUrl = options.gatewayUrl ?? resolveGatewayUrl(patchedConfig, process.env);
174
+ const gwAuth = resolveGatewayAuth({
175
+ gatewayUrl: options.gatewayUrl,
176
+ gatewayToken: options.gatewayToken,
177
+ gatewayPassword: options.gatewayPassword,
178
+ config: patchedConfig,
179
+ });
180
+ const gw = new GatewayClient({
181
+ url: gwUrl,
182
+ ...gwAuth,
183
+ });
184
+ await gw.connect();
185
+ const agentId = Object.values(state.agents).find((a) => a.slug === job.agentSlug)?.id;
186
+ if (agentId) {
187
+ const result = await gw.cronAdd({
188
+ name: job.name,
189
+ agentId,
190
+ enabled: true,
191
+ schedule: {
192
+ kind: 'cron',
193
+ expr: job.schedule,
194
+ tz: job.timezone,
195
+ },
196
+ sessionTarget: 'isolated',
197
+ wakeMode: 'now',
198
+ payload: {
199
+ kind: 'agentTurn',
200
+ message: job.prompt,
201
+ },
202
+ });
203
+ // Update state with new cron ID
204
+ const stateJob = state.cronJobs.find((j) => j.id === job.id);
205
+ if (stateJob) {
206
+ stateJob.id = result.id;
207
+ stateModified = true;
208
+ }
209
+ fullyRepaired++;
210
+ }
211
+ gw.close();
212
+ }
213
+ catch {
214
+ spinner.warn(`Could not restore cron job ${job.name}`);
215
+ }
216
+ }
217
+ }
218
+ else if (d.kind === 'file' && d.needsSource) {
219
+ if (options.source) {
220
+ // Re-deploy files from source
221
+ const agent = Object.values(state.agents).find((a) => a.id === d.agentId);
222
+ if (agent) {
223
+ try {
224
+ const manifest = await loadManifest(options.source);
225
+ const agentDef = manifest.agents[agent.slug];
226
+ if (agentDef) {
227
+ const sourceDir = join(options.source, agentDef.source);
228
+ await mkdir(agent.workspace, { recursive: true });
229
+ const safeVars = buildSafeVariables(state.variables);
230
+ if (d.description.includes('Workspace')) {
231
+ // Re-deploy all files
232
+ const files = await listFiles(sourceDir);
233
+ for (const relativePath of files) {
234
+ const srcFile = join(sourceDir, relativePath);
235
+ const destPath = join(agent.workspace, relativePath);
236
+ await mkdir(dirname(destPath), { recursive: true });
237
+ const rawBytes = await readFile(srcFile);
238
+ if (isBinaryBuffer(rawBytes)) {
239
+ await writeFile(destPath, rawBytes);
240
+ state.fileHashes[`${agent.id}:${relativePath}`] =
241
+ computeFileHash(rawBytes);
242
+ }
243
+ else {
244
+ let content = rawBytes.toString('utf-8');
245
+ if (TOKEN_RE.test(content)) {
246
+ content = interpolate(content, safeVars);
247
+ }
248
+ const written = Buffer.from(content, 'utf-8');
249
+ await writeFile(destPath, written);
250
+ state.fileHashes[`${agent.id}:${relativePath}`] =
251
+ computeFileHash(written);
252
+ }
253
+ }
254
+ stateModified = true;
255
+ fullyRepaired++;
256
+ }
257
+ else {
258
+ // Re-deploy specific file
259
+ const fileMatch = d.description.match(/File (.+) (?:missing|changed) /);
260
+ if (fileMatch) {
261
+ const relativePath = fileMatch[1];
262
+ const srcFile = join(sourceDir, relativePath);
263
+ const destPath = join(agent.workspace, relativePath);
264
+ await mkdir(dirname(destPath), { recursive: true });
265
+ const rawBytes = await readFile(srcFile);
266
+ if (isBinaryBuffer(rawBytes)) {
267
+ await writeFile(destPath, rawBytes);
268
+ state.fileHashes[`${agent.id}:${relativePath}`] =
269
+ computeFileHash(rawBytes);
270
+ }
271
+ else {
272
+ let content = rawBytes.toString('utf-8');
273
+ if (TOKEN_RE.test(content)) {
274
+ content = interpolate(content, safeVars);
275
+ }
276
+ const written = Buffer.from(content, 'utf-8');
277
+ await writeFile(destPath, written);
278
+ state.fileHashes[`${agent.id}:${relativePath}`] =
279
+ computeFileHash(written);
280
+ }
281
+ stateModified = true;
282
+ fullyRepaired++;
283
+ }
284
+ }
285
+ }
286
+ }
287
+ catch {
288
+ // Source file may not match — partial fix
289
+ partiallyRepaired++;
290
+ }
291
+ }
292
+ }
293
+ else if (d.description.includes('Workspace')) {
294
+ // Partial fix: create the directory so subsequent --source can fill it
295
+ const agent = Object.values(state.agents).find((a) => a.id === d.agentId);
296
+ if (agent) {
297
+ await mkdir(agent.workspace, { recursive: true });
298
+ partiallyRepaired++;
299
+ }
300
+ }
301
+ else {
302
+ needsSource++;
303
+ }
304
+ }
305
+ else if (!d.fixable) {
306
+ needsSource++;
307
+ }
308
+ }
309
+ // 9. Write config if modified
310
+ if (configModified) {
311
+ await writeConfig(configPath, patchedConfig, { silent: true });
312
+ }
313
+ // 10. Save state if modified
314
+ if (stateModified) {
315
+ await saveState(state);
316
+ }
317
+ spinner.succeed('Repair complete');
318
+ console.log('');
319
+ const parts = [];
320
+ if (fullyRepaired > 0)
321
+ parts.push(`${fullyRepaired} fully repaired`);
322
+ if (partiallyRepaired > 0)
323
+ parts.push(`${partiallyRepaired} partially repaired`);
324
+ if (needsSource > 0)
325
+ parts.push(`${needsSource} require --source`);
326
+ console.log(`${icons.success} ${chalk.green(parts.join('. ') + '.')}`);
327
+ }
328
+ //# sourceMappingURL=repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.js","sourceRoot":"","sources":["../../src/commands/repair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface StatusOptions {
2
+ json?: boolean;
3
+ gatewayUrl?: string;
4
+ gatewayToken?: string;
5
+ gatewayPassword?: string;
6
+ }
7
+ export declare function status(identifier: string, options: StatusOptions): Promise<void>;
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,MAAM,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAgNf"}