briefloop 0.22.1__tar.gz → 0.22.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.
- {briefloop-0.22.1 → briefloop-0.22.2}/CHANGELOG.md +7 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/PKG-INFO +1 -1
- briefloop-0.22.2/VERSION +1 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/desktop/electron/package-lock.json +2 -2
- {briefloop-0.22.1 → briefloop-0.22.2}/desktop/electron/package.json +1 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/app.js +96 -31
- briefloop-0.22.2/frontend/report-panels.js +14 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/task-progress.js +1 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/pyproject.toml +1 -1
- briefloop-0.22.2/src/briefloop/__init__.py +1 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/models.py +4 -2
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/research_plan.py +2 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/runtime.py +73 -38
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/server.py +7 -3
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/app.js +87 -85
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/index.html +2 -2
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/style.css +9 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/store.py +2 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/task_progress.py +3 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop.egg-info/PKG-INFO +1 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop.egg-info/SOURCES.txt +4 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_open_brief_status.mjs +1 -1
- briefloop-0.22.2/tests/frontend_pending_report.mjs +18 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_report_outline.mjs +1 -1
- briefloop-0.22.2/tests/frontend_report_panels.mjs +35 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_save_barrier.mjs +1 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_fact_check_orchestration.py +1 -1
- briefloop-0.22.2/tests/test_report_concurrency.py +48 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_research_plan.py +11 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_concurrency.py +1 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_settlement.py +2 -2
- briefloop-0.22.1/VERSION +0 -1
- briefloop-0.22.1/src/briefloop/__init__.py +0 -1
- {briefloop-0.22.1 → briefloop-0.22.2}/.gitattributes +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/CONTRIBUTING.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/KNOWN_ISSUES.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/LICENSE +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/MANIFEST.in +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/README.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/SECURITY.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/THIRD_PARTY_NOTICES.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/bootstrap.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs/architecture.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs/report-time-window.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs/technical-report-0.21.0/evidence-index.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs/technical-report-0.21.0/technical-report.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs/windows.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//344/272/247/345/223/201/345/256/232/344/275/215/344/270/216/351/252/214/350/257/201.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//344/274/232/350/256/256/347/272/252/350/246/201.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//345/215/207/347/272/247/350/257/264/346/230/216.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//345/233/276/350/241/250/344/270/216Excel.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//345/256/232/346/227/266/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//346/212/245/345/221/212/347/274/226/350/276/221/344/270/216/346/250/241/346/235/277.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//346/241/214/351/235/242/345/256/211/350/243/205/344/270/216/346/233/264/346/226/260.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//346/267/261/345/272/246/347/240/224/347/251/266/344/270/216/344/272/213/345/256/236/346/240/270/346/237/245.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//347/211/210/346/234/254/344/270/200/350/207/264/346/200/247/346/243/200/346/237/245.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//350/241/214/344/270/232/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//350/257/201/345/210/270/347/240/224/347/251/266.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//350/257/201/346/215/256/344/270/216/347/273/223/350/256/272/350/277/275/346/272/257.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/docs//350/277/220/350/241/214/346/227/266/351/200/211/346/213/251/344/270/216/346/243/200/346/265/213.md" +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/examples/internal-weekly-report/README.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/examples/internal-weekly-report/report.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/examples/internal-weekly-report/source.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/examples/meeting-minutes/transcript.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/examples/stock-research/earnings-event.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/clipboard.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/connectors.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/mcp-selection.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/notifications.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/polling.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/review-status.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/rich-document.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/runtime-cards.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/schedules.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/frontend/uploads.js +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/package-lock.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/package.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/probes/mcp_m0/README.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/probes/mcp_m0/probe.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/probes/mcp_m0/requirements.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/probes/mcp_m0/server.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/runtime-bridge/README.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/runtime-bridge/bridge.test.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/runtime-bridge/build.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/runtime-bridge/catalog.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/runtime-bridge/main.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/runtime-bridge/pi.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/scripts/build_frontend.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/scripts/build_frontend_licenses.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/scripts/check_versions.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/scripts/test_frontend.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/setup.cfg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/__main__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/_entrypoint.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/agent_commands.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/app_server.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/audit_bundle.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/backends/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/backends/opencode_server.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/bocha.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/bridge_harness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/chat_dispatch.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/chat_execution.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/chat_store.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/chat_tools.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/cli.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/company_context.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/conflicts.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/MATERIALS.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/README.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/config.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/grants.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/materials.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/receipts.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/runtime.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/runtime_tools.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/service.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/stdio_supervisor.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/task_client.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/tasks.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/transport.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/connectors/windows_acl.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/default_fonts.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/deliverable_spec.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/delivery_checks.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/demo.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/document_export.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/document_model.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/document_workflows.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/duckduckgo.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/evidence.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/execution_records.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/export_jobs.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/exports.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/external_client.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/external_requests.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/fact_check.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/fast_mode.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/figure_support.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/figures.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/harness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/host_bins.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/industry_data.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/industry_export.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/interactive_runtime.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/learning.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/length.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/media.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/notifications.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/opencode_harness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/parent_watch.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/platform_support.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/process_host.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/progress.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/projections.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/reconciliation.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/release.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/report_profiles.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/report_time.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/report_tools.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/research_budget.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/review.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/review_learning.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/revision_policy.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/rpc_writer.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/runtime_bridge.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/runtime_permissions.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/schedules.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/scout_tools.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/search_policy.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/skills.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/software_version.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/source_updates.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/sources.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/frontend-licenses.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-aider.png +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-amr.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-antigravity.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-bridge.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-claude.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-codebuddy.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-codex.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-copilot.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-deepseek.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-devin.png +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-grok-build.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-hermes.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-kilo.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-kimi.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-kiro.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-mimo.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-opencode.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-pi.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-qoder.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-qwen.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-reasonix.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-trae-cli.png +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/static/runtime-vibe.svg +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/task_notify.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/tavily.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/templates.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/websearch.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/windows_process.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/word_import.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workbook_figures.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workspace_profile.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/workspaces.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop/zhipu.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop.egg-info/dependency_links.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop.egg-info/entry_points.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop.egg-info/requires.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/briefloop.egg-info/top_level.txt +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/__main__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/_licenses/LICENSE +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/_licenses/NOTICE.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/alfworld/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/alfworld/act.sh +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/alfworld/rollout.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/alfworld/step.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/benchmarks/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/benchmarks/alfworld.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/benchmarks/livemath.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/benchmarks/sealqa.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/cli.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/codex_identity.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/engine.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/feedback_loop.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/isolated/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/isolated/audit.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/isolated/runtime.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/isolated/tools_server.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/jsonl.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/k4_lock.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/livemath/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/livemath/loop.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/livemath/rollout.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/native_agents.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/dataset.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/fetch.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/loop.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/retrieval.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/reward.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/rollout.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/scoring.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/officeqa/wiki_agents.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/paper_alignment/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/paper_alignment/contracts.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/paper_alignment/evidence.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/product.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/product_cli.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/product_install.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/product_views.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/protocol.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/protocol.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/paper_alignment/README.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/roles/executor.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/product/roles/proposer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/snapshot.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/protocol.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/results.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/score_rules.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/scorer_trust.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/sealqa/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/sealqa/loop.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/sealqa/rollout.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/settings.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/skill_proposer.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/spreadsheet/__init__.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/spreadsheet/loop.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/spreadsheet/rollout.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/spreadsheet/study.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/tool_audit.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/wiki.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/src/wikiskill/wiki_maintainer.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/start.ps1 +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/start.sh +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/check_distribution.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_app_updates.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_chat_attachments.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_chat_commands.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_checkout_eol.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_citation_clipboard.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_citation_edit.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_clipboard_fallback.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_fast_mode.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_licenses.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_live_status.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_markdown_import.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_mcp_selection.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_model_label.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_model_selection.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_polling.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_progress_race.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_report_chat_drawer.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_report_load.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_review_status.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_runtime_discovery.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_runtime_feedback.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_settings_workspaces.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_setup_state.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_source_library.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_task_progress.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_template_groups.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_upload_limits.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_welcome_gate.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_workspace_proposal.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/frontend_writing_preferences.mjs +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_agent_backend.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_agent_commands.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_assessment_admission_recovery.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_bridge_harness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_builtin_templates.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_chat_dispatch.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_chat_execution.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_chat_model_selection.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_codex_idle.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_connection_test_history.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_connector_authorization.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_connector_empty_catalog.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_connector_materials.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_connector_tasks.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_connectors.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_core.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_cross_module_regressions.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_delivery_checks.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_demo.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_desktop_lifecycle.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_document_workflows.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_draft_contract.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_entrypoint.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_evidence.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_evidence_parse_failures.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_execution_records.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_export_admission.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_export_layout_swap.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_external_requests.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_fact_check_contract.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_fact_check_phase.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_fact_check_review.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_fact_check_switch.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_fact_status_tool.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_fast_mode.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_figure_exports.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_figure_flow.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_figures.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_harness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_host_bins.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_human_learning.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_industry_export.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_industry_flow.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_industry_research.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_interactive_runtime.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_learning_integrity.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_length.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_media_sources.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_multimodal_harness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_multimodal_http.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_notifications.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_npm_native_shim.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_opencode_harness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_opencode_idle.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_opencode_provider.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_opencode_search_prompt.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_opencode_server_stdin.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_posix_process_tree.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_pr593_roundtrip.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_progress.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_progress_pipeline.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_public_research.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_reader_contract.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_reader_workflow.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_reconciliation.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_release.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_report_path_regressions.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_report_time.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_research_budget.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_research_handoff.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_resume_in_place.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_review.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_review_learning.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_review_packet_paths.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_review_schema_drift.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_review_snapshot.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_review_visual_input.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_revision_policy.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_rich_document.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_role_models.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_bridge.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_bridge_idle.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_json_bom.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_liveness.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_permissions.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_runtime_retry.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_schedules.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_search_policy.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_server_boundary.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_software_version.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_source_recovery_regressions.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_source_updates.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_sources_provenance.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_task_notify.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_task_progress.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_tavily.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_templates.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_version_consistency.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_websearch.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_windows_connector_acl.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_windows_distribution.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_windows_mcp_supervisor.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_windows_platform.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_windows_runtime_bundle.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_word_import.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_word_toc.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_worker_idle.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_workspace_action_errors.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_workspace_profile.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/tests/test_workspaces.py +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/LICENSE +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/NOTICE.md +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/acp/constants.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/acp/json.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/acp/models.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/acp/rpc.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/acp/session-params.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/acp/types.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/byok-reference/byok-opencode.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/byok-reference/provider-models.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/core/index.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/core/json-line-stream.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/runtime-models/codex-models.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/runtime-models/fallbacks.json +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/runtime-models/mmd-routes.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/runtime-models/models.ts +0 -0
- {briefloop-0.22.1 → briefloop-0.22.2}/third_party/open-design/runtime-models/opencode-models.ts +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.22.2
|
|
4
|
+
|
|
5
|
+
- 首页和新建报告提供紧凑研究深度、事实核查与 WikiSkill 控件;默认执行上限 60 分钟,深度研究默认目标 10,000 字、上限 12,000 字,保留用户明确篇幅。
|
|
6
|
+
- 同时生成报告数默认 4,可在设置中调整;Scout 并发独立调整,冻结计划不再受较低预设限制。排队等待与执行时间分别展示。
|
|
7
|
+
- 新报告生成期间显示独立等待页,版本选择器列出排队和生成中报告;已有稿件仍可切换查看。
|
|
8
|
+
- 核查与评分面板轮询保留已有内容,相同结果不重建,旧版本响应不覆盖新版本。
|
|
9
|
+
|
|
3
10
|
## 0.22.1
|
|
4
11
|
|
|
5
12
|
- 修复桌面后台启动 OpenCode 时继承桌面生命周期输入管道、导致服务启动超时的问题;OpenCode HTTP 服务使用独立的空输入,桌面退出检测和所属进程回收继续保留。
|
briefloop-0.22.2/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.22.2
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "briefloop-desktop",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "briefloop-desktop",
|
|
9
|
-
"version": "0.22.
|
|
9
|
+
"version": "0.22.2",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {beginPanel,updatePanel} from './report-panels.js';
|
|
1
2
|
import {taskProgressCard} from './task-progress.js';
|
|
2
3
|
import {copyText} from './clipboard.js';
|
|
3
4
|
import {scheduleUI} from './schedules.js';
|
|
@@ -157,7 +158,7 @@ function openTask(job){
|
|
|
157
158
|
const payload=parse(job.payload);
|
|
158
159
|
const brief=state.briefs.find(b=>b.id===payload.version_id)||state.briefs.find(b=>b.run_id===payload.run_id);
|
|
159
160
|
if(brief){if(!openBrief(brief,{follow:true}))return;pendingRun=null}
|
|
160
|
-
else if(payload.run_id)
|
|
161
|
+
else if(payload.run_id){if(!showPendingReport(payload.run_id))return;}
|
|
161
162
|
page('report');refreshProgress();
|
|
162
163
|
}
|
|
163
164
|
const taskSnapshots=new Map(),taskExpanded=new Set(),taskMaterials=new Set(),taskActions=new Map();
|
|
@@ -293,32 +294,49 @@ function render(first){
|
|
|
293
294
|
if(original&&original.id!==latest?.id)visible.push({brief:original,label:original.author==='example'?'合成示例':'生成原稿'});
|
|
294
295
|
}
|
|
295
296
|
if(current&&!visible.some(v=>v.brief.id===current.id))visible.push({brief:current,label:'正在查看历史快照'});
|
|
296
|
-
|
|
297
|
+
const pendingOptions=state.jobs.filter(j=>j.kind==='generate'&&['queued','running'].includes(j.status)&&!state.briefs.some(b=>b.run_id===parse(j.payload).run_id)).map(j=>{const rid=parse(j.payload).run_id,r=state.runs.find(r=>r.id===rid);return `<option value="run:${esc(rid)}">${esc(parse(r?.requirements).title||'新报告')} · ${j.status==='queued'?'排队中':'正在生成'}</option>`}).join('');
|
|
298
|
+
$('version-select').innerHTML=pendingOptions+visible.map(({brief:b,label})=>`<option value="${b.id}">${esc(parse(b.detail).title||'简报')} · ${label}</option>`).join('');
|
|
297
299
|
if($('version-history'))$('version-history').textContent='编辑历史'+(current?'('+state.briefs.filter(b=>b.run_id===current.run_id&&b.author==='user').length+')':'');
|
|
298
300
|
|
|
299
|
-
tryOpenPending();if(!current&&state.briefs.length)openBrief(state.briefs[0],{follow:true});if(current&&followUpdates&&!dirty&&!saving){const latest=state.briefs.find(b=>b.run_id===current.run_id);if(latest?.parent_id===current.id&&latest.author==='agent')openBrief(latest,{follow:true})}if(current){$('version-select').value=current.id;assessment();citations();renderBriefLength()}
|
|
300
|
-
$('empty').hidden=!!current||state.jobs.length>0;$('document-area').hidden=!current;
|
|
301
|
+
tryOpenPending();if(!current&&!pendingRun&&state.briefs.length)openBrief(state.briefs[0],{follow:true});if(current&&followUpdates&&!dirty&&!saving){const latest=state.briefs.find(b=>b.run_id===current.run_id);if(latest?.parent_id===current.id&&latest.author==='agent')openBrief(latest,{follow:true})}if(current){$('version-select').value=current.id;assessment();citations();renderBriefLength()}
|
|
302
|
+
$('empty').hidden=!!current||state.jobs.length>0;$('document-area').hidden=!current;syncPendingReport();
|
|
301
303
|
$('jobs').innerHTML=state.jobs.filter(j=>j.status!=='dismissed').map(j=>`<div class="job"><span class="tag ${j.status==='failed'?'error':''}">${statuses[j.status]}</span><div class="job-main">${esc(TASK_LABELS[j.kind]||j.kind)}<small>${['export_docx','release','audit_bundle'].includes(j.kind)?'本地脚本':j.kind==='source_refresh'?'来源工具':parse(j.payload).runtime?esc(jobModelLabel(j)):'旧任务:沿用当时本机配置'} · ${j.progress?`第 ${j.progress.round}/${j.progress.k} 轮 · ${{maintainer:'整理经验',proposer:'提出候选',validation:'验证候选'}[j.progress.phase]||j.progress.phase} · `:''}${esc(j.error||(j.kind==='source_refresh'?sourceRefreshOutcome(parse(j.result).outcome):'')||new Date(j.created).toLocaleString())}</small></div>${j.kind==='learn'?`<button data-details="${j.id}">查看比较</button>`:''}${['queued','running'].includes(j.status)?`<button data-stop="${j.id}">停止</button>`:''}${['failed','interrupted','cancelled'].includes(j.status)?`<button data-resume="${j.id}">沿用原模型恢复</button>${['review','learn'].includes(j.kind)?`<button data-retry-current="${j.id}">按当前模型重试</button>`:''}`:''}</div>`).join('');
|
|
302
304
|
document.querySelectorAll('[data-stop]').forEach(b=>b.onclick=()=>action(()=>api('stop',{job_id:b.dataset.stop})));document.querySelectorAll('[data-resume]').forEach(b=>b.onclick=()=>action(()=>api('resume',{job_id:b.dataset.resume})));document.querySelectorAll('[data-retry-current]').forEach(b=>b.onclick=()=>action(()=>api('resume',{job_id:b.dataset.retryCurrent,use_current_model:true})));renderTasks();renderTaskGraph();renderTaskBanner();renderAssistantSummary();renderReportStatus();renderReports();renderSourcesPage();renderTemplatesPage();if($('welcome')&&!$('welcome').hidden)renderWelcome();
|
|
303
305
|
document.querySelectorAll('[data-details]').forEach(b=>b.onclick=()=>action(async()=>{const d=await api('learning-details?job='+b.dataset.details);$('source-title').textContent='技能比较与依据';$('source-original').hidden=true;$('source-provenance').hidden=true;$('source-link').textContent='';$('source-body').textContent=d.rounds.length?d.rounds.map((r,i)=>`第 ${i+1} 轮\n${r.result?.reason||'比较尚未完成'}\n${(r.result?.pairs||[]).map(p=>({better:'候选更好',tie:'差不多,保留原技能',worse:'原稿更好'}[p.verdict])+': '+p.reason).join('\n')}\n\n`+r.cases.map(c=>`任务:${c.requirements.title}\n\n旧版\n${gradeSummary(c.baseline.assessment)}\n${c.baseline.reader_markdown||c.baseline.markdown}\n\n候选\n${gradeSummary(c.candidate.assessment)}\n${c.candidate.reader_markdown||c.candidate.markdown}`).join('\n\n')).join('\n\n'):d.job.error||'比较尚未开始;先整理 Wiki 和提出候选。';$('source-dialog').showModal()}));
|
|
304
306
|
$('skills').innerHTML=`<div class="skill">${state.active_skill?'当前启用 '+esc(state.active_skill):'当前使用基础任务提示词'}${state.active_skill?'<button data-rollback="">回到基础版本</button>':''}</div>`+state.skills.map(s=>`<div class="skill"><strong>${esc(s.id)}</strong><p>${esc(s.reason)}</p>${s.id===state.active_skill?'<span class="tag">正在使用</span>':`<button data-rollback="${s.id}" class="outline">使用这个版本</button>`}</div>`).join('');document.querySelectorAll('[data-rollback]').forEach(b=>b.onclick=()=>action(()=>api('rollback',{skill_id:b.dataset.rollback||null}),'下一轮将使用所选技能'));
|
|
305
307
|
if(state.wiki!==render.wiki){render.wiki=state.wiki;if(state.wiki)api('render',{markdown:state.wiki}).then(r=>$('wiki').innerHTML=r.html);else $('wiki').innerHTML='<h2>还没有学习经验</h2><p class="muted">生成简报后直接改稿,或留下评论。Maintainer 会在这里整理观察、方法与适用条件。</p>'}bindSources();
|
|
306
308
|
}
|
|
309
|
+
function showPendingReport(runId){
|
|
310
|
+
if(dirty||saving){notice('请先保存当前修改,再切换报告',true);return false}
|
|
311
|
+
pendingRun=runId;current=null;followUpdates=true;
|
|
312
|
+
if(editor){editor.destroy();editor=null}
|
|
313
|
+
syncPendingReport();return true;
|
|
314
|
+
}
|
|
315
|
+
function syncPendingReport(){
|
|
316
|
+
const waiting=!!pendingRun&&!current;
|
|
317
|
+
let box=$('pending-report');if(!box){box=document.createElement('div');box.id='pending-report';box.className='empty';$('document-area').before(box)}
|
|
318
|
+
box.hidden=!waiting;$('document-area').hidden=!current;
|
|
319
|
+
for(const id of ['export-menu-toggle','more-menu-toggle','version-history'])if($(id))$(id).hidden=waiting;
|
|
320
|
+
if(!waiting)return;
|
|
321
|
+
const run=state.runs.find(r=>r.id===pendingRun),job=state.jobs.find(j=>j.kind==='generate'&&parse(j.payload).run_id===pendingRun);
|
|
322
|
+
$('report-title').textContent=parse(run?.requirements).title||'新报告';$('save-state').textContent='';$('version-select').value='run:'+pendingRun;
|
|
323
|
+
for(const id of ['brief-length','report-status'])if($(id))$(id).textContent='';
|
|
324
|
+
box.textContent=job?.status==='queued'?'报告已排队,等待生成':job&&['failed','cancelled','interrupted'].includes(job.status)?'报告生成已停止,尚未保存正文':'报告正在生成中';
|
|
325
|
+
}
|
|
307
326
|
function tryOpenPending(){
|
|
308
327
|
if(!pendingRun||dirty||saving)return false;
|
|
309
328
|
const incoming=state?.briefs.find(b=>b.run_id===pendingRun);
|
|
310
329
|
if(incoming&&openBrief(incoming,{follow:true})){pendingRun=null;return true}
|
|
311
330
|
return false;
|
|
312
331
|
}
|
|
313
|
-
function openBrief(b,{follow=false}={}){if(dirty||saving){notice('请先保存当前修改,再切换版本',true);return false}followUpdates=follow;current=b;renderWordExports();$('report-title').textContent=parse(b.detail).title||'简报';updateDownloads(b);if(editor)editor.destroy();highlightQuotes=[];editor=new Editor({element:$('editor'),editable:state.briefs.find(x=>x.run_id===b.run_id)?.id===b.id,extensions:[StarterKit.configure({link:{openOnClick:false},trailingNode:false}),ReportTrailingParagraph,TableKit,ReportImage.configure({HTMLAttributes:{class:'briefloop-figure'},allowBase64:false}),TextStyle,Layout,Citation,Markdown,MustFixHighlight],content:b.editor_document?editorDocument(parse(b.editor_document),b.id):toEditor(b.markdown),...(b.editor_document?{}:{contentType:'markdown'}),onUpdate:changed,onSelectionUpdate:updateFormattingTools});$('markdown-source').value=b.markdown;const historical=state.briefs.find(x=>x.run_id===b.run_id)?.id!==b.id;$('markdown-source').readOnly=historical;$('toolbar').querySelectorAll('button,input,select').forEach(x=>x.disabled=historical);$('save-state').textContent=historical?'历史记录(只读)':b.author==='example'?'合成示例已保存':b.author==='user'?'当前编辑稿已自动保存':'原稿已保存';$('version-select').value=b.id;assessment();citations();renderBriefLength();setReportView('edit');renderReportStatus();renderAssistantSummary();return true}
|
|
332
|
+
function openBrief(b,{follow=false}={}){if(!b)return false;if(dirty||saving){notice('请先保存当前修改,再切换版本',true);return false}pendingRun=null;followUpdates=follow;current=b;syncPendingReport();renderWordExports();$('report-title').textContent=parse(b.detail).title||'简报';updateDownloads(b);if(editor)editor.destroy();highlightQuotes=[];editor=new Editor({element:$('editor'),editable:state.briefs.find(x=>x.run_id===b.run_id)?.id===b.id,extensions:[StarterKit.configure({link:{openOnClick:false},trailingNode:false}),ReportTrailingParagraph,TableKit,ReportImage.configure({HTMLAttributes:{class:'briefloop-figure'},allowBase64:false}),TextStyle,Layout,Citation,Markdown,MustFixHighlight],content:b.editor_document?editorDocument(parse(b.editor_document),b.id):toEditor(b.markdown),...(b.editor_document?{}:{contentType:'markdown'}),onUpdate:changed,onSelectionUpdate:updateFormattingTools});$('markdown-source').value=b.markdown;const historical=state.briefs.find(x=>x.run_id===b.run_id)?.id!==b.id;$('markdown-source').readOnly=historical;$('toolbar').querySelectorAll('button,input,select').forEach(x=>x.disabled=historical);$('save-state').textContent=historical?'历史记录(只读)':b.author==='example'?'合成示例已保存':b.author==='user'?'当前编辑稿已自动保存':'原稿已保存';$('version-select').value=b.id;assessment();citations();renderBriefLength();setReportView('edit');renderReportStatus();renderAssistantSummary();return true}
|
|
314
333
|
async function renderDeliveryChecks(){
|
|
315
334
|
const ticket=(renderDeliveryChecks.ticket||0)+1;renderDeliveryChecks.ticket=ticket;
|
|
316
335
|
if(!current||!$('assessment'))return;const vid=current.id;
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
box
|
|
320
|
-
|
|
321
|
-
let c;try{c=await api('version-checks?version='+encodeURIComponent(vid))}catch(e){if(box.isConnected)box.textContent='检查暂不可用,请稍后重试;未判定通过。';return}
|
|
336
|
+
let box=$('assessment').querySelector('.delivery-checks');
|
|
337
|
+
if(!box){box=document.createElement('div');box.className='delivery-checks';$('assessment').prepend(box)}
|
|
338
|
+
beginPanel(box,vid,dirty?'有未保存修改;下列检查仅针对已保存版本。':'正在检查已保存版本…');
|
|
339
|
+
let c;try{c=await api('version-checks?version='+encodeURIComponent(vid))}catch(e){if(box.isConnected&¤t?.id===vid&&ticket===renderDeliveryChecks.ticket)updatePanel(box,'检查暂不可用,请稍后重试;未判定通过。');return}
|
|
322
340
|
if(!current||current.id!==vid||ticket!==renderDeliveryChecks.ticket||!box.isConnected)return;
|
|
323
341
|
const parts=[];
|
|
324
342
|
if(dirty)parts.push('<span class="tag">有未保存修改;仅检查已保存版本</span>');
|
|
@@ -340,11 +358,11 @@ async function renderDeliveryChecks(){
|
|
|
340
358
|
parts.push(findings.length?`<span class="tag error">版式:${esc(findings.join(';'))}</span>`:'<span class="tag">版式:标题层级、表头与空标题检查通过</span>');
|
|
341
359
|
}
|
|
342
360
|
if(c.assessment_overall)parts.push(`<span class="tag">模型评分:${esc(c.assessment_overall)}</span>`);
|
|
343
|
-
box
|
|
361
|
+
updatePanel(box,'<strong>已保存版本检查</strong> '+parts.join(' ')+'<p class="help">数值检查仅覆盖已提交并成功定位的绑定,不代表正文数字已全部核验;事实含义、研究覆盖与交付质量仍需评价。</p>');
|
|
344
362
|
}
|
|
345
363
|
|
|
346
|
-
function changed(){followUpdates=false;dirty=true;renderDeliveryChecks.ticket=(renderDeliveryChecks.ticket||0)+1;const check=$('assessment').querySelector('.delivery-checks');if(check)check
|
|
347
|
-
$('version-select').onchange=e=>openBrief(state.briefs.find(b=>b.id===
|
|
364
|
+
function changed(){followUpdates=false;dirty=true;renderDeliveryChecks.ticket=(renderDeliveryChecks.ticket||0)+1;const check=$('assessment').querySelector('.delivery-checks');if(check)updatePanel(check,'有未保存修改;保存后重新检查。');renderBriefLength();$('save-state').textContent='有未保存修改';clearTimeout(saveTimer);saveTimer=setTimeout(save,1400)}
|
|
365
|
+
$('version-select').onchange=e=>{const value=e.target.value;if(value.startsWith('run:'))showPendingReport(value.slice(4));else openBrief(state.briefs.find(b=>b.id===value));refreshProgress()};
|
|
348
366
|
let savePromise=null,lastSaveError=null;
|
|
349
367
|
function save(){
|
|
350
368
|
if(savePromise)return savePromise;
|
|
@@ -391,8 +409,8 @@ function scheduleLearning(){ /* Worker consumes the durable feedback after inact
|
|
|
391
409
|
async function renderReportIssues(){
|
|
392
410
|
const ticket=(renderReportIssues.ticket||0)+1;renderReportIssues.ticket=ticket;
|
|
393
411
|
const box=$('report-issues');if(!box||!current)return;
|
|
394
|
-
const vid=current.id;box
|
|
395
|
-
let data;try{data=await api('review-status?version='+encodeURIComponent(vid))}catch(e){if(box.isConnected&¤t?.id===vid&&ticket===renderReportIssues.ticket)box
|
|
412
|
+
const vid=current.id;beginPanel(box,vid,'<p class="help">正在读取问题…</p>');
|
|
413
|
+
let data;try{data=await api('review-status?version='+encodeURIComponent(vid))}catch(e){if(box.isConnected&¤t?.id===vid&&ticket===renderReportIssues.ticket)updatePanel(box,'<p class="help">问题清单暂不可用,请稍后重试。</p>');return}
|
|
396
414
|
if(!current||current.id!==vid||ticket!==renderReportIssues.ticket)return;
|
|
397
415
|
const kinds={contradiction:'实质矛盾',insufficient_evidence:'证据不足',missing_requirement:'要求缺口',missing_binding:'未绑定正文',execution_gap:'执行缺口',expression:'表达问题'};
|
|
398
416
|
const cards=[];
|
|
@@ -422,9 +440,9 @@ async function renderReportIssues(){
|
|
|
422
440
|
}
|
|
423
441
|
if(reconciliation&&reconciliation.stale)notes.push('来源或时间注释已变化,对照记录需更新');
|
|
424
442
|
if(reconciliation&&reconciliation.error)notes.push('对照记录不可用:'+reconciliation.error);
|
|
425
|
-
box
|
|
443
|
+
updatePanel(box,(cards.length||notes.length)
|
|
426
444
|
? `${cards.length?`<div class="issue-head"><strong>需要处理 ${cards.length} 项</strong></div>`:''}${cards.map(card=>`<details class="issue-card ${card.tone}"><summary><span class="issue-label">${esc(card.label)}</span><strong>${esc(card.title)}</strong></summary>${card.basis?`<p class="issue-basis">${esc(card.basis)}</p>`:''}${card.scope?`<p class="help">关联:${esc(card.scope)}</p>`:''}${card.action?`<p>${esc(card.action)}</p>`:''}<p class="help">状态:${esc(card.state)}</p></details>`).join('')}${notes.length?`<p class="help">${notes.map(esc).join(' · ')}</p>`:''}`
|
|
427
|
-
: '<p class="help">暂未发现需要处理的问题;独立审阅完成后会更新。</p>';
|
|
445
|
+
: '<p class="help">暂未发现需要处理的问题;独立审阅完成后会更新。</p>');
|
|
428
446
|
}
|
|
429
447
|
const RELATION_LABELS={compatible:'可合并',different_scope:'口径不同',temporal_sequence:'时间演进',correction:'明确更正',supersession:'替代',republication:'转载',attributed_difference:'归属分歧',contradiction:'实质矛盾',unknown:'无法判断'};
|
|
430
448
|
async function renderFactChecks(){
|
|
@@ -432,17 +450,17 @@ async function renderFactChecks(){
|
|
|
432
450
|
// links, execution status on its own line; never part of the report body.
|
|
433
451
|
const box=$('fact-checks');if(!box||!current)return;
|
|
434
452
|
const ticket=(renderFactChecks.ticket||0)+1;renderFactChecks.ticket=ticket;
|
|
435
|
-
const vid=current.id;box
|
|
453
|
+
const vid=current.id;beginPanel(box,vid);
|
|
436
454
|
let data;try{data=await api('fact-checks?version='+encodeURIComponent(vid))}catch(e){return}
|
|
437
455
|
if(!current||current.id!==vid||ticket!==renderFactChecks.ticket||!box.isConnected)return;
|
|
438
|
-
box
|
|
456
|
+
updatePanel(box,factCheckHTML(data));if(box.innerHTML)bindSources();
|
|
439
457
|
box.querySelectorAll('[data-fact-grant]').forEach(b=>b.onclick=()=>action(async()=>{
|
|
440
458
|
await api('fact-check-grant',{version_id:b.dataset.factGrant,limits:{search_requests:6,candidate_urls:30,source_pages:12}});
|
|
441
459
|
notice('已追加核查预算,将在核查阶段计量中生效');
|
|
442
460
|
await renderFactChecks();
|
|
443
461
|
}));
|
|
444
462
|
}
|
|
445
|
-
function assessment(){if(!current)return;queueMicrotask(()=>{renderDeliveryChecks();renderReportIssues();renderFactChecks()});const r=state.assessments.find(a=>a.version_id===current.id);if(!r){highlightQuotes=[];applyHighlights();const pending=reviewPending(current,state.jobs);$('assessment').innerHTML=pending?'<p class="muted">评分将自动进行</p><p class="help">本轮生成完成后,系统会用独立 Evaluator 自动评分,不需要手动点「重新评分」。</p>':'<p class="muted">尚未评分</p><p class="help">你可以先阅读和修改。评分针对这个版本独立运行。</p>';return}const d=parse(r.data),findings=d.findings||[];highlightQuotes=readerHighlights(findings,{expression:d.expression,showSuggestions:showSuggestionMarks}).map(item=>({quote:item.quote,kind:item.kind,title:findingTitle(item.finding),findingIndex:findings.indexOf(item.finding)}));highlightFindings=new Map(findings.map((f,i)=>[String(i),f]));highlightKinds=new Map(highlightQuotes.map(q=>[String(q.findingIndex),q.kind]));applyHighlights();const toggle=`<label class="finding-toggle help"><input type="checkbox" id="show-suggestions" ${showSuggestionMarks?'checked':''}> 显示建议标记(黄);必须修正句始终标红</label>`;$('assessment').innerHTML=`<div class="judgment">${esc(d.overall)}</div><p>${esc(d.summary)}</p><div class="grades">${[['evidence','证据与准确性'],['coverage','覆盖与取舍'],['analysis','分析有效性'],['expression','表达与可用性']].map(([k,l])=>`<div class="grade"><span>${l}</span><strong>${d[k]??'—'}</strong><small>${d[k]?' / 5':''}</small></div>`).join('')}</div><p class="help">等级是本轮要求完成程度,评分可有不同意见。</p>${(typeof d.expression==='number'&&d.expression<=2&&d.overall==='达到要求')?'<p class="help">表达分偏低但总体仍判为「达到要求」,两者不一致;系统会按此安排一次修订,实际以正文和独立审阅为准。</p>':''}${findings.length?toggle:''}${findings.map((f,i)=>`<details class="finding" data-finding="${i}"><summary>${f.severity==='major'?'●':'○'} ${esc(f.description)}</summary>${f.report_quote?`<blockquote>${esc(f.report_quote)}</blockquote>`:''}<p>${esc(f.requirement)}</p><p>${esc(f.evidence)}</p>${f.source_id?`<button data-source="${esc(f.source_id)}">查看来源 · ${esc(f.locator)}</button>`:''}<p>${esc(f.suggestion)}</p></details>`).join('')}`;bindSources();const toggleEl=$('show-suggestions');if(toggleEl)toggleEl.onchange=()=>{showSuggestionMarks=toggleEl.checked;assessment()}}
|
|
463
|
+
function assessment(){if(!current)return;queueMicrotask(()=>{renderDeliveryChecks();renderReportIssues();renderFactChecks()});const r=state.assessments.find(a=>a.version_id===current.id);const signature=JSON.stringify([current.id,r?.data,reviewPending(current,state.jobs),showSuggestionMarks]);if(assessment.signature===signature&&assessment.editor===editor)return;assessment.signature=signature;assessment.editor=editor;if(!r){highlightQuotes=[];applyHighlights();const pending=reviewPending(current,state.jobs);$('assessment').innerHTML=pending?'<p class="muted">评分将自动进行</p><p class="help">本轮生成完成后,系统会用独立 Evaluator 自动评分,不需要手动点「重新评分」。</p>':'<p class="muted">尚未评分</p><p class="help">你可以先阅读和修改。评分针对这个版本独立运行。</p>';return}const d=parse(r.data),findings=d.findings||[];highlightQuotes=readerHighlights(findings,{expression:d.expression,showSuggestions:showSuggestionMarks}).map(item=>({quote:item.quote,kind:item.kind,title:findingTitle(item.finding),findingIndex:findings.indexOf(item.finding)}));highlightFindings=new Map(findings.map((f,i)=>[String(i),f]));highlightKinds=new Map(highlightQuotes.map(q=>[String(q.findingIndex),q.kind]));applyHighlights();const toggle=`<label class="finding-toggle help"><input type="checkbox" id="show-suggestions" ${showSuggestionMarks?'checked':''}> 显示建议标记(黄);必须修正句始终标红</label>`;$('assessment').innerHTML=`<div class="judgment">${esc(d.overall)}</div><p>${esc(d.summary)}</p><div class="grades">${[['evidence','证据与准确性'],['coverage','覆盖与取舍'],['analysis','分析有效性'],['expression','表达与可用性']].map(([k,l])=>`<div class="grade"><span>${l}</span><strong>${d[k]??'—'}</strong><small>${d[k]?' / 5':''}</small></div>`).join('')}</div><p class="help">等级是本轮要求完成程度,评分可有不同意见。</p>${(typeof d.expression==='number'&&d.expression<=2&&d.overall==='达到要求')?'<p class="help">表达分偏低但总体仍判为「达到要求」,两者不一致;系统会按此安排一次修订,实际以正文和独立审阅为准。</p>':''}${findings.length?toggle:''}${findings.map((f,i)=>`<details class="finding" data-finding="${i}"><summary>${f.severity==='major'?'●':'○'} ${esc(f.description)}</summary>${f.report_quote?`<blockquote>${esc(f.report_quote)}</blockquote>`:''}<p>${esc(f.requirement)}</p><p>${esc(f.evidence)}</p>${f.source_id?`<button data-source="${esc(f.source_id)}">查看来源 · ${esc(f.locator)}</button>`:''}<p>${esc(f.suggestion)}</p></details>`).join('')}`;bindSources();const toggleEl=$('show-suggestions');if(toggleEl)toggleEl.onchange=()=>{showSuggestionMarks=toggleEl.checked;assessment()}}
|
|
446
464
|
function citations(){const detail=parse(current.detail),derived=new Set((detail.content_citations||[]).map(r=>r.source_id));const refs=(detail.citations||[]).filter(r=>derived.has(r.source_id)||toEditor(current.markdown).includes('#source-'+r.source_id));$('citations').innerHTML=refs.length?'引用来源 '+refs.map(r=>`<button data-source="${esc(r.source_id)}">${esc(state.sources.find(s=>s.id===r.source_id)?.name||r.source_id)} · ${esc(r.locator)}</button>`).join(''):'尚无引用记录';bindSources()}
|
|
447
465
|
function bindSources(){document.querySelectorAll('[data-source]').forEach(b=>b.onclick=()=>action(async()=>{const r=await api('source?id='+b.dataset.source);showSource(r)}))}
|
|
448
466
|
$('close-source').onclick=()=>$('source-dialog').close();
|
|
@@ -456,11 +474,11 @@ async function previewReportTime(){
|
|
|
456
474
|
try{const requirements={title:form.elements.title.value||'预览',objective:form.elements.objective.value||'预览'};for(const key of ['period','period_start','period_end','report_timezone'])requirements[key]=form.elements[key].value;const t=await api('report-time-preview',{requirements});if(ticket!==reportTimePreviewTicket)return;box.textContent=`系统日期:${t.today} · ${t.timezone};报告范围:${t.start} 至 ${t.end_exclusive}(不含结束时刻)。提交时冻结。`;}catch(e){if(ticket===reportTimePreviewTicket)box.textContent=e.message}
|
|
457
475
|
}
|
|
458
476
|
for(const key of ['period','period_start','period_end','report_timezone'])$('requirements').elements[key].addEventListener('change',previewReportTime);
|
|
459
|
-
$('requirements').onsubmit=e=>{e.preventDefault();action(async()=>{const f=new FormData(e.target),req=Object.fromEntries(f.entries());if(req.writing_mode==='internal_report'&&state.settings.company_context_enabled==null){$('company-choice-dialog').showModal();return}req.allow_web=f.has('allow_web');req.fact_check=f.has('fact_check');req.target_words=Number(req.target_words);req.max_words=Number(req.max_words);req.research_budget=readResearchBudget();req.search_policy=readSearchPolicy();Object.assign(req,readWorkflowChoice());req.reference_source_ids=[...referenceSelected];req.template_id=req.template_id||null;req.sections=readTemplateSections();req.key_questions=(req.key_questions_text||'').split('\n').map(x=>x.trim()).filter(Boolean);delete req.key_questions_text;req.manual_sections=(req.manual_sections_text||'').split('\n').map(x=>x.trim()).filter(Boolean);for(const title of req.manual_sections){const found=req.sections.find(s=>s.title===title);if(found){found.mode='manual';found.placeholder='待填充'}}delete req.manual_sections_text;preserveWritingPreferences(req,state.requirements,writingPreferencesOverride);req.raw_input=req.objective;delete req.runtime_model;delete req.runtime_effort;await saveModel();if(current)await savedVersion();const connector_selection=reportMcpSelection.selection();const job=await api('generate',{...(connector_selection?{connector_selection}:{}),requirements:req,session_id:chat.id||undefined,source_ids:[...selected].filter(id=>!req.reference_source_ids.includes(id))});
|
|
477
|
+
$('requirements').onsubmit=e=>{e.preventDefault();action(async()=>{const f=new FormData(e.target),req=Object.fromEntries(f.entries());if(req.writing_mode==='internal_report'&&state.settings.company_context_enabled==null){$('company-choice-dialog').showModal();return}req.allow_web=f.has('allow_web');req.fact_check=f.has('fact_check');req.target_words=Number(req.target_words);req.max_words=Number(req.max_words);req.research_budget=readResearchBudget();req.search_policy=readSearchPolicy();Object.assign(req,readWorkflowChoice());req.reference_source_ids=[...referenceSelected];req.template_id=req.template_id||null;req.sections=readTemplateSections();req.key_questions=(req.key_questions_text||'').split('\n').map(x=>x.trim()).filter(Boolean);delete req.key_questions_text;req.manual_sections=(req.manual_sections_text||'').split('\n').map(x=>x.trim()).filter(Boolean);for(const title of req.manual_sections){const found=req.sections.find(s=>s.title===title);if(found){found.mode='manual';found.placeholder='待填充'}}delete req.manual_sections_text;preserveWritingPreferences(req,state.requirements,writingPreferencesOverride);req.raw_input=req.objective;delete req.runtime_model;delete req.runtime_effort;await saveModel();if(current)await savedVersion();const connector_selection=reportMcpSelection.selection();const job=await api('generate',{...(connector_selection?{connector_selection}:{}),requirements:req,session_id:chat.id||undefined,source_ids:[...selected].filter(id=>!req.reference_source_ids.includes(id))});showPendingReport(parse(job.payload).run_id);page('report');notice('任务已排队,后台会生成简报')})};
|
|
460
478
|
$('upload').onchange=e=>action(async()=>{preflightUploads(e.target.files,uploadLimits);for(const f of e.target.files){const s=await api('upload',await uploadPayload(f,uploadLimits));selected.add(s.id)}e.target.value=''},'来源已保存');
|
|
461
479
|
$('add-url').onclick=()=>action(async()=>{const s=await api('source-url',{url:$('source-url').value});selected.add(s.id);$('source-url').value='';notice(s.status==='ready'?'网页已读取':'来源已保存,但读取失败:'+s.error,s.status!=='ready')});
|
|
462
480
|
$('rescore').onclick=()=>action(async()=>{await savedVersion();await api('assess',{version_id:current.id,session_id:chat.id||undefined})},'已提交评分');
|
|
463
|
-
$('comment-submit').onclick=()=>action(async()=>{const text=$('comment').value,required=$('comment-required').checked;const version=await savedVersion();await api('comment',{version_id:version,text,learning_intent:required?'explicit_requirement':'feedback'});if($('comment').value===text&&$('comment-required').checked===required){$('comment').value='';$('comment-required').checked=
|
|
481
|
+
$('comment-submit').onclick=()=>action(async()=>{const text=$('comment').value,required=$('comment-required').checked;const version=await savedVersion();await api('comment',{version_id:version,text,learning_intent:required?'explicit_requirement':'feedback'});if($('comment').value===text&&$('comment-required').checked===required){$('comment').value='';$('comment-required').checked=true;}scheduleLearning()},'反馈已保存');
|
|
464
482
|
$('learn-now').onclick=()=>action(async()=>{await savedVersion();clearTimeout(learnTimer);const result=await api('learn',{});notice(result.message||'已提交反馈学习')});
|
|
465
483
|
async function setK(v){const k=Math.max(1,Math.min(20,Number(v)||1));$('rounds').value=k;await action(()=>api('settings',{k}),'轮数已保存,下一批生效')}
|
|
466
484
|
$('rounds').onchange=e=>setK(e.target.value);$('k-minus').onclick=()=>setK(Number($('rounds').value)-1);$('k-plus').onclick=()=>setK(Number($('rounds').value)+1);$('auto-learn').onchange=e=>action(()=>api('settings',{auto_learn:e.target.checked}),'学习偏好已保存');
|
|
@@ -536,10 +554,10 @@ async function refreshProgress(){
|
|
|
536
554
|
$('run-progress').hidden=false;$('run-progress').innerHTML=`<div class="section-title"><h2>${job.status==='queued'?'来源复查已排队':'正在复查来源'}</h2><button class="outline" id="progress-stop">停止任务</button></div><p>${esc(source?.name||'当前来源')}</p><p class="help">按本轮联网范围和预算获取新快照;已有来源与报告保留。复查完成后,来源变化仍需判断和复核。</p>`;
|
|
537
555
|
$('progress-stop').onclick=()=>action(()=>api('stop',{job_id:job.id}));return;
|
|
538
556
|
}
|
|
539
|
-
const [events,live]=await Promise.all([api('events?job='+job.id),api('runtime')]);
|
|
557
|
+
const [events,live]=await Promise.all([api('events?job='+job.id),api('runtime?job_id='+encodeURIComponent(job.id))]);
|
|
540
558
|
if(!isCurrent())return;
|
|
541
559
|
const last=[...events].reverse().find(e=>e.kind==='runtime_progress');
|
|
542
|
-
const p=last?parse(last.data):{};const started=[...events].reverse().find(e=>e.kind==='runtime_started');const start=started?parse(started.data):{};
|
|
560
|
+
const p=last?parse(last.data):{};p.started=[...events].reverse().find(e=>e.kind==='job_started')?.created;const started=[...events].reverse().find(e=>e.kind==='runtime_started');const start=started?parse(started.data):{};
|
|
543
561
|
const taskSession=start.session_id;
|
|
544
562
|
let pendingRequests=[];
|
|
545
563
|
if(taskSession){
|
|
@@ -551,13 +569,13 @@ async function refreshProgress(){
|
|
|
551
569
|
const req=run?parse(run.requirements):{};
|
|
552
570
|
const agents=p.agents||[];
|
|
553
571
|
const stageLabel=typeof p.stage==='string'?p.stage:(p.stages||[]).find(item=>item.status==='active')?.label;
|
|
554
|
-
const elapsed=Math.max(0,Math.floor((Date.now()-new Date(job.created))/1000));
|
|
572
|
+
const elapsed=Math.max(0,Math.floor((Date.now()-new Date(p.started||job.created))/1000));
|
|
555
573
|
const mins=Math.floor(elapsed/60),secs=elapsed%60;
|
|
556
574
|
// Independent review/check jobs need not own the main runtime's PID.
|
|
557
575
|
const running=job.status==='running';
|
|
558
576
|
const labels={running:'进行中',pending_init:'启动中',completed:'已完成',done:'已完成',closed:'已结束',failed:'失败',errored:'失败'};
|
|
559
577
|
$('run-progress').hidden=false;
|
|
560
|
-
$('run-progress').innerHTML=`<div class="section-title"><div><p class="eyebrow">${({learn:'技能学习',review:'独立审阅',assess:'独立评分',revise:'稿件修订',fact_check:'独立事实核查'})[job.kind]||'简报生成'} · ${running?'后台正在运行':'等待后台执行'}</p><h2>${esc(pendingRequests.length?'等待你的确认':stageLabel||(job.status==='queued'?'任务已排队':'正在启动 BriefLoop'))}</h2></div><button class="outline" id="progress-stop">停止任务</button></div><p><strong>${esc(jobModelLabel(job,start))}</strong> · 模型进程 PID ${live.pid||'—'}${live.server_pid?' · 本地服务 PID '+live.server_pid:''}</p><p class="help"
|
|
578
|
+
$('run-progress').innerHTML=`<div class="section-title"><div><p class="eyebrow">${({learn:'技能学习',review:'独立审阅',assess:'独立评分',revise:'稿件修订',fact_check:'独立事实核查'})[job.kind]||'简报生成'} · ${running?'后台正在运行':'等待后台执行'}</p><h2>${esc(pendingRequests.length?'等待你的确认':stageLabel||(job.status==='queued'?'任务已排队':'正在启动 BriefLoop'))}</h2></div><button class="outline" id="progress-stop">停止任务</button></div><p><strong>${esc(jobModelLabel(job,start))}</strong> · 模型进程 PID ${live.pid||'—'}${live.server_pid?' · 本地服务 PID '+live.server_pid:''}</p><p class="help">${job.status==='queued'?'排队等待':p.started?'已执行':'起始时间待确认'} ${job.status==='queued'||p.started?`${mins} 分 ${secs} 秒`:''} · ${state.settings.timeout_minutes===0?'不限时':'单次执行上限 '+state.settings.timeout_minutes+' 分钟'} <button id="progress-timeout" class="subtle-button">调整时限</button>${run?` · ${JSON.parse(run.source_ids).length} 份初始来源 · ${req.allow_web?'允许联网':'仅本地来源'}`:''}</p>${p.message?`<p class="progress-message">${esc(p.message)}</p>`:''}${stageRailHTML(p.stages)||`<div class="agent-progress">${agents.map(a=>`<div><strong>${esc(a.role)}</strong><span>${labels[a.status]||esc(a.status)}</span>${a.task?`<p>${esc(a.task)}</p>`:''}</div>`).join('')}</div>`}<p class="help">${p.draft_ready?'正文已可查看,评分独立完成。':'正文保存后会自动显示;等待子 agent 时可能暂时没有新消息。'}${p.last_activity?' 最近活动:'+new Date(p.last_activity).toLocaleTimeString():''}</p>`;
|
|
561
579
|
if(pendingRequests.length){
|
|
562
580
|
$('run-progress').insertAdjacentHTML('beforeend',`<div class="agent-question" role="status"><strong>有 ${pendingRequests.length} 项操作等待确认</strong><p>打开任务对话,查看具体操作并选择允许、拒绝或补充信息。回答后任务会继续。</p><button id="progress-requests" class="primary">查看并处理</button></div>`);
|
|
563
581
|
$('progress-requests').onclick=()=>selectChat(taskSession);
|
|
@@ -765,7 +783,7 @@ function runtimeChoice(){const model=$('chat-model').value.trim();if(!model)thro
|
|
|
765
783
|
function messageTime(value){const date=new Date(value);return Number.isNaN(date.getTime())?'':date.toLocaleTimeString('zh-CN',{hour:'2-digit',minute:'2-digit',hour12:false})}
|
|
766
784
|
function chatError(text=''){$('chat-error').textContent=text;$('chat-error').hidden=!text}
|
|
767
785
|
function sessionMissing(error){return /会话或消息不存在|会话不存在/.test(String(error&&error.message||error||''))}
|
|
768
|
-
function updateComposer(){renderChatBackendChoice();renderChatRuntimePermissions();const readonly=chat.session&&chat.session.lifecycle&&chat.session.lifecycle!=='active';const active=chatActive(),steering=active&&$('chat-mode').value==='steer';if(steering){const runtime=activeChatRuntime();$('chat-permission').value=runtime.permission||'workspace-write';$('chat-model').value=runtime.model||'';assignEffort('chat-effort',effortValue(runtime,'effort'));$('chat-model-provider').value=runtime.model_provider||'';$('chat-service-tier').value=runtime.service_tier||'';const activeMessage=chat.messages.find(m=>m.role==='user'&&m.turn_id===chat.session?.turn_id);$('chat-allow-web').checked=!!activeMessage?.allow_web} renderFastControls();$('chat-allow-web').disabled=readonly||steering||chat.busy;for(const id of ['chat-model','chat-effort','chat-model-provider','chat-service-tier'])$(id).disabled=readonly||steering||chat.busy;$('chat-permission').disabled=readonly||steering||chat.busy;$('new-session').disabled=chat.busy||chat.uploading>0;$('chat-input').readOnly=chat.busy||readonly;document.querySelectorAll('[data-chat-session]').forEach(b=>b.disabled=chat.busy||chat.uploading>0);$('chat-send').disabled=readonly||chat.busy||chat.uploading>0||(!$('chat-input').value.trim()&&!chat.attachments.size)||!$('chat-model').value.trim();const sendLabel=chat.busy?'发送中…':active?($('chat-mode').value==='steer'?'立即补充':'排队发送'):'发送消息';$('chat-send').textContent=chat.busy?'…':'↑';$('chat-send').setAttribute('aria-label',sendLabel);$('chat-send').title=sendLabel;$('chat-stop').hidden=!sessionBusy(chat.session);$('chat-stop').disabled=chat.busy;$('chat-mode').disabled=!active||chat.busy;$('chat-attach').disabled=readonly||chat.busy||chat.uploading>0;$('attach-existing').disabled=readonly||chat.busy;$('chat-attach').querySelector('span').textContent=chat.uploading?'上传中…':'文件';const model=$('chat-model').value.trim(),label=friendlyModel(model)||'输入模型 ID';$('chat-model').title=model?friendlyModel(model)+' · '+model:'输入模型 ID';if(!model)$('chat-send').title='请先选择模型';const chatBackend=chatBackendChoice();const speed=$('chat-service-tier').hidden?'':($('chat-service-tier').value==='fast'?' · Fast(请求)':$('chat-service-tier').value==='default'?' · 标准':'');const effort=chatBackend==='opencode'?(chat.session?.runtime?.variant||state.settings.model_variant||'模型默认'):($('chat-effort').value==='none'?'模型默认':$('chat-effort').value);$('composer-help').textContent=`Enter 发送 · Shift + Enter 换行 · ${label}${['codex','opencode'].includes(chatBackend)?' / '+effort:''}${speed}${active?' · 立即补充沿用当前联网与模型设置;更改设置请排队到下一回合':''}${model?'':' · 请先从模型列表选择或输入模型 ID'}`}
|
|
786
|
+
function updateComposer(){syncCompactReportControls();renderChatBackendChoice();renderChatRuntimePermissions();const readonly=chat.session&&chat.session.lifecycle&&chat.session.lifecycle!=='active';const active=chatActive(),steering=active&&$('chat-mode').value==='steer';if(steering){const runtime=activeChatRuntime();$('chat-permission').value=runtime.permission||'workspace-write';$('chat-model').value=runtime.model||'';assignEffort('chat-effort',effortValue(runtime,'effort'));$('chat-model-provider').value=runtime.model_provider||'';$('chat-service-tier').value=runtime.service_tier||'';const activeMessage=chat.messages.find(m=>m.role==='user'&&m.turn_id===chat.session?.turn_id);$('chat-allow-web').checked=!!activeMessage?.allow_web} renderFastControls();$('chat-allow-web').disabled=readonly||steering||chat.busy;for(const id of ['chat-model','chat-effort','chat-model-provider','chat-service-tier'])$(id).disabled=readonly||steering||chat.busy;$('chat-permission').disabled=readonly||steering||chat.busy;$('new-session').disabled=chat.busy||chat.uploading>0;$('chat-input').readOnly=chat.busy||readonly;document.querySelectorAll('[data-chat-session]').forEach(b=>b.disabled=chat.busy||chat.uploading>0);$('chat-send').disabled=readonly||chat.busy||chat.uploading>0||(!$('chat-input').value.trim()&&!chat.attachments.size)||!$('chat-model').value.trim();const sendLabel=chat.busy?'发送中…':active?($('chat-mode').value==='steer'?'立即补充':'排队发送'):'发送消息';$('chat-send').textContent=chat.busy?'…':'↑';$('chat-send').setAttribute('aria-label',sendLabel);$('chat-send').title=sendLabel;$('chat-stop').hidden=!sessionBusy(chat.session);$('chat-stop').disabled=chat.busy;$('chat-mode').disabled=!active||chat.busy;$('chat-attach').disabled=readonly||chat.busy||chat.uploading>0;$('attach-existing').disabled=readonly||chat.busy;$('chat-attach').querySelector('span').textContent=chat.uploading?'上传中…':'文件';const model=$('chat-model').value.trim(),label=friendlyModel(model)||'输入模型 ID';$('chat-model').title=model?friendlyModel(model)+' · '+model:'输入模型 ID';if(!model)$('chat-send').title='请先选择模型';const chatBackend=chatBackendChoice();const speed=$('chat-service-tier').hidden?'':($('chat-service-tier').value==='fast'?' · Fast(请求)':$('chat-service-tier').value==='default'?' · 标准':'');const effort=chatBackend==='opencode'?(chat.session?.runtime?.variant||state.settings.model_variant||'模型默认'):($('chat-effort').value==='none'?'模型默认':$('chat-effort').value);$('composer-help').textContent=`Enter 发送 · Shift + Enter 换行 · ${label}${['codex','opencode'].includes(chatBackend)?' / '+effort:''}${speed}${active?' · 立即补充沿用当前联网与模型设置;更改设置请排队到下一回合':''}${model?'':' · 请先从模型列表选择或输入模型 ID'}`}
|
|
769
787
|
function sessionBusy(session){if(!session)return false;if(typeof session.busy==='boolean')return session.busy;return ['starting','running','stopping'].includes(session.status)||!!session.turn_id||(session.id===chat.id&&(chat.messages.some(m=>['queued','sending','delivered','streaming'].includes(m.status))||chat.requests.some(r=>r.status==='pending')))}
|
|
770
788
|
function renderSessions(){
|
|
771
789
|
const signature=JSON.stringify([chat.view,chat.id,chat.sessions]);if(renderSessions.signature===signature)return;renderSessions.signature=signature;$('session-view').value=chat.view;
|
|
@@ -929,7 +947,8 @@ async function sendChat(event){
|
|
|
929
947
|
event.preventDefault();if(chat.busy||chat.uploading||chat.session&&chat.session.lifecycle&&chat.session.lifecycle!=='active')return;const rawInput=$('chat-input').value.trim();const command=/^\/(\w+)(?:\s+([\s\S]*))?$/.exec(rawInput);if(command){const name=command[1].toLowerCase();if(name==='new'){const panel=commandPanel();if(panel)panel.hidden=true;await newChat();return}if(name==='help'){notice(COMMAND_HELP);$('chat-input').value='';const panel=commandPanel();if(panel)panel.hidden=true;updateComposer();return}}const text=rawInput||(chat.attachments.size?'请查看附件。':'');if(!text)return;const discuss=/^\/discuss\b\s*/i.test(text),displayText=text.replace(/^\/discuss\b\s*/i,'').trim()||'讨论需求',sendText=discuss?(DISCUSS_INSTRUCTION+(displayText!=='讨论需求'?('\n\n用户补充:'+displayText):'')):text;chat.home=false;chat.busy=true;chatError();updateComposer();
|
|
930
948
|
try{
|
|
931
949
|
const runtime=runtimeChoice();if(!chat.id){const result=await api('harness/session',{title:displayText.slice(0,48),runtime});chat.session=result.session||result;chat.id=chat.session.id;if(!chat.id)throw Error('未能创建会话');localStorage.setItem('briefloop-chat-session',chat.id);rememberDraft()}
|
|
932
|
-
const
|
|
950
|
+
const reportOptions=compactReportInstruction();
|
|
951
|
+
const payload={session_id:chat.id,text:sendText+reportOptions,display_text:reportOptions||sendText!==displayText?displayText:undefined,mode:chatActive()?$('chat-mode').value:'queue',source_ids:[...chat.attachments],runtime,allow_web:$('chat-allow-web').checked};const signature=JSON.stringify(payload);
|
|
933
952
|
if(!chat.request||chat.request.signature!==signature)chat.request={signature,message_id:crypto.randomUUID()};
|
|
934
953
|
await api('harness/message',{...payload,message_id:chat.request.message_id});chat.request=null;$('chat-input').value='';chat.attachments.clear();rememberDraft();renderAttachments();
|
|
935
954
|
// The runtime used here is the chosen model; keep the pending-selection state in sync.
|
|
@@ -1332,6 +1351,7 @@ for(const id of ['model-select','model-provider'])$(id).addEventListener('input'
|
|
|
1332
1351
|
$('chat-model-provider').oninput=()=>{rememberDraft();updateComposer()};
|
|
1333
1352
|
for(const id of ['chat-model','chat-model-provider','model-select','model-provider'])$(id).addEventListener('keydown',event=>{if(event.key==='Enter'){event.preventDefault();event.stopPropagation();$(id).blur()}});
|
|
1334
1353
|
|
|
1354
|
+
let lengthEdited=false;
|
|
1335
1355
|
const LENGTH_PRESETS={quick:[350,500],compact:[800,1000],balanced:[1500,2000],detailed:[2000,2500]};
|
|
1336
1356
|
function initializeLengthInputs(requirements){
|
|
1337
1357
|
const preset=LENGTH_PRESETS[$('length-preset').value]||LENGTH_PRESETS.balanced;
|
|
@@ -1341,8 +1361,8 @@ function validateLengthInputs(){
|
|
|
1341
1361
|
const target=Number($('target-words').value),maximum=Number($('max-words').value);
|
|
1342
1362
|
$('max-words').setCustomValidity(Number.isInteger(target)&&target>0&&Number.isInteger(maximum)&&maximum>0&&maximum<target?'字数上限不能小于目标字数。':'');
|
|
1343
1363
|
}
|
|
1344
|
-
$('length-preset').onchange=()=>{const [target,maximum]=LENGTH_PRESETS[$('length-preset').value];$('target-words').value=target;$('max-words').value=maximum;validateLengthInputs()};
|
|
1345
|
-
for(const id of ['target-words','max-words'])$(id).oninput=validateLengthInputs;
|
|
1364
|
+
$('length-preset').onchange=()=>{lengthEdited=true;const [target,maximum]=LENGTH_PRESETS[$('length-preset').value];$('target-words').value=target;$('max-words').value=maximum;validateLengthInputs()};
|
|
1365
|
+
for(const id of ['target-words','max-words'])$(id).oninput=()=>{lengthEdited=true;validateLengthInputs()};
|
|
1346
1366
|
function renderBriefLength(){
|
|
1347
1367
|
renderReportDataButton();
|
|
1348
1368
|
const element=$('brief-length');if(!current){element.hidden=true;return}element.hidden=false;
|
|
@@ -1393,7 +1413,7 @@ function initializeResearchBudget(requirements){const budget=requirements.resear
|
|
|
1393
1413
|
function renderBudgetProviderScope(){const p=readSearchPolicy(),native=p.primary_provider==='native'||(p.coverage_mode!=='primary_only'&&p.native_search_enabled);$('budget-provider-scope').textContent='受控 API 渠道共享搜索与候选预算;正文按唯一 URL 计量。'+(native?'宿主原生搜索次数未知,单独显示,不计入受控 API 硬上限。':'')}
|
|
1394
1414
|
$('budget-preset').onchange=()=>{const budget=RESEARCH_BUDGET_PRESETS[$('budget-preset').value];if(budget)for(const [key,id] of Object.entries(BUDGET_FIELDS))$(id).value=budget[key]};
|
|
1395
1415
|
for(const id of Object.values(BUDGET_FIELDS))$(id).oninput=reflectBudgetPreset;
|
|
1396
|
-
$('research-tier').onchange=()=>{const budget=RESEARCH_TIERS[$('research-tier').value];if(!budget)return;for(const [key,id] of Object.entries(BUDGET_FIELDS))$(id).value=budget[key];reflectBudgetPreset();renderBudgetProviderScope()};
|
|
1416
|
+
$('research-tier').onchange=()=>{if($('research-tier').value==='deep'&&!lengthEdited){$('target-words').value=10000;$('max-words').value=12000;validateLengthInputs()}const budget=RESEARCH_TIERS[$('research-tier').value];if(!budget)return;for(const [key,id] of Object.entries(BUDGET_FIELDS))$(id).value=budget[key];reflectBudgetPreset();renderBudgetProviderScope()};
|
|
1397
1417
|
|
|
1398
1418
|
let budgetPolling=false;
|
|
1399
1419
|
function researchBudgetTarget(){
|
|
@@ -2333,3 +2353,48 @@ async function showSearchActivity(runId){
|
|
|
2333
2353
|
}catch(e){$('search-activity-body').textContent=e.message}
|
|
2334
2354
|
}
|
|
2335
2355
|
$('search-activity-close').onclick=()=>$('search-activity-dialog').close();
|
|
2356
|
+
|
|
2357
|
+
// Compact report controls: same component in the composer and creation form.
|
|
2358
|
+
function compactReportInstruction(){
|
|
2359
|
+
const row=document.querySelector('[data-report-options="chat"]');if(!row)return '';
|
|
2360
|
+
const tier=row.querySelector('[data-option="tier"]').value;
|
|
2361
|
+
const fact=row.querySelector('[data-option="fact"]').checked&&$('chat-allow-web').checked;
|
|
2362
|
+
return `\n\n本轮报告选项(仅当用户要求生成报告时使用,不因此自动生成):research_tier=${tier},fact_check=${fact}。生成时传入 requirements;${tier==='deep'?'深度研究建议 8000–12000 字,默认 target_words=10000、max_words=12000;':''}用户正文另有明确选择则按正文。`;
|
|
2363
|
+
}
|
|
2364
|
+
function compactReportControls(where){
|
|
2365
|
+
const row=document.createElement('div');row.className='compact-report-options';row.dataset.reportOptions=where;
|
|
2366
|
+
row.innerHTML='<label>研究 <select data-option="tier" aria-label="研究深度"><option value="quick">快速</option><option value="standard" selected>标准</option><option value="deep">深度研究</option></select></label><label title="生成后联网补查关键主张,增加时间与用量"><input type="checkbox" data-option="fact">事实核查</label><label title="基于反馈提出改进,经比较验证后采用"><input type="checkbox" data-option="learn" checked>WikiSkill</label><label><input type="number" min="1" max="20" value="1" data-option="rounds" aria-label="WikiSkill 轮数">轮</label><details><summary aria-label="更多报告选项">更多 ⋯</summary><div class="compact-options-menu"><label>单次执行上限 <select data-option="timeout"><option value="30">30 分钟</option><option value="60" selected>60 分钟</option><option value="120">120 分钟</option><option value="0">不限时</option></select></label><label>Scout 并发 <input data-option="scouts" type="number" min="1" max="16" value="4"></label></div></details>';
|
|
2367
|
+
row.addEventListener('change',event=>action(async()=>{
|
|
2368
|
+
const key=event.target.dataset.option;if(!key)return;const value=event.target.type==='checkbox'?event.target.checked:event.target.value;
|
|
2369
|
+
if(key==='tier'){$('research-tier').value=value;$('research-tier').dispatchEvent(new Event('change'))}
|
|
2370
|
+
if(key==='fact')$('requirements').elements.fact_check.checked=value;
|
|
2371
|
+
const field={tier:'research_tier',fact:'fact_checker',learn:'auto_learn',rounds:'k',timeout:'timeout_minutes',scouts:'max_parallel'}[key];
|
|
2372
|
+
const setting=['rounds','timeout','scouts'].includes(key)?Number(value):value;
|
|
2373
|
+
await api('settings',{[field]:setting});state.settings[field]=setting;
|
|
2374
|
+
if(key==='learn')$('auto-learn').checked=value;if(key==='rounds')$('rounds').value=value;if(key==='timeout')$('timeout-minutes').value=value;
|
|
2375
|
+
syncCompactReportControls();
|
|
2376
|
+
}));return row;
|
|
2377
|
+
}
|
|
2378
|
+
function syncCompactReportControls(){
|
|
2379
|
+
if(!state?.settings)return;
|
|
2380
|
+
document.querySelectorAll('[data-report-options]').forEach(row=>{
|
|
2381
|
+
const web=row.dataset.reportOptions==='chat'?$('chat-allow-web').checked:$('requirements').elements.allow_web.checked;
|
|
2382
|
+
for(const [key,value] of Object.entries({tier:row.dataset.reportOptions==='setup'?$('research-tier').value:state.settings.research_tier||'standard',fact:row.dataset.reportOptions==='setup'?$('requirements').elements.fact_check.checked:state.settings.fact_checker,learn:state.settings.auto_learn,rounds:state.settings.k,timeout:state.settings.timeout_minutes,scouts:state.settings.max_parallel})){
|
|
2383
|
+
const input=row.querySelector(`[data-option="${key}"]`);if(document.activeElement===input)continue;if(input.type==='checkbox')input.checked=!!value;else input.value=value;
|
|
2384
|
+
}
|
|
2385
|
+
const fact=row.querySelector('[data-option="fact"]');fact.disabled=!web;if(!web)fact.checked=false;
|
|
2386
|
+
});
|
|
2387
|
+
const reports=$('max-reports');if(reports&&document.activeElement!==reports&&!reports.dataset.editing)reports.value=state.settings.max_reports||4;
|
|
2388
|
+
}
|
|
2389
|
+
function mountCompactReportControls(){
|
|
2390
|
+
const form=$('chat-input').closest('form');form.append(compactReportControls('chat'));
|
|
2391
|
+
const setup=compactReportControls('setup');const tier=$('research-tier').closest('label');tier.before(setup);tier.classList.add('compact-legacy-option');tier.hidden=true;
|
|
2392
|
+
if(tier.nextElementSibling?.classList.contains('help'))tier.nextElementSibling.hidden=true;
|
|
2393
|
+
const fact=$('requirements').elements.fact_check.closest('label');fact.classList.add('compact-legacy-option');fact.hidden=true;if(fact.nextElementSibling?.classList.contains('help'))fact.nextElementSibling.hidden=true;
|
|
2394
|
+
const label=document.createElement('label');label.textContent='同时生成报告数 ';const input=document.createElement('input');input.id='max-reports';input.type='number';input.min='1';input.max='16';input.value='4';label.append(input);$('settings-view-execution').append(label);
|
|
2395
|
+
input.oninput=()=>{input.dataset.editing='1'};input.onchange=()=>{const value=Number(input.value);return action(async()=>{const result=await api('settings',{max_reports:value});state.settings.max_reports=result.max_reports;delete input.dataset.editing;notice('并发数已保存;已运行报告继续,新任务按空位开始')})};
|
|
2396
|
+
const save=document.createElement('button');save.type='button';save.className='outline';save.textContent='保存并发数';save.onclick=()=>input.onchange();label.append(save);
|
|
2397
|
+
for(const control of [$('chat-allow-web'),$('requirements').elements.allow_web])control.addEventListener('change',syncCompactReportControls);
|
|
2398
|
+
syncCompactReportControls();
|
|
2399
|
+
}
|
|
2400
|
+
mountCompactReportControls();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Keep the visible result while a refresh is in flight. Replacing identical
|
|
2
|
+
// markup resets expanded findings and can collapse a scrolled review pane.
|
|
3
|
+
export function beginPanel(box,version,placeholder=''){
|
|
4
|
+
if(box.dataset.reportVersion===version)return;
|
|
5
|
+
box.dataset.reportVersion=version;
|
|
6
|
+
box.innerHTML=placeholder;
|
|
7
|
+
box._reportHTML=placeholder;
|
|
8
|
+
}
|
|
9
|
+
export function updatePanel(box,html){
|
|
10
|
+
if(box._reportHTML===html)return false;
|
|
11
|
+
box.innerHTML=html;
|
|
12
|
+
box._reportHTML=html;
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
@@ -16,7 +16,7 @@ export function taskProgressCard(job,p,{label='报告任务',kindLabel='',expand
|
|
|
16
16
|
const stage=(active?(p?.needs_attention?'等待你的确认':p?.stage):states[job.status])||(job.status==='queued'?'等待后台开始':states[job.status]||'读取进度中');
|
|
17
17
|
const workers=p?.agents||[],activeWorkers=workers.filter(w=>['running','pending_init'].includes(w.status));
|
|
18
18
|
const tier={quick:'快速研究',standard:'标准研究',deep:'深度研究'}[p?.tier];
|
|
19
|
-
const meta=[!p&&!error?'正在读取进度':null,tier,p?.round?`第 ${p.round} 轮`:null
|
|
19
|
+
const meta=[!p&&!error?'正在读取进度':null,tier,p?.round?`第 ${p.round} 轮`:null,job.status==='queued'?`已等待 ${elapsedText(job.created,now)} · 尚未执行`:p?.started?`排队 ${elapsedText(p.queued_at||job.created,Date.parse(p.started))} · 已执行 ${elapsedText(p.started,!active?Date.parse(p.ended||job.updated):now)}`:'执行时间待确认',p?.last_activity?`最近活动记录 ${elapsedText(p.last_activity,now)}前`:null].filter(Boolean).join(' · ');
|
|
20
20
|
const chips=p&&p.run_id?[`已保存 ${p.source_count} 份材料`,...(p.search_metered?[`成功搜索 ${p.search_counts.completed} 次`,...(p.search_counts.failed?[`失败 ${p.search_counts.failed} 次`]:[])]:[]),...(activeWorkers.length&&active?[`${activeWorkers.length} 个子任务进行中`]:[])]:[];
|
|
21
21
|
const rail=(p?.stages||[]).map(s=>`<li class="${e(s.status)}"><span aria-hidden="true">${s.status==='done'?'✓':'●'}</span>${e(s.label)}</li>`).join('');
|
|
22
22
|
const timeline=(p?.timeline||[]).map(t=>`<li class="${e(t.status)}"><span class="progress-bullet" aria-hidden="true">${t.status==='done'?'✓':'•'}</span><div><strong>${e(t.label)}</strong>${t.detail?`<p>${e(t.detail)}</p>`:''}</div></li>`).join('');
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "briefloop"
|
|
7
|
-
version = "0.22.
|
|
7
|
+
version = "0.22.2"
|
|
8
8
|
description = "Local multi-runtime agent workbench for sourced briefings, independent review and skill learning"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.22.2"
|
|
@@ -117,7 +117,7 @@ class Requirements(Model):
|
|
|
117
117
|
|
|
118
118
|
@model_validator(mode='after')
|
|
119
119
|
def fill_length_preferences(self):
|
|
120
|
-
target,maximum=(5000,5500) if self.report_profile=="industry_periodic" else LENGTH_PRESETS[self.extent]
|
|
120
|
+
target,maximum=(10000,12000) if self.research_tier=="deep" else (5000,5500) if self.report_profile=="industry_periodic" else LENGTH_PRESETS[self.extent]
|
|
121
121
|
if self.target_words is None:self.target_words=target
|
|
122
122
|
if self.max_words is None:self.max_words=max(maximum,self.target_words)
|
|
123
123
|
if self.max_words<self.target_words:
|
|
@@ -205,14 +205,16 @@ class Settings(RoleModel):
|
|
|
205
205
|
search_policy: SearchPolicy | None = None
|
|
206
206
|
k: int = Field(default=1, ge=1, le=20)
|
|
207
207
|
auto_learn: bool = True
|
|
208
|
+
max_reports: int = Field(default=4, ge=1, le=16)
|
|
208
209
|
max_parallel: int = Field(default=4, ge=1, le=16)
|
|
209
|
-
timeout_minutes: int = Field(default=
|
|
210
|
+
timeout_minutes: int = Field(default=60, ge=0, le=240) # 0 disables the run deadline.
|
|
210
211
|
skill_targets: list[str] = Field(default_factory=lambda: ["scout", "analyst"])
|
|
211
212
|
auto_revision: bool = True
|
|
212
213
|
default_template_id: str | None = None
|
|
213
214
|
company_context_enabled: bool | None = None
|
|
214
215
|
# Workspace-wide default for the per-task fact_check switch; tasks may override.
|
|
215
216
|
fact_checker: bool = False
|
|
217
|
+
research_tier: Literal['quick','standard','deep'] = 'standard'
|
|
216
218
|
|
|
217
219
|
|
|
218
220
|
@model_validator(mode='after')
|
|
@@ -110,6 +110,8 @@ def freeze(store, run_id, *, preset=None, structure=None, owner_job_id=None):
|
|
|
110
110
|
chosen['depth'] = max(1, min(chosen['depth'], budget['search_requests']))
|
|
111
111
|
chosen['breadth'] = max(1, min(chosen['breadth'], budget['search_requests'] // chosen['depth']))
|
|
112
112
|
job = _owner_job(store, run_id)
|
|
113
|
+
if not structure or 'parallel' not in structure:
|
|
114
|
+
chosen['parallel'] = _runtime_snapshot(store, job)['max_parallel']
|
|
113
115
|
snapshot = {
|
|
114
116
|
'research_protocol': PROTOCOL,
|
|
115
117
|
'run_id': run_id,
|