@openreef/cli 0.2.0 → 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 (54) hide show
  1. package/README.md +3 -3
  2. package/dist/commands/install.d.ts +1 -0
  3. package/dist/commands/install.d.ts.map +1 -1
  4. package/dist/commands/install.js +62 -10
  5. package/dist/commands/install.js.map +1 -1
  6. package/dist/commands/logs.d.ts +8 -0
  7. package/dist/commands/logs.d.ts.map +1 -0
  8. package/dist/commands/logs.js +118 -0
  9. package/dist/commands/logs.js.map +1 -0
  10. package/dist/commands/repair.d.ts +10 -0
  11. package/dist/commands/repair.d.ts.map +1 -0
  12. package/dist/commands/repair.js +328 -0
  13. package/dist/commands/repair.js.map +1 -0
  14. package/dist/commands/status.d.ts.map +1 -1
  15. package/dist/commands/status.js +10 -27
  16. package/dist/commands/status.js.map +1 -1
  17. package/dist/commands/uninstall.d.ts +1 -0
  18. package/dist/commands/uninstall.d.ts.map +1 -1
  19. package/dist/commands/uninstall.js +94 -60
  20. package/dist/commands/uninstall.js.map +1 -1
  21. package/dist/commands/update.d.ts +12 -0
  22. package/dist/commands/update.d.ts.map +1 -0
  23. package/dist/commands/update.js +518 -0
  24. package/dist/commands/update.js.map +1 -0
  25. package/dist/core/config-patcher.d.ts.map +1 -1
  26. package/dist/core/config-patcher.js +10 -1
  27. package/dist/core/config-patcher.js.map +1 -1
  28. package/dist/core/gateway-client.js +1 -1
  29. package/dist/core/log-reader.d.ts +28 -0
  30. package/dist/core/log-reader.d.ts.map +1 -0
  31. package/dist/core/log-reader.js +69 -0
  32. package/dist/core/log-reader.js.map +1 -0
  33. package/dist/core/migration-planner.d.ts +37 -0
  34. package/dist/core/migration-planner.d.ts.map +1 -0
  35. package/dist/core/migration-planner.js +160 -0
  36. package/dist/core/migration-planner.js.map +1 -0
  37. package/dist/core/openclaw-paths.d.ts +6 -0
  38. package/dist/core/openclaw-paths.d.ts.map +1 -1
  39. package/dist/core/openclaw-paths.js +14 -0
  40. package/dist/core/openclaw-paths.js.map +1 -1
  41. package/dist/core/state-differ.d.ts +15 -0
  42. package/dist/core/state-differ.d.ts.map +1 -0
  43. package/dist/core/state-differ.js +135 -0
  44. package/dist/core/state-differ.js.map +1 -0
  45. package/dist/index.js +63 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/types/state.d.ts +14 -0
  48. package/dist/types/state.d.ts.map +1 -1
  49. package/dist/utils/identifiers.d.ts +18 -0
  50. package/dist/utils/identifiers.d.ts.map +1 -0
  51. package/dist/utils/identifiers.js +50 -0
  52. package/dist/utils/identifiers.js.map +1 -0
  53. package/package.json +1 -1
  54. package/template/reef.json +6 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-reader.d.ts","sourceRoot":"","sources":["../../src/core/log-reader.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAepC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GACxD,OAAO,CAAC,QAAQ,EAAE,CAAC,CA8BrB"}
@@ -0,0 +1,69 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { existsSync } from 'node:fs';
4
+ import { resolveStateDir } from './openclaw-paths.js';
5
+ /**
6
+ * Discover log files (session transcripts) for an agent.
7
+ * OpenClaw stores sessions at $STATE_DIR/agents/{agentId}/sessions/*.jsonl
8
+ */
9
+ export async function discoverLogs(agentId, env) {
10
+ const stateDir = resolveStateDir(env);
11
+ const sessionDir = join(stateDir, 'agents', agentId, 'sessions');
12
+ if (!existsSync(sessionDir))
13
+ return null;
14
+ try {
15
+ const entries = await readdir(sessionDir);
16
+ const logFiles = entries
17
+ .filter((e) => e.endsWith('.jsonl'))
18
+ .sort();
19
+ return { agentId, sessionDir, logFiles };
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ /**
26
+ * Read the last N lines from a log file.
27
+ */
28
+ export async function readLogTail(filePath, lines) {
29
+ try {
30
+ const content = await readFile(filePath, 'utf-8');
31
+ const allLines = content.split('\n').filter((l) => l.trim().length > 0);
32
+ return allLines.slice(-lines);
33
+ }
34
+ catch {
35
+ return [];
36
+ }
37
+ }
38
+ /**
39
+ * Read logs for an agent, returning the most recent entries.
40
+ */
41
+ export async function readAgentLogs(agentId, options = {}) {
42
+ const maxLines = options.lines ?? 50;
43
+ const discovery = await discoverLogs(agentId, options.env);
44
+ if (!discovery || discovery.logFiles.length === 0)
45
+ return [];
46
+ const entries = [];
47
+ // Read from most recent files first
48
+ const sortedFiles = [...discovery.logFiles].reverse();
49
+ for (const file of sortedFiles) {
50
+ if (entries.length >= maxLines)
51
+ break;
52
+ const filePath = join(discovery.sessionDir, file);
53
+ const remaining = maxLines - entries.length;
54
+ const lines = await readLogTail(filePath, remaining);
55
+ for (const line of lines) {
56
+ let timestamp;
57
+ try {
58
+ const parsed = JSON.parse(line);
59
+ timestamp = parsed.ts ?? parsed.timestamp ?? parsed.createdAt;
60
+ }
61
+ catch {
62
+ // Not valid JSON — use raw line
63
+ }
64
+ entries.push({ timestamp, agentId, file, line });
65
+ }
66
+ }
67
+ return entries.reverse();
68
+ }
69
+ //# sourceMappingURL=log-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-reader.js","sourceRoot":"","sources":["../../src/core/log-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { FormationState, OpenClawBinding, CronJobState } from '../types/state.js';
2
+ import type { ReefManifest, CronJob as ManifestCron } from '../types/manifest.js';
3
+ export interface AgentChange {
4
+ slug: string;
5
+ agentId: string;
6
+ type: 'add' | 'remove' | 'update' | 'unchanged';
7
+ changedFiles?: string[];
8
+ }
9
+ export interface BindingChange {
10
+ binding: OpenClawBinding;
11
+ type: 'add' | 'remove';
12
+ }
13
+ export interface CronChange {
14
+ type: 'add' | 'remove' | 'update';
15
+ name: string;
16
+ agentSlug: string;
17
+ oldCron?: CronJobState;
18
+ newCron?: ManifestCron;
19
+ }
20
+ export interface A2aChange {
21
+ type: 'add' | 'remove' | 'reapply';
22
+ from: string;
23
+ to: string;
24
+ }
25
+ export interface MigrationPlan {
26
+ agents: AgentChange[];
27
+ bindings: BindingChange[];
28
+ cron: CronChange[];
29
+ a2a: A2aChange[];
30
+ versionChange: {
31
+ from: string;
32
+ to: string;
33
+ } | null;
34
+ isEmpty: boolean;
35
+ }
36
+ export declare function computeMigrationPlan(state: FormationState, manifest: ReefManifest, namespace: string, idMap: Map<string, string>, newFileHashes: Record<string, string>): MigrationPlan;
37
+ //# sourceMappingURL=migration-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-planner.d.ts","sourceRoot":"","sources":["../../src/core/migration-planner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,aAAa,CAyKf"}
@@ -0,0 +1,160 @@
1
+ import { bindingsEqual } from './config-patcher.js';
2
+ export function computeMigrationPlan(state, manifest, namespace, idMap, newFileHashes) {
3
+ const agents = [];
4
+ const bindings = [];
5
+ const cron = [];
6
+ const a2a = [];
7
+ const oldSlugs = new Set(Object.keys(state.agents));
8
+ const newSlugs = new Set(Object.keys(manifest.agents));
9
+ // Agent changes
10
+ for (const slug of newSlugs) {
11
+ const agentId = idMap.get(slug);
12
+ if (!oldSlugs.has(slug)) {
13
+ agents.push({ slug, agentId, type: 'add' });
14
+ }
15
+ else {
16
+ // Check for file changes
17
+ const changedFiles = [];
18
+ for (const [key, newHash] of Object.entries(newFileHashes)) {
19
+ if (!key.startsWith(`${agentId}:`))
20
+ continue;
21
+ const relativePath = key.slice(agentId.length + 1);
22
+ const oldHash = state.fileHashes[key];
23
+ if (oldHash !== newHash) {
24
+ changedFiles.push(relativePath);
25
+ }
26
+ }
27
+ // Check for removed files
28
+ for (const key of Object.keys(state.fileHashes)) {
29
+ if (!key.startsWith(`${agentId}:`))
30
+ continue;
31
+ if (!(key in newFileHashes)) {
32
+ const relativePath = key.slice(agentId.length + 1);
33
+ changedFiles.push(relativePath);
34
+ }
35
+ }
36
+ if (changedFiles.length > 0) {
37
+ agents.push({ slug, agentId, type: 'update', changedFiles });
38
+ }
39
+ else {
40
+ agents.push({ slug, agentId, type: 'unchanged' });
41
+ }
42
+ }
43
+ }
44
+ for (const slug of oldSlugs) {
45
+ if (!newSlugs.has(slug)) {
46
+ const agentId = state.agents[slug].id;
47
+ agents.push({ slug, agentId, type: 'remove' });
48
+ }
49
+ }
50
+ // Binding changes
51
+ const newBindings = [];
52
+ for (const binding of manifest.bindings ?? []) {
53
+ const resolvedAgentId = idMap.get(binding.agent);
54
+ if (!resolvedAgentId)
55
+ continue;
56
+ newBindings.push({
57
+ agentId: resolvedAgentId,
58
+ match: { channel: binding.channel },
59
+ });
60
+ }
61
+ // Find added bindings
62
+ for (const newBinding of newBindings) {
63
+ const found = state.bindings.some((b) => bindingsEqual(b, newBinding));
64
+ if (!found) {
65
+ bindings.push({ binding: newBinding, type: 'add' });
66
+ }
67
+ }
68
+ // Find removed bindings
69
+ for (const oldBinding of state.bindings) {
70
+ const found = newBindings.some((b) => bindingsEqual(b, oldBinding));
71
+ if (!found) {
72
+ bindings.push({ binding: oldBinding, type: 'remove' });
73
+ }
74
+ }
75
+ // Cron changes
76
+ const oldCronByName = new Map();
77
+ for (const job of state.cronJobs) {
78
+ oldCronByName.set(job.name, job);
79
+ }
80
+ const newCronNames = new Set();
81
+ for (const [i, cronEntry] of (manifest.cron ?? []).entries()) {
82
+ const jobName = `reef:${namespace}:${cronEntry.agent}-${i}`;
83
+ newCronNames.add(jobName);
84
+ const old = oldCronByName.get(jobName);
85
+ if (!old) {
86
+ cron.push({
87
+ type: 'add',
88
+ name: jobName,
89
+ agentSlug: cronEntry.agent,
90
+ newCron: cronEntry,
91
+ });
92
+ }
93
+ else {
94
+ // Check for updates (only if state has schedule/prompt fields)
95
+ const scheduleChanged = old.schedule && old.schedule !== cronEntry.schedule;
96
+ const promptChanged = old.prompt && old.prompt !== cronEntry.prompt;
97
+ const timezoneChanged = old.timezone !== cronEntry.timezone;
98
+ if (scheduleChanged || promptChanged || timezoneChanged) {
99
+ cron.push({
100
+ type: 'update',
101
+ name: jobName,
102
+ agentSlug: cronEntry.agent,
103
+ oldCron: old,
104
+ newCron: cronEntry,
105
+ });
106
+ }
107
+ }
108
+ }
109
+ // Find removed cron jobs
110
+ for (const job of state.cronJobs) {
111
+ if (!newCronNames.has(job.name)) {
112
+ cron.push({
113
+ type: 'remove',
114
+ name: job.name,
115
+ agentSlug: job.agentSlug,
116
+ oldCron: job,
117
+ });
118
+ }
119
+ }
120
+ // A2a changes
121
+ const newEdges = manifest.agentToAgent ?? {};
122
+ const oldEdges = state.agentToAgentEdges;
123
+ if (oldEdges === undefined) {
124
+ // v0.2.0 state — can't diff, reapply all
125
+ for (const [from, targets] of Object.entries(newEdges)) {
126
+ for (const to of targets) {
127
+ a2a.push({ type: 'reapply', from, to });
128
+ }
129
+ }
130
+ }
131
+ else {
132
+ // Find added edges
133
+ for (const [from, targets] of Object.entries(newEdges)) {
134
+ for (const to of targets) {
135
+ if (!oldEdges[from]?.includes(to)) {
136
+ a2a.push({ type: 'add', from, to });
137
+ }
138
+ }
139
+ }
140
+ // Find removed edges
141
+ for (const [from, targets] of Object.entries(oldEdges)) {
142
+ for (const to of targets) {
143
+ if (!newEdges[from]?.includes(to)) {
144
+ a2a.push({ type: 'remove', from, to });
145
+ }
146
+ }
147
+ }
148
+ }
149
+ // Version change
150
+ const versionChange = state.version !== manifest.version
151
+ ? { from: state.version, to: manifest.version }
152
+ : null;
153
+ const isEmpty = agents.every((a) => a.type === 'unchanged') &&
154
+ bindings.length === 0 &&
155
+ cron.length === 0 &&
156
+ a2a.length === 0 &&
157
+ !versionChange;
158
+ return { agents, bindings, cron, a2a, versionChange, isEmpty };
159
+ }
160
+ //# sourceMappingURL=migration-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-planner.js","sourceRoot":"","sources":["../../src/core/migration-planner.ts"],"names":[],"mappings":"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"}
@@ -14,4 +14,10 @@ export declare function validateAgentIds(slugs: string[], namespace: string): {
14
14
  ids: Map<string, string>;
15
15
  errors: string[];
16
16
  };
17
+ /**
18
+ * Return paths under $STATE_DIR/agents/{agentId}/ that should be cleaned up
19
+ * on uninstall: sessions, agent state, qmd memory, and the parent directory.
20
+ * Order: children first, so the parent can be rmdir'd if empty.
21
+ */
22
+ export declare function resolveAgentStatePaths(agentId: string, env?: NodeJS.ProcessEnv): string[];
17
23
  //# sourceMappingURL=openclaw-paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-paths.d.ts","sourceRoot":"","sources":["../../src/core/openclaw-paths.ts"],"names":[],"mappings":"AAcA,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAU9D;AAED,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAe/D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAsCjE;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,MAAM,CAER;AAED,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAEnE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,MAAM,CA4BR;AAyBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA4BA;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BhE"}
1
+ {"version":3,"file":"openclaw-paths.d.ts","sourceRoot":"","sources":["../../src/core/openclaw-paths.ts"],"names":[],"mappings":"AAcA,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAU9D;AAED,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAe/D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAsCjE;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,MAAM,CAER;AAED,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAEnE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,MAAM,CA4BR;AAyBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA4BA;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BhE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,MAAM,EAAE,CAQV"}
@@ -172,4 +172,18 @@ export function validateAgentIds(slugs, namespace) {
172
172
  }
173
173
  return { valid: errors.length === 0, ids, errors };
174
174
  }
175
+ /**
176
+ * Return paths under $STATE_DIR/agents/{agentId}/ that should be cleaned up
177
+ * on uninstall: sessions, agent state, qmd memory, and the parent directory.
178
+ * Order: children first, so the parent can be rmdir'd if empty.
179
+ */
180
+ export function resolveAgentStatePaths(agentId, env) {
181
+ const stateDir = resolveStateDir(env);
182
+ return [
183
+ join(stateDir, 'agents', agentId, 'sessions'),
184
+ join(stateDir, 'agents', agentId, 'agent'),
185
+ join(stateDir, 'agents', agentId, 'qmd'),
186
+ join(stateDir, 'agents', agentId),
187
+ ];
188
+ }
175
189
  //# sourceMappingURL=openclaw-paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-paths.js","sourceRoot":"","sources":["../../src/core/openclaw-paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openclaw-paths.js","sourceRoot":"","sources":["../../src/core/openclaw-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { FormationState } from '../types/state.js';
2
+ import type { CronJob } from './gateway-client.js';
3
+ export interface Discrepancy {
4
+ kind: 'agent' | 'binding' | 'cron' | 'file' | 'a2a';
5
+ type: 'missing' | 'orphaned' | 'changed';
6
+ description: string;
7
+ agentId?: string;
8
+ fixable: boolean;
9
+ needsSource: boolean;
10
+ }
11
+ export declare function diffStateVsConfig(state: FormationState, config: Record<string, unknown>): Discrepancy[];
12
+ export declare function diffStateVsFilesystem(state: FormationState): Discrepancy[];
13
+ export declare function diffStateVsCron(state: FormationState, liveCronJobs: CronJob[] | null): Discrepancy[];
14
+ export declare function collectDiscrepancies(state: FormationState, config: Record<string, unknown>, liveCronJobs: CronJob[] | null): Discrepancy[];
15
+ //# sourceMappingURL=state-differ.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-differ.d.ts","sourceRoot":"","sources":["../../src/core/state-differ.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAiC,MAAM,mBAAmB,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IACpD,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,WAAW,EAAE,CAsDf;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,GACpB,WAAW,EAAE,CAwDf;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,GAC7B,WAAW,EAAE,CAoBf;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,GAC7B,WAAW,EAAE,CAMf"}
@@ -0,0 +1,135 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { computeFileHash } from './state-manager.js';
4
+ import { bindingsEqual } from './config-patcher.js';
5
+ export function diffStateVsConfig(state, config) {
6
+ const discrepancies = [];
7
+ const agentsList = config.agents?.list ?? [];
8
+ // Check each agent in state exists in config
9
+ for (const agent of Object.values(state.agents)) {
10
+ const found = agentsList.some((a) => a.id === agent.id);
11
+ if (!found) {
12
+ discrepancies.push({
13
+ kind: 'agent',
14
+ type: 'missing',
15
+ description: `${agent.slug} (${agent.id}) not in config`,
16
+ agentId: agent.id,
17
+ fixable: true,
18
+ needsSource: false,
19
+ });
20
+ }
21
+ }
22
+ // Check bindings
23
+ const configBindings = (config.bindings ?? []);
24
+ for (const binding of state.bindings) {
25
+ const found = configBindings.some((b) => bindingsEqual(b, binding));
26
+ if (!found) {
27
+ discrepancies.push({
28
+ kind: 'binding',
29
+ type: 'missing',
30
+ description: `${binding.match.channel} → ${binding.agentId} not in config`,
31
+ fixable: true,
32
+ needsSource: false,
33
+ });
34
+ }
35
+ }
36
+ // Check a2a
37
+ if (state.agentToAgent?.allowAdded) {
38
+ const tools = config.tools;
39
+ const a2a = tools?.agentToAgent;
40
+ const allow = a2a?.allow ?? [];
41
+ const pattern = `${state.namespace}-*`;
42
+ if (!allow.includes(pattern)) {
43
+ discrepancies.push({
44
+ kind: 'a2a',
45
+ type: 'missing',
46
+ description: `Agent-to-agent allow pattern "${pattern}" not in config`,
47
+ fixable: true,
48
+ needsSource: false,
49
+ });
50
+ }
51
+ }
52
+ return discrepancies;
53
+ }
54
+ export function diffStateVsFilesystem(state) {
55
+ const discrepancies = [];
56
+ for (const agent of Object.values(state.agents)) {
57
+ if (!existsSync(agent.workspace)) {
58
+ discrepancies.push({
59
+ kind: 'file',
60
+ type: 'missing',
61
+ description: `Workspace ${agent.workspace} missing`,
62
+ agentId: agent.id,
63
+ fixable: false,
64
+ needsSource: true,
65
+ });
66
+ }
67
+ }
68
+ // Check individual file hashes
69
+ for (const [key, expectedHash] of Object.entries(state.fileHashes)) {
70
+ // key format: "agentId:relativePath"
71
+ const colonIdx = key.indexOf(':');
72
+ if (colonIdx === -1)
73
+ continue;
74
+ const agentId = key.slice(0, colonIdx);
75
+ const relativePath = key.slice(colonIdx + 1);
76
+ // Find the agent
77
+ const agent = Object.values(state.agents).find((a) => a.id === agentId);
78
+ if (!agent)
79
+ continue;
80
+ const filePath = join(agent.workspace, relativePath);
81
+ if (!existsSync(filePath)) {
82
+ discrepancies.push({
83
+ kind: 'file',
84
+ type: 'missing',
85
+ description: `File ${relativePath} missing from ${agent.slug} workspace`,
86
+ agentId: agent.id,
87
+ fixable: false,
88
+ needsSource: true,
89
+ });
90
+ }
91
+ else {
92
+ // File exists — check hash
93
+ const actualContent = readFileSync(filePath);
94
+ const actualHash = computeFileHash(actualContent);
95
+ if (actualHash !== expectedHash) {
96
+ discrepancies.push({
97
+ kind: 'file',
98
+ type: 'changed',
99
+ description: `File ${relativePath} changed in ${agent.slug} workspace`,
100
+ agentId: agent.id,
101
+ fixable: false,
102
+ needsSource: true,
103
+ });
104
+ }
105
+ }
106
+ }
107
+ return discrepancies;
108
+ }
109
+ export function diffStateVsCron(state, liveCronJobs) {
110
+ if (liveCronJobs === null)
111
+ return [];
112
+ const discrepancies = [];
113
+ const liveIds = new Set(liveCronJobs.map((j) => j.id));
114
+ for (const job of state.cronJobs) {
115
+ if (!liveIds.has(job.id)) {
116
+ const hasScheduleData = !!(job.schedule && job.prompt);
117
+ discrepancies.push({
118
+ kind: 'cron',
119
+ type: 'missing',
120
+ description: `Cron job ${job.name} (${job.id}) not found on Gateway`,
121
+ fixable: hasScheduleData,
122
+ needsSource: !hasScheduleData,
123
+ });
124
+ }
125
+ }
126
+ return discrepancies;
127
+ }
128
+ export function collectDiscrepancies(state, config, liveCronJobs) {
129
+ return [
130
+ ...diffStateVsConfig(state, config),
131
+ ...diffStateVsFilesystem(state),
132
+ ...diffStateVsCron(state, liveCronJobs),
133
+ ];
134
+ }
135
+ //# sourceMappingURL=state-differ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-differ.js","sourceRoot":"","sources":["../../src/core/state-differ.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,11 +8,14 @@ import { install } from './commands/install.js';
8
8
  import { uninstall } from './commands/uninstall.js';
9
9
  import { list } from './commands/list.js';
10
10
  import { status } from './commands/status.js';
11
+ import { repair } from './commands/repair.js';
12
+ import { update } from './commands/update.js';
13
+ import { logs } from './commands/logs.js';
11
14
  const program = new Command();
12
15
  program
13
16
  .name('reef')
14
17
  .description('OpenReef CLI — package and deploy multi-agent formations')
15
- .version('0.2.0');
18
+ .version('0.3.0');
16
19
  program
17
20
  .command('init [name]')
18
21
  .description('Scaffold a new formation from the bundled template')
@@ -78,6 +81,7 @@ program
78
81
  .option('--merge', 'Update files only, preserve agent config')
79
82
  .option('--yes', 'Skip confirmation prompts')
80
83
  .option('--no-env', 'Skip loading .env file')
84
+ .option('--dry-run', 'Preview changes without applying them')
81
85
  .option('--gateway-url <url>', 'Gateway WebSocket URL')
82
86
  .option('--gateway-token <token>', 'Gateway auth token')
83
87
  .option('--gateway-password <password>', 'Gateway auth password')
@@ -94,6 +98,7 @@ program
94
98
  .command('uninstall <identifier>')
95
99
  .description('Remove an installed formation (namespace/name or name)')
96
100
  .option('--yes', 'Skip confirmation')
101
+ .option('--dry-run', 'Preview changes without applying them')
97
102
  .option('--gateway-url <url>', 'Gateway WebSocket URL')
98
103
  .option('--gateway-token <token>', 'Gateway auth token')
99
104
  .option('--gateway-password <password>', 'Gateway auth password')
@@ -106,6 +111,63 @@ program
106
111
  process.exit(1);
107
112
  }
108
113
  });
114
+ program
115
+ .command('update <path>')
116
+ .description('Update an installed formation from a new manifest')
117
+ .option('--set <key=value...>', 'Set variable values')
118
+ .option('--namespace <ns>', 'Override namespace')
119
+ .option('--yes', 'Skip confirmation')
120
+ .option('--no-env', 'Skip loading .env file')
121
+ .option('--dry-run', 'Preview changes without applying them')
122
+ .option('--gateway-url <url>', 'Gateway WebSocket URL')
123
+ .option('--gateway-token <token>', 'Gateway auth token')
124
+ .option('--gateway-password <password>', 'Gateway auth password')
125
+ .action(async (path, options) => {
126
+ try {
127
+ await update(path, options);
128
+ }
129
+ catch (err) {
130
+ console.error(err instanceof Error ? err.message : err);
131
+ process.exit(1);
132
+ }
133
+ });
134
+ program
135
+ .command('repair <identifier>')
136
+ .description('Detect and fix discrepancies in an installed formation')
137
+ .option('--source <path>', 'Formation source for file re-deployment')
138
+ .option('--yes', 'Skip confirmation')
139
+ .option('--dry-run', 'Preview changes without applying them')
140
+ .option('--gateway-url <url>', 'Gateway WebSocket URL')
141
+ .option('--gateway-token <token>', 'Gateway auth token')
142
+ .option('--gateway-password <password>', 'Gateway auth password')
143
+ .action(async (identifier, options) => {
144
+ try {
145
+ await repair(identifier, options);
146
+ }
147
+ catch (err) {
148
+ console.error(err instanceof Error ? err.message : err);
149
+ process.exit(1);
150
+ }
151
+ });
152
+ program
153
+ .command('logs <identifier>')
154
+ .description('View session logs for a formation')
155
+ .option('--agent <slug>', 'Filter by agent slug or ID')
156
+ .option('--lines <n>', 'Number of lines to show', '50')
157
+ .option('--follow', 'Follow log output (tail -f)')
158
+ .option('--path <path>', 'Read from a specific log file')
159
+ .action(async (identifier, options) => {
160
+ try {
161
+ await logs(identifier, {
162
+ ...options,
163
+ lines: parseInt(options.lines, 10),
164
+ });
165
+ }
166
+ catch (err) {
167
+ console.error(err instanceof Error ? err.message : err);
168
+ process.exit(1);
169
+ }
170
+ });
109
171
  program
110
172
  .command('list')
111
173
  .description('List installed formations')