briefloop 0.26.4__tar.gz → 0.27.1__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.1}/PKG-INFO +2 -2
- {briefloop-0.26.4 → briefloop-0.27.1}/README.md +1 -1
- {briefloop-0.26.4 → briefloop-0.27.1}/pyproject.toml +1 -1
- briefloop-0.27.1/src/briefloop/__init__.py +1 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/bridge_harness.py +2 -2
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_store.py +5 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_tools.py +32 -6
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/deliverable_spec.py +8 -1
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/docx_text.py +3 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/execution_records.py +17 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fast_reports.py +30 -4
- briefloop-0.27.1/src/briefloop/feedback_view.py +12 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/figure_support.py +6 -0
- briefloop-0.27.1/src/briefloop/finding_anchors.py +56 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/industry_data.py +2 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/interactive_runtime.py +22 -9
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/learning.py +150 -22
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/learning_budget.py +38 -7
- briefloop-0.27.1/src/briefloop/model_budget.py +56 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/models.py +71 -5
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_orchestrator.py +27 -5
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_roles.py +47 -0
- briefloop-0.27.1/src/briefloop/plain_isolation.py +134 -0
- briefloop-0.27.1/src/briefloop/previous_report.py +141 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/progress.py +66 -1
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.analyst.zh.md +2 -2
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.evaluator.zh.md +1 -1
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.orchestrator.zh.md +1 -1
- briefloop-0.27.1/src/briefloop/readers.py +142 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_profiles.py +1 -1
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/research_handoff.py +10 -3
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/research_plan.py +78 -7
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/review.py +42 -6
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/review_capability.py +15 -2
- briefloop-0.27.1/src/briefloop/revision_edits.py +243 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime.py +84 -18
- briefloop-0.27.1/src/briefloop/scout_coverage.py +210 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/scout_tools.py +9 -1
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/server.py +26 -4
- briefloop-0.27.1/src/briefloop/skill_verification.py +231 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/app.js +107 -105
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/index.html +5 -5
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/style.css +43 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/store.py +128 -21
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/task_progress.py +25 -3
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/writing_guidance.py +2 -1
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/PKG-INFO +2 -2
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/SOURCES.txt +10 -417
- briefloop-0.26.4/.gitattributes +0 -5
- briefloop-0.26.4/CHANGELOG.md +0 -2472
- briefloop-0.26.4/CONTRIBUTING.md +0 -33
- briefloop-0.26.4/KNOWN_ISSUES.md +0 -24
- briefloop-0.26.4/MANIFEST.in +0 -24
- briefloop-0.26.4/SECURITY.md +0 -9
- briefloop-0.26.4/VERSION +0 -1
- briefloop-0.26.4/bootstrap.py +0 -55
- briefloop-0.26.4/desktop/electron/package-lock.json +0 -3638
- briefloop-0.26.4/desktop/electron/package.json +0 -65
- briefloop-0.26.4/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md +0 -58
- briefloop-0.26.4/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md +0 -32
- briefloop-0.26.4/docs/architecture.md +0 -105
- briefloop-0.26.4/docs/compose/spec/home-v2.md +0 -81
- briefloop-0.26.4/docs/draft-first.md +0 -73
- briefloop-0.26.4/docs/jev-precheck.md +0 -23
- briefloop-0.26.4/docs/native-integration.md +0 -31
- briefloop-0.26.4/docs/quality-reading-context.md +0 -15
- briefloop-0.26.4/docs/release-0.26.0.md +0 -23
- briefloop-0.26.4/docs/release-0.26.1.md +0 -19
- briefloop-0.26.4/docs/release-0.26.2.md +0 -17
- briefloop-0.26.4/docs/release-0.26.3.md +0 -30
- briefloop-0.26.4/docs/release-0.26.4.md +0 -9
- briefloop-0.26.4/docs/report-length.md +0 -20
- briefloop-0.26.4/docs/report-time-window.md +0 -23
- briefloop-0.26.4/docs/research-handoff.md +0 -39
- briefloop-0.26.4/docs/sqlite-benchmark.md +0 -78
- briefloop-0.26.4/docs/technical-report-0.21.0/evidence-index.md +0 -475
- briefloop-0.26.4/docs/technical-report-0.21.0/technical-report.md +0 -347
- briefloop-0.26.4/docs/windows.md +0 -96
- briefloop-0.26.4/docs/writer-input.md +0 -56
- briefloop-0.26.4/docs//344/272/247/345/223/201/345/256/232/344/275/215/344/270/216/351/252/214/350/257/201.md +0 -20
- briefloop-0.26.4/docs//344/274/232/350/256/256/347/272/252/350/246/201.md +0 -23
- briefloop-0.26.4/docs//344/275/277/347/224/250/346/214/207/345/215/227.md +0 -112
- briefloop-0.26.4/docs//345/206/205/347/275/256/345/274/225/346/223/216.md +0 -50
- briefloop-0.26.4/docs//345/215/207/347/272/247/350/257/264/346/230/216.md +0 -66
- briefloop-0.26.4/docs//345/233/276/350/241/250/344/270/216Excel.md +0 -41
- briefloop-0.26.4/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md +0 -85
- briefloop-0.26.4/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md +0 -32
- briefloop-0.26.4/docs//345/256/232/346/227/266/346/212/245/345/221/212.md +0 -29
- briefloop-0.26.4/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md +0 -11
- briefloop-0.26.4/docs//346/212/245/345/221/212/347/274/226/350/276/221/344/270/216/346/250/241/346/235/277.md +0 -64
- briefloop-0.26.4/docs//346/241/214/351/235/242/345/256/211/350/243/205/344/270/216/346/233/264/346/226/260.md +0 -64
- briefloop-0.26.4/docs//346/267/261/345/272/246/347/240/224/347/251/266/344/270/216/344/272/213/345/256/236/346/240/270/346/237/245.md +0 -44
- briefloop-0.26.4/docs//347/211/210/346/234/254/344/270/200/350/207/264/346/200/247/346/243/200/346/237/245.md +0 -35
- briefloop-0.26.4/docs//350/241/214/344/270/232/346/212/245/345/221/212.md +0 -60
- briefloop-0.26.4/docs//350/257/201/345/210/270/347/240/224/347/251/266.md +0 -15
- briefloop-0.26.4/docs//350/257/201/346/215/256/344/270/216/347/273/223/350/256/272/350/277/275/346/272/257.md +0 -30
- briefloop-0.26.4/docs//350/277/220/350/241/214/346/227/266/351/200/211/346/213/251/344/270/216/346/243/200/346/265/213.md +0 -15
- briefloop-0.26.4/docs//351/252/214/346/224/266/350/256/260/345/275/225.md +0 -395
- briefloop-0.26.4/examples/internal-weekly-report/README.md +0 -22
- briefloop-0.26.4/examples/internal-weekly-report/report.md +0 -19
- briefloop-0.26.4/examples/internal-weekly-report/source.txt +0 -7
- briefloop-0.26.4/examples/meeting-minutes/transcript.txt +0 -13
- briefloop-0.26.4/examples/stock-research/earnings-event.txt +0 -17
- briefloop-0.26.4/frontend/api.js +0 -22
- briefloop-0.26.4/frontend/app-updates.js +0 -90
- briefloop-0.26.4/frontend/app.js +0 -2407
- briefloop-0.26.4/frontend/assessment-checks.js +0 -11
- briefloop-0.26.4/frontend/assessment-panel.js +0 -211
- briefloop-0.26.4/frontend/citation-evidence.js +0 -13
- briefloop-0.26.4/frontend/clipboard.js +0 -10
- briefloop-0.26.4/frontend/composer-options.js +0 -43
- briefloop-0.26.4/frontend/connectors.js +0 -93
- briefloop-0.26.4/frontend/delivery.js +0 -82
- briefloop-0.26.4/frontend/dom.js +0 -7
- briefloop-0.26.4/frontend/excel-export.js +0 -30
- briefloop-0.26.4/frontend/fact-check-availability.js +0 -14
- briefloop-0.26.4/frontend/fact-check-grants.js +0 -33
- briefloop-0.26.4/frontend/jev-checks.js +0 -55
- briefloop-0.26.4/frontend/job-presentation.js +0 -32
- briefloop-0.26.4/frontend/length-controls.js +0 -67
- briefloop-0.26.4/frontend/mcp-selection.js +0 -31
- briefloop-0.26.4/frontend/model-catalog.js +0 -198
- briefloop-0.26.4/frontend/native-requests.js +0 -121
- briefloop-0.26.4/frontend/notifications.js +0 -58
- briefloop-0.26.4/frontend/office-tools.js +0 -118
- briefloop-0.26.4/frontend/polling.js +0 -17
- briefloop-0.26.4/frontend/provider-capabilities.js +0 -19
- briefloop-0.26.4/frontend/quick-report.js +0 -79
- briefloop-0.26.4/frontend/reasoning-controls.js +0 -68
- briefloop-0.26.4/frontend/report-browsing.js +0 -113
- briefloop-0.26.4/frontend/report-export.js +0 -106
- briefloop-0.26.4/frontend/report-language.js +0 -58
- briefloop-0.26.4/frontend/report-panels.js +0 -14
- briefloop-0.26.4/frontend/report-sources.js +0 -43
- briefloop-0.26.4/frontend/review-controls.js +0 -144
- briefloop-0.26.4/frontend/review-coverage.js +0 -12
- briefloop-0.26.4/frontend/review-results.js +0 -20
- briefloop-0.26.4/frontend/review-status.js +0 -99
- briefloop-0.26.4/frontend/rich-document.js +0 -110
- briefloop-0.26.4/frontend/runtime-cards.js +0 -55
- briefloop-0.26.4/frontend/runtime-permission-modes.js +0 -32
- briefloop-0.26.4/frontend/runtime-permission-panel.js +0 -91
- briefloop-0.26.4/frontend/schedules.js +0 -33
- briefloop-0.26.4/frontend/source-library-search.js +0 -30
- briefloop-0.26.4/frontend/source-upload.js +0 -65
- briefloop-0.26.4/frontend/task-progress.js +0 -26
- briefloop-0.26.4/frontend/template-output.js +0 -171
- briefloop-0.26.4/frontend/templates.js +0 -91
- briefloop-0.26.4/frontend/time.js +0 -25
- briefloop-0.26.4/frontend/uploads.js +0 -46
- briefloop-0.26.4/frontend/version-diff.js +0 -43
- briefloop-0.26.4/frontend/welcome.js +0 -22
- briefloop-0.26.4/package-lock.json +0 -1092
- briefloop-0.26.4/package.json +0 -21
- briefloop-0.26.4/probes/mcp_m0/README.md +0 -92
- briefloop-0.26.4/probes/mcp_m0/probe.py +0 -273
- briefloop-0.26.4/probes/mcp_m0/requirements.txt +0 -2
- briefloop-0.26.4/probes/mcp_m0/server.py +0 -149
- briefloop-0.26.4/runtime-bridge/README.md +0 -67
- briefloop-0.26.4/runtime-bridge/bridge.test.mjs +0 -517
- briefloop-0.26.4/runtime-bridge/build.mjs +0 -6
- briefloop-0.26.4/runtime-bridge/catalog.json +0 -205
- briefloop-0.26.4/runtime-bridge/claude.ts +0 -62
- briefloop-0.26.4/runtime-bridge/main.ts +0 -344
- briefloop-0.26.4/runtime-bridge/permission-catalog.ts +0 -72
- briefloop-0.26.4/runtime-bridge/pi.ts +0 -89
- briefloop-0.26.4/runtime-bridge/reasoning.ts +0 -43
- briefloop-0.26.4/runtime-bridge/user-input.ts +0 -53
- briefloop-0.26.4/runtime-bridge/windows-command.ts +0 -22
- briefloop-0.26.4/runtime-bridge/zcode.ts +0 -123
- briefloop-0.26.4/scripts/build_frontend.mjs +0 -41
- briefloop-0.26.4/scripts/build_frontend_licenses.mjs +0 -71
- briefloop-0.26.4/scripts/check_versions.py +0 -169
- briefloop-0.26.4/scripts/sync_versions.py +0 -39
- briefloop-0.26.4/scripts/test_frontend.mjs +0 -14
- briefloop-0.26.4/src/briefloop/__init__.py +0 -1
- briefloop-0.26.4/start.ps1 +0 -6
- briefloop-0.26.4/start.sh +0 -4
- briefloop-0.26.4/tests/check_distribution.py +0 -62
- briefloop-0.26.4/tests/frontend_app_updates.mjs +0 -70
- briefloop-0.26.4/tests/frontend_assessment_checks.mjs +0 -12
- briefloop-0.26.4/tests/frontend_chat_attachments.mjs +0 -52
- briefloop-0.26.4/tests/frontend_chat_commands.mjs +0 -30
- briefloop-0.26.4/tests/frontend_chat_drafts.mjs +0 -79
- briefloop-0.26.4/tests/frontend_chat_layout.mjs +0 -116
- briefloop-0.26.4/tests/frontend_chat_polling.mjs +0 -81
- briefloop-0.26.4/tests/frontend_checkout_eol.mjs +0 -34
- briefloop-0.26.4/tests/frontend_citation_clipboard.mjs +0 -71
- briefloop-0.26.4/tests/frontend_citation_edit.mjs +0 -40
- briefloop-0.26.4/tests/frontend_citation_evidence.mjs +0 -14
- briefloop-0.26.4/tests/frontend_clipboard_fallback.mjs +0 -10
- briefloop-0.26.4/tests/frontend_excel_export.mjs +0 -111
- briefloop-0.26.4/tests/frontend_export_menu.mjs +0 -12
- briefloop-0.26.4/tests/frontend_fact_check_availability.mjs +0 -25
- briefloop-0.26.4/tests/frontend_fact_check_grants.mjs +0 -140
- briefloop-0.26.4/tests/frontend_fast_mode.mjs +0 -34
- briefloop-0.26.4/tests/frontend_home_v2.mjs +0 -95
- briefloop-0.26.4/tests/frontend_job_presentation.mjs +0 -22
- briefloop-0.26.4/tests/frontend_learning_authorization.mjs +0 -62
- briefloop-0.26.4/tests/frontend_length_controls.mjs +0 -62
- briefloop-0.26.4/tests/frontend_licenses.mjs +0 -41
- briefloop-0.26.4/tests/frontend_live_status.mjs +0 -24
- briefloop-0.26.4/tests/frontend_markdown_import.mjs +0 -23
- briefloop-0.26.4/tests/frontend_mcp_selection.mjs +0 -11
- briefloop-0.26.4/tests/frontend_model_catalog_refresh.mjs +0 -154
- briefloop-0.26.4/tests/frontend_model_label.mjs +0 -53
- briefloop-0.26.4/tests/frontend_model_selection.mjs +0 -65
- briefloop-0.26.4/tests/frontend_native_requests.mjs +0 -49
- briefloop-0.26.4/tests/frontend_native_runtime.mjs +0 -42
- briefloop-0.26.4/tests/frontend_office_tools.mjs +0 -289
- briefloop-0.26.4/tests/frontend_open_brief_status.mjs +0 -139
- briefloop-0.26.4/tests/frontend_pending_report.mjs +0 -19
- briefloop-0.26.4/tests/frontend_polling.mjs +0 -68
- briefloop-0.26.4/tests/frontend_progress_race.mjs +0 -106
- briefloop-0.26.4/tests/frontend_provider_capabilities.mjs +0 -71
- briefloop-0.26.4/tests/frontend_quick_report.mjs +0 -71
- briefloop-0.26.4/tests/frontend_reasoning_controls.mjs +0 -58
- briefloop-0.26.4/tests/frontend_release_controls.mjs +0 -78
- briefloop-0.26.4/tests/frontend_release_navigation.mjs +0 -94
- briefloop-0.26.4/tests/frontend_report_browsing.mjs +0 -69
- briefloop-0.26.4/tests/frontend_report_chat_drawer.mjs +0 -43
- briefloop-0.26.4/tests/frontend_report_export.mjs +0 -131
- briefloop-0.26.4/tests/frontend_report_language.mjs +0 -41
- briefloop-0.26.4/tests/frontend_report_load.mjs +0 -26
- briefloop-0.26.4/tests/frontend_report_outline.mjs +0 -68
- briefloop-0.26.4/tests/frontend_report_panels.mjs +0 -79
- briefloop-0.26.4/tests/frontend_review_capability.mjs +0 -101
- briefloop-0.26.4/tests/frontend_review_coverage.mjs +0 -27
- briefloop-0.26.4/tests/frontend_review_status.mjs +0 -112
- briefloop-0.26.4/tests/frontend_runtime_discovery.mjs +0 -58
- briefloop-0.26.4/tests/frontend_runtime_feedback.mjs +0 -16
- briefloop-0.26.4/tests/frontend_runtime_permission_panel.mjs +0 -112
- briefloop-0.26.4/tests/frontend_save_barrier.mjs +0 -212
- briefloop-0.26.4/tests/frontend_settings_workspaces.mjs +0 -24
- briefloop-0.26.4/tests/frontend_setup_state.mjs +0 -109
- briefloop-0.26.4/tests/frontend_source_library.mjs +0 -65
- briefloop-0.26.4/tests/frontend_source_search.mjs +0 -24
- briefloop-0.26.4/tests/frontend_source_upload.mjs +0 -51
- briefloop-0.26.4/tests/frontend_startup_recovery.mjs +0 -99
- briefloop-0.26.4/tests/frontend_task_progress.mjs +0 -64
- briefloop-0.26.4/tests/frontend_template_groups.mjs +0 -74
- briefloop-0.26.4/tests/frontend_template_output.mjs +0 -149
- briefloop-0.26.4/tests/frontend_update_notifications.mjs +0 -48
- briefloop-0.26.4/tests/frontend_upload_limits.mjs +0 -23
- briefloop-0.26.4/tests/frontend_version_bodies.mjs +0 -78
- briefloop-0.26.4/tests/frontend_version_diff.mjs +0 -19
- briefloop-0.26.4/tests/frontend_welcome_gate.mjs +0 -114
- briefloop-0.26.4/tests/frontend_workspace_proposal.mjs +0 -34
- briefloop-0.26.4/tests/frontend_writing_preferences.mjs +0 -45
- briefloop-0.26.4/tests/test_agent_backend.py +0 -36
- briefloop-0.26.4/tests/test_agent_commands.py +0 -197
- briefloop-0.26.4/tests/test_analyst_draft_versions.py +0 -183
- briefloop-0.26.4/tests/test_assessment_admission_recovery.py +0 -17
- briefloop-0.26.4/tests/test_assessment_followup.py +0 -103
- briefloop-0.26.4/tests/test_background_no_question.py +0 -33
- briefloop-0.26.4/tests/test_bridge_harness.py +0 -389
- briefloop-0.26.4/tests/test_builtin_templates.py +0 -110
- briefloop-0.26.4/tests/test_chat_dispatch.py +0 -82
- briefloop-0.26.4/tests/test_chat_execution.py +0 -137
- briefloop-0.26.4/tests/test_chat_model_selection.py +0 -84
- briefloop-0.26.4/tests/test_cli_doctor.py +0 -16
- briefloop-0.26.4/tests/test_codex_idle.py +0 -63
- briefloop-0.26.4/tests/test_connection_test_history.py +0 -58
- briefloop-0.26.4/tests/test_connector_authorization.py +0 -137
- briefloop-0.26.4/tests/test_connector_empty_catalog.py +0 -86
- briefloop-0.26.4/tests/test_connector_materials.py +0 -217
- briefloop-0.26.4/tests/test_connector_tasks.py +0 -23
- briefloop-0.26.4/tests/test_connectors.py +0 -191
- briefloop-0.26.4/tests/test_core.py +0 -86
- briefloop-0.26.4/tests/test_cross_module_regressions.py +0 -43
- briefloop-0.26.4/tests/test_delivery_checks.py +0 -388
- briefloop-0.26.4/tests/test_delivery_consumers.py +0 -64
- briefloop-0.26.4/tests/test_demo.py +0 -77
- briefloop-0.26.4/tests/test_desktop_lifecycle.py +0 -162
- briefloop-0.26.4/tests/test_document_workflows.py +0 -104
- briefloop-0.26.4/tests/test_draft_completion.py +0 -92
- briefloop-0.26.4/tests/test_draft_contract.py +0 -72
- briefloop-0.26.4/tests/test_english_reports.py +0 -121
- briefloop-0.26.4/tests/test_entrypoint.py +0 -22
- briefloop-0.26.4/tests/test_evidence.py +0 -175
- briefloop-0.26.4/tests/test_evidence_parse_failures.py +0 -91
- briefloop-0.26.4/tests/test_execution_records.py +0 -49
- briefloop-0.26.4/tests/test_execution_timing.py +0 -4
- briefloop-0.26.4/tests/test_export_admission.py +0 -253
- briefloop-0.26.4/tests/test_export_layout_swap.py +0 -59
- briefloop-0.26.4/tests/test_export_xlsx.py +0 -628
- briefloop-0.26.4/tests/test_external_requests.py +0 -85
- briefloop-0.26.4/tests/test_fact_check_contract.py +0 -261
- briefloop-0.26.4/tests/test_fact_check_orchestration.py +0 -309
- briefloop-0.26.4/tests/test_fact_check_phase.py +0 -124
- briefloop-0.26.4/tests/test_fact_check_review.py +0 -51
- briefloop-0.26.4/tests/test_fact_check_switch.py +0 -34
- briefloop-0.26.4/tests/test_fact_status_tool.py +0 -50
- briefloop-0.26.4/tests/test_fast_evidence.py +0 -68
- briefloop-0.26.4/tests/test_fast_mode.py +0 -59
- briefloop-0.26.4/tests/test_fast_qualifier_checks.py +0 -50
- briefloop-0.26.4/tests/test_fast_reports.py +0 -74
- briefloop-0.26.4/tests/test_fast_research.py +0 -44
- briefloop-0.26.4/tests/test_figure_exports.py +0 -85
- briefloop-0.26.4/tests/test_figure_flow.py +0 -46
- briefloop-0.26.4/tests/test_figure_text.py +0 -89
- briefloop-0.26.4/tests/test_figures.py +0 -109
- briefloop-0.26.4/tests/test_generation_schema_guidance.py +0 -60
- briefloop-0.26.4/tests/test_harness.py +0 -415
- briefloop-0.26.4/tests/test_host_bins.py +0 -95
- briefloop-0.26.4/tests/test_human_learning.py +0 -101
- briefloop-0.26.4/tests/test_industry_export.py +0 -69
- briefloop-0.26.4/tests/test_industry_flow.py +0 -72
- briefloop-0.26.4/tests/test_industry_research.py +0 -69
- briefloop-0.26.4/tests/test_interactive_runtime.py +0 -126
- briefloop-0.26.4/tests/test_jev_checks.py +0 -157
- briefloop-0.26.4/tests/test_learning_authorization.py +0 -112
- briefloop-0.26.4/tests/test_learning_integrity.py +0 -50
- briefloop-0.26.4/tests/test_length.py +0 -44
- briefloop-0.26.4/tests/test_length_policy.py +0 -94
- briefloop-0.26.4/tests/test_markdown_download.py +0 -30
- briefloop-0.26.4/tests/test_media_sources.py +0 -188
- briefloop-0.26.4/tests/test_model_catalog_defaults.py +0 -50
- briefloop-0.26.4/tests/test_multimodal_harness.py +0 -96
- briefloop-0.26.4/tests/test_multimodal_http.py +0 -32
- briefloop-0.26.4/tests/test_native_analyst.py +0 -221
- briefloop-0.26.4/tests/test_native_evaluator.py +0 -232
- briefloop-0.26.4/tests/test_native_harness.py +0 -383
- briefloop-0.26.4/tests/test_native_learning.py +0 -90
- briefloop-0.26.4/tests/test_native_orchestrator.py +0 -401
- briefloop-0.26.4/tests/test_native_provider_storage.py +0 -49
- briefloop-0.26.4/tests/test_native_providers.py +0 -71
- briefloop-0.26.4/tests/test_native_research_closeout.py +0 -38
- briefloop-0.26.4/tests/test_native_review_contract.py +0 -114
- briefloop-0.26.4/tests/test_native_scout.py +0 -343
- briefloop-0.26.4/tests/test_notifications.py +0 -45
- briefloop-0.26.4/tests/test_npm_native_shim.py +0 -34
- briefloop-0.26.4/tests/test_numeric_occurrence_review.py +0 -157
- briefloop-0.26.4/tests/test_office_cli.py +0 -699
- briefloop-0.26.4/tests/test_office_source_structure.py +0 -101
- briefloop-0.26.4/tests/test_office_surfaces.py +0 -170
- briefloop-0.26.4/tests/test_ooxml_order.py +0 -54
- briefloop-0.26.4/tests/test_opencode_harness.py +0 -895
- briefloop-0.26.4/tests/test_opencode_idle.py +0 -224
- briefloop-0.26.4/tests/test_opencode_prompt_versions.py +0 -55
- briefloop-0.26.4/tests/test_opencode_provider.py +0 -94
- briefloop-0.26.4/tests/test_opencode_questions.py +0 -187
- briefloop-0.26.4/tests/test_opencode_reasoning.py +0 -40
- briefloop-0.26.4/tests/test_opencode_review_version.py +0 -79
- briefloop-0.26.4/tests/test_opencode_search_prompt.py +0 -80
- briefloop-0.26.4/tests/test_opencode_server_stdin.py +0 -135
- briefloop-0.26.4/tests/test_opencode_v2.py +0 -303
- briefloop-0.26.4/tests/test_opencode_version_probe.py +0 -40
- briefloop-0.26.4/tests/test_posix_process_tree.py +0 -165
- briefloop-0.26.4/tests/test_pr593_roundtrip.py +0 -44
- briefloop-0.26.4/tests/test_product_summary_consistency.py +0 -45
- briefloop-0.26.4/tests/test_progress.py +0 -50
- briefloop-0.26.4/tests/test_progress_pipeline.py +0 -18
- briefloop-0.26.4/tests/test_provider_catalog.py +0 -185
- briefloop-0.26.4/tests/test_public_research.py +0 -152
- briefloop-0.26.4/tests/test_quality_reading_context.py +0 -147
- briefloop-0.26.4/tests/test_reader_contract.py +0 -182
- briefloop-0.26.4/tests/test_reader_source_export.py +0 -149
- briefloop-0.26.4/tests/test_reader_workflow.py +0 -109
- briefloop-0.26.4/tests/test_reconciliation.py +0 -183
- briefloop-0.26.4/tests/test_release.py +0 -366
- briefloop-0.26.4/tests/test_release_identity.py +0 -71
- briefloop-0.26.4/tests/test_report_browsing.py +0 -141
- briefloop-0.26.4/tests/test_report_concurrency.py +0 -20
- briefloop-0.26.4/tests/test_report_deletion.py +0 -84
- briefloop-0.26.4/tests/test_report_length_feedback.py +0 -103
- briefloop-0.26.4/tests/test_report_path_regressions.py +0 -57
- briefloop-0.26.4/tests/test_report_time.py +0 -124
- briefloop-0.26.4/tests/test_research_budget.py +0 -184
- briefloop-0.26.4/tests/test_research_gap_updates.py +0 -212
- briefloop-0.26.4/tests/test_research_handoff.py +0 -111
- briefloop-0.26.4/tests/test_research_plan.py +0 -300
- briefloop-0.26.4/tests/test_research_response_admission.py +0 -173
- briefloop-0.26.4/tests/test_resume_in_place.py +0 -20
- briefloop-0.26.4/tests/test_review.py +0 -75
- briefloop-0.26.4/tests/test_review_capability.py +0 -172
- briefloop-0.26.4/tests/test_review_finding_consistency.py +0 -251
- briefloop-0.26.4/tests/test_review_learning.py +0 -47
- briefloop-0.26.4/tests/test_review_modes.py +0 -48
- briefloop-0.26.4/tests/test_review_packet_paths.py +0 -63
- briefloop-0.26.4/tests/test_review_packet_utf8.py +0 -236
- briefloop-0.26.4/tests/test_review_schema_drift.py +0 -41
- briefloop-0.26.4/tests/test_review_snapshot.py +0 -52
- briefloop-0.26.4/tests/test_review_visual_input.py +0 -118
- briefloop-0.26.4/tests/test_revision_citations.py +0 -164
- briefloop-0.26.4/tests/test_revision_policy.py +0 -71
- briefloop-0.26.4/tests/test_rich_document.py +0 -245
- briefloop-0.26.4/tests/test_role_models.py +0 -26
- briefloop-0.26.4/tests/test_runtime_bridge.py +0 -79
- briefloop-0.26.4/tests/test_runtime_bridge_idle.py +0 -75
- briefloop-0.26.4/tests/test_runtime_concurrency.py +0 -6
- briefloop-0.26.4/tests/test_runtime_json_bom.py +0 -46
- briefloop-0.26.4/tests/test_runtime_liveness.py +0 -168
- briefloop-0.26.4/tests/test_runtime_names.py +0 -40
- briefloop-0.26.4/tests/test_runtime_permissions.py +0 -183
- briefloop-0.26.4/tests/test_runtime_retry.py +0 -34
- briefloop-0.26.4/tests/test_runtime_settlement.py +0 -51
- briefloop-0.26.4/tests/test_schedules.py +0 -53
- briefloop-0.26.4/tests/test_scout_experiment.py +0 -54
- briefloop-0.26.4/tests/test_search_credentials.py +0 -79
- briefloop-0.26.4/tests/test_search_policy.py +0 -56
- briefloop-0.26.4/tests/test_semantic_experiment.py +0 -348
- briefloop-0.26.4/tests/test_semantic_governance.py +0 -199
- briefloop-0.26.4/tests/test_server_boundary.py +0 -183
- briefloop-0.26.4/tests/test_settings_transactions.py +0 -188
- briefloop-0.26.4/tests/test_software_version.py +0 -37
- briefloop-0.26.4/tests/test_source_ingestion.py +0 -218
- briefloop-0.26.4/tests/test_source_library_search.py +0 -100
- briefloop-0.26.4/tests/test_source_recovery_regressions.py +0 -31
- briefloop-0.26.4/tests/test_source_updates.py +0 -225
- briefloop-0.26.4/tests/test_sources_provenance.py +0 -327
- briefloop-0.26.4/tests/test_store_sqlite_benchmark.py +0 -110
- briefloop-0.26.4/tests/test_table_citation_advisory.py +0 -102
- briefloop-0.26.4/tests/test_task_labels.py +0 -50
- briefloop-0.26.4/tests/test_task_notify.py +0 -75
- briefloop-0.26.4/tests/test_task_progress.py +0 -3
- briefloop-0.26.4/tests/test_tavily.py +0 -108
- briefloop-0.26.4/tests/test_template_conversion.py +0 -339
- briefloop-0.26.4/tests/test_template_conversion_http.py +0 -86
- briefloop-0.26.4/tests/test_template_saved_state.py +0 -54
- briefloop-0.26.4/tests/test_templates.py +0 -46
- briefloop-0.26.4/tests/test_user_input.py +0 -139
- briefloop-0.26.4/tests/test_user_source_refresh.py +0 -167
- briefloop-0.26.4/tests/test_version_consistency.py +0 -73
- briefloop-0.26.4/tests/test_websearch.py +0 -29
- briefloop-0.26.4/tests/test_websearch_singleflight.py +0 -56
- briefloop-0.26.4/tests/test_wikiskill_engine_windows.py +0 -48
- briefloop-0.26.4/tests/test_windows_antigravity_permissions.py +0 -19
- briefloop-0.26.4/tests/test_windows_connector_acl.py +0 -119
- briefloop-0.26.4/tests/test_windows_distribution.py +0 -27
- briefloop-0.26.4/tests/test_windows_mcp_supervisor.py +0 -54
- briefloop-0.26.4/tests/test_windows_platform.py +0 -366
- briefloop-0.26.4/tests/test_windows_release_paths.py +0 -99
- briefloop-0.26.4/tests/test_windows_review_paths.py +0 -114
- briefloop-0.26.4/tests/test_windows_runtime_bundle.py +0 -43
- briefloop-0.26.4/tests/test_windows_xlsx_paths.py +0 -98
- briefloop-0.26.4/tests/test_word_import.py +0 -53
- briefloop-0.26.4/tests/test_word_source_locators.py +0 -93
- briefloop-0.26.4/tests/test_word_toc.py +0 -78
- briefloop-0.26.4/tests/test_worker_idle.py +0 -43
- briefloop-0.26.4/tests/test_workspace_action_errors.py +0 -35
- briefloop-0.26.4/tests/test_workspace_profile.py +0 -40
- briefloop-0.26.4/tests/test_workspaces.py +0 -166
- briefloop-0.26.4/tests/test_writer_assembly.py +0 -100
- briefloop-0.26.4/tests/test_writer_cli_guidance.py +0 -86
- briefloop-0.26.4/tests/test_writer_context.py +0 -132
- briefloop-0.26.4/tests/test_writer_input.py +0 -443
- briefloop-0.26.4/tests/test_xlsx_officecli_integration.py +0 -125
- briefloop-0.26.4/tests/test_xlsx_preview.py +0 -128
- briefloop-0.26.4/third_party/open-design/LICENSE +0 -201
- briefloop-0.26.4/third_party/open-design/NOTICE.md +0 -39
- briefloop-0.26.4/third_party/open-design/acp/constants.ts +0 -60
- briefloop-0.26.4/third_party/open-design/acp/json.ts +0 -147
- briefloop-0.26.4/third_party/open-design/acp/models.ts +0 -324
- briefloop-0.26.4/third_party/open-design/acp/rpc.ts +0 -327
- briefloop-0.26.4/third_party/open-design/acp/session-params.ts +0 -107
- briefloop-0.26.4/third_party/open-design/acp/types.ts +0 -18
- briefloop-0.26.4/third_party/open-design/byok-reference/byok-opencode.ts +0 -281
- briefloop-0.26.4/third_party/open-design/byok-reference/provider-models.ts +0 -427
- briefloop-0.26.4/third_party/open-design/core/index.ts +0 -1
- briefloop-0.26.4/third_party/open-design/core/json-line-stream.ts +0 -319
- briefloop-0.26.4/third_party/open-design/runtime-models/codex-models.ts +0 -110
- briefloop-0.26.4/third_party/open-design/runtime-models/mmd-routes.ts +0 -166
- briefloop-0.26.4/third_party/open-design/runtime-models/models.ts +0 -233
- briefloop-0.26.4/third_party/open-design/runtime-models/opencode-models.ts +0 -101
- {briefloop-0.26.4 → briefloop-0.27.1}/LICENSE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/THIRD_PARTY_NOTICES.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/setup.cfg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/__main__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/_entrypoint.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/agent_commands.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/agent_prompts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/analyst.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/analyst_drafts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/app_server.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/audit_bundle.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/backends/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/backends/opencode_server.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/backends/opencode_v2.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/bocha.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_dispatch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_execution.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/codex_diagnostics.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/company_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/comparison_contract.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/conflicts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/MATERIALS.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/config.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/grants.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/materials.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/receipts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/runtime.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/runtime_tools.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/service.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/stdio_supervisor.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/task_client.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/tasks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/transport.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/windows_acl.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/default_fonts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/delivery_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/demo.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/document_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/document_model.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/document_workflows.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/draft_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/draft_completion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/duckduckgo.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/evaluation_reading.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/evidence_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/execution_timing.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/export_jobs.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/exports.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/external_client.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/external_requests.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fact_check.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fast_mode.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fast_research.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/figure_text.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/figures.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/host_bins.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/industry_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/jev.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/jev_checks.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/length.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/media.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_engine.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_providers.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/notifications.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/office_cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/ooxml_order.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/opencode_harness.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/opencode_version.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/packet_views.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/parent_watch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/platform_support.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/process_host.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/projections.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/core.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/provider_catalog.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/reconciliation.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/release.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_browsing.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_time.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_tools.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/research_budget.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/review_learning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/revision_metadata.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/revision_policy.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/rpc_writer.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime_bridge.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime_permissions.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime_reasoning.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/schedules.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/scout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/scout_evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/search_credentials.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/search_policy.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skills.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/software_version.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_context.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_extraction.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_ingestion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_library_search.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_search.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_updates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/sources.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/frontend-licenses.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/native-engine-licenses.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/native-engine-models.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/native-engine.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-aider.png +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-amr.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-antigravity.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-briefloop.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-claude.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-codebuddy.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-codex.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-copilot.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-deepseek.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-devin.png +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-grok-build.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-hermes.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-kilo.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-kimi.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-kiro.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-mimo.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-opencode.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-pi.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-qoder.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-qwen.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-reasoning.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-reasonix.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-trae-cli.png +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-vibe.svg +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/tokens.css +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/task_labels.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/task_notify.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/tavily.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_conversion.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/templates.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/user_input.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/websearch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/windows_process.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/word_import.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workbook_figures.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workspace_profile.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workspaces.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/writer_assembly.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/writer_input.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/xlsx_export.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/zhipu.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/dependency_links.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/entry_points.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/requires.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/top_level.txt +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/__main__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/LICENSE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/NOTICE.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/act.sh +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/step.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/alfworld.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/livemath.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/sealqa.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/codex_identity.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/engine.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/feedback_loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/audit.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/runtime.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/tools_server.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/jsonl.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/k4_lock.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/livemath/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/livemath/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/livemath/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/native_agents.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/dataset.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/fetch.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/retrieval.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/reward.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/scoring.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/wiki_agents.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/paper_alignment/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/paper_alignment/contracts.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/paper_alignment/evidence.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product_cli.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product_install.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product_views.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/README.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/executor.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/snapshot.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/results.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/score_rules.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/scorer_trust.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/sealqa/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/sealqa/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/sealqa/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/settings.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/skill_proposer.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/__init__.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/loop.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/rollout.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/study.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/tool_audit.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/wiki.py +0 -0
- {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/wiki_maintainer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: briefloop
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.1
|
|
4
4
|
Summary: Local multi-runtime agent workbench for sourced briefings, independent review and skill learning
|
|
5
5
|
Author: Stahl-G
|
|
6
6
|
License-Expression: MIT
|
|
@@ -327,7 +327,7 @@ npm test
|
|
|
327
327
|
|
|
328
328
|
Reviewer 使用本任务固定核查包,在独立会话中返回结构化发现及处理说明的复核结果。设置可选**普通审阅**(默认)或**严格审阅**:普通模式通过 Codex、OpenCode 1.x/2.x 或 BriefLoop Agent 的实际只读通道执行,不承诺宿主自动加载的全局/项目上下文完全隔离;严格模式额外强制包内读取,目前由 BriefLoop Agent 的专用核查工具提供。选择严格模式不会自动降级或更换执行后端。两种模式使用相同的事实、证据及交付检查,新任务冻结实际模式,历史未记录模式的审阅不被补标为严格。
|
|
329
329
|
|
|
330
|
-
|
|
330
|
+
独立审阅可在任一执行引擎上运行:Codex、OpenCode 与内置引擎强制只读;Claude、Antigravity 等 CLI 宿主无法由 BriefLoop 关闭自带工具,审阅改用其原生权限运行,记录上标明“未强制只读”并列出宿主报告的工具使用。严格审阅仍只在内置引擎上执行。工作稿Word下载保持可用。“正式交付”另行检查当前版本的独立审阅、重要主张及必答内容、核心未核验、重大未决发现和冲突;高分不能抵消阻断项。审计包单独导出,逐来源选择原件、摘录或仅定位,缺省仅定位;离线校验为结构与一致性检查,不是事实真伪自动证明。旧正式件保留,更正或后续更新另建版本。
|
|
331
331
|
|
|
332
332
|
存在受限来源时,无法逐来源归属的审阅、回应、历史与内部研究自由文本会明确省略;包中保留身份、状态、定位和获准的证据片段。正式报告本身仍随包提供。旧版受限包需重新导出以应用完整权限投影,旧版全原件包继续支持下载和离线校验。
|
|
333
333
|
|
|
@@ -287,7 +287,7 @@ npm test
|
|
|
287
287
|
|
|
288
288
|
Reviewer 使用本任务固定核查包,在独立会话中返回结构化发现及处理说明的复核结果。设置可选**普通审阅**(默认)或**严格审阅**:普通模式通过 Codex、OpenCode 1.x/2.x 或 BriefLoop Agent 的实际只读通道执行,不承诺宿主自动加载的全局/项目上下文完全隔离;严格模式额外强制包内读取,目前由 BriefLoop Agent 的专用核查工具提供。选择严格模式不会自动降级或更换执行后端。两种模式使用相同的事实、证据及交付检查,新任务冻结实际模式,历史未记录模式的审阅不被补标为严格。
|
|
289
289
|
|
|
290
|
-
|
|
290
|
+
独立审阅可在任一执行引擎上运行:Codex、OpenCode 与内置引擎强制只读;Claude、Antigravity 等 CLI 宿主无法由 BriefLoop 关闭自带工具,审阅改用其原生权限运行,记录上标明“未强制只读”并列出宿主报告的工具使用。严格审阅仍只在内置引擎上执行。工作稿Word下载保持可用。“正式交付”另行检查当前版本的独立审阅、重要主张及必答内容、核心未核验、重大未决发现和冲突;高分不能抵消阻断项。审计包单独导出,逐来源选择原件、摘录或仅定位,缺省仅定位;离线校验为结构与一致性检查,不是事实真伪自动证明。旧正式件保留,更正或后续更新另建版本。
|
|
291
291
|
|
|
292
292
|
存在受限来源时,无法逐来源归属的审阅、回应、历史与内部研究自由文本会明确省略;包中保留身份、状态、定位和获准的证据片段。正式报告本身仍随包提供。旧版受限包需重新导出以应用完整权限投影,旧版全原件包继续支持下载和离线校验。
|
|
293
293
|
|
|
@@ -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.1"
|
|
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.1"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from .execution_records import sanitize
|
|
1
|
+
from .execution_records import sanitize, public_tool_name
|
|
2
2
|
"""Native CLI transports projected into the existing ChatStore, not another agent loop."""
|
|
3
3
|
import base64
|
|
4
4
|
import hashlib
|
|
@@ -239,7 +239,7 @@ class BridgeHarness(OpencodeHarness):
|
|
|
239
239
|
elif kind=='tool':
|
|
240
240
|
key=event.get('id') or uid('tool');tools[key]={**tools.get(key,{}),**event}
|
|
241
241
|
tool=tools[key];complete=tool.get('status') in ('completed','failed','error')
|
|
242
|
-
item={'id':key,'type':'runtime_tool','tool':tool.get('name'
|
|
242
|
+
item={'id':key,'type':'runtime_tool','tool':public_tool_name(tool.get('name')),'status':tool.get('status','running'),
|
|
243
243
|
'input':sanitize(tool.get('input')), 'output':sanitize(tool.get('output'))}
|
|
244
244
|
self.chat.event(sid,'item/completed' if complete else 'item/started',{'item':item,'turnId':mid})
|
|
245
245
|
if complete:
|
|
@@ -138,6 +138,11 @@ class ChatStore:
|
|
|
138
138
|
event['data']['tokenUsage']=project_usage(event['seq'],event['data'])
|
|
139
139
|
if not private:
|
|
140
140
|
for message in messages:message.pop('prompt',None)
|
|
141
|
+
from .execution_records import public_tool_name
|
|
142
|
+
for event in events:
|
|
143
|
+
item = event['data'].get('item') if isinstance(event['data'], dict) else None
|
|
144
|
+
if isinstance(item, dict) and item.get('type') == 'runtime_tool':
|
|
145
|
+
item['tool'] = public_tool_name(item.get('tool'))
|
|
141
146
|
if not reasoning:
|
|
142
147
|
for message in messages:message.pop('reasoning',None)
|
|
143
148
|
return {'session':session,'messages':messages,'events':events,'requests':requests,'token_usage':token_usage}
|
|
@@ -13,6 +13,15 @@ def _notify_owner(request):
|
|
|
13
13
|
"""Conversation that owns a task started from chat; never guessed."""
|
|
14
14
|
return request.get('session_id') or os.environ.get('BRIEFLOOP_CHAT_SESSION') or None
|
|
15
15
|
|
|
16
|
+
def _session_backend(store, session_id):
|
|
17
|
+
if not session_id:
|
|
18
|
+
return None
|
|
19
|
+
rows = store.rows('SELECT runtime FROM chat_sessions WHERE id=?', (session_id,))
|
|
20
|
+
try:
|
|
21
|
+
return json.loads(rows[0]['runtime']).get('backend') if rows else None
|
|
22
|
+
except (TypeError, ValueError):
|
|
23
|
+
return None
|
|
24
|
+
|
|
16
25
|
WORKSPACE_ACTIONS = (
|
|
17
26
|
'capabilities','source_snapshot','source_change','source_impacts','refresh_source',
|
|
18
27
|
'set_reader_contract','conflict_create','conflict_response','review_response','review_status',
|
|
@@ -20,7 +29,7 @@ WORKSPACE_ACTIONS = (
|
|
|
20
29
|
'revise_document','templates','workflows','template_rebuild','template_import','import_word_revision',
|
|
21
30
|
'company_review_complete','company_read','company_config','company_update','company_resolve',
|
|
22
31
|
'profile_read','profile_update',
|
|
23
|
-
'freeze_research_plan','research_status','begin_research_round','finish_research_round',
|
|
32
|
+
'freeze_research_plan','research_status','begin_research_round','finish_research_round','set_scout_tasks',
|
|
24
33
|
'reconciliation_candidates','reconciliation_save','reconciliation_read',
|
|
25
34
|
'export_word','inspect','generate','assess','comment','learn',
|
|
26
35
|
)
|
|
@@ -143,6 +152,15 @@ def workspace_action(store, request):
|
|
|
143
152
|
if action=='research_status':
|
|
144
153
|
from .research_plan import status
|
|
145
154
|
return status(store,request['run_id'])
|
|
155
|
+
if action=='set_scout_tasks':
|
|
156
|
+
from .scout_coverage import declare, update
|
|
157
|
+
if 'scout_tasks' in request:
|
|
158
|
+
result=declare(store,request['run_id'],request['scout_tasks'],round_id=request.get('round_id'))
|
|
159
|
+
if 'scout_outcomes' in request:
|
|
160
|
+
result=update(store,request['run_id'],request['scout_outcomes'],round_id=request.get('round_id'))
|
|
161
|
+
if 'scout_tasks' not in request and 'scout_outcomes' not in request:
|
|
162
|
+
raise ValueError('需要 scout_tasks 或 scout_outcomes')
|
|
163
|
+
return result
|
|
146
164
|
if action=='freeze_research_plan':
|
|
147
165
|
from .research_plan import freeze
|
|
148
166
|
return freeze(store,request['run_id'],preset=request.get('preset'),structure=request.get('structure'))
|
|
@@ -151,7 +169,8 @@ def workspace_action(store, request):
|
|
|
151
169
|
return begin_round(store,request['run_id'],target_gap_ids=request.get('target_gap_ids'),tasks=request.get('tasks'),job_id=request.get('job_id'))
|
|
152
170
|
if action=='finish_research_round':
|
|
153
171
|
from .research_plan import finish_round
|
|
154
|
-
return finish_round(store,request['run_id'],round_id=request.get('round_id'),gaps=request.get('gaps'),summary=request.get('summary',''),gap_updates=request.get('gap_updates'),job_id=request.get('job_id')
|
|
172
|
+
return finish_round(store,request['run_id'],round_id=request.get('round_id'),gaps=request.get('gaps'),summary=request.get('summary',''),gap_updates=request.get('gap_updates'),job_id=request.get('job_id'),
|
|
173
|
+
continue_research=request.get('continue_research') is True,early_stop_reason=str(request.get('early_stop_reason') or ''),scout_outcomes=request.get('scout_outcomes'))
|
|
155
174
|
if action=='reconciliation_candidates':
|
|
156
175
|
from .reconciliation import candidates
|
|
157
176
|
return candidates(store,request['run_id'])
|
|
@@ -186,7 +205,12 @@ def workspace_action(store, request):
|
|
|
186
205
|
runtime_payload={}
|
|
187
206
|
if request.get('runtime'):
|
|
188
207
|
from .backends import validate_backend
|
|
189
|
-
|
|
208
|
+
# A model name only means something on its own engine. Without an explicit
|
|
209
|
+
# engine, use the engine of the conversation that sent this model, never the
|
|
210
|
+
# workspace default (a Claude chat once produced "Antigravity · opus").
|
|
211
|
+
backend=request['runtime'].get('agent_backend') or _session_backend(store,_notify_owner(request)) \
|
|
212
|
+
or store.settings().get('agent_backend','codex')
|
|
213
|
+
backend=validate_backend(backend)
|
|
190
214
|
settings=Settings.model_validate({**store.settings(),**request['runtime'],'agent_backend':backend})
|
|
191
215
|
runtime_payload={'runtime':runtime_fields(settings.model_dump(),backend),'agent_backend':backend}
|
|
192
216
|
run=store.create_run(requirements.model_dump(),source_ids,research_protocol="quality_v1",
|
|
@@ -261,8 +285,9 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
|
|
|
261
285
|
subagent_note=(OPENCODE_V2_SUBAGENT+'优先不传 model override,继承当前已冻结模型和推理档位;不要启动嵌套模型 CLI。'
|
|
262
286
|
'宿主 question 工具不可用;需要澄清时直接在聊天回复中提问,用户下一条消息会继续本任务。')
|
|
263
287
|
else:
|
|
264
|
-
request_runtime={'model':runtime['model'],'reasoning_effort':runtime.get('effort'),
|
|
288
|
+
request_runtime={'agent_backend':backend,'model':runtime['model'],'reasoning_effort':runtime.get('effort'),
|
|
265
289
|
'model_provider':runtime.get('model_provider')}
|
|
290
|
+
if backend=='codex':request_runtime['service_tier']=runtime.get('service_tier')
|
|
266
291
|
runtime_json=json.dumps(request_runtime,ensure_ascii=False)
|
|
267
292
|
runtime_label=runtime.get('effort') if runtime.get('effort') is not None else '不指定(provider 默认)'
|
|
268
293
|
provider_label=runtime.get('model_provider') or f'沿用本机 {BACKEND_LABELS[backend]} 配置'
|
|
@@ -301,9 +326,10 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
|
|
|
301
326
|
- {{"action":"profile_read"}}:读取本工作区基础设定(称呼、公司/组织、岗位等)。
|
|
302
327
|
- {{"action":"profile_update","profile":{{"name":"称呼","organization":"公司/组织","role":"岗位","location":"城市","focus":"主要工作","report_types":"常做报告"}}}}:按上文约定保存用户主动提供或任务确有必要的基础信息;只写用户明确说过的内容,不猜、不编造,也不把这些当作报告证据。
|
|
303
328
|
- {{"action":"research_status","run_id":"真实run ID"}}:读取该任务冻结的研究计划、轮次与用量。
|
|
329
|
+
- {{"action":"set_scout_tasks","run_id":"真实run ID","scout_tasks":[{{"slot_id":"scout-1","assignment":"明确研究方向","result_file":"本轮结果绝对路径"}}]}}:派发前登记完整承诺分工,与 plan.json.scout_tasks 相同;空计划明确写 []。预分配槽位不是承诺。分工不可静默删除;可追加新分工。实际派发后可用同 action 的 scout_outcomes=[{{"slot_id":"scout-1","status":"dispatched","reason":"真实子任务句柄"}}] 记录派发。join-scouts 自动接纳有效结果。
|
|
304
330
|
- {{"action":"freeze_research_plan","run_id":"真实run ID","preset":"quick|standard|deep","structure":{{"breadth":6,"depth":2,"parallel":2}}}}:在第一次受控联网前冻结研究计划。预算只读取任务已授权的额度,不能借冻结扩大额度或替换模型/搜索源;相同内容重复提交幂等,不同内容会被拒绝。
|
|
305
331
|
- {{"action":"begin_research_round","run_id":"真实run ID","target_gap_ids":["真实gap ID"],"tasks":[{{"slot_id":"scout-1"}}]}}:在当前轮已结束、且未超过 depth 上限时开始下一轮;必须引用前轮真实缺口 ID。
|
|
306
|
-
- {{"action":"finish_research_round","run_id":"真实run ID","gaps":[{{"description":"真实缺口","source_ids":[],"related_claim_ids":[],"requirement_ids":[]}}],"summary":"本轮结论"}}:结束当前轮并生成真实 gap ID
|
|
332
|
+
- {{"action":"finish_research_round","run_id":"真实run ID","gaps":[{{"description":"真实缺口","source_ids":[],"related_claim_ids":[],"requirement_ids":[]}}],"summary":"本轮结论"}}:结束当前轮并生成真实 gap ID;每个已承诺 Scout 分工须已 join,或在 scout_outcomes 中明确 slot_id、status=failed|skipped、reason,保留未检范围;不必用满槽位、预算或后续轮次。可选 gap_updates 明确变更已登记缺口状态,每项 gap_id/status(open|partial|resolved)/reason/evidence(source_id/locator/excerpt,partial/resolved 至少一条,open 可为空),partial 另填 remaining_question;covered 不会关闭缺口。还要继续检索时带 "continue_research":true;只完成第 1 轮且受控搜索额度用了不到一半就结束研究时,必须带 "early_stop_reason" 说明为何已覆盖本期重要事件,否则会被拒绝。之后才能 begin 下一轮。
|
|
307
333
|
- {{"action":"reconciliation_candidates","run_id":"真实run ID"}}:读取本任务冻结的候选清单(来源与来源陈述),用于写作前对照。
|
|
308
334
|
- {{"action":"reconciliation_save","run_id":"真实run ID","reconciliation":{{"status":"complete|partial|not_applicable|failed","examined_claim_ids":[],"unexamined_claim_ids":[],"relations":[{{"member_claim_ids":["真实claim ID","真实claim ID"],"relation":"compatible|different_scope|temporal_sequence|correction|supersession|republication|attributed_difference|contradiction|unknown","scope":"","basis_span_ids":[],"reason":"","proposed_treatment":"","affected_requirement_ids":[]}}],"open_questions":[],"coverage_notes":""}}}}:保存写作前对照快照。必须用 examined ∪ unexamined 明确覆盖候选清单全部来源陈述;关系必须引用真实来源陈述;不判定真假,只登记依据与建议写法。重复相同内容幂等。
|
|
309
335
|
- {{"action":"reconciliation_read","run_id":"真实run ID","reconciliation_id":"真实对照ID"}}:读取对照快照;输入变化时返回 stale 标记。
|
|
@@ -311,7 +337,7 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
|
|
|
311
337
|
- {{"action":"templates"}}:读取可选模板。用户要求上传材料用作主模板时用 {{"action":"template_import","source_id":"DOCX来源ID"}} 启动一次准备;准备完成后 generate.requirements.template_id 选择具体版本。需要重新准备已有模板版式时,用 {{"action":"template_rebuild","template_id":"已有模板ID"}} 从保留原件创建新模板版本;原模板和已绑定稿件保持不变,新任务选择返回的新模板ID。
|
|
312
338
|
- {{"action":"read_report","version_id":"稿件ID"}}:读取富文档 JSON、引用和已存正文的 length_stats;revise_document 回执也给出保存后的确定性计数。按 count/rule 核对原始要求、读者约定及当前反馈,不估算字数;over_limit 只比较结构化 max_words,不表示已满足全部篇幅要求。用户明确要求修改内容/章节/图表时,将修改后的 JSON 保存到工作区文件,再用 {{"action":"revise_document","base_version":"刚读取版本ID","document_file":"工作区内JSON绝对路径"}} 保存新版本,不覆盖用户并发编辑。可选 citations 完整替换引用列表(source_id/locator/excerpt,schema 见 capabilities),省略则保留;只修改引用也保存新版本,定位描述不表示已独立核验。
|
|
313
339
|
- {{"action":"import_word_revision","base_version":"用户指定基础版本","source_id":"DOCX来源ID"}}:导入用户修改的 Word。返回 needs_alignment 时先核对原件和基础版本,向用户说明对齐问题;仅按用户明确选择提供 accept_unaligned=true。用户希望更新模板时另用 template_import 并提供 parent_id。
|
|
314
|
-
- {{"action":"generate","requirements":{{"title":"标题","objective":"用户目的","audience":"读者","language":"zh|en","extent":"compact|balanced|detailed","research_tier":"quick|standard|deep","allow_web":{str(bool(allow_web)).lower()},"period":"时间范围"}},"source_ids":["真实来源ID"],"runtime":{runtime_json}}}:正式生成可在页面编辑的简报。language 是报告正文语言(默认 zh);用户要英文报告时写 en,不传 target_words 时篇幅按英文词数默认。research_tier 是研究深度档位(默认 standard):quick 单轮检索,deep 预排 4 轮迭代研究;按用户明确要求选,用户未提就不写该字段。
|
|
340
|
+
- {{"action":"generate","requirements":{{"title":"标题","objective":"用户目的","audience":"读者","language":"zh|en","extent":"compact|balanced|detailed","research_tier":"quick|standard|deep","allow_web":{str(bool(allow_web)).lower()},"period":"时间范围"}},"source_ids":["真实来源ID"],"runtime":{runtime_json}}}:正式生成可在页面编辑的简报。language 是报告正文语言(默认 zh);用户要英文报告时写 en,不传 target_words 时篇幅按英文词数默认。research_tier 是研究深度档位(默认 standard):quick 单轮检索,deep 预排 4 轮迭代研究;按用户明确要求选,用户未提就不写该字段。scout_limit 是本报告最多可同时派发的 Scout 数(1–16),在提交前按信息量决定:一周左右约 4,月报约 8,跨多个行业或市场的大型报告可到 12–16;不写时系统按期间自动设定(月报 8,其余沿用工作区设置)。
|
|
315
341
|
提交 generate 时,必须把本轮已经确认的 key_questions、writing_preferences、章节、期间和篇幅完整写进 requirements,不能只传标题摘要。用户给出的执行约束同样在提交前冻结:target_minutes 是软目标;hard_timeout_minutes=0 表示不设硬截止;research_budget 包含 search_requests、candidate_urls、source_pages;search_policy 沿用已授权设置。不得说“后台稍后配置”而遗漏已指定的额度。并行数要求写入 writing_preferences,供主 Agent 冻结研究计划时选择 structure.parallel;不改变共享预算。提交回执中的实际冻结值与用户要求不一致时明确说明,不宣称已应用。
|
|
316
342
|
- {{"action":"assess","version_id":"真实简报版本ID"}}:为已有稿件安排评分。
|
|
317
343
|
- {{"action":"comment","version_id":"真实简报版本ID","text":"用户反馈"}}:记录用户明确提出的反馈。页面自动学习开启时,保存反馈可能稍后自动触发学习,要如实告知。
|
|
@@ -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.
|
|
@@ -207,8 +212,10 @@ def instructions(spec, role='analyst', *, include_spec=True):
|
|
|
207
212
|
|
|
208
213
|
def research_record(store, brief):
|
|
209
214
|
detail = json.loads(brief['detail']); refs = detail.get('citations', [])
|
|
215
|
+
from .plain_isolation import public_notes
|
|
216
|
+
notes = public_notes(detail.get('research_notes', []))
|
|
210
217
|
return {'version_id': brief['id'], 'brief_hash': brief['hash'],
|
|
211
|
-
'notes':
|
|
218
|
+
'notes': notes, 'gaps': detail.get('gaps', []),
|
|
212
219
|
'citations': [{**ref, 'source_name': store.one('sources', ref['source_id'])['name']} for ref in refs],
|
|
213
220
|
'assessments': [json.loads(x['data']) for x in store.rows('SELECT data FROM assessments WHERE version_id=? ORDER BY rowid DESC', (brief['id'],))]}
|
|
214
221
|
|
|
@@ -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}]')
|
|
@@ -15,6 +15,23 @@ _SECRET_HEADER=re.compile(r'''(?im)(?<![\w-])((?:proxy[-_])?authorization|(?:set
|
|
|
15
15
|
_SECRET_ENV=re.compile(r'''(?ix)(["']?\b(?:[a-z0-9]+_)*(?:authorization|cookie)["']?\s*=\s*)(?:\[credential[ ]omitted\]|"[^"\n]*"|'[^'\n]*'|[^\s,;&}\]]+)''')
|
|
16
16
|
_PRIVATE_KEY=re.compile(r'-----BEGIN (?:[A-Z ]+)?PRIVATE KEY-----.*?-----END (?:[A-Z ]+)?PRIVATE KEY-----',re.S)
|
|
17
17
|
|
|
18
|
+
# ACP "names" can be entire commands, paths or arbitrary host descriptions.
|
|
19
|
+
# Only exact known identifiers belong in compact public tool summaries.
|
|
20
|
+
_PUBLIC_TOOLS = frozenset('''Read Write Edit MultiEdit Bash Glob Grep LS NotebookEdit TodoWrite Task Agent WebFetch WebSearch
|
|
21
|
+
read write edit bash glob grep find ls task subagent shell search_web web_search webfetch websearch
|
|
22
|
+
read_file write_file edit_file list_directory read_many_files execute_command run_command
|
|
23
|
+
commandExecution command_execution fileChange mcpToolCall dynamicToolCall collabAgentToolCall
|
|
24
|
+
collab_tool_call imageView webSearch runtime_tool opencode_tool subagent_activity'''.split())
|
|
25
|
+
_OTHER_TOOL = '其他宿主工具'
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def public_tool_name(value):
|
|
29
|
+
return value if isinstance(value, str) and value in _PUBLIC_TOOLS else _OTHER_TOOL
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def public_tool_names(values):
|
|
33
|
+
return sorted({public_tool_name(value) for value in values}) if isinstance(values, list) else []
|
|
34
|
+
|
|
18
35
|
|
|
19
36
|
def _secret_field(key, value):
|
|
20
37
|
name = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', str(key)).lower()
|
|
@@ -55,8 +55,18 @@ def _plain_turn(worker, job, folder, prompt, *, phase=None):
|
|
|
55
55
|
(folder / 'packet').mkdir(exist_ok=True)
|
|
56
56
|
task = {**job, 'allow_web': False, 'plain_output': 'response.txt', 'plain_phase':phase, 'input_source_ids': [],
|
|
57
57
|
'native_packet': {'role': 'quick_writer', 'run_id': json.loads(job['payload'])['run_id']}}
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
result = worker.runtime.execute(task, prompt, folder,
|
|
59
|
+
resume_on_complete=int(json.loads(job['payload']).get('attempt',1))>1)
|
|
60
|
+
from . import plain_isolation
|
|
61
|
+
isolation = plain_isolation.record(json.loads(job['payload']).get('agent_backend', 'codex'), folder)
|
|
62
|
+
worker.store.event(job['id'], 'plain_isolation', {'phase': phase or folder.name, **isolation,
|
|
63
|
+
'message': plain_isolation.summary(isolation)})
|
|
64
|
+
return result
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _isolation(folder):
|
|
68
|
+
path = folder / 'isolation.json'
|
|
69
|
+
return json.loads(path.read_text(encoding='utf-8')) if path.exists() else None
|
|
60
70
|
|
|
61
71
|
|
|
62
72
|
def _response(folder):
|
|
@@ -126,6 +136,10 @@ def generate(worker, job):
|
|
|
126
136
|
data = {'title': req['title'], 'editor_document': markdown_document(text),
|
|
127
137
|
'citations': [{'source_id': aliases[a]['source_id']} for a in sorted(cited)],
|
|
128
138
|
'research_notes': [{'kind': 'fast_draft', 'summary': '一轮聚焦检索后根据已读取原文写作;未做完整事实核查,依据定位与评价在后台继续。' if research else '直接依据已有材料写作;未联网补搜,依据定位与评价在后台继续。'}]}
|
|
139
|
+
isolation = _isolation(folder / 'fast-writing')
|
|
140
|
+
if isolation:
|
|
141
|
+
from .plain_isolation import summary
|
|
142
|
+
data['research_notes'].append({'kind': 'fast_isolation', 'summary': summary(isolation), **isolation})
|
|
129
143
|
if research:
|
|
130
144
|
data['research_notes'].append({'kind':'fast_web_gaps','summary':'本次搜索与读取记录','gaps':research['gaps'],'reading_notices':research.get('notices',[]),
|
|
131
145
|
'questions_before_reading':research.get('questions_before_reading',[])})
|
|
@@ -159,7 +173,8 @@ def enrich(worker, job, brief, folder):
|
|
|
159
173
|
raise Conflict('材料与快速写作时的原文不同,请使用当前材料新建任务。')
|
|
160
174
|
phase = folder / 'evidence'
|
|
161
175
|
prompt = ('核对已保存报告,为重要结论补原文定位。不要改写正文,不搜索、不调用工具、不生成新的报告。'
|
|
162
|
-
'只返回一个 JSON 对象,包含 citations
|
|
176
|
+
'只返回一个 JSON 对象,包含 citations、number_bindings 和 unsupported 三个数组;没有可定位依据时留空,不猜测。'
|
|
177
|
+
'unsupported 列出正文中在全部来源里找不到依据的重要结论,每条给 report_quote(正文连续原句)和 reason;不要因措辞概括而列入。'
|
|
163
178
|
'每条 citation 使用 source_id(下方来源别名,如 S1)、report_quote(正文连续原句)、excerpt(连续逐字原文)。'
|
|
164
179
|
'report_quote 必须能在报告正文中逐字找到;摘录应包含对应的主体、期间、单位及限定条件,不能用同来源的无关段落充数。'
|
|
165
180
|
'无需猜行号;同一摘录在来源中重复时提供更长的唯一摘录。来源标题及相邻上下文由程序从冻结原文补入。'
|
|
@@ -212,8 +227,19 @@ def enrich(worker, job, brief, folder):
|
|
|
212
227
|
details = {key:value for key,value in json.loads(brief['detail']).items() if key in BriefDraft.model_fields}
|
|
213
228
|
details['citations'] = citations + [c for c in details.get('citations', []) if c['source_id'] not in {r['source_id'] for r in citations}]
|
|
214
229
|
details['number_bindings'] = numbers
|
|
230
|
+
# Claims the materials do not cover. Mostly a slip in an enforced turn; in an
|
|
231
|
+
# observed turn it is where outside information the CLI brought in shows up.
|
|
232
|
+
unsupported = [{'report_quote': item['report_quote'], 'reason': str(item.get('reason', ''))[:500]}
|
|
233
|
+
for item in (data.get('unsupported') if isinstance(data.get('unsupported'), list) else [])[:30]
|
|
234
|
+
if isinstance(item, dict) and isinstance(item.get('report_quote'), str)
|
|
235
|
+
and item['report_quote'].strip() and item['report_quote'] in brief['markdown']]
|
|
215
236
|
details.setdefault('research_notes', []).append({'kind': 'fast_evidence', 'summary': '逐字定位已检查;支持关系仍需评价。', 'rejected': rejected})
|
|
216
|
-
|
|
237
|
+
if unsupported:
|
|
238
|
+
details['research_notes'].append({'kind': 'fast_unsupported', 'summary': '以下结论在所选材料中找不到原文依据,需核实或删除。', 'items': unsupported})
|
|
239
|
+
store.event(job['id'], 'fast_unsupported', {'version_id': brief['id'], 'count': len(unsupported),
|
|
240
|
+
'message': f'{len(unsupported)} 条结论在所选材料中找不到原文依据,已单独列出。'})
|
|
241
|
+
(phase / 'admission.json').write_text(dump({'citations': citations, 'number_bindings': numbers, 'rejected': rejected,
|
|
242
|
+
'unsupported': unsupported}), encoding='utf-8')
|
|
217
243
|
if worker.runtime.cancelled.is_set() or worker.stopping.is_set():
|
|
218
244
|
raise InterruptedError('依据补全已停止,初稿和结果保留。')
|
|
219
245
|
from .draft_completion import verify_input
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Bounded feedback history with persisted job status and workspace-wide counts."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def snapshot(store):
|
|
5
|
+
# batch_id is the learning job's primary key, not a position in recent jobs.
|
|
6
|
+
# At most 100 indexed joins; never scan/parse job payloads per feedback item.
|
|
7
|
+
items = store.rows("SELECT f.*, j.status AS learning_status FROM feedback f "
|
|
8
|
+
"LEFT JOIN jobs j ON j.id=f.batch_id AND j.kind='learn' "
|
|
9
|
+
"ORDER BY f.rowid DESC LIMIT 100")
|
|
10
|
+
counts = store.rows("SELECT count(*) AS total, "
|
|
11
|
+
"count(CASE WHEN batch_id IS NULL THEN 1 END) AS pending FROM feedback")[0]
|
|
12
|
+
return {'feedback': items, 'feedback_summary': counts}
|
|
@@ -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
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Deterministic finding locations, not semantic or factual verification."""
|
|
2
|
+
from .document_model import citation_label_text, document_markdown, markdown_document, source_ids
|
|
3
|
+
from .evidence import blocks
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _passages(document):
|
|
7
|
+
numbers={sid:str(i) for i,sid in enumerate(source_ids(document),1)}
|
|
8
|
+
def inline(node,mode):
|
|
9
|
+
kind=node.get('type');attrs=node.get('attrs',{})
|
|
10
|
+
def citation(sid):
|
|
11
|
+
return '['+('@'+sid if mode=='stored' else sid if mode=='packet' else numbers[sid])+']'
|
|
12
|
+
if kind=='citation':return citation(attrs['sourceId'])
|
|
13
|
+
if kind=='text':
|
|
14
|
+
text=node.get('text','')
|
|
15
|
+
if mode=='packet':return text # packet_views._inline preserves link labels.
|
|
16
|
+
for mark in node.get('marks',[]):
|
|
17
|
+
href=mark.get('attrs',{}).get('href','')
|
|
18
|
+
if href.startswith('#source-'):
|
|
19
|
+
return citation_label_text(text)+citation(href[8:])
|
|
20
|
+
return text
|
|
21
|
+
if kind=='hardBreak':return ' '
|
|
22
|
+
if kind=='image':
|
|
23
|
+
text=attrs.get('caption') or attrs.get('alt') or attrs.get('src','')
|
|
24
|
+
return '[图:'+text+']' if mode=='packet' else text
|
|
25
|
+
return ''.join(inline(child,mode) for child in node.get('content',[]))
|
|
26
|
+
def walk(node,parents):
|
|
27
|
+
identity=node.get('attrs',{}).get('blockId')
|
|
28
|
+
scope=parents|({identity} if identity else set())
|
|
29
|
+
if node.get('type') in ('paragraph','heading','codeBlock','image'):
|
|
30
|
+
for mode in ('stored','packet','reader'):
|
|
31
|
+
yield scope,' '.join(inline(node,mode).split())
|
|
32
|
+
yield scope,' '.join(document_markdown({'type':'doc','content':[node]}).split())
|
|
33
|
+
return
|
|
34
|
+
# Containers are not passages: joining cells or paragraphs could invent
|
|
35
|
+
# a quotation that no reader sees as continuous text.
|
|
36
|
+
for child in node.get('content',[]):yield from walk(child,scope)
|
|
37
|
+
return list(walk(document,set()))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def validate_findings(document,findings,*,reader_preview=''):
|
|
41
|
+
"""Check only new, supplied anchors; omitted text and history stay valid."""
|
|
42
|
+
passages=_passages(document);known=set(blocks(document))
|
|
43
|
+
preview=None
|
|
44
|
+
for index,finding in enumerate(findings):
|
|
45
|
+
value=finding.model_dump() if hasattr(finding,'model_dump') else finding
|
|
46
|
+
if value.get('response_to'):continue # A corrected historical quote may be gone.
|
|
47
|
+
selected=set(value.get('block_ids') or [])
|
|
48
|
+
if selected-known:raise ValueError(f'findings[{index}].block_ids 引用了本版不存在的正文块')
|
|
49
|
+
quote=' '.join(str(value.get('report_quote') or '').split())
|
|
50
|
+
if not quote:continue # Missing-content findings need not invent a quotation.
|
|
51
|
+
if any(quote in text for scope,text in passages if not selected or scope&selected):continue
|
|
52
|
+
if not selected and reader_preview:
|
|
53
|
+
if preview is None:preview=_passages(markdown_document(reader_preview))
|
|
54
|
+
if any(quote in text for _,text in preview):continue
|
|
55
|
+
raise ValueError(f'findings[{index}].report_quote 无法在本版指定正文位置连续定位;'
|
|
56
|
+
'请复制实际原文,不拼接省略片段;缺失内容可省略 report_quote 并说明要求')
|
|
@@ -50,6 +50,8 @@ def prepare_report_data(payload):
|
|
|
50
50
|
elif not row.comparable: reason='尚未确认产品、地区、期间及口径可比'
|
|
51
51
|
elif row.previous_unit is None or row.previous_tax_basis is None or row.previous_category is None: reason='缺少比较值单位、税口径或数据类别'
|
|
52
52
|
elif row.previous_unit!=row.unit or row.previous_tax_basis!=row.tax_basis or row.previous_category!=row.category: reason='比较口径不一致'
|
|
53
|
+
elif row.category!='actual' and row.previous_as_of is None: reason='比较预测、指引或一致预期缺少取得数据的截至日 previous_as_of'
|
|
54
|
+
elif row.category!='actual' and row.previous_date==row.current_date and row.previous_as_of>row.as_of: reason='同一目标期的比较值数据截至日晚于本期数据截至日,不能按先后版本计算'
|
|
53
55
|
elif row.comparison=='pct' and row.previous==0: reason='比较值为零,不能计算百分比'
|
|
54
56
|
elif row.comparison=='bp' and row.unit not in ('%','percent'): reason='基点变化要求输入为百分数(例如 4.5 表示 4.5%)'
|
|
55
57
|
else:
|
|
@@ -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.
|
|
@@ -84,6 +84,13 @@ class InteractiveRuntime:
|
|
|
84
84
|
self.session_id = None
|
|
85
85
|
self.session_backend = None
|
|
86
86
|
|
|
87
|
+
@staticmethod
|
|
88
|
+
def _cwd(job, backend, folder):
|
|
89
|
+
if not job.get('plain_output'):
|
|
90
|
+
return folder
|
|
91
|
+
from .plain_isolation import working_directory
|
|
92
|
+
return working_directory(backend, folder)
|
|
93
|
+
|
|
87
94
|
def _harness_for(self, backend):
|
|
88
95
|
from .backends import validate_backend
|
|
89
96
|
try:
|
|
@@ -171,12 +178,18 @@ class InteractiveRuntime:
|
|
|
171
178
|
runtime = {'model': configured['model'],
|
|
172
179
|
'effort': configured.get('reasoning_effort', configured.get('effort'))}
|
|
173
180
|
if job.get('plain_output'):
|
|
174
|
-
|
|
181
|
+
from . import plain_isolation
|
|
182
|
+
runtime.update(plain_isolation.runtime(backend))
|
|
175
183
|
if job.get('readonly_output'):
|
|
176
|
-
from .review_capability import require_for_review
|
|
184
|
+
from .review_capability import require_for_review, review_isolation
|
|
177
185
|
review_mode=payload.get('review_mode','standard')
|
|
178
186
|
require_for_review(backend,review_mode)
|
|
179
|
-
|
|
187
|
+
if job['readonly_output']=='review.json' and review_isolation(backend,review_mode)=='observed':
|
|
188
|
+
# The host cannot be made read-only; it reviews on its own permissions
|
|
189
|
+
# and the review record carries that label and its reported tool use.
|
|
190
|
+
runtime.update(review_mode=review_mode)
|
|
191
|
+
else:
|
|
192
|
+
runtime.update(permission='read-only',review_root=str((folder/'packet').resolve()),review_mode=review_mode)
|
|
180
193
|
if job.get('review_id'):runtime['review_id']=job['review_id']
|
|
181
194
|
if backend == 'briefloop-native' and not job.get('native_packet') and not job.get('readonly_output'):
|
|
182
195
|
from .native_orchestrator import prepare
|
|
@@ -237,10 +250,10 @@ class InteractiveRuntime:
|
|
|
237
250
|
_write(marker, binding)
|
|
238
251
|
snapshot = harness.snapshot(binding['session_id'])
|
|
239
252
|
else:
|
|
240
|
-
evaluation_title='Evaluator · 比较'
|
|
253
|
+
evaluation_title={'pairwise':'Evaluator · 比较','triage':'Evaluator · 改动分类'}.get(job.get('evaluation_mode'),'Evaluator · 评分')
|
|
241
254
|
title = {'evaluator': evaluation_title, 'scorer': 'Evaluator · 评分', 'assessor': 'Evaluator · 比较', 'maintainer': '整理反馈经验', 'proposer': '提出技能改进'}.get(job.get('runtime_role'))
|
|
242
255
|
title = title or task_label(job['kind'], '简报任务')
|
|
243
|
-
session = harness.create_session(title, runtime, folder)
|
|
256
|
+
session = harness.create_session(title, runtime, self._cwd(job, backend, folder))
|
|
244
257
|
binding = {'job_id': job['id'], 'session_id': session['id'], 'runtime': runtime,
|
|
245
258
|
'backend': backend, 'message_id': None, 'history': []}
|
|
246
259
|
_write(marker, binding)
|
|
@@ -254,7 +267,7 @@ class InteractiveRuntime:
|
|
|
254
267
|
# An explicit job resume may need another turn, but must not undo a
|
|
255
268
|
# user's archive/delete choice. Completed cached turns bypass this.
|
|
256
269
|
old_sid=binding['session_id']
|
|
257
|
-
session=harness.create_session('恢复简报任务',runtime,folder)
|
|
270
|
+
session=harness.create_session('恢复简报任务',runtime,self._cwd(job,backend,folder))
|
|
258
271
|
binding.setdefault('previous_session_ids',[]).append(old_sid)
|
|
259
272
|
binding['session_id']=session['id']
|
|
260
273
|
if binding.get('message_id'):binding.setdefault('history',[]).append(binding['message_id'])
|
|
@@ -303,7 +316,7 @@ class InteractiveRuntime:
|
|
|
303
316
|
label = {'company_review':'先检查并维护本轮企业背景,完成后再进入报告写作。', 'generate': '请按已保存的要求研究来源并生成简报。',
|
|
304
317
|
'assess': '请核对这份简报的要求、内容与来源并给出评分。',
|
|
305
318
|
'learn': '请继续整理反馈、更新经验并完成当前技能改进步骤。'}.get(job['kind'], '请完成当前简报任务。')
|
|
306
|
-
evaluation_label='请使用 Evaluator 成对比较模式,依据任务与来源比较新旧稿件。'
|
|
319
|
+
evaluation_label={'pairwise':'请使用 Evaluator 成对比较模式,依据任务与来源比较新旧稿件。','triage':'请使用 Evaluator 改动分类模式,对照来源判断每处用户改动的性质。'}.get(job.get('evaluation_mode'),'请使用 Evaluator 单稿评分模式,核对简报要求、内容与来源。')
|
|
307
320
|
label = {'evaluator': evaluation_label, 'scorer': '请使用 Evaluator 单稿评分模式核对简报。', 'assessor': '请使用 Evaluator 成对比较模式核对新旧稿件。', 'maintainer': '请从反馈中整理可复用经验。', 'proposer': '请依据经验提出技能改进。'}.get(job.get('runtime_role'), label)
|
|
308
321
|
harness.start_internal(filesystem_path(folder / 'prompt.md').read_text(encoding='utf-8'), session_id=sid,
|
|
309
322
|
runtime=runtime, cwd=folder, job_id=job['id'], display_text=label,
|
|
@@ -375,7 +388,7 @@ class InteractiveRuntime:
|
|
|
375
388
|
if status in ('interrupted', 'cancelled'):
|
|
376
389
|
raise InterruptedError('会话已中断,已生成内容保留,可恢复')
|
|
377
390
|
if status != 'completed':
|
|
378
|
-
raise RuntimeError('Agent 执行失败;详情保存在会话与任务日志')
|
|
391
|
+
raise RuntimeError(tracker.failure_message or 'Agent 执行失败;详情保存在会话与任务日志')
|
|
379
392
|
return result
|
|
380
393
|
minutes = timing['hard_timeout_minutes']
|
|
381
394
|
if minutes > 0 and time.monotonic() - started > minutes * 60:
|