agent-conveyor 0.1.1 → 0.1.2

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 CHANGED
@@ -620,8 +620,10 @@ tmux attach -t codex-live-test
620
620
  local telemetry and related tables: active tasks/sessions, cycle and command
621
621
  success/failure counts, ingest/skipped-line totals, criteria counts,
622
622
  reconcile drift counts, export counts, and retained capture/transcript bytes.
623
- - `export-task <task> [--zip]` — Dump task status, audit, prompts, and
624
- transcript metadata into an export bundle. Exports include
623
+ - `export-task <task> [--zip] [--include-transcripts]
624
+ [--include-full-transcripts]` Dump task status, audit, prompts, transcript
625
+ metadata, and optional transcript segments/full transcript replay into an
626
+ export bundle. Exports include
625
627
  `telemetry-events.json`, `telemetry-summary.json`, and
626
628
  `telemetry-report.md`; see `docs/local-telemetry-workflow.md`.
627
629
 
@@ -6,7 +6,7 @@ import { dirname, join, relative, resolve } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { taskAuditSync } from "../runtime/audit.js";
8
8
  import { classifyBusyWait, classifyStartupOutput } from "../runtime/classify.js";
9
- import { exportTaskAuditSubsetSync } from "../runtime/export.js";
9
+ import { exportTaskSync } from "../runtime/export.js";
10
10
  import { ingestSessionSync } from "../runtime/ingest.js";
11
11
  import { acceptanceCriteriaForTaskSync, loopEvidenceCriterion, recordAdversarialLoopEvidenceSync, recordLoopEvidenceSync, recordVisualDiffLoopEvidenceSync, } from "../runtime/loop-evidence.js";
12
12
  import { writePngRgba } from "../runtime/visual-diff.js";
@@ -2665,7 +2665,7 @@ function runAuditCommand(parsed, options) {
2665
2665
  try {
2666
2666
  const audit = taskAuditSync(database, task);
2667
2667
  if (parsed.flags.json) {
2668
- return jsonResult(audit);
2668
+ return jsonResult(parsed.flags.includeContent ? audit : redactAudit(audit));
2669
2669
  }
2670
2670
  const lines = [
2671
2671
  `${audit.task.name}\t${audit.task.state}\t${audit.task.goal}`,
@@ -2703,16 +2703,19 @@ function runReplayCommand(parsed, options) {
2703
2703
  }
2704
2704
  function runExportTaskCommand(parsed, options) {
2705
2705
  const task = requireTask(parsed);
2706
- if (parsed.flags.zip || parsed.flags.includeTranscripts || parsed.flags.includeFullTranscripts) {
2707
- return errorResult("TypeScript runtime export currently supports the migrated audit subset only; omit --zip and transcript flags.");
2708
- }
2709
2706
  const database = openRuntimeDatabase(parsed, options);
2710
2707
  try {
2711
2708
  const audit = taskAuditSync(database, task);
2712
2709
  const outputDir = parsed.flags.output
2713
2710
  ? resolve(parsed.flags.output)
2714
2711
  : join(stateRoot({ cwd: options.cwd, env: options.env }), "artifacts", "tasks", audit.task.id, "export");
2715
- return jsonResult(exportTaskAuditSubsetSync(database, { outputDir, task }));
2712
+ return jsonResult(exportTaskSync(database, {
2713
+ includeFullTranscripts: parsed.flags.includeFullTranscripts,
2714
+ includeTranscripts: parsed.flags.includeTranscripts,
2715
+ outputDir,
2716
+ task,
2717
+ zip: parsed.flags.zip,
2718
+ }));
2716
2719
  }
2717
2720
  finally {
2718
2721
  database.close();
@@ -17021,6 +17024,35 @@ function redactTranscriptSegments(result) {
17021
17024
  task: result.task,
17022
17025
  };
17023
17026
  }
17027
+ function redactAudit(audit) {
17028
+ return {
17029
+ ...audit,
17030
+ terminal_captures: audit.terminal_captures.map((capture) => {
17031
+ const { content, ...rest } = capture;
17032
+ if (typeof content !== "string") {
17033
+ return rest;
17034
+ }
17035
+ return {
17036
+ ...rest,
17037
+ content_byte_count: Buffer.byteLength(content),
17038
+ content_line_count: pythonSplitlinesCount(content),
17039
+ content_redacted: true,
17040
+ };
17041
+ }),
17042
+ transcript_segments: audit.transcript_segments.map((segment) => {
17043
+ const { segment_text: segmentText, ...rest } = segment;
17044
+ if (typeof segmentText !== "string") {
17045
+ return rest;
17046
+ }
17047
+ return {
17048
+ ...rest,
17049
+ segment_text_byte_count: Buffer.byteLength(segmentText),
17050
+ segment_text_line_count: pythonSplitlinesCount(segmentText),
17051
+ segment_text_redacted: true,
17052
+ };
17053
+ }),
17054
+ };
17055
+ }
17024
17056
  function renderTranscriptCaptureText(captures) {
17025
17057
  return captures.map((capture) => {
17026
17058
  if ("error" in capture) {