@openreef/cli 0.3.5 → 0.5.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.
- package/README.md +48 -11
- package/dist/commands/diff.d.ts +9 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +34 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/export.d.ts +6 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +70 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +110 -30
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/lock.d.ts +6 -0
- package/dist/commands/lock.d.ts.map +1 -0
- package/dist/commands/lock.js +39 -0
- package/dist/commands/lock.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +261 -13
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +146 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +3 -2
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +112 -216
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts +1 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +183 -14
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/config-patcher.d.ts +11 -1
- package/dist/core/config-patcher.d.ts.map +1 -1
- package/dist/core/config-patcher.js +24 -7
- package/dist/core/config-patcher.js.map +1 -1
- package/dist/core/diff-engine.d.ts +21 -0
- package/dist/core/diff-engine.d.ts.map +1 -0
- package/dist/core/diff-engine.js +140 -0
- package/dist/core/diff-engine.js.map +1 -0
- package/dist/core/gateway-client.d.ts.map +1 -1
- package/dist/core/gateway-client.js +2 -1
- package/dist/core/gateway-client.js.map +1 -1
- package/dist/core/github-api.d.ts +37 -0
- package/dist/core/github-api.d.ts.map +1 -0
- package/dist/core/github-api.js +163 -0
- package/dist/core/github-api.js.map +1 -0
- package/dist/core/registry.d.ts +61 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +255 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/skills-registry.d.ts +32 -0
- package/dist/core/skills-registry.d.ts.map +1 -0
- package/dist/core/skills-registry.js +186 -0
- package/dist/core/skills-registry.js.map +1 -0
- package/dist/core/state-manager.d.ts +3 -0
- package/dist/core/state-manager.d.ts.map +1 -1
- package/dist/core/state-manager.js +55 -2
- package/dist/core/state-manager.js.map +1 -1
- package/dist/core/template-interpolator.d.ts +6 -0
- package/dist/core/template-interpolator.d.ts.map +1 -1
- package/dist/core/template-interpolator.js +14 -0
- package/dist/core/template-interpolator.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +292 -186
- package/dist/index.js.map +1 -1
- package/dist/types/lockfile.d.ts +9 -0
- package/dist/types/lockfile.d.ts.map +1 -0
- package/dist/types/lockfile.js +2 -0
- package/dist/types/lockfile.js.map +1 -0
- package/dist/types/state.d.ts +4 -0
- package/dist/types/state.d.ts.map +1 -1
- package/dist/utils/download.d.ts +18 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +72 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/plan-display.d.ts +3 -0
- package/dist/utils/plan-display.d.ts.map +1 -0
- package/dist/utils/plan-display.js +80 -0
- package/dist/utils/plan-display.js.map +1 -0
- package/dist/utils/semver.d.ts +12 -0
- package/dist/utils/semver.d.ts.map +1 -0
- package/dist/utils/semver.js +82 -0
- package/dist/utils/semver.js.map +1 -0
- package/dist/utils/tarball.d.ts +20 -7
- package/dist/utils/tarball.d.ts.map +1 -1
- package/dist/utils/tarball.js +36 -9
- package/dist/utils/tarball.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
2
4
|
import { loadManifest, ManifestLoadError } from '../core/manifest-loader.js';
|
|
3
5
|
import { validateSchema } from '../core/schema-validator.js';
|
|
4
6
|
import { validateStructure } from '../core/structural-validator.js';
|
|
7
|
+
import { computeFileHash } from '../core/state-manager.js';
|
|
8
|
+
import { readConfig } from '../core/config-patcher.js';
|
|
5
9
|
import { icons } from '../utils/output.js';
|
|
10
|
+
import { resolveFormationState, FormationNotFoundError, AmbiguousFormationError, } from '../utils/identifiers.js';
|
|
6
11
|
function mergeResults(...results) {
|
|
7
12
|
const issues = results.flatMap((r) => r.issues);
|
|
8
13
|
return {
|
|
@@ -20,7 +25,31 @@ function severityIcon(severity) {
|
|
|
20
25
|
return icons.info;
|
|
21
26
|
}
|
|
22
27
|
}
|
|
28
|
+
function reportResult(result, options) {
|
|
29
|
+
if (options.json) {
|
|
30
|
+
console.log(JSON.stringify(result, null, 2));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (options.quiet)
|
|
34
|
+
return;
|
|
35
|
+
if (result.valid && result.issues.length === 0) {
|
|
36
|
+
console.log(`${icons.success} Formation is valid`);
|
|
37
|
+
}
|
|
38
|
+
else if (result.valid) {
|
|
39
|
+
console.log(`${icons.success} Formation is valid (with warnings)`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.log(`${icons.error} Formation has validation errors`);
|
|
43
|
+
}
|
|
44
|
+
for (const issue of result.issues) {
|
|
45
|
+
const pathStr = issue.path ? ` (${issue.path})` : '';
|
|
46
|
+
console.log(` ${severityIcon(issue.severity)} ${issue.message}${pathStr}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
23
49
|
export async function validate(path, options = {}) {
|
|
50
|
+
if (options.deployed) {
|
|
51
|
+
return validateDeployed(path, options);
|
|
52
|
+
}
|
|
24
53
|
const formationDir = resolve(path);
|
|
25
54
|
let manifest;
|
|
26
55
|
try {
|
|
@@ -52,26 +81,166 @@ export async function validate(path, options = {}) {
|
|
|
52
81
|
const schemaResult = await validateSchema(manifest);
|
|
53
82
|
const structuralResult = await validateStructure(manifest, formationDir);
|
|
54
83
|
const result = mergeResults(schemaResult, structuralResult);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
84
|
+
reportResult(result, options);
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
async function validateDeployed(identifier, options) {
|
|
88
|
+
// 1. Resolve formation state
|
|
89
|
+
let state;
|
|
90
|
+
try {
|
|
91
|
+
state = await resolveFormationState(identifier);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err instanceof FormationNotFoundError) {
|
|
95
|
+
const result = {
|
|
96
|
+
valid: false,
|
|
97
|
+
issues: [
|
|
98
|
+
{
|
|
99
|
+
severity: 'error',
|
|
100
|
+
code: 'FORMATION_NOT_FOUND',
|
|
101
|
+
message: err.message,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
reportResult(result, options);
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
if (err instanceof AmbiguousFormationError) {
|
|
109
|
+
const result = {
|
|
110
|
+
valid: false,
|
|
111
|
+
issues: [
|
|
112
|
+
{
|
|
113
|
+
severity: 'error',
|
|
114
|
+
code: 'AMBIGUOUS_FORMATION',
|
|
115
|
+
message: `Multiple formations match "${identifier}". Specify the full namespace/name.`,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
reportResult(result, options);
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
throw err;
|
|
58
123
|
}
|
|
59
|
-
|
|
60
|
-
|
|
124
|
+
const issues = [];
|
|
125
|
+
// 2. State consistency checks
|
|
126
|
+
for (const [slug, agent] of Object.entries(state.agents)) {
|
|
127
|
+
// Agent workspaces exist on disk
|
|
128
|
+
if (!existsSync(agent.workspace)) {
|
|
129
|
+
issues.push({
|
|
130
|
+
severity: 'error',
|
|
131
|
+
code: 'WORKSPACE_MISSING',
|
|
132
|
+
message: `Agent "${slug}" workspace missing: ${agent.workspace}`,
|
|
133
|
+
path: `agents.${slug}.workspace`,
|
|
134
|
+
});
|
|
135
|
+
continue; // Skip file checks if workspace is gone
|
|
136
|
+
}
|
|
137
|
+
// Files in agent.files exist in their workspaces
|
|
138
|
+
for (const file of agent.files) {
|
|
139
|
+
const filePath = resolve(agent.workspace, file);
|
|
140
|
+
if (!existsSync(filePath)) {
|
|
141
|
+
issues.push({
|
|
142
|
+
severity: 'error',
|
|
143
|
+
code: 'FILE_MISSING',
|
|
144
|
+
message: `File "${file}" missing from agent "${slug}" workspace`,
|
|
145
|
+
path: `agents.${slug}.files`,
|
|
146
|
+
});
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// File contents match fileHashes (detect drift)
|
|
150
|
+
const hashKey = `${agent.id}:${file}`;
|
|
151
|
+
const expectedHash = state.fileHashes[hashKey];
|
|
152
|
+
if (expectedHash) {
|
|
153
|
+
const content = await readFile(filePath);
|
|
154
|
+
const actualHash = computeFileHash(content);
|
|
155
|
+
if (actualHash !== expectedHash) {
|
|
156
|
+
issues.push({
|
|
157
|
+
severity: 'error',
|
|
158
|
+
code: 'FILE_HASH_DRIFT',
|
|
159
|
+
message: `File "${file}" in agent "${slug}" has been modified since deployment`,
|
|
160
|
+
path: `agents.${slug}.files`,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
61
165
|
}
|
|
62
|
-
|
|
63
|
-
|
|
166
|
+
// Bindings reference valid agent IDs
|
|
167
|
+
const agentIds = new Set(Object.values(state.agents).map((a) => a.id));
|
|
168
|
+
for (const binding of state.bindings) {
|
|
169
|
+
if (!agentIds.has(binding.agentId)) {
|
|
170
|
+
issues.push({
|
|
171
|
+
severity: 'error',
|
|
172
|
+
code: 'BINDING_INVALID_AGENT',
|
|
173
|
+
message: `Binding for channel "${binding.match.channel}" references non-existent agent "${binding.agentId}"`,
|
|
174
|
+
path: 'bindings',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
64
177
|
}
|
|
65
|
-
|
|
66
|
-
|
|
178
|
+
// Cron jobs reference valid agent slugs
|
|
179
|
+
const agentSlugs = new Set(Object.keys(state.agents));
|
|
180
|
+
for (const job of state.cronJobs) {
|
|
181
|
+
if (!agentSlugs.has(job.agentSlug)) {
|
|
182
|
+
issues.push({
|
|
183
|
+
severity: 'error',
|
|
184
|
+
code: 'CRON_INVALID_AGENT',
|
|
185
|
+
message: `Cron job "${job.name}" references non-existent agent slug "${job.agentSlug}"`,
|
|
186
|
+
path: 'cronJobs',
|
|
187
|
+
});
|
|
188
|
+
}
|
|
67
189
|
}
|
|
68
|
-
|
|
69
|
-
|
|
190
|
+
// 3. Config presence checks
|
|
191
|
+
const { config } = await readConfig();
|
|
192
|
+
const agentsList = config.agents?.list ?? [];
|
|
193
|
+
const configBindings = (config.bindings ?? []);
|
|
194
|
+
for (const [slug, agent] of Object.entries(state.agents)) {
|
|
195
|
+
const inConfig = agentsList.some((a) => a.id === agent.id);
|
|
196
|
+
if (!inConfig) {
|
|
197
|
+
issues.push({
|
|
198
|
+
severity: 'error',
|
|
199
|
+
code: 'AGENT_NOT_IN_CONFIG',
|
|
200
|
+
message: `Agent "${slug}" (${agent.id}) not found in config agents.list`,
|
|
201
|
+
path: `agents.${slug}`,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
70
204
|
}
|
|
71
|
-
for (const
|
|
72
|
-
const
|
|
73
|
-
|
|
205
|
+
for (const binding of state.bindings) {
|
|
206
|
+
const inConfig = configBindings.some((b) => {
|
|
207
|
+
const match = b.match;
|
|
208
|
+
return b.agentId === binding.agentId && match?.channel === binding.match.channel;
|
|
209
|
+
});
|
|
210
|
+
if (!inConfig) {
|
|
211
|
+
issues.push({
|
|
212
|
+
severity: 'error',
|
|
213
|
+
code: 'BINDING_NOT_IN_CONFIG',
|
|
214
|
+
message: `Binding ${binding.match.channel} → ${binding.agentId} not found in config bindings`,
|
|
215
|
+
path: 'bindings',
|
|
216
|
+
});
|
|
217
|
+
}
|
|
74
218
|
}
|
|
219
|
+
// 4. Optional: if sourcePath exists, run offline validation too
|
|
220
|
+
if (state.sourcePath && existsSync(state.sourcePath)) {
|
|
221
|
+
try {
|
|
222
|
+
const manifest = await loadManifest(state.sourcePath);
|
|
223
|
+
const schemaResult = await validateSchema(manifest);
|
|
224
|
+
const structResult = await validateStructure(manifest, state.sourcePath);
|
|
225
|
+
const sourceIssues = [...schemaResult.issues, ...structResult.issues];
|
|
226
|
+
// Downgrade to warnings — old installs without snapshots should not fail hard
|
|
227
|
+
for (const issue of sourceIssues) {
|
|
228
|
+
issues.push({
|
|
229
|
+
...issue,
|
|
230
|
+
severity: 'warning',
|
|
231
|
+
message: `[source] ${issue.message}`,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
// Source validation is optional — skip on error
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const result = {
|
|
240
|
+
valid: issues.every((i) => i.severity !== 'error'),
|
|
241
|
+
issues,
|
|
242
|
+
};
|
|
243
|
+
reportResult(result, options);
|
|
75
244
|
return result;
|
|
76
245
|
}
|
|
77
246
|
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,10 +30,17 @@ export declare function removeBinding(config: Record<string, unknown>, binding:
|
|
|
30
30
|
export declare function setAgentToAgent(config: Record<string, unknown>, namespace: string): Record<string, unknown>;
|
|
31
31
|
export declare function removeAgentToAgent(config: Record<string, unknown>, namespace: string, otherFormationsInNamespace: boolean, wasEnabled?: boolean): Record<string, unknown>;
|
|
32
32
|
export declare function bindingsEqual(a: OpenClawBinding, b: OpenClawBinding): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Returns true when the channel string has no `:scope` suffix.
|
|
35
|
+
* Bare channels like "telegram" shadow the main agent because they route
|
|
36
|
+
* ALL messages on that channel to the formation agent.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isBareChannel(channel: string): boolean;
|
|
33
39
|
export interface ClassifiedBinding {
|
|
34
40
|
binding: Binding;
|
|
35
41
|
channelType: string;
|
|
36
42
|
status: 'configured' | 'unconfigured' | 'unknown';
|
|
43
|
+
isBare: boolean;
|
|
37
44
|
}
|
|
38
45
|
/**
|
|
39
46
|
* Parses "slack:#support" → "slack", "telegram" → "telegram".
|
|
@@ -53,7 +60,10 @@ export declare function getConfiguredChannels(config: Record<string, unknown>):
|
|
|
53
60
|
export declare function classifyBindings(bindings: Binding[], configuredChannels: Set<string> | null): ClassifiedBinding[];
|
|
54
61
|
/**
|
|
55
62
|
* Returns the filtered binding list: keeps 'configured' and 'unknown', drops 'unconfigured'.
|
|
63
|
+
* Also drops bare-channel bindings unless allowChannelShadow is set.
|
|
56
64
|
* Used in --yes fresh/force installs and as the default selection for the interactive checkbox.
|
|
57
65
|
*/
|
|
58
|
-
export declare function resolveSelectedBindings(classifiedBindings: ClassifiedBinding[]
|
|
66
|
+
export declare function resolveSelectedBindings(classifiedBindings: ClassifiedBinding[], options?: {
|
|
67
|
+
allowChannelShadow?: boolean;
|
|
68
|
+
}): Binding[];
|
|
59
69
|
//# sourceMappingURL=config-patcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-patcher.d.ts","sourceRoot":"","sources":["../../src/core/config-patcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAgBD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,UAAU,EACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"config-patcher.d.ts","sourceRoot":"","sources":["../../src/core/config-patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,10 +57,15 @@ function ensureBindings(config) {
|
|
|
57
57
|
}
|
|
58
58
|
export function addAgentEntry(config, agent, env) {
|
|
59
59
|
const list = ensureAgentsList(config);
|
|
60
|
-
|
|
61
|
-
if
|
|
60
|
+
const normalizedId = agent.id.trim().toLowerCase();
|
|
61
|
+
// Idempotent: skip if agent with same id exists (normalized comparison)
|
|
62
|
+
if (list.some((a) => String(a.id).trim().toLowerCase() === normalizedId)) {
|
|
62
63
|
return config;
|
|
63
64
|
}
|
|
65
|
+
// Seed main when transitioning from empty to populated list
|
|
66
|
+
if (list.length === 0 && normalizedId !== 'main') {
|
|
67
|
+
list.unshift({ id: 'main' });
|
|
68
|
+
}
|
|
64
69
|
const entry = {
|
|
65
70
|
id: agent.id,
|
|
66
71
|
};
|
|
@@ -153,6 +158,15 @@ function canonicalJson(obj) {
|
|
|
153
158
|
canonicalJson(obj[k]));
|
|
154
159
|
return '{' + sorted.join(',') + '}';
|
|
155
160
|
}
|
|
161
|
+
// ─── Channel detection utilities ─────────────────────────────────
|
|
162
|
+
/**
|
|
163
|
+
* Returns true when the channel string has no `:scope` suffix.
|
|
164
|
+
* Bare channels like "telegram" shadow the main agent because they route
|
|
165
|
+
* ALL messages on that channel to the formation agent.
|
|
166
|
+
*/
|
|
167
|
+
export function isBareChannel(channel) {
|
|
168
|
+
return !channel.trim().includes(':');
|
|
169
|
+
}
|
|
156
170
|
/**
|
|
157
171
|
* Parses "slack:#support" → "slack", "telegram" → "telegram".
|
|
158
172
|
* Splits on first `:` and normalizes with trim + lowercase.
|
|
@@ -175,16 +189,17 @@ export function getConfiguredChannels(config) {
|
|
|
175
189
|
return null;
|
|
176
190
|
const result = new Set();
|
|
177
191
|
for (const [key, value] of Object.entries(channels)) {
|
|
178
|
-
if (key === 'defaults')
|
|
192
|
+
if (key.trim().toLowerCase() === 'defaults')
|
|
179
193
|
continue;
|
|
194
|
+
const normalizedKey = key.trim().toLowerCase();
|
|
180
195
|
// Non-object entry (e.g. channels.slack = true) — treat as configured
|
|
181
196
|
if (typeof value !== 'object' || value === null) {
|
|
182
|
-
result.add(
|
|
197
|
+
result.add(normalizedKey);
|
|
183
198
|
continue;
|
|
184
199
|
}
|
|
185
200
|
const entry = value;
|
|
186
201
|
if (entry.enabled !== false) {
|
|
187
|
-
result.add(
|
|
202
|
+
result.add(normalizedKey);
|
|
188
203
|
}
|
|
189
204
|
}
|
|
190
205
|
return result;
|
|
@@ -206,16 +221,18 @@ export function classifyBindings(bindings, configuredChannels) {
|
|
|
206
221
|
else {
|
|
207
222
|
status = 'unconfigured';
|
|
208
223
|
}
|
|
209
|
-
return { binding, channelType, status };
|
|
224
|
+
return { binding, channelType, status, isBare: isBareChannel(binding.channel) };
|
|
210
225
|
});
|
|
211
226
|
}
|
|
212
227
|
/**
|
|
213
228
|
* Returns the filtered binding list: keeps 'configured' and 'unknown', drops 'unconfigured'.
|
|
229
|
+
* Also drops bare-channel bindings unless allowChannelShadow is set.
|
|
214
230
|
* Used in --yes fresh/force installs and as the default selection for the interactive checkbox.
|
|
215
231
|
*/
|
|
216
|
-
export function resolveSelectedBindings(classifiedBindings) {
|
|
232
|
+
export function resolveSelectedBindings(classifiedBindings, options) {
|
|
217
233
|
return classifiedBindings
|
|
218
234
|
.filter((cb) => cb.status !== 'unconfigured')
|
|
235
|
+
.filter((cb) => !cb.isBare || options?.allowChannelShadow)
|
|
219
236
|
.map((cb) => cb.binding);
|
|
220
237
|
}
|
|
221
238
|
//# sourceMappingURL=config-patcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-patcher.js","sourceRoot":"","sources":["../../src/core/config-patcher.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config-patcher.js","sourceRoot":"","sources":["../../src/core/config-patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ReefManifest } from '../types/manifest.js';
|
|
2
|
+
import type { FormationState } from '../types/state.js';
|
|
3
|
+
import type { MigrationPlan } from './migration-planner.js';
|
|
4
|
+
export interface DiffResult {
|
|
5
|
+
plan: MigrationPlan;
|
|
6
|
+
manifest: ReefManifest;
|
|
7
|
+
state: FormationState;
|
|
8
|
+
namespace: string;
|
|
9
|
+
idMap: Map<string, string>;
|
|
10
|
+
newFileHashes: Record<string, string>;
|
|
11
|
+
resolvedVars: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export declare class DiffValidationError extends Error {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
export declare function computeFormationDiff(formationPath: string, options: {
|
|
17
|
+
namespace?: string;
|
|
18
|
+
set?: string[];
|
|
19
|
+
noEnv?: boolean;
|
|
20
|
+
}): Promise<DiffResult>;
|
|
21
|
+
//# sourceMappingURL=diff-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-engine.d.ts","sourceRoot":"","sources":["../../src/core/diff-engine.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAoB5D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/D,OAAO,CAAC,UAAU,CAAC,CAiIrB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { loadManifest } from './manifest-loader.js';
|
|
4
|
+
import { validateSchema } from './schema-validator.js';
|
|
5
|
+
import { validateStructure } from './structural-validator.js';
|
|
6
|
+
import { resolveVariables } from './variable-resolver.js';
|
|
7
|
+
import { interpolate, buildToolsList } from './template-interpolator.js';
|
|
8
|
+
import { validateAgentIds } from './openclaw-paths.js';
|
|
9
|
+
import { loadState, listStates, computeFileHash } from './state-manager.js';
|
|
10
|
+
import { generateAgentsMd } from './agents-md-generator.js';
|
|
11
|
+
import { listFiles } from '../utils/fs.js';
|
|
12
|
+
import { computeMigrationPlan } from './migration-planner.js';
|
|
13
|
+
const TOKEN_RE = /\{\{\w+\}\}/;
|
|
14
|
+
function isBinaryBuffer(buf) {
|
|
15
|
+
const check = buf.subarray(0, 8192);
|
|
16
|
+
return check.includes(0);
|
|
17
|
+
}
|
|
18
|
+
function parseSets(sets) {
|
|
19
|
+
const result = {};
|
|
20
|
+
if (!sets)
|
|
21
|
+
return result;
|
|
22
|
+
for (const s of sets) {
|
|
23
|
+
const eq = s.indexOf('=');
|
|
24
|
+
if (eq === -1)
|
|
25
|
+
continue;
|
|
26
|
+
result[s.slice(0, eq)] = s.slice(eq + 1);
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
export class DiffValidationError extends Error {
|
|
31
|
+
constructor(message) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.name = 'DiffValidationError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function computeFormationDiff(formationPath, options) {
|
|
37
|
+
// 1. Parse + validate manifest
|
|
38
|
+
const manifest = await loadManifest(formationPath);
|
|
39
|
+
const schemaResult = await validateSchema(manifest);
|
|
40
|
+
if (!schemaResult.valid) {
|
|
41
|
+
const msgs = schemaResult.issues.map((i) => i.message).join('; ');
|
|
42
|
+
throw new DiffValidationError(`Schema validation failed: ${msgs}`);
|
|
43
|
+
}
|
|
44
|
+
const structResult = await validateStructure(manifest, formationPath);
|
|
45
|
+
if (!structResult.valid) {
|
|
46
|
+
const msgs = structResult.issues
|
|
47
|
+
.filter((i) => i.severity === 'error')
|
|
48
|
+
.map((i) => i.message)
|
|
49
|
+
.join('; ');
|
|
50
|
+
throw new DiffValidationError(`Structural validation failed: ${msgs}`);
|
|
51
|
+
}
|
|
52
|
+
const namespace = options.namespace ?? manifest.namespace;
|
|
53
|
+
const slugs = Object.keys(manifest.agents);
|
|
54
|
+
const idValidation = validateAgentIds(slugs, namespace);
|
|
55
|
+
if (!idValidation.valid) {
|
|
56
|
+
throw new DiffValidationError(`Agent ID validation failed: ${idValidation.errors.join('; ')}`);
|
|
57
|
+
}
|
|
58
|
+
// 2. Load existing state
|
|
59
|
+
const existingState = await loadState(namespace, manifest.name);
|
|
60
|
+
if (!existingState) {
|
|
61
|
+
const allStates = await listStates();
|
|
62
|
+
const byName = allStates.filter((s) => s.name === manifest.name);
|
|
63
|
+
if (byName.length === 1 && byName[0].namespace !== namespace) {
|
|
64
|
+
throw new DiffValidationError(`Formation installed under namespace "${byName[0].namespace}" but resolved namespace is "${namespace}". Use --namespace ${byName[0].namespace} to diff.`);
|
|
65
|
+
}
|
|
66
|
+
throw new DiffValidationError(`Formation "${namespace}/${manifest.name}" is not installed. Use reef install instead.`);
|
|
67
|
+
}
|
|
68
|
+
// 3. Resolve variables
|
|
69
|
+
const { resolved: resolvedVars, missing } = await resolveVariables(manifest.variables ?? {}, formationPath, {
|
|
70
|
+
interactive: false,
|
|
71
|
+
cliOverrides: parseSets(options.set),
|
|
72
|
+
noEnv: options.noEnv,
|
|
73
|
+
});
|
|
74
|
+
// State fallback for non-sensitive values
|
|
75
|
+
for (const name of Object.keys(manifest.variables ?? {})) {
|
|
76
|
+
if (resolvedVars[name] !== undefined)
|
|
77
|
+
continue;
|
|
78
|
+
const stateVal = existingState.variables[name];
|
|
79
|
+
if (stateVal !== undefined && !stateVal.startsWith('$')) {
|
|
80
|
+
resolvedVars[name] = stateVal;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const stillMissing = missing.filter((name) => resolvedVars[name] === undefined);
|
|
84
|
+
if (stillMissing.length > 0) {
|
|
85
|
+
throw new DiffValidationError(`Missing required variables: ${stillMissing.join(', ')}. Use --set KEY=VALUE or set them in .env / environment.`);
|
|
86
|
+
}
|
|
87
|
+
resolvedVars.namespace = namespace;
|
|
88
|
+
// 4. Compute file hashes for new source
|
|
89
|
+
const newFileHashes = {};
|
|
90
|
+
for (const [slug, agentDef] of Object.entries(manifest.agents)) {
|
|
91
|
+
const agentId = idValidation.ids.get(slug);
|
|
92
|
+
const sourceDir = join(formationPath, agentDef.source);
|
|
93
|
+
try {
|
|
94
|
+
const files = await listFiles(sourceDir);
|
|
95
|
+
for (const relativePath of files) {
|
|
96
|
+
const srcFile = join(sourceDir, relativePath);
|
|
97
|
+
const rawBytes = await readFile(srcFile);
|
|
98
|
+
let content;
|
|
99
|
+
if (isBinaryBuffer(rawBytes)) {
|
|
100
|
+
content = rawBytes;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const text = rawBytes.toString('utf-8');
|
|
104
|
+
if (TOKEN_RE.test(text)) {
|
|
105
|
+
const agentVars = {
|
|
106
|
+
...resolvedVars,
|
|
107
|
+
tools: buildToolsList(agentDef.tools?.allow, manifest.dependencies?.skills),
|
|
108
|
+
};
|
|
109
|
+
content = Buffer.from(interpolate(text, agentVars), 'utf-8');
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
content = Buffer.from(text, 'utf-8');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
newFileHashes[`${agentId}:${relativePath}`] = computeFileHash(content);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Source dir may not exist for this agent yet
|
|
120
|
+
}
|
|
121
|
+
// AGENTS.md hash if agent-to-agent configured
|
|
122
|
+
if (manifest.agentToAgent?.[slug]?.length) {
|
|
123
|
+
const agentsMd = generateAgentsMd(manifest, slug, namespace);
|
|
124
|
+
const buf = Buffer.from(agentsMd, 'utf-8');
|
|
125
|
+
newFileHashes[`${agentId}:AGENTS.md`] = computeFileHash(buf);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 5. Compute migration plan
|
|
129
|
+
const plan = computeMigrationPlan(existingState, manifest, namespace, idValidation.ids, newFileHashes);
|
|
130
|
+
return {
|
|
131
|
+
plan,
|
|
132
|
+
manifest,
|
|
133
|
+
state: existingState,
|
|
134
|
+
namespace,
|
|
135
|
+
idMap: idValidation.ids,
|
|
136
|
+
newFileHashes,
|
|
137
|
+
resolvedVars,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=diff-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-engine.js","sourceRoot":"","sources":["../../src/core/diff-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-client.d.ts","sourceRoot":"","sources":["../../src/core/gateway-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gateway-client.d.ts","sourceRoot":"","sources":["../../src/core/gateway-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import WebSocket from 'ws';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { loadOrCreateDeviceIdentity, signDevicePayload, publicKeyRawBase64Url, buildDeviceAuthPayload, loadDeviceAuthToken, storeDeviceAuthToken, } from './device-identity.js';
|
|
4
|
+
import { VERSION } from '../version.js';
|
|
4
5
|
const PROTOCOL_VERSION = 3;
|
|
5
6
|
const CLIENT_ID = 'cli';
|
|
6
7
|
const CLIENT_MODE = 'cli';
|
|
@@ -87,7 +88,7 @@ export class GatewayClient {
|
|
|
87
88
|
maxProtocol: PROTOCOL_VERSION,
|
|
88
89
|
client: {
|
|
89
90
|
id: CLIENT_ID,
|
|
90
|
-
version:
|
|
91
|
+
version: VERSION,
|
|
91
92
|
platform: process.platform,
|
|
92
93
|
mode: CLIENT_MODE,
|
|
93
94
|
},
|