@polpo-ai/core 0.15.43 → 0.15.45
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 +163 -0
- package/dist/__tests__/guardrail-detectors.test.d.ts +2 -0
- package/dist/__tests__/guardrail-detectors.test.d.ts.map +1 -0
- package/dist/__tests__/guardrail-detectors.test.js +316 -0
- package/dist/__tests__/guardrail-detectors.test.js.map +1 -0
- package/dist/__tests__/guardrail-engine.test.d.ts +2 -0
- package/dist/__tests__/guardrail-engine.test.d.ts.map +1 -0
- package/dist/__tests__/guardrail-engine.test.js +455 -0
- package/dist/__tests__/guardrail-engine.test.js.map +1 -0
- package/dist/__tests__/loop-context-trust.test.d.ts +2 -0
- package/dist/__tests__/loop-context-trust.test.d.ts.map +1 -0
- package/dist/__tests__/loop-context-trust.test.js +41 -0
- package/dist/__tests__/loop-context-trust.test.js.map +1 -0
- package/dist/__tests__/output-guardrails.test.d.ts +2 -0
- package/dist/__tests__/output-guardrails.test.d.ts.map +1 -0
- package/dist/__tests__/output-guardrails.test.js +151 -0
- package/dist/__tests__/output-guardrails.test.js.map +1 -0
- package/dist/__tests__/runtime-context.test.d.ts +2 -0
- package/dist/__tests__/runtime-context.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-context.test.js +204 -0
- package/dist/__tests__/runtime-context.test.js.map +1 -0
- package/dist/__tests__/runtime-inspection.test.d.ts +2 -0
- package/dist/__tests__/runtime-inspection.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-inspection.test.js +189 -0
- package/dist/__tests__/runtime-inspection.test.js.map +1 -0
- package/dist/__tests__/task-execution-router.test.js +62 -0
- package/dist/__tests__/task-execution-router.test.js.map +1 -1
- package/dist/__tests__/task-runner-guardrail-events.test.d.ts +2 -0
- package/dist/__tests__/task-runner-guardrail-events.test.d.ts.map +1 -0
- package/dist/__tests__/task-runner-guardrail-events.test.js +130 -0
- package/dist/__tests__/task-runner-guardrail-events.test.js.map +1 -0
- package/dist/adapter.d.ts +24 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/events.d.ts +7 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/guardrails/detectors.d.ts +24 -0
- package/dist/guardrails/detectors.d.ts.map +1 -0
- package/dist/guardrails/detectors.js +416 -0
- package/dist/guardrails/detectors.js.map +1 -0
- package/dist/guardrails/engine.d.ts +12 -0
- package/dist/guardrails/engine.d.ts.map +1 -0
- package/dist/guardrails/engine.js +189 -0
- package/dist/guardrails/engine.js.map +1 -0
- package/dist/guardrails/errors.d.ts +17 -0
- package/dist/guardrails/errors.d.ts.map +1 -0
- package/dist/guardrails/errors.js +23 -0
- package/dist/guardrails/errors.js.map +1 -0
- package/dist/guardrails/index.d.ts +8 -0
- package/dist/guardrails/index.d.ts.map +1 -0
- package/dist/guardrails/index.js +7 -0
- package/dist/guardrails/index.js.map +1 -0
- package/dist/guardrails/output-policy.d.ts +4 -0
- package/dist/guardrails/output-policy.d.ts.map +1 -0
- package/dist/guardrails/output-policy.js +64 -0
- package/dist/guardrails/output-policy.js.map +1 -0
- package/dist/guardrails/settings.d.ts +12 -0
- package/dist/guardrails/settings.d.ts.map +1 -0
- package/dist/guardrails/settings.js +108 -0
- package/dist/guardrails/settings.js.map +1 -0
- package/dist/guardrails/tool-middleware.d.ts +15 -0
- package/dist/guardrails/tool-middleware.d.ts.map +1 -0
- package/dist/guardrails/tool-middleware.js +158 -0
- package/dist/guardrails/tool-middleware.js.map +1 -0
- package/dist/guardrails/types.d.ts +148 -0
- package/dist/guardrails/types.d.ts.map +1 -0
- package/dist/guardrails/types.js +2 -0
- package/dist/guardrails/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/loop/step-helpers.d.ts +2 -1
- package/dist/loop/step-helpers.d.ts.map +1 -1
- package/dist/loop/step-helpers.js +37 -4
- package/dist/loop/step-helpers.js.map +1 -1
- package/dist/runtime-context/context.d.ts +17 -0
- package/dist/runtime-context/context.d.ts.map +1 -0
- package/dist/runtime-context/context.js +338 -0
- package/dist/runtime-context/context.js.map +1 -0
- package/dist/runtime-context/index.d.ts +2 -1
- package/dist/runtime-context/index.d.ts.map +1 -1
- package/dist/runtime-context/index.js +1 -0
- package/dist/runtime-context/index.js.map +1 -1
- package/dist/runtime-context/types.d.ts +30 -0
- package/dist/runtime-context/types.d.ts.map +1 -1
- package/dist/runtime-context/types.js.map +1 -1
- package/dist/runtime-inspection/accounting.d.ts +4 -0
- package/dist/runtime-inspection/accounting.d.ts.map +1 -0
- package/dist/runtime-inspection/accounting.js +145 -0
- package/dist/runtime-inspection/accounting.js.map +1 -0
- package/dist/runtime-inspection/index.d.ts +4 -0
- package/dist/runtime-inspection/index.d.ts.map +1 -0
- package/dist/runtime-inspection/index.js +3 -0
- package/dist/runtime-inspection/index.js.map +1 -0
- package/dist/runtime-inspection/types.d.ts +40 -0
- package/dist/runtime-inspection/types.d.ts.map +1 -0
- package/dist/runtime-inspection/types.js +22 -0
- package/dist/runtime-inspection/types.js.map +1 -0
- package/dist/task-runner.d.ts +1 -0
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +97 -15
- package/dist/task-runner.js.map +1 -1
- package/dist/types/agent.d.ts +8 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js.map +1 -1
- package/dist/types/config.d.ts +17 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/package.json +10 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RuntimeInvocationSource, RuntimeSurface } from "../runtime-plan/index.js";
|
|
2
|
+
import type { RuntimeGuardrailDecision } from "../runtime-plan/types.js";
|
|
2
3
|
export declare const RUNTIME_CONTEXT_SEGMENT_KINDS: readonly ["memory", "brain"];
|
|
3
4
|
export type RuntimeContextSegmentKind = (typeof RUNTIME_CONTEXT_SEGMENT_KINDS)[number];
|
|
4
5
|
export declare const RUNTIME_CONTEXT_TRUST_LEVELS: readonly ["trusted", "user_provided", "external", "untrusted"];
|
|
@@ -72,4 +73,33 @@ export interface RuntimeContextProvider {
|
|
|
72
73
|
export interface ResolveRuntimeContextOptions {
|
|
73
74
|
readonly now?: () => Date | string;
|
|
74
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Trust assigned to prompt-bound context. This is intentionally separate from
|
|
78
|
+
* retrieval-entry trust because it also covers system and developer content.
|
|
79
|
+
*/
|
|
80
|
+
export type RuntimePromptContextTrust = "system" | "developer" | "user" | "external" | "untrusted";
|
|
81
|
+
/**
|
|
82
|
+
* Prompt-context protection is opt-in until a host explicitly enables it.
|
|
83
|
+
* The serializable value survives process and deployment boundaries.
|
|
84
|
+
*/
|
|
85
|
+
export type RuntimeContextTrustMode = "off" | "enforce";
|
|
86
|
+
export interface RuntimePromptContextSegment {
|
|
87
|
+
readonly kind: string;
|
|
88
|
+
readonly sourceId?: string;
|
|
89
|
+
readonly trust: RuntimePromptContextTrust;
|
|
90
|
+
readonly content: string;
|
|
91
|
+
readonly truncated?: boolean;
|
|
92
|
+
readonly findings?: readonly RuntimeGuardrailDecision[];
|
|
93
|
+
}
|
|
94
|
+
export interface CreateRuntimePromptContextSegmentInput {
|
|
95
|
+
readonly kind: string;
|
|
96
|
+
readonly sourceId?: string;
|
|
97
|
+
readonly trust: RuntimePromptContextTrust;
|
|
98
|
+
readonly content: string;
|
|
99
|
+
readonly truncated?: boolean;
|
|
100
|
+
readonly findings?: readonly RuntimeGuardrailDecision[];
|
|
101
|
+
}
|
|
102
|
+
export interface RuntimePromptContextSegmentOptions {
|
|
103
|
+
readonly maxCharacters?: number;
|
|
104
|
+
}
|
|
75
105
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime-context/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime-context/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime-context/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime-context/types.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAI1E,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,SAAS;IACT,eAAe;IACf,UAAU;IACV,WAAW;CACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type RuntimeContextAccounting, type RuntimeContextAccountingSegment, type RuntimeContextAccountingSegmentCategory } from "./types.js";
|
|
2
|
+
export declare function normalizeRuntimeContextAccountingSegmentCategory(value: unknown): RuntimeContextAccountingSegmentCategory;
|
|
3
|
+
export declare function createRuntimeContextAccounting(input: readonly RuntimeContextAccountingSegment[]): RuntimeContextAccounting;
|
|
4
|
+
//# sourceMappingURL=accounting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounting.d.ts","sourceRoot":"","sources":["../../src/runtime-inspection/accounting.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACpC,KAAK,uCAAuC,EAG7C,MAAM,YAAY,CAAC;AAQpB,wBAAgB,gDAAgD,CAC9D,KAAK,EAAE,OAAO,GACb,uCAAuC,CAIzC;AAgED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,+BAA+B,EAAE,GAChD,wBAAwB,CAgH1B"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { RUNTIME_CONTEXT_ACCOUNTING_VERSION, RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES, RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_KINDS, } from "./types.js";
|
|
2
|
+
const MAX_ACCOUNTING_SEGMENTS = 10_000;
|
|
3
|
+
const categorySet = new Set(RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES);
|
|
4
|
+
const kindSet = new Set(RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_KINDS);
|
|
5
|
+
export function normalizeRuntimeContextAccountingSegmentCategory(value) {
|
|
6
|
+
return typeof value === "string" && categorySet.has(value)
|
|
7
|
+
? value
|
|
8
|
+
: "other";
|
|
9
|
+
}
|
|
10
|
+
function assertText(value, field) {
|
|
11
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
12
|
+
throw new TypeError(`${field} must be a non-empty string`);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
function assertCount(value, field) {
|
|
17
|
+
if (typeof value !== "number"
|
|
18
|
+
|| !Number.isSafeInteger(value)
|
|
19
|
+
|| value < 0) {
|
|
20
|
+
throw new TypeError(`${field} must be a non-negative safe integer`);
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function assertKind(value) {
|
|
25
|
+
if (typeof value !== "string" || !kindSet.has(value)) {
|
|
26
|
+
throw new TypeError(`Unknown runtime context segment kind: ${String(value)}`);
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function assertBoolean(value, field) {
|
|
31
|
+
if (typeof value !== "boolean") {
|
|
32
|
+
throw new TypeError(`${field} must be a boolean`);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
function addCount(current, value, field) {
|
|
37
|
+
const total = current + value;
|
|
38
|
+
if (!Number.isSafeInteger(total)) {
|
|
39
|
+
throw new RangeError(`${field} exceeds the maximum safe integer`);
|
|
40
|
+
}
|
|
41
|
+
return total;
|
|
42
|
+
}
|
|
43
|
+
function copySegment(input) {
|
|
44
|
+
const segment = {
|
|
45
|
+
id: assertText(input.id, "segment.id"),
|
|
46
|
+
label: assertText(input.label, "segment.label"),
|
|
47
|
+
category: normalizeRuntimeContextAccountingSegmentCategory(input.category),
|
|
48
|
+
kind: assertKind(input.kind),
|
|
49
|
+
tokens: assertCount(input.tokens, "segment.tokens"),
|
|
50
|
+
...(input.characters === undefined
|
|
51
|
+
? {}
|
|
52
|
+
: { characters: assertCount(input.characters, "segment.characters") }),
|
|
53
|
+
...(input.items === undefined
|
|
54
|
+
? {}
|
|
55
|
+
: { items: assertCount(input.items, "segment.items") }),
|
|
56
|
+
...(input.deferred === undefined
|
|
57
|
+
? {}
|
|
58
|
+
: { deferred: assertBoolean(input.deferred, "segment.deferred") }),
|
|
59
|
+
};
|
|
60
|
+
return Object.freeze(segment);
|
|
61
|
+
}
|
|
62
|
+
export function createRuntimeContextAccounting(input) {
|
|
63
|
+
if (!Array.isArray(input)) {
|
|
64
|
+
throw new TypeError("Runtime context segments must be an array");
|
|
65
|
+
}
|
|
66
|
+
if (input.length > MAX_ACCOUNTING_SEGMENTS) {
|
|
67
|
+
throw new RangeError(`Runtime context accounting supports at most ${MAX_ACCOUNTING_SEGMENTS} segments`);
|
|
68
|
+
}
|
|
69
|
+
const ids = new Set();
|
|
70
|
+
const segments = input.map((candidate) => {
|
|
71
|
+
if (!candidate || typeof candidate !== "object") {
|
|
72
|
+
throw new TypeError("Each runtime context segment must be an object");
|
|
73
|
+
}
|
|
74
|
+
const segment = copySegment(candidate);
|
|
75
|
+
if (ids.has(segment.id)) {
|
|
76
|
+
throw new TypeError(`Duplicate runtime context segment id: ${segment.id}`);
|
|
77
|
+
}
|
|
78
|
+
ids.add(segment.id);
|
|
79
|
+
return segment;
|
|
80
|
+
});
|
|
81
|
+
const categoryTotals = new Map();
|
|
82
|
+
let promptTokens = 0;
|
|
83
|
+
let toolSchemaTokens = 0;
|
|
84
|
+
let messageTokens = 0;
|
|
85
|
+
let attachmentTokens = 0;
|
|
86
|
+
let retrievalTokens = 0;
|
|
87
|
+
for (const segment of segments) {
|
|
88
|
+
const existing = categoryTotals.get(segment.category) ?? {
|
|
89
|
+
tokens: 0,
|
|
90
|
+
segments: 0,
|
|
91
|
+
};
|
|
92
|
+
existing.tokens = addCount(existing.tokens, segment.tokens, `category.${segment.category}.tokens`);
|
|
93
|
+
existing.segments += 1;
|
|
94
|
+
categoryTotals.set(segment.category, existing);
|
|
95
|
+
switch (segment.kind) {
|
|
96
|
+
case "prompt":
|
|
97
|
+
promptTokens = addCount(promptTokens, segment.tokens, "promptTokens");
|
|
98
|
+
break;
|
|
99
|
+
case "tool-schema":
|
|
100
|
+
toolSchemaTokens = addCount(toolSchemaTokens, segment.tokens, "toolSchemaTokens");
|
|
101
|
+
break;
|
|
102
|
+
case "message":
|
|
103
|
+
messageTokens = addCount(messageTokens, segment.tokens, "messageTokens");
|
|
104
|
+
break;
|
|
105
|
+
case "attachment":
|
|
106
|
+
attachmentTokens = addCount(attachmentTokens, segment.tokens, "attachmentTokens");
|
|
107
|
+
break;
|
|
108
|
+
case "retrieval":
|
|
109
|
+
retrievalTokens = addCount(retrievalTokens, segment.tokens, "retrievalTokens");
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const categories = [];
|
|
114
|
+
for (const category of RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES) {
|
|
115
|
+
const totals = categoryTotals.get(category);
|
|
116
|
+
if (!totals)
|
|
117
|
+
continue;
|
|
118
|
+
categories.push(Object.freeze({
|
|
119
|
+
category,
|
|
120
|
+
tokens: totals.tokens,
|
|
121
|
+
segments: totals.segments,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
const totalTokens = [
|
|
125
|
+
promptTokens,
|
|
126
|
+
toolSchemaTokens,
|
|
127
|
+
messageTokens,
|
|
128
|
+
attachmentTokens,
|
|
129
|
+
retrievalTokens,
|
|
130
|
+
].reduce((total, value) => addCount(total, value, "totalTokens"), 0);
|
|
131
|
+
return Object.freeze({
|
|
132
|
+
version: RUNTIME_CONTEXT_ACCOUNTING_VERSION,
|
|
133
|
+
segments: Object.freeze(segments),
|
|
134
|
+
categories: Object.freeze(categories),
|
|
135
|
+
totals: Object.freeze({
|
|
136
|
+
promptTokens,
|
|
137
|
+
toolSchemaTokens,
|
|
138
|
+
messageTokens,
|
|
139
|
+
attachmentTokens,
|
|
140
|
+
retrievalTokens,
|
|
141
|
+
totalTokens,
|
|
142
|
+
}),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=accounting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounting.js","sourceRoot":"","sources":["../../src/runtime-inspection/accounting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { RUNTIME_CONTEXT_ACCOUNTING_VERSION, RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES, RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_KINDS, } from "./types.js";
|
|
2
|
+
export { createRuntimeContextAccounting, normalizeRuntimeContextAccountingSegmentCategory, } from "./accounting.js";
|
|
3
|
+
export type { RuntimeContextAccounting, RuntimeContextAccountingSegment, RuntimeContextAccountingSegmentCategory, RuntimeContextAccountingSegmentKind, RuntimeContextAccountingTotals, RuntimeContextCategoryAccounting, } from "./types.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime-inspection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,6CAA6C,EAC7C,wCAAwC,GACzC,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,8BAA8B,EAC9B,gDAAgD,GACjD,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,wBAAwB,EACxB,+BAA+B,EAC/B,uCAAuC,EACvC,mCAAmC,EACnC,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { RUNTIME_CONTEXT_ACCOUNTING_VERSION, RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES, RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_KINDS, } from "./types.js";
|
|
2
|
+
export { createRuntimeContextAccounting, normalizeRuntimeContextAccountingSegmentCategory, } from "./accounting.js";
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime-inspection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,6CAA6C,EAC7C,wCAAwC,GACzC,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,8BAA8B,EAC9B,gDAAgD,GACjD,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const RUNTIME_CONTEXT_ACCOUNTING_VERSION: 1;
|
|
2
|
+
export declare const RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES: readonly ["instructions", "memory", "brain", "skills", "tools", "workspace", "runtime", "conversation", "attachments", "retrieval", "other"];
|
|
3
|
+
export type RuntimeContextAccountingSegmentCategory = (typeof RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES)[number];
|
|
4
|
+
export declare const RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_KINDS: readonly ["prompt", "tool-schema", "message", "attachment", "retrieval"];
|
|
5
|
+
export type RuntimeContextAccountingSegmentKind = (typeof RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_KINDS)[number];
|
|
6
|
+
/**
|
|
7
|
+
* Secret-free accounting metadata for one model-context contribution.
|
|
8
|
+
* Content is deliberately absent: inspectors receive size and provenance,
|
|
9
|
+
* never prompt text, credentials, messages, or retrieved documents.
|
|
10
|
+
*/
|
|
11
|
+
export interface RuntimeContextAccountingSegment {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly label: string;
|
|
14
|
+
readonly category: RuntimeContextAccountingSegmentCategory;
|
|
15
|
+
readonly kind: RuntimeContextAccountingSegmentKind;
|
|
16
|
+
readonly tokens: number;
|
|
17
|
+
readonly characters?: number;
|
|
18
|
+
readonly items?: number;
|
|
19
|
+
readonly deferred?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface RuntimeContextCategoryAccounting {
|
|
22
|
+
readonly category: RuntimeContextAccountingSegmentCategory;
|
|
23
|
+
readonly tokens: number;
|
|
24
|
+
readonly segments: number;
|
|
25
|
+
}
|
|
26
|
+
export interface RuntimeContextAccountingTotals {
|
|
27
|
+
readonly promptTokens: number;
|
|
28
|
+
readonly toolSchemaTokens: number;
|
|
29
|
+
readonly messageTokens: number;
|
|
30
|
+
readonly attachmentTokens: number;
|
|
31
|
+
readonly retrievalTokens: number;
|
|
32
|
+
readonly totalTokens: number;
|
|
33
|
+
}
|
|
34
|
+
export interface RuntimeContextAccounting {
|
|
35
|
+
readonly version: typeof RUNTIME_CONTEXT_ACCOUNTING_VERSION;
|
|
36
|
+
readonly segments: readonly RuntimeContextAccountingSegment[];
|
|
37
|
+
readonly categories: readonly RuntimeContextCategoryAccounting[];
|
|
38
|
+
readonly totals: RuntimeContextAccountingTotals;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime-inspection/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,EAAG,CAAU,CAAC;AAE7D,eAAO,MAAM,6CAA6C,8IAYhD,CAAC;AAEX,MAAM,MAAM,uCAAuC,GACjD,CAAC,OAAO,6CAA6C,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,eAAO,MAAM,wCAAwC,0EAM3C,CAAC;AAEX,MAAM,MAAM,mCAAmC,GAC7C,CAAC,OAAO,wCAAwC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,uCAAuC,CAAC;IAC3D,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,uCAAuC,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,kCAAkC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,SAAS,+BAA+B,EAAE,CAAC;IAC9D,QAAQ,CAAC,UAAU,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;CACjD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const RUNTIME_CONTEXT_ACCOUNTING_VERSION = 1;
|
|
2
|
+
export const RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_CATEGORIES = [
|
|
3
|
+
"instructions",
|
|
4
|
+
"memory",
|
|
5
|
+
"brain",
|
|
6
|
+
"skills",
|
|
7
|
+
"tools",
|
|
8
|
+
"workspace",
|
|
9
|
+
"runtime",
|
|
10
|
+
"conversation",
|
|
11
|
+
"attachments",
|
|
12
|
+
"retrieval",
|
|
13
|
+
"other",
|
|
14
|
+
];
|
|
15
|
+
export const RUNTIME_CONTEXT_ACCOUNTING_SEGMENT_KINDS = [
|
|
16
|
+
"prompt",
|
|
17
|
+
"tool-schema",
|
|
18
|
+
"message",
|
|
19
|
+
"attachment",
|
|
20
|
+
"retrieval",
|
|
21
|
+
];
|
|
22
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime-inspection/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAU,CAAC;AAE7D,MAAM,CAAC,MAAM,6CAA6C,GAAG;IAC3D,cAAc;IACd,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,WAAW;IACX,SAAS;IACT,cAAc;IACd,aAAa;IACb,WAAW;IACX,OAAO;CACC,CAAC;AAKX,MAAM,CAAC,MAAM,wCAAwC,GAAG;IACtD,QAAQ;IACR,aAAa;IACb,SAAS;IACT,YAAY;IACZ,WAAW;CACH,CAAC"}
|
package/dist/task-runner.d.ts
CHANGED
|
@@ -32,6 +32,7 @@ export declare class TaskRunner {
|
|
|
32
32
|
* The callback is typically the assessment pipeline (handleResult).
|
|
33
33
|
*/
|
|
34
34
|
collectResults(onResult: (taskId: string, result: TaskResult) => Promise<void> | void): Promise<void>;
|
|
35
|
+
private emitGuardrailEvents;
|
|
35
36
|
/**
|
|
36
37
|
* Read the JSONL activity log for a killed run and produce a human-readable
|
|
37
38
|
* diagnosis of what the agent was doing when it timed out.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../src/task-runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../src/task-runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAqBjE;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AAsC3D;;GAEG;AACH,qBAAa,UAAU;IAeT,OAAO,CAAC,GAAG;IAdvB,OAAO,CAAC,WAAW,CAAqB;IACxC,gFAAgF;IAChF,OAAO,CAAC,YAAY,CAA6B;IACjD,iFAAiF;IACjF,OAAO,CAAC,UAAU,CAAkC;IACpD;;;;;;OAMG;IACH,OAAO,CAAC,aAAa,CAAsC;gBAEvC,GAAG,EAAE,mBAAmB;YAE9B,yBAAyB;IAgBvC;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACrE,OAAO,CAAC,IAAI,CAAC;YAoDF,mBAAmB;IAqCjC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAyF7B;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsD1C;qFACiF;IAC3E,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDhD;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IA8E7C,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIpC,4EAA4E;YAC9D,eAAe;IA+BvB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA4R7C,OAAO,CAAC,iBAAiB;CAK1B"}
|
package/dist/task-runner.js
CHANGED
|
@@ -4,7 +4,7 @@ import { agentMemoryScope } from "./memory-store.js";
|
|
|
4
4
|
import { resolveExecutionMode } from "./execution-mode.js";
|
|
5
5
|
import { resolveRuntimeSandboxOptions } from "./runtime-sandbox.js";
|
|
6
6
|
import { resolveConfiguredModelSelection } from "./model-profiles.js";
|
|
7
|
-
import { resolveRuntimeContext, } from "./runtime-context/index.js";
|
|
7
|
+
import { createRuntimePromptContextSegment, resolveRuntimeContext, } from "./runtime-context/index.js";
|
|
8
8
|
import { createExecutionRouteResolvedEvent, resolveTaskExecutionRoute, } from "./execution-router.js";
|
|
9
9
|
/**
|
|
10
10
|
* Durable turns: max age of a resume checkpoint before orphan recovery
|
|
@@ -86,6 +86,7 @@ export class TaskRunner {
|
|
|
86
86
|
async collectResults(onResult) {
|
|
87
87
|
const terminalRuns = await this.ctx.runStore.getTerminalRuns();
|
|
88
88
|
for (const run of terminalRuns) {
|
|
89
|
+
await this.emitGuardrailEvents(run);
|
|
89
90
|
// Persist sessionId on the task before acknowledging the run.
|
|
90
91
|
const sid = run.sessionId ?? run.activity.sessionId;
|
|
91
92
|
if (sid) {
|
|
@@ -138,6 +139,43 @@ export class TaskRunner {
|
|
|
138
139
|
this.staleWarned.delete(run.taskId);
|
|
139
140
|
}
|
|
140
141
|
}
|
|
142
|
+
async emitGuardrailEvents(run) {
|
|
143
|
+
const byId = new Map();
|
|
144
|
+
const sid = run.sessionId ?? run.activity.sessionId;
|
|
145
|
+
if (sid) {
|
|
146
|
+
try {
|
|
147
|
+
const entries = await this.ctx.logStore.getSessionEntries(sid);
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
if (entry.event !== "transcript:guardrail_decision")
|
|
150
|
+
continue;
|
|
151
|
+
const data = entry.data;
|
|
152
|
+
const event = data?.event;
|
|
153
|
+
if (!event)
|
|
154
|
+
continue;
|
|
155
|
+
const id = event?.decision?.id;
|
|
156
|
+
if (data?.type === "guardrail_decision" && typeof id === "string") {
|
|
157
|
+
byId.set(id, event);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Activity is the bounded fallback when transcript storage is down.
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
for (const event of run.activity.guardrailDecisions ?? []) {
|
|
166
|
+
const id = event?.decision?.id;
|
|
167
|
+
if (typeof id === "string" && !byId.has(id))
|
|
168
|
+
byId.set(id, event);
|
|
169
|
+
}
|
|
170
|
+
for (const event of byId.values()) {
|
|
171
|
+
this.ctx.emitter.emit("runtime:guardrail", {
|
|
172
|
+
runId: run.id,
|
|
173
|
+
taskId: run.taskId,
|
|
174
|
+
agentName: run.agentName,
|
|
175
|
+
event,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
141
179
|
/**
|
|
142
180
|
* Read the JSONL activity log for a killed run and produce a human-readable
|
|
143
181
|
* diagnosis of what the agent was doing when it timed out.
|
|
@@ -526,25 +564,45 @@ export class TaskRunner {
|
|
|
526
564
|
throw new Error("Runtime context retrieval failed");
|
|
527
565
|
}
|
|
528
566
|
const executionRoute = await this.resolveTaskExecutionRoute(task, agent);
|
|
529
|
-
|
|
530
|
-
|
|
567
|
+
const contextTrust = this.ctx.config.settings.contextTrust === "enforce"
|
|
568
|
+
? "enforce"
|
|
569
|
+
: "off";
|
|
570
|
+
// Build both representations during the opt-in window. Enforced runs keep
|
|
571
|
+
// metadata structural; disabled runs preserve the historical task prompt.
|
|
572
|
+
const promptContextSegments = [];
|
|
573
|
+
const legacyContextParts = [];
|
|
531
574
|
const taskWithContext = {
|
|
532
575
|
...task,
|
|
533
576
|
...(executionRoute?.mode === "loop"
|
|
534
577
|
? { loop: executionRoute.loop }
|
|
535
578
|
: {}),
|
|
536
579
|
};
|
|
537
|
-
const contextParts = [];
|
|
538
580
|
// 1. Shared memory (persistent cross-session knowledge, visible to all agents)
|
|
539
581
|
const sharedMemory = (await this.ctx.memoryStore?.get()) ?? "";
|
|
540
582
|
if (sharedMemory) {
|
|
541
|
-
|
|
583
|
+
legacyContextParts.push(`<shared-memory>\n${sharedMemory}\n</shared-memory>`);
|
|
584
|
+
if (contextTrust === "enforce") {
|
|
585
|
+
promptContextSegments.push(createRuntimePromptContextSegment({
|
|
586
|
+
kind: "memory.shared",
|
|
587
|
+
sourceId: "project",
|
|
588
|
+
trust: "untrusted",
|
|
589
|
+
content: sharedMemory,
|
|
590
|
+
}));
|
|
591
|
+
}
|
|
542
592
|
}
|
|
543
593
|
// 1b. Agent-specific memory (private knowledge for the assigned agent)
|
|
544
594
|
if (task.assignTo) {
|
|
545
595
|
const agentMem = (await this.ctx.memoryStore?.get(agentMemoryScope(task.assignTo))) ?? "";
|
|
546
596
|
if (agentMem) {
|
|
547
|
-
|
|
597
|
+
legacyContextParts.push(`<agent-memory agent="${task.assignTo}">\n${agentMem}\n</agent-memory>`);
|
|
598
|
+
if (contextTrust === "enforce") {
|
|
599
|
+
promptContextSegments.push(createRuntimePromptContextSegment({
|
|
600
|
+
kind: "memory.agent",
|
|
601
|
+
sourceId: task.assignTo,
|
|
602
|
+
trust: "untrusted",
|
|
603
|
+
content: agentMem,
|
|
604
|
+
}));
|
|
605
|
+
}
|
|
548
606
|
}
|
|
549
607
|
}
|
|
550
608
|
// 2. Mission context — if this task belongs to a mission, include the mission goal and sibling tasks
|
|
@@ -552,16 +610,24 @@ export class TaskRunner {
|
|
|
552
610
|
try {
|
|
553
611
|
// Resolve mission via direct ID (preferred) or group name (legacy fallback)
|
|
554
612
|
const mission = await resolveMissionForTask(resolveMissionStore(this.ctx), task);
|
|
555
|
-
const
|
|
613
|
+
const legacyMissionParts = [];
|
|
556
614
|
// Original user prompt that generated this mission (the "why")
|
|
557
615
|
if (mission?.prompt) {
|
|
558
|
-
|
|
616
|
+
legacyMissionParts.push(`Mission goal: ${mission.prompt}`);
|
|
617
|
+
if (contextTrust === "enforce") {
|
|
618
|
+
promptContextSegments.push(createRuntimePromptContextSegment({
|
|
619
|
+
kind: "mission.goal",
|
|
620
|
+
sourceId: mission.id,
|
|
621
|
+
trust: "user",
|
|
622
|
+
content: mission.prompt,
|
|
623
|
+
}));
|
|
624
|
+
}
|
|
559
625
|
}
|
|
560
626
|
// Sibling tasks — just titles and statuses for awareness, not full descriptions
|
|
561
627
|
const allTasks = await this.ctx.taskStore.listTasks();
|
|
562
628
|
const siblings = allTasks.filter(t => t.group === task.group && t.id !== task.id);
|
|
563
629
|
if (siblings.length > 0) {
|
|
564
|
-
missionParts
|
|
630
|
+
const missionParts = [`Other tasks in this mission:`];
|
|
565
631
|
for (const s of siblings) {
|
|
566
632
|
const marker = s.status === "done" ? "[done]"
|
|
567
633
|
: s.status === "in_progress" ? "[in progress]"
|
|
@@ -569,16 +635,28 @@ export class TaskRunner {
|
|
|
569
635
|
: "[pending]";
|
|
570
636
|
missionParts.push(` ${marker} "${s.title}" → ${s.assignTo}`);
|
|
571
637
|
}
|
|
638
|
+
legacyMissionParts.push(...missionParts);
|
|
639
|
+
if (contextTrust === "enforce") {
|
|
640
|
+
promptContextSegments.push(createRuntimePromptContextSegment({
|
|
641
|
+
kind: "mission.status",
|
|
642
|
+
sourceId: mission?.id ?? task.group,
|
|
643
|
+
trust: "untrusted",
|
|
644
|
+
content: missionParts.join("\n"),
|
|
645
|
+
}));
|
|
646
|
+
}
|
|
572
647
|
}
|
|
573
|
-
if (
|
|
574
|
-
|
|
648
|
+
if (legacyMissionParts.length > 0) {
|
|
649
|
+
legacyContextParts.push(`<mission-context>\n${legacyMissionParts.join("\n")}\n</mission-context>`);
|
|
575
650
|
}
|
|
576
651
|
}
|
|
577
652
|
catch { /* best effort — mission may have been deleted */ }
|
|
578
653
|
}
|
|
579
|
-
|
|
580
|
-
taskWithContext
|
|
581
|
-
|
|
654
|
+
const taskForRun = contextTrust === "enforce" || legacyContextParts.length === 0
|
|
655
|
+
? taskWithContext
|
|
656
|
+
: {
|
|
657
|
+
...taskWithContext,
|
|
658
|
+
description: `${legacyContextParts.join("\n\n")}\n\n${task.description}`,
|
|
659
|
+
};
|
|
582
660
|
// Durable turns: consume (one-shot) a checkpoint harvested by orphan
|
|
583
661
|
// recovery — the runner resumes the conversation at turn + 1 instead
|
|
584
662
|
// of redoing completed work. Absent checkpoint = spawn from zero.
|
|
@@ -601,10 +679,14 @@ export class TaskRunner {
|
|
|
601
679
|
taskId: task.id,
|
|
602
680
|
executionMode,
|
|
603
681
|
sandbox,
|
|
682
|
+
...(contextTrust === "enforce"
|
|
683
|
+
? { contextTrust, promptContextSegments }
|
|
684
|
+
: {}),
|
|
685
|
+
guardrails: this.ctx.config.settings.guardrails,
|
|
604
686
|
runtimeContext,
|
|
605
687
|
executionRoute,
|
|
606
688
|
agent,
|
|
607
|
-
task:
|
|
689
|
+
task: taskForRun,
|
|
608
690
|
polpoDir: this.ctx.polpoDir,
|
|
609
691
|
cwd: this.ctx.agentWorkDir,
|
|
610
692
|
outputDir,
|