agentfootprint 9.136.0 → 9.137.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/CAPABILITIES.md +3 -0
- package/dist/bridge/eventMeta.js +5 -1
- package/dist/bridge/eventMeta.js.map +1 -1
- package/dist/bridge/eventSourcePosition.js +63 -0
- package/dist/bridge/eventSourcePosition.js.map +1 -0
- package/dist/core/Agent.js +53 -7
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +11 -2
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/act.js +3 -19
- package/dist/core/agent/act.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/middleware/ledger.js +1 -1
- package/dist/core/agent/middleware/messagePhase.js +24 -0
- package/dist/core/agent/middleware/messagePhase.js.map +1 -0
- package/dist/core/agent/stages/callLLM.js +7 -2
- package/dist/core/agent/stages/callLLM.js.map +1 -1
- package/dist/core/agent/stages/outputAdmission.js +14 -0
- package/dist/core/agent/stages/outputAdmission.js.map +1 -0
- package/dist/core/agent/stages/prepareFinal.js +43 -21
- package/dist/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/core/agent/stages/reliabilityExecution.js +28 -7
- package/dist/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/core/agent/stages/seed.js +8 -10
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +63 -42
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/agent/toolArgsValidation.js +35 -11
- package/dist/core/agent/toolArgsValidation.js.map +1 -1
- package/dist/core/agent/toolDispatch.js +8 -2
- package/dist/core/agent/toolDispatch.js.map +1 -1
- package/dist/core/agent/toolSecurityEvents.js +23 -0
- package/dist/core/agent/toolSecurityEvents.js.map +1 -0
- package/dist/core/codeRunnerTool.js +1 -0
- package/dist/core/codeRunnerTool.js.map +1 -1
- package/dist/core/conversation.js +21 -6
- package/dist/core/conversation.js.map +1 -1
- package/dist/esm/bridge/eventMeta.d.ts +5 -1
- package/dist/esm/bridge/eventMeta.js +5 -1
- package/dist/esm/bridge/eventMeta.js.map +1 -1
- package/dist/esm/bridge/eventSourcePosition.d.ts +10 -0
- package/dist/esm/bridge/eventSourcePosition.js +59 -0
- package/dist/esm/bridge/eventSourcePosition.js.map +1 -0
- package/dist/esm/core/Agent.d.ts +15 -3
- package/dist/esm/core/Agent.js +53 -7
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +11 -2
- package/dist/esm/core/agent/AgentBuilder.js +11 -2
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/act.d.ts +5 -2
- package/dist/esm/core/agent/act.js +3 -19
- package/dist/esm/core/agent/act.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.d.ts +2 -0
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/middleware/ledger.d.ts +1 -1
- package/dist/esm/core/agent/middleware/ledger.js +1 -1
- package/dist/esm/core/agent/middleware/messagePhase.d.ts +5 -0
- package/dist/esm/core/agent/middleware/messagePhase.js +19 -0
- package/dist/esm/core/agent/middleware/messagePhase.js.map +1 -0
- package/dist/esm/core/agent/stages/callLLM.d.ts +3 -1
- package/dist/esm/core/agent/stages/callLLM.js +7 -2
- package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
- package/dist/esm/core/agent/stages/outputAdmission.d.ts +6 -0
- package/dist/esm/core/agent/stages/outputAdmission.js +10 -0
- package/dist/esm/core/agent/stages/outputAdmission.js.map +1 -0
- package/dist/esm/core/agent/stages/prepareFinal.d.ts +5 -44
- package/dist/esm/core/agent/stages/prepareFinal.js +42 -20
- package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/esm/core/agent/stages/reliabilityExecution.d.ts +8 -1
- package/dist/esm/core/agent/stages/reliabilityExecution.js +28 -7
- package/dist/esm/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/esm/core/agent/stages/seed.js +8 -10
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.js +63 -42
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/toolArgsValidation.d.ts +9 -5
- package/dist/esm/core/agent/toolArgsValidation.js +35 -11
- package/dist/esm/core/agent/toolArgsValidation.js.map +1 -1
- package/dist/esm/core/agent/toolDispatch.d.ts +3 -2
- package/dist/esm/core/agent/toolDispatch.js +8 -2
- package/dist/esm/core/agent/toolDispatch.js.map +1 -1
- package/dist/esm/core/agent/toolSecurityEvents.d.ts +18 -0
- package/dist/esm/core/agent/toolSecurityEvents.js +19 -0
- package/dist/esm/core/agent/toolSecurityEvents.js.map +1 -0
- package/dist/esm/core/codeRunnerTool.js +1 -0
- package/dist/esm/core/codeRunnerTool.js.map +1 -1
- package/dist/esm/core/conversation.d.ts +16 -1
- package/dist/esm/core/conversation.js +20 -5
- package/dist/esm/core/conversation.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +22 -11
- package/dist/esm/events/types.d.ts +32 -2
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillToolDescriptors.js +1 -0
- package/dist/esm/lib/injection-engine/skillToolDescriptors.js.map +1 -1
- package/dist/esm/lib/mcp/mcpServe.js +11 -4
- package/dist/esm/lib/mcp/mcpServe.js.map +1 -1
- package/dist/esm/lib/trace-toolpack/debugPrompt.d.ts +1 -1
- package/dist/esm/lib/trace-toolpack/debugPrompt.js +1 -0
- package/dist/esm/lib/trace-toolpack/debugPrompt.js.map +1 -1
- package/dist/esm/lib/trace-toolpack/innerDescent.d.ts +58 -0
- package/dist/esm/lib/trace-toolpack/innerDescent.js +68 -0
- package/dist/esm/lib/trace-toolpack/innerDescent.js.map +1 -0
- package/dist/esm/lib/trace-toolpack/subflowRecords.d.ts +55 -0
- package/dist/esm/lib/trace-toolpack/subflowRecords.js +124 -0
- package/dist/esm/lib/trace-toolpack/subflowRecords.js.map +1 -0
- package/dist/esm/lib/trace-toolpack/traceToolNames.d.ts +1 -1
- package/dist/esm/lib/trace-toolpack/traceToolNames.js +1 -0
- package/dist/esm/lib/trace-toolpack/traceToolNames.js.map +1 -1
- package/dist/esm/lib/trace-toolpack/traceToolpack.d.ts +1 -0
- package/dist/esm/lib/trace-toolpack/traceToolpack.js +282 -56
- package/dist/esm/lib/trace-toolpack/traceToolpack.js.map +1 -1
- package/dist/esm/lib/trust-boundaries/capture.d.ts +6 -0
- package/dist/esm/lib/trust-boundaries/capture.js +161 -0
- package/dist/esm/lib/trust-boundaries/capture.js.map +1 -0
- package/dist/esm/lib/trust-boundaries/index.d.ts +2 -0
- package/dist/esm/lib/trust-boundaries/index.js +2 -0
- package/dist/esm/lib/trust-boundaries/index.js.map +1 -0
- package/dist/esm/lib/trust-boundaries/project.d.ts +13 -0
- package/dist/esm/lib/trust-boundaries/project.js +170 -0
- package/dist/esm/lib/trust-boundaries/project.js.map +1 -0
- package/dist/esm/lib/trust-boundaries/types.d.ts +81 -0
- package/dist/esm/lib/trust-boundaries/types.js +2 -0
- package/dist/esm/lib/trust-boundaries/types.js.map +1 -0
- package/dist/esm/observe.d.ts +1 -0
- package/dist/esm/observe.js +3 -0
- package/dist/esm/observe.js.map +1 -1
- package/dist/esm/recorders/core/EmitBridge.js +7 -1
- package/dist/esm/recorders/core/EmitBridge.js.map +1 -1
- package/dist/esm/recorders/observability/recordRun.d.ts +29 -4
- package/dist/esm/recorders/observability/recordRun.js +144 -70
- package/dist/esm/recorders/observability/recordRun.js.map +1 -1
- package/dist/esm/recorders/observability/recordingEnvelope.js +5 -3
- package/dist/esm/recorders/observability/recordingEnvelope.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/injection-engine/skillToolDescriptors.js +1 -0
- package/dist/lib/injection-engine/skillToolDescriptors.js.map +1 -1
- package/dist/lib/mcp/mcpServe.js +11 -4
- package/dist/lib/mcp/mcpServe.js.map +1 -1
- package/dist/lib/trace-toolpack/debugPrompt.js +1 -0
- package/dist/lib/trace-toolpack/debugPrompt.js.map +1 -1
- package/dist/lib/trace-toolpack/innerDescent.js +74 -0
- package/dist/lib/trace-toolpack/innerDescent.js.map +1 -0
- package/dist/lib/trace-toolpack/subflowRecords.js +134 -0
- package/dist/lib/trace-toolpack/subflowRecords.js.map +1 -0
- package/dist/lib/trace-toolpack/traceToolNames.js +1 -0
- package/dist/lib/trace-toolpack/traceToolNames.js.map +1 -1
- package/dist/lib/trace-toolpack/traceToolpack.js +282 -56
- package/dist/lib/trace-toolpack/traceToolpack.js.map +1 -1
- package/dist/lib/trust-boundaries/capture.js +165 -0
- package/dist/lib/trust-boundaries/capture.js.map +1 -0
- package/dist/lib/trust-boundaries/index.js +6 -0
- package/dist/lib/trust-boundaries/index.js.map +1 -0
- package/dist/lib/trust-boundaries/project.js +174 -0
- package/dist/lib/trust-boundaries/project.js.map +1 -0
- package/dist/lib/trust-boundaries/types.js +3 -0
- package/dist/lib/trust-boundaries/types.js.map +1 -0
- package/dist/observe.js +17 -13
- package/dist/observe.js.map +1 -1
- package/dist/recorders/core/EmitBridge.js +7 -1
- package/dist/recorders/core/EmitBridge.js.map +1 -1
- package/dist/recorders/observability/recordRun.js +144 -70
- package/dist/recorders/observability/recordRun.js.map +1 -1
- package/dist/recorders/observability/recordingEnvelope.js +5 -3
- package/dist/recorders/observability/recordingEnvelope.js.map +1 -1
- package/dist/types/bridge/eventMeta.d.ts +5 -1
- package/dist/types/bridge/eventMeta.d.ts.map +1 -1
- package/dist/types/bridge/eventSourcePosition.d.ts +11 -0
- package/dist/types/bridge/eventSourcePosition.d.ts.map +1 -0
- package/dist/types/core/Agent.d.ts +15 -3
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts +11 -2
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/act.d.ts +5 -2
- package/dist/types/core/agent/act.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts +2 -0
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/middleware/ledger.d.ts +1 -1
- package/dist/types/core/agent/middleware/messagePhase.d.ts +6 -0
- package/dist/types/core/agent/middleware/messagePhase.d.ts.map +1 -0
- package/dist/types/core/agent/stages/callLLM.d.ts +3 -1
- package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
- package/dist/types/core/agent/stages/outputAdmission.d.ts +7 -0
- package/dist/types/core/agent/stages/outputAdmission.d.ts.map +1 -0
- package/dist/types/core/agent/stages/prepareFinal.d.ts +5 -44
- package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts +8 -1
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts.map +1 -1
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/toolArgsValidation.d.ts +9 -5
- package/dist/types/core/agent/toolArgsValidation.d.ts.map +1 -1
- package/dist/types/core/agent/toolDispatch.d.ts +3 -2
- package/dist/types/core/agent/toolDispatch.d.ts.map +1 -1
- package/dist/types/core/agent/toolSecurityEvents.d.ts +19 -0
- package/dist/types/core/agent/toolSecurityEvents.d.ts.map +1 -0
- package/dist/types/core/codeRunnerTool.d.ts.map +1 -1
- package/dist/types/core/conversation.d.ts +16 -1
- package/dist/types/core/conversation.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +22 -11
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/types.d.ts +32 -2
- package/dist/types/events/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillToolDescriptors.d.ts.map +1 -1
- package/dist/types/lib/mcp/mcpServe.d.ts.map +1 -1
- package/dist/types/lib/trace-toolpack/debugPrompt.d.ts +1 -1
- package/dist/types/lib/trace-toolpack/debugPrompt.d.ts.map +1 -1
- package/dist/types/lib/trace-toolpack/innerDescent.d.ts +59 -0
- package/dist/types/lib/trace-toolpack/innerDescent.d.ts.map +1 -0
- package/dist/types/lib/trace-toolpack/subflowRecords.d.ts +56 -0
- package/dist/types/lib/trace-toolpack/subflowRecords.d.ts.map +1 -0
- package/dist/types/lib/trace-toolpack/traceToolNames.d.ts +1 -1
- package/dist/types/lib/trace-toolpack/traceToolNames.d.ts.map +1 -1
- package/dist/types/lib/trace-toolpack/traceToolpack.d.ts +1 -0
- package/dist/types/lib/trace-toolpack/traceToolpack.d.ts.map +1 -1
- package/dist/types/lib/trust-boundaries/capture.d.ts +7 -0
- package/dist/types/lib/trust-boundaries/capture.d.ts.map +1 -0
- package/dist/types/lib/trust-boundaries/index.d.ts +3 -0
- package/dist/types/lib/trust-boundaries/index.d.ts.map +1 -0
- package/dist/types/lib/trust-boundaries/project.d.ts +14 -0
- package/dist/types/lib/trust-boundaries/project.d.ts.map +1 -0
- package/dist/types/lib/trust-boundaries/types.d.ts +82 -0
- package/dist/types/lib/trust-boundaries/types.d.ts.map +1 -0
- package/dist/types/observe.d.ts +1 -0
- package/dist/types/observe.d.ts.map +1 -1
- package/dist/types/recorders/core/EmitBridge.d.ts.map +1 -1
- package/dist/types/recorders/observability/recordRun.d.ts +29 -4
- package/dist/types/recorders/observability/recordRun.d.ts.map +1 -1
- package/dist/types/recorders/observability/recordingEnvelope.d.ts.map +1 -1
- package/package.json +1 -1
package/CAPABILITIES.md
CHANGED
|
@@ -20,6 +20,9 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
|
|
|
20
20
|
|
|
21
21
|
| If you are about to build… | It is | Where | Since |
|
|
22
22
|
|---|---|---|---|
|
|
23
|
+
| observing selected middleware, permission and credential facts at runtime with bounded content-minimized metadata, explicit loss counters and optional source positions; never inferring approval, redaction or complete coverage from silence | `trustBoundaryRecorder` + `TrustBoundaryRecorder` | `src/lib/trust-boundaries/` | 9.137.0 |
|
|
24
|
+
| keeping a queued event's emission time and supplied engine log coordinates, without guessing a root index or confusing agent and engine run identities; absent when the engine supplies no usable position | `EventSourcePosition` + `projectEventSourcePosition` | `src/bridge/eventSourcePosition.ts` | 9.137.0 |
|
|
25
|
+
| identifying which same-name tool call a permission check or credential event describes — captured at dispatch, including resume and inner pull failures; qualify with run identity, missing fields stay unknown | `ToolCallEventIdentity` + `bindToolSecurityEvents` | `src/core/agent/toolSecurityEvents.ts` | 9.137.0 |
|
|
23
26
|
| guiding an evidence repair to ask for missing context without inventing values | `recoveryInstruction` + `EvidenceRecoveryContext` | `src/core/agent/evidence/` | 9.96.0 |
|
|
24
27
|
| checking a typed final answer against scoped evidence before streaming or memory delivery — optional host-authored checks with enforce/observe modes, canonical JSON and bounded read-only artifacts | `answerValidation` + `AnswerValidationError` | `src/answer-validation/` | 9.95.0 |
|
|
25
28
|
| turning a written operational procedure (a runbook, a triage playbook) into ONE agent tool whose every answer is EVIDENCE — coverage folded up from the inner tools it calls, rule name+version, verdict rows with GENERATED meanings, and the recorded walk as an artifact ticket, never bytes | `runbookAsTool` — dials: `procedure` (factory, invoked per call with `ctx.tools`) + `resultKind` (`'verdict/*'` arms the rowset projection; anything else ships spine + the chart's `report`) + `rules {name, version}` (default absent ⇒ `rule_version: 'undeclared'`) + `verdicts {decider, maxRows}` (default 50; `verdict_meanings` = statically declared branches + this run's rule labels + the DEFAULT branch's label, which reaches evidence only when the chart calls `decide(s, rules, {branch, label})` — fp ≥9.16.1, the default is chosen by NO rule so nothing else can name it, and inside a generated fan-out branch the static walk is blind too; an undeclared or blank label stays ABSENT from the map, never invented from a branch id, and there is deliberately NO caller-supplied meanings map) + `presentation` (`'prose'` default = ship `table` + `VERDICT_RENDER_NOTE` "output it VERBATIM"; `'panel'` = the HOST renders the rowset, so NO `table` key at all + `PANEL_RENDER_NOTE` "the rows are already on the reader's screen — do not reproduce them"; the rowset half is byte-identical across modes, `table` stays RESERVED in both, an unknown value THROWS at definition) + `walk {cap, recording}` (cap default 500; over-cap ⇒ control-flow projection, declared · `recording: true` or `{label, maxBytes}`, default OFF — ALSO files the inner chart's own `{snapshot, events, structure}` under `recording/run` and puts its ref on the spine as `walk.recording_ref`, because the ROW projection cannot be drawn; snapshot read from the REDACTED mirror so one `redact` means the same for both; over `maxBytes` (`DEFAULT_RECORDING_MAX_BYTES` = 5,000,000) it is REFUSED not truncated; every absence — no store / over size / unserializable / store threw — is STATED in `walk.recording_note`, and the four `recording_*` fields are absent entirely when the dial is off) + `composedOf` (drift-checked at agent BUILD) + kept `recorders`/`keepRecord`/`keepRecordLimit`/`redact`; reserved state keys `verdicts`/`coverage`/`report` (the `report` bag lands BESIDE the spine, never over it — a report field spelling `af_coverage`/`af_provenance`/`rule_version`/`walk`/`report_note` or a live projection key is discarded and NAMED in `result.report_note`; precedence is explicit in `report.ts`, never spread order); inner `absent()` passes through VERBATIM unless the call said `allowAbsent`; walk kind `recording/chart-walk` + `walk_segment` discriminant | `src/core/runbook/` | 9.76.0, recording 9.79.0 |
|
package/dist/bridge/eventMeta.js
CHANGED
|
@@ -19,7 +19,8 @@ const trace_1 = require("footprintjs/trace");
|
|
|
19
19
|
* gracefully to 'unknown#0'.
|
|
20
20
|
*/
|
|
21
21
|
function buildEventMeta(origin, run) {
|
|
22
|
-
const
|
|
22
|
+
const stageOrigin = origin;
|
|
23
|
+
const now = stageOrigin?.timestamp ?? Date.now();
|
|
23
24
|
const runtimeStageId = origin?.runtimeStageId ?? 'unknown#0';
|
|
24
25
|
// Normalize subflowPath across the 3 shapes footprintjs uses:
|
|
25
26
|
// - undefined (RecorderContext: derive from runtimeStageId)
|
|
@@ -34,6 +35,9 @@ function buildEventMeta(origin, run) {
|
|
|
34
35
|
return {
|
|
35
36
|
wallClockMs: now,
|
|
36
37
|
runOffsetMs: now - run.runStartMs,
|
|
38
|
+
...(stageOrigin?.sourcePosition !== undefined && {
|
|
39
|
+
sourcePosition: stageOrigin.sourcePosition,
|
|
40
|
+
}),
|
|
37
41
|
runtimeStageId,
|
|
38
42
|
subflowPath,
|
|
39
43
|
compositionPath: run.compositionPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventMeta.js","sourceRoot":"","sources":["../../src/bridge/eventMeta.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAGH,6CAAwD;
|
|
1
|
+
{"version":3,"file":"eventMeta.js","sourceRoot":"","sources":["../../src/bridge/eventMeta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectEventSourcePosition = void 0;
|
|
4
|
+
/** Read only an own data property; metadata accessors are not evidence. */
|
|
5
|
+
function ownData(value, key) {
|
|
6
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
7
|
+
return descriptor && 'value' in descriptor ? descriptor.value : undefined;
|
|
8
|
+
}
|
|
9
|
+
function isRecord(value) {
|
|
10
|
+
return typeof value === 'object' && value !== null;
|
|
11
|
+
}
|
|
12
|
+
function isId(value) {
|
|
13
|
+
return typeof value === 'string' && value.length > 0;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Project the optional engine carrier into our public event wire vocabulary.
|
|
17
|
+
* Older or unaddressable emitters supply no coordinates. Invalid metadata is
|
|
18
|
+
* likewise unplaced, never repaired using the current executor or stage name.
|
|
19
|
+
* Only the named data fields cross this boundary, detached from their source.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
function projectEventSourcePosition(event) {
|
|
24
|
+
try {
|
|
25
|
+
const position = ownData(event, 'sourcePosition');
|
|
26
|
+
if (!isRecord(position))
|
|
27
|
+
return undefined;
|
|
28
|
+
const engineRunId = ownData(position, 'runId');
|
|
29
|
+
const logRunId = ownData(position, 'logRunId');
|
|
30
|
+
const path = ownData(position, 'drillPath');
|
|
31
|
+
const committedThroughIdx = ownData(position, 'committedThroughIdx');
|
|
32
|
+
if (!isId(engineRunId) ||
|
|
33
|
+
!isId(logRunId) ||
|
|
34
|
+
!Array.isArray(path) ||
|
|
35
|
+
typeof committedThroughIdx !== 'number' ||
|
|
36
|
+
!Number.isSafeInteger(committedThroughIdx) ||
|
|
37
|
+
committedThroughIdx < -1) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const length = ownData(path, 'length');
|
|
41
|
+
if (typeof length !== 'number' || !Number.isSafeInteger(length) || length < 0)
|
|
42
|
+
return undefined;
|
|
43
|
+
const drillPath = [];
|
|
44
|
+
for (let i = 0; i < length; i++) {
|
|
45
|
+
const mountId = ownData(path, String(i));
|
|
46
|
+
if (!isId(mountId))
|
|
47
|
+
return undefined;
|
|
48
|
+
drillPath.push(mountId);
|
|
49
|
+
}
|
|
50
|
+
return Object.freeze({
|
|
51
|
+
engineRunId,
|
|
52
|
+
logRunId,
|
|
53
|
+
drillPath: Object.freeze(drillPath),
|
|
54
|
+
committedThroughIdx,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// A hostile/revoked metadata proxy cannot turn an observation into a run failure.
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.projectEventSourcePosition = projectEventSourcePosition;
|
|
63
|
+
//# sourceMappingURL=eventSourcePosition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventSourcePosition.js","sourceRoot":"","sources":["../../src/bridge/eventSourcePosition.ts"],"names":[],"mappings":";;;AAEA,2EAA2E;AAC3E,SAAS,OAAO,CAAC,KAAa,EAAE,GAAgB;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/D,OAAO,UAAU,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,0BAA0B,CAAC,KAAa;IACtD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC5C,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACrE,IACE,CAAC,IAAI,CAAC,WAAW,CAAC;YAClB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACpB,OAAO,mBAAmB,KAAK,QAAQ;YACvC,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC;YAC1C,mBAAmB,GAAG,CAAC,CAAC,EACxB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAChG,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,SAAS,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,WAAW;YACX,QAAQ;YACR,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACnC,mBAAmB;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;QAClF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AApCD,gEAoCC"}
|
package/dist/core/Agent.js
CHANGED
|
@@ -160,6 +160,7 @@ const RunnerBase_js_1 = require("./RunnerBase.js");
|
|
|
160
160
|
const validators_js_1 = require("./agent/validators.js");
|
|
161
161
|
const route_js_1 = require("./agent/stages/route.js");
|
|
162
162
|
const answerValidation_js_1 = require("./agent/stages/answerValidation.js");
|
|
163
|
+
const messagePhase_js_1 = require("./agent/middleware/messagePhase.js");
|
|
163
164
|
const answerCoverage_js_1 = require("./agent/stages/answerCoverage.js");
|
|
164
165
|
const index_js_1 = require("../answer-validation/index.js");
|
|
165
166
|
const seed_js_1 = require("./agent/stages/seed.js");
|
|
@@ -609,6 +610,10 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
609
610
|
* kept here rather than read back from the recording. Undefined after a run
|
|
610
611
|
* that failed or paused. */
|
|
611
612
|
lastRunAnswer;
|
|
613
|
+
/** Whether any run on this instance got past input admission — so a
|
|
614
|
+
* refused FIRST turn is reported as 'never-run', never as "continue from
|
|
615
|
+
* your earlier accepted checkpoint" when there is none. */
|
|
616
|
+
hadAdmittedRun = false;
|
|
612
617
|
/** The id the CONSUMER chose, or undefined when they took the default.
|
|
613
618
|
* `this.id` cannot answer that question — it is `'agent'` either way — and
|
|
614
619
|
* the stored-conversation fingerprint refuses only on ids somebody picked
|
|
@@ -1709,6 +1714,7 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
1709
1714
|
this.fileIntegrityDisposition();
|
|
1710
1715
|
// Always released: a recording left subscribed would keep listening
|
|
1711
1716
|
// through the next run and grow a tail nobody reads.
|
|
1717
|
+
this.noteAdmittedRun();
|
|
1712
1718
|
recording?.stop();
|
|
1713
1719
|
stopTracking();
|
|
1714
1720
|
this.inFlightRunId = undefined;
|
|
@@ -1759,12 +1765,12 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
1759
1765
|
// Refuse BEFORE the timing guards, so "there is nothing to follow up on"
|
|
1760
1766
|
// is never reported as "a run is in flight" for an agent that has simply
|
|
1761
1767
|
// not run yet.
|
|
1762
|
-
if (this.getLastSnapshot() === undefined) {
|
|
1768
|
+
if (this.getLastSnapshot() === undefined || (this.lastInputRefused() && !this.hadAdmittedRun)) {
|
|
1763
1769
|
throw new conversation_js_1.NoConversationError('Agent.followUp', 'never-run');
|
|
1764
1770
|
}
|
|
1765
1771
|
const conversation = this.checkpoint();
|
|
1766
1772
|
if (conversation === undefined || conversation.history.length === 0) {
|
|
1767
|
-
throw new conversation_js_1.NoConversationError('Agent.followUp', 'last-run-unfinished');
|
|
1773
|
+
throw new conversation_js_1.NoConversationError('Agent.followUp', this.lastInputRefused() ? 'last-input-refused' : 'last-run-unfinished');
|
|
1768
1774
|
}
|
|
1769
1775
|
return this.run({ message, continueFrom: conversation }, options);
|
|
1770
1776
|
}
|
|
@@ -2179,6 +2185,7 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
2179
2185
|
// Same terms as the fresh-run path: rows on every exit, before the
|
|
2180
2186
|
// recording stops (9.60.0).
|
|
2181
2187
|
this.fileIntegrityDisposition();
|
|
2188
|
+
this.noteAdmittedRun();
|
|
2182
2189
|
recording?.stop();
|
|
2183
2190
|
this.inFlightRunId = undefined;
|
|
2184
2191
|
}
|
|
@@ -2223,7 +2230,10 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
2223
2230
|
* hand it back next turn, and the agent continues where it left off — across
|
|
2224
2231
|
* a restart, a deploy, or a different machine.
|
|
2225
2232
|
*
|
|
2226
|
-
* Returns `undefined` before any run has completed
|
|
2233
|
+
* Returns `undefined` before any run has completed or when the latest run
|
|
2234
|
+
* was refused by input middleware. A refused input is not an admitted
|
|
2235
|
+
* conversation. Keep an earlier accepted checkpoint to continue explicitly;
|
|
2236
|
+
* `followUp()` after input denial raises `NoConversationError`.
|
|
2227
2237
|
*
|
|
2228
2238
|
* **Read from the run's own recording, not from a second copy.** The history
|
|
2229
2239
|
* comes from `getLastSnapshot().sharedState.history` — the state the run
|
|
@@ -2253,8 +2263,9 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
2253
2263
|
* const conversation = agent.checkpoint(); // persist anywhere
|
|
2254
2264
|
* // …a restart later, on a fresh Agent:
|
|
2255
2265
|
* await agent.run({ message: 'Make it three.', continueFrom: conversation });
|
|
2256
|
-
* // `continueFrom`
|
|
2257
|
-
* //
|
|
2266
|
+
* // `continueFrom` admits the new turn through the 'input' middleware chain.
|
|
2267
|
+
* // `resumeOnError` rechecks originalInput but replays stored history as-is;
|
|
2268
|
+
* // it does not rewrite entries manually appended to that history.
|
|
2258
2269
|
* ```
|
|
2259
2270
|
*/
|
|
2260
2271
|
checkpoint() {
|
|
@@ -2262,6 +2273,10 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
2262
2273
|
if (!snapshot)
|
|
2263
2274
|
return undefined;
|
|
2264
2275
|
const state = snapshot.sharedState;
|
|
2276
|
+
// Admission is decided by seed, before any conversation state is written.
|
|
2277
|
+
// Do not manufacture a blank replay carrier for an unadmitted attempt.
|
|
2278
|
+
if (this.lastInputRefused())
|
|
2279
|
+
return undefined;
|
|
2265
2280
|
const recorded = (state?.history ?? []);
|
|
2266
2281
|
const history = structuredClone(recorded);
|
|
2267
2282
|
if (this.lastRunAnswer !== undefined && this.lastRunAnswer.length > 0) {
|
|
@@ -2300,6 +2315,17 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
2300
2315
|
...(turnNumber !== undefined && { turnNumber }),
|
|
2301
2316
|
};
|
|
2302
2317
|
}
|
|
2318
|
+
/** Called as each run/resume ends: remember a run that got past input admission. */
|
|
2319
|
+
noteAdmittedRun() {
|
|
2320
|
+
if (this.getLastSnapshot() !== undefined && !this.lastInputRefused()) {
|
|
2321
|
+
this.hadAdmittedRun = true;
|
|
2322
|
+
}
|
|
2323
|
+
}
|
|
2324
|
+
/** Whether input middleware refused the last run's message — the one reading both doors ask. */
|
|
2325
|
+
lastInputRefused() {
|
|
2326
|
+
const state = this.getLastSnapshot()?.sharedState;
|
|
2327
|
+
return state?.messageDeniedPhase === 'input';
|
|
2328
|
+
}
|
|
2303
2329
|
/** Both checkpoint doors keep the repair budget separately from conversation text. */
|
|
2304
2330
|
evidenceRecoveryOf(state) {
|
|
2305
2331
|
if (state?.evidenceRevisionSpent !== true)
|
|
@@ -3641,7 +3667,7 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
3641
3667
|
}
|
|
3642
3668
|
}
|
|
3643
3669
|
// Message-boundary refusal (7.18+) — a `messageMiddleware` returned
|
|
3644
|
-
// `deny`. The stage wrote the flags and
|
|
3670
|
+
// `deny`. The stage wrote the flags and stopped delivery. We
|
|
3645
3671
|
// surface the typed error here, the same way a policy halt is surfaced,
|
|
3646
3672
|
// because a refusal must never be mistaken for an answer: at 'input' no
|
|
3647
3673
|
// model was ever asked, and at 'output' the middleware has just declined
|
|
@@ -3649,6 +3675,21 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
3649
3675
|
if (this.messageMiddleware.length > 0) {
|
|
3650
3676
|
const state = executor.getSnapshot().sharedState;
|
|
3651
3677
|
if (state.messageDeniedReason !== undefined) {
|
|
3678
|
+
if (state.messageDeniedPhase === 'output') {
|
|
3679
|
+
// The chart stopped cleanly, so ErrorBridge's onRunFailed cannot
|
|
3680
|
+
// close public streams. This API boundary owns the refusal on both
|
|
3681
|
+
// run and resume. Name it as a virtual stage, not a fabricated
|
|
3682
|
+
// engine failure, and never echo policy text into a public stream.
|
|
3683
|
+
this.dispatcher.dispatch({
|
|
3684
|
+
type: 'agentfootprint.error.fatal',
|
|
3685
|
+
payload: {
|
|
3686
|
+
error: 'The output policy withheld this answer.',
|
|
3687
|
+
stage: '__output_admission__',
|
|
3688
|
+
scope: 'run',
|
|
3689
|
+
},
|
|
3690
|
+
meta: (0, eventMeta_js_1.buildEventMeta)({ runtimeStageId: '__output_admission__' }, this.currentRunContext),
|
|
3691
|
+
});
|
|
3692
|
+
}
|
|
3652
3693
|
throw new errors_js_3.MessageDeniedError({
|
|
3653
3694
|
reason: state.messageDeniedReason,
|
|
3654
3695
|
phase: state.messageDeniedPhase ?? 'output',
|
|
@@ -3729,6 +3770,7 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
3729
3770
|
}
|
|
3730
3771
|
// ─── Chart assembly ────────────────────────────────────────────
|
|
3731
3772
|
buildChart() {
|
|
3773
|
+
const governsOutput = (0, messagePhase_js_1.hasOutputMiddleware)(this.messageMiddleware);
|
|
3732
3774
|
const provider = this.provider;
|
|
3733
3775
|
const model = this.model;
|
|
3734
3776
|
const temperature = this.temperature;
|
|
@@ -4358,7 +4400,10 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
4358
4400
|
// seam peels `_findings` where the served schema carries it (ruled
|
|
4359
4401
|
// tools only) — value-conditional, the same grammar.
|
|
4360
4402
|
...(argumentSources && { argumentSources: true }),
|
|
4361
|
-
...(this.answerValidationConfig !== undefined && {
|
|
4403
|
+
...((this.answerValidationConfig !== undefined || governsOutput) && {
|
|
4404
|
+
suppressDraftTokens: true,
|
|
4405
|
+
}),
|
|
4406
|
+
...(governsOutput && { withholdDraftContent: true }),
|
|
4362
4407
|
// Tool choice by classifier (9.105.0): the outcome row after the reply.
|
|
4363
4408
|
...(this.toolChoiceOptions !== undefined && { toolChoice: true }),
|
|
4364
4409
|
// The declared ontology (9.106.0): the piece served from the run
|
|
@@ -4909,6 +4954,7 @@ class Agent extends RunnerBase_js_1.RunnerBase {
|
|
|
4909
4954
|
...(this.timeOptions !== undefined && { timeWindows: true }),
|
|
4910
4955
|
...(inputsArmed && this.timeOptions !== undefined && { timeLimits: true }),
|
|
4911
4956
|
...(this.answerValidationConfig !== undefined && { hasAnswerValidation: true }),
|
|
4957
|
+
...(governsOutput && { releaseOutputTokens: true }),
|
|
4912
4958
|
// The out-of-budget wrap-up branch (9.56.0) — the conditional-mount law
|
|
4913
4959
|
// above, decided once beside the Route decider that routes to it so the
|
|
4914
4960
|
// two can never disagree about whether the branch exists.
|