@relayflows/sdk 2.0.21 → 2.0.22
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/dist/agent-transcript.d.ts +186 -0
- package/dist/agent-transcript.d.ts.map +1 -0
- package/dist/agent-transcript.js +585 -0
- package/dist/agent-transcript.js.map +1 -0
- package/dist/cli/run.js +2 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/status.d.ts +34 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +307 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/step-failure.js +31 -7
- package/dist/cli/step-failure.js.map +1 -1
- package/dist/cli-commands.d.ts +13 -0
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +11 -0
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -0
- package/dist/cli.js.map +1 -1
- package/dist/failure-kinds.d.ts +15 -2
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +8 -0
- package/dist/failure-kinds.js.map +1 -1
- package/dist/journal-reader.d.ts +1 -1
- package/dist/journal-reader.d.ts.map +1 -1
- package/dist/journal-reader.js +3 -1
- package/dist/journal-reader.js.map +1 -1
- package/dist/llm-worker.d.ts.map +1 -1
- package/dist/llm-worker.js +12 -1
- package/dist/llm-worker.js.map +1 -1
- package/dist/permissions-preflight.d.ts +22 -0
- package/dist/permissions-preflight.d.ts.map +1 -0
- package/dist/permissions-preflight.js +49 -0
- package/dist/permissions-preflight.js.map +1 -0
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +6 -0
- package/dist/preflight.js.map +1 -1
- package/dist/pty-sidechannel.d.ts +7 -0
- package/dist/pty-sidechannel.d.ts.map +1 -1
- package/dist/pty-sidechannel.js.map +1 -1
- package/dist/redact.d.ts +16 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +104 -0
- package/dist/redact.js.map +1 -0
- package/dist/run-state.d.ts +124 -0
- package/dist/run-state.d.ts.map +1 -0
- package/dist/run-state.js +368 -0
- package/dist/run-state.js.map +1 -0
- package/dist/spec.d.ts +16 -1
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/step-env.d.ts +25 -0
- package/dist/step-env.d.ts.map +1 -0
- package/dist/step-env.js +34 -0
- package/dist/step-env.js.map +1 -0
- package/dist/transcript-tail.d.ts +54 -0
- package/dist/transcript-tail.d.ts.map +1 -0
- package/dist/transcript-tail.js +176 -0
- package/dist/transcript-tail.js.map +1 -0
- package/dist/worker-cli.d.ts +10 -0
- package/dist/worker-cli.d.ts.map +1 -1
- package/dist/worker-cli.js +158 -16
- package/dist/worker-cli.js.map +1 -1
- package/dist/worker-usage.d.ts +7 -2
- package/dist/worker-usage.d.ts.map +1 -1
- package/dist/worker-usage.js +21 -3
- package/dist/worker-usage.js.map +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +31 -6
- package/dist/worker.js.map +1 -1
- package/dist/wrapper-runtime.d.ts +7 -1
- package/dist/wrapper-runtime.d.ts.map +1 -1
- package/dist/wrapper-runtime.js +7 -1
- package/dist/wrapper-runtime.js.map +1 -1
- package/package.json +2 -2
- package/src/agent-transcript.ts +651 -0
- package/src/cli/run.ts +2 -1
- package/src/cli/status.ts +329 -0
- package/src/cli/step-failure.ts +32 -7
- package/src/cli-commands.ts +11 -0
- package/src/cli.ts +8 -0
- package/src/failure-kinds.ts +15 -1
- package/src/journal-reader.ts +4 -2
- package/src/llm-worker.ts +12 -1
- package/src/permissions-preflight.ts +53 -0
- package/src/preflight.ts +6 -0
- package/src/pty-sidechannel.ts +7 -0
- package/src/redact.ts +106 -0
- package/src/run-state.ts +468 -0
- package/src/spec.ts +16 -1
- package/src/step-env.ts +47 -0
- package/src/transcript-tail.ts +193 -0
- package/src/worker-cli.ts +157 -17
- package/src/worker-usage.ts +26 -3
- package/src/worker.ts +32 -6
- package/src/wrapper-runtime.ts +7 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { type SidechannelContext } from './pty-sidechannel.js';
|
|
2
|
+
/**
|
|
3
|
+
* Per-attempt agent transcript: the redacted, capped `stream-json` file the
|
|
4
|
+
* worker writes beside the PTY socket, and the ≤ 8 KiB digest of it that rides
|
|
5
|
+
* in `trajectory_tail` on every completion.
|
|
6
|
+
*
|
|
7
|
+
* Every bound below is enforced here and stated in what it produces — a
|
|
8
|
+
* marker line at a seam, a suffix on a cut string, a boolean on the digest —
|
|
9
|
+
* so a reader is told what was dropped rather than left to guess.
|
|
10
|
+
*/
|
|
11
|
+
/** Cap on one attempt's transcript file: the first 128 KiB whole, then a rolling tail. */
|
|
12
|
+
export declare const TRANSCRIPT_FILE_MAX_BYTES: number;
|
|
13
|
+
export declare const TRANSCRIPT_HEAD_BYTES: number;
|
|
14
|
+
export declare const TRANSCRIPT_TAIL_BYTES: number;
|
|
15
|
+
/** Cap on any one string leaf inside a frame (tool results, thinking, text). */
|
|
16
|
+
export declare const TRANSCRIPT_STRING_MAX_BYTES: number;
|
|
17
|
+
/**
|
|
18
|
+
* Cap on the serialized digest. Half the kernel's 16 KiB `trajectory_tail`
|
|
19
|
+
* boundary (relayflowd/src/server.rs), leaving room for the `relay_task`
|
|
20
|
+
* sibling the worker already journals.
|
|
21
|
+
*/
|
|
22
|
+
export declare const TRANSCRIPT_DIGEST_MAX_BYTES: number;
|
|
23
|
+
/** Cap on an llm step's `trajectory_tail.error`; over 16 KiB the kernel refuses the completion. */
|
|
24
|
+
export declare const LLM_ERROR_MAX_BYTES: number;
|
|
25
|
+
export declare const FINAL_TEXT_MAX_BYTES: number;
|
|
26
|
+
export declare const FAILURE_EXCERPT_MAX_BYTES = 1024;
|
|
27
|
+
export declare const TOOL_INPUT_EXCERPT_MAX_CHARS = 120;
|
|
28
|
+
/**
|
|
29
|
+
* Cap on any single provider-supplied identifier copied into `result`
|
|
30
|
+
* (`model`, `session_id`, `stop_reason`, `subtype`, `claude_code_version`) and
|
|
31
|
+
* on a tool name. These are attacker-influenceable strings that no reduction
|
|
32
|
+
* step in `boundTranscriptDigest` trims, so they are bounded where they enter.
|
|
33
|
+
*/
|
|
34
|
+
export declare const DIGEST_LABEL_MAX_BYTES = 256;
|
|
35
|
+
/**
|
|
36
|
+
* Bytes reserved inside `TRANSCRIPT_FILE_MAX_BYTES` for the
|
|
37
|
+
* `relayflow.truncated` marker, so a full head plus a full tail plus the
|
|
38
|
+
* marker still fits the stated per-attempt cap. The marker serializes to
|
|
39
|
+
* well under this even with 20-digit counters.
|
|
40
|
+
*/
|
|
41
|
+
export declare const TRUNCATION_MARKER_RESERVE = 256;
|
|
42
|
+
export declare const TOOL_COUNTS_MAX = 32;
|
|
43
|
+
export declare const TOOL_LAST_CALLS_MAX = 20;
|
|
44
|
+
export declare const ARTIFACT_PATHS_MAX = 50;
|
|
45
|
+
export interface TranscriptFile {
|
|
46
|
+
path: string;
|
|
47
|
+
/** Bytes the redacted transcript would have occupied without the file cap. */
|
|
48
|
+
bytes_total: number;
|
|
49
|
+
bytes_kept: number;
|
|
50
|
+
frames_total: number;
|
|
51
|
+
frames_kept: number;
|
|
52
|
+
truncated: boolean;
|
|
53
|
+
sha256: string;
|
|
54
|
+
}
|
|
55
|
+
export interface TranscriptToolCall {
|
|
56
|
+
seq: number;
|
|
57
|
+
name: string;
|
|
58
|
+
input_excerpt: string;
|
|
59
|
+
result_bytes?: number;
|
|
60
|
+
is_error?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface TranscriptDigest {
|
|
63
|
+
attempt?: number;
|
|
64
|
+
exit_code?: number | null;
|
|
65
|
+
file?: TranscriptFile;
|
|
66
|
+
result?: {
|
|
67
|
+
provider: 'claude' | 'codex';
|
|
68
|
+
model?: string;
|
|
69
|
+
claude_code_version?: string;
|
|
70
|
+
session_id?: string;
|
|
71
|
+
subtype?: string;
|
|
72
|
+
is_error?: boolean;
|
|
73
|
+
stop_reason?: string;
|
|
74
|
+
num_turns?: number;
|
|
75
|
+
duration_ms?: number;
|
|
76
|
+
duration_api_ms?: number;
|
|
77
|
+
total_cost_usd?: number;
|
|
78
|
+
usage?: {
|
|
79
|
+
input?: number;
|
|
80
|
+
output?: number;
|
|
81
|
+
cache_read?: number;
|
|
82
|
+
cache_creation?: number;
|
|
83
|
+
thinking?: number;
|
|
84
|
+
};
|
|
85
|
+
permission_denials?: number;
|
|
86
|
+
};
|
|
87
|
+
tools?: {
|
|
88
|
+
counts: Array<{
|
|
89
|
+
name: string;
|
|
90
|
+
calls: number;
|
|
91
|
+
errors: number;
|
|
92
|
+
}>;
|
|
93
|
+
last_calls: TranscriptToolCall[];
|
|
94
|
+
total_calls: number;
|
|
95
|
+
shown_calls: number;
|
|
96
|
+
/** False when the provider's frames are only counted, not paired (Codex). */
|
|
97
|
+
complete: boolean;
|
|
98
|
+
};
|
|
99
|
+
final_text?: string;
|
|
100
|
+
final_text_truncated?: boolean;
|
|
101
|
+
failure?: {
|
|
102
|
+
kind: 'result' | 'tool_result' | 'stderr';
|
|
103
|
+
excerpt: string;
|
|
104
|
+
truncated?: boolean;
|
|
105
|
+
};
|
|
106
|
+
artifacts?: {
|
|
107
|
+
count: number;
|
|
108
|
+
paths: string[];
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Set when even the ordered reductions left the digest over its cap and it
|
|
112
|
+
* was cut back to fixed-size fields — every provider-supplied string but a
|
|
113
|
+
* bounded file path is gone. A reader is told rather than left guessing.
|
|
114
|
+
*/
|
|
115
|
+
core_only?: boolean;
|
|
116
|
+
}
|
|
117
|
+
type RecordValue = Record<string, unknown>;
|
|
118
|
+
/** `…/runs/<runId>/steps/<stepId>/attempt-<n>.transcript.jsonl`, beside the PTY socket. */
|
|
119
|
+
export declare function transcriptPath(context: Pick<SidechannelContext, 'dataDir' | 'runId' | 'stepId'>, attempt: number): string;
|
|
120
|
+
/**
|
|
121
|
+
* Relay-issued token prefixes, shared with `redactRelayError` (worker-cli.ts).
|
|
122
|
+
* The tail must be at least 8 characters so journal keys such as `at_ms` are
|
|
123
|
+
* not mistaken for tokens.
|
|
124
|
+
*/
|
|
125
|
+
export declare const RELAY_TOKEN_PATTERN: RegExp;
|
|
126
|
+
export type Redactor = (text: string) => string;
|
|
127
|
+
/**
|
|
128
|
+
* One redactor for one environment: the values of secret-named variables are
|
|
129
|
+
* resolved once, so a writer redacting thousands of strings does not rescan
|
|
130
|
+
* `process.env` for each.
|
|
131
|
+
*/
|
|
132
|
+
export declare function createRedactor(env?: NodeJS.ProcessEnv): Redactor;
|
|
133
|
+
/** Redact one string against `env` (D6 rules 2–4). */
|
|
134
|
+
export declare function redactText(text: string, env?: NodeJS.ProcessEnv): string;
|
|
135
|
+
/** Cut `text` to at most `maxBytes` of UTF-8 on a code-point boundary. */
|
|
136
|
+
export declare function utf8Head(text: string, maxBytes: number): string;
|
|
137
|
+
/** The last `maxBytes` of `text`, on a code-point boundary. */
|
|
138
|
+
export declare function utf8Tail(text: string, maxBytes: number): string;
|
|
139
|
+
/** Head-cut with the truncation stated in the value itself. */
|
|
140
|
+
export declare function boundedText(text: string, maxBytes: number, label?: string): {
|
|
141
|
+
text: string;
|
|
142
|
+
truncated: boolean;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Redact and bound every string leaf of a parsed frame, and reduce the
|
|
146
|
+
* `system/init` frame to its whitelist. Unknown frame types are kept as they
|
|
147
|
+
* are, minus the same string treatment.
|
|
148
|
+
*/
|
|
149
|
+
export declare function reduceFrame(frame: unknown, redact: Redactor): unknown;
|
|
150
|
+
export interface TranscriptWriter {
|
|
151
|
+
/** One stdout line, without its newline. Never throws; a failed file is reported by `close`. */
|
|
152
|
+
write(line: string): void;
|
|
153
|
+
/** Flush the tail, finish the file, and describe it — `undefined` when the file could not be written. */
|
|
154
|
+
close(): Promise<TranscriptFile | undefined>;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Open the per-attempt transcript file. The first `TRANSCRIPT_HEAD_BYTES` are
|
|
158
|
+
* written as they arrive, so a crash mid-run still leaves the start of the
|
|
159
|
+
* transcript on disk; past that a ring of the last `TRANSCRIPT_TAIL_BYTES`
|
|
160
|
+
* is kept and flushed on close, behind one `relayflow.truncated` marker line
|
|
161
|
+
* that says how much fell between them.
|
|
162
|
+
*/
|
|
163
|
+
export declare function openTranscriptWriter(path: string, env?: NodeJS.ProcessEnv): Promise<TranscriptWriter | undefined>;
|
|
164
|
+
/**
|
|
165
|
+
* Build the digest from the frames `decodeProviderResult` already parsed.
|
|
166
|
+
* Claude: `tool_use` blocks are paired with `tool_result` blocks by
|
|
167
|
+
* `tool_use_id`; `init` supplies model and version. Codex: `item.completed`
|
|
168
|
+
* items are counted by `item.type` only, so `tools.complete` is false.
|
|
169
|
+
* `failure` is filled only when the attempt did not succeed.
|
|
170
|
+
*/
|
|
171
|
+
export declare function buildTranscriptDigest(frames: RecordValue[], kind: 'claude' | 'codex', outcome: {
|
|
172
|
+
exit_code: number | null;
|
|
173
|
+
stderr_tail: string;
|
|
174
|
+
}, env?: NodeJS.ProcessEnv): Pick<TranscriptDigest, 'result' | 'tools' | 'final_text' | 'final_text_truncated' | 'failure'>;
|
|
175
|
+
/** Serialized size of the digest as it will be journaled. */
|
|
176
|
+
export declare function digestBytes(digest: TranscriptDigest): number;
|
|
177
|
+
/**
|
|
178
|
+
* Shrink the digest until it serializes to at most `TRANSCRIPT_DIGEST_MAX_BYTES`,
|
|
179
|
+
* in a fixed order: recent tool calls, artifact paths, final text, failure
|
|
180
|
+
* excerpt, tool counts. Each cut leaves its mark — `shown_calls` under
|
|
181
|
+
* `total_calls`, `artifacts.count` above `paths.length`, `final_text_truncated`,
|
|
182
|
+
* `failure.truncated` — so a reader knows the digest is not the whole account.
|
|
183
|
+
*/
|
|
184
|
+
export declare function boundTranscriptDigest(digest: TranscriptDigest): TranscriptDigest;
|
|
185
|
+
export {};
|
|
186
|
+
//# sourceMappingURL=agent-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-transcript.d.ts","sourceRoot":"","sources":["../src/agent-transcript.ts"],"names":[],"mappings":"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"}
|