@agentworkforce/cli 0.6.0 → 0.7.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.
@@ -0,0 +1,292 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, statSync } from 'node:fs';
3
+ import { basename, isAbsolute, join, normalize, relative, resolve as resolvePath } from 'node:path';
4
+ import { homedir, tmpdir } from 'node:os';
5
+ export function projectPersonaInstallDir(cwd = process.cwd()) {
6
+ return join(cwd, '.agentworkforce', 'workforce', 'personas');
7
+ }
8
+ export function isLocalInstallSource(source) {
9
+ const trimmed = source.trim();
10
+ return (trimmed.startsWith('.') ||
11
+ trimmed.startsWith('/') ||
12
+ trimmed.startsWith('~/') ||
13
+ trimmed.startsWith('~\\') ||
14
+ trimmed === '~' ||
15
+ /^[A-Za-z]:[\\/]/.test(trimmed) ||
16
+ trimmed.startsWith('\\\\'));
17
+ }
18
+ export function expandHomePath(input) {
19
+ if (input === '~')
20
+ return homedir();
21
+ if (input.startsWith('~/') || input.startsWith('~\\'))
22
+ return join(homedir(), input.slice(2));
23
+ return input;
24
+ }
25
+ function resolveLocalSource(source, cwd) {
26
+ const expanded = expandHomePath(source);
27
+ return isAbsolute(expanded) ? resolvePath(expanded) : resolvePath(cwd, expanded);
28
+ }
29
+ function isPlainObject(value) {
30
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
31
+ }
32
+ function assertDirectory(path, context) {
33
+ let stats;
34
+ try {
35
+ stats = statSync(path);
36
+ }
37
+ catch (err) {
38
+ throw new Error(`${context}: ${err.message}`);
39
+ }
40
+ if (!stats.isDirectory()) {
41
+ throw new Error(`${context}: path is not a directory: ${path}`);
42
+ }
43
+ }
44
+ function readPackageJson(packageRoot) {
45
+ const path = join(packageRoot, 'package.json');
46
+ if (!existsSync(path))
47
+ return undefined;
48
+ let parsed;
49
+ try {
50
+ parsed = JSON.parse(readFileSync(path, 'utf8'));
51
+ }
52
+ catch (err) {
53
+ throw new Error(`install: could not read ${path}: ${err.message}`);
54
+ }
55
+ if (!isPlainObject(parsed)) {
56
+ throw new Error(`install: ${path} must be a JSON object`);
57
+ }
58
+ return parsed;
59
+ }
60
+ function resolvePackageRelativeDir(packageRoot, relPath) {
61
+ if (isAbsolute(relPath)) {
62
+ throw new Error('install: package.json agentworkforce.personas must be a relative path');
63
+ }
64
+ const normalized = normalize(relPath);
65
+ const segments = normalized.split(/[\\/]+/).filter(Boolean);
66
+ if (segments.some((segment) => segment === '..')) {
67
+ throw new Error('install: package.json agentworkforce.personas must not contain ".."');
68
+ }
69
+ const resolved = resolvePath(packageRoot, normalized);
70
+ const fromRoot = relative(packageRoot, resolved);
71
+ if (fromRoot.startsWith('..') || isAbsolute(fromRoot)) {
72
+ throw new Error('install: package.json agentworkforce.personas must stay inside the package');
73
+ }
74
+ return resolved;
75
+ }
76
+ function resolvePersonaDir(packageRoot) {
77
+ const pkg = readPackageJson(packageRoot);
78
+ let personaRelPath = 'personas';
79
+ if (pkg?.agentworkforce !== undefined) {
80
+ if (!isPlainObject(pkg.agentworkforce)) {
81
+ throw new Error('install: package.json agentworkforce must be an object if provided');
82
+ }
83
+ if (pkg.agentworkforce.personas !== undefined) {
84
+ if (typeof pkg.agentworkforce.personas !== 'string' ||
85
+ !pkg.agentworkforce.personas.trim()) {
86
+ throw new Error('install: package.json agentworkforce.personas must be a non-empty string');
87
+ }
88
+ personaRelPath = pkg.agentworkforce.personas;
89
+ }
90
+ }
91
+ const personaDir = resolvePackageRelativeDir(packageRoot, personaRelPath);
92
+ assertDirectory(personaDir, 'install: persona directory');
93
+ return personaDir;
94
+ }
95
+ function collectJsonFiles(dir) {
96
+ const out = [];
97
+ const walk = (current) => {
98
+ const entries = readdirSync(current, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));
99
+ for (const entry of entries) {
100
+ const path = join(current, entry.name);
101
+ if (entry.isDirectory()) {
102
+ walk(path);
103
+ }
104
+ else if (entry.isFile() && entry.name.endsWith('.json')) {
105
+ out.push(path);
106
+ }
107
+ }
108
+ };
109
+ walk(dir);
110
+ return out;
111
+ }
112
+ function readPersonaId(path) {
113
+ let parsed;
114
+ try {
115
+ parsed = JSON.parse(readFileSync(path, 'utf8'));
116
+ }
117
+ catch (err) {
118
+ throw new Error(`install: could not read persona ${path}: ${err.message}`);
119
+ }
120
+ if (!isPlainObject(parsed)) {
121
+ throw new Error(`install: persona ${path} must be a JSON object`);
122
+ }
123
+ const id = parsed.id;
124
+ if (typeof id !== 'string' || !id.trim()) {
125
+ throw new Error(`install: persona ${path} must declare a non-empty string id`);
126
+ }
127
+ return id;
128
+ }
129
+ function dedupe(values) {
130
+ const seen = new Set();
131
+ const out = [];
132
+ for (const value of values) {
133
+ if (seen.has(value))
134
+ continue;
135
+ seen.add(value);
136
+ out.push(value);
137
+ }
138
+ return out;
139
+ }
140
+ function collectPersonas(personaDir, targetDir) {
141
+ const jsonFiles = collectJsonFiles(personaDir);
142
+ if (jsonFiles.length === 0) {
143
+ throw new Error(`install: no persona JSON files found in ${personaDir}`);
144
+ }
145
+ const byId = new Map();
146
+ const byFileName = new Map();
147
+ const personas = [];
148
+ for (const sourcePath of jsonFiles) {
149
+ const id = readPersonaId(sourcePath);
150
+ const existingIdPath = byId.get(id);
151
+ if (existingIdPath) {
152
+ throw new Error(`install: package contains duplicate persona id "${id}" in ${existingIdPath} and ${sourcePath}`);
153
+ }
154
+ byId.set(id, sourcePath);
155
+ const fileName = basename(sourcePath);
156
+ const existingFilePath = byFileName.get(fileName);
157
+ if (existingFilePath) {
158
+ throw new Error(`install: multiple persona files flatten to ${fileName}: ${existingFilePath} and ${sourcePath}`);
159
+ }
160
+ byFileName.set(fileName, sourcePath);
161
+ personas.push({
162
+ id,
163
+ sourcePath,
164
+ fileName,
165
+ targetPath: join(targetDir, fileName)
166
+ });
167
+ }
168
+ return personas;
169
+ }
170
+ function resolveRequestedPersonas(personas, requestedIds) {
171
+ if (requestedIds.length === 0)
172
+ return [...personas];
173
+ const requested = dedupe(requestedIds);
174
+ const byId = new Map(personas.map((persona) => [persona.id, persona]));
175
+ const missing = requested.filter((id) => !byId.has(id));
176
+ if (missing.length > 0) {
177
+ throw new Error(`install: persona id(s) not found in package: ${missing.join(', ')}`);
178
+ }
179
+ return requested.map((id) => byId.get(id));
180
+ }
181
+ function parseNpmPackStdout(stdout, packDir) {
182
+ const trimmed = stdout.trim();
183
+ if (!trimmed)
184
+ return undefined;
185
+ try {
186
+ const parsed = JSON.parse(trimmed);
187
+ if (Array.isArray(parsed) && parsed.length > 0 && isPlainObject(parsed[0])) {
188
+ const filename = parsed[0].filename;
189
+ if (typeof filename === 'string' && filename.trim()) {
190
+ return isAbsolute(filename) ? filename : join(packDir, filename);
191
+ }
192
+ }
193
+ }
194
+ catch {
195
+ // Fall back to scanning the pack destination below.
196
+ }
197
+ const lastLine = trimmed.split(/\r?\n/).filter(Boolean).at(-1);
198
+ if (!lastLine)
199
+ return undefined;
200
+ return isAbsolute(lastLine) ? lastLine : join(packDir, lastLine);
201
+ }
202
+ export function npmExecutable(platform = process.platform) {
203
+ return platform === 'win32' ? 'npm.cmd' : 'npm';
204
+ }
205
+ function defaultResolveNpmPackage(spec, tempDir) {
206
+ const packDir = join(tempDir, 'pack');
207
+ const unpackDir = join(tempDir, 'unpack');
208
+ mkdirSync(packDir, { recursive: true });
209
+ mkdirSync(unpackDir, { recursive: true });
210
+ const packed = spawnSync(npmExecutable(), ['pack', spec, '--pack-destination', packDir, '--json', '--ignore-scripts'], { encoding: 'utf8', shell: false });
211
+ if (packed.status !== 0) {
212
+ const detail = String(packed.stderr ?? '').trim() ||
213
+ String(packed.stdout ?? '').trim() ||
214
+ packed.error?.message ||
215
+ `exit ${packed.status ?? 'unknown'}`;
216
+ throw new Error(`install: npm pack failed for ${spec}: ${detail}`);
217
+ }
218
+ const tarballFromStdout = parseNpmPackStdout(String(packed.stdout ?? ''), packDir);
219
+ const tarball = tarballFromStdout && existsSync(tarballFromStdout)
220
+ ? tarballFromStdout
221
+ : readdirSync(packDir)
222
+ .filter((name) => name.endsWith('.tgz'))
223
+ .map((name) => join(packDir, name))[0];
224
+ if (!tarball) {
225
+ throw new Error(`install: npm pack did not produce a .tgz for ${spec}`);
226
+ }
227
+ const extracted = spawnSync('tar', ['-xzf', tarball, '-C', unpackDir], {
228
+ encoding: 'utf8',
229
+ shell: false
230
+ });
231
+ if (extracted.status !== 0) {
232
+ const detail = String(extracted.stderr ?? '').trim() ||
233
+ String(extracted.stdout ?? '').trim() ||
234
+ extracted.error?.message ||
235
+ `exit ${extracted.status ?? 'unknown'}`;
236
+ throw new Error(`install: could not unpack ${tarball}: ${detail}`);
237
+ }
238
+ return join(unpackDir, 'package');
239
+ }
240
+ export function installPersonas(options) {
241
+ const cwd = options.cwd ?? process.cwd();
242
+ const source = options.source.trim();
243
+ if (!source)
244
+ throw new Error('install: missing package or local path.');
245
+ const targetDir = projectPersonaInstallDir(cwd);
246
+ let tempDir;
247
+ let packageRoot;
248
+ try {
249
+ if (isLocalInstallSource(source)) {
250
+ packageRoot = resolveLocalSource(source, cwd);
251
+ assertDirectory(packageRoot, 'install: local source');
252
+ }
253
+ else {
254
+ tempDir = mkdtempSync(join(tmpdir(), 'agentworkforce-install-'));
255
+ const resolver = options.resolveNpmPackage ?? defaultResolveNpmPackage;
256
+ packageRoot = resolver(source, tempDir);
257
+ assertDirectory(packageRoot, 'install: npm package');
258
+ }
259
+ const personaDir = resolvePersonaDir(packageRoot);
260
+ const personas = collectPersonas(personaDir, targetDir);
261
+ const selected = resolveRequestedPersonas(personas, options.personaIds ?? []);
262
+ mkdirSync(targetDir, { recursive: true });
263
+ const installed = [];
264
+ const conflicts = [];
265
+ for (const persona of selected) {
266
+ if (existsSync(persona.targetPath) && options.overwrite !== true) {
267
+ conflicts.push({
268
+ id: persona.id,
269
+ targetPath: persona.targetPath,
270
+ fileName: persona.fileName
271
+ });
272
+ continue;
273
+ }
274
+ copyFileSync(persona.sourcePath, persona.targetPath);
275
+ installed.push(persona);
276
+ }
277
+ return {
278
+ source,
279
+ packageRoot,
280
+ personaDir,
281
+ targetDir,
282
+ installed,
283
+ conflicts
284
+ };
285
+ }
286
+ finally {
287
+ if (tempDir) {
288
+ rmSync(tempDir, { recursive: true, force: true });
289
+ }
290
+ }
291
+ }
292
+ //# sourceMappingURL=persona-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-install.js","sourceRoot":"","sources":["../src/persona-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=persona-install.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-install.test.d.ts","sourceRoot":"","sources":["../src/persona-install.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,223 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
4
+ import { homedir, tmpdir } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ import { loadLocalPersonas } from './local-personas.js';
7
+ import { expandHomePath, installPersonas, isLocalInstallSource, npmExecutable } from './persona-install.js';
8
+ function withTemp(fn) {
9
+ const root = mkdtempSync(join(tmpdir(), 'aw-persona-install-'));
10
+ try {
11
+ return fn(root);
12
+ }
13
+ finally {
14
+ rmSync(root, { recursive: true, force: true });
15
+ }
16
+ }
17
+ function writeJson(path, value) {
18
+ mkdirSync(dirname(path), { recursive: true });
19
+ writeFileSync(path, JSON.stringify(value, null, 2) + '\n', 'utf8');
20
+ }
21
+ function readJson(path) {
22
+ return JSON.parse(readFileSync(path, 'utf8'));
23
+ }
24
+ function fullPersona(id, description = `${id} persona`) {
25
+ const runtime = {
26
+ harness: 'codex',
27
+ model: 'gpt-5.2',
28
+ systemPrompt: `You are ${id}.`,
29
+ harnessSettings: { reasoning: 'medium', timeoutSeconds: 300 }
30
+ };
31
+ return {
32
+ id,
33
+ intent: 'review',
34
+ tags: ['review'],
35
+ description,
36
+ skills: [],
37
+ tiers: {
38
+ best: runtime,
39
+ 'best-value': runtime,
40
+ minimum: runtime
41
+ }
42
+ };
43
+ }
44
+ test('isLocalInstallSource: npm package specs with versions are not treated as paths', () => {
45
+ assert.equal(isLocalInstallSource('@scope/pkg@1.2.3'), false);
46
+ assert.equal(isLocalInstallSource('@scope/pkg@latest'), false);
47
+ assert.equal(isLocalInstallSource('./local-personas'), true);
48
+ assert.equal(isLocalInstallSource('/tmp/local-personas'), true);
49
+ assert.equal(isLocalInstallSource('~\\local-personas'), true);
50
+ assert.equal(isLocalInstallSource('C:\\packs\\personas'), true);
51
+ assert.equal(isLocalInstallSource('\\\\server\\share\\personas'), true);
52
+ assert.equal(expandHomePath('~\\local-personas'), join(homedir(), 'local-personas'));
53
+ });
54
+ test('npmExecutable: uses the Windows npm shim when shell is false', () => {
55
+ assert.equal(npmExecutable('win32'), 'npm.cmd');
56
+ assert.equal(npmExecutable('darwin'), 'npm');
57
+ });
58
+ test('cleans npm temp directory when package resolution throws', () => {
59
+ withTemp((root) => {
60
+ let capturedTempDir;
61
+ assert.throws(() => installPersonas({
62
+ source: '@example/personas',
63
+ cwd: join(root, 'project'),
64
+ resolveNpmPackage: (_spec, tempDir) => {
65
+ capturedTempDir = tempDir;
66
+ assert.ok(existsSync(tempDir));
67
+ throw new Error('resolver failed');
68
+ }
69
+ }), /resolver failed/);
70
+ assert.ok(capturedTempDir);
71
+ assert.equal(existsSync(capturedTempDir), false);
72
+ });
73
+ });
74
+ test('installs multiple personas from a local fixture package', () => {
75
+ withTemp((root) => {
76
+ const project = join(root, 'project');
77
+ const pack = join(root, 'pack');
78
+ writeJson(join(pack, 'personas', 'alpha.json'), fullPersona('alpha'));
79
+ writeJson(join(pack, 'personas', 'beta.json'), fullPersona('beta'));
80
+ const result = installPersonas({ source: pack, cwd: project });
81
+ assert.equal(result.installed.length, 2);
82
+ assert.equal(result.conflicts.length, 0);
83
+ assert.ok(existsSync(join(project, '.agentworkforce', 'workforce', 'personas', 'alpha.json')));
84
+ assert.ok(existsSync(join(project, '.agentworkforce', 'workforce', 'personas', 'beta.json')));
85
+ });
86
+ });
87
+ test('reads package.json agentworkforce.personas metadata', () => {
88
+ withTemp((root) => {
89
+ const project = join(root, 'project');
90
+ const pack = join(root, 'pack');
91
+ writeJson(join(pack, 'package.json'), {
92
+ name: '@example/personas',
93
+ version: '1.0.0',
94
+ agentworkforce: { personas: 'agent-definitions' }
95
+ });
96
+ writeJson(join(pack, 'agent-definitions', 'metadata-persona.json'), fullPersona('metadata-persona'));
97
+ const result = installPersonas({ source: pack, cwd: project });
98
+ assert.equal(result.personaDir, join(pack, 'agent-definitions'));
99
+ assert.ok(existsSync(join(project, '.agentworkforce', 'workforce', 'personas', 'metadata-persona.json')));
100
+ });
101
+ });
102
+ test('falls back to top-level personas directory when metadata is absent', () => {
103
+ withTemp((root) => {
104
+ const project = join(root, 'project');
105
+ const pack = join(root, 'pack');
106
+ writeJson(join(pack, 'package.json'), {
107
+ name: '@example/personas',
108
+ version: '1.0.0'
109
+ });
110
+ writeJson(join(pack, 'personas', 'fallback.json'), fullPersona('fallback'));
111
+ const result = installPersonas({ source: pack, cwd: project });
112
+ assert.equal(result.personaDir, join(pack, 'personas'));
113
+ assert.ok(existsSync(join(project, '.agentworkforce', 'workforce', 'personas', 'fallback.json')));
114
+ });
115
+ });
116
+ test('refuses to overwrite an existing persona file by default', () => {
117
+ withTemp((root) => {
118
+ const project = join(root, 'project');
119
+ const pack = join(root, 'pack');
120
+ const target = join(project, '.agentworkforce', 'workforce', 'personas', 'conflict.json');
121
+ writeJson(target, { id: 'conflict', local: true });
122
+ writeJson(join(pack, 'personas', 'conflict.json'), fullPersona('conflict', 'upstream'));
123
+ const result = installPersonas({ source: pack, cwd: project });
124
+ assert.equal(result.installed.length, 0);
125
+ assert.deepEqual(result.conflicts.map((c) => c.id), ['conflict']);
126
+ assert.deepEqual(readJson(target), { id: 'conflict', local: true });
127
+ });
128
+ });
129
+ test('--overwrite replaces existing persona files', () => {
130
+ withTemp((root) => {
131
+ const project = join(root, 'project');
132
+ const pack = join(root, 'pack');
133
+ const target = join(project, '.agentworkforce', 'workforce', 'personas', 'replace-me.json');
134
+ writeJson(target, { id: 'replace-me', description: 'old' });
135
+ writeJson(join(pack, 'personas', 'replace-me.json'), fullPersona('replace-me', 'new'));
136
+ const result = installPersonas({ source: pack, cwd: project, overwrite: true });
137
+ assert.equal(result.installed.length, 1);
138
+ assert.equal(result.conflicts.length, 0);
139
+ assert.equal(readJson(target).description, 'new');
140
+ });
141
+ });
142
+ test('relative local path installs work end-to-end', () => {
143
+ withTemp((root) => {
144
+ const project = join(root, 'project');
145
+ const pack = join(project, 'local-personas');
146
+ writeJson(join(pack, 'personas', 'relative.json'), fullPersona('relative'));
147
+ const result = installPersonas({ source: './local-personas', cwd: project });
148
+ assert.equal(result.installed.length, 1);
149
+ assert.ok(existsSync(join(project, '.agentworkforce', 'workforce', 'personas', 'relative.json')));
150
+ });
151
+ });
152
+ test('--persona installs only requested ids and supports repeated selections', () => {
153
+ withTemp((root) => {
154
+ const project = join(root, 'project');
155
+ const pack = join(root, 'pack');
156
+ writeJson(join(pack, 'personas', 'alpha.json'), fullPersona('alpha'));
157
+ writeJson(join(pack, 'personas', 'beta.json'), fullPersona('beta'));
158
+ writeJson(join(pack, 'personas', 'gamma.json'), fullPersona('gamma'));
159
+ const result = installPersonas({
160
+ source: pack,
161
+ cwd: project,
162
+ personaIds: ['gamma', 'alpha']
163
+ });
164
+ assert.deepEqual(result.installed.map((p) => p.id), ['gamma', 'alpha']);
165
+ const targetDir = join(project, '.agentworkforce', 'workforce', 'personas');
166
+ assert.ok(existsSync(join(targetDir, 'alpha.json')));
167
+ assert.ok(!existsSync(join(targetDir, 'beta.json')));
168
+ assert.ok(existsSync(join(targetDir, 'gamma.json')));
169
+ });
170
+ });
171
+ test('--persona unknown id fails before copying anything', () => {
172
+ withTemp((root) => {
173
+ const project = join(root, 'project');
174
+ const pack = join(root, 'pack');
175
+ writeJson(join(pack, 'personas', 'alpha.json'), fullPersona('alpha'));
176
+ assert.throws(() => installPersonas({ source: pack, cwd: project, personaIds: ['missing'] }), /missing/);
177
+ assert.ok(!existsSync(join(project, '.agentworkforce', 'workforce', 'personas', 'alpha.json')));
178
+ });
179
+ });
180
+ test('flattens nested persona file layouts into the target personas directory', () => {
181
+ withTemp((root) => {
182
+ const project = join(root, 'project');
183
+ const pack = join(root, 'pack');
184
+ writeJson(join(pack, 'personas', 'nested', 'deep.json'), fullPersona('deep'));
185
+ installPersonas({ source: pack, cwd: project });
186
+ const targetDir = join(project, '.agentworkforce', 'workforce', 'personas');
187
+ assert.ok(existsSync(join(targetDir, 'deep.json')));
188
+ assert.ok(!existsSync(join(targetDir, 'nested', 'deep.json')));
189
+ });
190
+ });
191
+ test('filename collisions across installed packages conflict, then overwrite when requested', () => {
192
+ withTemp((root) => {
193
+ const project = join(root, 'project');
194
+ const packA = join(root, 'pack-a');
195
+ const packB = join(root, 'pack-b');
196
+ const target = join(project, '.agentworkforce', 'workforce', 'personas', 'code-reviewer.json');
197
+ writeJson(join(packA, 'personas', 'code-reviewer.json'), fullPersona('reviewer-a', 'from a'));
198
+ writeJson(join(packB, 'personas', 'code-reviewer.json'), fullPersona('reviewer-b', 'from b'));
199
+ installPersonas({ source: packA, cwd: project });
200
+ const conflict = installPersonas({ source: packB, cwd: project });
201
+ assert.deepEqual(conflict.conflicts.map((c) => c.fileName), ['code-reviewer.json']);
202
+ assert.equal(readJson(target).description, 'from a');
203
+ const overwritten = installPersonas({ source: packB, cwd: project, overwrite: true });
204
+ assert.equal(overwritten.conflicts.length, 0);
205
+ assert.equal(readJson(target).description, 'from b');
206
+ });
207
+ });
208
+ test('installed standalone personas are loaded through the cwd cascade', () => {
209
+ withTemp((root) => {
210
+ const project = join(root, 'project');
211
+ const pack = join(root, 'pack');
212
+ writeJson(join(pack, 'personas', 'pack-reviewer.json'), fullPersona('pack-reviewer'));
213
+ installPersonas({ source: pack, cwd: project });
214
+ const loaded = loadLocalPersonas({
215
+ cwd: project,
216
+ homeDir: join(root, 'home', '.agentworkforce', 'workforce', 'personas')
217
+ });
218
+ assert.deepEqual(loaded.warnings, []);
219
+ assert.ok(loaded.byId.has('pack-reviewer'));
220
+ assert.equal(loaded.sources.get('pack-reviewer'), 'cwd');
221
+ });
222
+ });
223
+ //# sourceMappingURL=persona-install.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-install.test.js","sourceRoot":"","sources":["../src/persona-install.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentworkforce/cli",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "files": [
@@ -12,8 +12,8 @@
12
12
  "dependencies": {
13
13
  "@relayfile/local-mount": "^0.6.1",
14
14
  "ora": "^9.4.0",
15
- "@agentworkforce/harness-kit": "0.6.0",
16
- "@agentworkforce/workload-router": "0.6.0"
15
+ "@agentworkforce/harness-kit": "0.7.0",
16
+ "@agentworkforce/workload-router": "0.7.0"
17
17
  },
18
18
  "repository": {
19
19
  "type": "git",