briefloop 0.28.3__tar.gz → 0.28.4__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.28.3 → briefloop-0.28.4}/CHANGELOG.md +9 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/PKG-INFO +1 -1
- briefloop-0.28.4/VERSION +1 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/desktop/electron/package-lock.json +2 -2
- {briefloop-0.28.3 → briefloop-0.28.4}/desktop/electron/package.json +1 -1
- briefloop-0.28.4/docs/release-0.28.4.md +9 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/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 +1 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/app.js +11 -4
- briefloop-0.28.4/frontend/next-report.js +53 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/research-process.js +1 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/pyproject.toml +1 -1
- briefloop-0.28.4/src/briefloop/__init__.py +1 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_tools.py +10 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/external_client.py +7 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/models.py +3 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_orchestrator.py +46 -11
- briefloop-0.28.4/src/briefloop/next_report.py +49 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/progress.py +2 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime.py +2 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/schedules.py +1 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/server.py +9 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/app.js +81 -81
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/index.html +3 -3
- briefloop-0.28.4/src/briefloop/static/release-notes.json +4 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/store.py +10 -2
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/task_progress.py +2 -2
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/PKG-INFO +1 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/SOURCES.txt +7 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/start.sh +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_commands.mjs +1 -1
- briefloop-0.28.4/tests/frontend_next_report.mjs +46 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_form_defaults.mjs +7 -2
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_research_process.mjs +5 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_save_barrier.mjs +6 -1
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_setup_state.mjs +1 -1
- briefloop-0.28.4/tests/test_chat_stop.py +70 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_switch.py +19 -4
- briefloop-0.28.4/tests/test_native_scout_round_paths.py +69 -0
- briefloop-0.28.4/tests/test_next_report.py +73 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_capability.py +2 -2
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_scout_coverage.py +49 -0
- briefloop-0.28.3/VERSION +0 -1
- briefloop-0.28.3/src/briefloop/__init__.py +0 -1
- briefloop-0.28.3/src/briefloop/static/release-notes.json +0 -4
- {briefloop-0.28.3 → briefloop-0.28.4}/.gitattributes +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/CONTRIBUTING.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/KNOWN_ISSUES.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/LICENSE +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/MANIFEST.in +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/README.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/SECURITY.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/THIRD_PARTY_NOTICES.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/bootstrap.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/architecture.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/compose/spec/home-v2.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/design-v3.1-validation.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/dmg-density-validation.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/draft-first.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/jev-precheck.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/native-integration.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/quality-reading-context.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.1.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.2.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.3.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.4.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.27.0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.1.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.2.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.3.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/report-length.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/report-time-window.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/report-version-information.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/research-handoff.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/revision-learning.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/sqlite-benchmark.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/technical-report-0.21.0/evidence-index.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/technical-report-0.21.0/technical-report.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/windows.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs/writer-input.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/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.28.3 → briefloop-0.28.4}/docs//344/274/232/350/256/256/347/272/252/350/246/201.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/206/205/347/275/256/345/274/225/346/223/216.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/215/207/347/272/247/350/257/264/346/230/216.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/233/276/350/241/250/344/270/216Excel.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/256/232/346/227/266/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/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.28.3 → briefloop-0.28.4}/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.28.3 → briefloop-0.28.4}/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.28.3 → briefloop-0.28.4}/docs//350/241/214/344/270/232/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/docs//350/257/201/345/210/270/347/240/224/347/251/266.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/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.28.3 → briefloop-0.28.4}/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.28.3 → briefloop-0.28.4}/docs//351/252/214/346/224/266/350/256/260/345/275/225.md" +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/examples/internal-weekly-report/README.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/examples/internal-weekly-report/report.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/examples/internal-weekly-report/source.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/examples/meeting-minutes/transcript.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/examples/stock-research/earnings-event.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/anchored-popover.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/api.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/app-updates.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/assessment-checks.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/assessment-panel.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/citation-evidence.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/citation-sources.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/clipboard.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/composer-options.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/connectors.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/delivery.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/dom.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/excel-export.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/fact-check-availability.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/fact-check-grants.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/feedback-list.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/jev-checks.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/job-presentation.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/learning-retry.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/length-controls.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/market-convention.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/market-decorations.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/mcp-selection.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/model-catalog.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/native-requests.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/notifications.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/office-tools.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/polling.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/previous-report.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/provider-capabilities.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/quick-report.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/readers.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/reasoning-controls.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-browsing.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-export.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-form-defaults.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-language.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-panels.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-sources.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-version-info.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-controls.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-coverage.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-results.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-status.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/revision-questions.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/rich-document.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-cards.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-model-picker.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-permission-modes.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-permission-panel.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-picker-bindings.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/schedules.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/session-budget.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/skill-verification.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/source-library-search.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/source-upload.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/task-progress.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/template-output.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/templates.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/time.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/uploads.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/version-diff.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/frontend/welcome.js +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/package-lock.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/package.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/README.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/probe.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/requirements.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/server.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/README.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/bridge.test.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/build.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/catalog.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/claude.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/main.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/permission-catalog.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/pi.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/reasoning.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/user-input.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/windows-command.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/zcode.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/scripts/build_frontend.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/scripts/build_frontend_licenses.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/scripts/check_versions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/scripts/sync_versions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/scripts/test_frontend.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/setup.cfg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/__main__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/_entrypoint.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/agent_commands.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/agent_prompts.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/analyst.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/analyst_drafts.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/app_server.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/audit_bundle.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/backends/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/backends/opencode_server.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/backends/opencode_v2.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/bocha.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/bridge_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_dispatch.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_execution.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_store.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/cli.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/codex_diagnostics.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/company_context.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/comparison_contract.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/conflicts.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/MATERIALS.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/README.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/config.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/grants.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/materials.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/receipts.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/runtime.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/runtime_tools.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/service.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/stdio_supervisor.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/task_client.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/tasks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/transport.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/windows_acl.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/default_fonts.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/deliverable_spec.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/delivery_checks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/demo.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/document_export.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/document_model.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/document_workflows.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/docx_text.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/draft_checks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/draft_completion.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/duckduckgo.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/evaluation_reading.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/evidence.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/evidence_context.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/execution_records.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/execution_timing.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/export_jobs.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/export_labeling.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/exports.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/external_mcp.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/external_requests.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fact_check.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fast_mode.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fast_reports.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fast_research.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/feedback_view.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/figure_support.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/figure_text.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/figures.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/finding_anchors.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/host_bins.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/industry_data.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/industry_export.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/interactive_runtime.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/jev.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/jev_checks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/learning.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/learning_budget.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/length.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/market_convention.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/media.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/model_budget.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_engine.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_providers.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_roles.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/notifications.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/office_cli.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/ooxml_order.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/opencode_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/opencode_version.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/packet_views.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/parent_watch.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/plain_isolation.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/platform_support.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/previous_report.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/process_host.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/projections.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/core.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.analyst.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.evaluator.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.orchestrator.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/provider_catalog.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/readers.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/reconciliation.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/release.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_browsing.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_profiles.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_time.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_tools.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/research_budget.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/research_handoff.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/research_plan.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/review.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/review_capability.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/review_learning.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/revision_edits.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/revision_metadata.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/revision_policy.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/rpc_writer.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime_bridge.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime_permissions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime_reasoning.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout_coverage.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout_evidence.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout_tools.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/search_credentials.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/search_policy.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_verification.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skills.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/software_release_notes.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/software_version.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_context.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_extraction.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_ingestion.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_library_search.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_search.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_updates.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/sources.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/frontend-licenses.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-image-worker.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-licenses.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-models.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-photon.wasm +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-aider.png +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-amr.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-antigravity.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-briefloop.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-claude.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-codebuddy.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-codex.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-copilot.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-deepseek.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-devin.png +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-grok-build.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-hermes.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-kilo.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-kimi.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-kiro.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-mimo.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-opencode.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-pi.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-qoder.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-qwen.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-reasoning.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-reasonix.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-trae-cli.png +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-vibe.svg +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/style.css +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/tokens.css +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/task_labels.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/task_notify.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/tavily.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_conversion.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/templates.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/user_input.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/version_execution.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/websearch.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/windows_process.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/word_import.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workbook_figures.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workspace_profile.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workspaces.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/writer_assembly.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/writer_input.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/writing_guidance.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/xlsx_export.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/zhipu.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/dependency_links.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/entry_points.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/requires.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/top_level.txt +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/__main__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/LICENSE +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/NOTICE.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/act.sh +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/rollout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/step.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/alfworld.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/livemath.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/sealqa.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/cli.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/codex_identity.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/engine.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/feedback_loop.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/audit.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/runtime.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/tools_server.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/jsonl.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/k4_lock.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/livemath/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/livemath/loop.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/livemath/rollout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/native_agents.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/dataset.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/fetch.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/loop.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/retrieval.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/reward.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/rollout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/scoring.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/wiki_agents.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/paper_alignment/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/paper_alignment/contracts.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/paper_alignment/evidence.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product_cli.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product_install.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product_views.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/protocol.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/protocol.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/README.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/executor.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/proposer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/snapshot.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/protocol.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/results.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/score_rules.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/scorer_trust.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/sealqa/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/sealqa/loop.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/sealqa/rollout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/settings.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/skill_proposer.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/__init__.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/loop.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/rollout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/study.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/tool_audit.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/wiki.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/wiki_maintainer.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/start.ps1 +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/check_distribution.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_anchored_popover.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_app_updates.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_assessment_checks.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_brand_colors.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_attachments.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_drafts.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_layout.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_polling.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_checkout_eol.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_clipboard.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_edit.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_evidence.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_sources.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_clipboard_fallback.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_excel_export.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_export_menu.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_fact_check_availability.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_fact_check_grants.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_fast_mode.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_feedback_list.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_home_v2.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_job_presentation.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_learning_authorization.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_learning_retry.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_length_controls.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_licenses.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_live_status.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_markdown_import.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_market_convention.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_mcp_selection.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_model_catalog_refresh.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_model_label.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_model_selection.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_native_requests.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_native_runtime.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_office_tools.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_open_brief_status.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_pending_report.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_polling.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_previous_report.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_progress_race.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_provider_capabilities.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_quick_report.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_readers.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_reasoning_controls.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_release_controls.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_release_navigation.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_browsing.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_chat_drawer.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_export.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_language.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_load.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_outline.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_panels.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_version_info.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_review_capability.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_review_coverage.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_review_status.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_revision_questions.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_discovery.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_feedback.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_model_picker.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_permission_panel.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_settings_workspaces.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_skill_verification.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_source_library.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_source_search.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_source_upload.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_startup_recovery.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_task_progress.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_template_groups.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_template_output.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_update_notifications.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_upload_limits.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_version_bodies.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_version_diff.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_welcome_gate.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_workspace_proposal.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_writing_preferences.mjs +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_agent_backend.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_agent_commands.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_agent_session_budget.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_analyst_draft_versions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_assessment_admission_recovery.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_assessment_followup.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_background_no_question.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_brand_assets.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_bridge_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_builtin_templates.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_chat_dispatch.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_chat_execution.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_chat_model_selection.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_cli_doctor.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_codex_idle.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connection_test_history.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_authorization.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_empty_catalog.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_materials.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_tasks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connectors.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_core.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_cross_module_regressions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_delivery_checks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_delivery_consumers.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_demo.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_desktop_lifecycle.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_document_workflows.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_draft_completion.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_draft_contract.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_english_reports.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_entrypoint.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_evidence.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_evidence_parse_failures.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_execution_records.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_execution_timing.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_admission.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_labeling.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_layout_swap.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_xlsx.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_external_mcp.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_external_requests.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_contract.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_orchestration.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_phase.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_review.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_status_tool.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_evidence.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_mode.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_qualifier_checks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_reports.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_research.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_feedback_view.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figure_exports.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figure_flow.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figure_text.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figures.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_finding_anchors.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_generation_schema_guidance.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_host_bins.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_human_learning.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_industry_export.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_industry_flow.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_industry_research.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_interactive_runtime.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_jev_checks.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_learning_authorization.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_learning_integrity.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_length.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_length_policy.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_markdown_download.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_market_convention.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_media_sources.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_model_catalog_defaults.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_monthly_research.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_multimodal_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_multimodal_http.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_analyst.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_evaluator.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_learning.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_orchestrator.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_provider_storage.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_providers.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_research_closeout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_review_contract.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_scout.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_notifications.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_npm_native_shim.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_numeric_occurrence_review.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_office_cli.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_office_source_structure.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_office_surfaces.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_ooxml_order.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_harness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_idle.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_prompt_versions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_provider.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_questions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_reasoning.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_review_version.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_search_prompt.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_server_stdin.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_v2.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_version_probe.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_periodic_preflight.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_plain_isolation.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_posix_process_tree.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_pr593_roundtrip.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_previous_report.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_product_summary_consistency.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_progress.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_progress_pipeline.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_provider_catalog.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_public_research.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_quality_reading_context.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_contract.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_profiles.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_source_export.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_workflow.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reconciliation.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_release.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_release_identity.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_browsing.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_concurrency.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_deletion.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_length_feedback.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_path_regressions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_time.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_budget.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_gap_updates.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_handoff.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_plan.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_response_admission.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_resume_in_place.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_finding_consistency.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_learning.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_modes.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_packet_paths.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_packet_utf8.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_public_metadata.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_schema_drift.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_snapshot.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_visual_input.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_revision_citations.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_revision_edits.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_revision_policy.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_rich_document.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_role_models.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_bridge.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_bridge_idle.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_concurrency.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_json_bom.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_liveness.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_names.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_permissions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_propagation.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_retry.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_settlement.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_schedules.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_scout_experiment.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_search_credentials.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_search_policy.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_semantic_experiment.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_semantic_governance.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_server_boundary.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_settings_transactions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_skill_verification.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_software_release_notes.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_software_version.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_ingestion.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_library_search.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_recovery_regressions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_updates.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_sources_provenance.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_store_sqlite_benchmark.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_store_wal.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_table_citation_advisory.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_task_labels.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_task_notify.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_task_progress.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_tavily.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_template_conversion.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_template_conversion_http.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_template_saved_state.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_templates.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_user_input.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_user_source_refresh.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_version_consistency.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_version_execution.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_websearch.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_websearch_singleflight.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_wikiskill_engine_windows.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_antigravity_permissions.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_connector_acl.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_distribution.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_mcp_supervisor.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_platform.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_release_paths.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_review_paths.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_runtime_bundle.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_xlsx_paths.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_word_import.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_word_source_locators.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_word_toc.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_worker_idle.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_workspace_action_errors.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_workspace_profile.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_workspaces.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_assembly.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_cli_guidance.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_context.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_input.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_xlsx_officecli_integration.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_xlsx_preview.py +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/LICENSE +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/NOTICE.md +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/constants.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/json.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/models.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/rpc.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/session-params.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/types.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/byok-reference/byok-opencode.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/byok-reference/provider-models.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/core/index.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/core/json-line-stream.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/codex-models.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/mmd-routes.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/models.ts +0 -0
- {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/opencode-models.ts +0 -0
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.28.4 — 2026-10-02
|
|
4
|
+
|
|
5
|
+
- 对话 Agent 可以通过正在运行的服务停止指定任务及子任务,保留已保存稿件,并返回实际停止状态。
|
|
6
|
+
- 新工作区的联网完整报告默认启用独立事实核查;已有选择、单报告覆盖、离线和快速模式保持各自规则。
|
|
7
|
+
- Native Scout 沿用已登记的轮次结果路径,在冻结上限内恢复可用并行容量,显示真实开始与结束时间。
|
|
8
|
+
- 后续研究轮次声明任务时同步保存计划,避免上一轮任务残留导致无法结束研究。
|
|
9
|
+
- 支持从已保存报告准备下一期:复用写作约定,重新确认本期日期和材料;不继承旧证据、评分或联网授权。
|
|
10
|
+
- 点击“基于此报告开始下一期”直接准备表单,不再弹出确认框;页面保留说明与取消跨期关联入口,取消时保留已填内容。
|
|
11
|
+
|
|
3
12
|
## 0.28.3 — 2026-10-02
|
|
4
13
|
|
|
5
14
|
- 内置 BriefLoop Agent 升级至 Pi 1.0.0,适配压缩指令的新 transcript 接口,保留角色工具隔离及失败后的会话恢复。
|
briefloop-0.28.4/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.28.4
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "briefloop-desktop",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.4",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "briefloop-desktop",
|
|
9
|
-
"version": "0.28.
|
|
9
|
+
"version": "0.28.4",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# BriefLoop 0.28.4
|
|
2
|
+
|
|
3
|
+
整合 #891、#892、#893 与 #870。修复对话停止任务、Native Scout 多轮路径、并行容量及计划同步;支持从已保存报告准备下一期,并按用户要求移除反复弹出的确认框。
|
|
4
|
+
|
|
5
|
+
旧报告的正文、来源和评分保留;下一期只复用写作约定,需重新指定日期、材料和联网选择。修复复用时旧日期预览短暂残留的问题。完成实现与页面验收不代表连续多期返工率已改善,#865/#866/#858 的效果验收继续保持独立。
|
|
6
|
+
|
|
7
|
+
#855 与 #857 的实验工具和评价候选不纳入本次发行;已有开发集结果不当作人工答案、留出集结果或稳定收益。
|
|
8
|
+
|
|
9
|
+
从干净冻结提交构建一次共享 wheel,Mac、Windows、PyPI 复用同一字节。平台随包后端、合成 Word/Excel 导出、更新及实际安装结果记录在发行附件;缺少的 GUI 验证明确列出,不由 CI 代替。延续未签名桌面发行,不声称公证。发布后替换本机正式入口,不新增日常 App 安装副本。
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
## 生成后的独立事实核查
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
在新建报告中勾选「生成后独立核查公开主张」。新工作区的联网完整报告默认开启;已有工作区保留已保存的选择,单份报告可关闭。离线及快速模式默认不启用,未允许联网时不能显式开启。任务保存实际开关,之后改工作区设置不会追溯改变旧任务。
|
|
22
22
|
|
|
23
23
|
执行顺序为:保存可编辑草稿 → 独立核查公开主张 → 独立审阅 → 按设置自动修订一次并复核。核查需要正文中已经登记并绑定的主张;没有可核查主张、研究阶段仍未收束或无法接纳预算时,会记录原因,不能显示为已完成核查。
|
|
24
24
|
|
|
@@ -53,6 +53,7 @@ import {createFeedbackList} from './feedback-list.js';
|
|
|
53
53
|
import {readersUI} from './readers.js';
|
|
54
54
|
import {verificationBadge} from './skill-verification.js';
|
|
55
55
|
import {previousReportUI} from './previous-report.js';
|
|
56
|
+
import {nextReportUI} from './next-report.js';
|
|
56
57
|
import {learningRetry} from './learning-retry.js';
|
|
57
58
|
import {templatesUI,GENRE_META,ICONS,splitTemplateName} from './templates.js';
|
|
58
59
|
import {createTemplateOutput} from './template-output.js';
|
|
@@ -187,6 +188,8 @@ function acceptCommand(){
|
|
|
187
188
|
// Only editorial preferences lack a form control. Runtime/template snapshots are
|
|
188
189
|
// deliberately rebuilt by the server and must never be copied from a prior run.
|
|
189
190
|
let writingPreferencesOverride;
|
|
191
|
+
const nextReport=nextReportUI({$,api,savedVersion,getTemplate:id=>{const t=state?.templates?.find(t=>t.id===id);return t?{...t,sections:parse(t.spec).sections||[]}:null},getCurrent:()=>current,applyRequirements,refreshTime:()=>previewReportTime(),notice,clearSources:()=>{selected.clear();referenceSelected.clear();document.querySelectorAll('[data-check],[data-reference-source]').forEach(input=>input.checked=false);renderReferenceSources()}});
|
|
192
|
+
nextReport.bind();
|
|
190
193
|
function preserveWritingPreferences(req,previous,override){
|
|
191
194
|
if(!Object.prototype.hasOwnProperty.call(req,'writing_preferences'))req.writing_preferences=[...(Array.isArray(override)?override:Array.isArray(previous?.writing_preferences)?previous.writing_preferences:[])];
|
|
192
195
|
return req;
|
|
@@ -562,10 +565,12 @@ let reportTimePreviewTicket=0;
|
|
|
562
565
|
async function previewReportTime(){
|
|
563
566
|
const ticket=++reportTimePreviewTicket;
|
|
564
567
|
const form=$('requirements'),box=$('report-system-clock');
|
|
568
|
+
if(form.elements.previous_report_version_id?.value&&!['period','period_start','period_end'].some(key=>form.elements[key].value.trim())){box.textContent='请填写并确认本期时间范围;不会沿用上期日期。';return}
|
|
569
|
+
box.textContent='正在核对本期时间范围…';
|
|
565
570
|
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;reportFormDefaults.setWindow(t,requirements);box.textContent=`系统日期:${t.today} · ${t.timezone};报告范围:${t.start} 至 ${t.end_exclusive}(不含结束时刻)。提交时冻结。`;}catch(e){if(ticket===reportTimePreviewTicket)box.textContent=e.message}
|
|
566
571
|
}
|
|
567
572
|
for(const key of ['period','period_start','period_end','report_timezone'])$('requirements').elements[key].addEventListener('change',previewReportTime);
|
|
568
|
-
$('requirements').onsubmit=e=>{e.preventDefault();action(async()=>{const f=new FormData(e.target),req=Object.fromEntries(f.entries());if(!['fast','fast_web'].includes(req.completion_mode)&&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);Object.assign(req,lengthControls.read(),quickReport.read());req.research_budget=readResearchBudget();reportFormDefaults.prepare(req);reportMarket.prepare(req);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);if(!req.reader_id)delete req.reader_id;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('任务已排队,后台会生成简报')})};
|
|
573
|
+
$('requirements').onsubmit=e=>{e.preventDefault();action(async()=>{const f=new FormData(e.target),req=Object.fromEntries(f.entries());if(!['fast','fast_web'].includes(req.completion_mode)&&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);Object.assign(req,lengthControls.read(),quickReport.read());req.research_budget=readResearchBudget();reportFormDefaults.prepare(req);reportMarket.prepare(req);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);if(!req.reader_id)delete req.reader_id;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))});nextReport.clear();showPendingReport(parse(job.payload).run_id);page('report');notice('任务已排队,后台会生成简报')})};
|
|
569
574
|
$('upload').onchange=e=>action(async()=>{preflightSources(e.target.files,getUploadLimits());for(const f of e.target.files){const s=await uploadSource(f);if(s.status==='ready')selected.add(s.id)}e.target.value=''},'来源已保存');
|
|
570
575
|
$('add-url').onclick=()=>action(async()=>{const s=await api('source-url',{url:$('source-url').value});if(s.status==='ready')selected.add(s.id);$('source-url').value='';notice(s.status==='ready'?'网页已读取':'来源已保存,但读取失败:'+s.error,s.status!=='ready')});
|
|
571
576
|
$('rescore').onclick=()=>action(async()=>{await savedVersion();await api('assess',{version_id:current.id,session_id:chat.id||undefined})},'已提交评分');
|
|
@@ -1820,7 +1825,8 @@ function readTemplateSections(){
|
|
|
1820
1825
|
// Never submit a report whose chosen template is not ready; falling back to the
|
|
1821
1826
|
// general layout would silently change the deliverable.
|
|
1822
1827
|
if(template&&template.status&&template.status!=='ready')throw Error('所选模板尚未就绪:'+template.name+';请改用通用模板,或等模板准备完成后再提交');
|
|
1823
|
-
const
|
|
1828
|
+
const reused=nextReport.requirementsForTemplate(templateId);
|
|
1829
|
+
const saved=reused?.sections||(templateId&&state.requirements?.template_id===templateId?state.requirements.sections||[]:[]);
|
|
1824
1830
|
return [...$('template-sections').querySelectorAll('[data-section-id]')].map(row=>{
|
|
1825
1831
|
const base=original.find(s=>s.section_id===row.dataset.sectionId)||{},requirement=saved.find(s=>s.section_id===row.dataset.sectionId);
|
|
1826
1832
|
return {section_id:row.dataset.sectionId,title:row.querySelector('[data-title]').value,purpose:row.querySelector('[data-purpose]')?.value??requirement?.purpose??base.purpose??'',mode:row.querySelector('select').value,placeholder:'待填充'};
|
|
@@ -1832,8 +1838,9 @@ function templateSections(){
|
|
|
1832
1838
|
}
|
|
1833
1839
|
function applyTemplateSectionEdits(){
|
|
1834
1840
|
const templateId=$('template-select').value;
|
|
1835
|
-
|
|
1836
|
-
|
|
1841
|
+
const reused=nextReport.requirementsForTemplate(templateId);
|
|
1842
|
+
if(!templateId||(!reused&&state?.requirements?.template_id!==templateId))return;
|
|
1843
|
+
for(const section of (reused||state.requirements).sections||[]){const row=[...$('template-sections').querySelectorAll('[data-section-id]')].find(r=>r.dataset.sectionId===section.section_id);if(row){row.querySelector('[data-title]').value=section.title;row.querySelector('select').value=section.mode||'required'}}
|
|
1837
1844
|
}
|
|
1838
1845
|
function unreadyTemplate(id){const template=(state?.templates||[]).find(t=>t.id===id);return template&&template.status&&template.status!=='ready'?template:null}
|
|
1839
1846
|
function renderTemplates(first=false){
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Reuse the saved contract, not old facts, reviews or runtime authorizations.
|
|
2
|
+
export function nextReportUI({$,api,savedVersion,getCurrent,applyRequirements,clearSources,notice,getTemplate,refreshTime=()=>{}}){
|
|
3
|
+
let pending=false,contract=null;
|
|
4
|
+
const form=()=>$('requirements');
|
|
5
|
+
function set(name,value){const field=form()?.elements?.[name];if(!field)return;
|
|
6
|
+
if(field.type==='checkbox')field.checked=!!value;else field.value=value??'';
|
|
7
|
+
field.dispatchEvent?.(new Event('change',{bubbles:true}));
|
|
8
|
+
}
|
|
9
|
+
function clear(){contract=null;set('previous_report_version_id','');set('previous_report_hash','');
|
|
10
|
+
if($('next-report-notice'))$('next-report-notice').hidden=true;
|
|
11
|
+
}
|
|
12
|
+
function requirementsForTemplate(id){return contract&&form()?.elements?.previous_report_version_id?.value&&contract.template_id===id?contract:null}
|
|
13
|
+
async function start(){
|
|
14
|
+
if(pending||!getCurrent())return;
|
|
15
|
+
pending=true;
|
|
16
|
+
try{
|
|
17
|
+
const version=await savedVersion();
|
|
18
|
+
const data=await api('next-report?version_id='+encodeURIComponent(version));
|
|
19
|
+
if(getCurrent()?.id!==version)throw Error('当前报告已切换,请重新选择要复用的版本');
|
|
20
|
+
const candidate=data.requirements;
|
|
21
|
+
if(candidate.template_id){
|
|
22
|
+
const template=getTemplate(candidate.template_id);
|
|
23
|
+
if(!template||template.status!=='ready')throw Error('往期模板已不可用或尚未就绪,请先恢复模板,或手动建立本期需求');
|
|
24
|
+
const sections=template.sections||[];
|
|
25
|
+
if((candidate.sections||[]).some(section=>!sections.some(item=>item.section_id===section.section_id)))
|
|
26
|
+
throw Error('往期模板章节已变化,请核对模板后再复用,避免遗漏人工保留的章节');
|
|
27
|
+
}
|
|
28
|
+
contract=candidate;
|
|
29
|
+
set('completion_mode','standard');
|
|
30
|
+
set('template_id',contract.template_id||'');
|
|
31
|
+
applyRequirements(JSON.stringify(contract));
|
|
32
|
+
for(const key of ['organization','industry','report_date','reader_id','previous_report_version_id','previous_report_hash'])set(key,contract[key]);
|
|
33
|
+
set('allow_web',false);set('fact_check',false);
|
|
34
|
+
clearSources();
|
|
35
|
+
const sections=contract.sections||[];
|
|
36
|
+
for(const row of $('template-sections')?.querySelectorAll('[data-section-id]')||[]){
|
|
37
|
+
const section=sections.find(item=>item.section_id===row.dataset.sectionId);
|
|
38
|
+
if(section){row.querySelector('[data-title]').value=section.title;row.querySelector('select').value=section.mode||'required'}
|
|
39
|
+
}
|
|
40
|
+
const box=$('next-report-notice');
|
|
41
|
+
if(box){box.hidden=false;$('next-report-summary').textContent=`基于《${data.previous.title}》的已保存版本开始下一期。${data.notice}`+
|
|
42
|
+
(data.reader?` 当前读者:${data.reader.name};用途:${data.reader.decisions};偏好:${data.reader.preferences}。请确认是否仍适用。`:'');}
|
|
43
|
+
refreshTime();
|
|
44
|
+
form()?.elements?.title?.focus?.();
|
|
45
|
+
notice('已复用约定;请填写本期标题、时间范围并选择材料');
|
|
46
|
+
}finally{pending=false}
|
|
47
|
+
}
|
|
48
|
+
function bind(){const button=$('next-report');if(button)button.onclick=()=>start().catch(error=>notice(error.message,true));
|
|
49
|
+
if($('next-report-cancel'))$('next-report-cancel').onclick=clear;
|
|
50
|
+
form()?.addEventListener?.('reset',clear);
|
|
51
|
+
}
|
|
52
|
+
return {bind,start,clear,requirementsForTemplate};
|
|
53
|
+
}
|
|
@@ -17,6 +17,7 @@ function stepState(value,active){
|
|
|
17
17
|
return ['running','active'].includes(value)?(active?'active':'pending'):'pending';
|
|
18
18
|
}
|
|
19
19
|
function stepTime(step,now){
|
|
20
|
+
if(step.not_started)return '尚未开始';
|
|
20
21
|
const duration=step.duration_ms??(step.duration_seconds==null?null:Number(step.duration_seconds)*1000);
|
|
21
22
|
if(duration!==null&&Number.isFinite(Number(duration))&&Number(duration)>=0)return elapsedText('1970-01-01T00:00:00Z',Number(duration));
|
|
22
23
|
if(step.started&&(step.ended||step.status==='active'))return elapsedText(step.started,step.ended?Date.parse(step.ended):now);
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "briefloop"
|
|
7
|
-
version = "0.28.
|
|
7
|
+
version = "0.28.4"
|
|
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.28.4"
|
|
@@ -31,7 +31,7 @@ WORKSPACE_ACTIONS = (
|
|
|
31
31
|
'profile_read','profile_update',
|
|
32
32
|
'freeze_research_plan','research_status','begin_research_round','finish_research_round','set_scout_tasks',
|
|
33
33
|
'reconciliation_candidates','reconciliation_save','reconciliation_read',
|
|
34
|
-
'export_word','inspect','generate','assess','comment','learn',
|
|
34
|
+
'export_word','inspect','stop_job','generate','assess','comment','learn',
|
|
35
35
|
)
|
|
36
36
|
|
|
37
37
|
|
|
@@ -198,6 +198,13 @@ def workspace_action(store, request):
|
|
|
198
198
|
'runtime':store.runtime_config(),
|
|
199
199
|
'note':'简要工作区索引;需要原文时使用 read-source --id SOURCE_ID。任务状态和 error 是已记录事实,不代表根因诊断;没有对应日志证据不得声称服务重启、网络故障或权限拒绝。来源已保存不代表已核验其真实性或时效性,研究进度不代表报告已完成。',
|
|
200
200
|
}
|
|
201
|
+
if action=='stop_job':
|
|
202
|
+
job_id=request.get('job_id')
|
|
203
|
+
if not isinstance(job_id,str) or not job_id.strip():raise ValueError('请提供要停止的明确 job_id')
|
|
204
|
+
# Use the live worker, including transport cancellation and child jobs.
|
|
205
|
+
# A CLI Store is a separate process and must never just flip DB status.
|
|
206
|
+
from .external_client import Client
|
|
207
|
+
return Client(store.root).stop_job(job_id)
|
|
201
208
|
if action=='generate':
|
|
202
209
|
requirements=Requirements.model_validate(request['requirements'])
|
|
203
210
|
source_ids=request.get('source_ids',[])
|
|
@@ -338,7 +345,9 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
|
|
|
338
345
|
- {{"action":"read_report","version_id":"稿件ID"}}:读取富文档 JSON、引用和已存正文的 length_stats;revise_document 回执也给出保存后的确定性计数。按 count/rule 核对原始要求、读者约定及当前反馈,不估算字数;over_limit 只比较结构化 max_words,不表示已满足全部篇幅要求。用户明确要求修改内容/章节/图表时,将修改后的 JSON 保存到工作区文件,再用 {{"action":"revise_document","base_version":"刚读取版本ID","document_file":"工作区内JSON绝对路径"}} 保存新版本,不覆盖用户并发编辑。可选 citations 完整替换引用列表(source_id/locator/excerpt,schema 见 capabilities),省略则保留;只修改引用也保存新版本,定位描述不表示已独立核验。
|
|
339
346
|
- {{"action":"import_word_revision","base_version":"用户指定基础版本","source_id":"DOCX来源ID"}}:导入用户修改的 Word。返回 needs_alignment 时先核对原件和基础版本,向用户说明对齐问题;仅按用户明确选择提供 accept_unaligned=true。用户希望更新模板时另用 template_import 并提供 parent_id。
|
|
340
347
|
- {{"action":"generate","requirements":{{"title":"标题","objective":"用户目的","audience":"读者","language":"zh|en","extent":"compact|balanced|detailed","research_tier":"quick|standard|deep","allow_web":{str(bool(allow_web)).lower()},"period":"时间范围"}},"source_ids":["真实来源ID"],"runtime":{runtime_json}}}:正式生成可在页面编辑的简报。language 是报告正文语言(默认 zh);用户要英文报告时写 en,不传 target_words 时篇幅按英文词数默认。research_tier 是研究深度档位(默认 standard):quick 单轮检索,deep 预排 4 轮迭代研究;按用户明确要求选,用户未提就不写该字段。scout_limit 是本报告最多可同时派发的 Scout 数(1–16),在提交前按信息量决定:一周左右约 4,月报约 8,跨多个行业或市场的大型报告可到 12–16;不写时系统按期间自动设定(月报 8,其余沿用工作区设置)。
|
|
348
|
+
联网完整报告的 fact_check 沿用工作区默认(新工作区开启);用户选择关闭时显式传 false,选择开启时传 true。离线或快速模式不自动开启,也不为核查偷偷开启联网。
|
|
341
349
|
提交 generate 时,必须把本轮已经确认的 key_questions、writing_preferences、章节、期间和篇幅完整写进 requirements,不能只传标题摘要。用户给出的执行约束同样在提交前冻结:target_minutes 是软目标;hard_timeout_minutes=0 表示不设硬截止;research_budget 包含 search_requests、candidate_urls、source_pages;search_policy 沿用已授权设置。不得说“后台稍后配置”而遗漏已指定的额度。并行数要求写入 writing_preferences,供主 Agent 冻结研究计划时选择 structure.parallel;不改变共享预算。提交回执中的实际冻结值与用户要求不一致时明确说明,不宣称已应用。
|
|
350
|
+
- {{"action":"stop_job","job_id":"真实任务ID"}}:用户要求停止任务时,先通过 inspect 确认具体任务,再停止该任务及其子任务,已保存稿件保留。用户要求“停掉旧任务再重新生成”时先取得停止回执,再提交新任务;停止失败时如实说明,不启动重复任务。目标不明确时先问,不猜 ID,不停止整个服务。以回执的实际 status 为准,已经完成的任务不会变成 cancelled。
|
|
342
351
|
- {{"action":"assess","version_id":"真实简报版本ID"}}:为已有稿件安排评分。
|
|
343
352
|
- {{"action":"comment","version_id":"真实简报版本ID","text":"用户反馈"}}:记录用户明确提出的反馈。页面自动学习开启时,保存反馈可能稍后自动触发学习,要如实告知。
|
|
344
353
|
- {{"action":"learn"}}:仅当用户明确要求启动技能学习时调用,会消耗额外模型额度。调用前先告诉用户上限(每轮最多 3 个案例、每案例基线与候选各试写一次,另有整理、提案与比较回合;轮数按学习设置),得到明确同意后再调用;保存反馈本身不需要调用它。
|
|
@@ -56,6 +56,12 @@ class Client:
|
|
|
56
56
|
raise ValueError(self.info.get('message', '工作区服务尚未就绪'))
|
|
57
57
|
|
|
58
58
|
def request(self, body):
|
|
59
|
+
return self._post('/api/external/action', body)
|
|
60
|
+
|
|
61
|
+
def stop_job(self, job_id):
|
|
62
|
+
return self._post('/api/stop', {'job_id': job_id})
|
|
63
|
+
|
|
64
|
+
def _post(self, path, body):
|
|
59
65
|
if not isinstance(body, dict):
|
|
60
66
|
raise ValueError('请求必须是 JSON 对象')
|
|
61
67
|
wid = body.get('workspace_id', self.info['workspace_id'])
|
|
@@ -65,7 +71,7 @@ class Client:
|
|
|
65
71
|
endpoint = urlsplit(self.info['url'])
|
|
66
72
|
connection = http.client.HTTPConnection(endpoint.hostname, endpoint.port, timeout=15)
|
|
67
73
|
try:
|
|
68
|
-
connection.request('POST',
|
|
74
|
+
connection.request('POST', path, body=json.dumps({**body, 'workspace_id': wid}, ensure_ascii=False).encode(),
|
|
69
75
|
headers={'Content-Type': 'application/json', 'X-BriefLoop-Token': token})
|
|
70
76
|
response = connection.getresponse()
|
|
71
77
|
data = response.read(32 * 1024 * 1024 + 1)
|
|
@@ -113,6 +113,8 @@ class Requirements(Model):
|
|
|
113
113
|
# A saved reader profile (#858); create_run freezes it into reader_profile.
|
|
114
114
|
reader_id: str | None = Field(default=None, max_length=80)
|
|
115
115
|
reader_profile: dict | None = None
|
|
116
|
+
previous_report_version_id: str | None = Field(default=None, max_length=100)
|
|
117
|
+
previous_report_hash: str | None = Field(default=None, max_length=64)
|
|
116
118
|
# Report body language. The interface, internal records and review notes
|
|
117
119
|
# stay Chinese; only the report text and its length presets follow this.
|
|
118
120
|
language: Literal["zh", "en"] = "zh"
|
|
@@ -362,7 +364,7 @@ class Settings(RoleModel):
|
|
|
362
364
|
default_template_id: str | None = None
|
|
363
365
|
company_context_enabled: bool | None = None
|
|
364
366
|
# Workspace-wide default for the per-task fact_check switch; tasks may override.
|
|
365
|
-
fact_checker: bool =
|
|
367
|
+
fact_checker: bool = True
|
|
366
368
|
# Workspace-wide optional local file quality checks via officecli; the
|
|
367
369
|
# switch has no effect while the binary is not installed.
|
|
368
370
|
officecli_enabled: bool = False
|
|
@@ -9,7 +9,7 @@ import hashlib
|
|
|
9
9
|
import json
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
|
-
from .store import dump
|
|
12
|
+
from .store import dump, now
|
|
13
13
|
from .native_roles import ToolError, _atomic, _json_result
|
|
14
14
|
from .revision_metadata import binding_schema, response_schema, validate_arrays, validate_bindings
|
|
15
15
|
|
|
@@ -19,7 +19,7 @@ READ_ACTIONS = {'inspect', 'capabilities', 'templates', 'workflows', 'profile_re
|
|
|
19
19
|
RUN_ACTIONS = {'set_reader_contract', 'freeze_research_plan', 'begin_research_round',
|
|
20
20
|
'finish_research_round', 'set_scout_tasks', 'reconciliation_save', 'evidence_span',
|
|
21
21
|
'claim_create', 'claim_bind', 'company_update', 'company_review_complete'}
|
|
22
|
-
CHAT_ACTIONS = READ_ACTIONS | {'generate', 'assess', 'comment', 'export_word', 'profile_update', 'company_config', 'company_resolve', 'revise_document', 'learn', 'template_import', 'template_rebuild', 'import_word_revision'}
|
|
22
|
+
CHAT_ACTIONS = READ_ACTIONS | {'stop_job', 'generate', 'assess', 'comment', 'export_word', 'profile_update', 'company_config', 'company_resolve', 'revise_document', 'learn', 'template_import', 'template_rebuild', 'import_word_revision'}
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def _save(path, value):
|
|
@@ -102,7 +102,8 @@ def action(store, config, args):
|
|
|
102
102
|
frozen_req = json.loads(view.one('runs', result['run_id'])['requirements'])
|
|
103
103
|
result['accepted_requirements'] = {**result.get('accepted_requirements', {}),
|
|
104
104
|
'length_mode': frozen_req.get('length_mode', 'soft'),
|
|
105
|
-
'length_requirement': frozen_req.get('length_requirement')
|
|
105
|
+
'length_requirement': frozen_req.get('length_requirement'),
|
|
106
|
+
'fact_check': frozen_req.get('fact_check')}
|
|
106
107
|
else:
|
|
107
108
|
from .models import Settings, Requirements, runtime_fields
|
|
108
109
|
settings = Settings.model_validate({**view.settings(), **request['runtime']})
|
|
@@ -118,13 +119,28 @@ def action(store, config, args):
|
|
|
118
119
|
result = {'job_id': job['id'], 'run_id': run['id'], 'status': 'queued',
|
|
119
120
|
'accepted_requirements': {key: value for key, value in json.loads(run['requirements']).items()
|
|
120
121
|
if key in ('title', 'target_minutes', 'hard_timeout_minutes', 'research_budget', 'key_questions',
|
|
121
|
-
'writing_preferences', 'target_words', 'max_words', 'length_mode', 'length_requirement', 'period', 'search_policy')}}
|
|
122
|
+
'writing_preferences', 'target_words', 'max_words', 'length_mode', 'length_requirement', 'period', 'search_policy', 'fact_check')}}
|
|
122
123
|
view.set_meta(key, {'fingerprint': fingerprint, 'result': result})
|
|
123
124
|
store.wake_jobs()
|
|
124
125
|
from .task_notify import notify
|
|
125
126
|
notify(store, store.one('jobs', result['job_id']), 'queued')
|
|
126
127
|
return _json_result(result)
|
|
127
128
|
result = workspace_action(store, request)
|
|
129
|
+
if name == 'set_scout_tasks' and 'scout_tasks' in request and config.get('packet_root'):
|
|
130
|
+
# A successful declaration is the binding plan for this round. Keep the
|
|
131
|
+
# saved Native plan current; otherwise closeout compares round 2 with
|
|
132
|
+
# round 1 forever. Declaration still rejects dropped/rewritten work.
|
|
133
|
+
from .research_plan import frozen
|
|
134
|
+
research = frozen(store, run_id) or {}
|
|
135
|
+
round_id = request.get('round_id') or research.get('current_round_id') or 'legacy'
|
|
136
|
+
path = _folder(config) / 'plan.json'
|
|
137
|
+
if path.is_file():
|
|
138
|
+
plan = json.loads(path.read_text(encoding='utf-8-sig'))
|
|
139
|
+
plan['scout_tasks'] = [
|
|
140
|
+
{key: task[key] for key in ('slot_id', 'assignment', 'result_file')}
|
|
141
|
+
for task in result['scout_execution'] if task['round_id'] == round_id]
|
|
142
|
+
_save(path, plan)
|
|
143
|
+
_save(Path(config['packet_root']) / 'plan.json', plan)
|
|
128
144
|
if name == 'reconciliation_save' and config.get('packet_root'):
|
|
129
145
|
_save(_folder(config) / 'reconciliation.json', result)
|
|
130
146
|
if name == 'finish_research_round' and config.get('packet_root'):
|
|
@@ -174,8 +190,10 @@ def _child(store, config, directory, callback):
|
|
|
174
190
|
with harness._lock:
|
|
175
191
|
path = _folder(config) / 'agents.json'
|
|
176
192
|
records = json.loads(path.read_text(encoding='utf-8')) if path.exists() else {'agents': []}
|
|
193
|
+
previous = next((a for a in records['agents'] if a['agent_id'] == identity), {})
|
|
177
194
|
records['agents'] = [a for a in records['agents'] if a['agent_id'] != identity]
|
|
178
|
-
|
|
195
|
+
timing = {'started': now()} if status == 'running' else {'started': previous.get('started'), 'ended': now()}
|
|
196
|
+
records['agents'].append({'agent_id': identity, 'role': role, 'status': status, **timing})
|
|
179
197
|
_save(path, records)
|
|
180
198
|
with harness.child_runtime(config['session_id'], runtime):
|
|
181
199
|
_alive(store, config)
|
|
@@ -225,13 +243,29 @@ def run_scouts(store, config, args):
|
|
|
225
243
|
committed = {task['slot_id']: task for task in view(store, config['run_id'])['scout_execution'] if task['round_id'] == identity}
|
|
226
244
|
for task in tasks:
|
|
227
245
|
expected = committed.get(task['slot_id'])
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
246
|
+
scoped = {folder / ('round-' + round_id) / task['slot_id'] / 'result.json',
|
|
247
|
+
store.root / 'research' / config['run_id'] / 'rounds' / round_id / task['slot_id'] / 'result.json'}
|
|
248
|
+
if round_id == '1':
|
|
249
|
+
scoped.add(folder / task['slot_id'] / 'result.json')
|
|
250
|
+
if not expected or expected['assignment'] != str(task.get('assignment') or '').strip():
|
|
251
|
+
raise ToolError('实际 Scout 任务必须匹配已保存 scout_tasks 的分工;先读取 research_status')
|
|
252
|
+
result_file = Path(expected['result_file'])
|
|
253
|
+
if result_file not in scoped or result_file.resolve() != result_file:
|
|
254
|
+
raise ToolError('已登记 Scout 结果路径不属于本任务、本轮与槽位')
|
|
255
|
+
if task.get('result_file') and task['result_file'] != str(result_file):
|
|
256
|
+
raise ToolError('实际 Scout 结果路径须沿用已登记路径:' + str(result_file))
|
|
257
|
+
# A concurrent job may have occupied slots while the initial packet was
|
|
258
|
+
# prepared. Reclaim now-free capacity within the original frozen ceiling.
|
|
259
|
+
budget_for_job = getattr(store, '_scout_budget_for_job', None)
|
|
260
|
+
budget = budget_for_job(job) if budget_for_job else None
|
|
261
|
+
if budget:
|
|
262
|
+
ceiling = min(int((frozen_plan or {}).get('frozen_runtime', {}).get('max_parallel') or limit),
|
|
263
|
+
int((frozen_plan or {}).get('structure', {}).get('parallel') or limit), len(tasks))
|
|
264
|
+
limit = max(1, min(ceiling, budget(ceiling)))
|
|
231
265
|
update(store, config['run_id'], [{'slot_id': task['slot_id'], 'status': 'dispatched'} for task in tasks])
|
|
232
266
|
results = []
|
|
233
267
|
def execute(task):
|
|
234
|
-
path =
|
|
268
|
+
path = Path(committed[task['slot_id']]['result_file']).parent
|
|
235
269
|
path.mkdir(parents=True, exist_ok=True)
|
|
236
270
|
assignment = path / 'assignment.json'
|
|
237
271
|
if assignment.exists() and json.loads(assignment.read_text(encoding='utf-8')) != task:
|
|
@@ -251,14 +285,15 @@ def run_scouts(store, config, args):
|
|
|
251
285
|
with ThreadPoolExecutor(max_workers=min(limit, len(tasks))) as pool:
|
|
252
286
|
results = list(pool.map(execute, tasks))
|
|
253
287
|
_alive(store, config)
|
|
254
|
-
paths = sorted(
|
|
288
|
+
paths = sorted({Path(task['result_file']) for task in view(store, config['run_id'])['scout_execution']
|
|
289
|
+
if Path(task['result_file']).is_file()})
|
|
255
290
|
# All rounds remain available; replayed slots are not duplicated.
|
|
256
291
|
joined = join_scouts(store, paths, run_id=config['run_id']) if paths else {'sources': [], 'gaps': []}
|
|
257
292
|
from .research_handoff import current_research
|
|
258
293
|
joined = current_research(store, config['run_id'], joined, register=True)
|
|
259
294
|
_save(folder / 'research.json', joined)
|
|
260
295
|
_save(Path(config['packet_root']) / 'research.json', joined)
|
|
261
|
-
return _json_result({'tasks': results, 'research_file': 'research.json', 'sources': len(joined['sources']), 'gaps': joined['gaps'], 'gap_records': joined.get('gap_records', []), 'gap_history': joined.get('gap_history', []), 'execution_gaps': joined.get('execution_gaps', [])})
|
|
296
|
+
return _json_result({'parallel_limit': limit, 'tasks': results, 'research_file': 'research.json', 'sources': len(joined['sources']), 'gaps': joined['gaps'], 'gap_records': joined.get('gap_records', []), 'gap_history': joined.get('gap_history', []), 'execution_gaps': joined.get('execution_gaps', [])})
|
|
262
297
|
|
|
263
298
|
|
|
264
299
|
def _refresh_research(store, config):
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Reuse an explicitly selected report's contract, never its current facts (#865)."""
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
CONTRACT_FIELDS = (
|
|
6
|
+
'objective', 'audience', 'organization', 'industry', 'language', 'extent',
|
|
7
|
+
'writing_mode', 'report_profile', 'workflow_id', 'workflow_variant',
|
|
8
|
+
'template_id', 'sections', 'manual_sections', 'key_questions',
|
|
9
|
+
'writing_preferences', 'target_words', 'max_words', 'length_mode',
|
|
10
|
+
'length_requirement', 'report_timezone',
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def prepare(store, version_id):
|
|
15
|
+
"""Read-only preview; opening it creates no source, run, job or authorization."""
|
|
16
|
+
brief = store.one('briefs', version_id)
|
|
17
|
+
run = store.one('runs', brief['run_id'])
|
|
18
|
+
previous = json.loads(run['requirements'])
|
|
19
|
+
requirements = {key: previous[key] for key in CONTRACT_FIELDS if key in previous}
|
|
20
|
+
reader = None
|
|
21
|
+
if previous.get('reader_id'):
|
|
22
|
+
from .readers import profile
|
|
23
|
+
try:
|
|
24
|
+
reader = profile(store, previous['reader_id'])
|
|
25
|
+
requirements['reader_id'] = reader['id']
|
|
26
|
+
except ValueError:
|
|
27
|
+
pass # Archived readers are not silently reactivated.
|
|
28
|
+
requirements.update(title='', period='', period_start='', period_end='', report_date='',
|
|
29
|
+
allow_web=False, fact_check=False, reference_source_ids=[],
|
|
30
|
+
previous_report_version_id=brief['id'], previous_report_hash=brief['hash'])
|
|
31
|
+
return {'requirements': requirements,
|
|
32
|
+
'previous': {'version_id': brief['id'], 'run_id': run['id'], 'hash': brief['hash'],
|
|
33
|
+
'title': json.loads(brief['detail']).get('title', previous.get('title', ''))},
|
|
34
|
+
'source_ids': [], 'reader': reader,
|
|
35
|
+
'notice': '沿用已保存的要求与写作偏好;请填写本期标题和时间范围,核对要求中的历史条件,并重新选择本期材料。旧来源、评分、联网及费用授权不会自动沿用。'}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def validate_origin(store, requirements):
|
|
39
|
+
version = requirements.previous_report_version_id
|
|
40
|
+
digest = requirements.previous_report_hash
|
|
41
|
+
if not version and not digest:
|
|
42
|
+
return
|
|
43
|
+
if not version or not digest:
|
|
44
|
+
raise ValueError('下一期需要明确的往期版本与内容哈希')
|
|
45
|
+
brief = store.one('briefs', version)
|
|
46
|
+
if brief['hash'] != digest:
|
|
47
|
+
raise ValueError('往期报告内容已变化,请重新选择复用版本')
|
|
48
|
+
if not (requirements.period.strip() or (requirements.period_start and requirements.period_end)):
|
|
49
|
+
raise ValueError('开始下一期前请确认本期时间范围')
|
|
@@ -253,6 +253,8 @@ class ProgressTracker:
|
|
|
253
253
|
if row.get('status') not in ENDED:
|
|
254
254
|
row['status']=agent.get('status','running')
|
|
255
255
|
row['task']=str(agent.get('responsibility',''))[:240]
|
|
256
|
+
for field in ('started','ended'):
|
|
257
|
+
if agent.get(field):row[field]=agent[field]
|
|
256
258
|
except (ValueError,OSError):pass
|
|
257
259
|
workers=list(self.workers.values())
|
|
258
260
|
active=[w for w in workers if w.get('status') not in ENDED | {'unknown'}]
|
|
@@ -513,6 +513,7 @@ class Worker:
|
|
|
513
513
|
self.store=store;self._runtime=runtime;self.stopping=threading.Event();self.current=None
|
|
514
514
|
self._queue_wakes=[threading.Event() for _ in range(4)]
|
|
515
515
|
self.store._job_wakeup=self.wake
|
|
516
|
+
self.store._scout_budget_for_job=self._scout_budget
|
|
516
517
|
self.schedule_thread=threading.Thread(target=self.schedule_loop,name='briefloop-schedules',daemon=True)
|
|
517
518
|
self.thread=threading.Thread(target=self.loop,name='briefloop-worker',daemon=True)
|
|
518
519
|
self.task_thread=None
|
|
@@ -584,6 +585,7 @@ class Worker:
|
|
|
584
585
|
if self.file_thread.is_alive():self.file_thread.join(timeout=12)
|
|
585
586
|
if self.extraction_thread.is_alive():self.extraction_thread.join(timeout=12)
|
|
586
587
|
if self.store._job_wakeup==self.wake:self.store._job_wakeup=None
|
|
588
|
+
if getattr(self.store,'_scout_budget_for_job',None)==self._scout_budget:self.store._scout_budget_for_job=None
|
|
587
589
|
|
|
588
590
|
def schedule_loop(self):
|
|
589
591
|
from .schedules import tick
|
|
@@ -77,7 +77,7 @@ def validate(store, body):
|
|
|
77
77
|
# Freeze the optional paid check when the schedule is saved. A later change
|
|
78
78
|
# of workspace defaults must not silently enable it on recurring reports.
|
|
79
79
|
if req['fact_check'] is None:
|
|
80
|
-
req['fact_check']=store.settings().get('fact_checker') is True
|
|
80
|
+
req['fact_check']=req['allow_web'] and req['completion_mode'] not in ('fast','fast_web') and store.settings().get('fact_checker') is True
|
|
81
81
|
if req['fact_check'] and not req['allow_web']:
|
|
82
82
|
raise ValueError('离线任务不能开启联网事实核查;请允许联网检索,或关闭该开关')
|
|
83
83
|
if req['fact_check']:
|
|
@@ -243,6 +243,9 @@ def _make_server(workspace, port, *, paused, backend, lock):
|
|
|
243
243
|
elif u.path=='/api/report-context':
|
|
244
244
|
from .report_browsing import context
|
|
245
245
|
self.send(200,context(store,q['version_id'][0]))
|
|
246
|
+
elif u.path=='/api/next-report':
|
|
247
|
+
from .next_report import prepare
|
|
248
|
+
self.send(200,prepare(store,q['version_id'][0]))
|
|
246
249
|
elif u.path=='/api/report-search':
|
|
247
250
|
self.send(200,{'run_ids':store.search_briefs(q.get('q',[''])[0])})
|
|
248
251
|
elif u.path=='/api/source-search':
|
|
@@ -868,7 +871,12 @@ def _make_server(workspace, port, *, paused, backend, lock):
|
|
|
868
871
|
# The confirmation names the plan the user saw, so a settings
|
|
869
872
|
# change in another window cannot enlarge this batch (#727).
|
|
870
873
|
result=enqueue_feedback(store,confirmed_plan=body.get('confirm_plan'))
|
|
871
|
-
elif path=='/api/stop':
|
|
874
|
+
elif path=='/api/stop':
|
|
875
|
+
if body.get('workspace_id',store.meta('workspace_id'))!=store.meta('workspace_id'):
|
|
876
|
+
raise ValueError('停止请求不属于当前工作区')
|
|
877
|
+
worker.stop_job(body['job_id'])
|
|
878
|
+
stopped=store.one('jobs',body['job_id'])
|
|
879
|
+
result={'ok':True,'job_id':stopped['id'],'status':stopped['status']}
|
|
872
880
|
elif path=='/api/resume':result=worker.retry_with_current_model(body['job_id'],confirmed_plan=body.get('confirm_plan')) if body.get('use_current_model') is True else worker.resume(body['job_id'])
|
|
873
881
|
elif path=='/api/task-dismiss':
|
|
874
882
|
job=store.one('jobs',body['job_id'])
|