Sign In

agenthood

Package Overview
Dependencies
Maintainers
1
Versions
81
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

agenthood - npm Package Compare versions

Comparing version
3.34.0
to
3.34.1
+0
-1
dist/agents/base/BaseAgent.d.ts

@@ -42,5 +42,4 @@ import type { ILLMProvider } from '../../llm/ILLMProvider.ts';

}>): Promise<AgentResult>;
private runExecutorStage;
private registerTools;
}
//# sourceMappingURL=BaseAgent.d.ts.map
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../../src/agents/base/BaseAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;GAIG;AACH,8BAAsB,SAAS;IAY3B,QAAQ,CAAC,GAAG,EAAE,YAAY;IAC1B,SAAS,CAAC,aAAa,EAAE,SAAS;IAClC,SAAS,CAAC,YAAY,EAAE,YAAY;IAbtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAChC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,CAAC;IAElB,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAG9B,GAAG,EAAE,YAAY,EAChB,aAAa,EAAE,SAAS,EACxB,YAAY,EAAE,YAAY,EACpC,OAAO,GAAE,gBAAqB;IAS1B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAOzE;;;;;;;OAOG;cACa,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5F,OAAO,CAAC,WAAW,CAAC;YA0BT,gBAAgB;IAmB9B,OAAO,CAAC,aAAa;CAOtB"}
{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../../src/agents/base/BaseAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;GAIG;AACH,8BAAsB,SAAS;IAY3B,QAAQ,CAAC,GAAG,EAAE,YAAY;IAC1B,SAAS,CAAC,aAAa,EAAE,SAAS;IAClC,SAAS,CAAC,YAAY,EAAE,YAAY;IAbtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAChC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,CAAC;IAElB,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAG9B,GAAG,EAAE,YAAY,EAChB,aAAa,EAAE,SAAS,EACxB,YAAY,EAAE,YAAY,EACpC,OAAO,GAAE,gBAAqB;IAS1B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAOzE;;;;;;;OAOG;cACa,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5F,OAAO,CAAC,WAAW,CAAC;IA0BvB,OAAO,CAAC,aAAa;CAOtB"}

@@ -1,2 +0,1 @@

import { MaxStepsExceededError } from "../../reasoning/ReActLoop.js";
import { RunLifecycle } from "./runLifecycle.js";

@@ -44,3 +43,3 @@ /**

context.tracer.startSpan(this.role);
const { output, error, durationMs } = await this.runExecutorStage(execute, systemPrompt, input);
const { output, error, durationMs } = await this.lifecycle.runStage(execute, systemPrompt, input);
context.tracer.endSpan(this.role, { output });

@@ -59,19 +58,2 @@ this.lifecycle.recordTrace({ input, output, durationMs, error, context });

}
async runExecutorStage(execute, systemPrompt, input) {
const startTime = performance.now();
let error = null;
let output = '';
try {
const executed = await execute(systemPrompt, input);
output = executed.output;
if (executed.model)
this.reasoningLoop.setModel(executed.model);
}
catch (err) {
error = err;
if (err instanceof MaxStepsExceededError)
output = err.partialResult;
}
return { output, error, durationMs: Math.round(performance.now() - startTime) };
}
registerTools() {

@@ -78,0 +60,0 @@ for (const tool of this.tools) {

@@ -1,1 +0,1 @@

{"version":3,"file":"BaseAgent.js","sourceRoot":"","sources":["../../../src/agents/base/BaseAgent.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"BaseAgent.js","sourceRoot":"","sources":["../../../src/agents/base/BaseAgent.ts"],"names":[],"mappings":"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"}

@@ -6,3 +6,4 @@ import type { ExecutionContext } from '../../core/ExecutionContext.ts';

/**
* Persistence half of the agent lifecycle: tracing, residual memory, episode
* Execution and persistence halves of the agent lifecycle: loop execution with
* timing and soft-failure handling, tracing, residual memory, episode
* learning, Sentry reporting, and decision/provenance recording. Kept out of

@@ -20,2 +21,16 @@ * BaseAgent so the execution orchestration stays readable. `getRole` is a

private get report();
/**
* Runs the agent's executor with timing and soft-failure handling. A hard
* failure is returned (never thrown) so the caller records it and decides
* whether to rethrow; MaxStepsExceededError carries a partial result that
* must still reach the caller.
*/
runStage(execute: (systemPrompt: string, input: string) => Promise<{
output: string;
model?: string;
}>, systemPrompt: string, input: string): Promise<{
output: string;
error: unknown;
durationMs: number;
}>;
recordTrace(args: {

@@ -22,0 +37,0 @@ input: string;

@@ -1,1 +0,1 @@

{"version":3,"file":"runLifecycle.d.ts","sourceRoot":"","sources":["../../../src/agents/base/runLifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAsB7D;;;;;;GAMG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAHf,OAAO,EAAE,MAAM,MAAM,EACrB,aAAa,EAAE,SAAS,EACxB,cAAc,CAAC,EAAE,cAAc,YAAA,EAC/B,cAAc,CAAC,EAAE,cAAc,YAAA;IAGlD,OAAO,KAAK,MAAM,GAEjB;IAED,WAAW,CAAC,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,OAAO,CAAA;QACd,OAAO,EAAE,gBAAgB,CAAA;KAC1B,GAAG,IAAI;IAcR,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAQ9D,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAWvC,aAAa,CACjB,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;IAiBV,SAAS,CACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;YAsBF,cAAc;YAgBd,kBAAkB;CAcjC"}
{"version":3,"file":"runLifecycle.d.ts","sourceRoot":"","sources":["../../../src/agents/base/runLifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAsB7D;;;;;;;GAOG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAHf,OAAO,EAAE,MAAM,MAAM,EACrB,aAAa,EAAE,SAAS,EACxB,cAAc,CAAC,EAAE,cAAc,YAAA,EAC/B,cAAc,CAAC,EAAE,cAAc,YAAA;IAGlD,OAAO,KAAK,MAAM,GAEjB;IAED;;;;;OAKG;IACG,QAAQ,CACZ,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAC7F,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAelE,WAAW,CAAC,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,OAAO,CAAA;QACd,OAAO,EAAE,gBAAgB,CAAA;KAC1B,GAAG,IAAI;IAcR,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAQ9D,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAWvC,aAAa,CACjB,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;IAiBV,SAAS,CACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;YAsBF,cAAc;YAgBd,kBAAkB;CAcjC"}

@@ -6,3 +6,4 @@ import { randomUUID } from 'node:crypto';

/**
* Persistence half of the agent lifecycle: tracing, residual memory, episode
* Execution and persistence halves of the agent lifecycle: loop execution with
* timing and soft-failure handling, tracing, residual memory, episode
* learning, Sentry reporting, and decision/provenance recording. Kept out of

@@ -27,2 +28,25 @@ * BaseAgent so the execution orchestration stays readable. `getRole` is a

}
/**
* Runs the agent's executor with timing and soft-failure handling. A hard
* failure is returned (never thrown) so the caller records it and decides
* whether to rethrow; MaxStepsExceededError carries a partial result that
* must still reach the caller.
*/
async runStage(execute, systemPrompt, input) {
const startTime = performance.now();
let error = null;
let output = '';
try {
const executed = await execute(systemPrompt, input);
output = executed.output;
if (executed.model)
this.reasoningLoop.setModel(executed.model);
}
catch (err) {
error = err;
if (err instanceof MaxStepsExceededError)
output = err.partialResult;
}
return { output, error, durationMs: Math.round(performance.now() - startTime) };
}
recordTrace(args) {

@@ -29,0 +53,0 @@ recordAgentTrace({

@@ -1,1 +0,1 @@

{"version":3,"file":"runLifecycle.js","sourceRoot":"","sources":["../../../src/agents/base/runLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAI3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAoBhE;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IAEJ;IACA;IACA;IACA;IAJnB,YACmB,OAAqB,EACrB,aAAwB,EACxB,cAA+B,EAC/B,cAA+B;QAH/B,YAAO,GAAP,OAAO,CAAc;QACrB,kBAAa,GAAb,aAAa,CAAW;QACxB,mBAAc,GAAd,cAAc,CAAiB;QAC/B,mBAAc,GAAd,cAAc,CAAiB;IAC/C,CAAC;IAEJ,IAAY,MAAM;QAChB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;IACtF,CAAC;IAED,WAAW,CAAC,IAMX;QACC,gBAAgB,CAAC;YACf,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;YACpB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS;YAC5C,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;YAC/B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;IACJ,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,OAAyB;QACrD,uEAAuE;QACvE,iEAAiE;QACjE,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QACxH,IAAI,aAAa,KAAK,SAAS;YAAE,OAAM;QACvC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC3F,CAAC;IAED,YAAY,CAAC,OAAyB;QACpC,MAAM,UAAU,GAAe;YAC7B,SAAS,EAAE,OAAO,CAAC,WAAW;YAC9B,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;SACrC,CAAA;QACD,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5D,KAAK,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACnF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,KAAc,EACd,UAAkB,EAClB,OAAyB;QAEzB,yEAAyE;QACzE,wEAAwE;QACxE,YAAY;QACZ,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;YAC3C,OAAM;QACR,CAAC;QACD,MAAM,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE;YACxC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;YACtB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YACjD,UAAU;YACV,MAAM,EAAE,OAAO;YACf,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,WAAW;SAC5D,CAAC,CAAA;QACF,MAAM,KAAK,CAAA;IACb,CAAC;IAED,KAAK,CAAC,SAAS,CACb,KAAa,EACb,MAAc,EACd,KAAc,EACd,OAAyB;QAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,EAAE,CAAA;QAC9C,MAAM,YAAY,GAAG,KAAK,KAAK,IAAI,CAAA;QAEnC,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;QACtF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,YAAY;YAClD,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACpF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QACtD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAExD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA;YACrG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA;QACpF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,sCAAsC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAClG,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAwB;QACnD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACzC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;YACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YACnC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,aAAa;YACzD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;YACnD,IAAI,EAAE,CAAC,KAAK,CAAC;YACb,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE;SAC9B,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAA4B;QAC3D,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YACzC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YAClC,UAAU,EAAE,UAAU;YACtB,UAAU,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,SAAS,EAAE,gBAAgB;YAC3B,IAAI,EAAE,WAAW;YACjB,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;SAC9D,CAAC,CAAA;IACJ,CAAC;CACF"}
{"version":3,"file":"runLifecycle.js","sourceRoot":"","sources":["../../../src/agents/base/runLifecycle.ts"],"names":[],"mappings":"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"}

@@ -9,5 +9,4 @@ import type { BaseAgent } from '../agents/base/BaseAgent.ts';

get(role: string): BaseAgent;
list(): string[];
has(role: string): boolean;
}
//# sourceMappingURL=AgentRegistry.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"AgentRegistry.d.ts","sourceRoot":"","sources":["../../src/core/AgentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA+B;IAE7C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIhC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAQ5B,IAAI,IAAI,MAAM,EAAE;IAIhB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}
{"version":3,"file":"AgentRegistry.d.ts","sourceRoot":"","sources":["../../src/core/AgentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA+B;IAE7C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIhC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAQ5B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}

@@ -19,5 +19,2 @@ export class AgentNotFoundError extends Error {

}
list() {
return Array.from(this.agents.keys());
}
has(role) {

@@ -24,0 +21,0 @@ return this.agents.has(role);

@@ -1,1 +0,1 @@

{"version":3,"file":"AgentRegistry.js","sourceRoot":"","sources":["../../src/core/AgentRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,IAAY;QACtB,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IAChB,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAA;IAE7C,QAAQ,CAAC,KAAgB;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;CACF"}
{"version":3,"file":"AgentRegistry.js","sourceRoot":"","sources":["../../src/core/AgentRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,IAAY;QACtB,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IAChB,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAA;IAE7C,QAAQ,CAAC,KAAgB;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;CACF"}

@@ -1,5 +0,6 @@

import type { ITool, ToolResult } from "../ITool.ts";
import type { JSONSchema } from "../../llm/types.ts";
import type { ExecutionContext } from "../../core/ExecutionContext.ts";
import type { AgentRegistry } from "../../core/AgentRegistry.ts";
import type { ITool, ToolResult } from '../ITool.ts';
import type { JSONSchema } from '../../llm/types.ts';
import type { ExecutionContext } from '../../core/ExecutionContext.ts';
import type { AgentRegistry } from '../../core/AgentRegistry.ts';
export declare const subagentTaskInputSchema: JSONSchema;
export interface SubagentTaskSkillOptions {

@@ -6,0 +7,0 @@ /** Optional allowlist of agent roles that can be delegated to. If not provided, all registered agents are allowed. */

@@ -1,1 +0,1 @@

{"version":3,"file":"SubagentTaskSkill.d.ts","sourceRoot":"","sources":["../../../src/tools/core/SubagentTaskSkill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAehE,MAAM,WAAW,wBAAwB;IACvC,sHAAsH;IACtH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,qBAAa,iBAAkB,YAAW,KAAK;IAO3C,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IAPjB,IAAI,SAAkB;IACtB,WAAW,SACyL;IACpM,WAAW,aAAc;gBAGf,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,wBAA6B;IAG1C,OAAO,CACX,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;CAoCvB"}
{"version":3,"file":"SubagentTaskSkill.d.ts","sourceRoot":"","sources":["../../../src/tools/core/SubagentTaskSkill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAGhE,eAAO,MAAM,uBAAuB,EAAE,UAUrC,CAAA;AAED,MAAM,WAAW,wBAAwB;IACvC,sHAAsH;IACtH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,qBAAa,iBAAkB,YAAW,KAAK;IAO3C,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IAPjB,IAAI,SAAkB;IACtB,WAAW,SACyL;IACpM,WAAW,aAA0B;gBAG3B,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,wBAA6B;IAG1C,OAAO,CACX,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;CAsCvB"}
import { AgentNotFoundError } from "../../core/AgentRegistry.js";
const inputSchema = {
type: "object",
export const subagentTaskInputSchema = {
type: 'object',
properties: {
role: {
type: "string",
description: "Agent role to delegate to (e.g. developer, reviewer)",
type: 'string',
description: 'Agent role to delegate to (e.g. developer, reviewer)',
},
task: { type: "string", description: "Task description for the subagent" },
task: { type: 'string', description: 'Task description for the subagent' },
},
required: ["role", "task"],
required: ['role', 'task'],
};

@@ -16,5 +16,5 @@ export class SubagentTaskSkill {

options;
name = "delegate_task";
description = "Delegate a task to a specialized subagent. Use this for work that needs focused expertise or isolated context (e.g. code review, architecture planning, debugging). Returns the subagent output.";
inputSchema = inputSchema;
name = 'delegate_task';
description = 'Delegate a task to a specialized subagent. Use this for work that needs focused expertise or isolated context (e.g. code review, architecture planning, debugging). Returns the subagent output.';
inputSchema = subagentTaskInputSchema;
constructor(agentRegistry, options = {}) {

@@ -30,4 +30,4 @@ this.agentRegistry = agentRegistry;

success: false,
output: "",
error: `Delegation to role "${role}" is not allowed. Allowed roles: ${this.options.allowedRoles.join(", ")}`,
output: '',
error: `Delegation to role "${role}" is not allowed. Allowed roles: ${this.options.allowedRoles.join(', ')}`,
};

@@ -50,10 +50,12 @@ }

if (err instanceof AgentNotFoundError) {
// fail closed: do not disclose the registered-role surface to the
// calling agent — role names are for the orchestration layer to know
return {
success: false,
output: "",
error: `No agent found for role "${role}". Available: ${this.agentRegistry.list().join(", ")}`,
output: '',
error: `No agent found for role "${role}".`,
};
}
const msg = err instanceof Error ? err.message : String(err);
return { success: false, output: "", error: `Subagent failed: ${msg}` };
return { success: false, output: '', error: `Subagent failed: ${msg}` };
}

@@ -60,0 +62,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"SubagentTaskSkill.js","sourceRoot":"","sources":["../../../src/tools/core/SubagentTaskSkill.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAEhE,MAAM,WAAW,GAAe;IAC9B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sDAAsD;SACpE;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;KAC3E;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B,CAAA;AAOD,MAAM,OAAO,iBAAiB;IAOlB;IACA;IAPV,IAAI,GAAG,eAAe,CAAA;IACtB,WAAW,GACT,kMAAkM,CAAA;IACpM,WAAW,GAAG,WAAW,CAAA;IAEzB,YACU,aAA4B,EAC5B,UAAoC,EAAE;QADtC,kBAAa,GAAb,aAAa,CAAe;QAC5B,YAAO,GAAP,OAAO,CAA+B;IAC7C,CAAC;IAEJ,KAAK,CAAC,OAAO,CACX,KAAc,EACd,OAAyB;QAEzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAuC,CAAA;QAE9D,6CAA6C;QAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3E,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,uBAAuB,IAAI,oCAAoC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7G,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1C,mEAAmE;YACnE,qEAAqE;YACrE,2BAA2B;YAC3B,MAAM,SAAS,GAAG,oGAAoG,IAAI,qBAAqB,CAAA;YAC/I,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAClD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBACtC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,4BAA4B,IAAI,iBAAiB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC/F,CAAA;YACH,CAAC;YACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,oBAAoB,GAAG,EAAE,EAAE,CAAA;QACzE,CAAC;IACH,CAAC;CACF"}
{"version":3,"file":"SubagentTaskSkill.js","sourceRoot":"","sources":["../../../src/tools/core/SubagentTaskSkill.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAEhE,MAAM,CAAC,MAAM,uBAAuB,GAAe;IACjD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sDAAsD;SACpE;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;KAC3E;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B,CAAA;AAOD,MAAM,OAAO,iBAAiB;IAOlB;IACA;IAPV,IAAI,GAAG,eAAe,CAAA;IACtB,WAAW,GACT,kMAAkM,CAAA;IACpM,WAAW,GAAG,uBAAuB,CAAA;IAErC,YACU,aAA4B,EAC5B,UAAoC,EAAE;QADtC,kBAAa,GAAb,aAAa,CAAe;QAC5B,YAAO,GAAP,OAAO,CAA+B;IAC7C,CAAC;IAEJ,KAAK,CAAC,OAAO,CACX,KAAc,EACd,OAAyB;QAEzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAuC,CAAA;QAE9D,6CAA6C;QAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3E,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,uBAAuB,IAAI,oCAAoC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7G,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1C,mEAAmE;YACnE,qEAAqE;YACrE,2BAA2B;YAC3B,MAAM,SAAS,GAAG,oGAAoG,IAAI,qBAAqB,CAAA;YAC/I,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAClD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBACtC,kEAAkE;gBAClE,qEAAqE;gBACrE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,4BAA4B,IAAI,IAAI;iBAC5C,CAAA;YACH,CAAC;YACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,oBAAoB,GAAG,EAAE,EAAE,CAAA;QACzE,CAAC;IACH,CAAC;CACF"}

@@ -105,2 +105,13 @@ # Agent System

Delegation is bounded at two levels. First, the role allowlist (`DELEGATION_ALLOWED_ROLES`)
admits only read-only analysis roles — never write-capable agents. Second, tool
isolation: every agent and each member run constructs its own `ToolRegistry` +
`ReActLoop` (`ApplicationContext.setupAgents`, `runMemberTask`), so a delegated
subagent's tool schemas are always its own load-out and never the caller's write
tools. The delegated task itself travels inside an untrusted `<delegated_task>`
boundary, and the only surface genuinely shared is the `ExecutionContext`
(memory, tracer, artifacts). A compromise of the caller therefore cannot reach
writes through delegation that the caller could not already reach with its own
tools.
---

@@ -107,0 +118,0 @@

{
"name": "agenthood",
"version": "3.34.0",
"version": "3.34.1",
"description": "A full AI engineering team as plain Markdown files. 19 specialized agents for code quality, commits, reviews, security, and more — works with any agent runtime.",

@@ -5,0 +5,0 @@ "keywords": [

@@ -12,2 +12,9 @@ #!/usr/bin/env tsx

// build-progress output is deliberate (this is a build script); ACADEMY_QUIET
// silences it for callers that want a clean stdout
const QUIET = process.env.ACADEMY_QUIET === '1'
const LOG = (message: string): void => {
if (!QUIET) console.log(message)
}
/** Recursively walk a directory and return all `.md` file paths. */

@@ -133,2 +140,17 @@ function walk(dir: string): string[] {

/**
* Render a markdown link to its HTML anchor. href and title are interpolated
* into attribute values, so they are HTML-escaped — a doc value containing
* `" onmouseover="...` must not break out of the attribute.
*/
export function renderLink(
link: { href: string; title?: string | null; text: string },
fileDir: string,
sourceIsIndex: boolean,
): string {
const rewritten = rewriteLink(link.href, fileDir, sourceIsIndex)
const titleAttr = link.title ? ` title="${escapeHtml(link.title)}"` : ''
return `<a href="${escapeHtml(rewritten)}"${titleAttr}>${link.text}</a>`
}
/** Convert a single markdown file to HTML and write it to the site output directory. */

@@ -146,5 +168,3 @@ function convertMarkdown(filePath: string): void {

renderer.link = function ({ href, title, text }) {
const rewritten = rewriteLink(href, fileDir, isIndex)
const titleAttr = title ? ` title="${title}"` : ''
return `<a href="${rewritten}"${titleAttr}>${text}</a>`
return renderLink({ href, title, text }, fileDir, isIndex)
}

@@ -165,3 +185,3 @@

writeFileSync(outPath, htmlTemplate(title, html))
console.log(' →', relative(OUT_DIR, outPath))
LOG(` → ${relative(OUT_DIR, outPath)}`)
}

@@ -171,5 +191,10 @@

function build(): void {
console.log('Building Academy site...\n')
LOG('Building Academy site...\n')
if (existsSync(OUT_DIR)) rmSync(OUT_DIR, { recursive: true })
if (existsSync(OUT_DIR)) {
// OUT_DIR is derived from ROOT so it cannot equal ROOT, but refuse to
// recurse-wipe if a future edit ever lets them alias
if (resolve(OUT_DIR) === ROOT) throw new Error(`refusing to wipe the repo root (${ROOT})`)
rmSync(OUT_DIR, { recursive: true })
}

@@ -184,3 +209,3 @@ const files = SRC_DIRS

console.log('\nDone —', files.length, 'pages built to site/')
LOG(`\nDone — ${files.length} pages built to site/`)
}

@@ -187,0 +212,0 @@

@@ -24,2 +24,40 @@ ---

## Repo Conventions the CI Enforces
These rules come from the Doorman (commit hooks), the Warden (lint/size/complexity),
and the Auditor (security/audit gates). Ship them on the first pass:
- **Style:** single quotes, no semicolons, LF endings — in source *and* test files.
Match the nearest sibling file exactly; never introduce a new style island.
- **Commit types:** only `feat | fix | docs | test | refactor | ci | chore | revert`.
The commit-msg hook rejects anything else (no `build`, no `style`, no `wip`).
- **Shared test helpers:** `tests/helpers/agentFixtures.ts` already provides
`createAgentHarness`, `createMockLLM`, `createAgentInstance`, `asPromptable`,
`expectRegisteredSkills`, `expectUntrustedBoundary`, `createMockAgent`. Import
them; never copy a mock factory or a `beforeEach`/`skills` block into a test
file — duplication is a Warden warning that grows on every round.
- **Deterministic assertions:** never guard an `expect` behind `if (...) { }`.
A guarded assertion is vacuous — it passes when the condition is absent.
Assert the deterministic contract (trust-boundary tags, guard text, exported
constants), not environment-dependent content such as SKILL.md lore.
- **Import the literal, don't repeat it:** when a source module exports a
constant (e.g. `subagentTaskInputSchema`), assert against it directly
instead of restating the literal.
- **Shell scripts (`.github/scripts/`, `scripts/`):** named constants for magic
values (severity levels, exemption flags), one concern per function and keep
each function under ~40 lines, surface captured stderr on failure paths, and
run `bash -n <file>` after every edit.
- **File discipline:** keep files under ~300 lines and functions under ~40.
When a test file approaches the limit, extract to a shared helper — the
answer to growth is reuse, not a new file.
- **Fail-closed surfaces:** agent-facing error messages must not enumerate
registry or role contents. If removing the last caller of a public method
leaves it dead, remove the method too.
- **The decision gate:** the Warden/Auditor analyses fail the gate when their
`warnings=N` verdict exceeds the threshold (2). Treat every reported warning
as a checklist item and fix the genuine ones. When repeated rounds keep
failing on style or accepted-and-documented residual items, escalate the gate
policy (threshold, prompt bounding) to a human — never raise a threshold or
edit the review prompts unilaterally.
## Process

@@ -50,2 +88,3 @@

- Run lint, typecheck, and build gates where the repository provides them — The Doorman enforces them in CI either way
- For script edits run `bash -n`; for doc changes run `.github/scripts/librarian-check.sh`; for dependency-touching changes run `.github/scripts/audit-check.sh`

@@ -76,2 +115,7 @@ ### 4. Repair Before Expanding

- Widening the change's scope to make validation pass
- Guarded assertions (`if (cond) { expect(...) }`) that pass vacuously
- Duplicating a mock factory or fixture block that `tests/helpers/agentFixtures.ts` already provides
- Leaving a public method dead after removing its last caller
- Using a commit type outside the Doorman's allowed set
- Raising a CI gate threshold or editing review prompts to make a failing gate pass
- Handing off to The Reviewer with failing tests or unresolved `[blocking]` findings

@@ -100,4 +144,5 @@ - Pushing or merging without explicit user confirmation

- [ ] No comments explaining *what* — only *why* when non-obvious
- [ ] The result matches the repository's existing conventions
- [ ] The result matches the repository's existing conventions (single quotes, no semicolons, shared fixtures)
- [ ] No guarded or vacuous assertions were introduced
- [ ] The change has been reviewed by The Reviewer and every `[blocking]` finding is resolved
- [ ] No push or merge was performed without explicit user confirmation