@tangle-network/agent-runtime 0.1.0 → 0.3.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.
- package/README.md +47 -0
- package/dist/index.d.ts +131 -1
- package/dist/index.js +236 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -55,6 +55,53 @@ If knowledge readiness fails, `runAgentTask` stops before domain actions by
|
|
|
55
55
|
default. Adapters can override `onKnowledgeBlocked` to emit a domain action,
|
|
56
56
|
such as asking a user, querying a connector, or inspecting a repo.
|
|
57
57
|
|
|
58
|
+
`runAgentTask` also emits typed lifecycle events through `onEvent`:
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
await runAgentTask({
|
|
62
|
+
task,
|
|
63
|
+
adapter,
|
|
64
|
+
knowledge,
|
|
65
|
+
onEvent(event) {
|
|
66
|
+
console.log(event.type)
|
|
67
|
+
},
|
|
68
|
+
})
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Events cover readiness, question answering, acquisition, control-loop steps,
|
|
72
|
+
and task completion. This keeps streaming UI, logs, and telemetry out of domain
|
|
73
|
+
adapters while making every runtime transition observable.
|
|
74
|
+
|
|
75
|
+
For logs, reports, and UI telemetry, do not serialize raw events directly.
|
|
76
|
+
Use the built-in sanitized collector:
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
import { createRuntimeEventCollector, summarizeAgentTaskRun } from '@tangle-network/agent-runtime'
|
|
80
|
+
|
|
81
|
+
const telemetry = createRuntimeEventCollector()
|
|
82
|
+
const result = await runAgentTask({ task, adapter, onEvent: telemetry.onEvent })
|
|
83
|
+
|
|
84
|
+
console.log(telemetry.events)
|
|
85
|
+
console.log(summarizeAgentTaskRun(result))
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Sanitized telemetry redacts task inputs, user answers, credential questions,
|
|
89
|
+
control payloads, and evidence IDs by default. Private diagnostics can opt into
|
|
90
|
+
specific fields with `includeInputs`, `includeUserAnswers`,
|
|
91
|
+
`includeControlPayloads`, `includeEvidenceIds`, and
|
|
92
|
+
`includeRequirementDescriptions`. Task metadata and eval details are also
|
|
93
|
+
redacted unless `includeMetadata` or `includeEvalDetails` is set.
|
|
94
|
+
|
|
95
|
+
Knowledge providers may implement:
|
|
96
|
+
|
|
97
|
+
- `buildReadiness`
|
|
98
|
+
- `answerQuestions`
|
|
99
|
+
- `executeAcquisitionPlans`
|
|
100
|
+
- `refreshReadiness`
|
|
101
|
+
|
|
102
|
+
That lets a task collect missing context before the control loop starts, then
|
|
103
|
+
rerun readiness scoring against the new evidence.
|
|
104
|
+
|
|
58
105
|
## Package Boundaries
|
|
59
106
|
|
|
60
107
|
- `agent-runtime` owns the reusable lifecycle and adapter contracts.
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,12 @@ interface AgentKnowledgeProvider {
|
|
|
15
15
|
buildReadiness?(task: AgentTaskSpec): Promise<KnowledgeReadinessReport> | KnowledgeReadinessReport;
|
|
16
16
|
answerQuestions?(questions: UserQuestion[], task: AgentTaskSpec): Promise<Record<string, string>> | Record<string, string>;
|
|
17
17
|
executeAcquisitionPlans?(plans: DataAcquisitionPlan[], task: AgentTaskSpec): Promise<string[]> | string[];
|
|
18
|
+
refreshReadiness?(input: {
|
|
19
|
+
task: AgentTaskSpec;
|
|
20
|
+
previous: KnowledgeReadinessReport;
|
|
21
|
+
userAnswers: Record<string, string>;
|
|
22
|
+
acquiredEvidenceIds: string[];
|
|
23
|
+
}): Promise<KnowledgeReadinessReport> | KnowledgeReadinessReport;
|
|
18
24
|
}
|
|
19
25
|
interface AgentTaskContext<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {
|
|
20
26
|
task: AgentTaskSpec;
|
|
@@ -72,10 +78,59 @@ interface AgentAdapter<TState, TAction, TActionResult, TEval extends ControlEval
|
|
|
72
78
|
}): number | undefined;
|
|
73
79
|
projectRunRecords?(result: ControlRunResult<TState, TAction, TActionResult, TEval>, task: AgentTaskSpec): RunRecord[];
|
|
74
80
|
}
|
|
81
|
+
type AgentTaskStatus = 'completed' | 'blocked' | 'failed' | 'aborted';
|
|
82
|
+
type AgentRuntimeEvent<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult> = {
|
|
83
|
+
type: 'task_start';
|
|
84
|
+
task: AgentTaskSpec;
|
|
85
|
+
} | {
|
|
86
|
+
type: 'readiness_start';
|
|
87
|
+
task: AgentTaskSpec;
|
|
88
|
+
} | {
|
|
89
|
+
type: 'readiness_end';
|
|
90
|
+
task: AgentTaskSpec;
|
|
91
|
+
knowledge: KnowledgeReadinessReport;
|
|
92
|
+
} | {
|
|
93
|
+
type: 'questions_start';
|
|
94
|
+
task: AgentTaskSpec;
|
|
95
|
+
questions: UserQuestion[];
|
|
96
|
+
} | {
|
|
97
|
+
type: 'questions_end';
|
|
98
|
+
task: AgentTaskSpec;
|
|
99
|
+
questions: UserQuestion[];
|
|
100
|
+
userAnswers: Record<string, string>;
|
|
101
|
+
} | {
|
|
102
|
+
type: 'acquisition_start';
|
|
103
|
+
task: AgentTaskSpec;
|
|
104
|
+
acquisitionPlans: DataAcquisitionPlan[];
|
|
105
|
+
} | {
|
|
106
|
+
type: 'acquisition_end';
|
|
107
|
+
task: AgentTaskSpec;
|
|
108
|
+
acquisitionPlans: DataAcquisitionPlan[];
|
|
109
|
+
acquiredEvidenceIds: string[];
|
|
110
|
+
} | {
|
|
111
|
+
type: 'control_start';
|
|
112
|
+
task: AgentTaskSpec;
|
|
113
|
+
knowledge: KnowledgeReadinessReport;
|
|
114
|
+
} | {
|
|
115
|
+
type: 'control_step';
|
|
116
|
+
task: AgentTaskSpec;
|
|
117
|
+
step: ControlStep<TState, TAction, TActionResult, TEval>;
|
|
118
|
+
} | {
|
|
119
|
+
type: 'control_end';
|
|
120
|
+
task: AgentTaskSpec;
|
|
121
|
+
control: ControlRunResult<TState, TAction, TActionResult, TEval>;
|
|
122
|
+
} | {
|
|
123
|
+
type: 'task_end';
|
|
124
|
+
task: AgentTaskSpec;
|
|
125
|
+
status: AgentTaskStatus;
|
|
126
|
+
reason: string;
|
|
127
|
+
};
|
|
128
|
+
type AgentRuntimeEventSink<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult> = (event: AgentRuntimeEvent<TState, TAction, TActionResult, TEval>) => Promise<void> | void;
|
|
75
129
|
interface RunAgentTaskOptions<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {
|
|
76
130
|
task: AgentTaskSpec;
|
|
77
131
|
adapter: AgentAdapter<TState, TAction, TActionResult, TEval>;
|
|
78
132
|
knowledge?: AgentKnowledgeProvider;
|
|
133
|
+
onEvent?: AgentRuntimeEventSink<TState, TAction, TActionResult, TEval>;
|
|
79
134
|
store?: TraceStore;
|
|
80
135
|
signal?: AbortSignal;
|
|
81
136
|
scenarioId?: string;
|
|
@@ -85,12 +140,87 @@ interface RunAgentTaskOptions<TState, TAction, TActionResult, TEval extends Cont
|
|
|
85
140
|
}
|
|
86
141
|
interface AgentTaskRunResult<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {
|
|
87
142
|
task: AgentTaskSpec;
|
|
143
|
+
status: AgentTaskStatus;
|
|
88
144
|
knowledge: KnowledgeReadinessReport;
|
|
89
145
|
questions: UserQuestion[];
|
|
90
146
|
acquisitionPlans: DataAcquisitionPlan[];
|
|
147
|
+
userAnswers: Record<string, string>;
|
|
148
|
+
acquiredEvidenceIds: string[];
|
|
91
149
|
control: ControlRunResult<TState, TAction, TActionResult, TEval>;
|
|
92
150
|
runRecords: RunRecord[];
|
|
93
151
|
}
|
|
152
|
+
interface RuntimeTelemetryOptions {
|
|
153
|
+
/**
|
|
154
|
+
* Include raw task inputs. Off by default because task inputs often
|
|
155
|
+
* contain customer facts, credentials, source text, or internal IDs.
|
|
156
|
+
*/
|
|
157
|
+
includeInputs?: boolean;
|
|
158
|
+
/** Include requirement descriptions. Secret requirements are always redacted. */
|
|
159
|
+
includeRequirementDescriptions?: boolean;
|
|
160
|
+
/** Include evidence IDs. Off by default; counts are safer for shared reports. */
|
|
161
|
+
includeEvidenceIds?: boolean;
|
|
162
|
+
/** Include user answers from question preflight. Off by default. */
|
|
163
|
+
includeUserAnswers?: boolean;
|
|
164
|
+
/** Include action payloads and action results for control steps. Off by default. */
|
|
165
|
+
includeControlPayloads?: boolean;
|
|
166
|
+
/** Include task metadata. Off by default because metadata may carry IDs or policy internals. */
|
|
167
|
+
includeMetadata?: boolean;
|
|
168
|
+
/** Include eval detail/evidence strings. Off by default because validators may echo private input. */
|
|
169
|
+
includeEvalDetails?: boolean;
|
|
170
|
+
}
|
|
171
|
+
interface SanitizedKnowledgeRequirement {
|
|
172
|
+
id: string;
|
|
173
|
+
description?: string;
|
|
174
|
+
requiredFor: string[];
|
|
175
|
+
category: KnowledgeRequirement['category'];
|
|
176
|
+
acquisitionMode: KnowledgeRequirement['acquisitionMode'];
|
|
177
|
+
importance: KnowledgeRequirement['importance'];
|
|
178
|
+
freshness: KnowledgeRequirement['freshness'];
|
|
179
|
+
sensitivity: KnowledgeRequirement['sensitivity'];
|
|
180
|
+
confidenceNeeded: number;
|
|
181
|
+
currentConfidence: number;
|
|
182
|
+
evidenceCount: number;
|
|
183
|
+
evidenceIds?: string[];
|
|
184
|
+
fallbackPolicy: KnowledgeRequirement['fallbackPolicy'];
|
|
185
|
+
}
|
|
186
|
+
interface SanitizedKnowledgeReadinessReport {
|
|
187
|
+
taskId: string;
|
|
188
|
+
readinessScore: number;
|
|
189
|
+
recommendedAction: KnowledgeReadinessReport['recommendedAction'];
|
|
190
|
+
severity: KnowledgeReadinessReport['severity'];
|
|
191
|
+
reason: string;
|
|
192
|
+
blockingMissingRequirements: SanitizedKnowledgeRequirement[];
|
|
193
|
+
nonBlockingGaps: SanitizedKnowledgeRequirement[];
|
|
194
|
+
evidenceCount: number;
|
|
195
|
+
evidenceIds?: string[];
|
|
196
|
+
missingRequirementIds: string[];
|
|
197
|
+
}
|
|
198
|
+
interface AgentTaskRunSummary {
|
|
199
|
+
taskId: string;
|
|
200
|
+
domain?: string;
|
|
201
|
+
status: AgentTaskStatus;
|
|
202
|
+
reason: string;
|
|
203
|
+
readinessScore: number;
|
|
204
|
+
recommendedAction: KnowledgeReadinessReport['recommendedAction'];
|
|
205
|
+
blockingGapIds: string[];
|
|
206
|
+
nonBlockingGapIds: string[];
|
|
207
|
+
questionCount: number;
|
|
208
|
+
acquisitionPlanCount: number;
|
|
209
|
+
acquiredEvidenceCount: number;
|
|
210
|
+
controlStepCount: number;
|
|
211
|
+
pass: boolean;
|
|
212
|
+
failureClass?: string;
|
|
213
|
+
wallMs: number;
|
|
214
|
+
costUsd: number;
|
|
215
|
+
}
|
|
216
|
+
interface RuntimeEventCollector<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult> {
|
|
217
|
+
onEvent: AgentRuntimeEventSink<TState, TAction, TActionResult, TEval>;
|
|
218
|
+
events: Array<Record<string, unknown>>;
|
|
219
|
+
}
|
|
94
220
|
declare function runAgentTask<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult>(options: RunAgentTaskOptions<TState, TAction, TActionResult, TEval>): Promise<AgentTaskRunResult<TState, TAction, TActionResult, TEval>>;
|
|
221
|
+
declare function summarizeAgentTaskRun<TState, TAction, TActionResult, TEval extends ControlEvalResult>(result: AgentTaskRunResult<TState, TAction, TActionResult, TEval>): AgentTaskRunSummary;
|
|
222
|
+
declare function sanitizeKnowledgeReadinessReport(report: KnowledgeReadinessReport, options?: RuntimeTelemetryOptions): SanitizedKnowledgeReadinessReport;
|
|
223
|
+
declare function sanitizeAgentRuntimeEvent<TState, TAction, TActionResult, TEval extends ControlEvalResult>(event: AgentRuntimeEvent<TState, TAction, TActionResult, TEval>, options?: RuntimeTelemetryOptions): Record<string, unknown>;
|
|
224
|
+
declare function createRuntimeEventCollector<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult>(options?: RuntimeTelemetryOptions): RuntimeEventCollector<TState, TAction, TActionResult, TEval>;
|
|
95
225
|
|
|
96
|
-
export { type AgentAdapter, type AgentKnowledgeProvider, type AgentTaskContext, type AgentTaskRunResult, type AgentTaskSpec, type RunAgentTaskOptions, runAgentTask };
|
|
226
|
+
export { type AgentAdapter, type AgentKnowledgeProvider, type AgentRuntimeEvent, type AgentRuntimeEventSink, type AgentTaskContext, type AgentTaskRunResult, type AgentTaskRunSummary, type AgentTaskSpec, type AgentTaskStatus, type RunAgentTaskOptions, type RuntimeEventCollector, type RuntimeTelemetryOptions, type SanitizedKnowledgeReadinessReport, type SanitizedKnowledgeRequirement, createRuntimeEventCollector, runAgentTask, sanitizeAgentRuntimeEvent, sanitizeKnowledgeReadinessReport, summarizeAgentTaskRun };
|
package/dist/index.js
CHANGED
|
@@ -8,12 +8,27 @@ import {
|
|
|
8
8
|
} from "@tangle-network/agent-eval";
|
|
9
9
|
async function runAgentTask(options) {
|
|
10
10
|
const task = options.task;
|
|
11
|
-
|
|
11
|
+
await emit(options.onEvent, { type: "task_start", task });
|
|
12
|
+
await emit(options.onEvent, { type: "readiness_start", task });
|
|
13
|
+
let knowledge = await buildReadiness(task, options.knowledge);
|
|
14
|
+
await emit(options.onEvent, { type: "readiness_end", task, knowledge });
|
|
12
15
|
const questions = userQuestionsForKnowledgeGaps(knowledge.blockingMissingRequirements);
|
|
13
16
|
const acquisitionPlans = acquisitionPlansForKnowledgeGaps([
|
|
14
17
|
...knowledge.blockingMissingRequirements,
|
|
15
18
|
...knowledge.nonBlockingGaps
|
|
16
19
|
]);
|
|
20
|
+
const preflight = await runKnowledgePreflight(task, questions, acquisitionPlans, options.knowledge, options.onEvent);
|
|
21
|
+
if (options.knowledge?.refreshReadiness && (Object.keys(preflight.userAnswers).length > 0 || preflight.acquiredEvidenceIds.length > 0)) {
|
|
22
|
+
await emit(options.onEvent, { type: "readiness_start", task });
|
|
23
|
+
knowledge = await options.knowledge.refreshReadiness({
|
|
24
|
+
task,
|
|
25
|
+
previous: knowledge,
|
|
26
|
+
userAnswers: preflight.userAnswers,
|
|
27
|
+
acquiredEvidenceIds: preflight.acquiredEvidenceIds
|
|
28
|
+
});
|
|
29
|
+
await emit(options.onEvent, { type: "readiness_end", task, knowledge });
|
|
30
|
+
}
|
|
31
|
+
await emit(options.onEvent, { type: "control_start", task, knowledge });
|
|
17
32
|
const control = await runAgentControlLoop({
|
|
18
33
|
intent: task.intent,
|
|
19
34
|
budget: task.budget,
|
|
@@ -41,17 +56,222 @@ async function runAgentTask(options) {
|
|
|
41
56
|
},
|
|
42
57
|
act: (action, ctx) => options.adapter.act(action, toAgentContext(task, knowledge, ctx)),
|
|
43
58
|
shouldStop: options.adapter.shouldStop ? (ctx) => options.adapter.shouldStop(toAgentContext(task, knowledge, ctx)) : void 0,
|
|
44
|
-
getActionCostUsd: options.adapter.getActionCostUsd ? ({ action, result, state, evals, history }) => options.adapter.getActionCostUsd({ action, result, task, state, evals, history }) : void 0
|
|
59
|
+
getActionCostUsd: options.adapter.getActionCostUsd ? ({ action, result, state, evals, history }) => options.adapter.getActionCostUsd({ action, result, task, state, evals, history }) : void 0,
|
|
60
|
+
onStep: (step) => emit(options.onEvent, { type: "control_step", task, step })
|
|
45
61
|
});
|
|
62
|
+
await emit(options.onEvent, { type: "control_end", task, control });
|
|
63
|
+
const status = statusFromControl(control);
|
|
64
|
+
await emit(options.onEvent, { type: "task_end", task, status, reason: control.reason });
|
|
46
65
|
return {
|
|
47
66
|
task,
|
|
67
|
+
status,
|
|
48
68
|
knowledge,
|
|
49
69
|
questions,
|
|
50
70
|
acquisitionPlans,
|
|
71
|
+
userAnswers: preflight.userAnswers,
|
|
72
|
+
acquiredEvidenceIds: preflight.acquiredEvidenceIds,
|
|
51
73
|
control,
|
|
52
74
|
runRecords: options.adapter.projectRunRecords?.(control, task) ?? []
|
|
53
75
|
};
|
|
54
76
|
}
|
|
77
|
+
function summarizeAgentTaskRun(result) {
|
|
78
|
+
return {
|
|
79
|
+
taskId: result.task.id,
|
|
80
|
+
domain: result.task.domain,
|
|
81
|
+
status: result.status,
|
|
82
|
+
reason: result.control.reason,
|
|
83
|
+
readinessScore: result.knowledge.readinessScore,
|
|
84
|
+
recommendedAction: result.knowledge.recommendedAction,
|
|
85
|
+
blockingGapIds: result.knowledge.blockingMissingRequirements.map((requirement) => requirement.id),
|
|
86
|
+
nonBlockingGapIds: result.knowledge.nonBlockingGaps.map((requirement) => requirement.id),
|
|
87
|
+
questionCount: result.questions.length,
|
|
88
|
+
acquisitionPlanCount: result.acquisitionPlans.length,
|
|
89
|
+
acquiredEvidenceCount: result.acquiredEvidenceIds.length,
|
|
90
|
+
controlStepCount: result.control.steps.length,
|
|
91
|
+
pass: result.control.pass,
|
|
92
|
+
failureClass: result.control.failureClass,
|
|
93
|
+
wallMs: result.control.wallMs,
|
|
94
|
+
costUsd: result.control.spentCostUsd
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function sanitizeKnowledgeReadinessReport(report, options = {}) {
|
|
98
|
+
return {
|
|
99
|
+
taskId: report.taskId,
|
|
100
|
+
readinessScore: report.readinessScore,
|
|
101
|
+
recommendedAction: report.recommendedAction,
|
|
102
|
+
severity: report.severity,
|
|
103
|
+
reason: report.reason,
|
|
104
|
+
blockingMissingRequirements: report.blockingMissingRequirements.map(
|
|
105
|
+
(requirement) => sanitizeKnowledgeRequirement(requirement, options)
|
|
106
|
+
),
|
|
107
|
+
nonBlockingGaps: report.nonBlockingGaps.map(
|
|
108
|
+
(requirement) => sanitizeKnowledgeRequirement(requirement, options)
|
|
109
|
+
),
|
|
110
|
+
evidenceCount: report.bundle.evidenceIds.length,
|
|
111
|
+
evidenceIds: options.includeEvidenceIds ? report.bundle.evidenceIds : void 0,
|
|
112
|
+
missingRequirementIds: report.bundle.missing.map((requirement) => requirement.id)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function sanitizeAgentRuntimeEvent(event, options = {}) {
|
|
116
|
+
const base = { type: event.type, task: sanitizeTask(event.task, options) };
|
|
117
|
+
if (event.type === "readiness_start" || event.type === "task_start" || event.type === "control_start") {
|
|
118
|
+
return event.type === "control_start" ? { ...base, knowledge: sanitizeKnowledgeReadinessReport(event.knowledge, options) } : base;
|
|
119
|
+
}
|
|
120
|
+
if (event.type === "readiness_end") {
|
|
121
|
+
return { ...base, knowledge: sanitizeKnowledgeReadinessReport(event.knowledge, options) };
|
|
122
|
+
}
|
|
123
|
+
if (event.type === "questions_start") {
|
|
124
|
+
return { ...base, questions: event.questions.map((question) => sanitizeQuestion(question, options)) };
|
|
125
|
+
}
|
|
126
|
+
if (event.type === "questions_end") {
|
|
127
|
+
return {
|
|
128
|
+
...base,
|
|
129
|
+
questions: event.questions.map((question) => sanitizeQuestion(question, options)),
|
|
130
|
+
userAnswers: options.includeUserAnswers ? event.userAnswers : redactRecord(event.userAnswers)
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
if (event.type === "acquisition_start") {
|
|
134
|
+
return { ...base, acquisitionPlans: event.acquisitionPlans.map(sanitizeAcquisitionPlan) };
|
|
135
|
+
}
|
|
136
|
+
if (event.type === "acquisition_end") {
|
|
137
|
+
return {
|
|
138
|
+
...base,
|
|
139
|
+
acquisitionPlans: event.acquisitionPlans.map(sanitizeAcquisitionPlan),
|
|
140
|
+
acquiredEvidenceCount: event.acquiredEvidenceIds.length,
|
|
141
|
+
acquiredEvidenceIds: options.includeEvidenceIds ? event.acquiredEvidenceIds : void 0
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (event.type === "control_step") {
|
|
145
|
+
return { ...base, step: sanitizeControlStep(event.step, options) };
|
|
146
|
+
}
|
|
147
|
+
if (event.type === "control_end") {
|
|
148
|
+
return { ...base, control: sanitizeControlRun(event.control, options) };
|
|
149
|
+
}
|
|
150
|
+
return { ...base, status: event.status, reason: event.reason };
|
|
151
|
+
}
|
|
152
|
+
function createRuntimeEventCollector(options = {}) {
|
|
153
|
+
const events = [];
|
|
154
|
+
return {
|
|
155
|
+
events,
|
|
156
|
+
onEvent: (event) => {
|
|
157
|
+
events.push(sanitizeAgentRuntimeEvent(event, options));
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
async function runKnowledgePreflight(task, questions, acquisitionPlans, provider, onEvent) {
|
|
162
|
+
let userAnswers = {};
|
|
163
|
+
let acquiredEvidenceIds = [];
|
|
164
|
+
if (questions.length > 0 && provider?.answerQuestions) {
|
|
165
|
+
await emit(onEvent, { type: "questions_start", task, questions });
|
|
166
|
+
userAnswers = await provider.answerQuestions(questions, task);
|
|
167
|
+
await emit(onEvent, { type: "questions_end", task, questions, userAnswers });
|
|
168
|
+
}
|
|
169
|
+
if (acquisitionPlans.length > 0 && provider?.executeAcquisitionPlans) {
|
|
170
|
+
await emit(onEvent, { type: "acquisition_start", task, acquisitionPlans });
|
|
171
|
+
acquiredEvidenceIds = await provider.executeAcquisitionPlans(acquisitionPlans, task);
|
|
172
|
+
await emit(onEvent, { type: "acquisition_end", task, acquisitionPlans, acquiredEvidenceIds });
|
|
173
|
+
}
|
|
174
|
+
return { userAnswers, acquiredEvidenceIds };
|
|
175
|
+
}
|
|
176
|
+
function sanitizeTask(task, options) {
|
|
177
|
+
return {
|
|
178
|
+
id: task.id,
|
|
179
|
+
intent: task.intent,
|
|
180
|
+
domain: task.domain,
|
|
181
|
+
inputs: options.includeInputs ? task.inputs : task.inputs ? "[redacted]" : void 0,
|
|
182
|
+
requiredKnowledge: task.requiredKnowledge?.map(
|
|
183
|
+
(requirement) => sanitizeKnowledgeRequirement(requirement, options)
|
|
184
|
+
),
|
|
185
|
+
metadata: options.includeMetadata ? task.metadata : task.metadata ? "[redacted]" : void 0
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function sanitizeKnowledgeRequirement(requirement, options) {
|
|
189
|
+
const includeDescription = options.includeRequirementDescriptions && requirement.sensitivity !== "secret";
|
|
190
|
+
return {
|
|
191
|
+
id: requirement.id,
|
|
192
|
+
description: includeDescription ? requirement.description : void 0,
|
|
193
|
+
requiredFor: requirement.requiredFor,
|
|
194
|
+
category: requirement.category,
|
|
195
|
+
acquisitionMode: requirement.acquisitionMode,
|
|
196
|
+
importance: requirement.importance,
|
|
197
|
+
freshness: requirement.freshness,
|
|
198
|
+
sensitivity: requirement.sensitivity,
|
|
199
|
+
confidenceNeeded: requirement.confidenceNeeded,
|
|
200
|
+
currentConfidence: requirement.currentConfidence,
|
|
201
|
+
evidenceCount: requirement.evidenceIds.length,
|
|
202
|
+
evidenceIds: options.includeEvidenceIds ? requirement.evidenceIds : void 0,
|
|
203
|
+
fallbackPolicy: requirement.fallbackPolicy
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function sanitizeQuestion(question, options) {
|
|
207
|
+
return {
|
|
208
|
+
id: question.id,
|
|
209
|
+
question: options.includeRequirementDescriptions && question.answerType !== "credential" ? question.question : void 0,
|
|
210
|
+
reason: options.includeRequirementDescriptions ? question.reason : void 0,
|
|
211
|
+
requirementId: question.requirementId,
|
|
212
|
+
importance: question.importance,
|
|
213
|
+
answerType: question.answerType,
|
|
214
|
+
impactIfUnknown: options.includeRequirementDescriptions ? question.impactIfUnknown : void 0,
|
|
215
|
+
optionCount: question.options?.length ?? 0
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function sanitizeAcquisitionPlan(plan) {
|
|
219
|
+
return {
|
|
220
|
+
id: plan.id,
|
|
221
|
+
requirementIds: plan.requirementIds,
|
|
222
|
+
mode: plan.mode,
|
|
223
|
+
priority: plan.priority,
|
|
224
|
+
expectedEvidenceCount: plan.expectedEvidenceIds?.length ?? 0,
|
|
225
|
+
questionCount: plan.questions?.length ?? 0
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function sanitizeControlStep(step, options) {
|
|
229
|
+
const actionOutcome = step.actionOutcome;
|
|
230
|
+
return {
|
|
231
|
+
index: step.index,
|
|
232
|
+
decisionType: step.decision.type,
|
|
233
|
+
reason: step.decision.reason,
|
|
234
|
+
action: options.includeControlPayloads && step.decision.type === "continue" ? step.decision.action : void 0,
|
|
235
|
+
result: options.includeControlPayloads && actionOutcome?.ok ? actionOutcome.result : void 0,
|
|
236
|
+
actionOk: actionOutcome?.ok,
|
|
237
|
+
actionError: actionOutcome?.ok === false ? actionOutcome.error : void 0,
|
|
238
|
+
durationMs: actionOutcome?.durationMs,
|
|
239
|
+
evalsBefore: summarizeEvals(step.evalsBefore, options),
|
|
240
|
+
evalsAfter: summarizeEvals(step.evalsAfter, options),
|
|
241
|
+
startedAt: step.startedAt,
|
|
242
|
+
endedAt: step.endedAt
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function sanitizeControlRun(control, options) {
|
|
246
|
+
return {
|
|
247
|
+
pass: control.pass,
|
|
248
|
+
completed: control.completed,
|
|
249
|
+
reason: control.reason,
|
|
250
|
+
score: control.score,
|
|
251
|
+
stepCount: control.steps.length,
|
|
252
|
+
wallMs: control.wallMs,
|
|
253
|
+
spentCostUsd: control.spentCostUsd,
|
|
254
|
+
failureClass: control.failureClass,
|
|
255
|
+
stoppedBy: control.stoppedBy,
|
|
256
|
+
runId: control.runId,
|
|
257
|
+
runtimeErrorCount: control.runtimeErrors.length,
|
|
258
|
+
finalEvals: summarizeEvals(control.finalEvals, options)
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function summarizeEvals(evals, options) {
|
|
262
|
+
return evals.map((evalResult) => ({
|
|
263
|
+
id: evalResult.id,
|
|
264
|
+
passed: evalResult.passed,
|
|
265
|
+
score: evalResult.score,
|
|
266
|
+
severity: evalResult.severity,
|
|
267
|
+
objective: evalResult.objective,
|
|
268
|
+
detail: options.includeEvalDetails ? evalResult.detail : void 0,
|
|
269
|
+
evidence: options.includeEvalDetails ? evalResult.evidence : void 0
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
272
|
+
function redactRecord(record) {
|
|
273
|
+
return Object.fromEntries(Object.keys(record).map((key) => [key, "[redacted]"]));
|
|
274
|
+
}
|
|
55
275
|
function buildReadiness(task, provider) {
|
|
56
276
|
if (provider?.buildReadiness) return provider.buildReadiness(task);
|
|
57
277
|
return scoreKnowledgeReadiness({
|
|
@@ -63,6 +283,15 @@ function buildReadiness(task, provider) {
|
|
|
63
283
|
function isKnowledgeBlocked(evals) {
|
|
64
284
|
return evals.some((evalResult) => evalResult.id === "knowledge-ready" && !evalResult.passed);
|
|
65
285
|
}
|
|
286
|
+
function statusFromControl(control) {
|
|
287
|
+
if (control.stoppedBy === "abort") return "aborted";
|
|
288
|
+
if (control.reason.includes("knowledge readiness blocked")) return "blocked";
|
|
289
|
+
if (control.pass) return "completed";
|
|
290
|
+
return "failed";
|
|
291
|
+
}
|
|
292
|
+
async function emit(sink, event) {
|
|
293
|
+
await sink?.(event);
|
|
294
|
+
}
|
|
66
295
|
function toAgentContext(task, knowledge, ctx) {
|
|
67
296
|
return {
|
|
68
297
|
task,
|
|
@@ -79,6 +308,10 @@ function toAgentContext(task, knowledge, ctx) {
|
|
|
79
308
|
};
|
|
80
309
|
}
|
|
81
310
|
export {
|
|
82
|
-
|
|
311
|
+
createRuntimeEventCollector,
|
|
312
|
+
runAgentTask,
|
|
313
|
+
sanitizeAgentRuntimeEvent,
|
|
314
|
+
sanitizeKnowledgeReadinessReport,
|
|
315
|
+
summarizeAgentTaskRun
|
|
83
316
|
};
|
|
84
317
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n acquisitionPlansForKnowledgeGaps,\n blockingKnowledgeEval,\n runAgentControlLoop,\n scoreKnowledgeReadiness,\n userQuestionsForKnowledgeGaps,\n type ControlBudget,\n type ControlContext,\n type ControlDecision,\n type ControlEvalResult,\n type ControlRunResult,\n type ControlStep,\n type DataAcquisitionPlan,\n type KnowledgeReadinessReport,\n type KnowledgeRequirement,\n type RunRecord,\n type TraceStore,\n type UserQuestion,\n} from '@tangle-network/agent-eval'\n\nexport interface AgentTaskSpec {\n id: string\n intent: string\n /** Domain is metadata, not an architectural boundary: tax, legal, gtm, creative, blueprint, redteam, etc. */\n domain?: string\n inputs?: Record<string, unknown>\n requiredKnowledge?: KnowledgeRequirement[]\n budget?: Partial<ControlBudget>\n metadata?: Record<string, unknown>\n}\n\nexport interface AgentKnowledgeProvider {\n buildReadiness?(task: AgentTaskSpec): Promise<KnowledgeReadinessReport> | KnowledgeReadinessReport\n answerQuestions?(questions: UserQuestion[], task: AgentTaskSpec): Promise<Record<string, string>> | Record<string, string>\n executeAcquisitionPlans?(plans: DataAcquisitionPlan[], task: AgentTaskSpec): Promise<string[]> | string[]\n}\n\nexport interface AgentTaskContext<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n state: TState\n evals: TEval[]\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n budget: ControlBudget\n stepIndex: number\n wallMs: number\n spentCostUsd: number\n remainingCostUsd?: number\n abortSignal: AbortSignal\n}\n\nexport interface AgentAdapter<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n observe(ctx: {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n abortSignal: AbortSignal\n }): Promise<TState> | TState\n\n validate(ctx: {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n state: TState\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n abortSignal: AbortSignal\n }): Promise<TEval[]> | TEval[]\n\n decide(ctx: AgentTaskContext<TState, TAction, TActionResult, TEval>): Promise<ControlDecision<TAction>> | ControlDecision<TAction>\n\n act(action: TAction, ctx: AgentTaskContext<TState, TAction, TActionResult, TEval>): Promise<TActionResult> | TActionResult\n\n shouldStop?(ctx: AgentTaskContext<TState, TAction, TActionResult, TEval>): Promise<{\n stop: boolean\n pass: boolean\n reason: string\n score?: number\n }> | {\n stop: boolean\n pass: boolean\n reason: string\n score?: number\n }\n\n onKnowledgeBlocked?(ctx: {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n questions: UserQuestion[]\n acquisitionPlans: DataAcquisitionPlan[]\n }): Promise<ControlDecision<TAction>> | ControlDecision<TAction>\n\n getActionCostUsd?(ctx: {\n action: TAction\n result: TActionResult\n task: AgentTaskSpec\n state: TState\n evals: TEval[]\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n }): number | undefined\n\n projectRunRecords?(result: ControlRunResult<TState, TAction, TActionResult, TEval>, task: AgentTaskSpec): RunRecord[]\n}\n\nexport interface RunAgentTaskOptions<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n task: AgentTaskSpec\n adapter: AgentAdapter<TState, TAction, TActionResult, TEval>\n knowledge?: AgentKnowledgeProvider\n store?: TraceStore\n signal?: AbortSignal\n scenarioId?: string\n projectId?: string\n variantId?: string\n minimumReadinessScore?: number\n}\n\nexport interface AgentTaskRunResult<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n questions: UserQuestion[]\n acquisitionPlans: DataAcquisitionPlan[]\n control: ControlRunResult<TState, TAction, TActionResult, TEval>\n runRecords: RunRecord[]\n}\n\nexport async function runAgentTask<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult>(\n options: RunAgentTaskOptions<TState, TAction, TActionResult, TEval>,\n): Promise<AgentTaskRunResult<TState, TAction, TActionResult, TEval>> {\n const task = options.task\n const knowledge = await buildReadiness(task, options.knowledge)\n const questions = userQuestionsForKnowledgeGaps(knowledge.blockingMissingRequirements)\n const acquisitionPlans = acquisitionPlansForKnowledgeGaps([\n ...knowledge.blockingMissingRequirements,\n ...knowledge.nonBlockingGaps,\n ])\n\n const control = await runAgentControlLoop<TState, TAction, TActionResult, TEval>({\n intent: task.intent,\n budget: task.budget,\n signal: options.signal,\n store: options.store,\n scenarioId: options.scenarioId ?? task.id,\n projectId: options.projectId,\n variantId: options.variantId,\n observe: ({ history, abortSignal }) => options.adapter.observe({ task, knowledge, history, abortSignal }),\n validate: async ({ state, history, abortSignal }) => {\n const readinessEval = blockingKnowledgeEval(knowledge, { minimumScore: options.minimumReadinessScore })\n const evals = await options.adapter.validate({ task, knowledge, state, history, abortSignal })\n return [readinessEval as TEval, ...evals]\n },\n decide: (ctx) => {\n if (isKnowledgeBlocked(ctx.evals)) {\n return options.adapter.onKnowledgeBlocked?.({ task, knowledge, questions, acquisitionPlans }) ?? {\n type: 'stop',\n pass: false,\n score: knowledge.readinessScore,\n reason: `knowledge readiness blocked: ${knowledge.reason}`,\n }\n }\n return options.adapter.decide(toAgentContext(task, knowledge, ctx))\n },\n act: (action, ctx) => options.adapter.act(action, toAgentContext(task, knowledge, ctx)),\n shouldStop: options.adapter.shouldStop\n ? (ctx) => options.adapter.shouldStop!(toAgentContext(task, knowledge, ctx))\n : undefined,\n getActionCostUsd: options.adapter.getActionCostUsd\n ? ({ action, result, state, evals, history }) => options.adapter.getActionCostUsd!({ action, result, task, state, evals, history })\n : undefined,\n })\n\n return {\n task,\n knowledge,\n questions,\n acquisitionPlans,\n control,\n runRecords: options.adapter.projectRunRecords?.(control, task) ?? [],\n }\n}\n\nfunction buildReadiness(\n task: AgentTaskSpec,\n provider: AgentKnowledgeProvider | undefined,\n): Promise<KnowledgeReadinessReport> | KnowledgeReadinessReport {\n if (provider?.buildReadiness) return provider.buildReadiness(task)\n return scoreKnowledgeReadiness({\n taskId: task.id,\n requirements: task.requiredKnowledge ?? [],\n metadata: { domain: task.domain, ...task.metadata },\n })\n}\n\nfunction isKnowledgeBlocked(evals: ControlEvalResult[]): boolean {\n return evals.some((evalResult) => evalResult.id === 'knowledge-ready' && !evalResult.passed)\n}\n\nfunction toAgentContext<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n task: AgentTaskSpec,\n knowledge: KnowledgeReadinessReport,\n ctx: ControlContext<TState, TAction, TActionResult, TEval>,\n): AgentTaskContext<TState, TAction, TActionResult, TEval> {\n return {\n task,\n knowledge,\n state: ctx.state,\n evals: ctx.evals,\n history: ctx.history,\n budget: ctx.budget,\n stepIndex: ctx.stepIndex,\n wallMs: ctx.wallMs,\n spentCostUsd: ctx.spentCostUsd,\n remainingCostUsd: ctx.remainingCostUsd,\n abortSignal: ctx.abortSignal,\n }\n}\n\nexport type {\n ControlBudget,\n ControlDecision,\n ControlEvalResult,\n ControlRunResult,\n ControlStep,\n DataAcquisitionPlan,\n KnowledgeReadinessReport,\n KnowledgeRequirement,\n RunRecord,\n UserQuestion,\n} from '@tangle-network/agent-eval'\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n acquisitionPlansForKnowledgeGaps,\n blockingKnowledgeEval,\n runAgentControlLoop,\n scoreKnowledgeReadiness,\n userQuestionsForKnowledgeGaps,\n type ControlBudget,\n type ControlContext,\n type ControlDecision,\n type ControlEvalResult,\n type ControlRunResult,\n type ControlStep,\n type DataAcquisitionPlan,\n type KnowledgeReadinessReport,\n type KnowledgeRequirement,\n type RunRecord,\n type TraceStore,\n type UserQuestion,\n} from '@tangle-network/agent-eval'\n\nexport interface AgentTaskSpec {\n id: string\n intent: string\n /** Domain is metadata, not an architectural boundary: tax, legal, gtm, creative, blueprint, redteam, etc. */\n domain?: string\n inputs?: Record<string, unknown>\n requiredKnowledge?: KnowledgeRequirement[]\n budget?: Partial<ControlBudget>\n metadata?: Record<string, unknown>\n}\n\nexport interface AgentKnowledgeProvider {\n buildReadiness?(task: AgentTaskSpec): Promise<KnowledgeReadinessReport> | KnowledgeReadinessReport\n answerQuestions?(questions: UserQuestion[], task: AgentTaskSpec): Promise<Record<string, string>> | Record<string, string>\n executeAcquisitionPlans?(plans: DataAcquisitionPlan[], task: AgentTaskSpec): Promise<string[]> | string[]\n refreshReadiness?(input: {\n task: AgentTaskSpec\n previous: KnowledgeReadinessReport\n userAnswers: Record<string, string>\n acquiredEvidenceIds: string[]\n }): Promise<KnowledgeReadinessReport> | KnowledgeReadinessReport\n}\n\nexport interface AgentTaskContext<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n state: TState\n evals: TEval[]\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n budget: ControlBudget\n stepIndex: number\n wallMs: number\n spentCostUsd: number\n remainingCostUsd?: number\n abortSignal: AbortSignal\n}\n\nexport interface AgentAdapter<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n observe(ctx: {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n abortSignal: AbortSignal\n }): Promise<TState> | TState\n\n validate(ctx: {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n state: TState\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n abortSignal: AbortSignal\n }): Promise<TEval[]> | TEval[]\n\n decide(ctx: AgentTaskContext<TState, TAction, TActionResult, TEval>): Promise<ControlDecision<TAction>> | ControlDecision<TAction>\n\n act(action: TAction, ctx: AgentTaskContext<TState, TAction, TActionResult, TEval>): Promise<TActionResult> | TActionResult\n\n shouldStop?(ctx: AgentTaskContext<TState, TAction, TActionResult, TEval>): Promise<{\n stop: boolean\n pass: boolean\n reason: string\n score?: number\n }> | {\n stop: boolean\n pass: boolean\n reason: string\n score?: number\n }\n\n onKnowledgeBlocked?(ctx: {\n task: AgentTaskSpec\n knowledge: KnowledgeReadinessReport\n questions: UserQuestion[]\n acquisitionPlans: DataAcquisitionPlan[]\n }): Promise<ControlDecision<TAction>> | ControlDecision<TAction>\n\n getActionCostUsd?(ctx: {\n action: TAction\n result: TActionResult\n task: AgentTaskSpec\n state: TState\n evals: TEval[]\n history: ControlStep<TState, TAction, TActionResult, TEval>[]\n }): number | undefined\n\n projectRunRecords?(result: ControlRunResult<TState, TAction, TActionResult, TEval>, task: AgentTaskSpec): RunRecord[]\n}\n\nexport type AgentTaskStatus =\n | 'completed'\n | 'blocked'\n | 'failed'\n | 'aborted'\n\nexport type AgentRuntimeEvent<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult> =\n | { type: 'task_start'; task: AgentTaskSpec }\n | { type: 'readiness_start'; task: AgentTaskSpec }\n | { type: 'readiness_end'; task: AgentTaskSpec; knowledge: KnowledgeReadinessReport }\n | { type: 'questions_start'; task: AgentTaskSpec; questions: UserQuestion[] }\n | { type: 'questions_end'; task: AgentTaskSpec; questions: UserQuestion[]; userAnswers: Record<string, string> }\n | { type: 'acquisition_start'; task: AgentTaskSpec; acquisitionPlans: DataAcquisitionPlan[] }\n | { type: 'acquisition_end'; task: AgentTaskSpec; acquisitionPlans: DataAcquisitionPlan[]; acquiredEvidenceIds: string[] }\n | { type: 'control_start'; task: AgentTaskSpec; knowledge: KnowledgeReadinessReport }\n | { type: 'control_step'; task: AgentTaskSpec; step: ControlStep<TState, TAction, TActionResult, TEval> }\n | { type: 'control_end'; task: AgentTaskSpec; control: ControlRunResult<TState, TAction, TActionResult, TEval> }\n | { type: 'task_end'; task: AgentTaskSpec; status: AgentTaskStatus; reason: string }\n\nexport type AgentRuntimeEventSink<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult> = (\n event: AgentRuntimeEvent<TState, TAction, TActionResult, TEval>,\n) => Promise<void> | void\n\nexport interface RunAgentTaskOptions<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n task: AgentTaskSpec\n adapter: AgentAdapter<TState, TAction, TActionResult, TEval>\n knowledge?: AgentKnowledgeProvider\n onEvent?: AgentRuntimeEventSink<TState, TAction, TActionResult, TEval>\n store?: TraceStore\n signal?: AbortSignal\n scenarioId?: string\n projectId?: string\n variantId?: string\n minimumReadinessScore?: number\n}\n\nexport interface AgentTaskRunResult<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult> {\n task: AgentTaskSpec\n status: AgentTaskStatus\n knowledge: KnowledgeReadinessReport\n questions: UserQuestion[]\n acquisitionPlans: DataAcquisitionPlan[]\n userAnswers: Record<string, string>\n acquiredEvidenceIds: string[]\n control: ControlRunResult<TState, TAction, TActionResult, TEval>\n runRecords: RunRecord[]\n}\n\nexport interface RuntimeTelemetryOptions {\n /**\n * Include raw task inputs. Off by default because task inputs often\n * contain customer facts, credentials, source text, or internal IDs.\n */\n includeInputs?: boolean\n /** Include requirement descriptions. Secret requirements are always redacted. */\n includeRequirementDescriptions?: boolean\n /** Include evidence IDs. Off by default; counts are safer for shared reports. */\n includeEvidenceIds?: boolean\n /** Include user answers from question preflight. Off by default. */\n includeUserAnswers?: boolean\n /** Include action payloads and action results for control steps. Off by default. */\n includeControlPayloads?: boolean\n /** Include task metadata. Off by default because metadata may carry IDs or policy internals. */\n includeMetadata?: boolean\n /** Include eval detail/evidence strings. Off by default because validators may echo private input. */\n includeEvalDetails?: boolean\n}\n\nexport interface SanitizedKnowledgeRequirement {\n id: string\n description?: string\n requiredFor: string[]\n category: KnowledgeRequirement['category']\n acquisitionMode: KnowledgeRequirement['acquisitionMode']\n importance: KnowledgeRequirement['importance']\n freshness: KnowledgeRequirement['freshness']\n sensitivity: KnowledgeRequirement['sensitivity']\n confidenceNeeded: number\n currentConfidence: number\n evidenceCount: number\n evidenceIds?: string[]\n fallbackPolicy: KnowledgeRequirement['fallbackPolicy']\n}\n\nexport interface SanitizedKnowledgeReadinessReport {\n taskId: string\n readinessScore: number\n recommendedAction: KnowledgeReadinessReport['recommendedAction']\n severity: KnowledgeReadinessReport['severity']\n reason: string\n blockingMissingRequirements: SanitizedKnowledgeRequirement[]\n nonBlockingGaps: SanitizedKnowledgeRequirement[]\n evidenceCount: number\n evidenceIds?: string[]\n missingRequirementIds: string[]\n}\n\nexport interface AgentTaskRunSummary {\n taskId: string\n domain?: string\n status: AgentTaskStatus\n reason: string\n readinessScore: number\n recommendedAction: KnowledgeReadinessReport['recommendedAction']\n blockingGapIds: string[]\n nonBlockingGapIds: string[]\n questionCount: number\n acquisitionPlanCount: number\n acquiredEvidenceCount: number\n controlStepCount: number\n pass: boolean\n failureClass?: string\n wallMs: number\n costUsd: number\n}\n\nexport interface RuntimeEventCollector<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult> {\n onEvent: AgentRuntimeEventSink<TState, TAction, TActionResult, TEval>\n events: Array<Record<string, unknown>>\n}\n\nexport async function runAgentTask<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult>(\n options: RunAgentTaskOptions<TState, TAction, TActionResult, TEval>,\n): Promise<AgentTaskRunResult<TState, TAction, TActionResult, TEval>> {\n const task = options.task\n await emit(options.onEvent, { type: 'task_start', task })\n await emit(options.onEvent, { type: 'readiness_start', task })\n let knowledge = await buildReadiness(task, options.knowledge)\n await emit(options.onEvent, { type: 'readiness_end', task, knowledge })\n const questions = userQuestionsForKnowledgeGaps(knowledge.blockingMissingRequirements)\n const acquisitionPlans = acquisitionPlansForKnowledgeGaps([\n ...knowledge.blockingMissingRequirements,\n ...knowledge.nonBlockingGaps,\n ])\n const preflight = await runKnowledgePreflight(task, questions, acquisitionPlans, options.knowledge, options.onEvent)\n if (options.knowledge?.refreshReadiness && (Object.keys(preflight.userAnswers).length > 0 || preflight.acquiredEvidenceIds.length > 0)) {\n await emit(options.onEvent, { type: 'readiness_start', task })\n knowledge = await options.knowledge.refreshReadiness({\n task,\n previous: knowledge,\n userAnswers: preflight.userAnswers,\n acquiredEvidenceIds: preflight.acquiredEvidenceIds,\n })\n await emit(options.onEvent, { type: 'readiness_end', task, knowledge })\n }\n\n await emit(options.onEvent, { type: 'control_start', task, knowledge })\n const control = await runAgentControlLoop<TState, TAction, TActionResult, TEval>({\n intent: task.intent,\n budget: task.budget,\n signal: options.signal,\n store: options.store,\n scenarioId: options.scenarioId ?? task.id,\n projectId: options.projectId,\n variantId: options.variantId,\n observe: ({ history, abortSignal }) => options.adapter.observe({ task, knowledge, history, abortSignal }),\n validate: async ({ state, history, abortSignal }) => {\n const readinessEval = blockingKnowledgeEval(knowledge, { minimumScore: options.minimumReadinessScore })\n const evals = await options.adapter.validate({ task, knowledge, state, history, abortSignal })\n return [readinessEval as TEval, ...evals]\n },\n decide: (ctx) => {\n if (isKnowledgeBlocked(ctx.evals)) {\n return options.adapter.onKnowledgeBlocked?.({ task, knowledge, questions, acquisitionPlans }) ?? {\n type: 'stop',\n pass: false,\n score: knowledge.readinessScore,\n reason: `knowledge readiness blocked: ${knowledge.reason}`,\n }\n }\n return options.adapter.decide(toAgentContext(task, knowledge, ctx))\n },\n act: (action, ctx) => options.adapter.act(action, toAgentContext(task, knowledge, ctx)),\n shouldStop: options.adapter.shouldStop\n ? (ctx) => options.adapter.shouldStop!(toAgentContext(task, knowledge, ctx))\n : undefined,\n getActionCostUsd: options.adapter.getActionCostUsd\n ? ({ action, result, state, evals, history }) => options.adapter.getActionCostUsd!({ action, result, task, state, evals, history })\n : undefined,\n onStep: (step) => emit(options.onEvent, { type: 'control_step', task, step }),\n })\n await emit(options.onEvent, { type: 'control_end', task, control })\n const status = statusFromControl(control)\n await emit(options.onEvent, { type: 'task_end', task, status, reason: control.reason })\n\n return {\n task,\n status,\n knowledge,\n questions,\n acquisitionPlans,\n userAnswers: preflight.userAnswers,\n acquiredEvidenceIds: preflight.acquiredEvidenceIds,\n control,\n runRecords: options.adapter.projectRunRecords?.(control, task) ?? [],\n }\n}\n\nexport function summarizeAgentTaskRun<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n result: AgentTaskRunResult<TState, TAction, TActionResult, TEval>,\n): AgentTaskRunSummary {\n return {\n taskId: result.task.id,\n domain: result.task.domain,\n status: result.status,\n reason: result.control.reason,\n readinessScore: result.knowledge.readinessScore,\n recommendedAction: result.knowledge.recommendedAction,\n blockingGapIds: result.knowledge.blockingMissingRequirements.map((requirement) => requirement.id),\n nonBlockingGapIds: result.knowledge.nonBlockingGaps.map((requirement) => requirement.id),\n questionCount: result.questions.length,\n acquisitionPlanCount: result.acquisitionPlans.length,\n acquiredEvidenceCount: result.acquiredEvidenceIds.length,\n controlStepCount: result.control.steps.length,\n pass: result.control.pass,\n failureClass: result.control.failureClass,\n wallMs: result.control.wallMs,\n costUsd: result.control.spentCostUsd,\n }\n}\n\nexport function sanitizeKnowledgeReadinessReport(\n report: KnowledgeReadinessReport,\n options: RuntimeTelemetryOptions = {},\n): SanitizedKnowledgeReadinessReport {\n return {\n taskId: report.taskId,\n readinessScore: report.readinessScore,\n recommendedAction: report.recommendedAction,\n severity: report.severity,\n reason: report.reason,\n blockingMissingRequirements: report.blockingMissingRequirements.map((requirement) =>\n sanitizeKnowledgeRequirement(requirement, options),\n ),\n nonBlockingGaps: report.nonBlockingGaps.map((requirement) =>\n sanitizeKnowledgeRequirement(requirement, options),\n ),\n evidenceCount: report.bundle.evidenceIds.length,\n evidenceIds: options.includeEvidenceIds ? report.bundle.evidenceIds : undefined,\n missingRequirementIds: report.bundle.missing.map((requirement) => requirement.id),\n }\n}\n\nexport function sanitizeAgentRuntimeEvent<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n event: AgentRuntimeEvent<TState, TAction, TActionResult, TEval>,\n options: RuntimeTelemetryOptions = {},\n): Record<string, unknown> {\n const base = { type: event.type, task: sanitizeTask(event.task, options) }\n if (event.type === 'readiness_start' || event.type === 'task_start' || event.type === 'control_start') {\n return event.type === 'control_start'\n ? { ...base, knowledge: sanitizeKnowledgeReadinessReport(event.knowledge, options) }\n : base\n }\n if (event.type === 'readiness_end') {\n return { ...base, knowledge: sanitizeKnowledgeReadinessReport(event.knowledge, options) }\n }\n if (event.type === 'questions_start') {\n return { ...base, questions: event.questions.map((question) => sanitizeQuestion(question, options)) }\n }\n if (event.type === 'questions_end') {\n return {\n ...base,\n questions: event.questions.map((question) => sanitizeQuestion(question, options)),\n userAnswers: options.includeUserAnswers ? event.userAnswers : redactRecord(event.userAnswers),\n }\n }\n if (event.type === 'acquisition_start') {\n return { ...base, acquisitionPlans: event.acquisitionPlans.map(sanitizeAcquisitionPlan) }\n }\n if (event.type === 'acquisition_end') {\n return {\n ...base,\n acquisitionPlans: event.acquisitionPlans.map(sanitizeAcquisitionPlan),\n acquiredEvidenceCount: event.acquiredEvidenceIds.length,\n acquiredEvidenceIds: options.includeEvidenceIds ? event.acquiredEvidenceIds : undefined,\n }\n }\n if (event.type === 'control_step') {\n return { ...base, step: sanitizeControlStep(event.step, options) }\n }\n if (event.type === 'control_end') {\n return { ...base, control: sanitizeControlRun(event.control, options) }\n }\n return { ...base, status: event.status, reason: event.reason }\n}\n\nexport function createRuntimeEventCollector<TState = unknown, TAction = unknown, TActionResult = unknown, TEval extends ControlEvalResult = ControlEvalResult>(\n options: RuntimeTelemetryOptions = {},\n): RuntimeEventCollector<TState, TAction, TActionResult, TEval> {\n const events: Array<Record<string, unknown>> = []\n return {\n events,\n onEvent: (event) => {\n events.push(sanitizeAgentRuntimeEvent(event, options))\n },\n }\n}\n\nasync function runKnowledgePreflight<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n task: AgentTaskSpec,\n questions: UserQuestion[],\n acquisitionPlans: DataAcquisitionPlan[],\n provider: AgentKnowledgeProvider | undefined,\n onEvent: AgentRuntimeEventSink<TState, TAction, TActionResult, TEval> | undefined,\n): Promise<{ userAnswers: Record<string, string>; acquiredEvidenceIds: string[] }> {\n let userAnswers: Record<string, string> = {}\n let acquiredEvidenceIds: string[] = []\n if (questions.length > 0 && provider?.answerQuestions) {\n await emit(onEvent, { type: 'questions_start', task, questions })\n userAnswers = await provider.answerQuestions(questions, task)\n await emit(onEvent, { type: 'questions_end', task, questions, userAnswers })\n }\n if (acquisitionPlans.length > 0 && provider?.executeAcquisitionPlans) {\n await emit(onEvent, { type: 'acquisition_start', task, acquisitionPlans })\n acquiredEvidenceIds = await provider.executeAcquisitionPlans(acquisitionPlans, task)\n await emit(onEvent, { type: 'acquisition_end', task, acquisitionPlans, acquiredEvidenceIds })\n }\n return { userAnswers, acquiredEvidenceIds }\n}\n\nfunction sanitizeTask(task: AgentTaskSpec, options: RuntimeTelemetryOptions): Record<string, unknown> {\n return {\n id: task.id,\n intent: task.intent,\n domain: task.domain,\n inputs: options.includeInputs ? task.inputs : task.inputs ? '[redacted]' : undefined,\n requiredKnowledge: task.requiredKnowledge?.map((requirement) =>\n sanitizeKnowledgeRequirement(requirement, options),\n ),\n metadata: options.includeMetadata ? task.metadata : task.metadata ? '[redacted]' : undefined,\n }\n}\n\nfunction sanitizeKnowledgeRequirement(\n requirement: KnowledgeRequirement,\n options: RuntimeTelemetryOptions,\n): SanitizedKnowledgeRequirement {\n const includeDescription = options.includeRequirementDescriptions && requirement.sensitivity !== 'secret'\n return {\n id: requirement.id,\n description: includeDescription ? requirement.description : undefined,\n requiredFor: requirement.requiredFor,\n category: requirement.category,\n acquisitionMode: requirement.acquisitionMode,\n importance: requirement.importance,\n freshness: requirement.freshness,\n sensitivity: requirement.sensitivity,\n confidenceNeeded: requirement.confidenceNeeded,\n currentConfidence: requirement.currentConfidence,\n evidenceCount: requirement.evidenceIds.length,\n evidenceIds: options.includeEvidenceIds ? requirement.evidenceIds : undefined,\n fallbackPolicy: requirement.fallbackPolicy,\n }\n}\n\nfunction sanitizeQuestion(question: UserQuestion, options: RuntimeTelemetryOptions): Record<string, unknown> {\n return {\n id: question.id,\n question: options.includeRequirementDescriptions && question.answerType !== 'credential'\n ? question.question\n : undefined,\n reason: options.includeRequirementDescriptions ? question.reason : undefined,\n requirementId: question.requirementId,\n importance: question.importance,\n answerType: question.answerType,\n impactIfUnknown: options.includeRequirementDescriptions ? question.impactIfUnknown : undefined,\n optionCount: question.options?.length ?? 0,\n }\n}\n\nfunction sanitizeAcquisitionPlan(plan: DataAcquisitionPlan): Record<string, unknown> {\n return {\n id: plan.id,\n requirementIds: plan.requirementIds,\n mode: plan.mode,\n priority: plan.priority,\n expectedEvidenceCount: plan.expectedEvidenceIds?.length ?? 0,\n questionCount: plan.questions?.length ?? 0,\n }\n}\n\nfunction sanitizeControlStep<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n step: ControlStep<TState, TAction, TActionResult, TEval>,\n options: RuntimeTelemetryOptions,\n): Record<string, unknown> {\n const actionOutcome = step.actionOutcome\n return {\n index: step.index,\n decisionType: step.decision.type,\n reason: step.decision.reason,\n action: options.includeControlPayloads && step.decision.type === 'continue' ? step.decision.action : undefined,\n result: options.includeControlPayloads && actionOutcome?.ok ? actionOutcome.result : undefined,\n actionOk: actionOutcome?.ok,\n actionError: actionOutcome?.ok === false ? actionOutcome.error : undefined,\n durationMs: actionOutcome?.durationMs,\n evalsBefore: summarizeEvals(step.evalsBefore, options),\n evalsAfter: summarizeEvals(step.evalsAfter, options),\n startedAt: step.startedAt,\n endedAt: step.endedAt,\n }\n}\n\nfunction sanitizeControlRun<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n control: ControlRunResult<TState, TAction, TActionResult, TEval>,\n options: RuntimeTelemetryOptions,\n): Record<string, unknown> {\n return {\n pass: control.pass,\n completed: control.completed,\n reason: control.reason,\n score: control.score,\n stepCount: control.steps.length,\n wallMs: control.wallMs,\n spentCostUsd: control.spentCostUsd,\n failureClass: control.failureClass,\n stoppedBy: control.stoppedBy,\n runId: control.runId,\n runtimeErrorCount: control.runtimeErrors.length,\n finalEvals: summarizeEvals(control.finalEvals, options),\n }\n}\n\nfunction summarizeEvals(evals: ControlEvalResult[], options: RuntimeTelemetryOptions): Array<Record<string, unknown>> {\n return evals.map((evalResult) => ({\n id: evalResult.id,\n passed: evalResult.passed,\n score: evalResult.score,\n severity: evalResult.severity,\n objective: evalResult.objective,\n detail: options.includeEvalDetails ? evalResult.detail : undefined,\n evidence: options.includeEvalDetails ? evalResult.evidence : undefined,\n }))\n}\n\nfunction redactRecord(record: Record<string, string>): Record<string, string> {\n return Object.fromEntries(Object.keys(record).map((key) => [key, '[redacted]']))\n}\n\nfunction buildReadiness(\n task: AgentTaskSpec,\n provider: AgentKnowledgeProvider | undefined,\n): Promise<KnowledgeReadinessReport> | KnowledgeReadinessReport {\n if (provider?.buildReadiness) return provider.buildReadiness(task)\n return scoreKnowledgeReadiness({\n taskId: task.id,\n requirements: task.requiredKnowledge ?? [],\n metadata: { domain: task.domain, ...task.metadata },\n })\n}\n\nfunction isKnowledgeBlocked(evals: ControlEvalResult[]): boolean {\n return evals.some((evalResult) => evalResult.id === 'knowledge-ready' && !evalResult.passed)\n}\n\nfunction statusFromControl(control: ControlRunResult<unknown, unknown, unknown, ControlEvalResult>): AgentTaskStatus {\n if (control.stoppedBy === 'abort') return 'aborted'\n if (control.reason.includes('knowledge readiness blocked')) return 'blocked'\n if (control.pass) return 'completed'\n return 'failed'\n}\n\nasync function emit<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n sink: AgentRuntimeEventSink<TState, TAction, TActionResult, TEval> | undefined,\n event: AgentRuntimeEvent<TState, TAction, TActionResult, TEval>,\n): Promise<void> {\n await sink?.(event)\n}\n\nfunction toAgentContext<TState, TAction, TActionResult, TEval extends ControlEvalResult>(\n task: AgentTaskSpec,\n knowledge: KnowledgeReadinessReport,\n ctx: ControlContext<TState, TAction, TActionResult, TEval>,\n): AgentTaskContext<TState, TAction, TActionResult, TEval> {\n return {\n task,\n knowledge,\n state: ctx.state,\n evals: ctx.evals,\n history: ctx.history,\n budget: ctx.budget,\n stepIndex: ctx.stepIndex,\n wallMs: ctx.wallMs,\n spentCostUsd: ctx.spentCostUsd,\n remainingCostUsd: ctx.remainingCostUsd,\n abortSignal: ctx.abortSignal,\n }\n}\n\nexport type {\n ControlBudget,\n ControlDecision,\n ControlEvalResult,\n ControlRunResult,\n ControlStep,\n DataAcquisitionPlan,\n KnowledgeReadinessReport,\n KnowledgeRequirement,\n RunRecord,\n UserQuestion,\n} from '@tangle-network/agent-eval'\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED