@relayflows/sdk 2.0.21 → 2.0.23

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.
Files changed (247) hide show
  1. package/dist/agent-artifacts.d.ts +18 -9
  2. package/dist/agent-artifacts.d.ts.map +1 -1
  3. package/dist/agent-artifacts.js +27 -11
  4. package/dist/agent-artifacts.js.map +1 -1
  5. package/dist/agent-transcript.d.ts +186 -0
  6. package/dist/agent-transcript.d.ts.map +1 -0
  7. package/dist/agent-transcript.js +585 -0
  8. package/dist/agent-transcript.js.map +1 -0
  9. package/dist/authored-flow-error.d.ts +33 -1
  10. package/dist/authored-flow-error.d.ts.map +1 -1
  11. package/dist/authored-flow-error.js +20 -1
  12. package/dist/authored-flow-error.js.map +1 -1
  13. package/dist/authored-flow-executor.d.ts.map +1 -1
  14. package/dist/authored-flow-executor.js +4 -1
  15. package/dist/authored-flow-executor.js.map +1 -1
  16. package/dist/authored-node-entry.js +5 -1
  17. package/dist/authored-node-entry.js.map +1 -1
  18. package/dist/authored-node-runner.d.ts +11 -0
  19. package/dist/authored-node-runner.d.ts.map +1 -1
  20. package/dist/authored-node-runner.js +30 -1
  21. package/dist/authored-node-runner.js.map +1 -1
  22. package/dist/authored-root.js +3 -1
  23. package/dist/authored-root.js.map +1 -1
  24. package/dist/authored-source-authority.js +13 -0
  25. package/dist/authored-source-authority.js.map +1 -1
  26. package/dist/authored-step-index.d.ts +82 -0
  27. package/dist/authored-step-index.d.ts.map +1 -0
  28. package/dist/authored-step-index.js +120 -0
  29. package/dist/authored-step-index.js.map +1 -0
  30. package/dist/authored-step-output.d.ts +23 -2
  31. package/dist/authored-step-output.d.ts.map +1 -1
  32. package/dist/authored-step-output.js +47 -5
  33. package/dist/authored-step-output.js.map +1 -1
  34. package/dist/authored-worker-step.d.ts +10 -2
  35. package/dist/authored-worker-step.d.ts.map +1 -1
  36. package/dist/authored-worker-step.js +81 -7
  37. package/dist/authored-worker-step.js.map +1 -1
  38. package/dist/cli/check.d.ts.map +1 -1
  39. package/dist/cli/check.js +67 -12
  40. package/dist/cli/check.js.map +1 -1
  41. package/dist/cli/cloud-read.d.ts +31 -0
  42. package/dist/cli/cloud-read.d.ts.map +1 -0
  43. package/dist/cli/cloud-read.js +482 -0
  44. package/dist/cli/cloud-read.js.map +1 -0
  45. package/dist/cli/run.d.ts +2 -0
  46. package/dist/cli/run.d.ts.map +1 -1
  47. package/dist/cli/run.js +53 -24
  48. package/dist/cli/run.js.map +1 -1
  49. package/dist/cli/status.d.ts +43 -0
  50. package/dist/cli/status.d.ts.map +1 -0
  51. package/dist/cli/status.js +321 -0
  52. package/dist/cli/status.js.map +1 -0
  53. package/dist/cli/step-failure.d.ts +26 -0
  54. package/dist/cli/step-failure.d.ts.map +1 -1
  55. package/dist/cli/step-failure.js +99 -10
  56. package/dist/cli/step-failure.js.map +1 -1
  57. package/dist/cli-commands.d.ts +41 -0
  58. package/dist/cli-commands.d.ts.map +1 -1
  59. package/dist/cli-commands.js +33 -0
  60. package/dist/cli-commands.js.map +1 -1
  61. package/dist/cli.d.ts +4 -2
  62. package/dist/cli.d.ts.map +1 -1
  63. package/dist/cli.js +26 -0
  64. package/dist/cli.js.map +1 -1
  65. package/dist/cloud-http.d.ts +12 -0
  66. package/dist/cloud-http.d.ts.map +1 -1
  67. package/dist/cloud-http.js +14 -6
  68. package/dist/cloud-http.js.map +1 -1
  69. package/dist/cloud-read.d.ts +154 -0
  70. package/dist/cloud-read.d.ts.map +1 -0
  71. package/dist/cloud-read.js +373 -0
  72. package/dist/cloud-read.js.map +1 -0
  73. package/dist/cloud-transcript.d.ts +94 -0
  74. package/dist/cloud-transcript.d.ts.map +1 -0
  75. package/dist/cloud-transcript.js +342 -0
  76. package/dist/cloud-transcript.js.map +1 -0
  77. package/dist/communication/environment.d.ts +3 -0
  78. package/dist/communication/environment.d.ts.map +1 -0
  79. package/dist/communication/environment.js +34 -0
  80. package/dist/communication/environment.js.map +1 -0
  81. package/dist/communication/history.d.ts +6 -0
  82. package/dist/communication/history.d.ts.map +1 -0
  83. package/dist/communication/history.js +38 -0
  84. package/dist/communication/history.js.map +1 -0
  85. package/dist/communication/local.d.ts +6 -0
  86. package/dist/communication/local.d.ts.map +1 -0
  87. package/dist/communication/local.js +56 -0
  88. package/dist/communication/local.js.map +1 -0
  89. package/dist/communication/preflight.d.ts +6 -0
  90. package/dist/communication/preflight.d.ts.map +1 -0
  91. package/dist/communication/preflight.js +37 -0
  92. package/dist/communication/preflight.js.map +1 -0
  93. package/dist/communication/projection.d.ts +8 -0
  94. package/dist/communication/projection.d.ts.map +1 -0
  95. package/dist/communication/projection.js +23 -0
  96. package/dist/communication/projection.js.map +1 -0
  97. package/dist/communication/relay.d.ts +78 -0
  98. package/dist/communication/relay.d.ts.map +1 -0
  99. package/dist/communication/relay.js +89 -0
  100. package/dist/communication/relay.js.map +1 -0
  101. package/dist/communication/session.d.ts +24 -0
  102. package/dist/communication/session.d.ts.map +1 -0
  103. package/dist/communication/session.js +100 -0
  104. package/dist/communication/session.js.map +1 -0
  105. package/dist/communication/spec.d.ts +20 -0
  106. package/dist/communication/spec.d.ts.map +1 -0
  107. package/dist/communication/spec.js +113 -0
  108. package/dist/communication/spec.js.map +1 -0
  109. package/dist/communication/tool.d.ts +3 -0
  110. package/dist/communication/tool.d.ts.map +1 -0
  111. package/dist/communication/tool.js +23 -0
  112. package/dist/communication/tool.js.map +1 -0
  113. package/dist/communication/tools.d.ts +11 -0
  114. package/dist/communication/tools.d.ts.map +1 -0
  115. package/dist/communication/tools.js +65 -0
  116. package/dist/communication/tools.js.map +1 -0
  117. package/dist/communication/worker.d.ts +6 -0
  118. package/dist/communication/worker.d.ts.map +1 -0
  119. package/dist/communication/worker.js +120 -0
  120. package/dist/communication/worker.js.map +1 -0
  121. package/dist/compile.d.ts.map +1 -1
  122. package/dist/compile.js +8 -1
  123. package/dist/compile.js.map +1 -1
  124. package/dist/failure-kinds.d.ts +30 -2
  125. package/dist/failure-kinds.d.ts.map +1 -1
  126. package/dist/failure-kinds.js +9 -0
  127. package/dist/failure-kinds.js.map +1 -1
  128. package/dist/index.d.ts +3 -1
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +2 -0
  131. package/dist/index.js.map +1 -1
  132. package/dist/journal-client.d.ts +4 -1
  133. package/dist/journal-client.d.ts.map +1 -1
  134. package/dist/journal-client.js +11 -2
  135. package/dist/journal-client.js.map +1 -1
  136. package/dist/journal-reader.d.ts +1 -1
  137. package/dist/journal-reader.d.ts.map +1 -1
  138. package/dist/journal-reader.js +3 -1
  139. package/dist/journal-reader.js.map +1 -1
  140. package/dist/llm-worker.d.ts.map +1 -1
  141. package/dist/llm-worker.js +12 -1
  142. package/dist/llm-worker.js.map +1 -1
  143. package/dist/permissions-preflight.d.ts +22 -0
  144. package/dist/permissions-preflight.d.ts.map +1 -0
  145. package/dist/permissions-preflight.js +49 -0
  146. package/dist/permissions-preflight.js.map +1 -0
  147. package/dist/preflight.d.ts +13 -2
  148. package/dist/preflight.d.ts.map +1 -1
  149. package/dist/preflight.js +29 -6
  150. package/dist/preflight.js.map +1 -1
  151. package/dist/protocol.d.ts +39 -1
  152. package/dist/protocol.d.ts.map +1 -1
  153. package/dist/pty-sidechannel.d.ts +7 -0
  154. package/dist/pty-sidechannel.d.ts.map +1 -1
  155. package/dist/pty-sidechannel.js.map +1 -1
  156. package/dist/redact.d.ts +16 -0
  157. package/dist/redact.d.ts.map +1 -0
  158. package/dist/redact.js +104 -0
  159. package/dist/redact.js.map +1 -0
  160. package/dist/run-state.d.ts +124 -0
  161. package/dist/run-state.d.ts.map +1 -0
  162. package/dist/run-state.js +368 -0
  163. package/dist/run-state.js.map +1 -0
  164. package/dist/spec.d.ts +24 -1
  165. package/dist/spec.d.ts.map +1 -1
  166. package/dist/spec.js.map +1 -1
  167. package/dist/step-env.d.ts +25 -0
  168. package/dist/step-env.d.ts.map +1 -0
  169. package/dist/step-env.js +34 -0
  170. package/dist/step-env.js.map +1 -0
  171. package/dist/transcript-tail.d.ts +54 -0
  172. package/dist/transcript-tail.d.ts.map +1 -0
  173. package/dist/transcript-tail.js +176 -0
  174. package/dist/transcript-tail.js.map +1 -0
  175. package/dist/worker-cli.d.ts +10 -0
  176. package/dist/worker-cli.d.ts.map +1 -1
  177. package/dist/worker-cli.js +138 -17
  178. package/dist/worker-cli.js.map +1 -1
  179. package/dist/worker-usage.d.ts +7 -2
  180. package/dist/worker-usage.d.ts.map +1 -1
  181. package/dist/worker-usage.js +21 -3
  182. package/dist/worker-usage.js.map +1 -1
  183. package/dist/worker.d.ts +1 -0
  184. package/dist/worker.d.ts.map +1 -1
  185. package/dist/worker.js +41 -7
  186. package/dist/worker.js.map +1 -1
  187. package/dist/wrapper-runtime.d.ts +7 -1
  188. package/dist/wrapper-runtime.d.ts.map +1 -1
  189. package/dist/wrapper-runtime.js +7 -1
  190. package/dist/wrapper-runtime.js.map +1 -1
  191. package/dist/wrapper-session.d.ts +8 -0
  192. package/dist/wrapper-session.d.ts.map +1 -1
  193. package/dist/wrapper-session.js +156 -23
  194. package/dist/wrapper-session.js.map +1 -1
  195. package/package.json +14 -2
  196. package/src/agent-artifacts.ts +27 -11
  197. package/src/agent-transcript.ts +651 -0
  198. package/src/authored-flow-error.ts +17 -0
  199. package/src/authored-flow-executor.ts +4 -1
  200. package/src/authored-node-entry.ts +5 -1
  201. package/src/authored-node-runner.ts +33 -1
  202. package/src/authored-root.ts +2 -1
  203. package/src/authored-source-authority.ts +13 -0
  204. package/src/authored-step-index.ts +157 -0
  205. package/src/authored-step-output.ts +66 -14
  206. package/src/authored-worker-step.ts +88 -15
  207. package/src/cli/check.ts +69 -11
  208. package/src/cli/cloud-read.ts +518 -0
  209. package/src/cli/run.ts +43 -24
  210. package/src/cli/status.ts +349 -0
  211. package/src/cli/step-failure.ts +100 -10
  212. package/src/cli-commands.ts +33 -0
  213. package/src/cli.ts +27 -0
  214. package/src/cloud-http.ts +32 -6
  215. package/src/cloud-read.ts +515 -0
  216. package/src/cloud-transcript.ts +422 -0
  217. package/src/communication/environment.ts +33 -0
  218. package/src/communication/history.ts +38 -0
  219. package/src/communication/local.ts +41 -0
  220. package/src/communication/preflight.ts +34 -0
  221. package/src/communication/projection.ts +23 -0
  222. package/src/communication/relay.ts +102 -0
  223. package/src/communication/session.ts +84 -0
  224. package/src/communication/spec.ts +106 -0
  225. package/src/communication/tool.ts +22 -0
  226. package/src/communication/tools.ts +50 -0
  227. package/src/communication/worker.ts +95 -0
  228. package/src/compile.ts +4 -1
  229. package/src/failure-kinds.ts +31 -1
  230. package/src/index.ts +10 -1
  231. package/src/journal-client.ts +12 -2
  232. package/src/journal-reader.ts +4 -2
  233. package/src/llm-worker.ts +12 -1
  234. package/src/permissions-preflight.ts +53 -0
  235. package/src/preflight.ts +42 -7
  236. package/src/protocol.ts +15 -0
  237. package/src/pty-sidechannel.ts +7 -0
  238. package/src/redact.ts +106 -0
  239. package/src/run-state.ts +468 -0
  240. package/src/spec.ts +18 -1
  241. package/src/step-env.ts +47 -0
  242. package/src/transcript-tail.ts +193 -0
  243. package/src/worker-cli.ts +139 -18
  244. package/src/worker-usage.ts +26 -3
  245. package/src/worker.ts +42 -6
  246. package/src/wrapper-runtime.ts +7 -1
  247. package/src/wrapper-session.ts +159 -24
@@ -4,15 +4,24 @@
4
4
  * Content, not mtime: a fast rewrite inside the filesystem's timestamp
5
5
  * resolution must still count as a change — the same rule
6
6
  * `examples/research/shims/agent-cli.ts`'s `snapshot()` uses for the same
7
- * "did the agent actually write something" question. Dotfiles/dotdirs
8
- * (`.git`, the kernel's own `.relayflowd` data dir, editor swap files, ...)
9
- * are never agent-authored content and are skipped, as is `node_modules`.
10
- * A missing `dir` (an agent step whose cwd does not exist yet) yields an
11
- * empty snapshot rather than throwing. Only a vanished path (`ENOENT`) is
12
- * ever swallowed this way; any other filesystem error (permissions,
13
- * `ENOTDIR`, `EISDIR`, ...) propagates, because a step whose artifact scan
14
- * silently dropped files it could not read must not report a successful,
15
- * incomplete `artifacts` list as if it were the truth.
7
+ * "did the agent actually write something" question.
8
+ *
9
+ * Dotfiles and dot-directories ARE eligible. `.workflow-artifacts/` is the
10
+ * conventional place a flow tells its agents to write, and a blanket dot-prefix
11
+ * skip made every review, report and evidence file written there invisible to
12
+ * the journal — and so to an `artifact_exists` gate naming one, which could
13
+ * then never pass. Only the three names in `SKIPPED_ENTRY_NAMES` are excluded:
14
+ * `.git`, the default `.relayflowd` data dir, and `node_modules`. A data dir
15
+ * the caller named explicitly is not one of those; the caller drops that whole
16
+ * subtree from the diff instead (`worker-cli.ts`).
17
+ *
18
+ * Only regular files are signed; symlinks are not followed and directories are
19
+ * descended, not recorded. A missing `dir` (an agent step whose cwd does not
20
+ * exist yet) yields an empty snapshot rather than throwing. Only a vanished
21
+ * path (`ENOENT`) is ever swallowed this way; any other filesystem error
22
+ * (permissions, `ENOTDIR`, `EISDIR`, ...) propagates, because a step whose
23
+ * artifact scan silently dropped files it could not read must not report a
24
+ * successful, incomplete `artifacts` list as if it were the truth.
16
25
  */
17
26
  export declare function snapshotWorkspaceFiles(dir: string): Promise<Map<string, string>>;
18
27
  /** `dir`-relative paths present in `after` that are new or changed since `before`, sorted. */
@@ -1 +1 @@
1
- {"version":3,"file":"agent-artifacts.d.ts","sourceRoot":"","sources":["../src/agent-artifacts.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAItF;AAsCD,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAMpG"}
1
+ {"version":3,"file":"agent-artifacts.d.ts","sourceRoot":"","sources":["../src/agent-artifacts.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAItF;AAsCD,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAMpG"}
@@ -4,22 +4,38 @@ import { join, relative, sep } from 'node:path';
4
4
  function isEnoent(error) {
5
5
  return error instanceof Error && error.code === 'ENOENT';
6
6
  }
7
- const SKIPPED_DIR_NAMES = new Set(['node_modules']);
7
+ /**
8
+ * Entry names never walked and never reported, matched exactly, at any depth,
9
+ * before the entry's type is consulted — so a `.git` *file* (a worktree's
10
+ * gitdir pointer) is skipped as surely as a `.git` directory. Exact names, not
11
+ * prefixes: `.github`, `.relayflowd-notes` and every other author-chosen name
12
+ * that merely starts the same way stays eligible.
13
+ */
14
+ const SKIPPED_ENTRY_NAMES = new Set(['.git', '.relayflowd', 'node_modules']);
8
15
  /**
9
16
  * A recursive snapshot of every regular file under `dir`, keyed by its
10
17
  * `dir`-relative POSIX path, valued by a content signature (size + sha256).
11
18
  * Content, not mtime: a fast rewrite inside the filesystem's timestamp
12
19
  * resolution must still count as a change — the same rule
13
20
  * `examples/research/shims/agent-cli.ts`'s `snapshot()` uses for the same
14
- * "did the agent actually write something" question. Dotfiles/dotdirs
15
- * (`.git`, the kernel's own `.relayflowd` data dir, editor swap files, ...)
16
- * are never agent-authored content and are skipped, as is `node_modules`.
17
- * A missing `dir` (an agent step whose cwd does not exist yet) yields an
18
- * empty snapshot rather than throwing. Only a vanished path (`ENOENT`) is
19
- * ever swallowed this way; any other filesystem error (permissions,
20
- * `ENOTDIR`, `EISDIR`, ...) propagates, because a step whose artifact scan
21
- * silently dropped files it could not read must not report a successful,
22
- * incomplete `artifacts` list as if it were the truth.
21
+ * "did the agent actually write something" question.
22
+ *
23
+ * Dotfiles and dot-directories ARE eligible. `.workflow-artifacts/` is the
24
+ * conventional place a flow tells its agents to write, and a blanket dot-prefix
25
+ * skip made every review, report and evidence file written there invisible to
26
+ * the journal — and so to an `artifact_exists` gate naming one, which could
27
+ * then never pass. Only the three names in `SKIPPED_ENTRY_NAMES` are excluded:
28
+ * `.git`, the default `.relayflowd` data dir, and `node_modules`. A data dir
29
+ * the caller named explicitly is not one of those; the caller drops that whole
30
+ * subtree from the diff instead (`worker-cli.ts`).
31
+ *
32
+ * Only regular files are signed; symlinks are not followed and directories are
33
+ * descended, not recorded. A missing `dir` (an agent step whose cwd does not
34
+ * exist yet) yields an empty snapshot rather than throwing. Only a vanished
35
+ * path (`ENOENT`) is ever swallowed this way; any other filesystem error
36
+ * (permissions, `ENOTDIR`, `EISDIR`, ...) propagates, because a step whose
37
+ * artifact scan silently dropped files it could not read must not report a
38
+ * successful, incomplete `artifacts` list as if it were the truth.
23
39
  */
24
40
  export async function snapshotWorkspaceFiles(dir) {
25
41
  const out = new Map();
@@ -37,7 +53,7 @@ async function walk(root, current, out) {
37
53
  throw error;
38
54
  }
39
55
  for (const entry of entries) {
40
- if (entry.name.startsWith('.') || SKIPPED_DIR_NAMES.has(entry.name))
56
+ if (SKIPPED_ENTRY_NAMES.has(entry.name))
41
57
  continue;
42
58
  const path = join(current, entry.name);
43
59
  if (entry.isDirectory()) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-artifacts.js","sourceRoot":"","sources":["../src/agent-artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-artifacts.js","sourceRoot":"","sources":["../src/agent-artifacts.ts"],"names":[],"mappings":"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"}
@@ -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":"AAIA,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE9E;;;;;;;;GAQG;AAEH,0FAA0F;AAC1F,eAAO,MAAM,yBAAyB,QAAc,CAAC;AACrD,eAAO,MAAM,qBAAqB,QAAa,CAAC;AAChD,eAAO,MAAM,qBAAqB,QAAoD,CAAC;AACvF,gFAAgF;AAChF,eAAO,MAAM,2BAA2B,QAAY,CAAC;AACrD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAW,CAAC;AACpD,mGAAmG;AACnG,eAAO,MAAM,mBAAmB,QAAW,CAAC;AAE5C,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAC7C,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAKrC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,cAAc,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7G,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,6EAA6E;QAC7E,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9F,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/C;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAG3C,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,EACjE,OAAO,EAAE,MAAM,GACd,MAAM,CAGR;AAOD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAA0D,CAAC;AAkB3F,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,QAAQ,CAyB7E;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAErF;AAMD,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAK5G;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CASrE;AAiBD,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,yGAAyG;IACzG,KAAK,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CA8FvC;AASD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC1D,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,sBAAsB,GAAG,SAAS,CAAC,CAuIhG;AA+BD,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAyBhF"}