@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
package/dist/index.js CHANGED
@@ -4,11 +4,18 @@ import { inspect } from './commands/inspect.js';
4
4
  import { validate } from './commands/validate.js';
5
5
  import { init } from './commands/init.js';
6
6
  import { pack } from './commands/pack.js';
7
+ import { install } from './commands/install.js';
8
+ import { uninstall } from './commands/uninstall.js';
9
+ import { list } from './commands/list.js';
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';
7
14
  const program = new Command();
8
15
  program
9
16
  .name('reef')
10
17
  .description('OpenReef CLI — package and deploy multi-agent formations')
11
- .version('0.1.1');
18
+ .version('0.3.0');
12
19
  program
13
20
  .command('init [name]')
14
21
  .description('Scaffold a new formation from the bundled template')
@@ -65,5 +72,130 @@ program
65
72
  process.exit(1);
66
73
  }
67
74
  });
75
+ program
76
+ .command('install <path>')
77
+ .description('Deploy a formation to OpenClaw')
78
+ .option('--set <key=value...>', 'Set variable values')
79
+ .option('--namespace <ns>', 'Override namespace (default: manifest.namespace)')
80
+ .option('--force', 'Remove existing resources and recreate')
81
+ .option('--merge', 'Update files only, preserve agent config')
82
+ .option('--yes', 'Skip confirmation prompts')
83
+ .option('--no-env', 'Skip loading .env file')
84
+ .option('--dry-run', 'Preview changes without applying them')
85
+ .option('--gateway-url <url>', 'Gateway WebSocket URL')
86
+ .option('--gateway-token <token>', 'Gateway auth token')
87
+ .option('--gateway-password <password>', 'Gateway auth password')
88
+ .action(async (path, options) => {
89
+ try {
90
+ await install(path, options);
91
+ }
92
+ catch (err) {
93
+ console.error(err instanceof Error ? err.message : err);
94
+ process.exit(1);
95
+ }
96
+ });
97
+ program
98
+ .command('uninstall <identifier>')
99
+ .description('Remove an installed formation (namespace/name or name)')
100
+ .option('--yes', 'Skip confirmation')
101
+ .option('--dry-run', 'Preview changes without applying them')
102
+ .option('--gateway-url <url>', 'Gateway WebSocket URL')
103
+ .option('--gateway-token <token>', 'Gateway auth token')
104
+ .option('--gateway-password <password>', 'Gateway auth password')
105
+ .action(async (identifier, options) => {
106
+ try {
107
+ await uninstall(identifier, options);
108
+ }
109
+ catch (err) {
110
+ console.error(err instanceof Error ? err.message : err);
111
+ process.exit(1);
112
+ }
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
+ });
171
+ program
172
+ .command('list')
173
+ .description('List installed formations')
174
+ .option('--json', 'Output as JSON')
175
+ .action(async (options) => {
176
+ try {
177
+ await list(options);
178
+ }
179
+ catch (err) {
180
+ console.error(err instanceof Error ? err.message : err);
181
+ process.exit(1);
182
+ }
183
+ });
184
+ program
185
+ .command('status <identifier>')
186
+ .description('Show status of an installed formation (namespace/name or name)')
187
+ .option('--json', 'Output as JSON')
188
+ .option('--gateway-url <url>', 'Gateway WebSocket URL')
189
+ .option('--gateway-token <token>', 'Gateway auth token')
190
+ .option('--gateway-password <password>', 'Gateway auth password')
191
+ .action(async (identifier, options) => {
192
+ try {
193
+ await status(identifier, options);
194
+ }
195
+ catch (err) {
196
+ console.error(err instanceof Error ? err.message : err);
197
+ process.exit(1);
198
+ }
199
+ });
68
200
  program.parse();
69
201
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface FormationState {
2
+ name: string;
3
+ version: string;
4
+ namespace: string;
5
+ installedAt: string;
6
+ agents: Record<string, AgentState>;
7
+ bindings: OpenClawBinding[];
8
+ cronJobs: CronJobState[];
9
+ variables: Record<string, string>;
10
+ fileHashes: Record<string, string>;
11
+ agentToAgent?: {
12
+ wasEnabled: boolean;
13
+ allowAdded: boolean;
14
+ };
15
+ sourcePath?: string;
16
+ updatedAt?: string;
17
+ agentToAgentEdges?: Record<string, string[]>;
18
+ }
19
+ export interface AgentState {
20
+ id: string;
21
+ slug: string;
22
+ workspace: string;
23
+ files: string[];
24
+ model?: string | {
25
+ primary?: string;
26
+ fallbacks?: string[];
27
+ };
28
+ configTools?: Record<string, unknown>;
29
+ configSandbox?: Record<string, unknown>;
30
+ configIdentity?: Record<string, unknown>;
31
+ configSkills?: string[];
32
+ }
33
+ export interface CronJobState {
34
+ id: string;
35
+ name: string;
36
+ agentSlug: string;
37
+ schedule?: string;
38
+ timezone?: string;
39
+ prompt?: string;
40
+ }
41
+ export interface OpenClawBinding {
42
+ agentId: string;
43
+ match: {
44
+ channel: string;
45
+ accountId?: string;
46
+ peer?: {
47
+ kind: string;
48
+ id: string;
49
+ };
50
+ guildId?: string;
51
+ teamId?: string;
52
+ roles?: string[];
53
+ };
54
+ }
55
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE;QACb,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { FormationState } from '../types/state.js';
2
+ export declare class FormationNotFoundError extends Error {
3
+ constructor(identifier: string);
4
+ }
5
+ export declare class AmbiguousFormationError extends Error {
6
+ matches: FormationState[];
7
+ constructor(name: string, matches: FormationState[]);
8
+ }
9
+ export declare function parseIdentifier(identifier: string): {
10
+ namespace?: string;
11
+ name: string;
12
+ };
13
+ /**
14
+ * Resolve an identifier (namespace/name or bare name) to a FormationState.
15
+ * Throws FormationNotFoundError if no match, AmbiguousFormationError if >1 match.
16
+ */
17
+ export declare function resolveFormationState(identifier: string, env?: NodeJS.ProcessEnv): Promise<FormationState>;
18
+ //# sourceMappingURL=identifiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../src/utils/identifiers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,UAAU,EAAE,MAAM;CAI/B;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,OAAO,EAAE,cAAc,EAAE,CAAC;gBACd,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;CAKpD;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,GACjB;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAStC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,OAAO,CAAC,cAAc,CAAC,CAuBzB"}
@@ -0,0 +1,50 @@
1
+ import { loadState, listStates } from '../core/state-manager.js';
2
+ export class FormationNotFoundError extends Error {
3
+ constructor(identifier) {
4
+ super(`Formation "${identifier}" not found.`);
5
+ this.name = 'FormationNotFoundError';
6
+ }
7
+ }
8
+ export class AmbiguousFormationError extends Error {
9
+ matches;
10
+ constructor(name, matches) {
11
+ super(`Multiple formations named "${name}" found.`);
12
+ this.name = 'AmbiguousFormationError';
13
+ this.matches = matches;
14
+ }
15
+ }
16
+ export function parseIdentifier(identifier) {
17
+ const slash = identifier.indexOf('/');
18
+ if (slash !== -1) {
19
+ return {
20
+ namespace: identifier.slice(0, slash),
21
+ name: identifier.slice(slash + 1),
22
+ };
23
+ }
24
+ return { name: identifier };
25
+ }
26
+ /**
27
+ * Resolve an identifier (namespace/name or bare name) to a FormationState.
28
+ * Throws FormationNotFoundError if no match, AmbiguousFormationError if >1 match.
29
+ */
30
+ export async function resolveFormationState(identifier, env) {
31
+ const parsed = parseIdentifier(identifier);
32
+ if (parsed.namespace) {
33
+ const state = await loadState(parsed.namespace, parsed.name, env);
34
+ if (!state) {
35
+ throw new FormationNotFoundError(identifier);
36
+ }
37
+ return state;
38
+ }
39
+ // Search all states for unique match by name
40
+ const allStates = await listStates(env);
41
+ const matches = allStates.filter((s) => s.name === parsed.name);
42
+ if (matches.length === 0) {
43
+ throw new FormationNotFoundError(parsed.name);
44
+ }
45
+ if (matches.length > 1) {
46
+ throw new AmbiguousFormationError(parsed.name, matches);
47
+ }
48
+ return matches[0];
49
+ }
50
+ //# sourceMappingURL=identifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/utils/identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGjE,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,UAAkB;QAC5B,KAAK,CAAC,cAAc,UAAU,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,OAAO,CAAmB;IAC1B,YAAY,IAAY,EAAE,OAAyB;QACjD,KAAK,CAAC,8BAA8B,IAAI,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAC7B,UAAkB;IAElB,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO;YACL,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YACrC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;SAClC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,GAAuB;IAEvB,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6CAA6C;IAC7C,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openreef/cli",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "CLI toolchain for OpenReef formations — package and deploy multi-agent teams",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,17 +22,20 @@
22
22
  "smoke": "npm run build && reef validate ./template && reef init smoke-test --yes && reef validate ./smoke-test && reef pack ./smoke-test"
23
23
  },
24
24
  "dependencies": {
25
+ "@inquirer/prompts": "^8.2.1",
25
26
  "ajv": "^8.18.0",
26
27
  "ajv-formats": "^3.0.1",
27
28
  "chalk": "^5.6.2",
28
29
  "commander": "^14.0.3",
29
30
  "dotenv": "^17.3.1",
30
- "@inquirer/prompts": "^8.2.1",
31
+ "json5": "^2.2.3",
31
32
  "ora": "^9.3.0",
32
- "tar": "^7.5.7"
33
+ "tar": "^7.5.7",
34
+ "ws": "^8.19.0"
33
35
  },
34
36
  "devDependencies": {
35
37
  "@types/node": "^22.0.0",
38
+ "@types/ws": "^8.18.1",
36
39
  "json-schema-to-ts": "^3.1.1",
37
40
  "typescript": "^5.9.3",
38
41
  "vitest": "^4.0.18"
@@ -7,9 +7,9 @@
7
7
  "author": "TODO: Your name or organization",
8
8
  "namespace": "my-formation",
9
9
  "variables": {
10
- "OPENAI_API_KEY": {
10
+ "ANTHROPIC_API_KEY": {
11
11
  "type": "string",
12
- "description": "OpenAI API key for LLM calls",
12
+ "description": "Anthropic API key for LLM calls",
13
13
  "required": true,
14
14
  "sensitive": true
15
15
  },
@@ -26,7 +26,7 @@
26
26
  "source": "agents/manager",
27
27
  "description": "Coordinates the team, delegates tasks, and synthesizes results",
28
28
  "role": "coordinator",
29
- "model": "gpt-4o",
29
+ "model": "anthropic/claude-opus-4-6",
30
30
  "tools": {
31
31
  "allow": ["web-search", "file-read"]
32
32
  },
@@ -39,7 +39,7 @@
39
39
  "source": "agents/researcher",
40
40
  "description": "Conducts deep research on assigned topics and reports findings",
41
41
  "role": "researcher",
42
- "model": "gpt-4o",
42
+ "model": "anthropic/claude-sonnet-4-5",
43
43
  "tools": {
44
44
  "allow": ["web-search"]
45
45
  },
@@ -68,8 +68,8 @@
68
68
  },
69
69
  "services": [
70
70
  {
71
- "name": "OpenAI API",
72
- "url": "https://platform.openai.com",
71
+ "name": "Anthropic API",
72
+ "url": "https://console.anthropic.com",
73
73
  "required": true,
74
74
  "description": "LLM provider for all agents"
75
75
  }