briefloop 0.28.2__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.2 → briefloop-0.28.4}/.gitattributes +1 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/CHANGELOG.md +18 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/PKG-INFO +1 -1
- briefloop-0.28.4/VERSION +1 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/desktop/electron/package-lock.json +2 -2
- {briefloop-0.28.2 → briefloop-0.28.4}/desktop/electron/package.json +1 -1
- briefloop-0.28.4/docs/release-0.28.3.md +13 -0
- briefloop-0.28.4/docs/release-0.28.4.md +9 -0
- {briefloop-0.28.2 → 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.2 → briefloop-0.28.4}/frontend/app-updates.js +45 -11
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/app.js +11 -4
- briefloop-0.28.4/frontend/next-report.js +53 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/research-process.js +1 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/pyproject.toml +1 -1
- {briefloop-0.28.2 → briefloop-0.28.4}/scripts/build_frontend.mjs +9 -0
- briefloop-0.28.4/src/briefloop/__init__.py +1 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/chat_tools.py +10 -1
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/external_client.py +7 -1
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/models.py +3 -1
- {briefloop-0.28.2 → 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.2 → briefloop-0.28.4}/src/briefloop/progress.py +2 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/runtime.py +2 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/schedules.py +1 -1
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/server.py +12 -1
- briefloop-0.28.4/src/briefloop/software_release_notes.py +56 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/software_version.py +2 -1
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/app.js +81 -81
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/index.html +9 -6
- briefloop-0.28.4/src/briefloop/static/native-engine-image-worker.mjs +8 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/native-engine-licenses.txt +18 -18
- briefloop-0.28.4/src/briefloop/static/native-engine-photon.wasm +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/native-engine.mjs +2240 -1772
- briefloop-0.28.4/src/briefloop/static/release-notes.json +4 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/style.css +4 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/store.py +10 -2
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/task_progress.py +2 -2
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop.egg-info/PKG-INFO +1 -1
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop.egg-info/SOURCES.txt +14 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/start.sh +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/check_distribution.py +3 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_app_updates.mjs +35 -5
- {briefloop-0.28.2 → 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.2 → briefloop-0.28.4}/tests/frontend_report_form_defaults.mjs +7 -2
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_research_process.mjs +5 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_save_barrier.mjs +6 -1
- {briefloop-0.28.2 → 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.2 → 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.4/tests/test_periodic_preflight.py +98 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_capability.py +2 -2
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_scout_coverage.py +49 -0
- briefloop-0.28.4/tests/test_software_release_notes.py +79 -0
- briefloop-0.28.2/VERSION +0 -1
- briefloop-0.28.2/src/briefloop/__init__.py +0 -1
- {briefloop-0.28.2 → briefloop-0.28.4}/CONTRIBUTING.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/KNOWN_ISSUES.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/MANIFEST.in +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/SECURITY.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/THIRD_PARTY_NOTICES.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/bootstrap.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/architecture.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/compose/spec/home-v2.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/design-v3.1-validation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/dmg-density-validation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/draft-first.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/jev-precheck.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/native-integration.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/quality-reading-context.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.26.0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.26.1.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.26.2.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.26.3.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.26.4.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.27.0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.28.0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.28.1.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/release-0.28.2.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/report-length.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/report-time-window.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/report-version-information.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/research-handoff.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/revision-learning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/sqlite-benchmark.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/technical-report-0.21.0/evidence-index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/technical-report-0.21.0/technical-report.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/windows.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs/writer-input.md +0 -0
- {briefloop-0.28.2 → 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.2 → briefloop-0.28.4}/docs//344/274/232/350/256/256/347/272/252/350/246/201.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs//345/206/205/347/275/256/345/274/225/346/223/216.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs//345/215/207/347/272/247/350/257/264/346/230/216.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs//345/233/276/350/241/250/344/270/216Excel.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md" +0 -0
- {briefloop-0.28.2 → 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.2 → briefloop-0.28.4}/docs//345/256/232/346/227/266/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.28.2 → 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.2 → 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.2 → 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.2 → 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.2 → briefloop-0.28.4}/docs//350/241/214/344/270/232/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/docs//350/257/201/345/210/270/347/240/224/347/251/266.md" +0 -0
- {briefloop-0.28.2 → 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.2 → 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.2 → briefloop-0.28.4}/docs//351/252/214/346/224/266/350/256/260/345/275/225.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/examples/internal-weekly-report/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/examples/internal-weekly-report/report.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/examples/internal-weekly-report/source.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/examples/meeting-minutes/transcript.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/examples/stock-research/earnings-event.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/anchored-popover.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/api.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/assessment-checks.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/assessment-panel.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/citation-evidence.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/citation-sources.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/clipboard.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/composer-options.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/connectors.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/delivery.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/dom.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/excel-export.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/fact-check-availability.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/fact-check-grants.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/feedback-list.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/jev-checks.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/job-presentation.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/learning-retry.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/length-controls.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/market-convention.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/market-decorations.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/mcp-selection.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/model-catalog.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/native-requests.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/notifications.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/office-tools.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/polling.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/previous-report.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/provider-capabilities.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/quick-report.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/readers.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/reasoning-controls.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/report-browsing.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/report-export.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/report-form-defaults.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/report-language.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/report-panels.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/report-sources.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/report-version-info.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/review-controls.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/review-coverage.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/review-results.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/review-status.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/revision-questions.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/rich-document.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/runtime-cards.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/runtime-model-picker.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/runtime-permission-modes.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/runtime-permission-panel.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/runtime-picker-bindings.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/schedules.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/session-budget.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/skill-verification.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/source-library-search.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/source-upload.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/task-progress.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/template-output.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/templates.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/time.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/uploads.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/version-diff.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/frontend/welcome.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/package-lock.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/package.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/probes/mcp_m0/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/probes/mcp_m0/probe.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/probes/mcp_m0/requirements.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/probes/mcp_m0/server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/bridge.test.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/build.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/catalog.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/claude.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/main.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/permission-catalog.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/pi.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/reasoning.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/user-input.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/windows-command.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/runtime-bridge/zcode.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/scripts/build_frontend_licenses.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/scripts/check_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/scripts/sync_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/scripts/test_frontend.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/setup.cfg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/__main__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/_entrypoint.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/agent_commands.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/agent_prompts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/analyst.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/analyst_drafts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/app_server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/audit_bundle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/backends/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/backends/opencode_server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/backends/opencode_v2.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/bocha.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/bridge_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/chat_dispatch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/chat_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/chat_store.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/codex_diagnostics.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/company_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/comparison_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/conflicts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/MATERIALS.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/config.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/grants.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/materials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/receipts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/runtime_tools.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/service.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/stdio_supervisor.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/task_client.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/tasks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/transport.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/connectors/windows_acl.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/default_fonts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/deliverable_spec.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/delivery_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/demo.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/document_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/document_model.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/document_workflows.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/docx_text.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/draft_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/draft_completion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/duckduckgo.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/evaluation_reading.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/evidence_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/execution_records.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/execution_timing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/export_jobs.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/export_labeling.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/exports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/external_mcp.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/external_requests.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/fact_check.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/fast_mode.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/fast_reports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/fast_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/feedback_view.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/figure_support.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/figure_text.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/figures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/finding_anchors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/host_bins.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/industry_data.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/industry_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/interactive_runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/jev.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/jev_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/learning_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/length.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/market_convention.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/media.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/model_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/native_engine.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/native_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/native_providers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/native_roles.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/notifications.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/office_cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/ooxml_order.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/opencode_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/opencode_version.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/packet_views.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/parent_watch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/plain_isolation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/platform_support.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/previous_report.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/process_host.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/projections.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/core.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.analyst.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.evaluator.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.orchestrator.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/provider_catalog.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/readers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/reconciliation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/release.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/report_browsing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/report_profiles.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/report_time.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/report_tools.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/research_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/research_handoff.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/research_plan.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/review_capability.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/review_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/revision_edits.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/revision_metadata.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/revision_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/rpc_writer.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/runtime_bridge.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/runtime_permissions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/runtime_reasoning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/scout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/scout_coverage.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/scout_evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/scout_tools.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/search_credentials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/search_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/skill_verification.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/skills.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/source_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/source_extraction.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/source_ingestion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/source_library_search.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/source_search.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/source_updates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/sources.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/frontend-licenses.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/native-engine-models.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-aider.png +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-amr.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-antigravity.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-briefloop.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-claude.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-codebuddy.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-codex.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-copilot.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-deepseek.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-devin.png +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-grok-build.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-hermes.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-kilo.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-kimi.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-kiro.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-mimo.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-opencode.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-pi.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-qoder.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-qwen.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-reasoning.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-reasonix.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-trae-cli.png +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/runtime-vibe.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/static/tokens.css +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/task_labels.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/task_notify.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/tavily.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/template_conversion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/templates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/user_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/version_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/websearch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/windows_process.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/word_import.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workbook_figures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workspace_profile.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/workspaces.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/writer_assembly.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/writer_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/writing_guidance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/xlsx_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop/zhipu.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop.egg-info/dependency_links.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop.egg-info/entry_points.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop.egg-info/requires.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/briefloop.egg-info/top_level.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/__main__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/_licenses/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/_licenses/NOTICE.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/alfworld/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/alfworld/act.sh +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/alfworld/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/alfworld/step.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/benchmarks/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/benchmarks/alfworld.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/benchmarks/livemath.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/benchmarks/sealqa.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/codex_identity.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/engine.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/feedback_loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/isolated/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/isolated/audit.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/isolated/runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/isolated/tools_server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/jsonl.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/k4_lock.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/livemath/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/livemath/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/livemath/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/native_agents.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/dataset.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/fetch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/retrieval.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/reward.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/scoring.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/officeqa/wiki_agents.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/paper_alignment/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/paper_alignment/contracts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/paper_alignment/evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/product.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/product_cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/product_install.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/product_views.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/executor.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/snapshot.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/results.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/score_rules.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/scorer_trust.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/sealqa/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/sealqa/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/sealqa/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/settings.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/skill_proposer.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/spreadsheet/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/spreadsheet/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/spreadsheet/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/spreadsheet/study.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/tool_audit.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/wiki.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/src/wikiskill/wiki_maintainer.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/start.ps1 +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_anchored_popover.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_assessment_checks.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_brand_colors.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_chat_attachments.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_chat_drafts.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_chat_layout.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_chat_polling.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_checkout_eol.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_citation_clipboard.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_citation_edit.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_citation_evidence.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_citation_sources.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_clipboard_fallback.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_excel_export.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_export_menu.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_fact_check_availability.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_fact_check_grants.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_fast_mode.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_feedback_list.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_home_v2.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_job_presentation.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_learning_authorization.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_learning_retry.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_length_controls.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_licenses.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_live_status.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_markdown_import.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_market_convention.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_mcp_selection.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_model_catalog_refresh.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_model_label.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_model_selection.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_native_requests.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_native_runtime.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_office_tools.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_open_brief_status.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_pending_report.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_polling.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_previous_report.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_progress_race.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_provider_capabilities.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_quick_report.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_readers.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_reasoning_controls.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_release_controls.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_release_navigation.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_browsing.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_chat_drawer.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_export.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_language.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_load.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_outline.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_panels.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_report_version_info.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_review_capability.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_review_coverage.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_review_status.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_revision_questions.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_runtime_discovery.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_runtime_feedback.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_runtime_model_picker.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_runtime_permission_panel.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_settings_workspaces.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_skill_verification.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_source_library.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_source_search.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_source_upload.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_startup_recovery.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_task_progress.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_template_groups.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_template_output.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_update_notifications.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_upload_limits.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_version_bodies.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_version_diff.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_welcome_gate.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_workspace_proposal.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/frontend_writing_preferences.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_agent_backend.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_agent_commands.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_agent_session_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_analyst_draft_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_assessment_admission_recovery.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_assessment_followup.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_background_no_question.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_brand_assets.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_bridge_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_builtin_templates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_chat_dispatch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_chat_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_chat_model_selection.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_cli_doctor.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_codex_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_connection_test_history.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_connector_authorization.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_connector_empty_catalog.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_connector_materials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_connector_tasks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_connectors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_core.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_cross_module_regressions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_delivery_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_delivery_consumers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_demo.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_desktop_lifecycle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_document_workflows.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_draft_completion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_draft_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_english_reports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_entrypoint.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_evidence_parse_failures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_execution_records.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_execution_timing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_export_admission.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_export_labeling.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_export_layout_swap.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_export_xlsx.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_external_mcp.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_external_requests.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fact_check_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fact_check_orchestration.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fact_check_phase.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fact_check_review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fact_status_tool.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fast_evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fast_mode.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fast_qualifier_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fast_reports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_fast_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_feedback_view.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_figure_exports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_figure_flow.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_figure_text.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_figures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_finding_anchors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_generation_schema_guidance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_host_bins.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_human_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_industry_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_industry_flow.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_industry_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_interactive_runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_jev_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_learning_authorization.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_learning_integrity.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_length.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_length_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_markdown_download.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_market_convention.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_media_sources.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_model_catalog_defaults.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_monthly_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_multimodal_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_multimodal_http.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_analyst.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_evaluator.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_orchestrator.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_provider_storage.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_providers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_research_closeout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_review_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_native_scout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_notifications.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_npm_native_shim.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_numeric_occurrence_review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_office_cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_office_source_structure.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_office_surfaces.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_ooxml_order.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_prompt_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_provider.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_questions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_reasoning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_review_version.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_search_prompt.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_server_stdin.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_v2.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_opencode_version_probe.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_plain_isolation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_posix_process_tree.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_pr593_roundtrip.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_previous_report.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_product_summary_consistency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_progress.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_progress_pipeline.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_provider_catalog.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_public_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_quality_reading_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_reader_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_reader_profiles.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_reader_source_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_reader_workflow.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_reconciliation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_release.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_release_identity.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_report_browsing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_report_concurrency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_report_deletion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_report_length_feedback.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_report_path_regressions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_report_time.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_research_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_research_gap_updates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_research_handoff.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_research_plan.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_research_response_admission.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_resume_in_place.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_finding_consistency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_modes.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_packet_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_packet_utf8.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_public_metadata.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_schema_drift.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_snapshot.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_review_visual_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_revision_citations.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_revision_edits.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_revision_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_rich_document.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_role_models.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_bridge.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_bridge_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_concurrency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_json_bom.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_liveness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_names.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_permissions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_propagation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_retry.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_runtime_settlement.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_schedules.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_scout_experiment.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_search_credentials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_search_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_semantic_experiment.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_semantic_governance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_server_boundary.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_settings_transactions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_skill_verification.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_software_version.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_source_ingestion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_source_library_search.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_source_recovery_regressions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_source_updates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_sources_provenance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_store_sqlite_benchmark.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_store_wal.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_table_citation_advisory.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_task_labels.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_task_notify.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_task_progress.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_tavily.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_template_conversion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_template_conversion_http.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_template_saved_state.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_templates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_user_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_user_source_refresh.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_version_consistency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_version_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_websearch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_websearch_singleflight.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_wikiskill_engine_windows.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_antigravity_permissions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_connector_acl.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_distribution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_mcp_supervisor.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_platform.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_release_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_review_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_runtime_bundle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_windows_xlsx_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_word_import.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_word_source_locators.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_word_toc.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_worker_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_workspace_action_errors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_workspace_profile.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_workspaces.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_writer_assembly.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_writer_cli_guidance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_writer_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_writer_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_xlsx_officecli_integration.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/tests/test_xlsx_preview.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/NOTICE.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/acp/constants.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/acp/json.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/acp/models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/acp/rpc.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/acp/session-params.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/acp/types.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/byok-reference/byok-opencode.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/byok-reference/provider-models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/core/index.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/core/json-line-stream.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/runtime-models/codex-models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/runtime-models/mmd-routes.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/runtime-models/models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.4}/third_party/open-design/runtime-models/opencode-models.ts +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
/src/wikiskill/** text=auto eol=lf
|
|
5
5
|
|
|
6
6
|
# Build checks compare these generated artifacts byte-for-byte on every platform.
|
|
7
|
+
/native-engine/models.json text eol=lf
|
|
7
8
|
/src/briefloop/static/app.js text eol=lf
|
|
8
9
|
/src/briefloop/static/frontend-licenses.txt text eol=lf
|
|
9
10
|
/frontend/ui-system.css text eol=lf
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.28.4 — 2026-10-02
|
|
4
|
+
|
|
5
|
+
- 对话 Agent 可以通过正在运行的服务停止指定任务及子任务,保留已保存稿件,并返回实际停止状态。
|
|
6
|
+
- 新工作区的联网完整报告默认启用独立事实核查;已有选择、单报告覆盖、离线和快速模式保持各自规则。
|
|
7
|
+
- Native Scout 沿用已登记的轮次结果路径,在冻结上限内恢复可用并行容量,显示真实开始与结束时间。
|
|
8
|
+
- 后续研究轮次声明任务时同步保存计划,避免上一轮任务残留导致无法结束研究。
|
|
9
|
+
- 支持从已保存报告准备下一期:复用写作约定,重新确认本期日期和材料;不继承旧证据、评分或联网授权。
|
|
10
|
+
- 点击“基于此报告开始下一期”直接准备表单,不再弹出确认框;页面保留说明与取消跨期关联入口,取消时保留已填内容。
|
|
11
|
+
|
|
12
|
+
## 0.28.3 — 2026-10-02
|
|
13
|
+
|
|
14
|
+
- 内置 BriefLoop Agent 升级至 Pi 1.0.0,适配压缩指令的新 transcript 接口,保留角色工具隔离及失败后的会话恢复。
|
|
15
|
+
- 随包提供图像解码 worker 与 WASM,使报告图片在独立 wheel 和桌面后端中可实际解码、缩放和发送;增加旧版会话迁移与 Mac/Windows 引擎回归。
|
|
16
|
+
- 修复极窄图片缩放被遗漏的问题,关闭长子任务期间未计入用量的默认缓存预热,并更新内置依赖以消除已知漏洞版本。
|
|
17
|
+
- 版本与更新设置直接显示当前版本及可用更新的改动说明,保留检查、下载和安装状态;当前版本说明随包提供,离线也能查看。
|
|
18
|
+
- 增加定期报告实验的离线预检,核对时间范围、材料哈希及输入与参考答案隔离;预检本身不代表报告质量提升。
|
|
19
|
+
- 修复桌面正常停止后端时 Python 等待 stdin 导致异常退出的问题;忙任务拒绝停止时保留服务与管道。
|
|
20
|
+
|
|
3
21
|
## 0.28.2 — 2026-10-01
|
|
4
22
|
|
|
5
23
|
- 延续设计 v3.1 的品牌、引用与来源卡、过程折叠和 Word / Excel 涨跌惯例与 AI 来源标识。
|
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,13 @@
|
|
|
1
|
+
# BriefLoop 0.28.3
|
|
2
|
+
|
|
3
|
+
本次发行包含 Pi 1.0.0 升级与兼容修复 #888、版本说明页 #887、定期报告实验离线预检 #873。下一期报告 #870 及评分实验 #855 / #857 保留在各自分支,尚未通过的验收不作为本版质量承诺。
|
|
4
|
+
|
|
5
|
+
原生引擎保留角色工具隔离和旧会话恢复,适配压缩指令的 transcript 接口,随包提供图像 worker 与 Photon WASM。修复 5000×1 / 1×5000 图片缩放被遗漏的问题,关闭长子任务期间默认缓存预热,保证请求与用量事件一致。原生引擎使用固定 pnpm 锁及修复后的 brace-expansion;前端和桌面继续使用 npm。
|
|
6
|
+
|
|
7
|
+
三个 PR 的组合已通过 1283 项 Python 测试(65 跳过)、246 项前端测试(3 跳过)、构建与 design:check,47 项原生引擎回归和依赖审计零告警。版本说明页的 1440px 和 768px 实际浏览器截图已核验;检查更新可用,当前说明与 wheel / sdist 中的资源一致。Pi 升级最终提交的 Linux、macOS、Windows 六项 CI 全通过。
|
|
8
|
+
|
|
9
|
+
用户已授权合并、GitHub Release、PyPI、官网及可访问的本机安装更新,保留旧版回退。发行从干净冻结提交构建,共用后端 wheel 仅构建一次,所有渠道复用相同字节。发行工件哈希、平台验收和发布后渠道状态随本版验证记录披露。
|
|
10
|
+
|
|
11
|
+
发行验收另复现并修复了桌面正常停止后端的 stdin 交接问题:原行为使 Python 以 SIGABRT 退出;收到正式停止接口的成功回执后关闭 owner 管道,实际 Python / Electron 组合恢复正常退出。忙任务拒绝停止时保留管道及服务。安装包验收脚本直接加载实际 ASAR 模块,检查随包环境、Pi 1.0、版本说明、正常退出,以及两种涨跌惯例和 agent / user 合成稿的八份 Word / Excel 产物;不调用模型、不替代原生窗口或办公软件操作验收。
|
|
12
|
+
|
|
13
|
+
延续现有未签名桌面发行路径,不声称 Developer ID 签名或公证。缺少的原生窗口、Finder 或办公软件操作证据必须标为未核验,不能以 CI、源码版本或旧版结果替代。AI 来源标识不代表完整法律合规保证;离线预检不证明模型输出质量提升。
|
|
@@ -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
|
|
|
@@ -2,18 +2,51 @@
|
|
|
2
2
|
import {$} from './dom.js';
|
|
3
3
|
export function appUpdatesUI({api,notice}){
|
|
4
4
|
let appUpdateState=null,softwareInfo=null,appUpdatePending=false,appUpdateLastAction='check';
|
|
5
|
+
const releaseNotes=new Map();
|
|
6
|
+
function showNotes(id,title,value){
|
|
7
|
+
$(`${id}-title`).textContent=title;
|
|
8
|
+
$(id).textContent=value?.state==='loaded'?value.notes:value?.state==='empty'?'该版本未提供发布说明。':value?.message||'正在读取发布说明…';
|
|
9
|
+
}
|
|
10
|
+
function renderNotes(value){
|
|
11
|
+
const current=softwareInfo?.version;
|
|
12
|
+
const installed=value?.currentAppVersion||current;
|
|
13
|
+
if(current)showNotes('app-update-current-notes',`${current===installed?'当前版本':'当前后端'} v${current} 的改动`,releaseNotes.get(current)||softwareInfo.release_notes);
|
|
14
|
+
const latest=value?.releaseVersion;
|
|
15
|
+
// A failed check may retain the old download target; do not call it latest.
|
|
16
|
+
const known=latest&&value?.state!=='checking'&&!(value?.state==='error'&&(value.error?.operation||appUpdateLastAction)==='check');
|
|
17
|
+
$('app-update-latest-version').textContent=known?`最近检查的发布版本 v${latest}`:value?.state==='checking'?'正在检查可用版本…':value?.state==='error'?'可用版本检查未完成':'尚未检查可用版本';
|
|
18
|
+
$('app-update-notes-box').hidden=!known||latest===current;
|
|
19
|
+
if(known&&latest!==current)showNotes('app-update-notes',`${['available','downloading','downloaded'].includes(value.state)?'可用更新':'发布版本'} v${latest} 的改动`,value.source==='local-test'?{state:value.notes?'loaded':'empty',notes:value.notes}:releaseNotes.get(latest));
|
|
20
|
+
}
|
|
21
|
+
async function loadNotes(version,force=false){
|
|
22
|
+
if(!version||releaseNotes.get(version)?.state==='loading'||(!force&&releaseNotes.has(version)))return;
|
|
23
|
+
releaseNotes.set(version,{state:'loading'});renderNotes(appUpdateState);
|
|
24
|
+
try{
|
|
25
|
+
const result=await api('software-release-notes',{version});
|
|
26
|
+
releaseNotes.set(version,result?.version===version?result:{state:'error',message:'发布说明版本不匹配,请重新检查。'});
|
|
27
|
+
}catch{releaseNotes.set(version,{state:'error',message:'无法获取该版本的发布说明,请检查网络后重试。'})}
|
|
28
|
+
renderNotes(appUpdateState);
|
|
29
|
+
}
|
|
30
|
+
function refreshNotes(force=false){
|
|
31
|
+
const current=softwareInfo?.version;
|
|
32
|
+
if(current&&!softwareInfo.release_notes)void loadNotes(current,force);
|
|
33
|
+
const target=appUpdateState?.releaseVersion;
|
|
34
|
+
if(target&&target!==current&&appUpdateState.source!=='local-test')void loadNotes(target,force);
|
|
35
|
+
}
|
|
5
36
|
function renderAppUpdates(value=appUpdateState){
|
|
6
37
|
const box=$('settings-view-updates');if(!box)return;
|
|
7
38
|
const desktop=typeof window.briefloopDesktop?.updateStatus==='function';
|
|
8
39
|
$('app-update-controls').hidden=false;
|
|
9
|
-
$('app-update-version').textContent=
|
|
40
|
+
$('app-update-version').textContent=desktop?`当前 App v${value?.currentAppVersion||'读取中'}`:softwareInfo?`当前版本 v${softwareInfo.version}`:'正在读取实际运行版本…';
|
|
10
41
|
const installations={desktop:'桌面管理的后端 · App 与 CLI 共用',source:'开发源码',pip:'Python 包安装',pipx:'pipx 安装',uv:'uv 工具安装'};
|
|
11
|
-
$('app-update-installation').textContent=softwareInfo
|
|
42
|
+
$('app-update-installation').textContent=softwareInfo?`${installations[softwareInfo.installation]||'独立安装'} · 后端 v${softwareInfo.version}${softwareInfo.build?` · 构建 ${softwareInfo.build}`:''}`:'';
|
|
12
43
|
$('app-update-command').hidden=!softwareInfo?.update_command;
|
|
13
44
|
$('app-update-command').textContent=softwareInfo?.update_command||'';
|
|
14
|
-
$('app-update-source').textContent=value?.source==='local-test'?'本地测试更新源 · 仅验证流程,不代表官方发布':desktop?'官方稳定来源:Stahl-G/briefloop · GitHub Releases':'
|
|
45
|
+
$('app-update-source').textContent=value?.source==='local-test'?'本地测试更新源 · 仅验证流程,不代表官方发布':desktop?'官方稳定来源:Stahl-G/briefloop · GitHub Releases':'版本检查:PyPI · 发布说明:GitHub Releases';
|
|
46
|
+
$('app-update-test-source').hidden=value?.source!=='local-test';
|
|
15
47
|
const reinstall=value?.source==='local-test'&&value?.reinstall===true;
|
|
16
|
-
$('app-update-guidance').textContent=!desktop?(softwareInfo?.guidance||'正在读取安装来源…'):value?.installMode==='zip'?'
|
|
48
|
+
$('app-update-guidance').textContent=!desktop?(softwareInfo?.guidance||'正在读取安装来源…'):value?.installMode==='zip'?'安装前会保存编辑并处理忙任务。退出后,在 Finder 中将新版 App 拖入“安装位置”并替换,再打开 BriefLoop;工作区保留。':value?.installMode==='dmg'?`安装前会保存编辑并处理忙任务,再退出并打开 DMG;请在 Finder 中${reinstall?'重新安装当前版本':'手动安装新版本'}。`:'安装前会保存编辑并处理忙任务,再退出并交给安装器更新;工作区保留。';
|
|
49
|
+
$('app-update-guidance').hidden=desktop&&!['available','downloading','downloaded','error'].includes(value?.state);
|
|
17
50
|
const errorOperation=value?.error?.operation||(value?.error?.code==='open_failed'?'install':appUpdateLastAction);
|
|
18
51
|
const errorLabel={check:'更新检查失败(当前安装不受影响)',download:'更新包下载未完成',install:'更新安装未完成'}[errorOperation]||'更新检查失败(当前安装不受影响)';
|
|
19
52
|
const labels={idle:'尚未检查更新',checking:'正在检查更新…',available:'发现可用更新',current:'当前 App 无需更新',downloading:'正在下载更新…',downloaded:'下载完成,等待安装',error:errorLabel};
|
|
@@ -31,8 +64,9 @@ export function appUpdatesUI({api,notice}){
|
|
|
31
64
|
$('app-update-progress-box').hidden=!progress;
|
|
32
65
|
$('app-update-progress').value=progress?.percent||0;
|
|
33
66
|
$('app-update-progress-text').textContent=progress?`${Math.round(progress.percent||0)}% · ${(Math.max(0,progress.transferred||0)/1048576).toFixed(1)} / ${(Math.max(0,progress.total||0)/1048576).toFixed(1)} MiB`:'';
|
|
34
|
-
|
|
35
|
-
|
|
67
|
+
$('app-update-progress-detail').textContent='';
|
|
68
|
+
if(progress?.mode==='differential')$('app-update-progress-detail').textContent=`增量下载,复用 ${(Math.max(0,progress.reused||0)/1048576).toFixed(1)} MiB`;
|
|
69
|
+
else if(progress?.mode==='full')$('app-update-progress-detail').textContent=({
|
|
36
70
|
no_baseline:'无有效基准缓存,完整下载并建立缓存',
|
|
37
71
|
little_reuse:'本次可复用内容较少,完整下载',
|
|
38
72
|
range_unavailable:'下载服务不支持分段传输,完整下载',
|
|
@@ -41,13 +75,13 @@ export function appUpdatesUI({api,notice}){
|
|
|
41
75
|
differential_unavailable:'增量不可用,已回退完整下载',
|
|
42
76
|
blockmap_unavailable:'此版本无可用增量信息,完整下载'
|
|
43
77
|
}[progress.fallback]||'完整下载');
|
|
44
|
-
|
|
78
|
+
renderNotes(value);
|
|
45
79
|
}
|
|
46
80
|
async function refreshAppUpdates(){
|
|
47
81
|
renderAppUpdates();
|
|
48
82
|
try{softwareInfo=await api('software-version');
|
|
49
83
|
if(typeof window.briefloopDesktop?.updateStatus==='function')appUpdateState=await window.briefloopDesktop.updateStatus();
|
|
50
|
-
renderAppUpdates()}
|
|
84
|
+
renderAppUpdates();refreshNotes()}
|
|
51
85
|
catch{notice('无法读取 App 更新状态,请重新打开设置。',true)}
|
|
52
86
|
}
|
|
53
87
|
async function runAppUpdate(command){
|
|
@@ -58,7 +92,7 @@ export function appUpdatesUI({api,notice}){
|
|
|
58
92
|
appUpdatePending=true;appUpdateState={state:'checking'};renderAppUpdates();
|
|
59
93
|
try{appUpdateState=await api('software-update-check',{});softwareInfo=appUpdateState}
|
|
60
94
|
catch(error){appUpdateState={state:'error',retryable:true,error:{message:error.message||'版本检查未完成'}}}
|
|
61
|
-
finally{appUpdatePending=false;renderAppUpdates()}
|
|
95
|
+
finally{appUpdatePending=false;renderAppUpdates();refreshNotes(command==='check')}
|
|
62
96
|
return;
|
|
63
97
|
}
|
|
64
98
|
appUpdatePending=true;appUpdateLastAction=command;renderAppUpdates();
|
|
@@ -72,7 +106,7 @@ export function appUpdatesUI({api,notice}){
|
|
|
72
106
|
}catch(error){
|
|
73
107
|
notice(error.message||'更新操作未完成,请重试。',true);
|
|
74
108
|
try{appUpdateState=await desktop.updateStatus()}catch{}
|
|
75
|
-
}finally{appUpdatePending=false;renderAppUpdates()}
|
|
109
|
+
}finally{appUpdatePending=false;renderAppUpdates();refreshNotes(command==='check')}
|
|
76
110
|
}
|
|
77
111
|
function init(){
|
|
78
112
|
if($('settings-view-updates')){
|
|
@@ -81,7 +115,7 @@ export function appUpdatesUI({api,notice}){
|
|
|
81
115
|
$('app-update-install').onclick=()=>runAppUpdate('install');
|
|
82
116
|
// A temporary DMG open error can retry the saved asset through the same gate.
|
|
83
117
|
$('app-update-retry').onclick=()=>runAppUpdate(appUpdateState?.error?.code==='open_failed'?'install':(appUpdateState?.error?.operation||appUpdateLastAction)==='install'?'download':appUpdateState?.error?.operation||appUpdateLastAction);
|
|
84
|
-
window.briefloopDesktop?.onUpdateStatus?.(value=>{appUpdateState=value;renderAppUpdates()});
|
|
118
|
+
window.briefloopDesktop?.onUpdateStatus?.(value=>{appUpdateState=value;renderAppUpdates();refreshNotes()});
|
|
85
119
|
renderAppUpdates();
|
|
86
120
|
}
|
|
87
121
|
}
|
|
@@ -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"
|
|
@@ -6,11 +6,20 @@ import { collectFrontendLicenses, renderFrontendLicenses } from './build_fronten
|
|
|
6
6
|
|
|
7
7
|
const root = fileURLToPath(new URL('../', import.meta.url));
|
|
8
8
|
const check = process.argv.includes('--check');
|
|
9
|
+
// Ship the exact running version's changelog so settings remains useful offline.
|
|
10
|
+
const version = fs.readFileSync(path.join(root, 'pyproject.toml'), 'utf8').match(/^version\s*=\s*"([^"]+)"/m)?.[1];
|
|
11
|
+
if (!version) throw Error('Missing product version in pyproject.toml');
|
|
12
|
+
const changelog = fs.readFileSync(path.join(root, 'CHANGELOG.md'), 'utf8').replaceAll('\r\n', '\n');
|
|
13
|
+
const sections = [...changelog.matchAll(/^## ([^\r\n]+)\r?\n([\s\S]*?)(?=^## |$(?![\s\S]))/gm)];
|
|
14
|
+
const section = sections.find(match => match[1].split(/\s/)[0] === version);
|
|
15
|
+
if (!section) throw Error(`Missing changelog for running version ${version}`);
|
|
9
16
|
const result = await build({ absWorkingDir: root, entryPoints: ['frontend/app.js'],
|
|
10
17
|
bundle: true, format: 'esm', minify: true, outfile: 'src/briefloop/static/app.js',
|
|
11
18
|
metafile: true, write: false });
|
|
12
19
|
const rows = collectFrontendLicenses(result.metafile, root);
|
|
13
20
|
const artifacts = [...result.outputFiles.map(file => ({ path: file.path, contents: file.contents })),
|
|
21
|
+
{ path: path.join(root, 'src/briefloop/static/release-notes.json'),
|
|
22
|
+
contents: Buffer.from(JSON.stringify({version, notes: section[2].trim()}, null, 2) + '\n') },
|
|
14
23
|
{ path: path.join(root, 'src/briefloop/static/frontend-licenses.txt'),
|
|
15
24
|
contents: Buffer.from(renderFrontendLicenses(rows)) }];
|
|
16
25
|
// Retain the legacy layout during migration; the shared component layer is
|
|
@@ -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):
|