@agentworkforce/workload-router 0.4.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +9 -107
- package/dist/generated/personas.d.ts +263 -0
- package/dist/generated/personas.d.ts.map +1 -1
- package/dist/generated/personas.js +215 -0
- package/dist/generated/personas.js.map +1 -1
- package/dist/index.d.ts +14 -229
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -481
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +53 -193
- package/dist/index.test.js.map +1 -1
- package/package.json +1 -4
- package/routing-profiles/default.json +29 -88
- package/routing-profiles/schema.json +16 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const HARNESS_VALUES: readonly ["opencode", "codex", "claude"];
|
|
2
2
|
export declare const PERSONA_TIERS: readonly ["best", "best-value", "minimum"];
|
|
3
3
|
export declare const PERSONA_TAGS: readonly ["planning", "implementation", "review", "testing", "debugging", "documentation", "release", "discovery", "analytics"];
|
|
4
|
-
export declare const PERSONA_INTENTS: readonly ["implement-frontend", "review", "architecture-plan", "requirements-analysis", "debugging", "security-review", "documentation", "verification", "test-strategy", "tdd-enforcement", "flake-investigation", "opencode-workflow-correctness", "npm-provenance", "cloud-sandbox-infra", "sage-slack-egress-migration", "sage-proactive-rewire", "cloud-slack-proxy-guard", "sage-cloud-e2e-conduction", "capability-discovery", "posthog", "persona-authoring", "slop-audit"];
|
|
4
|
+
export declare const PERSONA_INTENTS: readonly ["implement-frontend", "review", "architecture-plan", "requirements-analysis", "debugging", "security-review", "documentation", "verification", "test-strategy", "tdd-enforcement", "flake-investigation", "opencode-workflow-correctness", "npm-provenance", "cloud-sandbox-infra", "sage-slack-egress-migration", "sage-proactive-rewire", "cloud-slack-proxy-guard", "sage-cloud-e2e-conduction", "capability-discovery", "npm-package-compat", "posthog", "persona-authoring", "agent-relay-workflow", "slop-audit", "api-contract-review", "local-stack-orchestration", "e2e-validation", "write-integration-tests", "relay-orchestrator"];
|
|
5
5
|
export type Harness = (typeof HARNESS_VALUES)[number];
|
|
6
6
|
export type PersonaTier = (typeof PERSONA_TIERS)[number];
|
|
7
7
|
export type PersonaIntent = (typeof PERSONA_INTENTS)[number];
|
|
@@ -180,191 +180,25 @@ export interface PersonaInstallContext {
|
|
|
180
180
|
/**
|
|
181
181
|
* Post-run cleanup command (argv form) that removes the ephemeral artifact
|
|
182
182
|
* paths the provider scatters during install, leaving the provider lockfile
|
|
183
|
-
* in place. Callers running the install themselves
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* post-agent workflow step automatically in Mode A.
|
|
183
|
+
* in place. Callers running the install themselves should run this **after**
|
|
184
|
+
* the agent step consumes the skills, never before. For empty plans this is
|
|
185
|
+
* a shell no-op (`:`).
|
|
187
186
|
*/
|
|
188
187
|
readonly cleanupCommand: readonly string[];
|
|
189
188
|
/** Shell-escaped form of {@link cleanupCommand}. */
|
|
190
189
|
readonly cleanupCommandString: string;
|
|
191
190
|
}
|
|
192
191
|
/**
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
* skills via `usePersona(...).install.commandString` (e.g. in a Dockerfile or
|
|
198
|
-
* a CI bootstrap step) and do not want `sendMessage()` to re-install them.
|
|
199
|
-
* Leaving `installSkills` unset means `sendMessage()` installs skills itself as
|
|
200
|
-
* the first step of the ad-hoc workflow — this is the default.
|
|
201
|
-
*/
|
|
202
|
-
export interface ExecuteOptions {
|
|
203
|
-
/** Absolute or repo-relative path the spawned agent should treat as its CWD. */
|
|
204
|
-
workingDirectory?: string;
|
|
205
|
-
/** Optional step name override for the ad-hoc workflow run. */
|
|
206
|
-
name?: string;
|
|
207
|
-
/** Hard timeout for the install + agent run in seconds. */
|
|
208
|
-
timeoutSeconds?: number;
|
|
209
|
-
/** Optional structured context appended to the task body as JSON. */
|
|
210
|
-
inputs?: Record<string, string | number | boolean>;
|
|
211
|
-
/** Install persona skills before execution. Defaults to true. */
|
|
212
|
-
installSkills?: boolean;
|
|
213
|
-
/** Additional environment variables available to install + agent processes. */
|
|
214
|
-
env?: NodeJS.ProcessEnv;
|
|
215
|
-
/** Abort signal for cancellation. */
|
|
216
|
-
signal?: AbortSignal;
|
|
217
|
-
/** Streaming stdout/stderr callback from install + agent subprocesses. */
|
|
218
|
-
onProgress?: (chunk: {
|
|
219
|
-
stream: 'stdout' | 'stderr';
|
|
220
|
-
text: string;
|
|
221
|
-
}) => void;
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Final result of a {@link PersonaContext.sendMessage} call.
|
|
225
|
-
*
|
|
226
|
-
* **Only `status: 'completed'` is returned as a resolved promise.** Any
|
|
227
|
-
* other outcome is delivered as a thrown error with a typed `.result`
|
|
228
|
-
* property carrying this interface, so callers can `try/catch` and then
|
|
229
|
-
* inspect `err.result.status`, `err.result.stderr`, `err.result.exitCode`
|
|
230
|
-
* etc. just as they would read the resolved value:
|
|
231
|
-
*
|
|
232
|
-
* - `status: 'failed'` — the agent subprocess exited non-zero, or the
|
|
233
|
-
* workflow settled in a failed state for any other reason. Thrown as
|
|
234
|
-
* a {@link PersonaExecutionError}.
|
|
235
|
-
* - `status: 'timeout'` — the workflow's hard timeout fired before the
|
|
236
|
-
* run completed. Also thrown as a {@link PersonaExecutionError} (the
|
|
237
|
-
* status is derived from the underlying timeout error).
|
|
238
|
-
* - `status: 'cancelled'` — the caller aborted via
|
|
239
|
-
* {@link ExecuteOptions.signal} or {@link PersonaExecution.cancel}.
|
|
240
|
-
* Thrown as an `AbortError` (with `error.result.status === 'cancelled'`).
|
|
241
|
-
*
|
|
242
|
-
* So the typical shape of a caller is:
|
|
243
|
-
*
|
|
244
|
-
* ```ts
|
|
245
|
-
* try {
|
|
246
|
-
* const result = await sendMessage(task, opts);
|
|
247
|
-
* // result.status is guaranteed to be 'completed' here.
|
|
248
|
-
* } catch (err) {
|
|
249
|
-
* // err.result.status is 'failed' | 'cancelled' | 'timeout'.
|
|
250
|
-
* // err.result.stderr / err.result.exitCode are populated from
|
|
251
|
-
* // whatever the agent subprocess produced.
|
|
252
|
-
* }
|
|
253
|
-
* ```
|
|
254
|
-
*/
|
|
255
|
-
export interface ExecuteResult {
|
|
256
|
-
status: 'completed' | 'failed' | 'cancelled' | 'timeout';
|
|
257
|
-
output: string;
|
|
258
|
-
stderr: string;
|
|
259
|
-
exitCode: number | null;
|
|
260
|
-
durationMs: number;
|
|
261
|
-
workflowRunId?: string;
|
|
262
|
-
stepName: string;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Handle returned by {@link PersonaContext.sendMessage}. It *is* a `Promise<ExecuteResult>`
|
|
266
|
-
* (awaitable directly), with two extra members bolted on:
|
|
267
|
-
*
|
|
268
|
-
* - `cancel(reason?)` — request cancellation of the running workflow. Equivalent
|
|
269
|
-
* to aborting the `AbortSignal` passed via {@link ExecuteOptions.signal}. Safe
|
|
270
|
-
* to call after the run has already settled (no-op).
|
|
271
|
-
*
|
|
272
|
-
* - `runId` — a `Promise<string>` that resolves to the workflow run id
|
|
273
|
-
* once the persona's agent step has actually spawned. This is deliberately
|
|
274
|
-
* a promise (not `string | undefined`) because the id is not known at the
|
|
275
|
-
* moment `sendMessage()` returns — the workflow hasn't started yet. The
|
|
276
|
-
* resolution timing contract is:
|
|
277
|
-
*
|
|
278
|
-
* 1. If the agent subprocess emits any stdout/stderr, `runId` resolves
|
|
279
|
-
* immediately on the first progress event (see `onStepProgress`).
|
|
280
|
-
* 2. Otherwise, it resolves ~250ms after the agent step spawns (safety
|
|
281
|
-
* net armed in `onStepSpawn`, see `src/index.ts` around the
|
|
282
|
-
* `runIdReadyTimer` definition).
|
|
283
|
-
* 3. If the run settles (completes/fails/cancels) before either of the
|
|
284
|
-
* above fire, it resolves at settle time with the final run id.
|
|
285
|
-
*
|
|
286
|
-
* Practical consequence: `await run.runId` is *not* instantaneous — do not
|
|
287
|
-
* block on it in a tight synchronous path expecting a cached value.
|
|
288
|
-
*
|
|
289
|
-
* Error mirroring: if `sendMessage()` fails before the workflow has started
|
|
290
|
-
* (e.g. the dynamic `@agent-relay/sdk/workflows` import throws, or the
|
|
291
|
-
* `WorkflowRunner` constructor throws), `runId` rejects with the same
|
|
292
|
-
* error as the main promise. Awaiting `runId` is therefore safe to
|
|
293
|
-
* `try/catch` — you will observe the same failure twice, not miss it.
|
|
294
|
-
* Note that you are not required to observe `runId`; the main promise
|
|
295
|
-
* is the authoritative outcome channel, and the auxiliary rejection
|
|
296
|
-
* on `runId` is internally suppressed when no handler is attached.
|
|
297
|
-
*/
|
|
298
|
-
export interface PersonaExecution extends Promise<ExecuteResult> {
|
|
299
|
-
cancel(reason?: string): void;
|
|
300
|
-
readonly runId: Promise<string>;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Return value of {@link usePersona}. A side-effect-free bundle of
|
|
304
|
-
* "what this persona is" plus grouped install metadata and a
|
|
305
|
-
* `sendMessage()` closure for running it.
|
|
306
|
-
*
|
|
307
|
-
* There are two ways to use the fields, and they are **alternatives**,
|
|
308
|
-
* not sequential steps:
|
|
309
|
-
*
|
|
310
|
-
* **Mode A — let `sendMessage()` handle install (recommended default):**
|
|
311
|
-
* ```ts
|
|
312
|
-
* const { sendMessage } = usePersona('npm-provenance');
|
|
313
|
-
* const result = await sendMessage('Your task', { workingDirectory: '.' });
|
|
314
|
-
* ```
|
|
315
|
-
* `sendMessage()` installs the persona's skills as the first step of its
|
|
316
|
-
* ad-hoc workflow, then runs the agent task. No manual install needed.
|
|
317
|
-
*
|
|
318
|
-
* **Mode B — pre-stage install yourself, then `sendMessage()` without re-install:**
|
|
319
|
-
* ```ts
|
|
320
|
-
* const { install, sendMessage } = usePersona('npm-provenance');
|
|
321
|
-
* // e.g. inside a Dockerfile RUN, or a CI bootstrap step:
|
|
322
|
-
* spawnSync(install.commandString, { shell: true, stdio: 'inherit' });
|
|
323
|
-
* // then, at runtime:
|
|
324
|
-
* const result = await sendMessage('Your task', {
|
|
325
|
-
* workingDirectory: '.',
|
|
326
|
-
* installSkills: false, // skip re-install; skills are already staged
|
|
327
|
-
* });
|
|
328
|
-
* ```
|
|
329
|
-
* Use this when you want to install skills once at build/CI time for
|
|
330
|
-
* caching, hermeticity, offline runtime, or split-trust reasons — or
|
|
331
|
-
* when you want to wrap the install with your own process management
|
|
332
|
-
* (custom timeout, logging, retry, alternative runner, etc.).
|
|
333
|
-
*
|
|
334
|
-
* In both modes, the `await sendMessage(...)` call above **only resolves
|
|
335
|
-
* when `status === 'completed'`**. Non-zero exits / timeouts throw a
|
|
336
|
-
* {@link PersonaExecutionError}, and cancellation throws an `AbortError`;
|
|
337
|
-
* both carry a typed `.result` for inspection. See {@link ExecuteResult}
|
|
338
|
-
* for the full outcome contract.
|
|
339
|
-
*
|
|
340
|
-
* ⚠️ **Do not combine the two modes without `installSkills: false`.**
|
|
341
|
-
* Running `spawnSync(install.commandString, ...)` *and then* calling
|
|
342
|
-
* `sendMessage(task)` without passing `installSkills: false` will install
|
|
343
|
-
* the persona's skills twice. The default value of `installSkills` is
|
|
344
|
-
* `true` (see {@link ExecuteOptions}).
|
|
345
|
-
*
|
|
346
|
-
* A third usage is install-only: if all you want is to materialize
|
|
347
|
-
* the persona's skills into the repo (for a human or another tool
|
|
348
|
-
* to use), run `install.commandString` and never call `sendMessage()`.
|
|
192
|
+
* Return value of {@link usePersona}. A side-effect-free bundle of "what this
|
|
193
|
+
* persona is" plus grouped install metadata. Nothing is installed, spawned, or
|
|
194
|
+
* written to disk by constructing this object — run `install.commandString`
|
|
195
|
+
* yourself when you are ready to materialize the persona's skills.
|
|
349
196
|
*/
|
|
350
197
|
export interface PersonaContext {
|
|
351
198
|
/** Resolved persona choice for this intent/profile: identity, tier, runtime, skills, and routing rationale. */
|
|
352
199
|
readonly selection: PersonaSelection;
|
|
353
200
|
/** Grouped install metadata for the resolved persona's skills. */
|
|
354
201
|
readonly install: PersonaInstallContext;
|
|
355
|
-
/**
|
|
356
|
-
* Run the resolved persona against `task`. Builds an ad-hoc agent-relay
|
|
357
|
-
* workflow, optionally runs `prpm install` as its first step (see
|
|
358
|
-
* {@link ExecuteOptions.installSkills}, default `true`), then invokes the
|
|
359
|
-
* persona's harness agent with the task. Returns a {@link PersonaExecution}
|
|
360
|
-
* (an awaitable promise with `cancel()` and `runId` attached).
|
|
361
|
-
*/
|
|
362
|
-
sendMessage(task: string, options?: ExecuteOptions): PersonaExecution;
|
|
363
|
-
}
|
|
364
|
-
export declare class PersonaExecutionError extends Error {
|
|
365
|
-
readonly result: ExecuteResult;
|
|
366
|
-
cause?: unknown;
|
|
367
|
-
constructor(message: string, result: ExecuteResult, cause?: unknown);
|
|
368
202
|
}
|
|
369
203
|
/**
|
|
370
204
|
* Given a set of persona skills and the harness the persona will run under,
|
|
@@ -393,68 +227,19 @@ export declare function resolvePersona(intent: PersonaIntent, profile?: RoutingP
|
|
|
393
227
|
export declare function resolvePersonaByTier(intent: PersonaIntent, tier?: PersonaTier): PersonaSelection;
|
|
394
228
|
/**
|
|
395
229
|
* Resolve a persona for `intent` and return a {@link PersonaContext}
|
|
396
|
-
* bundling the resolved persona
|
|
397
|
-
* `sendMessage()` closure for running the persona against a task.
|
|
230
|
+
* bundling the resolved persona and grouped install metadata.
|
|
398
231
|
*
|
|
399
232
|
* **This is not a React hook.** The `use*` prefix is unfortunate — it is
|
|
400
233
|
* a plain synchronous factory with no implicit state, no side effects,
|
|
401
234
|
* and no rules-of-hooks constraints. Calling `usePersona(intent)` does
|
|
402
235
|
* nothing but resolve routing config and pre-compute the install plan.
|
|
403
|
-
* Nothing is installed, spawned, or written to disk until you
|
|
404
|
-
* `
|
|
405
|
-
*
|
|
406
|
-
* See {@link PersonaContext} for the two usage modes (let `sendMessage()`
|
|
407
|
-
* handle install vs. pre-stage install and pass `installSkills: false`)
|
|
408
|
-
* and the double-install caveat.
|
|
236
|
+
* Nothing is installed, spawned, or written to disk until you run
|
|
237
|
+
* `install.commandString` yourself.
|
|
409
238
|
*
|
|
410
239
|
* @example
|
|
411
|
-
*
|
|
412
|
-
* // Only `status: 'completed'` resolves; non-zero exits / timeouts throw
|
|
413
|
-
* // PersonaExecutionError and cancellation throws AbortError, both with
|
|
414
|
-
* // the typed ExecuteResult attached as `err.result`.
|
|
415
|
-
* const { sendMessage } = usePersona('npm-provenance');
|
|
416
|
-
* try {
|
|
417
|
-
* const result = await sendMessage('Set up npm trusted publishing for this repo', {
|
|
418
|
-
* workingDirectory: '.',
|
|
419
|
-
* timeoutSeconds: 600,
|
|
420
|
-
* });
|
|
421
|
-
* // result.status === 'completed' here
|
|
422
|
-
* } catch (err) {
|
|
423
|
-
* const execErr = err as Error & { result?: ExecuteResult };
|
|
424
|
-
* console.error('persona run failed', execErr.result?.status, execErr.result?.stderr);
|
|
425
|
-
* }
|
|
426
|
-
*
|
|
427
|
-
* @example
|
|
428
|
-
* // Mode B — pre-stage install out-of-band (e.g. in a Dockerfile), then
|
|
429
|
-
* // run at runtime without re-installing:
|
|
430
|
-
* const { install, sendMessage } = usePersona('npm-provenance');
|
|
431
|
-
* // build/CI step:
|
|
240
|
+
* const { selection, install } = usePersona('npm-provenance');
|
|
432
241
|
* spawnSync(install.commandString, { shell: true, stdio: 'inherit' });
|
|
433
|
-
* //
|
|
434
|
-
* const result = await sendMessage('Your task', {
|
|
435
|
-
* workingDirectory: '.',
|
|
436
|
-
* installSkills: false,
|
|
437
|
-
* });
|
|
438
|
-
*
|
|
439
|
-
* @example
|
|
440
|
-
* // Cancellation + streaming progress. Aborting causes `await run` to
|
|
441
|
-
* // throw an AbortError with `err.result.status === 'cancelled'`, so
|
|
442
|
-
* // wrap in try/catch if you plan to abort.
|
|
443
|
-
* const abort = new AbortController();
|
|
444
|
-
* const run = usePersona('npm-provenance').sendMessage('Your task', {
|
|
445
|
-
* signal: abort.signal,
|
|
446
|
-
* onProgress: ({ stream, text }) => process[stream].write(text),
|
|
447
|
-
* });
|
|
448
|
-
* run.runId.then((id) => console.log('workflow run id:', id));
|
|
449
|
-
* // ...later:
|
|
450
|
-
* abort.abort(); // or: run.cancel('user requested');
|
|
451
|
-
* try {
|
|
452
|
-
* const result = await run;
|
|
453
|
-
* // result.status === 'completed'
|
|
454
|
-
* } catch (err) {
|
|
455
|
-
* const execErr = err as Error & { result?: ExecuteResult };
|
|
456
|
-
* // execErr.name === 'AbortError' and execErr.result?.status === 'cancelled'
|
|
457
|
-
* }
|
|
242
|
+
* // hand `selection` to your harness launcher of choice.
|
|
458
243
|
*
|
|
459
244
|
* @param intent The persona intent to resolve (e.g. `'npm-provenance'`).
|
|
460
245
|
* @param options Optional overrides. `harness` forces a specific harness
|
|
@@ -477,7 +262,7 @@ export declare function usePersona(intent: PersonaIntent, options?: {
|
|
|
477
262
|
* Same as {@link usePersona}, but takes a pre-resolved {@link PersonaSelection}
|
|
478
263
|
* instead of an intent. Use this when you have a selection produced outside
|
|
479
264
|
* the standard repo catalog — for example, a user-local persona override
|
|
480
|
-
* loaded from disk
|
|
265
|
+
* loaded from disk.
|
|
481
266
|
*/
|
|
482
267
|
export declare function useSelection(baseSelection: PersonaSelection, options?: {
|
|
483
268
|
harness?: Harness;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|