agent-tune-kit 2.4.0__tar.gz → 2.4.2__tar.gz
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.
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/.codex-plugin/plugin.json +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/PKG-INFO +10 -6
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/README.en.md +9 -5
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/README.md +9 -5
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/__init__.py +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/store.py +33 -7
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/app.js +27 -18
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/page.html +1 -2
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/styles.css +13 -2
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/traces/app.js +9 -4
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/trace.py +3 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/shared-versioning-and-confirmation.md +3 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/trace-dashboard-design.md +6 -6
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/trace-swimlane-design.md +7 -2
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/trace-tuning.md +45 -13
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/pyproject.toml +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/scripts/check-release.py +8 -8
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/scripts/publish-pypi.sh +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/scripts/publish-release.py +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/scripts/release-version.py +10 -8
- agent_tune_kit-2.4.2/scripts/release-version.sh +7 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/scripts/validate_skill_pack.py +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-trace-capture/SKILL.md +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-trace-detect/SKILL.md +16 -15
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-trace-diagnose/SKILL.md +12 -10
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-trace-init/SKILL.md +7 -7
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-trace-optimize/SKILL.md +18 -11
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-trace-verify/SKILL.md +2 -2
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-visualize-trace/SKILL.md +5 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_install_plugin.py +1 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_release_scripts.py +17 -19
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_scroll_layout.py +29 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_store.py +62 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_visualize_trace.py +30 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-dashboard.cjs +11 -1
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-event-layout.cjs +18 -6
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-fragments.cjs +39 -4
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-scroll-layout.cjs +24 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-stage-cards.cjs +19 -1
- agent_tune_kit-2.4.0/scripts/release-version.sh +0 -6
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/.gitignore +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/__main__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/dataset.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/evaluation.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/main.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/output.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/results.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/trace.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/cli/visualize.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/datasets/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/datasets/prepare.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/datasets/truth.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/datasets/updates.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/datasets/validation.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/errors.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/execution/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/execution/calibration.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/execution/logs.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/execution/rules.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/execution/runner.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/execution/runtime.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/execution/tracing.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/installer.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/results/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/results/assessment.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/results/evidence.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/results/judgments.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/results/summary.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/results/versions.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/archive.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/capture.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/categories.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/langfuse.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/migrate.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/progress.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/projects.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/query.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/records.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/traces/segments.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/utils/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/utils/csv_io.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/utils/files.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/dataset/app.js +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/dataset/page.html +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/dataset/styles.css +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/dataset/vendor/echarts.min.js +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/failures/app.js +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/failures/page.html +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/failures/styles.css +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/shared/base.css +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/lanes.js +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/vendor/markdown-it.LICENSE +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/vendor/markdown-it.min.js +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/traces/page.html +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/traces/styles.css +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/dataset.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/failures.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/fields.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/history.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/render.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/timeline.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/traces.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/workspace.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/assets/agent_tune_kit_evaluation.png +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/assets/agent_tune_kit_trace.png +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/assets/arch-en.png +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/assets/arch.png +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/assets/architecture.en.svg +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/assets/architecture.svg +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/ato-atk-project-boundary-recommendation-2026-11-05.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/cli-skill-modularization-plan.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/codex_agent_tuning_prd.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/execution-evidence-and-tracing-plan.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/ground-truth-and-grading-assessment-2026-10-25.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/local-context.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/skill-template-pack-usage.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/surginame-atk-capability-review-2026-10-27.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/trace-change-verification-readability-diagnosis.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/trace-project-attribution-design.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/trace-tuning-validation.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/docs/truth-and-assessment.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/scripts/dev-refresh-install.sh +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/scripts/install_plugin.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-dataset/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-dataset/scripts/update_dataset.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-diagnose/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-eval/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-init/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-optimize/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-report/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-visualize-dataset/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-visualize-dataset/scripts/generate_dataset_browser.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-visualize-failures/SKILL.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/skills/atk-visualize-failures/scripts/generate_failure_browser.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/templates/.atk/runner/eval_runner.py.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/templates/.atk/runner/failure_rule.py.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/templates/.atk/runner/import_evidence.py.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/templates/.gitkeep +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/__init__.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/conftest.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/fixtures/legacy_eval_runner.py.txt +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/fixtures/managed_v1.py.md +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_assessment_contract.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_atk_init_contract.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_cli_workflow.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_dataset_updates.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_diagnosis.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_evidence_import.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_evidence_judgments.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_evidence_packaging.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_evidence_versions.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_execution_evidence.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_execution_outcomes.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_execution_tracing.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_generate_dataset_browser.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_generate_failure_browser.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_judge_calibration.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_local_context.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_plugin_cache.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_runner_output_columns.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_runner_template_row_logging.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_runtime_contracts.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_snapshot_reads.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_capture.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_categories.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_cli.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_event_list.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_langfuse.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_progress.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_projects.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_query.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_records.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_trace_segments.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_truth_browser.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_truth_cli.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_truth_contract.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_truth_runner.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_v2_progress.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/test_visualize_traces.py +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-controls.cjs +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-event-detail.cjs +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-event-list.cjs +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-event-wheel.cjs +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-issue-cards.cjs +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-preview-scroll.cjs +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-projects.cjs +0 -0
- {agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/tests/trace-selection-reason.cjs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-tune-kit",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.2",
|
|
4
4
|
"description": "Local Codex plugin for batch Agent evaluation and session trace tuning with evidence-backed issues, focused changes, verification and offline review.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "hustyichi",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agent-tune-kit
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: Local Codex plugin for iterative Agent tuning with guided Skills, reusable runner templates, versioned results, and static validation.
|
|
5
5
|
Project-URL: Homepage, https://github.com/hustyichi/agent-tune-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/hustyichi/agent-tune-kit
|
|
@@ -154,16 +154,18 @@ Run `atk trace --help` to check whether your CLI supports trace tuning. If the c
|
|
|
154
154
|
- **Langfuse v4**. Use `$atk-trace-init` to record project settings and configure read-only access on first setup. Configuration references credentials by environment-variable name. Then send `$atk-trace-capture Download session <session-id> from <start time> to <end time>`.
|
|
155
155
|
- **Local files**. Send `$atk-trace-capture Import traces for session <session-id> from <file path>, with source <source>`. You can also provide files with verifiable ties to the session during analysis and let detection import them. Analyze an already archived session directly.
|
|
156
156
|
|
|
157
|
-
The capture step downloads or imports data. Before saving, decide which content to retain and which fields to redact. ATK
|
|
157
|
+
The capture step downloads or imports data. Before saving, decide which content to retain and which fields to redact. ATK checks whether Git ignores `.atk/traces/` and adds a rule to the project's `.gitignore` if needed.
|
|
158
|
+
|
|
159
|
+
`$atk-trace-init` infers and saves the tuning scope from project documents and implementation; later detection, diagnosis, repair and verification use it. No manual configuration is required. You can also say "For this run, focus on this project or component." When you skip initialization, analysis fills in the necessary context and explains any unresolved boundaries.
|
|
158
160
|
|
|
159
161
|
### 2. Analyze and Review Evidence
|
|
160
162
|
|
|
161
163
|
```text
|
|
162
|
-
$atk-trace-detect
|
|
164
|
+
$atk-trace-detect Analyze session <session-id> for issues actionable within this project. List evidence and what you did not inspect.
|
|
163
165
|
$atk-visualize-trace Open the execution lanes for session <session-id> and jump from issues to the relevant trace segments and evidence fields.
|
|
164
166
|
```
|
|
165
167
|
|
|
166
|
-
|
|
168
|
+
By default, detection retains evidence-backed issues worth pursuing that have a project mechanism, an improvement direction and a minimal verification approach; the root cause may still be uncertain. It explains out-of-scope findings and missing actionability evidence, and still calls attention to serious problems. You can explicitly request a comprehensive quality audit or investigation of a specific symptom without an existing improvement lead. No retained issues does not prove the session was correct.
|
|
167
169
|
|
|
168
170
|
The capture, detect, diagnose, optimize and verify Skills generate or update `.atk/traces/<session_id>/preview.html` at stage end without opening a browser. Use `$atk-visualize-trace` when you want to open it; refresh an already open page after the file changes. Initialization has no session trace and does not generate an empty page.
|
|
169
171
|
|
|
@@ -176,11 +178,13 @@ Use Trace IDs to locate evidence within the session and open issue details to re
|
|
|
176
178
|
```text
|
|
177
179
|
$atk-trace-diagnose Investigate session <session-id> and propose repair and verification plans.
|
|
178
180
|
$atk-trace-diagnose Investigate ISSUE-001 in session <session-id> and propose a repair and verification plan.
|
|
179
|
-
$atk-trace-optimize
|
|
181
|
+
$atk-trace-optimize Prepare a detailed implementation plan for ISSUE-001 in session <session-id>, then implement after confirmation.
|
|
180
182
|
$atk-trace-verify Verify the candidate for ISSUE-001 in session <session-id> and check relevant behavior that should still work.
|
|
181
183
|
```
|
|
182
184
|
|
|
183
|
-
|
|
185
|
+
`$atk-trace-optimize` first lists the files, exact modification locations, before/after behavior and supporting checks in Codex. Discuss adjustments in chat; only after you confirm the final version does it save the detailed plan and edit the code. Material scope expansion requires another confirmation; an unchanged confirmed plan does not. Draft discussion stays in chat by default, while the session preview shows the final plan and actual changes.
|
|
186
|
+
|
|
187
|
+
Without specified issues, diagnosis reviews all available session traces, selects new issues within the tuning scope and reviews each existing issue. Findings established as unrelated to the implementation may be excluded with their reasons and history preserved; existing issues with uncertain relevance are not simply deleted. Specified issues or concrete symptoms define the investigation scope, and a temporary focus does not permanently exclude other issues. You can start directly with diagnosis without a separate detection invocation.
|
|
184
188
|
|
|
185
189
|
Diagnoses and verification conclusions are saved per issue. If the evidence cannot establish which candidate loaded or whether key verification conditions were met, the verification outcome is `inconclusive`. Investigation results identify unread ranges and evidence gaps. As new issues surface, work through them individually or start another analysis with a new session trace.
|
|
186
190
|
|
|
@@ -140,16 +140,18 @@ Run `atk trace --help` to check whether your CLI supports trace tuning. If the c
|
|
|
140
140
|
- **Langfuse v4**. Use `$atk-trace-init` to record project settings and configure read-only access on first setup. Configuration references credentials by environment-variable name. Then send `$atk-trace-capture Download session <session-id> from <start time> to <end time>`.
|
|
141
141
|
- **Local files**. Send `$atk-trace-capture Import traces for session <session-id> from <file path>, with source <source>`. You can also provide files with verifiable ties to the session during analysis and let detection import them. Analyze an already archived session directly.
|
|
142
142
|
|
|
143
|
-
The capture step downloads or imports data. Before saving, decide which content to retain and which fields to redact. ATK
|
|
143
|
+
The capture step downloads or imports data. Before saving, decide which content to retain and which fields to redact. ATK checks whether Git ignores `.atk/traces/` and adds a rule to the project's `.gitignore` if needed.
|
|
144
|
+
|
|
145
|
+
`$atk-trace-init` infers and saves the tuning scope from project documents and implementation; later detection, diagnosis, repair and verification use it. No manual configuration is required. You can also say "For this run, focus on this project or component." When you skip initialization, analysis fills in the necessary context and explains any unresolved boundaries.
|
|
144
146
|
|
|
145
147
|
### 2. Analyze and Review Evidence
|
|
146
148
|
|
|
147
149
|
```text
|
|
148
|
-
$atk-trace-detect
|
|
150
|
+
$atk-trace-detect Analyze session <session-id> for issues actionable within this project. List evidence and what you did not inspect.
|
|
149
151
|
$atk-visualize-trace Open the execution lanes for session <session-id> and jump from issues to the relevant trace segments and evidence fields.
|
|
150
152
|
```
|
|
151
153
|
|
|
152
|
-
|
|
154
|
+
By default, detection retains evidence-backed issues worth pursuing that have a project mechanism, an improvement direction and a minimal verification approach; the root cause may still be uncertain. It explains out-of-scope findings and missing actionability evidence, and still calls attention to serious problems. You can explicitly request a comprehensive quality audit or investigation of a specific symptom without an existing improvement lead. No retained issues does not prove the session was correct.
|
|
153
155
|
|
|
154
156
|
The capture, detect, diagnose, optimize and verify Skills generate or update `.atk/traces/<session_id>/preview.html` at stage end without opening a browser. Use `$atk-visualize-trace` when you want to open it; refresh an already open page after the file changes. Initialization has no session trace and does not generate an empty page.
|
|
155
157
|
|
|
@@ -162,11 +164,13 @@ Use Trace IDs to locate evidence within the session and open issue details to re
|
|
|
162
164
|
```text
|
|
163
165
|
$atk-trace-diagnose Investigate session <session-id> and propose repair and verification plans.
|
|
164
166
|
$atk-trace-diagnose Investigate ISSUE-001 in session <session-id> and propose a repair and verification plan.
|
|
165
|
-
$atk-trace-optimize
|
|
167
|
+
$atk-trace-optimize Prepare a detailed implementation plan for ISSUE-001 in session <session-id>, then implement after confirmation.
|
|
166
168
|
$atk-trace-verify Verify the candidate for ISSUE-001 in session <session-id> and check relevant behavior that should still work.
|
|
167
169
|
```
|
|
168
170
|
|
|
169
|
-
|
|
171
|
+
`$atk-trace-optimize` first lists the files, exact modification locations, before/after behavior and supporting checks in Codex. Discuss adjustments in chat; only after you confirm the final version does it save the detailed plan and edit the code. Material scope expansion requires another confirmation; an unchanged confirmed plan does not. Draft discussion stays in chat by default, while the session preview shows the final plan and actual changes.
|
|
172
|
+
|
|
173
|
+
Without specified issues, diagnosis reviews all available session traces, selects new issues within the tuning scope and reviews each existing issue. Findings established as unrelated to the implementation may be excluded with their reasons and history preserved; existing issues with uncertain relevance are not simply deleted. Specified issues or concrete symptoms define the investigation scope, and a temporary focus does not permanently exclude other issues. You can start directly with diagnosis without a separate detection invocation.
|
|
170
174
|
|
|
171
175
|
Diagnoses and verification conclusions are saved per issue. If the evidence cannot establish which candidate loaded or whether key verification conditions were met, the verification outcome is `inconclusive`. Investigation results identify unread ranges and evidence gaps. As new issues surface, work through them individually or start another analysis with a new session trace.
|
|
172
176
|
|
|
@@ -140,16 +140,18 @@ $atk-report
|
|
|
140
140
|
- **Langfuse v4**。首次接入可用 `$atk-trace-init` 记录项目和只读来源配置。配置只引用凭据的环境变量名。然后发送 `$atk-trace-capture 下载 <session-id> 的会话,时间范围是 <开始时间> 到 <结束时间>`。
|
|
141
141
|
- **本地文件**。发送 `$atk-trace-capture 从 <文件路径> 导入 <session-id> 的轨迹,来源是 <来源>`。也可在分析时提供可验证会话归属的文件,由分析流程导入。已归档的会话可直接分析。
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
采集步骤负责下载或导入。保存前确认哪些正文可以留存、哪些字段需要脱敏。ATK 确保 Git 忽略 `.atk/traces/`,需要时会补写项目的 `.gitignore`。
|
|
144
|
+
|
|
145
|
+
`$atk-trace-init` 会根据项目说明和实现自动识别并保存调优范围,后续分析、诊断、修复和验证沿用该范围。无需手工配置;也可直接说明“本轮只看某个项目或组件”。跳过初始化时,分析流程会自动补齐必要上下文,无法确定的边界会明确说明。
|
|
144
146
|
|
|
145
147
|
### 2. 分析并查看证据
|
|
146
148
|
|
|
147
149
|
```text
|
|
148
|
-
$atk-trace-detect 分析 <session-id
|
|
150
|
+
$atk-trace-detect 分析 <session-id>,筛选当前项目可调优的问题,列出证据和未检查的范围。
|
|
149
151
|
$atk-visualize-trace 打开 <session-id> 的执行泳道,从问题跳到相关轨迹片段和证据字段。
|
|
150
152
|
```
|
|
151
153
|
|
|
152
|
-
|
|
154
|
+
分析默认保留有证据、值得投入,且能说明项目机制、改进方向和最小验证办法的问题;根因尚未确定也可进入后续诊断。范围外的问题说明未纳入原因,暂缺可处理性证据的问题说明缺口,严重问题仍会提示。需要全面质量审计或调查某个具体症状时可直接提出,不限于已有改进线索。没有保留问题不代表会话完全正确。
|
|
153
155
|
|
|
154
156
|
采集、分析、诊断、修复和验证 Skill 在阶段结束后默认生成或更新 `.atk/traces/<session_id>/preview.html`,不自动打开浏览器。需要打开时使用 `$atk-visualize-trace`;已打开的页面在文件更新后需刷新。初始化没有会话轨迹,不生成空页面。
|
|
155
157
|
|
|
@@ -162,11 +164,13 @@ $atk-visualize-trace 打开 <session-id> 的执行泳道,从问题跳到相关
|
|
|
162
164
|
```text
|
|
163
165
|
$atk-trace-diagnose 调查 <session-id>,给出修复和验证方案。
|
|
164
166
|
$atk-trace-diagnose 调查 <session-id> 的 ISSUE-001,给出修复和验证方案。
|
|
165
|
-
$atk-trace-optimize
|
|
167
|
+
$atk-trace-optimize 为 <session-id> 的 ISSUE-001 准备详细修改方案,确认后实施。
|
|
166
168
|
$atk-trace-verify 验证 <session-id> 的 ISSUE-001 对应候选,并检查相关正常行为。
|
|
167
169
|
```
|
|
168
170
|
|
|
169
|
-
|
|
171
|
+
`$atk-trace-optimize` 会先在 Codex 中列出具体文件、修改位置、前后行为和配套验证。你可以在对话中调整方案;确认最终版本后,才保存详细实施方案并修改代码。实质扩大范围时会再次确认,同一已确认方案无需重复确认。讨论稿默认保留在对话中;会话预览展示最终方案与实际修改。
|
|
172
|
+
|
|
173
|
+
未指定问题时,调查默认检查会话中可用的全部轨迹,按调优范围筛选新问题,并逐项审阅已记录的问题。证据确认与现有实现无关的问题可以排除,并保留理由和历史;已记录但关联尚不明确的问题不会直接删除。指定问题或具体症状时,按指定范围调查,临时收窄范围不会永久排除其他问题。可以直接从调查开始,无需先单独执行检测。
|
|
170
174
|
|
|
171
175
|
诊断和验证结论分别按问题保存。证据不足以确认实际加载的候选或关键验证条件时,验证效果记为 `inconclusive`(无法判断)。调查结果会说明未检查的范围和证据缺口。后续发现新的问题,可继续按问题处理,或用新会话的轨迹开始下一次分析。
|
|
172
176
|
|
|
@@ -4,6 +4,7 @@ import hashlib
|
|
|
4
4
|
import json
|
|
5
5
|
import os
|
|
6
6
|
import re
|
|
7
|
+
import subprocess
|
|
7
8
|
import uuid
|
|
8
9
|
from contextlib import contextmanager
|
|
9
10
|
from pathlib import Path
|
|
@@ -11,7 +12,7 @@ from urllib.parse import urlsplit
|
|
|
11
12
|
|
|
12
13
|
from agent_tune_kit.errors import UserActionRequired
|
|
13
14
|
from agent_tune_kit.results.evidence import digest_file, json_bytes, now, safe_path, write_manifest
|
|
14
|
-
from agent_tune_kit.utils.files import write_text_atomic
|
|
15
|
+
from agent_tune_kit.utils.files import atomic_text_writer, write_text_atomic
|
|
15
16
|
|
|
16
17
|
from . import archive
|
|
17
18
|
|
|
@@ -97,16 +98,41 @@ def trace_root(project_root):
|
|
|
97
98
|
return safe_path(project, ".atk/traces")
|
|
98
99
|
|
|
99
100
|
|
|
101
|
+
def _trace_git_ignored(project):
|
|
102
|
+
try:
|
|
103
|
+
result = subprocess.run(
|
|
104
|
+
["git", "check-ignore", "-q", "--no-index", "--", ".atk/traces/"],
|
|
105
|
+
cwd=project,
|
|
106
|
+
capture_output=True,
|
|
107
|
+
env={**os.environ, "LC_ALL": "C"},
|
|
108
|
+
check=False,
|
|
109
|
+
)
|
|
110
|
+
except FileNotFoundError:
|
|
111
|
+
return None
|
|
112
|
+
if result.returncode in {0, 1}:
|
|
113
|
+
return result.returncode == 0
|
|
114
|
+
if result.stderr.startswith((b"fatal: not a git repository", b"fatal: this operation must be run in a work tree")):
|
|
115
|
+
return None
|
|
116
|
+
raise UserActionRequired("Git could not check the Trace ignore rules. Check Git status in the project.")
|
|
117
|
+
|
|
118
|
+
|
|
100
119
|
def ensure_workspace(project_root):
|
|
101
120
|
project = Path(project_root).resolve()
|
|
102
121
|
root = trace_root(project)
|
|
103
122
|
ignore = safe_path(project, ".gitignore")
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
123
|
+
ignored = _trace_git_ignored(project)
|
|
124
|
+
changed = False
|
|
125
|
+
if ignored is not True:
|
|
126
|
+
text = ignore.read_bytes().decode("utf-8") if ignore.exists() else ""
|
|
127
|
+
rule = "/.atk/traces/"
|
|
128
|
+
changed = text.rstrip("\r\n").rsplit("\n", 1)[-1] != rule
|
|
129
|
+
if changed:
|
|
130
|
+
newline = "\r\n" if "\r\n" in text else "\n"
|
|
131
|
+
separator = newline if text and not text.endswith("\n") else ""
|
|
132
|
+
with atomic_text_writer(ignore, newline="") as handle:
|
|
133
|
+
handle.write(text + separator + rule + newline)
|
|
134
|
+
if ignored is False and not _trace_git_ignored(project):
|
|
135
|
+
raise UserActionRequired("Git still does not ignore .atk/traces/. Resolve the conflicting ignore rules.")
|
|
110
136
|
root.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
111
137
|
return root, changed
|
|
112
138
|
|
|
@@ -423,7 +423,7 @@
|
|
|
423
423
|
const issue = item.record;
|
|
424
424
|
openDrawer(`${issue.id} · ${issue.title || "问题详情"}`, "issue");
|
|
425
425
|
const tabs = el("nav", undefined, "stage-tabs"); tabs.setAttribute("aria-label", "问题处理阶段");
|
|
426
|
-
for (const [key, label] of [["issue", "
|
|
426
|
+
for (const [key, label] of [["issue", "问题详情"], ["diagnoses", "诊断与方案"], ["changes", "修改候选"], ["verifications", "实际验证"]]) {
|
|
427
427
|
const tab = button(label, () => showIssue(item, key), key === stage ? "active" : "");
|
|
428
428
|
tab.setAttribute("aria-pressed", String(key === stage)); tabs.append(tab);
|
|
429
429
|
}
|
|
@@ -439,17 +439,6 @@
|
|
|
439
439
|
}
|
|
440
440
|
const segments = issue.segments || [];
|
|
441
441
|
if (!segments.length) $("drawer-content").append(el("p", "该问题尚未圈定片段,可查看已记录的关联证据。", "muted"));
|
|
442
|
-
if (segments.length) {
|
|
443
|
-
const box = section("关联片段");
|
|
444
|
-
segments.forEach((segment, index) => {
|
|
445
|
-
const row = el("div", undefined, "detail-section");
|
|
446
|
-
const title = `${segment.id || `S${index + 1}`} · ${segment.summary || "未命名片段"}`;
|
|
447
|
-
row.append(button(title, () => startIssue(item, item.fragments.findIndex(part => part.id === segment.id || (!part.id && index === item.fragments.indexOf(part))))));
|
|
448
|
-
appendReferences(row, segment.evidence || []);
|
|
449
|
-
box.append(row);
|
|
450
|
-
});
|
|
451
|
-
$("drawer-content").append(box);
|
|
452
|
-
}
|
|
453
442
|
if ((issue.evidence || []).length) {
|
|
454
443
|
const evidence = section(segments.length ? "额外证据" : "关联证据");
|
|
455
444
|
appendReferences(evidence, issue.evidence);
|
|
@@ -631,16 +620,31 @@
|
|
|
631
620
|
return (left.at ?? Infinity) - (right.at ?? Infinity) || left.track - right.track || a - b;
|
|
632
621
|
});
|
|
633
622
|
}
|
|
634
|
-
|
|
623
|
+
const rows = candidates.filter(i => {
|
|
635
624
|
const n = currentCapture.nodes[i];
|
|
636
625
|
if ((track !== null && n.track !== track) || (type && n.type !== type)) return false;
|
|
637
|
-
if (mode === "error" && !eventState(n).failed) return false;
|
|
638
626
|
if (query) {
|
|
639
627
|
if (!searchable.has(n)) searchable.set(n, pretty(n).toLocaleLowerCase());
|
|
640
628
|
return searchable.get(n).includes(query);
|
|
641
629
|
}
|
|
642
630
|
return true;
|
|
643
631
|
});
|
|
632
|
+
// The failure switch shows its count before it is chosen, so count within every other active scope and filter.
|
|
633
|
+
const failed = rows.filter(i => eventState(currentCapture.nodes[i]).failed);
|
|
634
|
+
return {rows: mode === "error" ? failed : rows, total: rows.length, failed: failed.length};
|
|
635
|
+
}
|
|
636
|
+
function syncRecordMode(failed) {
|
|
637
|
+
const only = $("record-mode").value === "error";
|
|
638
|
+
$("record-all").setAttribute("aria-pressed", String(!only));
|
|
639
|
+
$("record-failed").setAttribute("aria-pressed", String(only));
|
|
640
|
+
$("record-failed-count").textContent = String(failed);
|
|
641
|
+
// Keep an active switch usable at zero so the selection stays visible; otherwise zero means nothing to look at.
|
|
642
|
+
$("record-failed").disabled = !only && failed === 0;
|
|
643
|
+
$("record-failed").title = failed || only ? `只看执行失败的事件(${failed} 条)` : "当前范围没有执行失败的事件";
|
|
644
|
+
}
|
|
645
|
+
function setRecordMode(mode) {
|
|
646
|
+
$("record-mode").value = mode;
|
|
647
|
+
renderTraces();
|
|
644
648
|
}
|
|
645
649
|
function eventState(n) {
|
|
646
650
|
const out = n.output, input = n.input;
|
|
@@ -859,7 +863,7 @@
|
|
|
859
863
|
if (state.failed) {
|
|
860
864
|
row.classList.add("is-error");
|
|
861
865
|
const icon = el("span", "⚠", "event-error-icon");
|
|
862
|
-
icon.setAttribute("role", "img"); icon.setAttribute("aria-label", "
|
|
866
|
+
icon.setAttribute("role", "img"); icon.setAttribute("aria-label", "执行失败"); icon.title = "执行失败";
|
|
863
867
|
label.append(icon);
|
|
864
868
|
}
|
|
865
869
|
label.append(el("span", name, "node-name"));
|
|
@@ -963,9 +967,12 @@
|
|
|
963
967
|
$("summary").textContent = notes.join(" · ");
|
|
964
968
|
$("session-stats").textContent = `${native.length} Trace · ${order.length} 条事件 · ${data.issues.length} 问题`;
|
|
965
969
|
scroller.parentElement.classList.toggle("single", tracks.length === 1 || displayedScope !== null);
|
|
966
|
-
|
|
970
|
+
const filtered = filteredRows();
|
|
971
|
+
streamRows = filtered.rows;
|
|
972
|
+
syncRecordMode(filtered.failed);
|
|
967
973
|
displayRows = buildDisplayRows(streamRows);
|
|
968
|
-
$("trace-count").textContent =
|
|
974
|
+
$("trace-count").textContent = $("record-mode").value === "error"
|
|
975
|
+
? `失败 ${streamRows.length} / ${filtered.total} 条` : `${streamRows.length} 条`;
|
|
969
976
|
if (eventFocus) $("trace-count").textContent = streamRows.length === eventFocus.indices.length
|
|
970
977
|
? `${streamRows.length} 条事件` : `${streamRows.length} / ${eventFocus.indices.length} 条事件`;
|
|
971
978
|
const related = new Set((investigation?.item.fragments || []).filter(p => p.capture_id === currentCapture?.id).flatMap(p => p.anchors));
|
|
@@ -1289,7 +1296,9 @@
|
|
|
1289
1296
|
if (currentCapture) $("capture-filter").value = currentCapture.id;
|
|
1290
1297
|
$("capture-filter").onchange = () => { investigation = null; scopeBefore = null; railFilter = null; chooseCapture(); renderIssueRail(); renderTraces(); };
|
|
1291
1298
|
$("trace-filter").onchange = () => focusTrace(scope());
|
|
1292
|
-
for (const id of ["trace-search","type-filter"
|
|
1299
|
+
for (const id of ["trace-search","type-filter"]) $(id).addEventListener(id === "trace-search" ? "input" : "change", () => renderTraces());
|
|
1300
|
+
$("record-all").onclick = () => setRecordMode("");
|
|
1301
|
+
$("record-failed").onclick = () => setRecordMode("error");
|
|
1293
1302
|
$("issue-search").oninput = () => { railFilter = null; renderIssueRail(); };
|
|
1294
1303
|
const collapsed = localStorage.getItem(RAIL_KEY) === "1";
|
|
1295
1304
|
document.body.classList.toggle("rail-collapsed", collapsed);
|
{agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/page.html
RENAMED
|
@@ -60,9 +60,8 @@
|
|
|
60
60
|
</section>
|
|
61
61
|
<section class="record-panel" aria-labelledby="records-title">
|
|
62
62
|
<div class="records-heading">
|
|
63
|
-
<div class="records-title"><h2 id="records-title">事件</h2><span id="event-range" class="muted" hidden></span><span id="trace-count" class="muted" aria-live="polite"></span><button id="event-reset" type="button" hidden>返回全部</button></div>
|
|
63
|
+
<div class="records-title"><h2 id="records-title">事件</h2><div class="record-mode" role="group" aria-label="事件范围"><input id="record-mode" type="hidden" value=""><button id="record-all" type="button" aria-pressed="true">全部</button><button id="record-failed" type="button" aria-pressed="false"><span class="record-failed-icon" aria-hidden="true">⚠</span>失败 <span id="record-failed-count" class="record-failed-count">0</span></button></div><span id="event-range" class="muted" hidden></span><span id="trace-count" class="muted" aria-live="polite"></span><button id="event-reset" type="button" hidden>返回全部</button></div>
|
|
64
64
|
<div class="toolbar record-filters">
|
|
65
|
-
<label><span class="sr-only">事件范围</span><select id="record-mode"><option value="">全部事件</option><option value="error">仅看异常</option></select></label>
|
|
66
65
|
<label><span class="sr-only">类型</span><select id="type-filter"></select></label>
|
|
67
66
|
<label class="search-label"><span class="sr-only">搜索事件</span><input id="trace-search" type="search" placeholder="搜索事件或输入输出"></label>
|
|
68
67
|
</div>
|
{agent_tune_kit-2.4.0 → agent_tune_kit-2.4.2}/agent_tune_kit/visualize/assets/trace/styles.css
RENAMED
|
@@ -153,13 +153,24 @@ body.rail-collapsed .rail-list { padding-inline: 4px }
|
|
|
153
153
|
.toolbar { flex-wrap: wrap; gap: 8px }
|
|
154
154
|
.record-filters { gap: 8px; max-width: 100% }
|
|
155
155
|
.record-filters label { display: block; min-width: 0 }
|
|
156
|
-
|
|
156
|
+
/* Failure-only viewing is a visible two-state switch next to the title, not a dropdown, so the failure count shows
|
|
157
|
+
before anyone filters. */
|
|
158
|
+
.record-mode { display: inline-flex; flex-shrink: 0; border: 1px solid var(--line); border-radius: 6px; overflow: hidden; background: white }
|
|
159
|
+
.record-mode button { display: inline-flex; align-items: center; gap: 4px; min-height: 26px; padding: 2px 10px; border: 0; border-radius: 0; background: transparent; color: var(--muted); font-size: 12px; white-space: nowrap }
|
|
160
|
+
.record-mode button + button { border-left: 1px solid var(--line) }
|
|
161
|
+
.record-mode button:hover:not(:disabled) { background: var(--tint) }
|
|
162
|
+
.record-mode button[aria-pressed=true] { background: var(--tint); color: var(--accent); font-weight: 600 }
|
|
163
|
+
.record-mode #record-failed[aria-pressed=true] { background: #fff2f1; color: #b12c21; box-shadow: inset 0 -2px #c0392b }
|
|
164
|
+
.record-failed-icon, .record-failed-count { color: #b12c21 }
|
|
165
|
+
.record-failed-count { font-weight: 600; font-variant-numeric: tabular-nums }
|
|
166
|
+
.record-mode button:disabled { opacity: 1; color: #9aa8b2 }
|
|
167
|
+
.record-mode button:disabled :is(.record-failed-icon, .record-failed-count) { color: inherit; font-weight: 400 }
|
|
157
168
|
#type-filter { width: 142px }
|
|
158
169
|
#trace-search { width: 208px }
|
|
159
170
|
.toolbar select:has(option:checked:not([value=""])) { border-color: #deb493; color: var(--accent) }
|
|
160
171
|
@container (max-width: 650px) {
|
|
161
172
|
.record-filters { display: grid; width: 100%; grid-template-columns: repeat(2,minmax(0,1fr)) }
|
|
162
|
-
.record-filters :is(#
|
|
173
|
+
.record-filters :is(#type-filter,#trace-search) { width: 100% }
|
|
163
174
|
.record-filters .search-label { grid-column: 1/-1 }
|
|
164
175
|
}
|
|
165
176
|
.stream { overflow: hidden; max-height: 100vh; max-height: 100dvh }
|
|
@@ -74,8 +74,13 @@
|
|
|
74
74
|
|
|
75
75
|
// --- small building blocks ------------------------------------------------------------------------------------
|
|
76
76
|
const countBy = issues => { const counts = new Map(); for (const issue of issues) counts.set(issue.progress, (counts.get(issue.progress) || 0) + 1); return counts; };
|
|
77
|
-
const topProgress = counts => [...counts].sort((a, b) => b[1] - a[1] || ORDER.get(a[0]) - ORDER.get(b[0])).slice(0, 2).map(([key, n]) => `${LABEL.get(key)} ${n}`).join(" · ");
|
|
78
77
|
const flag = (text, bad) => el("span", text, bad ? "flag bad" : "flag");
|
|
78
|
+
// Cards do not repeat routine progress (the state filter and drawers carry it); they only flag the same results the
|
|
79
|
+
// session attention notes call out: failed verification and inconclusive verdicts.
|
|
80
|
+
const attentionFlags = counts => [
|
|
81
|
+
...(counts.get("fail") ? [flag(`验证失败 ${counts.get("fail")}`, true)] : []),
|
|
82
|
+
...(counts.get("inconclusive") ? [flag(`无法判断 ${counts.get("inconclusive")}`)] : []),
|
|
83
|
+
];
|
|
79
84
|
const copyText = async text => {
|
|
80
85
|
try { await navigator.clipboard.writeText(text); return true; } catch { /* file:// pages may refuse; fall back below */ }
|
|
81
86
|
try {
|
|
@@ -262,7 +267,7 @@
|
|
|
262
267
|
if (matched.length) {
|
|
263
268
|
const counts = countBy(matched);
|
|
264
269
|
const row = el("div", undefined, "card-count");
|
|
265
|
-
row.append(el("strong", `${matched.length} 个问题`),
|
|
270
|
+
row.append(el("strong", `${matched.length} 个问题`), ...attentionFlags(counts));
|
|
266
271
|
card.append(row);
|
|
267
272
|
} else card.append(el("div", "无保留问题(不代表会话正确)", "card-count muted"));
|
|
268
273
|
const perCategory = new Map(); let none = 0;
|
|
@@ -308,9 +313,9 @@
|
|
|
308
313
|
card.append(head, el("div", info ? info.definition : "分类词表中没有这条分类,按分类 ID 显示。", "card-definition"));
|
|
309
314
|
const counts = countBy(items.map(item => item.issue));
|
|
310
315
|
const row = el("div", undefined, "card-count");
|
|
311
|
-
row.append(el("strong", `${new Set(items.map(item => item.s.dir)).size} 个会话 · ${items.length} 个问题`), el("span", latestOf(items) < 0 ? "发生时间未记录" : `最近发生 ${when(latestOf(items))}`, "muted"));
|
|
316
|
+
row.append(el("strong", `${new Set(items.map(item => item.s.dir)).size} 个会话 · ${items.length} 个问题`), el("span", latestOf(items) < 0 ? "发生时间未记录" : `最近发生 ${when(latestOf(items))}`, "muted"), ...attentionFlags(counts));
|
|
312
317
|
card.append(projectLine(items.map(({issue}) => issue)));
|
|
313
|
-
card.append(row
|
|
318
|
+
card.append(row);
|
|
314
319
|
return card;
|
|
315
320
|
}
|
|
316
321
|
// The distinct projects behind a group of issues; each offered name narrows the issue view to that project.
|
|
@@ -251,7 +251,9 @@ def build_trace_data(project_root, *, session_id, source=None):
|
|
|
251
251
|
display_refs = list(record.get("evidence", []))
|
|
252
252
|
for segment in record.get("segments", []):
|
|
253
253
|
display_refs.extend(segment.get("evidence", []))
|
|
254
|
-
evidence
|
|
254
|
+
# Shared evidence keeps one display index so it cannot reappear as an unclaimed point.
|
|
255
|
+
display_keys = dict.fromkeys(_reference_key(ref) for ref in display_refs)
|
|
256
|
+
evidence = [references[key] for key in display_keys if key in references]
|
|
255
257
|
# Fragment refs index into this combined list (top-level + segment evidence).
|
|
256
258
|
item["evidence"] = evidence
|
|
257
259
|
segments = record.get("segments") or []
|
|
@@ -203,7 +203,9 @@ CSV-only judgments remain supported. Integrity is distinct from coverage, source
|
|
|
203
203
|
|
|
204
204
|
## Uncertainty confirmation pattern
|
|
205
205
|
|
|
206
|
-
|
|
206
|
+
Trace optimization additionally follows the [implementation plan confirmation workflow](trace-tuning.md): prepare the concrete file-level plan in chat, obtain confirmation, then save the final plan and modify the implementation. This applies even to reversible implementation edits; reuse an unchanged plan already confirmed in the conversation.
|
|
207
|
+
|
|
208
|
+
Outside that Trace implementation confirmation, each Skill should inspect repository files first, state the evidence it found, and ask a concise confirmation question only when acting without confirmation would likely corrupt data, write the wrong files, or misinterpret evaluation results.
|
|
207
209
|
|
|
208
210
|
Ask before proceeding when any of these remain unresolved after inspection:
|
|
209
211
|
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
| 会话卡片、分类卡片 | 与 `.issue-card` 相同:白底、`--line` 边框、8px 圆角;悬停时 `--tint` 底色和 `#e4b89b` 边框;选中时左侧 3px `--brand` 内描边 |
|
|
150
150
|
| ID 文本 | `.issue-id-text`:`--accent` 色、等宽、12px 粗体 |
|
|
151
151
|
| 分类标签 | `.seg-chip` 配色:`#fff8f1` 底、`--accent` 文字、4px 圆角 |
|
|
152
|
-
| 进度条 | 不使用(2026-11-11
|
|
152
|
+
| 进度条 | 不使用(2026-11-11 确认):页签顶部不展示通用进度条或概况指标块,会话卡片和分类卡片也不展示进度条或常规进度文字,只用提醒标记写验证失败和无法判断 |
|
|
153
153
|
| 提醒 | 与 `.warning` 相同的黄底边框;卡片内使用紧凑版 |
|
|
154
154
|
| 抽屉 | 同一 `.drawer`:右侧覆盖、非模态、默认 480px、可拖宽;窄屏从底部弹出;`Esc` 关闭。大盘的抽屉是进入会话页前的预览(2026-11-10 起):点击页面空白处、再次点击当前卡片或按 `Esc` 关闭,点击其他卡片直接切换;点击抽屉内、筛选、搜索、页签和链接不关闭;出现时有 0.18 秒滑入,系统要求减少动效时不播放。单会话页抽屉不变 |
|
|
155
155
|
| 抽屉中的问题列表 | 行样式参照 `.trace-row`:40px 行高、`#edf0f3` 分隔线、悬停 `#f5f9fa`;进度用 `.progress-dot` |
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
|
|
173
173
|
- **维度切换**:默认显示会话维度,当前维度写入 URL hash。
|
|
174
174
|
- **顶栏统计**(2026-11-11 确认):只写会话数、问题数;所有会话环境相同时追加“环境 <environment>”。不写获取方式(`source.type`,如 `local` 本地导入),也不写页面生成时间。
|
|
175
|
-
- **页签内容**(2026-11-11
|
|
175
|
+
- **页签内容**(2026-11-11 确认):不展示四块概况指标或通用进度条。会话页只在存在无法判断、验证失败或记录读取失败时显示按会话去重的关注提示;问题页保留紧凑的处理状态筛选。下方卡片及详情抽屉保留。卡片不重复常规进度(待诊断、已诊断、验证通过等),只在存在验证失败或无法判断时在数量行末加提醒标记,口径与会话页关注提示一致(2026-11-11 确认)。按状态查看用处理状态筛选,单个问题的进度在抽屉列表中显示。
|
|
176
176
|
- **筛选**:搜索(Session ID、Issue ID、标题、分类名)和来源在两个维度间共享。处理状态和关联项目仅作用于问题页,切回时恢复选择;状态选项包含“全部”和数量不为 0 的状态,再次点击已选状态或选择“全部”取消状态筛选。项目有多个来源时才显示来源/环境下拉框。
|
|
177
177
|
- **数量口径**:状态选项数量按搜索、来源及关联项目范围统计,便于切换状态;分类卡片、排序、未分类通栏及抽屉中的匹配数量按全部当前筛选计算。只有筛选生效时显示结果数量和“清除筛选”,该按钮清除当前维度生效的筛选。
|
|
178
178
|
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
│ SES_…830912 ⧉ │ │ cb27cb0f-… ⧉ │
|
|
184
184
|
│ 发生于 11-06 12:55 │ │ 发生于 11-09 15:01 │
|
|
185
185
|
│ │ │ │
|
|
186
|
-
│ 11 个问题
|
|
186
|
+
│ 11 个问题 │ │ 3 个问题 [无法判断 1] │
|
|
187
187
|
│ │ │ ⚠ 预览需刷新 │
|
|
188
188
|
│ 未分类 11 │ │ 未分类 3 │
|
|
189
189
|
└──────────────────────────────┘ └──────────────────────────────┘
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
| 会话身份 | 缩短的 Session ID,悬停显示全称,可复制 |
|
|
197
197
|
| 发生时间 | 会话本身的开始时间:保留轨迹中最早的事件时间,悬停显示开始至结束;无可用事件时间时写“发生时间未记录”。不显示导入、检测、诊断、修复等处理时间,后者只用于判断预览是否需刷新。无时区的事件时间按运行 ATK 的机器时区解释,与单会话页一致 |
|
|
198
198
|
| 来源 | 仅在存在多个来源时显示,写“环境 <environment>”;环境重名时追加实例,与来源下拉框同样的标签 |
|
|
199
|
-
|
|
|
199
|
+
| 问题数与提醒 | 只写问题数;存在验证失败或无法判断时行末加“验证失败 N”(红色)或“无法判断 N”(黄色)标记。不展示进度条或常规进度 |
|
|
200
200
|
| 主要分类 | 最多 3 个分类标签及数量,其余显示为 `+N`;点击标签切到问题维度并定位该分类 |
|
|
201
201
|
| 提醒 | 仅在需要处理时出现:预览需刷新、记录读取失败 |
|
|
202
202
|
|
|
@@ -234,14 +234,14 @@
|
|
|
234
234
|
│ Shell 路径/参数传递导致反复重试 │ │ 宣称完成但验收证据不足 │
|
|
235
235
|
│ 工具调用因相对路径、stdin 或变量… │ │ 交付结论缺少同条件的行为验证… │
|
|
236
236
|
│ 4 个会话 · 4 个问题 最近发生 11-09│ │ 3 个会话 · 5 个问题 最近发生 11-09│
|
|
237
|
-
│
|
|
237
|
+
│ │ │ [验证失败 1] │
|
|
238
238
|
└──────────────────────────────────┘ └──────────────────────────────────┘
|
|
239
239
|
┌ 未分类 · 37 个问题 · 相关会话下次检测时补充 ──────────────────────────────┐
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
(示意。Magic 现有问题在补分类前都在“未分类”中。)
|
|
243
243
|
|
|
244
|
-
-
|
|
244
|
+
- 分类卡片:分类名、一行定义(超出截断)、会话数与问题数、最近发生时间(所含会话中最晚的开始时间),以及与会话卡片相同的验证失败/无法判断提醒。已弃用的分类加“已弃用”标记,排在正常分类之后。
|
|
245
245
|
- 排序:按筛选后涉及的会话数倒序,相同时依次按问题数、最近发生时间。
|
|
246
246
|
- “未分类”是最后一条通栏,不与正常分类混排。
|
|
247
247
|
|
|
@@ -64,7 +64,11 @@
|
|
|
64
64
|
- 默认按会话时间连续列出全部事件。被任意 Issue 引用的行,末尾显示窄标签(如 `001`),不单独占列。
|
|
65
65
|
- 点击聚合刻痕后,列表只展示该刻痕包含的事件,标题显示所属 Trace、所选时段和事件数;无时间事件显示“时间未知”。列表仍可搜索和筛选,计数显示命中数与组内总数。所选事件集合固定,窗口缩放不会改变成员。
|
|
66
66
|
- “返回全部”恢复进入前的选中事件、滚动位置和筛选;原先有筛选时标为“返回筛选结果”,从问题定位进入时标为“返回问题片段”或“返回问题上下文”。连续点击另一聚合刻痕只替换当前集合,返回目标保持不变。切换 Trace 或快照清除该集合。
|
|
67
|
-
- 聚焦 Trace 后标题显示“事件 · T2
|
|
67
|
+
- 聚焦 Trace 后标题显示“事件 · T2”及当前事件数。事件工具栏仅保留类型和搜索,只筛选列表;Trace 切换位于泳道上方。
|
|
68
|
+
- 事件范围(2026-11-11 确认):不用下拉框,在“事件”标题旁放分段切换 `全部 | ⚠ 失败 N`,用词与状态列的“失败”一致,判定口径与失败行标红相同。
|
|
69
|
+
- N 按当前 Trace 聚焦、聚合刻痕事件集合、类型和搜索统计,不含切换本身,选择前即可看到。
|
|
70
|
+
- N 为 0 且未选中时保留显示但不可点击,表明当前范围没有失败事件;已选中时始终可点,便于看清和取消。
|
|
71
|
+
- 选中时计数写“失败 N / M 条”,M 为同一范围内的事件总数。它与类型、搜索同属列表筛选:进入问题定位或聚合刻痕时清除,退出时按进入前状态恢复。
|
|
68
72
|
- 选中 Issue 后:
|
|
69
73
|
- 恢复完整会话范围,呈现跨 Trace 的所有问题片段;退出问题定位后恢复原来的 Trace 聚焦状态。
|
|
70
74
|
- 范围内行加左侧色条,并插入段头行,显示片段摘要、事件数和时长。
|
|
@@ -97,9 +101,10 @@
|
|
|
97
101
|
|
|
98
102
|
**问题详情**(从问题栏打开):
|
|
99
103
|
|
|
100
|
-
-
|
|
104
|
+
- 顺序:问题详情 → 诊断与方案 → 修改候选 → 实际验证。
|
|
101
105
|
- 正文中的 `ISSUE-001/S2` 是可点击链接,点击后主区定位该片段,抽屉保持打开。
|
|
102
106
|
- 从问题证据进入事件后可返回原问题;问题入口保留在问题栏与片段导航中。
|
|
107
|
+
- “问题详情”展示问题描述、关联项目与保留理由,不重复列出全部关联片段。片段从左栏和主区导航;主区“片段证据(N)”按需在抽屉展示本段引用。无法放入片段的额外证据,以及无片段旧问题的关联证据,仍在问题详情中可访问。
|
|
103
108
|
|
|
104
109
|
### 导航与状态
|
|
105
110
|
|