@agentworkforce/persona-kit 0.19.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 (90) hide show
  1. package/README.md +93 -0
  2. package/dist/config-files.d.ts +21 -0
  3. package/dist/config-files.d.ts.map +1 -0
  4. package/dist/config-files.js +81 -0
  5. package/dist/config-files.js.map +1 -0
  6. package/dist/constants.d.ts +20 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +78 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/detect.d.ts +28 -0
  11. package/dist/detect.d.ts.map +1 -0
  12. package/dist/detect.js +63 -0
  13. package/dist/detect.js.map +1 -0
  14. package/dist/env-refs.d.ts +56 -0
  15. package/dist/env-refs.d.ts.map +1 -0
  16. package/dist/env-refs.js +105 -0
  17. package/dist/env-refs.js.map +1 -0
  18. package/dist/env-refs.test.d.ts +2 -0
  19. package/dist/env-refs.test.d.ts.map +1 -0
  20. package/dist/env-refs.test.js +84 -0
  21. package/dist/env-refs.test.js.map +1 -0
  22. package/dist/execute.d.ts +47 -0
  23. package/dist/execute.d.ts.map +1 -0
  24. package/dist/execute.js +68 -0
  25. package/dist/execute.js.map +1 -0
  26. package/dist/execute.test.d.ts +2 -0
  27. package/dist/execute.test.d.ts.map +1 -0
  28. package/dist/execute.test.js +255 -0
  29. package/dist/execute.test.js.map +1 -0
  30. package/dist/index.d.ts +16 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +26 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/index.test.d.ts +2 -0
  35. package/dist/index.test.d.ts.map +1 -0
  36. package/dist/index.test.js +234 -0
  37. package/dist/index.test.js.map +1 -0
  38. package/dist/inputs.d.ts +13 -0
  39. package/dist/inputs.d.ts.map +1 -0
  40. package/dist/inputs.js +57 -0
  41. package/dist/inputs.js.map +1 -0
  42. package/dist/inputs.test.d.ts +2 -0
  43. package/dist/inputs.test.d.ts.map +1 -0
  44. package/dist/inputs.test.js +51 -0
  45. package/dist/inputs.test.js.map +1 -0
  46. package/dist/interactive-spec.d.ts +117 -0
  47. package/dist/interactive-spec.d.ts.map +1 -0
  48. package/dist/interactive-spec.js +260 -0
  49. package/dist/interactive-spec.js.map +1 -0
  50. package/dist/interactive-spec.test.d.ts +2 -0
  51. package/dist/interactive-spec.test.d.ts.map +1 -0
  52. package/dist/interactive-spec.test.js +308 -0
  53. package/dist/interactive-spec.test.js.map +1 -0
  54. package/dist/mcp.d.ts +35 -0
  55. package/dist/mcp.d.ts.map +1 -0
  56. package/dist/mcp.js +86 -0
  57. package/dist/mcp.js.map +1 -0
  58. package/dist/mount.d.ts +44 -0
  59. package/dist/mount.d.ts.map +1 -0
  60. package/dist/mount.js +51 -0
  61. package/dist/mount.js.map +1 -0
  62. package/dist/parse.d.ts +47 -0
  63. package/dist/parse.d.ts.map +1 -0
  64. package/dist/parse.js +475 -0
  65. package/dist/parse.js.map +1 -0
  66. package/dist/plan.d.ts +118 -0
  67. package/dist/plan.d.ts.map +1 -0
  68. package/dist/plan.js +150 -0
  69. package/dist/plan.js.map +1 -0
  70. package/dist/plan.test.d.ts +2 -0
  71. package/dist/plan.test.d.ts.map +1 -0
  72. package/dist/plan.test.js +191 -0
  73. package/dist/plan.test.js.map +1 -0
  74. package/dist/sidecars.d.ts +17 -0
  75. package/dist/sidecars.d.ts.map +1 -0
  76. package/dist/sidecars.js +101 -0
  77. package/dist/sidecars.js.map +1 -0
  78. package/dist/skill-runner.d.ts +30 -0
  79. package/dist/skill-runner.d.ts.map +1 -0
  80. package/dist/skill-runner.js +94 -0
  81. package/dist/skill-runner.js.map +1 -0
  82. package/dist/skills.d.ts +41 -0
  83. package/dist/skills.d.ts.map +1 -0
  84. package/dist/skills.js +322 -0
  85. package/dist/skills.js.map +1 -0
  86. package/dist/types.d.ts +321 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +2 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +37 -0
@@ -0,0 +1,84 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { MissingEnvRefError, makeEnvRefResolver, makeLenientResolver, resolveStringMap, resolveStringMapLenient } from './env-refs.js';
4
+ test('resolves $VAR references against the provided env', () => {
5
+ const resolve = makeEnvRefResolver({ FOO: 'hello' });
6
+ assert.equal(resolve('$FOO', 'x'), 'hello');
7
+ });
8
+ test('passes literal strings through untouched', () => {
9
+ const resolve = makeEnvRefResolver({ FOO: 'hello' });
10
+ assert.equal(resolve('plain literal', 'x'), 'plain literal');
11
+ assert.equal(resolve('Bearer hello-world', 'x'), 'Bearer hello-world');
12
+ });
13
+ test('refuses un-braced partial interpolation — prefix-$VAR stays literal', () => {
14
+ // Unbraced `$VAR` mid-string is kept as-is so a stray `$` in a JSON value
15
+ // doesn't get eaten by accident. Use ${VAR} for partial interpolation.
16
+ const resolve = makeEnvRefResolver({ FOO: 'hello' });
17
+ assert.equal(resolve('prefix-$FOO', 'x'), 'prefix-$FOO');
18
+ });
19
+ test('resolves braced ${VAR} interpolation anywhere in a string', () => {
20
+ const resolve = makeEnvRefResolver({ POSTHOG_API_KEY: 'phx_abc' });
21
+ assert.equal(resolve('Bearer ${POSTHOG_API_KEY}', 'auth'), 'Bearer phx_abc');
22
+ assert.equal(resolve('${POSTHOG_API_KEY}-suffix', 'x'), 'phx_abc-suffix');
23
+ assert.equal(resolve('${POSTHOG_API_KEY}', 'x'), 'phx_abc');
24
+ });
25
+ test('interpolates multiple ${VAR} occurrences in the same string', () => {
26
+ const resolve = makeEnvRefResolver({ A: 'one', B: 'two' });
27
+ assert.equal(resolve('${A}-${B}-${A}', 'x'), 'one-two-one');
28
+ });
29
+ test('missing ${VAR} inside a longer string errors with the field and var', () => {
30
+ const resolve = makeEnvRefResolver({ FOO: 'ok' });
31
+ assert.throws(() => resolve('Bearer ${MISSING_KEY}', 'headers.Authorization'), (err) => err instanceof MissingEnvRefError &&
32
+ err.ref === 'MISSING_KEY' &&
33
+ err.referencedBy === 'headers.Authorization');
34
+ });
35
+ test('throws MissingEnvRefError with the referenced name and field', () => {
36
+ const resolve = makeEnvRefResolver({});
37
+ assert.throws(() => resolve('$POSTHOG_API_KEY', 'env.POSTHOG_API_KEY'), (err) => err instanceof MissingEnvRefError &&
38
+ err.ref === 'POSTHOG_API_KEY' &&
39
+ err.referencedBy === 'env.POSTHOG_API_KEY');
40
+ });
41
+ test('treats empty-string env vars as missing (explicit unset)', () => {
42
+ const resolve = makeEnvRefResolver({ FOO: '' });
43
+ assert.throws(() => resolve('$FOO', 'x'), MissingEnvRefError);
44
+ });
45
+ test('resolveStringMap walks every value and reports the originating field', () => {
46
+ const result = resolveStringMap({ A: '$FOO', B: 'literal' }, { FOO: 'ok' }, 'env');
47
+ assert.deepEqual(result, { A: 'ok', B: 'literal' });
48
+ assert.throws(() => resolveStringMap({ X: '$MISSING' }, {}, 'env'), (err) => err instanceof MissingEnvRefError &&
49
+ err.ref === 'MISSING' &&
50
+ err.referencedBy === 'env.X');
51
+ });
52
+ test('resolveStringMap returns undefined for undefined input', () => {
53
+ assert.equal(resolveStringMap(undefined, {}, 'env'), undefined);
54
+ });
55
+ test('lenient resolver reports missing refs instead of throwing', () => {
56
+ const resolve = makeLenientResolver({ FOO: 'ok' });
57
+ assert.deepEqual(resolve('$FOO', 'x'), { ok: true, value: 'ok' });
58
+ assert.deepEqual(resolve('$MISSING', 'env.K'), {
59
+ ok: false,
60
+ field: 'env.K',
61
+ ref: 'MISSING'
62
+ });
63
+ assert.deepEqual(resolve('Bearer ${MISSING_KEY}', 'headers.Auth'), {
64
+ ok: false,
65
+ field: 'headers.Auth',
66
+ ref: 'MISSING_KEY'
67
+ });
68
+ });
69
+ test('resolveStringMapLenient drops missing entries and reports them', () => {
70
+ const result = resolveStringMapLenient({
71
+ PRESENT: '$FOO',
72
+ MISSING: '$NOPE',
73
+ LITERAL: 'plain',
74
+ PARTIAL_MISSING: 'Bearer ${NO_KEY}'
75
+ }, { FOO: 'value' }, 'env');
76
+ assert.deepEqual(result.value, { PRESENT: 'value', LITERAL: 'plain' });
77
+ assert.deepEqual(result.dropped.map((d) => `${d.field}:${d.ref}`).sort(), ['env.MISSING:NOPE', 'env.PARTIAL_MISSING:NO_KEY']);
78
+ });
79
+ test('resolveStringMapLenient returns value=undefined when all entries dropped', () => {
80
+ const result = resolveStringMapLenient({ A: '$MISSING' }, {}, 'env');
81
+ assert.equal(result.value, undefined);
82
+ assert.equal(result.dropped.length, 1);
83
+ });
84
+ //# sourceMappingURL=env-refs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-refs.test.js","sourceRoot":"","sources":["../src/env-refs.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type ApplyPersonaMountOptions } from './mount.js';
2
+ import type { PersonaSpawnPlan } from './plan.js';
3
+ export interface ExecutionHandle {
4
+ /** The cwd the harness should be spawned in (mount root if mounted). */
5
+ readonly cwd: string;
6
+ /**
7
+ * Reverse every side effect in LIFO order. Idempotent; safe to call twice.
8
+ * Best-effort: a failure inside one disposer does not prevent the others
9
+ * from running.
10
+ */
11
+ dispose(): Promise<void>;
12
+ }
13
+ export interface ExecuteOptions {
14
+ /** Working directory for skill installs and sidecar writes. */
15
+ cwd: string;
16
+ /**
17
+ * Whether to remove `.claude/skills/` and friends when `dispose()` runs.
18
+ * Default true — leaving someone's repo with a half-installed skills dir
19
+ * after a one-shot spawn is the bigger surprise.
20
+ */
21
+ cleanupSkillsOnDispose?: boolean;
22
+ /**
23
+ * Mount-specific options forwarded to {@link applyPersonaMount} when the
24
+ * plan carries a {@link PersonaSpawnPlan.mount} policy. Required in that
25
+ * case — the executor cannot guess a mountDir.
26
+ */
27
+ mount?: Omit<ApplyPersonaMountOptions, 'cwd'>;
28
+ }
29
+ /**
30
+ * Run the plan's side effects in deterministic order with abort-on-failure.
31
+ * After this returns successfully, the harness can be spawned at
32
+ * `handle.cwd` with `plan.cli` + `plan.args` and `plan.env`.
33
+ *
34
+ * Order:
35
+ * 1. {@link applyPersonaMount} — mount policy first; everything else
36
+ * writes into the resulting cwd.
37
+ * 2. {@link runSkillInstalls} — install before sidecars/configFiles so a
38
+ * failing skill doesn't strand a half-written sidecar on disk.
39
+ * 3. {@link writePersonaSidecars} — claudeMd / agentsMd to disk with
40
+ * restore tracking.
41
+ * 4. {@link materializePersonaConfigFiles} — opencode.json and friends.
42
+ *
43
+ * If any step throws, prior steps' handles are disposed in LIFO order
44
+ * before the original error propagates. Callers never see partial state.
45
+ */
46
+ export declare function executePersonaSpawnPlan(plan: PersonaSpawnPlan, options: ExecuteOptions): Promise<ExecutionHandle>;
47
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,YAAY,CAAC;AAOpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;CAC/C;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CA4C1B"}
@@ -0,0 +1,68 @@
1
+ import { applyPersonaMount } from './mount.js';
2
+ import { materializePersonaConfigFiles } from './config-files.js';
3
+ import { writePersonaSidecars } from './sidecars.js';
4
+ import { runSkillInstalls } from './skill-runner.js';
5
+ async function disposeAll(handles) {
6
+ for (let i = handles.length - 1; i >= 0; i -= 1) {
7
+ try {
8
+ await handles[i].dispose();
9
+ }
10
+ catch {
11
+ // Best-effort — keep going so the remaining handles get a chance.
12
+ }
13
+ }
14
+ }
15
+ /**
16
+ * Run the plan's side effects in deterministic order with abort-on-failure.
17
+ * After this returns successfully, the harness can be spawned at
18
+ * `handle.cwd` with `plan.cli` + `plan.args` and `plan.env`.
19
+ *
20
+ * Order:
21
+ * 1. {@link applyPersonaMount} — mount policy first; everything else
22
+ * writes into the resulting cwd.
23
+ * 2. {@link runSkillInstalls} — install before sidecars/configFiles so a
24
+ * failing skill doesn't strand a half-written sidecar on disk.
25
+ * 3. {@link writePersonaSidecars} — claudeMd / agentsMd to disk with
26
+ * restore tracking.
27
+ * 4. {@link materializePersonaConfigFiles} — opencode.json and friends.
28
+ *
29
+ * If any step throws, prior steps' handles are disposed in LIFO order
30
+ * before the original error propagates. Callers never see partial state.
31
+ */
32
+ export async function executePersonaSpawnPlan(plan, options) {
33
+ const handles = [];
34
+ let mountHandle;
35
+ try {
36
+ mountHandle = await applyPersonaMount(plan.mount, {
37
+ cwd: options.cwd,
38
+ personaId: plan.persona.personaId,
39
+ ...(options.mount ?? {})
40
+ });
41
+ handles.push(mountHandle);
42
+ const childCwd = mountHandle.cwd;
43
+ const skillsHandle = await runSkillInstalls(plan.skills, {
44
+ cwd: childCwd,
45
+ cleanupOnDispose: options.cleanupSkillsOnDispose ?? true
46
+ });
47
+ handles.push(skillsHandle);
48
+ const sidecarHandle = await writePersonaSidecars(plan.sidecars, { cwd: childCwd });
49
+ handles.push(sidecarHandle);
50
+ const configHandle = await materializePersonaConfigFiles(plan.configFiles, { cwd: childCwd });
51
+ handles.push(configHandle);
52
+ let disposed = false;
53
+ return {
54
+ cwd: childCwd,
55
+ async dispose() {
56
+ if (disposed)
57
+ return;
58
+ disposed = true;
59
+ await disposeAll(handles);
60
+ }
61
+ };
62
+ }
63
+ catch (err) {
64
+ await disposeAll(handles);
65
+ throw err;
66
+ }
67
+ }
68
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,6BAA6B,EAE9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAA6B,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAA4B,MAAM,mBAAmB,CAAC;AAmC/E,KAAK,UAAU,UAAU,CAAC,OAA4B;IACpD,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAsB,EACtB,OAAuB;IAEvB,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,WAA2C,CAAC;IAChD,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE;YAChD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;QAEjC,MAAM,YAAY,GAAwB,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5E,GAAG,EAAE,QAAQ;YACb,gBAAgB,EAAE,OAAO,CAAC,sBAAsB,IAAI,IAAI;SACzD,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3B,MAAM,aAAa,GAAyB,MAAM,oBAAoB,CACpE,IAAI,CAAC,QAAQ,EACb,EAAE,GAAG,EAAE,QAAQ,EAAE,CAClB,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE5B,MAAM,YAAY,GAA6B,MAAM,6BAA6B,CAChF,IAAI,CAAC,WAAW,EAChB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAClB,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3B,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO;YACL,GAAG,EAAE,QAAQ;YACb,KAAK,CAAC,OAAO;gBACX,IAAI,QAAQ;oBAAE,OAAO;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=execute.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.test.d.ts","sourceRoot":"","sources":["../src/execute.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,255 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtemp, readFile, rm, stat, writeFile } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { buildPersonaSpawnPlan } from './plan.js';
7
+ import { executePersonaSpawnPlan } from './execute.js';
8
+ import { writePersonaSidecars } from './sidecars.js';
9
+ import { materializePersonaConfigFiles } from './config-files.js';
10
+ import { runSkillInstalls } from './skill-runner.js';
11
+ const cleanEnv = Object.freeze({});
12
+ function persona(over = {}) {
13
+ return {
14
+ personaId: 'p',
15
+ tier: 'best-value',
16
+ runtime: {
17
+ harness: 'claude',
18
+ model: 'anthropic/claude-3-5-sonnet',
19
+ systemPrompt: 'be helpful',
20
+ harnessSettings: { reasoning: 'medium', timeoutSeconds: 300 }
21
+ },
22
+ skills: [],
23
+ rationale: 'test',
24
+ ...over
25
+ };
26
+ }
27
+ async function exists(path) {
28
+ try {
29
+ await stat(path);
30
+ return true;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ async function withTmpDir(fn) {
37
+ const dir = await mkdtemp(join(tmpdir(), 'persona-kit-test-'));
38
+ try {
39
+ return await fn(dir);
40
+ }
41
+ finally {
42
+ await rm(dir, { recursive: true, force: true });
43
+ }
44
+ }
45
+ test('writePersonaSidecars overwrite + dispose restores empty target', async () => {
46
+ await withTmpDir(async (dir) => {
47
+ const handle = await writePersonaSidecars([{ filename: 'CLAUDE.md', contents: 'persona body', mode: 'overwrite' }], { cwd: dir });
48
+ const target = join(dir, 'CLAUDE.md');
49
+ assert.equal(await readFile(target, 'utf8'), 'persona body');
50
+ await handle.dispose();
51
+ assert.equal(await exists(target), false);
52
+ // Idempotent
53
+ await handle.dispose();
54
+ });
55
+ });
56
+ test('writePersonaSidecars resolves sourcePath at write time', async () => {
57
+ await withTmpDir(async (dir) => {
58
+ const sourcePath = join(dir, 'source.md');
59
+ await writeFile(sourcePath, 'persona body from disk', 'utf8');
60
+ const handle = await writePersonaSidecars([{ filename: 'CLAUDE.md', sourcePath, mode: 'overwrite' }], { cwd: dir });
61
+ assert.equal(await readFile(join(dir, 'CLAUDE.md'), 'utf8'), 'persona body from disk');
62
+ await handle.dispose();
63
+ });
64
+ });
65
+ test('writePersonaSidecars rejects unsafe filenames', async () => {
66
+ await withTmpDir(async (dir) => {
67
+ await assert.rejects(writePersonaSidecars([
68
+ {
69
+ filename: '../escape.md',
70
+ contents: 'x',
71
+ mode: 'overwrite'
72
+ }
73
+ ], { cwd: dir }), /must be a basename/);
74
+ await assert.rejects(writePersonaSidecars([
75
+ {
76
+ filename: '/abs.md',
77
+ contents: 'x',
78
+ mode: 'overwrite'
79
+ }
80
+ ], { cwd: dir }), /must be relative/);
81
+ });
82
+ });
83
+ test('writePersonaSidecars extend joins existing content with delimiter', async () => {
84
+ await withTmpDir(async (dir) => {
85
+ const target = join(dir, 'AGENTS.md');
86
+ await writeFile(target, 'existing body', 'utf8');
87
+ const handle = await writePersonaSidecars([{ filename: 'AGENTS.md', contents: 'persona body', mode: 'extend' }], { cwd: dir });
88
+ assert.equal(await readFile(target, 'utf8'), 'existing body\n\n---\n\npersona body');
89
+ await handle.dispose();
90
+ assert.equal(await readFile(target, 'utf8'), 'existing body');
91
+ });
92
+ });
93
+ test('materializePersonaConfigFiles writes nested paths and restores them', async () => {
94
+ await withTmpDir(async (dir) => {
95
+ const handle = await materializePersonaConfigFiles([{ path: '.opencode/agents.json', contents: '{}' }], { cwd: dir });
96
+ assert.equal(await readFile(join(dir, '.opencode/agents.json'), 'utf8'), '{}');
97
+ await handle.dispose();
98
+ assert.equal(await exists(join(dir, '.opencode/agents.json')), false);
99
+ });
100
+ });
101
+ test('materializePersonaConfigFiles rejects unsafe paths before writing', async () => {
102
+ await withTmpDir(async (dir) => {
103
+ await assert.rejects(materializePersonaConfigFiles([{ path: '../escape', contents: 'x' }], { cwd: dir }), /must not contain ".." segments/);
104
+ await assert.rejects(materializePersonaConfigFiles([{ path: '/abs', contents: 'x' }], { cwd: dir }), /must be relative/);
105
+ });
106
+ });
107
+ test('runSkillInstalls rejects cleanup paths that escape cwd', async () => {
108
+ await withTmpDir(async (dir) => {
109
+ const plan = {
110
+ harness: 'claude',
111
+ installs: [
112
+ {
113
+ skillId: 's',
114
+ source: 'x/y',
115
+ sourceKind: 'prpm',
116
+ packageRef: 'x/y',
117
+ harness: 'claude',
118
+ installCommand: [process.execPath, '-e', 'process.exit(0)'],
119
+ installedDir: '.claude/skills/y',
120
+ installedManifest: '.claude/skills/y/SKILL.md',
121
+ cleanupPaths: ['../escape']
122
+ }
123
+ ]
124
+ };
125
+ const handle = await runSkillInstalls(plan, { cwd: dir });
126
+ await assert.rejects(handle.dispose(), /must stay within cwd/);
127
+ });
128
+ });
129
+ test('runSkillInstalls scaffolds the session install root and disposes it', async () => {
130
+ await withTmpDir(async (dir) => {
131
+ const sessionRoot = join(dir, 'session');
132
+ const plan = {
133
+ harness: 'claude',
134
+ installs: [],
135
+ sessionInstallRoot: sessionRoot
136
+ };
137
+ const handle = await runSkillInstalls(plan, { cwd: dir });
138
+ assert.ok(await exists(join(sessionRoot, '.claude-plugin', 'plugin.json')));
139
+ await handle.dispose();
140
+ assert.equal(await exists(sessionRoot), false);
141
+ });
142
+ });
143
+ test('runSkillInstalls spawns the chained install command for a non-session plan', async () => {
144
+ await withTmpDir(async (dir) => {
145
+ // Non-session mode runs `install.installCommand` verbatim — use a
146
+ // harmless `true` so the spawn path is exercised without network or
147
+ // disk side effects. cleanupPaths is empty so dispose is a no-op.
148
+ const plan = {
149
+ harness: 'claude',
150
+ installs: [
151
+ {
152
+ skillId: 'noop',
153
+ source: 'noop/noop',
154
+ sourceKind: 'prpm',
155
+ packageRef: 'noop/noop',
156
+ harness: 'claude',
157
+ installCommand: [process.execPath, '-e', 'process.exit(0)'],
158
+ installedDir: '.claude/skills/noop',
159
+ installedManifest: '.claude/skills/noop/SKILL.md',
160
+ cleanupPaths: []
161
+ }
162
+ ]
163
+ };
164
+ const handle = await runSkillInstalls(plan, { cwd: dir });
165
+ await handle.dispose();
166
+ });
167
+ });
168
+ test('runSkillInstalls surfaces a non-zero install with SkillInstallError', async () => {
169
+ await withTmpDir(async (dir) => {
170
+ const plan = {
171
+ harness: 'claude',
172
+ installs: [
173
+ {
174
+ skillId: 'fail',
175
+ source: 'fail/fail',
176
+ sourceKind: 'prpm',
177
+ packageRef: 'fail/fail',
178
+ harness: 'claude',
179
+ installCommand: [process.execPath, '-e', 'process.exit(17)'],
180
+ installedDir: '.claude/skills/fail',
181
+ installedManifest: '.claude/skills/fail/SKILL.md',
182
+ cleanupPaths: []
183
+ }
184
+ ]
185
+ };
186
+ await assert.rejects(runSkillInstalls(plan, { cwd: dir }), (err) => {
187
+ assert.equal(err.name, 'SkillInstallError');
188
+ assert.equal(err.exitCode, 17);
189
+ return true;
190
+ });
191
+ });
192
+ });
193
+ test('executePersonaSpawnPlan happy path orders side effects and disposes them in LIFO', async () => {
194
+ await withTmpDir(async (dir) => {
195
+ const plan = buildPersonaSpawnPlan(persona({
196
+ personaId: 'sample',
197
+ runtime: {
198
+ harness: 'opencode',
199
+ model: 'anthropic/claude-3-5-sonnet',
200
+ systemPrompt: 'opencode prompt',
201
+ harnessSettings: { reasoning: 'medium', timeoutSeconds: 300 }
202
+ },
203
+ agentsMdContent: '# persona agents',
204
+ agentsMdMode: 'overwrite'
205
+ }), { processEnv: cleanEnv });
206
+ assert.ok(plan.configFiles.some((f) => f.path.endsWith('opencode.json')));
207
+ assert.equal(plan.sidecars[0]?.filename, 'AGENTS.md');
208
+ const handle = await executePersonaSpawnPlan(plan, { cwd: dir });
209
+ assert.equal(handle.cwd, dir);
210
+ assert.equal(await readFile(join(dir, 'AGENTS.md'), 'utf8'), '# persona agents');
211
+ assert.equal(await exists(join(dir, 'opencode.json')), true);
212
+ await handle.dispose();
213
+ assert.equal(await exists(join(dir, 'AGENTS.md')), false);
214
+ assert.equal(await exists(join(dir, 'opencode.json')), false);
215
+ // Idempotent
216
+ await handle.dispose();
217
+ });
218
+ });
219
+ test('executePersonaSpawnPlan empty-skills path is a no-op for skills', async () => {
220
+ await withTmpDir(async (dir) => {
221
+ const plan = buildPersonaSpawnPlan(persona(), { processEnv: cleanEnv });
222
+ assert.equal(plan.skills.installs.length, 0);
223
+ const handle = await executePersonaSpawnPlan(plan, { cwd: dir });
224
+ assert.equal(handle.cwd, dir);
225
+ await handle.dispose();
226
+ });
227
+ });
228
+ test('executePersonaSpawnPlan disposes prior handles when a later step fails', async () => {
229
+ await withTmpDir(async (dir) => {
230
+ // Pre-create a stub at AGENTS.md so we can verify it gets restored after a
231
+ // later failing step. Then synthesize a plan whose configFile path is unsafe
232
+ // — it should reject after the sidecar step has already written to disk.
233
+ const target = join(dir, 'AGENTS.md');
234
+ await writeFile(target, 'previous content', 'utf8');
235
+ const plan = buildPersonaSpawnPlan(persona({
236
+ personaId: 'sample',
237
+ runtime: {
238
+ harness: 'opencode',
239
+ model: 'anthropic/claude-3-5-sonnet',
240
+ systemPrompt: 'opencode prompt',
241
+ harnessSettings: { reasoning: 'medium', timeoutSeconds: 300 }
242
+ },
243
+ agentsMdContent: '# persona agents',
244
+ agentsMdMode: 'overwrite'
245
+ }), { processEnv: cleanEnv });
246
+ // Inject an unsafe configFile to force materializePersonaConfigFiles to throw
247
+ // after the sidecar has been written. The executor must then restore the
248
+ // sidecar's prior content before the error propagates.
249
+ plan.configFiles.push({ path: '../escape.json', contents: 'x' });
250
+ await assert.rejects(executePersonaSpawnPlan(plan, { cwd: dir }), /must not contain/);
251
+ // Sidecar must be restored to its original content.
252
+ assert.equal(await readFile(target, 'utf8'), 'previous content');
253
+ });
254
+ });
255
+ //# sourceMappingURL=execute.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.test.js","sourceRoot":"","sources":["../src/execute.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export { BUILT_IN_PERSONA_INTENTS, CODEX_APPROVAL_POLICIES, CODEX_SANDBOX_MODES, HARNESS_SKILL_TARGETS, HARNESS_VALUES, PERMISSION_MODES, PERSONA_INTENTS, PERSONA_TAGS, PERSONA_TIERS, SIDECAR_MD_MODES, SKILL_SOURCE_KINDS } from './constants.js';
2
+ export type { CodexApprovalPolicy, CodexSandboxMode, Harness, HarnessSettings, HarnessSkillTarget, McpServerSpec, PermissionMode, PersonaContext, PersonaInputSpec, PersonaInstallContext, PersonaIntent, PersonaMount, PersonaPermissions, PersonaRuntime, PersonaSelection, PersonaSkill, PersonaSpec, PersonaTag, PersonaTier, SidecarMdMode, SkillInstall, SkillMaterializationOptions, SkillMaterializationPlan, SkillSourceKind } from './types.js';
3
+ export { assertInputName, assertSidecarPath, deepFreeze, INPUT_NAME_RE, isHarness, isIntent, isObject, isSidecarMode, isTag, isTier, parseHarnessSettings, parseInputs, parseMcpServers, parseMount, parsePermissions, parsePersonaSpec, parseRuntime, parseSkills, parseStringList, parseStringMap, parseTags, resolveSidecar, sidecarSelectionFields } from './parse.js';
4
+ export { buildCleanupArtifacts, buildInstallArtifacts, materializeSkills, materializeSkillsFor, resolveSkillSource } from './skills.js';
5
+ export { MissingEnvRefError, makeEnvRefResolver, makeLenientResolver, resolveStringMap, resolveStringMapLenient, type DroppedRef, type EnvRefResolver, type LenientResult } from './env-refs.js';
6
+ export { formatDropWarnings, resolveMcpServersLenient, type DroppedMcpServer, type McpResolution } from './mcp.js';
7
+ export { MissingPersonaInputError, renderPersonaInputs, resolvePersonaInputs, type PersonaInputResolution, type PersonaInputValues } from './inputs.js';
8
+ export { buildInteractiveSpec, buildNonInteractiveSpec, type BuildInteractiveSpecInput, type InteractiveConfigFile, type InteractiveSpec, type NonInteractiveSpec } from './interactive-spec.js';
9
+ export { detectHarness, detectHarnesses, type HarnessAvailability } from './detect.js';
10
+ export { buildPersonaSpawnPlan, type PersonaSpawnPlan, type PlanOptions, type ResolvedInputBinding, type ResolvedMountPolicy, type ResolvedPersona, type ResolvedSidecarWrite } from './plan.js';
11
+ export { executePersonaSpawnPlan, type ExecuteOptions, type ExecutionHandle } from './execute.js';
12
+ export { applyPersonaMount, type ApplyPersonaMountOptions, type PersonaMountHandle } from './mount.js';
13
+ export { writePersonaSidecars, type PersonaSidecarHandle } from './sidecars.js';
14
+ export { assertSafeRelativePath, materializePersonaConfigFiles, type PersonaConfigFilesHandle } from './config-files.js';
15
+ export { runSkillInstalls, SkillInstallError, type PersonaSkillsHandle, type RunSkillInstallsOptions } from './skill-runner.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,2BAA2B,EAC3B,wBAAwB,EACxB,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,KAAK,EACL,MAAM,EACN,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,SAAS,EACT,cAAc,EACd,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,aAAa,EACb,eAAe,EACf,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,KAAK,wBAAwB,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ // Constants
2
+ export { BUILT_IN_PERSONA_INTENTS, CODEX_APPROVAL_POLICIES, CODEX_SANDBOX_MODES, HARNESS_SKILL_TARGETS, HARNESS_VALUES, PERMISSION_MODES, PERSONA_INTENTS, PERSONA_TAGS, PERSONA_TIERS, SIDECAR_MD_MODES, SKILL_SOURCE_KINDS } from './constants.js';
3
+ // Parsers + sidecar resolver
4
+ export { assertInputName, assertSidecarPath, deepFreeze, INPUT_NAME_RE, isHarness, isIntent, isObject, isSidecarMode, isTag, isTier, parseHarnessSettings, parseInputs, parseMcpServers, parseMount, parsePermissions, parsePersonaSpec, parseRuntime, parseSkills, parseStringList, parseStringMap, parseTags, resolveSidecar, sidecarSelectionFields } from './parse.js';
5
+ // Skill materialization
6
+ export { buildCleanupArtifacts, buildInstallArtifacts, materializeSkills, materializeSkillsFor, resolveSkillSource } from './skills.js';
7
+ // Env-ref resolution
8
+ export { MissingEnvRefError, makeEnvRefResolver, makeLenientResolver, resolveStringMap, resolveStringMapLenient } from './env-refs.js';
9
+ // MCP resolution
10
+ export { formatDropWarnings, resolveMcpServersLenient } from './mcp.js';
11
+ // Persona inputs
12
+ export { MissingPersonaInputError, renderPersonaInputs, resolvePersonaInputs } from './inputs.js';
13
+ // Interactive harness spec
14
+ export { buildInteractiveSpec, buildNonInteractiveSpec } from './interactive-spec.js';
15
+ // Harness detection
16
+ export { detectHarness, detectHarnesses } from './detect.js';
17
+ // Plan builder + plan types
18
+ export { buildPersonaSpawnPlan } from './plan.js';
19
+ // Side-effecting orchestration
20
+ export { executePersonaSpawnPlan } from './execute.js';
21
+ // Piecewise side-effect helpers (advanced orchestration)
22
+ export { applyPersonaMount } from './mount.js';
23
+ export { writePersonaSidecars } from './sidecars.js';
24
+ export { assertSafeRelativePath, materializePersonaConfigFiles } from './config-files.js';
25
+ export { runSkillInstalls, SkillInstallError } from './skill-runner.js';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AA8BxB,6BAA6B;AAC7B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,KAAK,EACL,MAAM,EACN,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,SAAS,EACT,cAAc,EACd,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,wBAAwB;AACxB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB,qBAAqB;AACrB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EAIxB,MAAM,eAAe,CAAC;AAEvB,iBAAiB;AACjB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAGzB,MAAM,UAAU,CAAC;AAElB,iBAAiB;AACjB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,aAAa,CAAC;AAErB,2BAA2B;AAC3B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAE/B,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,aAAa,CAAC;AAErB,4BAA4B;AAC5B,OAAO,EACL,qBAAqB,EAOtB,MAAM,WAAW,CAAC;AAEnB,+BAA+B;AAC/B,OAAO,EACL,uBAAuB,EAGxB,MAAM,cAAc,CAAC;AAEtB,yDAAyD;AACzD,OAAO,EACL,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAE9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}