@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
package/dist/parse.js ADDED
@@ -0,0 +1,475 @@
1
+ import { CODEX_APPROVAL_POLICIES, CODEX_SANDBOX_MODES, HARNESS_VALUES, PERMISSION_MODES, PERSONA_INTENTS, PERSONA_TAGS, PERSONA_TIERS, SIDECAR_MD_MODES } from './constants.js';
2
+ export function isObject(value) {
3
+ return typeof value === 'object' && value !== null;
4
+ }
5
+ export function isHarness(value) {
6
+ return typeof value === 'string' && HARNESS_VALUES.includes(value);
7
+ }
8
+ export function isTier(value) {
9
+ return typeof value === 'string' && PERSONA_TIERS.includes(value);
10
+ }
11
+ export function isIntent(value) {
12
+ return typeof value === 'string' && PERSONA_INTENTS.includes(value);
13
+ }
14
+ export function isTag(value) {
15
+ return typeof value === 'string' && PERSONA_TAGS.includes(value);
16
+ }
17
+ export function isSidecarMode(value) {
18
+ return typeof value === 'string' && SIDECAR_MD_MODES.includes(value);
19
+ }
20
+ export function parseTags(value, context) {
21
+ if (!Array.isArray(value) || value.length === 0) {
22
+ throw new Error(`${context} must be a non-empty array of tags`);
23
+ }
24
+ const out = [];
25
+ for (const [idx, entry] of value.entries()) {
26
+ if (!isTag(entry)) {
27
+ throw new Error(`${context}[${idx}] must be one of: ${PERSONA_TAGS.join(', ')}`);
28
+ }
29
+ if (!out.includes(entry))
30
+ out.push(entry);
31
+ }
32
+ return out;
33
+ }
34
+ export function assertSidecarPath(value, context) {
35
+ if (typeof value !== 'string' || !value.trim()) {
36
+ throw new Error(`${context} must be a non-empty string`);
37
+ }
38
+ if (value.startsWith('/')) {
39
+ throw new Error(`${context} must be a relative POSIX path; got absolute "${value}"`);
40
+ }
41
+ const segments = value.split(/[\\/]+/);
42
+ if (segments.some((s) => s === '..')) {
43
+ throw new Error(`${context} must not contain ".." segments`);
44
+ }
45
+ if (!value.toLowerCase().endsWith('.md')) {
46
+ throw new Error(`${context} must end with .md`);
47
+ }
48
+ }
49
+ export function parseHarnessSettings(value, context) {
50
+ if (!isObject(value)) {
51
+ throw new Error(`${context} must be an object`);
52
+ }
53
+ const { reasoning, timeoutSeconds, sandboxMode, approvalPolicy, workspaceWriteNetworkAccess, webSearch } = value;
54
+ if (!['low', 'medium', 'high'].includes(String(reasoning))) {
55
+ throw new Error(`${context}.reasoning must be low|medium|high`);
56
+ }
57
+ if (typeof timeoutSeconds !== 'number' || !Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0) {
58
+ throw new Error(`${context}.timeoutSeconds must be a positive number`);
59
+ }
60
+ const out = {
61
+ reasoning: reasoning,
62
+ timeoutSeconds
63
+ };
64
+ if (sandboxMode !== undefined) {
65
+ if (!CODEX_SANDBOX_MODES.includes(sandboxMode)) {
66
+ throw new Error(`${context}.sandboxMode must be one of: ${CODEX_SANDBOX_MODES.join(', ')}`);
67
+ }
68
+ out.sandboxMode = sandboxMode;
69
+ }
70
+ if (approvalPolicy !== undefined) {
71
+ if (!CODEX_APPROVAL_POLICIES.includes(approvalPolicy)) {
72
+ throw new Error(`${context}.approvalPolicy must be one of: ${CODEX_APPROVAL_POLICIES.join(', ')}`);
73
+ }
74
+ out.approvalPolicy = approvalPolicy;
75
+ }
76
+ if (workspaceWriteNetworkAccess !== undefined) {
77
+ if (typeof workspaceWriteNetworkAccess !== 'boolean') {
78
+ throw new Error(`${context}.workspaceWriteNetworkAccess must be a boolean`);
79
+ }
80
+ out.workspaceWriteNetworkAccess = workspaceWriteNetworkAccess;
81
+ }
82
+ if (webSearch !== undefined) {
83
+ if (typeof webSearch !== 'boolean') {
84
+ throw new Error(`${context}.webSearch must be a boolean`);
85
+ }
86
+ out.webSearch = webSearch;
87
+ }
88
+ return out;
89
+ }
90
+ export function parseRuntime(value, context) {
91
+ if (!isObject(value)) {
92
+ throw new Error(`${context} must be an object`);
93
+ }
94
+ const { harness, model, systemPrompt, harnessSettings, claudeMd, claudeMdMode, agentsMd, agentsMdMode, claudeMdContent, agentsMdContent } = value;
95
+ if (!isHarness(harness)) {
96
+ throw new Error(`${context}.harness must be one of: ${HARNESS_VALUES.join(', ')}`);
97
+ }
98
+ if (typeof model !== 'string' || !model.trim()) {
99
+ throw new Error(`${context}.model must be a non-empty string`);
100
+ }
101
+ if (typeof systemPrompt !== 'string' || !systemPrompt.trim()) {
102
+ throw new Error(`${context}.systemPrompt must be a non-empty string`);
103
+ }
104
+ const parsedHarnessSettings = parseHarnessSettings(harnessSettings, `${context}.harnessSettings`);
105
+ if (claudeMd !== undefined)
106
+ assertSidecarPath(claudeMd, `${context}.claudeMd`);
107
+ if (agentsMd !== undefined)
108
+ assertSidecarPath(agentsMd, `${context}.agentsMd`);
109
+ if (claudeMdMode !== undefined && !isSidecarMode(claudeMdMode)) {
110
+ throw new Error(`${context}.claudeMdMode must be one of: ${SIDECAR_MD_MODES.join(', ')}`);
111
+ }
112
+ if (agentsMdMode !== undefined && !isSidecarMode(agentsMdMode)) {
113
+ throw new Error(`${context}.agentsMdMode must be one of: ${SIDECAR_MD_MODES.join(', ')}`);
114
+ }
115
+ // Mode is allowed without a same-level path: a tier may declare just
116
+ // `claudeMdMode` and inherit the path from the spec top-level (or vice
117
+ // versa). The cascade validates that a path/content actually exists at
118
+ // runtime — a stranded mode with no path anywhere becomes a no-op.
119
+ if (claudeMdContent !== undefined && (typeof claudeMdContent !== 'string' || !claudeMdContent.length)) {
120
+ throw new Error(`${context}.claudeMdContent must be a non-empty string`);
121
+ }
122
+ if (agentsMdContent !== undefined && (typeof agentsMdContent !== 'string' || !agentsMdContent.length)) {
123
+ throw new Error(`${context}.agentsMdContent must be a non-empty string`);
124
+ }
125
+ return {
126
+ harness,
127
+ model,
128
+ systemPrompt,
129
+ harnessSettings: parsedHarnessSettings,
130
+ ...(typeof claudeMd === 'string' ? { claudeMd } : {}),
131
+ ...(claudeMdMode ? { claudeMdMode: claudeMdMode } : {}),
132
+ ...(typeof agentsMd === 'string' ? { agentsMd } : {}),
133
+ ...(agentsMdMode ? { agentsMdMode: agentsMdMode } : {}),
134
+ ...(typeof claudeMdContent === 'string' ? { claudeMdContent } : {}),
135
+ ...(typeof agentsMdContent === 'string' ? { agentsMdContent } : {})
136
+ };
137
+ }
138
+ export function parseSkills(value, context) {
139
+ if (value === undefined) {
140
+ return [];
141
+ }
142
+ if (!Array.isArray(value)) {
143
+ throw new Error(`${context} must be an array if provided`);
144
+ }
145
+ return value.map((entry, idx) => {
146
+ const entryContext = `${context}[${idx}]`;
147
+ if (!isObject(entry)) {
148
+ throw new Error(`${entryContext} must be an object`);
149
+ }
150
+ const { id, source, description } = entry;
151
+ if (typeof id !== 'string' || !id.trim()) {
152
+ throw new Error(`${entryContext}.id must be a non-empty string`);
153
+ }
154
+ if (typeof source !== 'string' || !source.trim()) {
155
+ throw new Error(`${entryContext}.source must be a non-empty string`);
156
+ }
157
+ if (typeof description !== 'string' || !description.trim()) {
158
+ throw new Error(`${entryContext}.description must be a non-empty string`);
159
+ }
160
+ return { id, source, description };
161
+ });
162
+ }
163
+ export function parseStringList(value, context) {
164
+ if (value === undefined)
165
+ return undefined;
166
+ if (!Array.isArray(value)) {
167
+ throw new Error(`${context} must be an array if provided`);
168
+ }
169
+ const parsed = value.map((entry, idx) => {
170
+ if (typeof entry !== 'string' || !entry.trim()) {
171
+ throw new Error(`${context}[${idx}] must be a non-empty string`);
172
+ }
173
+ return entry;
174
+ });
175
+ return parsed.length > 0 ? parsed : undefined;
176
+ }
177
+ export function parseMount(value, context) {
178
+ if (value === undefined)
179
+ return undefined;
180
+ if (!isObject(value)) {
181
+ throw new Error(`${context} must be an object if provided`);
182
+ }
183
+ const ignoredPatterns = parseStringList(value.ignoredPatterns, `${context}.ignoredPatterns`);
184
+ const readonlyPatterns = parseStringList(value.readonlyPatterns, `${context}.readonlyPatterns`);
185
+ return ignoredPatterns || readonlyPatterns
186
+ ? {
187
+ ...(ignoredPatterns ? { ignoredPatterns } : {}),
188
+ ...(readonlyPatterns ? { readonlyPatterns } : {})
189
+ }
190
+ : undefined;
191
+ }
192
+ export const INPUT_NAME_RE = /^[A-Z_][A-Z0-9_]*$/;
193
+ export function assertInputName(name, context) {
194
+ if (!INPUT_NAME_RE.test(name)) {
195
+ throw new Error(`${context} must be an env-style name matching ${INPUT_NAME_RE.source}`);
196
+ }
197
+ }
198
+ export function parseInputs(value, context) {
199
+ if (value === undefined)
200
+ return undefined;
201
+ if (!isObject(value)) {
202
+ throw new Error(`${context} must be an object if provided`);
203
+ }
204
+ const out = {};
205
+ for (const [name, raw] of Object.entries(value)) {
206
+ assertInputName(name, `${context}.${name}`);
207
+ if (typeof raw === 'string') {
208
+ if (!raw) {
209
+ throw new Error(`${context}.${name} default must be non-empty`);
210
+ }
211
+ out[name] = { default: raw };
212
+ continue;
213
+ }
214
+ if (!isObject(raw)) {
215
+ throw new Error(`${context}.${name} must be a string default or an object`);
216
+ }
217
+ const { description, env, default: defaultValue, optional } = raw;
218
+ const parsed = {};
219
+ if (description !== undefined) {
220
+ if (typeof description !== 'string' || !description.trim()) {
221
+ throw new Error(`${context}.${name}.description must be a non-empty string if provided`);
222
+ }
223
+ parsed.description = description;
224
+ }
225
+ if (env !== undefined) {
226
+ if (typeof env !== 'string' || !env.trim()) {
227
+ throw new Error(`${context}.${name}.env must be a non-empty string if provided`);
228
+ }
229
+ assertInputName(env, `${context}.${name}.env`);
230
+ parsed.env = env;
231
+ }
232
+ if (defaultValue !== undefined) {
233
+ if (typeof defaultValue !== 'string' || !defaultValue) {
234
+ throw new Error(`${context}.${name}.default must be a non-empty string if provided`);
235
+ }
236
+ parsed.default = defaultValue;
237
+ }
238
+ if (optional !== undefined) {
239
+ if (typeof optional !== 'boolean') {
240
+ throw new Error(`${context}.${name}.optional must be a boolean if provided`);
241
+ }
242
+ if (optional && parsed.default !== undefined) {
243
+ throw new Error(`${context}.${name} cannot set both 'optional: true' and 'default' — pick one (defaults already make an input always-resolved)`);
244
+ }
245
+ parsed.optional = optional;
246
+ }
247
+ out[name] = parsed;
248
+ }
249
+ return Object.keys(out).length > 0 ? out : undefined;
250
+ }
251
+ export function parsePermissions(value, context) {
252
+ if (value === undefined)
253
+ return undefined;
254
+ if (!isObject(value)) {
255
+ throw new Error(`${context} must be an object if provided`);
256
+ }
257
+ const out = {};
258
+ const { allow, deny, mode } = value;
259
+ if (allow !== undefined) {
260
+ if (!Array.isArray(allow) || allow.some((s) => typeof s !== 'string' || !s.trim())) {
261
+ throw new Error(`${context}.allow must be an array of non-empty strings`);
262
+ }
263
+ out.allow = allow;
264
+ }
265
+ if (deny !== undefined) {
266
+ if (!Array.isArray(deny) || deny.some((s) => typeof s !== 'string' || !s.trim())) {
267
+ throw new Error(`${context}.deny must be an array of non-empty strings`);
268
+ }
269
+ out.deny = deny;
270
+ }
271
+ if (mode !== undefined) {
272
+ if (!PERMISSION_MODES.includes(mode)) {
273
+ throw new Error(`${context}.mode must be one of: ${PERMISSION_MODES.join(', ')}`);
274
+ }
275
+ out.mode = mode;
276
+ }
277
+ return Object.keys(out).length > 0 ? out : undefined;
278
+ }
279
+ export function parseStringMap(value, context) {
280
+ if (value === undefined)
281
+ return undefined;
282
+ if (!isObject(value)) {
283
+ throw new Error(`${context} must be an object if provided`);
284
+ }
285
+ const out = {};
286
+ for (const [key, v] of Object.entries(value)) {
287
+ if (typeof v !== 'string') {
288
+ throw new Error(`${context}.${key} must be a string`);
289
+ }
290
+ out[key] = v;
291
+ }
292
+ return out;
293
+ }
294
+ export function parseMcpServers(value, context) {
295
+ if (value === undefined)
296
+ return undefined;
297
+ if (!isObject(value)) {
298
+ throw new Error(`${context} must be an object if provided`);
299
+ }
300
+ const out = {};
301
+ for (const [name, raw] of Object.entries(value)) {
302
+ if (!isObject(raw)) {
303
+ throw new Error(`${context}.${name} must be an object`);
304
+ }
305
+ const type = raw.type;
306
+ if (type === 'http' || type === 'sse') {
307
+ if (typeof raw.url !== 'string' || !raw.url.trim()) {
308
+ throw new Error(`${context}.${name}.url must be a non-empty string for type=${type}`);
309
+ }
310
+ const headers = parseStringMap(raw.headers, `${context}.${name}.headers`);
311
+ out[name] = { type, url: raw.url, ...(headers ? { headers } : {}) };
312
+ }
313
+ else if (type === 'stdio') {
314
+ if (typeof raw.command !== 'string' || !raw.command.trim()) {
315
+ throw new Error(`${context}.${name}.command must be a non-empty string for type=stdio`);
316
+ }
317
+ const args = raw.args;
318
+ if (args !== undefined && (!Array.isArray(args) || args.some((a) => typeof a !== 'string'))) {
319
+ throw new Error(`${context}.${name}.args must be an array of strings`);
320
+ }
321
+ const env = parseStringMap(raw.env, `${context}.${name}.env`);
322
+ out[name] = {
323
+ type: 'stdio',
324
+ command: raw.command,
325
+ ...(args ? { args: args } : {}),
326
+ ...(env ? { env } : {})
327
+ };
328
+ }
329
+ else {
330
+ throw new Error(`${context}.${name}.type must be one of: http, sse, stdio`);
331
+ }
332
+ }
333
+ return out;
334
+ }
335
+ export function parsePersonaSpec(value, expectedIntent) {
336
+ if (!isObject(value)) {
337
+ throw new Error(`persona[${expectedIntent}] must be an object`);
338
+ }
339
+ const { id, intent, tags, description, tiers, defaultTier, skills, inputs, env, mcpServers, permissions, mount, claudeMd, claudeMdMode, agentsMd, agentsMdMode, claudeMdContent, agentsMdContent } = value;
340
+ if (typeof id !== 'string' || !id.trim()) {
341
+ throw new Error(`persona[${expectedIntent}].id must be a non-empty string`);
342
+ }
343
+ if (!isIntent(intent)) {
344
+ throw new Error(`persona[${expectedIntent}].intent is invalid`);
345
+ }
346
+ if (intent !== expectedIntent) {
347
+ throw new Error(`persona[${expectedIntent}] intent mismatch: got ${intent}`);
348
+ }
349
+ const parsedTags = parseTags(tags, `persona[${expectedIntent}].tags`);
350
+ if (typeof description !== 'string' || !description.trim()) {
351
+ throw new Error(`persona[${expectedIntent}].description must be a non-empty string`);
352
+ }
353
+ if (!isObject(tiers)) {
354
+ throw new Error(`persona[${expectedIntent}].tiers must be an object`);
355
+ }
356
+ const parsedTiers = {};
357
+ for (const tier of PERSONA_TIERS) {
358
+ parsedTiers[tier] = parseRuntime(tiers[tier], `persona[${expectedIntent}].tiers.${tier}`);
359
+ }
360
+ let parsedDefaultTier;
361
+ if (defaultTier !== undefined) {
362
+ if (!isTier(defaultTier)) {
363
+ throw new Error(`persona[${expectedIntent}].defaultTier must be one of: ${PERSONA_TIERS.join(', ')}`);
364
+ }
365
+ parsedDefaultTier = defaultTier;
366
+ }
367
+ const parsedSkills = parseSkills(skills, `persona[${expectedIntent}].skills`);
368
+ const parsedInputs = parseInputs(inputs, `persona[${expectedIntent}].inputs`);
369
+ const parsedEnv = parseStringMap(env, `persona[${expectedIntent}].env`);
370
+ const parsedMcpServers = parseMcpServers(mcpServers, `persona[${expectedIntent}].mcpServers`);
371
+ const parsedPermissions = parsePermissions(permissions, `persona[${expectedIntent}].permissions`);
372
+ const parsedMount = parseMount(mount, `persona[${expectedIntent}].mount`);
373
+ if (claudeMd !== undefined)
374
+ assertSidecarPath(claudeMd, `persona[${expectedIntent}].claudeMd`);
375
+ if (agentsMd !== undefined)
376
+ assertSidecarPath(agentsMd, `persona[${expectedIntent}].agentsMd`);
377
+ if (claudeMdMode !== undefined && !isSidecarMode(claudeMdMode)) {
378
+ throw new Error(`persona[${expectedIntent}].claudeMdMode must be one of: ${SIDECAR_MD_MODES.join(', ')}`);
379
+ }
380
+ if (agentsMdMode !== undefined && !isSidecarMode(agentsMdMode)) {
381
+ throw new Error(`persona[${expectedIntent}].agentsMdMode must be one of: ${SIDECAR_MD_MODES.join(', ')}`);
382
+ }
383
+ // Spec-level mode without a spec-level path is allowed — a tier may
384
+ // supply the path while inheriting the mode here. See parseRuntime.
385
+ if (claudeMdContent !== undefined &&
386
+ (typeof claudeMdContent !== 'string' || !claudeMdContent.length)) {
387
+ throw new Error(`persona[${expectedIntent}].claudeMdContent must be a non-empty string`);
388
+ }
389
+ if (agentsMdContent !== undefined &&
390
+ (typeof agentsMdContent !== 'string' || !agentsMdContent.length)) {
391
+ throw new Error(`persona[${expectedIntent}].agentsMdContent must be a non-empty string`);
392
+ }
393
+ return {
394
+ id,
395
+ intent,
396
+ tags: parsedTags,
397
+ description,
398
+ skills: parsedSkills,
399
+ ...(parsedInputs ? { inputs: parsedInputs } : {}),
400
+ tiers: parsedTiers,
401
+ ...(parsedDefaultTier ? { defaultTier: parsedDefaultTier } : {}),
402
+ ...(parsedEnv ? { env: parsedEnv } : {}),
403
+ ...(parsedMcpServers ? { mcpServers: parsedMcpServers } : {}),
404
+ ...(parsedPermissions ? { permissions: parsedPermissions } : {}),
405
+ ...(parsedMount ? { mount: parsedMount } : {}),
406
+ ...(typeof claudeMd === 'string' ? { claudeMd } : {}),
407
+ ...(claudeMdMode ? { claudeMdMode: claudeMdMode } : {}),
408
+ ...(typeof agentsMd === 'string' ? { agentsMd } : {}),
409
+ ...(agentsMdMode ? { agentsMdMode: agentsMdMode } : {}),
410
+ ...(typeof claudeMdContent === 'string' ? { claudeMdContent } : {}),
411
+ ...(typeof agentsMdContent === 'string' ? { agentsMdContent } : {})
412
+ };
413
+ }
414
+ /**
415
+ * Resolve the effective sidecar config for a (spec, tier) pair.
416
+ *
417
+ * Path-or-content resolution: each sidecar (`claude*`, `agents*`) is a
418
+ * single "channel" — its `*Md` and `*MdContent` fields are tied together
419
+ * and travel as a unit through the cascade. If the tier-level runtime
420
+ * declares EITHER `claudeMd` or `claudeMdContent`, the tier owns the
421
+ * channel and the top-level path/content is ignored (otherwise a tier
422
+ * path override would silently lose to inherited inlined content, since
423
+ * downstream consumers prefer Content over a path).
424
+ *
425
+ * Mode resolution: independent — a tier can set just `claudeMdMode` and
426
+ * inherit the top-level path. Defaults to `overwrite` if neither layer
427
+ * sets a mode. Modes are only meaningful when a path/content is present.
428
+ */
429
+ export function resolveSidecar(spec, tier) {
430
+ const runtime = spec.tiers[tier];
431
+ const tierOwnsClaude = runtime.claudeMd !== undefined || runtime.claudeMdContent !== undefined;
432
+ const tierOwnsAgents = runtime.agentsMd !== undefined || runtime.agentsMdContent !== undefined;
433
+ const claudePath = tierOwnsClaude ? runtime.claudeMd : spec.claudeMd;
434
+ const claudeContent = tierOwnsClaude ? runtime.claudeMdContent : spec.claudeMdContent;
435
+ const agentsPath = tierOwnsAgents ? runtime.agentsMd : spec.agentsMd;
436
+ const agentsContent = tierOwnsAgents ? runtime.agentsMdContent : spec.agentsMdContent;
437
+ return {
438
+ ...(claudePath ? { claudeMd: claudePath } : {}),
439
+ ...(claudeContent ? { claudeMdContent: claudeContent } : {}),
440
+ claudeMdMode: runtime.claudeMdMode ?? spec.claudeMdMode ?? 'overwrite',
441
+ ...(agentsPath ? { agentsMd: agentsPath } : {}),
442
+ ...(agentsContent ? { agentsMdContent: agentsContent } : {}),
443
+ agentsMdMode: runtime.agentsMdMode ?? spec.agentsMdMode ?? 'overwrite'
444
+ };
445
+ }
446
+ export function sidecarSelectionFields(sidecar) {
447
+ return {
448
+ ...(sidecar.claudeMd ? { claudeMd: sidecar.claudeMd } : {}),
449
+ ...(sidecar.claudeMdContent ? { claudeMdContent: sidecar.claudeMdContent } : {}),
450
+ ...(sidecar.claudeMd || sidecar.claudeMdContent
451
+ ? { claudeMdMode: sidecar.claudeMdMode }
452
+ : {}),
453
+ ...(sidecar.agentsMd ? { agentsMd: sidecar.agentsMd } : {}),
454
+ ...(sidecar.agentsMdContent ? { agentsMdContent: sidecar.agentsMdContent } : {}),
455
+ ...(sidecar.agentsMd || sidecar.agentsMdContent
456
+ ? { agentsMdMode: sidecar.agentsMdMode }
457
+ : {})
458
+ };
459
+ }
460
+ export function deepFreeze(value) {
461
+ if (value === null || value === undefined || typeof value !== 'object') {
462
+ return value;
463
+ }
464
+ if (Array.isArray(value)) {
465
+ for (const entry of value) {
466
+ deepFreeze(entry);
467
+ }
468
+ return Object.freeze(value);
469
+ }
470
+ for (const nested of Object.values(value)) {
471
+ deepFreeze(nested);
472
+ }
473
+ return Object.freeze(value);
474
+ }
475
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
package/dist/plan.d.ts ADDED
@@ -0,0 +1,118 @@
1
+ import { type InteractiveConfigFile } from './interactive-spec.js';
2
+ import type { Harness, PersonaSelection, SidecarMdMode, SkillMaterializationPlan } from './types.js';
3
+ /**
4
+ * Alias of {@link PersonaSelection}. The orchestration API names the
5
+ * fully-resolved persona "ResolvedPersona" because callers think of a
6
+ * spawn plan as "what runs", not "what was selected from the catalog".
7
+ */
8
+ export type ResolvedPersona = PersonaSelection;
9
+ /**
10
+ * Mount policy resolved against any caller dotfiles / extra patterns.
11
+ * The plan carries this through verbatim; the executor passes it to the
12
+ * mount provider (e.g. {@link import('./mount.js').applyPersonaMount}).
13
+ */
14
+ export interface ResolvedMountPolicy {
15
+ ignoredPatterns: string[];
16
+ readonlyPatterns: string[];
17
+ }
18
+ /**
19
+ * Sidecar markdown the executor must write into the harness cwd. The body
20
+ * is supplied either inline (built-in personas, where the catalog generator
21
+ * already inlined the markdown) or by absolute path (local/pack personas
22
+ * that ship the sidecar as a sibling file). The path form keeps the plan
23
+ * JSON-serializable; the executor reads the file at write time.
24
+ */
25
+ export type ResolvedSidecarWrite = {
26
+ /** Filename inside the cwd: `CLAUDE.md` (claude) or `AGENTS.md` (opencode/codex). */
27
+ filename: 'CLAUDE.md' | 'AGENTS.md';
28
+ /**
29
+ * `overwrite` writes verbatim; `extend` appends a `\n\n---\n\n`-joined
30
+ * suffix onto whatever already exists at the destination at execute time.
31
+ */
32
+ mode: SidecarMdMode;
33
+ } & ({
34
+ /** Inlined body. */
35
+ contents: string;
36
+ sourcePath?: never;
37
+ } | {
38
+ /** Absolute path to read at execute time. */
39
+ sourcePath: string;
40
+ contents?: never;
41
+ });
42
+ /** Per-input env binding to merge into the spawn env. */
43
+ export interface ResolvedInputBinding {
44
+ name: string;
45
+ /** Env-var name to bind under. Falls back to `name` when the spec omits one. */
46
+ envName: string;
47
+ value: string;
48
+ }
49
+ export interface PersonaSpawnPlan {
50
+ /** The fully resolved persona this plan was built from. */
51
+ persona: ResolvedPersona;
52
+ /** Which CLI to spawn (`claude` | `codex` | `opencode`). */
53
+ cli: Harness;
54
+ /** argv (excluding the cli itself) that the harness should be spawned with. */
55
+ args: string[];
56
+ /** Optional initial prompt — used by codex's argv-driven prompt mode. */
57
+ initialPrompt?: string;
58
+ /** MCP / harness config files to materialize before spawn (and restore after). */
59
+ configFiles: InteractiveConfigFile[];
60
+ /** Pure skills install plan (from {@link materializeSkills}). */
61
+ skills: SkillMaterializationPlan;
62
+ /** Resolved mount policy, or undefined if the persona declares none. */
63
+ mount?: ResolvedMountPolicy;
64
+ /** Sidecar markdown writes (claudeMd / agentsMd) staged for the run. */
65
+ sidecars: ResolvedSidecarWrite[];
66
+ /** Inputs as resolved env bindings, ready to merge into spawn env. */
67
+ inputs: ResolvedInputBinding[];
68
+ /**
69
+ * Final env (process.env merged with input bindings + persona env, with
70
+ * persona env winning on conflict). Always materialized so callers do not
71
+ * need to re-merge by hand.
72
+ */
73
+ env: Record<string, string>;
74
+ }
75
+ export interface PlanOptions {
76
+ /**
77
+ * Stage skills under this absolute directory instead of the repo's
78
+ * `.claude/skills/`. Claude harness only — throws otherwise (matching the
79
+ * existing {@link materializeSkills} behavior).
80
+ */
81
+ installRoot?: string;
82
+ /** Extra env bindings to merge in. Persona env wins on conflict. */
83
+ envOverrides?: Record<string, string>;
84
+ /**
85
+ * Process env to read input env-var fallbacks from (default: process.env).
86
+ * **Captured into `plan.env`.** The plan is JSON-serializable, so passing
87
+ * `process.env` here will inline ambient values (potentially including
88
+ * secrets) into the serialized plan — set `includeProcessEnv` only when
89
+ * you intend to forward ambient env to the harness, and prefer supplying
90
+ * a curated snapshot via {@link processEnv}.
91
+ */
92
+ processEnv?: NodeJS.ProcessEnv;
93
+ /**
94
+ * Opt in to capturing ambient {@link processEnv} into `plan.env`. Default
95
+ * `false`: when omitted, `plan.env` contains only persona-author env,
96
+ * resolved input bindings, and {@link envOverrides}. When `true` and no
97
+ * explicit {@link processEnv} is supplied, `process.env` is captured.
98
+ */
99
+ includeProcessEnv?: boolean;
100
+ /**
101
+ * Caller-supplied input values (highest precedence over env/default). Same
102
+ * shape as {@link import('./inputs.js').resolvePersonaInputs}'s `provided`.
103
+ */
104
+ inputValues?: Record<string, string | number | boolean | null | undefined>;
105
+ }
106
+ /**
107
+ * Pure plan builder. Composes existing persona-kit helpers
108
+ * ({@link buildInteractiveSpec}, {@link materializeSkills},
109
+ * {@link resolvePersonaInputs}) into a single inspectable
110
+ * {@link PersonaSpawnPlan}. Does **no** filesystem writes and spawns no
111
+ * subprocesses.
112
+ *
113
+ * The returned plan is JSON-serializable: every field is a plain value or
114
+ * primitive array. Callers can stamp it into launch metadata, send it across
115
+ * a wire, or hand it to {@link import('./execute.js').executePersonaSpawnPlan}.
116
+ */
117
+ export declare function buildPersonaSpawnPlan(persona: ResolvedPersona, options?: PlanOptions): PersonaSpawnPlan;
118
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGzF,OAAO,KAAK,EACV,OAAO,EAGP,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,qFAAqF;IACrF,QAAQ,EAAE,WAAW,GAAG,WAAW,CAAC;IACpC;;;OAGG;IACH,IAAI,EAAE,aAAa,CAAC;CACrB,GAAG,CACA;IACE,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB,GACD;IACE,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB,CACJ,CAAC;AAEF,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,OAAO,EAAE,eAAe,CAAC;IACzB,4DAA4D;IAC5D,GAAG,EAAE,OAAO,CAAC;IACb,+EAA+E;IAC/E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,iEAAiE;IACjE,MAAM,EAAE,wBAAwB,CAAC;IACjC,wEAAwE;IACxE,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,sEAAsE;IACtE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAC5E;AA8ED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,WAAgB,GACxB,gBAAgB,CA8ElB"}