@@ -42,5 +42,4 @@ import type { ILLMProvider } from '../../llm/ILLMProvider.ts'; | ||
| }>): Promise<AgentResult>; | ||
| private runExecutorStage; | ||
| private registerTools; | ||
| } | ||
| //# sourceMappingURL=BaseAgent.d.ts.map |
@@ -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":"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"} | ||
| {"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 @@ |
+1
-1
| { | ||
| "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 |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 3 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
1640970
0.37%16114
0.26%