briefloop 0.26.4__tar.gz → 0.27.0__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.26.4 → briefloop-0.27.0}/CHANGELOG.md +9 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/PKG-INFO +1 -1
- briefloop-0.27.0/VERSION +1 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/desktop/electron/package-lock.json +2 -2
- {briefloop-0.26.4 → briefloop-0.27.0}/desktop/electron/package.json +1 -1
- briefloop-0.27.0/docs/release-0.27.0.md +13 -0
- briefloop-0.27.0/docs/revision-learning.md +16 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/app.js +26 -13
- briefloop-0.27.0/frontend/learning-retry.js +11 -0
- briefloop-0.27.0/frontend/previous-report.js +32 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/provider-capabilities.js +3 -0
- briefloop-0.27.0/frontend/readers.js +52 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/report-browsing.js +1 -1
- briefloop-0.27.0/frontend/revision-questions.js +42 -0
- briefloop-0.27.0/frontend/skill-verification.js +17 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/pyproject.toml +1 -1
- briefloop-0.27.0/src/briefloop/__init__.py +1 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/deliverable_spec.py +5 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/docx_text.py +3 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/figure_support.py +6 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/interactive_runtime.py +3 -3
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/learning.py +142 -18
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/learning_budget.py +38 -7
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/models.py +15 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/native_roles.py +47 -0
- briefloop-0.27.0/src/briefloop/previous_report.py +141 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/progress.py +3 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.analyst.zh.md +1 -1
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.evaluator.zh.md +1 -1
- briefloop-0.27.0/src/briefloop/readers.py +142 -0
- briefloop-0.27.0/src/briefloop/revision_edits.py +243 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/runtime.py +11 -4
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/server.py +21 -2
- briefloop-0.27.0/src/briefloop/skill_verification.py +231 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/app.js +105 -103
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/index.html +5 -5
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/style.css +37 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/store.py +53 -14
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/writing_guidance.py +2 -1
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop.egg-info/PKG-INFO +1 -1
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop.egg-info/SOURCES.txt +20 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_learning_authorization.mjs +2 -1
- briefloop-0.27.0/tests/frontend_learning_retry.mjs +12 -0
- briefloop-0.27.0/tests/frontend_previous_report.mjs +23 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_provider_capabilities.mjs +4 -0
- briefloop-0.27.0/tests/frontend_readers.mjs +42 -0
- briefloop-0.27.0/tests/frontend_revision_questions.mjs +40 -0
- briefloop-0.27.0/tests/frontend_skill_verification.mjs +17 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_learning_authorization.py +59 -1
- briefloop-0.27.0/tests/test_previous_report.py +140 -0
- briefloop-0.27.0/tests/test_reader_profiles.py +133 -0
- briefloop-0.27.0/tests/test_revision_edits.py +213 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_retry.py +23 -0
- briefloop-0.27.0/tests/test_skill_verification.py +161 -0
- briefloop-0.26.4/VERSION +0 -1
- briefloop-0.26.4/src/briefloop/__init__.py +0 -1
- {briefloop-0.26.4 → briefloop-0.27.0}/.gitattributes +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/CONTRIBUTING.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/KNOWN_ISSUES.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/LICENSE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/MANIFEST.in +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/SECURITY.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/THIRD_PARTY_NOTICES.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/bootstrap.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/architecture.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/compose/spec/home-v2.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/draft-first.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/jev-precheck.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/native-integration.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/quality-reading-context.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/release-0.26.0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/release-0.26.1.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/release-0.26.2.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/release-0.26.3.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/release-0.26.4.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/report-length.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/report-time-window.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/research-handoff.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/sqlite-benchmark.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/technical-report-0.21.0/evidence-index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/technical-report-0.21.0/technical-report.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/windows.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs/writer-input.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/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.26.4 → briefloop-0.27.0}/docs//344/274/232/350/256/256/347/272/252/350/246/201.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//345/206/205/347/275/256/345/274/225/346/223/216.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//345/215/207/347/272/247/350/257/264/346/230/216.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//345/233/276/350/241/250/344/270/216Excel.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//345/256/232/346/227/266/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/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.26.4 → briefloop-0.27.0}/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.26.4 → briefloop-0.27.0}/docs//346/267/261/345/272/246/347/240/224/347/251/266/344/270/216/344/272/213/345/256/236/346/240/270/346/237/245.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/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.26.4 → briefloop-0.27.0}/docs//350/241/214/344/270/232/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/docs//350/257/201/345/210/270/347/240/224/347/251/266.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/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.26.4 → briefloop-0.27.0}/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.26.4 → briefloop-0.27.0}/docs//351/252/214/346/224/266/350/256/260/345/275/225.md" +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/examples/internal-weekly-report/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/examples/internal-weekly-report/report.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/examples/internal-weekly-report/source.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/examples/meeting-minutes/transcript.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/examples/stock-research/earnings-event.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/api.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/app-updates.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/assessment-checks.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/assessment-panel.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/citation-evidence.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/clipboard.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/composer-options.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/connectors.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/delivery.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/dom.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/excel-export.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/fact-check-availability.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/fact-check-grants.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/jev-checks.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/job-presentation.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/length-controls.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/mcp-selection.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/model-catalog.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/native-requests.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/notifications.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/office-tools.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/polling.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/quick-report.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/reasoning-controls.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/report-export.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/report-language.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/report-panels.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/report-sources.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/review-controls.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/review-coverage.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/review-results.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/review-status.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/rich-document.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/runtime-cards.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/runtime-permission-modes.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/runtime-permission-panel.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/schedules.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/source-library-search.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/source-upload.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/task-progress.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/template-output.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/templates.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/time.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/uploads.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/version-diff.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/frontend/welcome.js +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/package-lock.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/package.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/probes/mcp_m0/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/probes/mcp_m0/probe.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/probes/mcp_m0/requirements.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/probes/mcp_m0/server.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/bridge.test.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/build.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/catalog.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/claude.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/main.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/permission-catalog.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/pi.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/reasoning.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/user-input.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/windows-command.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/runtime-bridge/zcode.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/scripts/build_frontend.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/scripts/build_frontend_licenses.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/scripts/check_versions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/scripts/sync_versions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/scripts/test_frontend.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/setup.cfg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/__main__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/_entrypoint.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/agent_commands.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/agent_prompts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/analyst.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/analyst_drafts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/app_server.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/audit_bundle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/backends/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/backends/opencode_server.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/backends/opencode_v2.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/bocha.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/bridge_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/chat_dispatch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/chat_execution.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/chat_store.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/chat_tools.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/codex_diagnostics.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/company_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/comparison_contract.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/conflicts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/MATERIALS.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/config.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/grants.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/materials.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/receipts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/runtime.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/runtime_tools.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/service.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/stdio_supervisor.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/task_client.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/tasks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/transport.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/connectors/windows_acl.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/default_fonts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/delivery_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/demo.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/document_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/document_model.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/document_workflows.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/draft_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/draft_completion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/duckduckgo.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/evaluation_reading.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/evidence_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/execution_records.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/execution_timing.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/export_jobs.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/exports.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/external_client.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/external_requests.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/fact_check.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/fast_mode.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/fast_reports.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/fast_research.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/figure_text.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/figures.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/host_bins.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/industry_data.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/industry_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/jev.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/jev_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/length.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/media.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/native_engine.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/native_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/native_orchestrator.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/native_providers.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/notifications.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/office_cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/ooxml_order.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/opencode_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/opencode_version.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/packet_views.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/parent_watch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/platform_support.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/process_host.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/projections.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/core.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.orchestrator.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/provider_catalog.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/reconciliation.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/release.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/report_browsing.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/report_profiles.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/report_time.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/report_tools.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/research_budget.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/research_handoff.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/research_plan.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/review.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/review_capability.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/review_learning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/revision_metadata.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/revision_policy.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/rpc_writer.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/runtime_bridge.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/runtime_permissions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/runtime_reasoning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/schedules.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/scout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/scout_evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/scout_tools.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/search_credentials.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/search_policy.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/skills.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/software_version.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/source_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/source_extraction.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/source_ingestion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/source_library_search.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/source_search.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/source_updates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/sources.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/frontend-licenses.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/native-engine-licenses.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/native-engine-models.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/native-engine.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-aider.png +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-amr.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-antigravity.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-bridge.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-briefloop.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-claude.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-codebuddy.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-codex.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-copilot.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-deepseek.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-devin.png +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-grok-build.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-hermes.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-kilo.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-kimi.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-kiro.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-mimo.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-opencode.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-pi.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-qoder.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-qwen.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-reasoning.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-reasonix.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-trae-cli.png +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/runtime-vibe.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/static/tokens.css +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/task_labels.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/task_notify.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/task_progress.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/tavily.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/template_conversion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/templates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/user_input.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/websearch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/windows_process.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/word_import.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workbook_figures.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workspace_profile.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/workspaces.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/writer_assembly.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/writer_input.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/xlsx_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop/zhipu.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop.egg-info/dependency_links.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop.egg-info/entry_points.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop.egg-info/requires.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/briefloop.egg-info/top_level.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/__main__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/_licenses/LICENSE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/_licenses/NOTICE.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/alfworld/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/alfworld/act.sh +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/alfworld/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/alfworld/step.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/benchmarks/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/benchmarks/alfworld.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/benchmarks/livemath.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/benchmarks/sealqa.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/codex_identity.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/engine.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/feedback_loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/isolated/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/isolated/audit.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/isolated/runtime.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/isolated/tools_server.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/jsonl.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/k4_lock.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/livemath/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/livemath/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/livemath/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/native_agents.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/dataset.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/fetch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/retrieval.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/reward.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/scoring.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/officeqa/wiki_agents.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/paper_alignment/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/paper_alignment/contracts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/paper_alignment/evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/product.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/product_cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/product_install.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/product_views.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/paper_alignment/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/roles/executor.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/product/roles/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/snapshot.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/results.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/score_rules.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/scorer_trust.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/sealqa/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/sealqa/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/sealqa/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/settings.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/skill_proposer.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/spreadsheet/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/spreadsheet/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/spreadsheet/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/spreadsheet/study.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/tool_audit.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/wiki.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/src/wikiskill/wiki_maintainer.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/start.ps1 +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/start.sh +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/check_distribution.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_app_updates.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_assessment_checks.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_chat_attachments.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_chat_commands.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_chat_drafts.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_chat_layout.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_chat_polling.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_checkout_eol.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_citation_clipboard.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_citation_edit.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_citation_evidence.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_clipboard_fallback.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_excel_export.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_export_menu.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_fact_check_availability.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_fact_check_grants.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_fast_mode.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_home_v2.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_job_presentation.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_length_controls.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_licenses.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_live_status.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_markdown_import.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_mcp_selection.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_model_catalog_refresh.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_model_label.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_model_selection.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_native_requests.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_native_runtime.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_office_tools.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_open_brief_status.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_pending_report.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_polling.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_progress_race.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_quick_report.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_reasoning_controls.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_release_controls.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_release_navigation.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_report_browsing.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_report_chat_drawer.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_report_export.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_report_language.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_report_load.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_report_outline.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_report_panels.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_review_capability.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_review_coverage.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_review_status.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_runtime_discovery.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_runtime_feedback.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_runtime_permission_panel.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_save_barrier.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_settings_workspaces.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_setup_state.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_source_library.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_source_search.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_source_upload.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_startup_recovery.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_task_progress.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_template_groups.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_template_output.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_update_notifications.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_upload_limits.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_version_bodies.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_version_diff.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_welcome_gate.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_workspace_proposal.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/frontend_writing_preferences.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_agent_backend.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_agent_commands.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_analyst_draft_versions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_assessment_admission_recovery.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_assessment_followup.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_background_no_question.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_bridge_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_builtin_templates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_chat_dispatch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_chat_execution.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_chat_model_selection.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_cli_doctor.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_codex_idle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_connection_test_history.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_connector_authorization.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_connector_empty_catalog.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_connector_materials.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_connector_tasks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_connectors.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_core.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_cross_module_regressions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_delivery_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_delivery_consumers.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_demo.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_desktop_lifecycle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_document_workflows.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_draft_completion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_draft_contract.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_english_reports.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_entrypoint.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_evidence_parse_failures.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_execution_records.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_execution_timing.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_export_admission.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_export_layout_swap.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_export_xlsx.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_external_requests.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fact_check_contract.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fact_check_orchestration.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fact_check_phase.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fact_check_review.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fact_check_switch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fact_status_tool.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fast_evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fast_mode.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fast_qualifier_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fast_reports.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_fast_research.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_figure_exports.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_figure_flow.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_figure_text.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_figures.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_generation_schema_guidance.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_host_bins.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_human_learning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_industry_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_industry_flow.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_industry_research.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_interactive_runtime.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_jev_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_learning_integrity.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_length.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_length_policy.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_markdown_download.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_media_sources.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_model_catalog_defaults.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_multimodal_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_multimodal_http.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_analyst.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_evaluator.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_learning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_orchestrator.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_provider_storage.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_providers.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_research_closeout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_review_contract.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_native_scout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_notifications.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_npm_native_shim.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_numeric_occurrence_review.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_office_cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_office_source_structure.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_office_surfaces.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_ooxml_order.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_idle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_prompt_versions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_provider.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_questions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_reasoning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_review_version.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_search_prompt.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_server_stdin.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_v2.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_opencode_version_probe.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_posix_process_tree.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_pr593_roundtrip.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_product_summary_consistency.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_progress.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_progress_pipeline.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_provider_catalog.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_public_research.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_quality_reading_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_reader_contract.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_reader_source_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_reader_workflow.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_reconciliation.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_release.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_release_identity.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_report_browsing.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_report_concurrency.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_report_deletion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_report_length_feedback.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_report_path_regressions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_report_time.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_research_budget.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_research_gap_updates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_research_handoff.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_research_plan.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_research_response_admission.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_resume_in_place.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_capability.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_finding_consistency.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_learning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_modes.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_packet_paths.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_packet_utf8.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_schema_drift.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_snapshot.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_review_visual_input.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_revision_citations.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_revision_policy.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_rich_document.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_role_models.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_bridge.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_bridge_idle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_concurrency.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_json_bom.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_liveness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_names.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_permissions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_runtime_settlement.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_schedules.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_scout_experiment.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_search_credentials.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_search_policy.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_semantic_experiment.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_semantic_governance.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_server_boundary.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_settings_transactions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_software_version.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_source_ingestion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_source_library_search.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_source_recovery_regressions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_source_updates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_sources_provenance.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_store_sqlite_benchmark.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_table_citation_advisory.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_task_labels.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_task_notify.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_task_progress.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_tavily.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_template_conversion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_template_conversion_http.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_template_saved_state.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_templates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_user_input.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_user_source_refresh.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_version_consistency.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_websearch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_websearch_singleflight.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_wikiskill_engine_windows.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_antigravity_permissions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_connector_acl.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_distribution.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_mcp_supervisor.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_platform.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_release_paths.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_review_paths.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_runtime_bundle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_windows_xlsx_paths.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_word_import.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_word_source_locators.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_word_toc.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_worker_idle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_workspace_action_errors.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_workspace_profile.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_workspaces.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_writer_assembly.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_writer_cli_guidance.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_writer_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_writer_input.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_xlsx_officecli_integration.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/tests/test_xlsx_preview.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/LICENSE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/NOTICE.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/acp/constants.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/acp/json.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/acp/models.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/acp/rpc.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/acp/session-params.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/acp/types.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/byok-reference/byok-opencode.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/byok-reference/provider-models.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/core/index.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/core/json-line-stream.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/runtime-models/codex-models.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/runtime-models/mmd-routes.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/runtime-models/models.ts +0 -0
- {briefloop-0.26.4 → briefloop-0.27.0}/third_party/open-design/runtime-models/opencode-models.ts +0 -0
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.27.0 — 2026-09-30
|
|
4
|
+
|
|
5
|
+
- 从往期报告开始新任务,导入正文或 Word 修订,确认读者、结构、口径与禁区后再生成。
|
|
6
|
+
- 按读者保存偏好;将修订区分为写作经验、事实纠错与待确认事项,避免把不确定改动直接学成规则。
|
|
7
|
+
- 对已采用技能跟踪相关修订是否再次出现,未完成的复验明确保留为未核验。
|
|
8
|
+
- API 提供商保存提示随 BriefLoop Agent / OpenCode 执行引擎切换,准确说明本机配置归属。
|
|
9
|
+
|
|
10
|
+
发行与验收范围见 [0.27.0 记录](docs/release-0.27.0.md)。上一正式版 0.26.4 保留供回退。
|
|
11
|
+
|
|
3
12
|
## 0.26.4 — 2026-09-29
|
|
4
13
|
|
|
5
14
|
- App 更新后自动准备新后端,首次安装与修复仍由用户触发;启动页显示真实阶段。
|
briefloop-0.27.0/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.27.0
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "briefloop-desktop",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "briefloop-desktop",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.27.0",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# BriefLoop 0.27.0
|
|
2
|
+
|
|
3
|
+
本批合入 PR #862 的往期报告启动、读者档案与修订学习,以及 PR #863 的执行引擎配置提示修复。新能力按用户约定升级到 0.27.0;未合入预算、语义实验或依赖锁等其他开发分支。
|
|
4
|
+
|
|
5
|
+
- 从往期正文或 Word 修订反推新报告要求,经确认再开始。
|
|
6
|
+
- 将读者偏好、写作经验、事实纠错及不确定修订分别保存;未核验的技能复现结果保持明确。
|
|
7
|
+
- 保存 API 配置时,提示准确区分 BriefLoop Agent 与 OpenCode 的本机配置。
|
|
8
|
+
|
|
9
|
+
冻结提交统一构建一次后端 wheel,Mac、Windows 与 Python/CLI 复用;发布时上传已有工件,不重建同版本文件。上一正式版 v0.26.4 及其工件保留供回退。
|
|
10
|
+
|
|
11
|
+
验收证据:#863 四项 CI 通过;最新主线相关 42 项 Python 检查及配置提示切换检查通过。已有真实模型合成报告在更新并重启 WebUI 后,正文、两版本、评分、来源和 Word 导出均保留。真实模型结果来自隔离实验,不代表正式报告质量已全面核验。Mac 锁屏使桌面原生界面与实际升级交互尚未核验,不能以构建或包内版本检查替代。平台工件与渠道状态以正式发行资产及验证记录为准。
|
|
12
|
+
|
|
13
|
+
Mac 工件未作 Developer ID 签名或公证;Windows 工件未签名。更新前保存并退出 App,保留原工作区与报告。
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 修订学习闭环(#858)
|
|
2
|
+
|
|
3
|
+
保存与学习分开。保存原稿、改稿、评论及导入 Word 修订不启动模型;开始学习时,确认界面列出一次独立分类会话和每轮整理、提案、比较与试写上限。会话数不是宿主内部回合、Token 或费用上限。旧预算未包含分类调用时暂停,原任务与反馈保留;“确认预算后重试”创建关联的新尝试。
|
|
4
|
+
|
|
5
|
+
## 当前行为
|
|
6
|
+
|
|
7
|
+
- 按正文块拆分改动,Evaluator 对照来源判断口味、事实纠错、读者特定,保留理由与判断者。事实纠错不进入写作技能。所有不确定改动先隔离;较大改动集中提问,小改动在经验页可选确认。人工确认只作为新的反馈消费一次。
|
|
8
|
+
- 读者档案只记录名称、决策用途与偏好,报告冻结当时档案,刷新保持选择。读者专属反馈保留待学习,不进入全局技能;历史独立读者技能及其派生版本不能全局启用,原记录保留。
|
|
9
|
+
- 离线比较保留的候选仍可按原机制用于报告,但“用于报告”和“证明跨期有效”是两个状态。后续单次模型标记只显示初步线索;交付、空 repeats、跳过及未评估均不证明未复发。不自动标为已采用或没有改善,不编造基线和复发率。
|
|
10
|
+
- 导入 MD/TXT/DOCX 可提出读者、结构与口径约定,用户确认后使用。未出现的内容不推定为禁区。Word 插入/删除文本及整行修订保存前后版本,表格保留行列文本。导入文件只作约定和写法参考,不能自动作为本期证据或事实引用;原件仍保留。
|
|
11
|
+
|
|
12
|
+
## 仍未完成
|
|
13
|
+
|
|
14
|
+
共享 WikiSkill 的读者适用条件及跨读者验收、完整报告级复发观察、双独立模型家族判定与人工分歧处理、真实基线和留出系列验收、连续三期真实周期报告均未完成。Issue #858 保持开放。当前不得用两份报告或 50% 阈值证明学习有效。
|
|
15
|
+
|
|
16
|
+
导入是文本与修订抽取,不承诺 Word 原版式、批注或任意复杂修订的无损往返。历史材料的数字和结论不是本期事实。
|
|
@@ -42,6 +42,11 @@ import {Markdown} from '@tiptap/markdown';
|
|
|
42
42
|
import {connectorSettings} from './connectors.js';
|
|
43
43
|
import {mcpSelection} from './mcp-selection.js';
|
|
44
44
|
import {appUpdatesUI} from './app-updates.js';
|
|
45
|
+
import {revisionQuestionsUI} from './revision-questions.js';
|
|
46
|
+
import {readersUI} from './readers.js';
|
|
47
|
+
import {verificationBadge} from './skill-verification.js';
|
|
48
|
+
import {previousReportUI} from './previous-report.js';
|
|
49
|
+
import {learningRetry} from './learning-retry.js';
|
|
45
50
|
import {templatesUI,GENRE_META,ICONS,splitTemplateName} from './templates.js';
|
|
46
51
|
import {createTemplateOutput} from './template-output.js';
|
|
47
52
|
import {deliveryUI,changeTypeLabel,displayDate} from './delivery.js';
|
|
@@ -82,6 +87,12 @@ let followUpdates=true;
|
|
|
82
87
|
let state,current,pendingRun=null,editor,dirty=false,saving=false,saveTimer,learnTimer,markdownMode=false,selected=new Set(),referenceSelected=new Set();
|
|
83
88
|
const reportSources=createReportSources({$,esc,getState:()=>state,getCurrent:()=>current,runSourceIds,sourceState,sourceStatusChip,sourceTitle,sourceHost,openSource:id=>openSourceDrawer(id,sourceUsage()).catch(err=>notice(err.message,true))});
|
|
84
89
|
const reportBrowsing=createReportBrowsing({api,getState:()=>state,getCurrent:()=>current,openBrief,page,notice,reportStatus,reportDescription,reportIconMeta,svgLineIcon,runSourceCount,openRelease:b=>action(()=>delivery.openReleaseDialog(b)),onUsageOpen:closeSourceDrawer,onContext:()=>{assessment();citations();renderBriefLength();renderReportStatus();renderAssistantSummary()}});
|
|
90
|
+
const revisionQuestions=revisionQuestionsUI({api,action:(...args)=>action(...args)});
|
|
91
|
+
const retryLearning=learningRetry({api,getPlan:()=>state?.learning_authorization?.plan,confirm:text=>confirm(text),describePlan:learningPlanText});
|
|
92
|
+
const readerProfiles=readersUI({api,action:(...args)=>action(...args)});
|
|
93
|
+
readerProfiles.bind();
|
|
94
|
+
const previousReport=previousReportUI({api,uploadPayload,getUploadLimits,notice:(...args)=>notice(...args),saveReader:reader=>action(async()=>{const saved=await api('reader-save',reader);await refresh();const select=$('reader-select');if(select){select.value=saved.id;select.dispatchEvent(new Event('change'))}},'读者档案已保存,下一份报告可复用'),openChat:async({text,source_id})=>{await openChatHome();chat.attachments.add(source_id);renderAttachments();$('chat-input').value=text;rememberDraft();updateComposer();$('chat-input').focus()}});
|
|
95
|
+
previousReport.bind();
|
|
85
96
|
function notice(s,error=false){$('notice').textContent=s;$('notice').classList.toggle('error',error);$('notice').hidden=false;clearTimeout(notice.timer);notice.timer=setTimeout(()=>$('notice').hidden=true,error?12000:4500)}
|
|
86
97
|
function page(name){if(document.body.classList.contains('report-chat-open'))setReportChatOpen(false);if(((name==='chat'&&!chat.id)||name==='setup')&&(state?.settings?.model_selection_required||!state?.settings?.model)){notice('请先选择 Agent 和模型');name='welcome'}if(name!=='settings-dialog'&&$('custom-api-key'))$('custom-api-key').value='';for(const id of ['chat','report','reports','sources','templates','setup','learning','settings-dialog','welcome'])$(id).hidden=id!==name;document.querySelectorAll('nav [data-page]').forEach(b=>b.classList.toggle('active',b.dataset.page===name));if(name==='learning')refreshCandidates();if(name==='setup'){if(typeof reportMcpSelection!=='undefined')reportMcpSelection.refresh();moveSearchSettings('setup');applyPendingSetupFields()}else if($('tavily-key')){$('tavily-key').value='';$('bocha-key').value='';$('zhipu-key').value=''}if(name==='reports'){renderTasks();renderTaskGraph();renderReports()}if(['reports','templates','learning'].includes(name))activity?.readCategory(name)}
|
|
87
98
|
document.querySelectorAll('[data-page]').forEach(b=>b.onclick=()=>page(b.dataset.page));
|
|
@@ -393,26 +404,28 @@ function render(first){
|
|
|
393
404
|
renderWorkflowChoices(first);
|
|
394
405
|
if($('review-open'))$('review-open').textContent='审阅与需处理'+(state.conflicts?.length?' · '+state.conflicts.length+' 项来源分歧':'');
|
|
395
406
|
if(first&&$('report-system-clock')&&state.system_clock)$('report-system-clock').textContent=`本机日期:${state.system_clock.today} · ${state.system_clock.timezone};提交时再次由后台核对。`;
|
|
396
|
-
if(first){$('settings-chat-web-default').checked=state.settings.chat_allow_web!==false;$('chat-allow-web').checked=state.settings.chat_allow_web!==false;$('timeout-minutes').value=state.settings.timeout_minutes;$('hard-timeout-minutes').value=state.settings.hard_timeout_minutes||0;$('company-mode').value=state.settings.company_context_enabled==null?'ask':state.settings.company_context_enabled?'on':'off';$('auto-revision').checked=state.settings.auto_revision!==false;state.sources.filter(s=>s.status==='ready').forEach(s=>selected.add(s.id));$('rounds').value=state.settings.k;$('auto-learn').checked=state.learning_authorization?.state==='authorized';$('model-select').value=state.settings.model_selection_required?'':state.settings.model||'';assignEffort('effort-select',settingsEffort(state.settings,state.settings.agent_backend||'codex'));$('model-provider').value=state.settings.model_provider||'';$('service-tier').value=state.settings.service_tier||'';$('agent-backend').value=state.settings.agent_backend||'codex';$('model-variant').value=state.settings.agent_backend==='mimo'?(state.settings.runtime_efforts?.mimo||''):(state.settings.model_variant||'');updateModelLabel();renderRoleModels();renderReviewRuntime();renderBackend();loadSearchPolicy();renderSearchProvider();refreshRuntimeDiscovery();office.syncSettingsToggle();if(state.requirements)for(const [k,v] of Object.entries(state.requirements)){const e=$('requirements').elements[k];if(e)e.type==='checkbox'?e.checked=v:e.value=v}$('requirements').elements.key_questions_text.value=(state.requirements?.key_questions||[]).join('\n');$('requirements').elements.manual_sections_text.value=(state.requirements?.manual_sections||[]).join('\n');reportLanguageForm.restore(state.requirements?.language);initializeLengthInputs(state.requirements||{});initializeResearchBudget(state.requirements||{});initializeReportProfile(state.requirements||{});if(!state.requirements||state.requirements.fact_check==null)$('requirements').elements.fact_check.checked=!!state.settings.fact_checker;syncFactCheckControl();quickReport.sync();syncWorkflowProfile(false);previewReportTime()}
|
|
397
|
-
$('source-count').textContent=state.sources.length+' 份';$('source-list').innerHTML=state.sources.map(s=>`<div class="source-item"><input type="checkbox" data-check="${s.id}" ${selected.has(s.id)?'checked':''} ${s.status!=='ready'?'disabled':''} aria-label="选择 ${esc(s.name)}"><button data-source="${s.id}">${esc(s.name)}</button><span class="tag ${s.status==='failed'?'error':''}">${esc(sourceStatusLabel(s))}</span>${['failed','cancelled','interrupted'].includes(s.status)?`<button data-retry-source="${s.id}">重试</button>`:''}</div>`).join('');
|
|
407
|
+
if(first){$('settings-chat-web-default').checked=state.settings.chat_allow_web!==false;$('chat-allow-web').checked=state.settings.chat_allow_web!==false;$('timeout-minutes').value=state.settings.timeout_minutes;$('hard-timeout-minutes').value=state.settings.hard_timeout_minutes||0;$('company-mode').value=state.settings.company_context_enabled==null?'ask':state.settings.company_context_enabled?'on':'off';$('auto-revision').checked=state.settings.auto_revision!==false;state.sources.filter(s=>s.status==='ready'&&s.usage!=='previous_report').forEach(s=>selected.add(s.id));$('rounds').value=state.settings.k;$('auto-learn').checked=state.learning_authorization?.state==='authorized';$('model-select').value=state.settings.model_selection_required?'':state.settings.model||'';assignEffort('effort-select',settingsEffort(state.settings,state.settings.agent_backend||'codex'));$('model-provider').value=state.settings.model_provider||'';$('service-tier').value=state.settings.service_tier||'';$('agent-backend').value=state.settings.agent_backend||'codex';$('model-variant').value=state.settings.agent_backend==='mimo'?(state.settings.runtime_efforts?.mimo||''):(state.settings.model_variant||'');updateModelLabel();renderRoleModels();renderReviewRuntime();renderBackend();loadSearchPolicy();renderSearchProvider();refreshRuntimeDiscovery();office.syncSettingsToggle();if(state.requirements)for(const [k,v] of Object.entries(state.requirements)){const e=$('requirements').elements[k];if(e)e.type==='checkbox'?e.checked=v:e.value=v}$('requirements').elements.key_questions_text.value=(state.requirements?.key_questions||[]).join('\n');$('requirements').elements.manual_sections_text.value=(state.requirements?.manual_sections||[]).join('\n');reportLanguageForm.restore(state.requirements?.language);initializeLengthInputs(state.requirements||{});initializeResearchBudget(state.requirements||{});initializeReportProfile(state.requirements||{});if(!state.requirements||state.requirements.fact_check==null)$('requirements').elements.fact_check.checked=!!state.settings.fact_checker;syncFactCheckControl();quickReport.sync();syncWorkflowProfile(false);previewReportTime()}
|
|
408
|
+
$('source-count').textContent=state.sources.length+' 份';$('source-list').innerHTML=state.sources.map(s=>`<div class="source-item"><input type="checkbox" data-check="${s.id}" ${selected.has(s.id)?'checked':''} ${s.status!=='ready'||s.usage==='previous_report'?'disabled':''} aria-label="选择 ${esc(s.name)}"><button data-source="${s.id}">${esc(s.name)}</button><span class="tag ${s.status==='failed'?'error':''}">${esc(s.usage==='previous_report'?'往期报告 · 参考用途':sourceStatusLabel(s))}</span>${['failed','cancelled','interrupted'].includes(s.status)?`<button data-retry-source="${s.id}">重试</button>`:''}</div>`).join('');
|
|
398
409
|
document.querySelectorAll('[data-retry-source]').forEach(b=>b.onclick=()=>action(async()=>{const s=await api('retry-source',{source_id:b.dataset.retrySource});selected.delete(b.dataset.retrySource);if(s.status==='ready')selected.add(s.id);notice(sourceStatusLabel(s),['failed','cancelled','interrupted'].includes(s.status))}));
|
|
399
410
|
document.querySelectorAll('[data-check]').forEach(b=>b.onchange=()=>{if(b.checked){selected.add(b.dataset.check);referenceSelected.delete(b.dataset.check);renderReferenceSources()}else selected.delete(b.dataset.check)});renderReferenceSources();
|
|
400
411
|
renderVersionSelect();
|
|
401
412
|
|
|
402
413
|
tryOpenPending();if(!current&&!pendingRun&&!openBrief.request&&state.briefs.length)openBrief(state.briefs[0],{follow:true});if(current&&followUpdates&&!dirty&&!saving){const latest=state.briefs.find(b=>b.run_id===current.run_id);if(latest?.parent_id===current.id&&latest.author==='agent')openBrief(latest,{follow:true})}if(current){$('version-select').value=current.id;assessment();citations();renderBriefLength()}
|
|
403
414
|
syncPendingReport();
|
|
404
|
-
$('jobs').innerHTML=state.jobs.filter(j=>j.status!=='dismissed').map(j=>`<div class="job"><span class="tag ${j.status==='failed'?'error':''}">${statuses[j.status]}</span><div class="job-main">${esc(taskLabel(j.kind)||j.kind)}<small>${esc(jobExecutionLabel(j,jobModelLabel))} · ${j.progress?`第 ${j.progress.round}/${j.progress.k} 轮 · ${{maintainer:'整理经验',proposer:'提出候选',validation:'验证候选'}[j.progress.phase]||j.progress.phase} · `:''}${esc(j.error||(j.kind==='source_refresh'?sourceRefreshOutcome(parse(j.result).outcome):'')||moment(j.created))}</small></div>${j.kind==='learn'?`<button data-details="${j.id}">查看比较</button>`:''}${['queued','running'].includes(j.status)?`<button data-stop="${j.id}">停止</button>`:''}${['failed','interrupted','cancelled'].includes(j.status)?`<button data-resume="${j.id}">${esc(jobResumeLabel(j))}</button>${['review','learn'].includes(j.kind)?`<button data-retry-current="${j.id}"
|
|
405
|
-
document.querySelectorAll('[data-stop]').forEach(b=>b.onclick=()=>action(()=>api('stop',{job_id:b.dataset.stop})));document.querySelectorAll('[data-resume]').forEach(b=>b.onclick=()=>action(()=>api('resume',{job_id:b.dataset.resume})));document.querySelectorAll('[data-retry-current]').forEach(b=>b.onclick=()=>action(()=>
|
|
415
|
+
$('jobs').innerHTML=state.jobs.filter(j=>j.status!=='dismissed').map(j=>`<div class="job"><span class="tag ${j.status==='failed'?'error':''}">${statuses[j.status]}</span><div class="job-main">${esc(taskLabel(j.kind)||j.kind)}<small>${esc(jobExecutionLabel(j,jobModelLabel))} · ${j.progress?`第 ${j.progress.round}/${j.progress.k} 轮 · ${{maintainer:'整理经验',proposer:'提出候选',validation:'验证候选'}[j.progress.phase]||j.progress.phase} · `:''}${esc(j.error||(j.kind==='source_refresh'?sourceRefreshOutcome(parse(j.result).outcome):'')||moment(j.created))}</small></div>${j.kind==='learn'?`<button data-details="${j.id}">查看比较</button>`:''}${['queued','running'].includes(j.status)?`<button data-stop="${j.id}">停止</button>`:''}${['failed','interrupted','cancelled'].includes(j.status)?`<button data-resume="${j.id}">${esc(jobResumeLabel(j))}</button>${['review','learn'].includes(j.kind)?`<button data-retry-current="${j.id}">${j.kind==='learn'?'确认预算后重试':'按当前模型重试'}</button>`:''}`:''}</div>`).join('');
|
|
416
|
+
document.querySelectorAll('[data-stop]').forEach(b=>b.onclick=()=>action(()=>api('stop',{job_id:b.dataset.stop})));document.querySelectorAll('[data-resume]').forEach(b=>b.onclick=()=>action(()=>api('resume',{job_id:b.dataset.resume})));document.querySelectorAll('[data-retry-current]').forEach(b=>b.onclick=()=>action(()=>retryLearning(state.jobs.find(j=>j.id===b.dataset.retryCurrent))));renderTasks();renderTaskGraph();renderTaskBanner();renderAssistantSummary();renderReportStatus();renderReports();renderSourcesPage();templatesPage.render();if($('welcome')&&!$('welcome').hidden)renderWelcome();
|
|
406
417
|
document.querySelectorAll('[data-details]').forEach(b=>b.onclick=()=>action(async()=>{const d=await api('learning-details?job='+b.dataset.details);$('source-title').textContent='技能比较与依据';$('source-original').hidden=true;$('source-provenance').hidden=true;$('source-link').textContent='';$('source-body').textContent=d.rounds.length?d.rounds.map((r,i)=>`第 ${i+1} 轮\n${r.result?.reason||'比较尚未完成'}\n${(r.result?.pairs||[]).map(p=>({better:'候选更好',tie:'差不多,保留原技能',worse:'原稿更好'}[p.verdict])+': '+p.reason).join('\n')}\n\n`+r.cases.map(c=>`任务:${c.requirements.title}\n\n旧版\n${gradeSummary(c.baseline.assessment)}\n${c.baseline.reader_markdown||c.baseline.markdown}\n\n候选\n${gradeSummary(c.candidate.assessment)}\n${c.candidate.reader_markdown||c.candidate.markdown}`).join('\n\n')).join('\n\n'):d.job.error||'比较尚未开始;先整理 Wiki 和提出候选。';$('source-dialog').showModal()}));
|
|
407
|
-
|
|
418
|
+
revisionQuestions.render(state.revision_edits);
|
|
419
|
+
readerProfiles.render(state.readers,{readerId:state.requirements?.reader_id});
|
|
420
|
+
$('skills').innerHTML=`<div class="skill">${state.active_skill?'当前启用 '+esc(state.active_skill):'当前使用基础任务提示词'}${state.active_skill?'<button data-rollback="">回到基础版本</button>':''}</div>`+state.skills.map(s=>`<div class="skill"><strong>${esc(s.id)}</strong>${verificationBadge(state.skill_verifications?.[s.id])}<p>${esc(s.reason)}</p>${s.reader_scope_ids?.length?'<span class="tag">历史读者专属版本 · 暂不启用</span>':s.id===state.active_skill?'<span class="tag">正在使用</span>':`<button data-rollback="${s.id}" class="outline">使用这个版本</button>`}</div>`).join('');document.querySelectorAll('[data-rollback]').forEach(b=>b.onclick=()=>action(()=>api('rollback',{skill_id:b.dataset.rollback||null}),'下一轮将使用所选技能'));
|
|
408
421
|
if(state.wiki!==render.wiki){render.wiki=state.wiki;if(state.wiki)api('render',{markdown:state.wiki}).then(r=>$('wiki').innerHTML=r.html);else $('wiki').innerHTML='<h2>还没有学习经验</h2><p class="muted">生成简报后直接改稿,或留下评论。Maintainer 会在这里整理观察、方法与适用条件。</p>'}bindSources();
|
|
409
422
|
}
|
|
410
423
|
function renderVersionSelect(){
|
|
411
424
|
const visible=[];
|
|
412
425
|
for(const runId of [...new Set(state.briefs.map(b=>b.run_id))]){
|
|
413
|
-
const versions=state.briefs.filter(b=>b.run_id===runId),latest=versions[0],original=[...versions].reverse().find(b=>['agent','example'].includes(b.author));
|
|
414
|
-
if(latest)visible.push({brief:latest,label:latest.author==='example'?'合成示例':latest.author==='user'?'当前编辑稿':latest.parent_id?quickReport.versionLabel(latest):'生成原稿'});
|
|
415
|
-
if(original&&original.id!==latest?.id)visible.push({brief:original,label:original.author==='example'?'合成示例':'生成原稿'});
|
|
426
|
+
const versions=state.briefs.filter(b=>b.run_id===runId),latest=versions[0],original=[...versions].reverse().find(b=>['agent','example','import'].includes(b.author));
|
|
427
|
+
if(latest)visible.push({brief:latest,label:latest.author==='example'?'合成示例':latest.author==='import'?'往期原稿':latest.author==='user'?'当前编辑稿':latest.parent_id?quickReport.versionLabel(latest):'生成原稿'});
|
|
428
|
+
if(original&&original.id!==latest?.id)visible.push({brief:original,label:original.author==='example'?'合成示例':original.author==='import'?'往期原稿':'生成原稿'});
|
|
416
429
|
}
|
|
417
430
|
if(current&&!visible.some(v=>v.brief.id===current.id))visible.push({brief:current,label:'正在查看历史快照'});
|
|
418
431
|
const pendingOptions=state.jobs.filter(j=>j.kind==='generate'&&['queued','running'].includes(j.status)&&!state.briefs.some(b=>b.run_id===parse(j.payload).run_id)).map(j=>{const rid=parse(j.payload).run_id,r=state.runs.find(r=>r.id===rid);return `<option value="run:${esc(rid)}">${esc(parse(r?.requirements).title||'新报告')} · ${j.status==='queued'?'排队中':'正在生成'}</option>`}).join('');
|
|
@@ -538,14 +551,14 @@ async function previewReportTime(){
|
|
|
538
551
|
try{const requirements={title:form.elements.title.value||'预览',objective:form.elements.objective.value||'预览'};for(const key of ['period','period_start','period_end','report_timezone'])requirements[key]=form.elements[key].value;const t=await api('report-time-preview',{requirements});if(ticket!==reportTimePreviewTicket)return;box.textContent=`系统日期:${t.today} · ${t.timezone};报告范围:${t.start} 至 ${t.end_exclusive}(不含结束时刻)。提交时冻结。`;}catch(e){if(ticket===reportTimePreviewTicket)box.textContent=e.message}
|
|
539
552
|
}
|
|
540
553
|
for(const key of ['period','period_start','period_end','report_timezone'])$('requirements').elements[key].addEventListener('change',previewReportTime);
|
|
541
|
-
$('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();req.search_policy=readSearchPolicy();Object.assign(req,readWorkflowChoice());req.reference_source_ids=[...referenceSelected];req.template_id=req.template_id||null;req.sections=readTemplateSections();req.key_questions=(req.key_questions_text||'').split('\n').map(x=>x.trim()).filter(Boolean);delete req.key_questions_text;req.manual_sections=(req.manual_sections_text||'').split('\n').map(x=>x.trim()).filter(Boolean);for(const title of req.manual_sections){const found=req.sections.find(s=>s.title===title);if(found){found.mode='manual';found.placeholder='待填充'}}delete req.manual_sections_text;preserveWritingPreferences(req,state.requirements,writingPreferencesOverride);req.raw_input=req.objective;delete req.runtime_model;delete req.runtime_effort;await saveModel();if(current)await savedVersion();const connector_selection=reportMcpSelection.selection();const job=await api('generate',{...(connector_selection?{connector_selection}:{}),requirements:req,session_id:chat.id||undefined,source_ids:[...selected].filter(id=>!req.reference_source_ids.includes(id))});showPendingReport(parse(job.payload).run_id);page('report');notice('任务已排队,后台会生成简报')})};
|
|
554
|
+
$('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();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('任务已排队,后台会生成简报')})};
|
|
542
555
|
$('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=''},'来源已保存');
|
|
543
556
|
$('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')});
|
|
544
557
|
$('rescore').onclick=()=>action(async()=>{await savedVersion();await api('assess',{version_id:current.id,session_id:chat.id||undefined})},'已提交评分');
|
|
545
558
|
$('comment-submit').onclick=()=>action(async()=>{const text=$('comment').value,required=$('comment-required').checked;const version=await savedVersion();await api('comment',{version_id:version,text,learning_intent:required?'explicit_requirement':'feedback'});if($('comment').value===text&&$('comment-required').checked===required){$('comment').value='';$('comment-required').checked=true;}scheduleLearning()},'反馈已保存');
|
|
546
559
|
// Saving feedback is free; starting a learning validation calls models (#727).
|
|
547
560
|
function learningPlanText(plan){
|
|
548
|
-
return `每轮最多用 ${plan.cases} 份历史报告,每份基线和候选各试写一次(最多 ${plan.trial_generations_per_round}
|
|
561
|
+
return `每轮最多用 ${plan.cases} 份历史报告,每份基线和候选各试写一次(最多 ${plan.trial_generations_per_round} 次,可复用的基线不重写),每批还会最多启动 ${plan.triage_turns_per_batch} 个独立改动分类会话,每轮另有整理经验、提出候选和一次成对比较;`+
|
|
549
562
|
`最多 ${plan.rounds} 轮,含用户明确需求时最多 ${plan.rounds_with_explicit_requirement} 轮,试写合计不超过 ${plan.max_trial_generations} 次。试写使用固定来源,不联网检索。`+
|
|
550
563
|
`执行后端:${plan.backend_label} · ${plan.model||'尚未选择模型'}${roleModelText(plan)}。`+
|
|
551
564
|
`上限计的是试写次数,不含宿主内部子 agent 的回合或 token 数;费用以宿主或 API 账户实际计费为准,BriefLoop 无法估算金额。`;
|
|
@@ -688,7 +701,7 @@ async function refreshProgress(){
|
|
|
688
701
|
if(typeof isLocalFileJob!=='undefined'&&isLocalFileJob(job||paused)){await localFileProgress.render(job||paused,isCurrent);return;}
|
|
689
702
|
if(!job){
|
|
690
703
|
$('run-progress').hidden=!paused;
|
|
691
|
-
if(paused){const service=await api('runtime');if(!isCurrent())return;$('run-progress').innerHTML=`<div class="section-title"><h2>${paused.status==='failed'?'任务未完成':'任务已暂停'}</h2><button id="paused-resume" class="primary">恢复任务(沿用原模型)</button></div><p>当前没有继续执行这个任务。已有来源和产物保留。</p><p class="help">本地服务 PID ${service.server_pid||'—'}(页面与任务管理) · ${service.pid?'模型进程 PID '+service.pid:'本工作区没有模型进程'}</p><p class="help">${esc(paused.error||'')}</p><p class="help">恢复会沿用原来的模型与后端。审阅和学习也可按当前模型重试,旧任务记录会保留。</p>${['review','learn'].includes(paused.kind)
|
|
704
|
+
if(paused){const service=await api('runtime');if(!isCurrent())return;$('run-progress').innerHTML=`<div class="section-title"><h2>${paused.status==='failed'?'任务未完成':'任务已暂停'}</h2><button id="paused-resume" class="primary">恢复任务(沿用原模型)</button></div><p>当前没有继续执行这个任务。已有来源和产物保留。</p><p class="help">本地服务 PID ${service.server_pid||'—'}(页面与任务管理) · ${service.pid?'模型进程 PID '+service.pid:'本工作区没有模型进程'}</p><p class="help">${esc(paused.error||'')}</p><p class="help">恢复会沿用原来的模型与后端。审阅和学习也可按当前模型重试,旧任务记录会保留。</p>${['review','learn'].includes(paused.kind)?`<button id="paused-retry-current" class="outline">${paused.kind==='learn'?'确认预算后重试':'按当前模型重试'}</button>`:''}<button id="paused-settings" class="outline">修改模型与要求</button><button id="paused-dismiss" class="outline">清除这个任务</button>`;if($('paused-retry-current'))$('paused-retry-current').onclick=()=>action(()=>retryLearning(paused));$('paused-settings').onclick=()=>page('setup');$('paused-resume').onclick=()=>action(()=>api('resume',{job_id:paused.id}),'已按页面显示的模型提交');$('paused-dismiss').onclick=()=>action(()=>api('task-dismiss',{job_id:paused.id}),'已清除这个未完成任务')}
|
|
692
705
|
return
|
|
693
706
|
}
|
|
694
707
|
if(job.kind==='source_refresh'){
|
|
@@ -829,7 +842,7 @@ $('version-diff').onclick=()=>action(async()=>{
|
|
|
829
842
|
const history=typeof reportBrowsing==='undefined'?{items:versions.slice(index+1)}:await reportBrowsing.comparisonVersions(target);if(current!==target)return;
|
|
830
843
|
const older=history.items;let nextCursor=history.next_cursor;
|
|
831
844
|
if(!older.length){notice('这是第一稿,还没有可比较的上一版本');return}
|
|
832
|
-
const label=b=>moment(b.created)+' · '+(b.author==='agent'?'AI 稿件':b.author==='user'?'用户修改':'原稿');
|
|
845
|
+
const label=b=>moment(b.created)+' · '+(b.author==='agent'?'AI 稿件':b.author==='user'?'用户修改':b.author==='import'?'往期原稿':'原稿');
|
|
833
846
|
function fillComparison(){ $('diff-base').innerHTML=older.map((b,i)=>`<option value="${esc(b.id)}">${i===0?'上一稿 · ':!b.parent_id?'第一稿 · ':''}${esc(label(b))}</option>`).join('')+(nextCursor?'<option value="more">加载更多历史版本…</option>':'')}fillComparison();
|
|
834
847
|
$('diff-target').textContent='当前稿 · '+label(target);
|
|
835
848
|
function documentFor(b){
|
|
@@ -1036,7 +1049,7 @@ function renderMessages(){
|
|
|
1036
1049
|
const label=message.role==='user'?'你':(message.mode==='notice'?'任务状态':'BriefLoop');
|
|
1037
1050
|
node.innerHTML=`<div class="message-heading"><strong>${label}</strong><span>${messageTime(message.created)}</span><span class="message-state">${esc(chatStates[message.status]||message.status)}${message.mode==='steer'&&message.role==='user'?' · 中途补充':''}</span></div>${reasoningHTML(message)}<div class="message-body">${message.text?esc(message.text):(streaming?typingHTML():'')}</div>${files.length?`<div class="message-files">${files.map(file=>`<button type="button" data-message-source="${esc(file.id)}">▤ ${esc(file.name)}</button>`).join('')}</div>`:''}${messageActionsHTML()}`;
|
|
1038
1051
|
const reasoning=node.querySelector('.message-reasoning');if(reasoning&&reasoningOpen)reasoning.open=true;
|
|
1039
|
-
const reqBlock=/```briefloop-requirements\s*([\s\S]*?)```/.exec(message.text||'');if(reqBlock){const apply=document.createElement('button');apply.type='button';apply.className='outline apply-requirements';apply.textContent='应用到材料与需求';apply.onclick=()=>applyRequirements(reqBlock[1].trim());node.append(apply)}
|
|
1052
|
+
const reqBlock=/```briefloop-requirements\s*([\s\S]*?)```/.exec(message.text||'');if(reqBlock){const apply=document.createElement('button');apply.type='button';apply.className='outline apply-requirements';apply.textContent='应用到材料与需求';apply.onclick=()=>applyRequirements(reqBlock[1].trim());node.append(apply)}previousReport.appendReaderAction(node,message.text);
|
|
1040
1053
|
workspaceProposal(node,message.text);
|
|
1041
1054
|
bindMessageActions(node,message);
|
|
1042
1055
|
node.querySelectorAll('[data-message-source]').forEach(button=>button.onclick=()=>action(async()=>showSource(await api('source?id='+encodeURIComponent(button.dataset.messageSource)))));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// A linked retry can confirm a new budget while leaving the old batch intact.
|
|
2
|
+
export function learningRetry({api,getPlan,confirm,describePlan}){
|
|
3
|
+
return async job=>{
|
|
4
|
+
const body={job_id:job.id,use_current_model:true};
|
|
5
|
+
if(job.kind==='learn'){
|
|
6
|
+
const plan=getPlan();if(!plan||!confirm('按当前模型新建学习尝试,保留原任务与反馈。\n\n'+describePlan(plan)))return;
|
|
7
|
+
body.confirm_plan=plan.fingerprint;
|
|
8
|
+
}
|
|
9
|
+
return api('resume',body);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Start from a previous report (#858): import it, then let the BriefLoop agent
|
|
2
|
+
// derive the brief contract in /discuss for the user to confirm.
|
|
3
|
+
import {$ as lookup} from './dom.js';
|
|
4
|
+
|
|
5
|
+
export function previousReportPrompt(title){
|
|
6
|
+
return `/discuss 这是我们已经交付过的一期报告《${title}》(见附件)。请阅读它,反推这份周期报告的简报约定:读者是谁、读完要做什么决定;沿用的章节结构;数字单位、时间范围与来源等口径;有明确依据的禁区(没有写不等于禁止)。往期数字不是本期事实;全部约定先作为待确认建议,看不出来的列为未决项,不要猜。整理好后给出 briefloop-requirements,读者清楚时再给一个 briefloop-reader。`;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function readerBlock(text){
|
|
10
|
+
const match=/```briefloop-reader\s*([\s\S]*?)```/.exec(text||'');if(!match)return null;
|
|
11
|
+
try{const value=JSON.parse(match[1].trim());if(!value||typeof value.name!=='string'||!value.name.trim())return null;
|
|
12
|
+
return {name:value.name.trim(),decisions:typeof value.decisions==='string'?value.decisions:'',preferences:typeof value.preferences==='string'?value.preferences:''}}catch{return null}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function previousReportUI({api,uploadPayload,getUploadLimits,openChat,notice,saveReader,$=lookup}){
|
|
16
|
+
async function importFile(file){
|
|
17
|
+
const result=await api('import-previous',await uploadPayload(file,getUploadLimits(),{}));
|
|
18
|
+
await openChat({text:previousReportPrompt(result.title),source_id:result.source_id});
|
|
19
|
+
notice(result.tracked_changes?'已导入往期报告;其中的 Word 修订已记为改稿,下次学习时分类。确认后把请求发给 BriefLoop。':'已导入往期报告。确认后把请求发给 BriefLoop,它会反推简报约定。');
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
function bind(){
|
|
23
|
+
const input=$('previous-report-file');
|
|
24
|
+
if(input)input.onchange=async e=>{const file=e.target.files[0];e.target.value='';if(!file)return;try{await importFile(file)}catch(error){notice(error.message,true)}};
|
|
25
|
+
}
|
|
26
|
+
function appendReaderAction(node,text){
|
|
27
|
+
const reader=readerBlock(text);if(!reader||!saveReader)return;
|
|
28
|
+
const button=document.createElement('button');button.type='button';button.className='outline apply-requirements';button.textContent='保存为读者档案';
|
|
29
|
+
button.onclick=()=>saveReader(reader);node.append(button);
|
|
30
|
+
}
|
|
31
|
+
return {bind,importFile,appendReaderAction};
|
|
32
|
+
}
|
|
@@ -4,6 +4,9 @@ export function createProviderCapabilities({$}) {
|
|
|
4
4
|
function reset(engine) {
|
|
5
5
|
field().value='';
|
|
6
6
|
$('custom-reasoning-capability').hidden=engine!=='native';
|
|
7
|
+
$('provider-save-help').textContent=engine==='native'
|
|
8
|
+
?'保存同名 Provider 会更新 BriefLoop Agent 的本机接口地址;填写 Key 会更新该 Provider 的本机凭据。仅保存配置,不测试推理、不启动任务。'
|
|
9
|
+
:'保存同名 Provider 会更新本机 OpenCode 的接口地址;填写 Key 会更新该 Provider 的本机凭据。仅保存配置,不测试推理、不启动任务。';
|
|
7
10
|
}
|
|
8
11
|
function load(config,engine) {
|
|
9
12
|
reset(engine);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Reader profiles (#858): pick a saved reader for a report, and manage profiles
|
|
2
|
+
// and retain historical reader-specific learning records on the learning page.
|
|
3
|
+
import {$ as lookup,esc} from './dom.js';
|
|
4
|
+
|
|
5
|
+
export function readersUI({api,action,$=lookup}){
|
|
6
|
+
let editing=null,known=[],initialized=false;
|
|
7
|
+
function fillSelect(readers,readerId){
|
|
8
|
+
const select=$('reader-select');if(!select)return;
|
|
9
|
+
const value=initialized?select.value:readerId??select.value;
|
|
10
|
+
select.innerHTML='<option value="">不指定读者档案</option>'+readers.map(r=>`<option value="${esc(r.id)}">${esc(r.name)}</option>`).join('');
|
|
11
|
+
select.value=readers.some(r=>r.id===value)?value:'';initialized=true;
|
|
12
|
+
}
|
|
13
|
+
function onSelect(){
|
|
14
|
+
const select=$('reader-select'),audience=select?.form?.elements?.audience;if(!select||!audience)return;
|
|
15
|
+
const chosen=known.find(r=>r.id===select.value);
|
|
16
|
+
// Fill the audience only when it still holds the default or another reader's name.
|
|
17
|
+
if(chosen&&(!audience.value.trim()||audience.value==='自己'||known.some(r=>r.name===audience.value)))audience.value=chosen.name;
|
|
18
|
+
}
|
|
19
|
+
function profileHTML(reader){
|
|
20
|
+
return `<div class="reader-profile" data-reader="${esc(reader.id)}"><div class="reader-profile-head"><strong>${esc(reader.name)}</strong><span>${reader.skill_id?'历史专属技能 '+esc(reader.skill_id)+'(暂不启用)':'使用工作区技能'}</span></div>${reader.decisions?`<p><small>用报告做什么决定</small>${esc(reader.decisions)}</p>`:''}${reader.preferences?`<p><small>偏好</small>${esc(reader.preferences)}</p>`:''}<div class="reader-profile-actions"><button type="button" class="outline" data-reader-edit>编辑</button>${reader.skill_id?'<button type="button" class="outline" data-reader-unbind>清除历史绑定</button>':''}<button type="button" class="ghost" data-reader-archive>归档</button></div>${reader.wiki?`<details><summary>历史读者经验(暂不启用)</summary><pre class="reader-wiki">${esc(reader.wiki)}</pre></details>`:''}</div>`;
|
|
21
|
+
}
|
|
22
|
+
function renderList(readers){
|
|
23
|
+
const box=$('reader-profiles');if(!box)return;
|
|
24
|
+
box.innerHTML=readers.length?readers.map(profileHTML).join(''):'<p class="help">还没有读者档案。写给固定读者的报告,建一个档案后,报告会记录用途与偏好。读者特定改动先保留,等待适用条件与跨读者验证。</p>';
|
|
25
|
+
box.querySelectorAll('[data-reader]').forEach(node=>{
|
|
26
|
+
const reader=readers.find(r=>r.id===node.dataset.reader);
|
|
27
|
+
node.querySelector('[data-reader-edit]').onclick=()=>openForm(reader);
|
|
28
|
+
node.querySelector('[data-reader-archive]').onclick=()=>action(()=>api('reader-archive',{id:reader.id}),'读者档案已归档,旧报告保留原样');
|
|
29
|
+
const unbind=node.querySelector('[data-reader-unbind]');
|
|
30
|
+
if(unbind)unbind.onclick=()=>action(()=>api('reader-skill',{reader_id:reader.id,skill_id:null}),'已清除历史专属技能绑定');
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function openForm(reader=null){
|
|
34
|
+
const form=$('reader-form');if(!form)return;
|
|
35
|
+
editing=reader?.id||null;form.hidden=false;
|
|
36
|
+
form.elements.name.value=reader?.name||'';form.elements.decisions.value=reader?.decisions||'';form.elements.preferences.value=reader?.preferences||'';
|
|
37
|
+
form.querySelector('[data-reader-form-title]').textContent=reader?'编辑读者档案':'新建读者档案';
|
|
38
|
+
form.elements.name.focus?.();
|
|
39
|
+
}
|
|
40
|
+
function bind(){
|
|
41
|
+
const add=$('reader-add');if(add)add.onclick=()=>openForm();
|
|
42
|
+
const form=$('reader-form');
|
|
43
|
+
if(form){
|
|
44
|
+
form.onsubmit=e=>{e.preventDefault();const body={name:form.elements.name.value,decisions:form.elements.decisions.value,preferences:form.elements.preferences.value,...(editing?{id:editing}:{})};
|
|
45
|
+
action(async()=>{await api('reader-save',body);form.hidden=true;editing=null},'读者档案已保存');};
|
|
46
|
+
const cancel=form.querySelector('[data-reader-cancel]');if(cancel)cancel.onclick=()=>{form.hidden=true;editing=null};
|
|
47
|
+
}
|
|
48
|
+
const select=$('reader-select');if(select)select.addEventListener('change',onSelect);
|
|
49
|
+
}
|
|
50
|
+
function render(readers=[],{readerId}={}){known=readers;fillSelect(readers,readerId);renderList(readers)}
|
|
51
|
+
return {render,bind,openForm};
|
|
52
|
+
}
|
|
@@ -71,7 +71,7 @@ export function createReportBrowsing({api,getState,getCurrent,openBrief,page,not
|
|
|
71
71
|
const result=await historyPage(current.run_id,append?historyData?.next_cursor||'':'');
|
|
72
72
|
if(ticket!==historyTicket||getCurrent()?.run_id!==current.run_id||!$('history-dialog').open)return;
|
|
73
73
|
historyData={...result,items:append?[...historyData.items,...result.items]:result.items};
|
|
74
|
-
$('history-list').innerHTML=historyData.items.map(b=>`<button class="history-row" data-history-version="${esc(b.id)}"><strong>${b.id===b.latest_version_id?'当前稿件':b.author==='agent'?'生成稿件':'历史快照'}</strong><span>${dateTimeSeconds(b.created)}</span></button>`).join('')+(result.next_cursor?'<button type="button" data-testid="history-load-more">加载更多历史版本</button>':'');
|
|
74
|
+
$('history-list').innerHTML=historyData.items.map(b=>`<button class="history-row" data-history-version="${esc(b.id)}"><strong>${b.id===b.latest_version_id?'当前稿件':b.author==='agent'?'生成稿件':b.author==='import'?'往期原稿':'历史快照'}</strong><span>${dateTimeSeconds(b.created)}</span></button>`).join('')+(result.next_cursor?'<button type="button" data-testid="history-load-more">加载更多历史版本</button>':'');
|
|
75
75
|
$('history-list').querySelectorAll('[data-history-version]').forEach(button=>button.onclick=()=>{if(openBrief(historyData.items.find(b=>b.id===button.dataset.historyVersion))){$('history-dialog').close()}});
|
|
76
76
|
const more=$('history-list').querySelector('[data-testid="history-load-more"]');if(more)more.onclick=()=>{more.disabled=true;read(true).catch(error=>{more.disabled=false;notice(error.message,true)})};
|
|
77
77
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Revision questions (#858): edits the Evaluator was unsure about, asked once,
|
|
2
|
+
// and the ledger of fact corrections that never become writing skills.
|
|
3
|
+
import {$ as lookup,esc} from './dom.js';
|
|
4
|
+
|
|
5
|
+
export const CATEGORY_CHOICES=[
|
|
6
|
+
['taste','写法偏好','原稿没错,只是我想这样写'],
|
|
7
|
+
['fact_correction','事实纠错','原稿的数字、事实或口径不对'],
|
|
8
|
+
['reader_specific','只针对这位读者','换一位读者未必要这样改'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
function excerpt(text,limit=160){const value=String(text||'').replace(/\s+/g,' ').trim();return value.length>limit?value.slice(0,limit)+'…':value}
|
|
12
|
+
|
|
13
|
+
export function questionHTML(edit){
|
|
14
|
+
const change=edit.op==='delete'?`删掉了:<q>${esc(excerpt(edit.before))}</q>`:edit.op==='insert'?`加入了:<q>${esc(excerpt(edit.after))}</q>`:`把 <q>${esc(excerpt(edit.before))}</q> 改成 <q>${esc(excerpt(edit.after))}</q>`;
|
|
15
|
+
return `<div class="revision-question" data-edit="${esc(edit.id)}"><p class="revision-question-where">${esc(edit.heading||'正文')}</p><p>${change}</p><p class="help">为什么这样改?</p><div class="revision-question-choices">${CATEGORY_CHOICES.map(([value,label,tip])=>`<button type="button" class="outline" data-answer="${value}" title="${esc(tip)}">${esc(label)}</button>`).join('')}<button type="button" class="ghost" data-answer="skip" title="这处改动不进入学习">跳过</button></div></div>`;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function revisionQuestionsUI({api,action,$=lookup}){
|
|
19
|
+
function bind(box){
|
|
20
|
+
box.querySelectorAll('[data-answer]').forEach(button=>button.onclick=()=>{
|
|
21
|
+
const edit=button.closest('[data-edit]').dataset.edit,category=button.dataset.answer;
|
|
22
|
+
action(()=>api('revision-answer',{edit_id:edit,category}),category==='skip'?'已跳过,这处改动不进入学习':category==='fact_correction'?'已记为事实纠错,不作为写作经验':category==='reader_specific'?'读者特定改动已保留;未绑定读者时保持未确认,不进入全局学习':'已记下,会进入下一次学习');
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function render(value){
|
|
26
|
+
const questions=value?.questions||[],unconfirmed=value?.unconfirmed||[],corrections=value?.fact_corrections||[];
|
|
27
|
+
const box=$('revision-questions');
|
|
28
|
+
if(box){
|
|
29
|
+
box.hidden=!questions.length&&!unconfirmed.length;
|
|
30
|
+
box.innerHTML=questions.length?`<h3>${questions.length} 处改动需要你确认原因</h3><p class="help">只问拿不准、改动较大的地方。事实纠错不会写进写作技巧;跳过的改动不进入学习。</p>${questions.map(questionHTML).join('')}`:'';
|
|
31
|
+
if(unconfirmed.length)box.innerHTML+=`<details><summary>${unconfirmed.length} 处未确认改动 · 不进入学习</summary><p class="help">无需逐条处理。你也可以展开后确认改动原因。</p>${unconfirmed.map(questionHTML).join('')}</details>`;
|
|
32
|
+
bind(box);
|
|
33
|
+
}
|
|
34
|
+
const ledger=$('fact-corrections');
|
|
35
|
+
if(ledger){
|
|
36
|
+
ledger.innerHTML=corrections.length?corrections.map(edit=>`<div class="fact-correction"><small>${esc(edit.heading||'正文')} · ${edit.decided_by==='user'?'你确认':'Evaluator 判断'}</small><p><del>${esc(excerpt(edit.before,120))}</del> → ${esc(excerpt(edit.after,120))}</p></div>`).join(''):'<p class="help">还没有事实纠错记录。</p>';
|
|
37
|
+
}
|
|
38
|
+
const hint=$('revision-questions-hint');
|
|
39
|
+
if(hint){hint.hidden=!questions.length;hint.textContent=questions.length?`有 ${questions.length} 处改动等你确认原因,在“经验”页处理。`:''}
|
|
40
|
+
}
|
|
41
|
+
return {render};
|
|
42
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Edit triage records preliminary positive flags, without a report-wide absence
|
|
2
|
+
// assessment or calibrated acceptance. Legacy automatic labels are not proof.
|
|
3
|
+
import {esc} from './dom.js';
|
|
4
|
+
|
|
5
|
+
export function verificationBadge(value){
|
|
6
|
+
if(!value)return '';
|
|
7
|
+
const untracked=value.status==='untracked'&&!value.registration_conflict;
|
|
8
|
+
const status=untracked?'untracked':'pending';
|
|
9
|
+
const label=untracked?'无可追踪改动':'待验收';
|
|
10
|
+
const parts=untracked?['没有可追踪的改动']:['初步观察,未验收',`完整核验 ${value.observed||0} 份 · 未知 ${value.unknown??value.reports??0} 份`];
|
|
11
|
+
if(value.flagged_reports)parts.push(`明确标出复发 ${value.repeats||0} 次(${value.flagged_reports} 份报告)`);
|
|
12
|
+
if(value.excluded)parts.push(`范围不一致,排除 ${value.excluded} 份`);
|
|
13
|
+
if(value.registration_conflict)parts.push('同一技能对应不同读者或批次,绑定待澄清');
|
|
14
|
+
if(!untracked)parts.push(value.note||'尚未完成完整复发核验、双模型 family 校准、人工分歧处理与留出验收');
|
|
15
|
+
if(value.legacy_status_corrected||['adopted','not_improving'].includes(value.status))parts.push(value.legacy_note||'旧自动状态不证明验收,原记录与技能保留');
|
|
16
|
+
return `<span class="skill-verification skill-verification-${esc(status)}"><span class="tag">${esc(label)}</span><small>${esc(parts.join(' · '))}</small></span>`;
|
|
17
|
+
}
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "briefloop"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.27.0"
|
|
8
8
|
description = "Local multi-runtime agent workbench for sourced briefings, independent review and skill learning"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.27.0"
|
|
@@ -66,6 +66,11 @@ def resolve(requirements, template=None, *, reader_contract=None):
|
|
|
66
66
|
'requirement_items': requirement_items(requirements),
|
|
67
67
|
'references': '正文短编号,图表简注,文末精简来源表;详细核查另存',
|
|
68
68
|
'interpretation_rule': 'objective及requirement_items保留用户原始要求;reader_contract是待对照原文核查的执行解释,不得降级或替换明确要求。'}
|
|
69
|
+
if requirements.get('reader_profile'):
|
|
70
|
+
# Only runs written for a saved reader carry it, so older contracts keep their identity.
|
|
71
|
+
profile = requirements['reader_profile']
|
|
72
|
+
spec['reader_profile'] = {'name': profile.get('name', ''), 'decisions': profile.get('decisions', ''),
|
|
73
|
+
'preferences': profile.get('preferences', '')}
|
|
69
74
|
if requirements.get('target_minutes') is not None:
|
|
70
75
|
spec['target_minutes'] = requirements['target_minutes']
|
|
71
76
|
# Legacy max_words stays advisory without changing its saved contract hash.
|
|
@@ -26,6 +26,8 @@ def _paragraph_text(paragraph):
|
|
|
26
26
|
parts.append(element.tail or '')
|
|
27
27
|
continue
|
|
28
28
|
kind = _name(element)
|
|
29
|
+
# Tracked deletions are not part of the document as it now reads.
|
|
30
|
+
if kind in ('del', 'moveFrom'): continue
|
|
29
31
|
if kind in ('br', 'cr'): parts.append('\n')
|
|
30
32
|
elif kind == 'tab': parts.append('\t')
|
|
31
33
|
parts.append(element.text or '')
|
|
@@ -80,6 +82,7 @@ def document_text(document):
|
|
|
80
82
|
if depth > 50: raise ValueError('DOCX 表格嵌套过深')
|
|
81
83
|
lines.append('[DOCX ' + path + ']')
|
|
82
84
|
for row_index, row in enumerate(_blocks(element, {'tr'}), 1):
|
|
85
|
+
if _property(row, 'trPr', 'del') is not None:continue
|
|
83
86
|
before = _columns(row, 'trPr', 'gridBefore', 0)
|
|
84
87
|
after = _columns(row, 'trPr', 'gridAfter', 0)
|
|
85
88
|
lines.append(f'[DOCX {path} row {row_index} gridBefore={before} gridAfter={after}]')
|
|
@@ -37,6 +37,12 @@ def sync_content_citations(store, run_id, detail, document, figures):
|
|
|
37
37
|
if sid not in present:
|
|
38
38
|
ref={'source_id':sid,'locator':locator,'excerpt':''}
|
|
39
39
|
citations.append(ref);derived.append(ref);present.add(sid)
|
|
40
|
+
# The final set includes bibliography, data rows, rich nodes and figures.
|
|
41
|
+
# Every saving path calls this helper before committing a draft/revision.
|
|
42
|
+
from .previous_report import source_usage
|
|
43
|
+
for ref in citations:
|
|
44
|
+
if ref['source_id'] in references or source_usage(store,ref['source_id'])=='previous_report':
|
|
45
|
+
raise ValueError('往期报告或风格参考不能作为报告事实引用')
|
|
40
46
|
detail['citations']=citations
|
|
41
47
|
detail['content_citations']=derived
|
|
42
48
|
|
|
@@ -52,7 +52,7 @@ def _usable_output(job, folder, store=None):
|
|
|
52
52
|
try:ScoutResult.model_validate(json.loads(filesystem_path(folder/'result.json').read_text(encoding='utf-8-sig')));return True
|
|
53
53
|
except (OSError,ValueError):return False
|
|
54
54
|
if role in ('evaluator','scorer','assessor'):
|
|
55
|
-
name='comparison.json' if job.get('evaluation_mode')=='pairwise' or role=='assessor' else 'assessment.json'
|
|
55
|
+
name='comparison.json' if job.get('evaluation_mode')=='pairwise' or role=='assessor' else 'triage.json' if job.get('evaluation_mode')=='triage' else 'assessment.json'
|
|
56
56
|
elif job['kind'] in ('generate','revise'):name='draft.json'
|
|
57
57
|
elif job['kind']=='assess':name='assessment.json'
|
|
58
58
|
else:return True # WikiSkill handoffs already request resume_on_complete.
|
|
@@ -237,7 +237,7 @@ class InteractiveRuntime:
|
|
|
237
237
|
_write(marker, binding)
|
|
238
238
|
snapshot = harness.snapshot(binding['session_id'])
|
|
239
239
|
else:
|
|
240
|
-
evaluation_title='Evaluator · 比较'
|
|
240
|
+
evaluation_title={'pairwise':'Evaluator · 比较','triage':'Evaluator · 改动分类'}.get(job.get('evaluation_mode'),'Evaluator · 评分')
|
|
241
241
|
title = {'evaluator': evaluation_title, 'scorer': 'Evaluator · 评分', 'assessor': 'Evaluator · 比较', 'maintainer': '整理反馈经验', 'proposer': '提出技能改进'}.get(job.get('runtime_role'))
|
|
242
242
|
title = title or task_label(job['kind'], '简报任务')
|
|
243
243
|
session = harness.create_session(title, runtime, folder)
|
|
@@ -303,7 +303,7 @@ class InteractiveRuntime:
|
|
|
303
303
|
label = {'company_review':'先检查并维护本轮企业背景,完成后再进入报告写作。', 'generate': '请按已保存的要求研究来源并生成简报。',
|
|
304
304
|
'assess': '请核对这份简报的要求、内容与来源并给出评分。',
|
|
305
305
|
'learn': '请继续整理反馈、更新经验并完成当前技能改进步骤。'}.get(job['kind'], '请完成当前简报任务。')
|
|
306
|
-
evaluation_label='请使用 Evaluator 成对比较模式,依据任务与来源比较新旧稿件。'
|
|
306
|
+
evaluation_label={'pairwise':'请使用 Evaluator 成对比较模式,依据任务与来源比较新旧稿件。','triage':'请使用 Evaluator 改动分类模式,对照来源判断每处用户改动的性质。'}.get(job.get('evaluation_mode'),'请使用 Evaluator 单稿评分模式,核对简报要求、内容与来源。')
|
|
307
307
|
label = {'evaluator': evaluation_label, 'scorer': '请使用 Evaluator 单稿评分模式核对简报。', 'assessor': '请使用 Evaluator 成对比较模式核对新旧稿件。', 'maintainer': '请从反馈中整理可复用经验。', 'proposer': '请依据经验提出技能改进。'}.get(job.get('runtime_role'), label)
|
|
308
308
|
harness.start_internal(filesystem_path(folder / 'prompt.md').read_text(encoding='utf-8'), session_id=sid,
|
|
309
309
|
runtime=runtime, cwd=folder, job_id=job['id'], display_text=label,
|