briefloop 0.26.0__tar.gz → 0.26.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.0 → briefloop-0.26.1}/CHANGELOG.md +10 -2
- {briefloop-0.26.0 → briefloop-0.26.1}/PKG-INFO +5 -3
- {briefloop-0.26.0 → briefloop-0.26.1}/README.md +4 -2
- briefloop-0.26.1/VERSION +1 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/desktop/electron/package-lock.json +2 -2
- {briefloop-0.26.0 → briefloop-0.26.1}/desktop/electron/package.json +1 -1
- briefloop-0.26.1/docs/release-0.26.1.md +19 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//345/206/205/347/275/256/345/274/225/346/223/216.md +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/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 +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/app.js +27 -119
- briefloop-0.26.1/frontend/model-catalog.js +171 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/reasoning-controls.js +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/review-controls.js +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/runtime-cards.js +2 -2
- {briefloop-0.26.0 → briefloop-0.26.1}/pyproject.toml +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/README.md +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/bridge.test.mjs +15 -5
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/main.ts +11 -11
- briefloop-0.26.1/src/briefloop/__init__.py +1 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/backends/opencode_server.py +2 -31
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/harness.py +1 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/models.py +2 -2
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/native_harness.py +19 -6
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/native_providers.py +65 -3
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/opencode_harness.py +3 -3
- briefloop-0.26.1/src/briefloop/provider_catalog.py +155 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/release.py +34 -15
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/review.py +67 -13
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/runtime_reasoning.py +10 -4
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/server.py +6 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/app.js +95 -95
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/index.html +4 -4
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/native-engine.mjs +2 -2
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-bridge.NOTICE.txt +2 -4
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-bridge.mjs +14 -174
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/store.py +2 -2
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop.egg-info/PKG-INFO +5 -3
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop.egg-info/SOURCES.txt +6 -2
- briefloop-0.26.1/tests/frontend_model_catalog_refresh.mjs +144 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_model_label.mjs +4 -4
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_model_selection.mjs +0 -15
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_native_runtime.mjs +3 -2
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_provider_capabilities.mjs +3 -1
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_reasoning_controls.mjs +1 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_save_barrier.mjs +2 -1
- briefloop-0.26.1/tests/test_agent_backend.py +36 -0
- briefloop-0.26.1/tests/test_assessment_admission_recovery.py +17 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_assessment_followup.py +0 -67
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_background_no_question.py +0 -10
- briefloop-0.26.1/tests/test_connector_tasks.py +23 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_core.py +0 -56
- briefloop-0.26.1/tests/test_cross_module_regressions.py +43 -0
- briefloop-0.26.1/tests/test_desktop_lifecycle.py +162 -0
- briefloop-0.26.1/tests/test_draft_completion.py +92 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_draft_contract.py +0 -61
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_execution_records.py +0 -25
- briefloop-0.26.1/tests/test_execution_timing.py +4 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_export_xlsx.py +0 -59
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_external_requests.py +0 -66
- briefloop-0.26.1/tests/test_fact_check_orchestration.py +309 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_fact_check_phase.py +0 -54
- briefloop-0.26.1/tests/test_fact_check_review.py +51 -0
- briefloop-0.26.1/tests/test_fact_check_switch.py +34 -0
- briefloop-0.26.1/tests/test_fast_evidence.py +68 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_fast_mode.py +0 -29
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_fast_qualifier_checks.py +0 -37
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_fast_reports.py +0 -74
- briefloop-0.26.1/tests/test_fast_research.py +44 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_harness.py +0 -21
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_human_learning.py +0 -41
- briefloop-0.26.1/tests/test_interactive_runtime.py +126 -0
- briefloop-0.26.1/tests/test_learning_authorization.py +112 -0
- briefloop-0.26.1/tests/test_learning_integrity.py +50 -0
- briefloop-0.26.1/tests/test_model_catalog_defaults.py +41 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_multimodal_harness.py +0 -24
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_harness.py +8 -16
- briefloop-0.26.1/tests/test_native_research_closeout.py +38 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_review_contract.py +1 -25
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_notifications.py +0 -15
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_office_cli.py +0 -51
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_office_surfaces.py +0 -119
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_harness.py +6 -4
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_idle.py +15 -13
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_provider.py +2 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_search_prompt.py +0 -32
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_pr593_roundtrip.py +0 -22
- briefloop-0.26.1/tests/test_progress.py +5 -0
- briefloop-0.26.1/tests/test_provider_catalog.py +185 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_public_research.py +2 -32
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_reader_workflow.py +0 -18
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_release.py +0 -343
- briefloop-0.26.1/tests/test_report_concurrency.py +20 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_report_deletion.py +0 -17
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_report_length_feedback.py +0 -14
- briefloop-0.26.1/tests/test_research_budget.py +184 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_research_handoff.py +0 -55
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_research_plan.py +0 -121
- briefloop-0.26.1/tests/test_review.py +75 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_review_capability.py +0 -134
- briefloop-0.26.1/tests/test_review_finding_consistency.py +251 -0
- briefloop-0.26.1/tests/test_review_learning.py +47 -0
- briefloop-0.26.1/tests/test_review_modes.py +48 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_review_packet_utf8.py +0 -28
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_review_snapshot.py +0 -39
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_revision_policy.py +0 -50
- briefloop-0.26.1/tests/test_role_models.py +26 -0
- briefloop-0.26.1/tests/test_runtime_concurrency.py +6 -0
- briefloop-0.26.1/tests/test_runtime_json_bom.py +46 -0
- briefloop-0.26.1/tests/test_runtime_retry.py +34 -0
- briefloop-0.26.1/tests/test_runtime_settlement.py +51 -0
- briefloop-0.26.1/tests/test_schedules.py +53 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_scout_experiment.py +0 -21
- briefloop-0.26.1/tests/test_search_policy.py +56 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_source_ingestion.py +0 -32
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_source_recovery_regressions.py +0 -12
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_task_notify.py +0 -8
- briefloop-0.26.1/tests/test_task_progress.py +3 -0
- briefloop-0.26.1/tests/test_template_saved_state.py +54 -0
- briefloop-0.26.1/tests/test_templates.py +46 -0
- briefloop-0.26.1/tests/test_websearch.py +29 -0
- briefloop-0.26.1/tests/test_websearch_singleflight.py +56 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/NOTICE.md +2 -4
- briefloop-0.26.0/VERSION +0 -1
- briefloop-0.26.0/src/briefloop/__init__.py +0 -1
- briefloop-0.26.0/tests/frontend_model_catalog_refresh.mjs +0 -24
- briefloop-0.26.0/tests/test_agent_backend.py +0 -122
- briefloop-0.26.0/tests/test_assessment_admission_recovery.py +0 -52
- briefloop-0.26.0/tests/test_connector_tasks.py +0 -194
- briefloop-0.26.0/tests/test_cross_module_regressions.py +0 -91
- briefloop-0.26.0/tests/test_desktop_lifecycle.py +0 -348
- briefloop-0.26.0/tests/test_draft_completion.py +0 -349
- briefloop-0.26.0/tests/test_execution_timing.py +0 -31
- briefloop-0.26.0/tests/test_fact_check_orchestration.py +0 -700
- briefloop-0.26.0/tests/test_fact_check_review.py +0 -98
- briefloop-0.26.0/tests/test_fact_check_switch.py +0 -115
- briefloop-0.26.0/tests/test_fast_evidence.py +0 -137
- briefloop-0.26.0/tests/test_fast_research.py +0 -136
- briefloop-0.26.0/tests/test_interactive_runtime.py +0 -324
- briefloop-0.26.0/tests/test_learning_authorization.py +0 -265
- briefloop-0.26.0/tests/test_learning_integrity.py +0 -215
- briefloop-0.26.0/tests/test_native_research_closeout.py +0 -109
- briefloop-0.26.0/tests/test_progress.py +0 -164
- briefloop-0.26.0/tests/test_report_concurrency.py +0 -174
- briefloop-0.26.0/tests/test_research_budget.py +0 -514
- briefloop-0.26.0/tests/test_review.py +0 -562
- briefloop-0.26.0/tests/test_review_final_reply.py +0 -57
- briefloop-0.26.0/tests/test_review_learning.py +0 -148
- briefloop-0.26.0/tests/test_review_modes.py +0 -171
- briefloop-0.26.0/tests/test_role_models.py +0 -171
- briefloop-0.26.0/tests/test_runtime_concurrency.py +0 -41
- briefloop-0.26.0/tests/test_runtime_json_bom.py +0 -105
- briefloop-0.26.0/tests/test_runtime_retry.py +0 -118
- briefloop-0.26.0/tests/test_runtime_settlement.py +0 -288
- briefloop-0.26.0/tests/test_schedules.py +0 -127
- briefloop-0.26.0/tests/test_search_policy.py +0 -156
- briefloop-0.26.0/tests/test_task_progress.py +0 -84
- briefloop-0.26.0/tests/test_template_saved_state.py +0 -154
- briefloop-0.26.0/tests/test_templates.py +0 -160
- briefloop-0.26.0/tests/test_websearch.py +0 -133
- briefloop-0.26.0/tests/test_websearch_singleflight.py +0 -340
- briefloop-0.26.0/third_party/open-design/runtime-models/fallbacks.json +0 -160
- {briefloop-0.26.0 → briefloop-0.26.1}/.gitattributes +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/CONTRIBUTING.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/KNOWN_ISSUES.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/LICENSE +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/MANIFEST.in +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/SECURITY.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/THIRD_PARTY_NOTICES.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/bootstrap.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/architecture.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/compose/spec/home-v2.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/draft-first.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/jev-precheck.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/native-integration.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/quality-reading-context.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/release-0.26.0.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/report-length.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/report-time-window.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/research-handoff.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/sqlite-benchmark.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/technical-report-0.21.0/evidence-index.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/technical-report-0.21.0/technical-report.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/windows.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs/writer-input.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//344/272/247/345/223/201/345/256/232/344/275/215/344/270/216/351/252/214/350/257/201.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//344/274/232/350/256/256/347/272/252/350/246/201.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//345/215/207/347/272/247/350/257/264/346/230/216.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//345/233/276/350/241/250/344/270/216Excel.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//345/256/232/346/227/266/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//346/212/245/345/221/212/347/274/226/350/276/221/344/270/216/346/250/241/346/235/277.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//346/241/214/351/235/242/345/256/211/350/243/205/344/270/216/346/233/264/346/226/260.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//346/267/261/345/272/246/347/240/224/347/251/266/344/270/216/344/272/213/345/256/236/346/240/270/346/237/245.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//347/211/210/346/234/254/344/270/200/350/207/264/346/200/247/346/243/200/346/237/245.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//350/241/214/344/270/232/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//350/257/201/345/210/270/347/240/224/347/251/266.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//350/257/201/346/215/256/344/270/216/347/273/223/350/256/272/350/277/275/346/272/257.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/docs//351/252/214/346/224/266/350/256/260/345/275/225.md" +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/examples/internal-weekly-report/README.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/examples/internal-weekly-report/report.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/examples/internal-weekly-report/source.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/examples/meeting-minutes/transcript.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/examples/stock-research/earnings-event.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/api.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/app-updates.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/assessment-checks.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/assessment-panel.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/citation-evidence.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/clipboard.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/connectors.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/delivery.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/dom.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/excel-export.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/fact-check-availability.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/fact-check-grants.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/jev-checks.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/job-presentation.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/length-controls.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/mcp-selection.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/notifications.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/office-tools.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/polling.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/provider-capabilities.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/quick-report.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/report-browsing.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/report-export.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/report-language.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/report-panels.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/review-coverage.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/review-results.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/review-status.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/rich-document.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/schedules.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/source-library-search.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/source-upload.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/task-progress.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/template-output.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/templates.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/time.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/uploads.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/version-diff.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/frontend/welcome.js +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/package-lock.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/package.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/probes/mcp_m0/README.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/probes/mcp_m0/probe.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/probes/mcp_m0/requirements.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/probes/mcp_m0/server.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/build.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/catalog.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/pi.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/reasoning.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/windows-command.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/runtime-bridge/zcode.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/scripts/build_frontend.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/scripts/build_frontend_licenses.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/scripts/check_versions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/scripts/test_frontend.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/setup.cfg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/__main__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/_entrypoint.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/agent_commands.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/agent_prompts.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/analyst.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/analyst_drafts.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/app_server.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/audit_bundle.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/backends/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/backends/opencode_v2.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/bocha.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/bridge_harness.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/chat_dispatch.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/chat_execution.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/chat_store.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/chat_tools.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/cli.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/codex_diagnostics.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/company_context.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/comparison_contract.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/conflicts.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/MATERIALS.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/README.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/config.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/grants.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/materials.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/receipts.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/runtime.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/runtime_tools.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/service.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/stdio_supervisor.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/task_client.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/tasks.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/transport.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/connectors/windows_acl.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/default_fonts.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/deliverable_spec.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/delivery_checks.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/demo.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/document_export.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/document_model.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/document_workflows.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/docx_text.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/draft_checks.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/draft_completion.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/duckduckgo.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/evaluation_reading.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/evidence.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/evidence_context.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/execution_records.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/execution_timing.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/export_jobs.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/exports.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/external_client.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/external_requests.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/fact_check.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/fast_mode.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/fast_reports.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/fast_research.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/figure_support.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/figure_text.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/figures.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/host_bins.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/industry_data.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/industry_export.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/interactive_runtime.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/jev.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/jev_checks.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/learning.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/learning_budget.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/length.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/media.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/native_engine.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/native_orchestrator.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/native_roles.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/notifications.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/office_cli.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/ooxml_order.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/opencode_version.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/packet_views.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/parent_watch.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/platform_support.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/process_host.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/progress.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/projections.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/core.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.analyst.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.evaluator.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.orchestrator.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/reconciliation.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/report_browsing.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/report_profiles.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/report_time.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/report_tools.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/research_budget.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/research_handoff.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/research_plan.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/review_capability.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/review_learning.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/revision_policy.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/rpc_writer.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/runtime.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/runtime_bridge.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/runtime_permissions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/schedules.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/scout.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/scout_evidence.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/scout_tools.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/search_credentials.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/search_policy.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/skills.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/software_version.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/source_context.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/source_extraction.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/source_ingestion.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/source_library_search.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/source_search.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/source_updates.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/sources.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/frontend-licenses.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/native-engine-licenses.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/native-engine-models.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-aider.png +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-amr.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-antigravity.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-briefloop.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-claude.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-codebuddy.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-codex.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-copilot.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-deepseek.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-devin.png +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-grok-build.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-hermes.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-kilo.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-kimi.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-kiro.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-mimo.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-opencode.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-pi.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-qoder.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-qwen.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-reasoning.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-reasonix.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-trae-cli.png +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/runtime-vibe.svg +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/style.css +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/static/tokens.css +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/task_labels.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/task_notify.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/task_progress.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/tavily.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/template_conversion.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/templates.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/websearch.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/windows_process.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/word_import.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workbook_figures.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workspace_profile.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/workspaces.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/writer_assembly.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/writer_input.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/writing_guidance.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/xlsx_export.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop/zhipu.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop.egg-info/dependency_links.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop.egg-info/entry_points.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop.egg-info/requires.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/briefloop.egg-info/top_level.txt +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/__main__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/_licenses/LICENSE +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/_licenses/NOTICE.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/alfworld/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/alfworld/act.sh +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/alfworld/rollout.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/alfworld/step.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/benchmarks/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/benchmarks/alfworld.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/benchmarks/livemath.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/benchmarks/sealqa.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/cli.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/codex_identity.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/engine.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/feedback_loop.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/isolated/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/isolated/audit.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/isolated/runtime.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/isolated/tools_server.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/jsonl.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/k4_lock.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/livemath/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/livemath/loop.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/livemath/rollout.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/native_agents.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/dataset.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/fetch.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/loop.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/retrieval.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/reward.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/rollout.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/scoring.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/officeqa/wiki_agents.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/paper_alignment/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/paper_alignment/contracts.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/paper_alignment/evidence.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/product.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/product_cli.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/product_install.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/product_views.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/protocol.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/protocol.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/paper_alignment/README.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/roles/executor.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/product/roles/proposer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/snapshot.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/protocol.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/results.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/score_rules.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/scorer_trust.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/sealqa/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/sealqa/loop.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/sealqa/rollout.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/settings.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/skill_proposer.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/spreadsheet/__init__.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/spreadsheet/loop.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/spreadsheet/rollout.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/spreadsheet/study.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/tool_audit.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/wiki.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/src/wikiskill/wiki_maintainer.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/start.ps1 +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/start.sh +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/check_distribution.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_app_updates.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_assessment_checks.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_chat_attachments.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_chat_commands.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_chat_drafts.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_chat_layout.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_chat_polling.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_checkout_eol.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_citation_clipboard.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_citation_edit.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_citation_evidence.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_clipboard_fallback.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_excel_export.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_export_menu.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_fact_check_availability.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_fact_check_grants.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_fast_mode.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_home_v2.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_job_presentation.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_learning_authorization.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_length_controls.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_licenses.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_live_status.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_markdown_import.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_mcp_selection.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_office_tools.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_open_brief_status.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_pending_report.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_polling.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_progress_race.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_quick_report.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_release_controls.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_release_navigation.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_report_browsing.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_report_chat_drawer.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_report_export.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_report_language.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_report_load.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_report_outline.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_report_panels.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_review_capability.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_review_coverage.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_review_status.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_runtime_discovery.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_runtime_feedback.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_settings_workspaces.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_setup_state.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_source_library.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_source_search.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_source_upload.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_startup_recovery.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_task_progress.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_template_groups.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_template_output.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_update_notifications.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_upload_limits.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_version_bodies.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_version_diff.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_welcome_gate.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_workspace_proposal.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/frontend_writing_preferences.mjs +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_agent_commands.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_analyst_draft_versions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_bridge_harness.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_builtin_templates.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_chat_dispatch.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_chat_execution.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_chat_model_selection.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_cli_doctor.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_codex_idle.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_connection_test_history.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_connector_authorization.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_connector_empty_catalog.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_connector_materials.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_connectors.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_delivery_checks.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_delivery_consumers.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_demo.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_document_workflows.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_english_reports.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_entrypoint.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_evidence.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_evidence_parse_failures.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_export_admission.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_export_layout_swap.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_fact_check_contract.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_fact_status_tool.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_figure_exports.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_figure_flow.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_figure_text.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_figures.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_generation_schema_guidance.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_host_bins.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_industry_export.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_industry_flow.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_industry_research.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_jev_checks.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_length.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_length_policy.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_markdown_download.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_media_sources.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_multimodal_http.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_analyst.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_evaluator.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_learning.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_orchestrator.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_provider_storage.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_providers.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_native_scout.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_npm_native_shim.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_numeric_occurrence_review.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_office_source_structure.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_ooxml_order.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_prompt_versions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_reasoning.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_review_version.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_server_stdin.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_v2.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_opencode_version_probe.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_posix_process_tree.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_product_summary_consistency.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_progress_pipeline.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_quality_reading_context.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_reader_contract.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_reader_source_export.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_reconciliation.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_report_browsing.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_report_path_regressions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_report_time.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_research_gap_updates.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_research_response_admission.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_resume_in_place.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_review_packet_paths.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_review_schema_drift.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_review_visual_input.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_revision_citations.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_rich_document.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_runtime_bridge.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_runtime_bridge_idle.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_runtime_liveness.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_runtime_names.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_runtime_permissions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_search_credentials.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_semantic_experiment.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_semantic_governance.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_server_boundary.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_settings_transactions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_software_version.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_source_library_search.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_source_updates.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_sources_provenance.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_store_sqlite_benchmark.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_table_citation_advisory.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_task_labels.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_tavily.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_template_conversion.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_template_conversion_http.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_user_source_refresh.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_version_consistency.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_wikiskill_engine_windows.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_windows_antigravity_permissions.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_windows_connector_acl.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_windows_distribution.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_windows_mcp_supervisor.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_windows_platform.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_windows_runtime_bundle.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_word_import.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_word_source_locators.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_word_toc.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_worker_idle.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_workspace_action_errors.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_workspace_profile.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_workspaces.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_writer_assembly.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_writer_cli_guidance.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_writer_context.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_writer_input.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/tests/test_xlsx_officecli_integration.py +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/LICENSE +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/acp/constants.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/acp/json.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/acp/models.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/acp/rpc.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/acp/session-params.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/acp/types.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/byok-reference/byok-opencode.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/byok-reference/provider-models.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/core/index.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/core/json-line-stream.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/runtime-models/codex-models.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/runtime-models/mmd-routes.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/runtime-models/models.ts +0 -0
- {briefloop-0.26.0 → briefloop-0.26.1}/third_party/open-design/runtime-models/opencode-models.ts +0 -0
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
-
## 0.26.
|
|
3
|
+
## 0.26.1 · 发行准备
|
|
4
|
+
|
|
5
|
+
- 修复独立审阅评分重大问题未进入正式核查发现时仍被接纳为完成的缺陷;增加显式关联与历史交付防御,原始拒绝结果保留。重大证据问题不能借非强制条款降为普通提示,草稿编辑与下载继续可用。
|
|
6
|
+
- 模型候选改为实时提供方 API / CLI 宿主目录,移除内置静态候选、具体型号自动预选与固定档位回退;保存连接后旧响应不会覆盖新目录。
|
|
7
|
+
- 按用户要求移除依赖预选型号、必须额外强绑模型才能运行的旧测试;新的审阅接纳验证直接回放保存结果,不派发模型。
|
|
8
|
+
|
|
9
|
+
发行与平台验证见 [0.26.1 记录](docs/release-0.26.1.md),准备状态不表示现有安装已升级。
|
|
10
|
+
|
|
11
|
+
## 0.26.0
|
|
4
12
|
|
|
5
13
|
- 新增已有材料及联网快速报告:先保存可编辑下载的初稿,再后台补依据和评价;不额外限制输入字符数,用户编辑优先,正式交付继续绑定独立审阅。
|
|
6
14
|
- 引用支持正文原句、来源标题与原文上下文;数字检查显示实际可核对范围。快速稿补充事实状态、日期、范围与语义支持检查,未核查保持明确;独立审阅展示逐条结论判断及未核查事项。
|
|
@@ -9,7 +17,7 @@
|
|
|
9
17
|
- 模型目录按需刷新,报告列表与状态查询优化;增加后台原件读取、Word/已有报告模板入口、表格与分页保护,以及导出版本恢复和内部定位清理。
|
|
10
18
|
- 纳入 Windows UTF-8 读取/锁修复、SQLite 测量工具和隔离语义实验。没有把实验指标或单个平台检查当作正式发行验收。
|
|
11
19
|
|
|
12
|
-
|
|
20
|
+
0.26.0 已发布至 GitHub Releases 与 PyPI;冻结前的 [候选清单](docs/release-0.26.0.md) 保留为历史过程记录,实际渠道与原生验收边界见正式发行说明。
|
|
13
21
|
|
|
14
22
|
## 0.25.0
|
|
15
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: briefloop
|
|
3
|
-
Version: 0.26.
|
|
3
|
+
Version: 0.26.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
|
|
@@ -136,14 +136,16 @@ Windows 也可不安装桌面 App,直接启动同一套 Python 服务与网页
|
|
|
136
136
|
|
|
137
137
|
## 执行后端与模型
|
|
138
138
|
|
|
139
|
+
新工作区不预选具体模型或思考强度。BriefLoop Agent 从已保存提供方的模型 API 实时读取目录;Agent CLI 使用所选宿主公开的目录或本机路由。打开选择器或点击刷新会重新查询,失败不填回静态模型清单。页面区分目录来源、查询时间和错误;目录可见不代表推理调用已通过。提供方不支持列举模型时仍可手输 ID,已有用户选择和在运行任务不被目录刷新改写。
|
|
140
|
+
|
|
139
141
|
工作区默认使用 Codex(Responses 通道)。执行宿主可在启动时用 `--backend` 指定,或在网页设置页切换;已排队/已开始的任务冻结原后端,不跟随切换。设置页会检测本机已安装的 CLI,并读取各自的模型目录。
|
|
140
142
|
|
|
141
143
|
| 宿主 | 接入方式 | 模型目录 |
|
|
142
144
|
| --- | --- | --- |
|
|
143
145
|
| Codex | 原生 app-server | 原生 `debug models` |
|
|
144
146
|
| Opencode | 本机原生服务 | 本机 provider/model 配置 |
|
|
145
|
-
| Claude Code | bridge(stream-json) |
|
|
146
|
-
| Kimi、Hermes | bridge(ACP) | ACP
|
|
147
|
+
| Claude Code | bridge(stream-json) | 本机路由;未公开目录时支持宿主默认或手输 |
|
|
148
|
+
| Kimi、Hermes | bridge(ACP) | ACP 模型目录;读取失败明确显示原因 |
|
|
147
149
|
| Reasonix | bridge(ACP) | 原生 `doctor --json` |
|
|
148
150
|
| MiMo | bridge(JSON 事件流) | 原生 `models --verbose` |
|
|
149
151
|
| CodeBuddy Code | bridge(原生 `--acp`) | ACP 原生模型目录;支持手输模型 ID |
|
|
@@ -96,14 +96,16 @@ Windows 也可不安装桌面 App,直接启动同一套 Python 服务与网页
|
|
|
96
96
|
|
|
97
97
|
## 执行后端与模型
|
|
98
98
|
|
|
99
|
+
新工作区不预选具体模型或思考强度。BriefLoop Agent 从已保存提供方的模型 API 实时读取目录;Agent CLI 使用所选宿主公开的目录或本机路由。打开选择器或点击刷新会重新查询,失败不填回静态模型清单。页面区分目录来源、查询时间和错误;目录可见不代表推理调用已通过。提供方不支持列举模型时仍可手输 ID,已有用户选择和在运行任务不被目录刷新改写。
|
|
100
|
+
|
|
99
101
|
工作区默认使用 Codex(Responses 通道)。执行宿主可在启动时用 `--backend` 指定,或在网页设置页切换;已排队/已开始的任务冻结原后端,不跟随切换。设置页会检测本机已安装的 CLI,并读取各自的模型目录。
|
|
100
102
|
|
|
101
103
|
| 宿主 | 接入方式 | 模型目录 |
|
|
102
104
|
| --- | --- | --- |
|
|
103
105
|
| Codex | 原生 app-server | 原生 `debug models` |
|
|
104
106
|
| Opencode | 本机原生服务 | 本机 provider/model 配置 |
|
|
105
|
-
| Claude Code | bridge(stream-json) |
|
|
106
|
-
| Kimi、Hermes | bridge(ACP) | ACP
|
|
107
|
+
| Claude Code | bridge(stream-json) | 本机路由;未公开目录时支持宿主默认或手输 |
|
|
108
|
+
| Kimi、Hermes | bridge(ACP) | ACP 模型目录;读取失败明确显示原因 |
|
|
107
109
|
| Reasonix | bridge(ACP) | 原生 `doctor --json` |
|
|
108
110
|
| MiMo | bridge(JSON 事件流) | 原生 `models --verbose` |
|
|
109
111
|
| CodeBuddy Code | bridge(原生 `--acp`) | ACP 原生模型目录;支持手输模型 ID |
|
briefloop-0.26.1/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.26.1
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "briefloop-desktop",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "briefloop-desktop",
|
|
9
|
-
"version": "0.26.
|
|
9
|
+
"version": "0.26.1",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# BriefLoop 0.26.1
|
|
2
|
+
|
|
3
|
+
本次为 0.26.0 后的修复版本,当前处于发行准备;渠道状态以正式 Release 与验收记录为准。
|
|
4
|
+
|
|
5
|
+
## 审阅结果不能丢失重大问题
|
|
6
|
+
|
|
7
|
+
独立审阅中的评分发现与正式核查发现增加关联检查。模型在评分里指出重大问题,却没有把它纳入正式发现时,产品会要求补全审阅,不再接受为完整结果。错误指出需要处理的条目,原始输出保留,普通草稿仍可编辑与下载。
|
|
8
|
+
|
|
9
|
+
旧版本已经保存的不一致审阅也会在正式交付前被识别;旧记录和原稿不改写,需要补全或重新完成审阅。程序不根据相似措辞猜测关联、不把评分条目自动转换为已核查事实。明确关联的描述可以不同;未提供关联的旧结果只在描述完全相同时兼容。
|
|
10
|
+
|
|
11
|
+
## 模型目录来自实际服务
|
|
12
|
+
|
|
13
|
+
BriefLoop Agent 查询已保存提供方的模型 API;Agent CLI 使用宿主目录或本机路由。不再展示内置静态模型建议,新工作区也不自动选具体模型和 High。页面明确目录来源、查询状态和错误;提供方不支持列举模型时可手动输入 ID。保存连接后迟到的旧请求不能覆盖新目录。
|
|
14
|
+
|
|
15
|
+
已保存的模型选择与运行任务保持原配置。目录能读取不代表已验证推理、工具调用或账户额度;必要的模型协议兼容信息仍单独保留。
|
|
16
|
+
|
|
17
|
+
## 验证边界
|
|
18
|
+
|
|
19
|
+
审阅修复使用原始失败结果的副本回放及无需模型派发的离线接纳/交付检查;未改写实验原件,不将结构通过等同事实正确。模型目录已在提供方 API 与网页验证,连接失败也如实显示。各平台安装、导出和更新结果将在冻结构建后单独记录。0.26.0 的原生验收记录不计为本版通过。
|
{briefloop-0.26.0 → briefloop-0.26.1}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md
RENAMED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
## 模型与权限
|
|
22
22
|
|
|
23
|
-
主链和 Evaluator、Wiki Maintainer、Skill Proposer
|
|
23
|
+
主链和 Evaluator、Wiki Maintainer、Skill Proposer 可以分别配置模型。模型候选来自实时提供方 API 或所选宿主目录,不使用内置模型建议;自定义 ID 原样交给所选宿主。Codex 的 provider 填写本机 Codex 中已经配置的名称,留空沿用本机配置;其它宿主使用它自己的账号与模型配置(Opencode 可另外在“API 提供商”登记协议、Base URL、Key 和模型)。“模型默认”不额外传推理档位。
|
|
24
24
|
|
|
25
25
|
执行宿主可在设置页切换,已排队或已开始的任务冻结原宿主。输入区只显示当前宿主真正支持的控件:权限档位来自宿主声明的能力,只有一个档位时不显示该下拉;“立即补充”只在支持运行中追加的宿主出现;不支持读图的宿主会在附图时直接提示。切换宿主会清空不再适用的角色模型,留空即继承主链模型。
|
|
26
26
|
|
{briefloop-0.26.0 → briefloop-0.26.1}/docs//345/206/205/347/275/256/345/274/225/346/223/216.md
RENAMED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## 使用入口
|
|
6
6
|
|
|
7
|
-
在“设置 → 模型与提供商”选择“BriefLoop 内置引擎”。在 API 提供商表单选择用于内置引擎,填写 Provider ID、接口地址、API Key、模型 ID,然后保存并选用。支持表单中的 Chat Completions、Responses 和 Anthropic Messages 协议;不同提供商实际支持的接口和工具能力仍需短测试确认。模型格式为 `provider/model
|
|
7
|
+
在“设置 → 模型与提供商”选择“BriefLoop 内置引擎”。在 API 提供商表单选择用于内置引擎,填写 Provider ID、接口地址、API Key、模型 ID,然后保存并选用。支持表单中的 Chat Completions、Responses 和 Anthropic Messages 协议;不同提供商实际支持的接口和工具能力仍需短测试确认。模型格式为 `provider/model`,候选实时读取已保存提供方的 API,不合并 Pi 内置清单或实验预设;提供方不提供目录时仍可直接输入。目录读取与推理连通性分别显示。未选择思考强度时沿用 Pi SDK 默认或恢复会话的原档位,不额外指定 Low/High。
|
|
8
8
|
|
|
9
9
|
密钥保存在本机 `~/.config/briefloop/native-engine/providers.json`,权限为当前用户读写,不进入工作区、Git、报告、核查包或目录返回值。留空密钥可保留该模型已有密钥。同一提供商使用同一接口与密钥。环境需要 Node.js 22.19+;桌面可使用随壳提供的 Node 模式,不需要安装 OpenCode 或其他 Agent CLI。
|
|
10
10
|
|
|
@@ -10,6 +10,6 @@
|
|
|
10
10
|
|
|
11
11
|
ACP 是共用连接协议,但每个 CLI 仍有自己的启动命令、登录方式与能力协商。Kilo、Kiro、Vibe 复用现有 ACP Bridge;本轮接通了设置和执行入口,尚未安装的运行时不会显示为真实测试通过。受限审阅等能力仍由宿主实际权限决定。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
BriefLoop Agent 的模型列表来自已保存提供方的 API;Agent CLI 的列表来自宿主目录或本机路由。打开选择器或刷新时重新查询,读取失败会显示原因,不添加内置模型建议;仍可输入模型 ID。选择目录中的模型不表示已验证账号权限。点击“测试”后会打开普通对话,显示回复、错误或停止状态;真实请求可能消耗所配置提供商的额度。
|
|
14
14
|
|
|
15
15
|
首页的宿主选择器用于下一回合;已经开始或排队的回合保留冻结配置。运行时名称仍可在该回合的执行信息中查看。
|
|
@@ -5,6 +5,7 @@ import {api,uploadSource,setToken,getUploadLimits,setSourceUploadHost} from './a
|
|
|
5
5
|
import {createReportBrowsing} from './report-browsing.js';
|
|
6
6
|
import {createSourceLibrarySearch} from './source-library-search.js';
|
|
7
7
|
import {createProviderCapabilities} from './provider-capabilities.js';
|
|
8
|
+
import {createModelCatalog,createProviderCatalog} from './model-catalog.js';
|
|
8
9
|
const providerCapabilities=createProviderCapabilities({$});
|
|
9
10
|
const reasoning=reasoningControls({api});
|
|
10
11
|
import {createAssessmentPanel} from './assessment-panel.js';
|
|
@@ -386,7 +387,7 @@ function render(first){
|
|
|
386
387
|
renderWorkflowChoices(first);
|
|
387
388
|
if($('review-open'))$('review-open').textContent='审阅与需处理'+(state.conflicts?.length?' · '+state.conflicts.length+' 项来源分歧':'');
|
|
388
389
|
if(first&&$('report-system-clock')&&state.system_clock)$('report-system-clock').textContent=`本机日期:${state.system_clock.today} · ${state.system_clock.timezone};提交时再次由后台核对。`;
|
|
389
|
-
if(first){$('settings-chat-web-default').checked=state.settings.chat_allow_web!==false;$('chat-allow-web').checked=state.settings.chat_allow_web!==false;$('timeout-minutes').value=state.settings.timeout_minutes;$('hard-timeout-minutes').value=state.settings.hard_timeout_minutes||0;$('company-mode').value=state.settings.company_context_enabled==null?'ask':state.settings.company_context_enabled?'on':'off';$('auto-revision').checked=state.settings.auto_revision!==false;state.sources.filter(s=>s.status==='ready').forEach(s=>selected.add(s.id));$('rounds').value=state.settings.k;$('auto-learn').checked=state.learning_authorization?.state==='authorized';$('model-select').value=state.settings.model_selection_required?'':state.settings.model||'
|
|
390
|
+
if(first){$('settings-chat-web-default').checked=state.settings.chat_allow_web!==false;$('chat-allow-web').checked=state.settings.chat_allow_web!==false;$('timeout-minutes').value=state.settings.timeout_minutes;$('hard-timeout-minutes').value=state.settings.hard_timeout_minutes||0;$('company-mode').value=state.settings.company_context_enabled==null?'ask':state.settings.company_context_enabled?'on':'off';$('auto-revision').checked=state.settings.auto_revision!==false;state.sources.filter(s=>s.status==='ready').forEach(s=>selected.add(s.id));$('rounds').value=state.settings.k;$('auto-learn').checked=state.learning_authorization?.state==='authorized';$('model-select').value=state.settings.model_selection_required?'':state.settings.model||'';assignEffort('effort-select',settingsEffort(state.settings,state.settings.agent_backend||'codex'));$('model-provider').value=state.settings.model_provider||'';$('service-tier').value=state.settings.service_tier||'';$('agent-backend').value=state.settings.agent_backend||'codex';$('model-variant').value=state.settings.agent_backend==='mimo'?(state.settings.runtime_efforts?.mimo||''):(state.settings.model_variant||'');updateModelLabel();renderRoleModels();renderReviewRuntime();renderBackend();loadSearchPolicy();renderSearchProvider();refreshRuntimeDiscovery();office.syncSettingsToggle();if(state.requirements)for(const [k,v] of Object.entries(state.requirements)){const e=$('requirements').elements[k];if(e)e.type==='checkbox'?e.checked=v:e.value=v}$('requirements').elements.key_questions_text.value=(state.requirements?.key_questions||[]).join('\n');$('requirements').elements.manual_sections_text.value=(state.requirements?.manual_sections||[]).join('\n');reportLanguageForm.restore(state.requirements?.language);initializeLengthInputs(state.requirements||{});initializeResearchBudget(state.requirements||{});initializeReportProfile(state.requirements||{});if(!state.requirements||state.requirements.fact_check==null)$('requirements').elements.fact_check.checked=!!state.settings.fact_checker;syncFactCheckControl();quickReport.sync();syncWorkflowProfile(false);previewReportTime()}
|
|
390
391
|
$('source-count').textContent=state.sources.length+' 份';$('source-list').innerHTML=state.sources.map(s=>`<div class="source-item"><input type="checkbox" data-check="${s.id}" ${selected.has(s.id)?'checked':''} ${s.status!=='ready'?'disabled':''} aria-label="选择 ${esc(s.name)}"><button data-source="${s.id}">${esc(s.name)}</button><span class="tag ${s.status==='failed'?'error':''}">${esc(sourceStatusLabel(s))}</span>${['failed','cancelled','interrupted'].includes(s.status)?`<button data-retry-source="${s.id}">重试</button>`:''}</div>`).join('');
|
|
391
392
|
document.querySelectorAll('[data-retry-source]').forEach(b=>b.onclick=()=>action(async()=>{const s=await api('retry-source',{source_id:b.dataset.retrySource});selected.delete(b.dataset.retrySource);if(s.status==='ready')selected.add(s.id);notice(sourceStatusLabel(s),['failed','cancelled','interrupted'].includes(s.status))}));
|
|
392
393
|
document.querySelectorAll('[data-check]').forEach(b=>b.onchange=()=>{if(b.checked){selected.add(b.dataset.check);referenceSelected.delete(b.dataset.check);renderReferenceSources()}else selected.delete(b.dataset.check)});renderReferenceSources();
|
|
@@ -719,8 +720,8 @@ async function refreshProgress(){
|
|
|
719
720
|
finally{if(progressRequest===request)progressRequest=null}
|
|
720
721
|
}
|
|
721
722
|
|
|
722
|
-
function friendlyModel(model){return
|
|
723
|
-
function effortValue(runtime,key){return Object.prototype.hasOwnProperty.call(runtime,key)?(runtime[key]||'none'):'
|
|
723
|
+
function friendlyModel(model){return model==='default'?'宿主默认模型':model}
|
|
724
|
+
function effortValue(runtime,key){return Object.prototype.hasOwnProperty.call(runtime,key)?(runtime[key]||'none'):'none'}
|
|
724
725
|
function assignEffort(id,value){const input=$(id);if(![...input.options].some(o=>o.value===value))input.add(new Option(value,value));input.value=value}
|
|
725
726
|
function activeChatRuntime(){return chat.messages.find(m=>m.role==='user'&&m.turn_id===chat.session?.turn_id&&m.runtime)?.runtime||chat.session?.runtime||{}}
|
|
726
727
|
const fastCapabilities=new Map();
|
|
@@ -738,7 +739,7 @@ function renderBackend(){
|
|
|
738
739
|
$('variant-field').hidden=!variant;document.querySelector('.main-provider-field').style.display=codex?'':'none';
|
|
739
740
|
$('effort-select').hidden=variant;$('effort-select').closest('label').hidden=variant;
|
|
740
741
|
reasoning.configure($(variant?'model-variant':'effort-select'),backend,$('model-select').value.trim(),{variant});
|
|
741
|
-
$('model-select').placeholder=['opencode','briefloop-native'].includes(backend)?'
|
|
742
|
+
$('model-select').placeholder=['opencode','briefloop-native'].includes(backend)?'输入 provider/model':'输入任意模型 ID';
|
|
742
743
|
document.querySelectorAll('.role-variant-field').forEach(e=>e.hidden=!variant);
|
|
743
744
|
document.querySelectorAll('.role-provider-field').forEach(e=>e.style.display=codex?'':'none');
|
|
744
745
|
document.querySelectorAll('.role-effort-select').forEach(e=>{e.style.display=variant?'none':'';reasoning.configure(variant?$(`role-${e.dataset.roleEffort}-variant`):e,backend,$(`role-${e.dataset.roleEffort}-model`).value.trim()||$('model-select').value.trim(),{variant})});
|
|
@@ -796,65 +797,14 @@ async function refreshRuntimeDiscovery(force=false){
|
|
|
796
797
|
$('runtime-discovery-status').textContent='正在检测执行引擎…';$('runtime-discovery-refresh').disabled=true;
|
|
797
798
|
try{const data=await api('runtimes'+(force?'?refresh=1':''));runtimeCatalog=data.runtimes||[];renderRuntimeDiscovery();if(typeof office!=='undefined'&&data.capabilities?.officecli)office.renderSettingsCapability(data.capabilities.officecli);$('runtime-discovery-status').textContent=`检测到 ${runtimeCatalog.filter(r=>r.installed).length} 个本机 CLI,其中 ${runtimeCatalog.filter(r=>r.available).length} 个可选择;检测未验证账号与模型调用,需另行短测试。`+(data.diagnostic?` ${data.diagnostic}`:'');await refreshModelSuggestions(force)}catch(e){$('runtime-discovery-status').textContent='检测失败:'+e.message}finally{$('runtime-discovery-refresh').disabled=false;runtimeScanned=true;if($('welcome')&&!$('welcome').hidden)renderWelcome()}
|
|
798
799
|
}
|
|
799
|
-
$('agent-backend').onchange=()=>action(async()=>{const backend=backendValue(),dropped=Object.keys(state.settings.role_models||{}).length;await api('settings',{agent_backend:backend,model_selection_required:true,role_models:{}});state.settings.agent_backend=backend;state.settings.model_selection_required=true;state.settings.role_models={};assignEffort('effort-select',settingsEffort(state.settings,backend));$('model-variant').value=backend==='mimo'?(state.settings.runtime_efforts?.mimo||''):(state.settings.model_variant||'');reasoning.refresh();$('model-select').value='';$('chat-model').value='';
|
|
800
|
-
|
|
801
|
-
const modelCatalogs=
|
|
802
|
-
function
|
|
803
|
-
async function fetchModelCatalog(force=false,backend=backendValue()){
|
|
804
|
-
const now=Date.now(),cached=modelCatalogs.get(backend);
|
|
805
|
-
if(!force&&cached&&now-cached.at<3600000){if(backend===backendValue())modelCatalog=cached;return cached.models;}
|
|
806
|
-
let data;
|
|
807
|
-
try{data=await api('models?backend='+encodeURIComponent(backend)+(force?'&refresh=1':''))}
|
|
808
|
-
catch(error){if(force){const failure={backend,at:0,models:[],diagnostic:error.message||'模型目录读取失败'};modelCatalogs.set(backend,failure);if(backend===backendValue())modelCatalog=failure}throw error}
|
|
809
|
-
const catalog={backend,at:now,models:(data.models||[]).map(m=>typeof m==='string'?{id:m,name:friendlyModel(m)}:{...m,name:m.name||m.label||friendlyModel(m.id),provider:m.provider||runtimeName(backend)}),diagnostic:data.diagnostic||data.error||'',source:data.source||'',note:data.note||''};modelCatalogs.set(backend,catalog);if(backend===backendValue())modelCatalog=catalog;refreshRuntimeModelSummaries();return catalog.models;
|
|
810
|
-
}
|
|
811
|
-
async function refreshModelSuggestions(force=false){
|
|
812
|
-
if(force)fastCapabilities.clear();renderFastControls();
|
|
813
|
-
const backend=backendValue();$('model-suggestions').innerHTML='';refreshInlineModelPickers();
|
|
814
|
-
try{const models=await fetchModelCatalog(force);if(backend!==backendValue())return;
|
|
815
|
-
$('model-suggestions').innerHTML=models.map(m=>`<option value="${esc(m.id)}" label="${esc(m.name||m.id)}"></option>`).join('');refreshInlineModelPickers();
|
|
816
|
-
if($('runtime-model-status'))$('runtime-model-status').textContent=modelCatalog.diagnostic||`${runtimeName(backend)}:${models.length} ${modelCatalog.source==='builtin_hints'?'项内置建议':'个模型'}${modelCatalog.source?' · '+({native_config:'本机配置',host:'宿主目录',host_default_only:'宿主未提供目录',builtin_hints:'非实时目录',local_routes:'本机路由'}[modelCatalog.source]||modelCatalog.source):''}。${modelCatalog.note||'可直接输入其他模型 ID。'}`;
|
|
817
|
-
}catch(e){if($('runtime-model-status'))$('runtime-model-status').textContent='模型目录读取失败:'+e.message+';可手动输入模型 ID。'}
|
|
818
|
-
}
|
|
819
|
-
let modelPickerTarget=null;
|
|
820
|
-
async function openModelPicker(targetId){
|
|
821
|
-
modelPickerTarget=targetId;
|
|
822
|
-
$('model-picker-search').value='';
|
|
823
|
-
$('model-picker').showModal();
|
|
824
|
-
await refreshCurrentModelPicker();
|
|
825
|
-
}
|
|
826
|
-
function refreshCurrentModelPicker(){return renderModelPicker(true)}
|
|
827
|
-
async function renderModelPicker(force=false){
|
|
828
|
-
const backend=modelTargetBackend(modelPickerTarget);let models,status,error='';
|
|
829
|
-
try{
|
|
830
|
-
models=await fetchModelCatalog(force,backend);refreshInlineModelPickers();
|
|
831
|
-
const note=modelCatalogs.get(backend)?.note;
|
|
832
|
-
status=`${runtimeName(backend)} · ${models.length} ${modelCatalogs.get(backend)?.source==='builtin_hints'?'项内置建议':'个模型'};${note||'可手填模型 ID'}`;
|
|
833
|
-
}catch(e){models=[];error=e.message||'模型目录读取失败';refreshInlineModelPickers()}
|
|
834
|
-
const q=$('model-picker-search').value.trim().toLowerCase();
|
|
835
|
-
const shown=models.filter(m=>!q||m.id.toLowerCase().includes(q)||(m.name||'').toLowerCase().includes(q)||(m.provider||'').toLowerCase().includes(q));
|
|
836
|
-
$('model-picker-status').textContent=(error?('读取失败:'+error+';可直接手填模型 ID'):(models.length?status:emptyCatalogLabel(backend,modelCatalogs.get(backend))))+(q?` · 筛出 ${shown.length} 个`:'');
|
|
837
|
-
let lastProvider=null,html='';
|
|
838
|
-
for(const m of shown){
|
|
839
|
-
if(m.provider!==lastProvider){lastProvider=m.provider;html+=`<h3 class="workspace-list-heading">${esc(m.provider)}</h3>`}
|
|
840
|
-
html+=`<button type="button" class="workspace-choice" data-model-pick="${esc(m.id)}"><span><strong>${esc(m.id)}</strong><small>${esc(m.name||'')}</small></span><em>选用</em></button>`;
|
|
841
|
-
}
|
|
842
|
-
const custom=$('model-picker-search').value.trim();
|
|
843
|
-
const customChoice=custom&&!/\s/.test(custom)&&!shown.some(m=>m.id===custom)?`<button type="button" class="workspace-choice" data-model-pick="${esc(custom)}"><span><strong>${esc(custom)}</strong><small>使用此模型 ID</small></span><em>选用</em></button>`:'';
|
|
844
|
-
$('model-picker-list').innerHTML=(html||(error?('<p class="help">读取失败:'+esc(error)+'</p>'):(models.length?'<p class="help">没有匹配的模型。可直接输入完整模型 ID 后按回车选用。</p>':'<p class="help">'+esc(emptyCatalogLabel(backend,modelCatalogs.get(backend)))+'</p>')))+customChoice;
|
|
845
|
-
$('model-picker-list').querySelectorAll('[data-model-pick]').forEach(b=>b.onclick=()=>pickModel(b.dataset.modelPick));
|
|
846
|
-
}
|
|
847
|
-
function pickModel(id){
|
|
848
|
-
const el=modelPickerTarget&&$(modelPickerTarget);
|
|
849
|
-
$('model-picker').close();
|
|
850
|
-
if(!el)return;
|
|
851
|
-
el.value=id;
|
|
852
|
-
el.dispatchEvent(new Event('change',{bubbles:true}));
|
|
853
|
-
}
|
|
800
|
+
$('agent-backend').onchange=()=>action(async()=>{const backend=backendValue(),dropped=Object.keys(state.settings.role_models||{}).length;await api('settings',{agent_backend:backend,model_selection_required:true,role_models:{}});state.settings.agent_backend=backend;state.settings.model_selection_required=true;state.settings.role_models={};assignEffort('effort-select',settingsEffort(state.settings,backend));$('model-variant').value=backend==='mimo'?(state.settings.runtime_efforts?.mimo||''):(state.settings.model_variant||'');reasoning.refresh();$('model-select').value='';$('chat-model').value='';renderRuntimeDiscovery();renderRoleModels();renderBackend();updateComposer();await refreshModelSuggestions();notice(dropped?'宿主已切换;原宿主的角色模型已清空,留空即继承主链模型':'Runtime 已保存;请选择或输入模型')});$('model-variant').onchange=()=>action(saveModel,'Variant 已保存;下一次启动生效');
|
|
801
|
+
const modelDirectory=createModelCatalog({api,$,getBackend:backendValue,getChatBackend:chatBackendChoice,runtimeName,onCatalogChange:refreshRuntimeModelSummaries});
|
|
802
|
+
const {catalogs:modelCatalogs,fetchModelCatalog,openModelPicker,refreshCurrentModelPicker,renderModelPicker,pickModel,refreshInlineModelPickers,setupModelPickers}=modelDirectory;
|
|
803
|
+
async function refreshModelSuggestions(force=false){if(force)fastCapabilities.clear();renderFastControls();await modelDirectory.refreshModelSuggestions()}
|
|
854
804
|
$('model-picker-close').onclick=()=>$('model-picker').close();
|
|
855
805
|
$('model-picker-search').oninput=()=>renderModelPicker();
|
|
856
806
|
$('model-picker-search').onkeydown=event=>{if(event.key==='Enter'&&!event.isComposing){event.preventDefault();const id=event.target.value.trim();if(id&&!/\s/.test(id))pickModel(id)}};
|
|
857
|
-
$('model-picker-refresh').onclick=()=>
|
|
807
|
+
$('model-picker-refresh').onclick=()=>refreshCurrentModelPicker();
|
|
858
808
|
$('model-select').onchange=()=>{reasoning.refresh();renderBackend();return action(saveModel,'模型已保存;下一次启动生效')};$('service-tier').onchange=()=>action(saveModel,'速度已保存;下一次启动生效');$('effort-select').onchange=()=>action(saveModel,'推理档位已保存;下一次启动生效');$('model-provider').onchange=()=>action(saveModel,'Provider 已保存;下一次启动生效');$('model-browse').onclick=()=>openModelPicker('model-select');
|
|
859
809
|
$('model-apply-session').onclick=()=>{
|
|
860
810
|
const session=chat.session;
|
|
@@ -933,7 +883,7 @@ function restoreDraft({preserveNewDraft=false}={}){
|
|
|
933
883
|
const runtime=saved||sessionRuntime||fallback;
|
|
934
884
|
// Searching is the expected default for a fresh chat; a saved draft keeps the user's own choice.
|
|
935
885
|
$('chat-input').value=d?.text||'';chat.attachments=new Set(d?.sources||[]);$('chat-allow-web').checked=d&&('allow_web' in d)?!!d.allow_web:(chat.id?[...(chat.messages||[])].reverse().find(m=>m.role==='user'&&m.purpose!=='runtime_test')?.allow_web??(state.settings.chat_allow_web!==false):state.settings.chat_allow_web!==false);chat.hostOptions=runtime.host_options||{};
|
|
936
|
-
$('chat-model').value=runtime.model||'';assignEffort('chat-effort',Object.hasOwn(runtime,'effort')?effortValue(runtime,'effort'):
|
|
886
|
+
$('chat-model').value=runtime.model||'';assignEffort('chat-effort',Object.hasOwn(runtime,'effort')?effortValue(runtime,'effort'):'none');if($('chat-variant'))$('chat-variant').value=runtime.variant||(runtime.backend==='mimo'?runtime.effort:'')||'';
|
|
937
887
|
$('chat-model-provider').value=runtime.model_provider||'';$('chat-service-tier').value=runtime.service_tier||'';$('chat-permission').value=runtime.permission||'workspace-write';
|
|
938
888
|
renderAttachments();updateComposer();autoSizeChatInput();refreshInlineModelPickers();
|
|
939
889
|
}
|
|
@@ -970,7 +920,7 @@ function renderChatRuntimePermissions(){
|
|
|
970
920
|
const effortField=document.querySelector('label[for="chat-effort"]');
|
|
971
921
|
if(effortField)effortField.hidden=['opencode','briefloop-native','mimo'].includes(backend);
|
|
972
922
|
}
|
|
973
|
-
function runtimeChoice(){const model=$('chat-model').value.trim();if(!model)throw Error('请输入模型 ID');const backend=chatBackendChoice();if(!['codex','opencode','briefloop-native'].includes(backend)){return {model:reasoningModel(backend,model,$('chat-effort').value),backend,effort:backend==='mimo'?($('chat-variant').value.trim()||null):($('chat-effort').value==='none'?null:$('chat-effort').value),permission:'runtime-native',host_options:chat.hostOptions||{}}}if(['opencode','briefloop-native'].includes(backend)){if(!model.includes('/'))throw Error('
|
|
923
|
+
function runtimeChoice(){const model=$('chat-model').value.trim();if(!model)throw Error('请输入模型 ID');const backend=chatBackendChoice();if(!['codex','opencode','briefloop-native'].includes(backend)){return {model:reasoningModel(backend,model,$('chat-effort').value),backend,effort:backend==='mimo'?($('chat-variant').value.trim()||null):($('chat-effort').value==='none'?null:$('chat-effort').value),permission:'runtime-native',host_options:chat.hostOptions||{}}}if(['opencode','briefloop-native'].includes(backend)){if(!model.includes('/'))throw Error('模型必须是 provider/model 形式');return {model,backend,variant:($('chat-variant')?.value||'').trim()||null,permission:$('chat-permission').value}}return {model,backend,model_provider:$('chat-model-provider').value.trim()||null,effort:$('chat-effort').value,service_tier:selectedServiceTier('chat-service-tier',fastControlConfig('chat'),true),permission:$('chat-permission').value}}
|
|
974
924
|
function messageTime(value){return clock(value)}
|
|
975
925
|
function chatError(text=''){$('chat-error').textContent=text;$('chat-error').hidden=!text}
|
|
976
926
|
function sessionMissing(error){return /会话或消息不存在|会话不存在/.test(String(error&&error.message||error||''))}
|
|
@@ -1509,7 +1459,7 @@ $('chat-permission').onchange=()=>{rememberDraft();updateComposer()};
|
|
|
1509
1459
|
function showSettings(){$('settings-chat-web-default').checked=state.settings.chat_allow_web!==false;$('timeout-minutes').value=state.settings.timeout_minutes;$('hard-timeout-minutes').value=state.settings.hard_timeout_minutes||0;moveSearchSettings('settings');page('settings-dialog');$('settings-dialog').scrollIntoView({block:'start'});refreshRuntimeDiscovery();office.syncSettingsToggle();updateLearningPause().catch(()=>{});refreshTavilySettings().catch(()=>{})}
|
|
1510
1460
|
$('settings-open').onclick=showSettings;$('settings-close').onclick=()=>page('chat');
|
|
1511
1461
|
{
|
|
1512
|
-
const modelPanel=document.querySelector('.model-settings');const shortcut=document.createElement('div');shortcut.className='setup-settings-shortcut';shortcut.innerHTML='<div><span>生成模型</span><strong id="setup-model-summary"
|
|
1462
|
+
const modelPanel=document.querySelector('.model-settings');const shortcut=document.createElement('div');shortcut.className='setup-settings-shortcut';shortcut.innerHTML='<div><span>生成模型</span><strong id="setup-model-summary">未指定模型</strong></div><button type="button" class="outline">模型与角色设置</button>';shortcut.querySelector('button').onclick=showSettings;modelPanel.before(shortcut);$('settings-model-block').append(modelPanel);
|
|
1513
1463
|
const providerRow=document.querySelector('.chat-provider-row');providerRow.querySelector('label').textContent='当前对话 Provider';providerRow.querySelector('span').textContent='用于当前对话下一次执行';$('settings-model-block').append(providerRow);
|
|
1514
1464
|
const learningControl=document.querySelector('.learning-control'),learningHelp=learningControl.nextElementSibling,autoLearnLabel=$('auto-learn').closest('label');$('settings-learning-block').append(learningControl,learningHelp,autoLearnLabel);
|
|
1515
1465
|
const link=document.createElement('button');link.type='button';link.className='outline feedback-settings';link.textContent='学习设置';link.onclick=showSettings;$('learn-now').before(link);
|
|
@@ -1879,43 +1829,6 @@ $('report-data-open').onclick=()=>action(async()=>{
|
|
|
1879
1829
|
});
|
|
1880
1830
|
|
|
1881
1831
|
|
|
1882
|
-
// An explicit select lists every suggestion; the text input stays unrestricted.
|
|
1883
|
-
function emptyCatalogLabel(backend,catalog){const why=String(catalog?.diagnostic||'').trim()||'没有读取到模型列表';return `${runtimeName(backend)}:${why}(可直接输入模型 ID)`}
|
|
1884
|
-
function refreshInlineModelPickers(){
|
|
1885
|
-
const chatBackend=modelTargetBackend('chat-model');
|
|
1886
|
-
if(!modelCatalogs.has(chatBackend))fetchModelCatalog(false,chatBackend).then(()=>refreshInlineModelPickers()).catch(e=>{modelCatalogs.set(chatBackend,{backend:chatBackend,at:0,models:[],diagnostic:e.message||'模型目录读取失败'});refreshInlineModelPickers()});
|
|
1887
|
-
document.querySelectorAll('.model-picker-select').forEach(select=>{
|
|
1888
|
-
const input=select.parentElement.querySelector('input');select.replaceChildren(new Option('▾',''));
|
|
1889
|
-
const backend=modelTargetBackend(input?.id),catalog=modelCatalogs.get(backend),models=catalog?.models||[];
|
|
1890
|
-
for(const model of models)select.add(new Option(model.name+' · '+model.id,model.id));
|
|
1891
|
-
if(!models.length){const warn=new Option(emptyCatalogLabel(backend,catalog),'__empty__');warn.disabled=true;select.add(warn)}
|
|
1892
|
-
select.add(new Option('输入其他模型 ID…','__custom__'));
|
|
1893
|
-
select.add(new Option('搜索全部模型…','__browse__'));
|
|
1894
|
-
if(input?.dataset.roleModel)select.add(new Option('继承主链模型','__inherit__'));
|
|
1895
|
-
});
|
|
1896
|
-
}
|
|
1897
|
-
function setupModelPickers(root=document){
|
|
1898
|
-
for(const input of root.querySelectorAll('input[list="model-suggestions"]')){
|
|
1899
|
-
input.removeAttribute('list');
|
|
1900
|
-
const wrap=document.createElement('span');wrap.className='model-picker';input.before(wrap);wrap.append(input);
|
|
1901
|
-
const select=document.createElement('select');select.className='model-picker-select';select.setAttribute('aria-label',input.id==='chat-model'?'选择模型':'选择'+(input.getAttribute('aria-label')||'模型'));select.title='常用模型建议;也可直接在左侧输入其他模型 ID';
|
|
1902
|
-
select.add(new Option('▾',''));
|
|
1903
|
-
const models=modelCatalogs.get(modelTargetBackend(input?.id))?.models||[];
|
|
1904
|
-
for(const model of models)select.add(new Option(model.name+' · '+model.id,model.id));
|
|
1905
|
-
select.add(new Option('输入其他模型 ID…','__custom__'));
|
|
1906
|
-
select.add(new Option('搜索全部模型…','__browse__'));
|
|
1907
|
-
if(input.dataset.roleModel)select.add(new Option('继承主链模型','__inherit__'));
|
|
1908
|
-
select.onchange=()=>{
|
|
1909
|
-
const model=select.value;select.value='';if(input.disabled)return;
|
|
1910
|
-
if(model==='__custom__'){input.focus();input.select();return}
|
|
1911
|
-
if(model==='__browse__'){openModelPicker(input.id);return}
|
|
1912
|
-
if(!model)return;input.value=model==='__inherit__'?'':model;
|
|
1913
|
-
input.dispatchEvent(new Event('input',{bubbles:true}));input.dispatchEvent(new Event('change',{bubbles:true}));input.focus();
|
|
1914
|
-
};
|
|
1915
|
-
wrap.append(select);
|
|
1916
|
-
new MutationObserver(()=>{select.disabled=input.disabled}).observe(input,{attributes:true,attributeFilter:['disabled']});select.disabled=input.disabled;
|
|
1917
|
-
}
|
|
1918
|
-
}
|
|
1919
1832
|
setupModelPickers();
|
|
1920
1833
|
|
|
1921
1834
|
|
|
@@ -2002,7 +1915,7 @@ $('template-default').onclick=()=>action(()=>api('settings',{default_template_id
|
|
|
2002
1915
|
|
|
2003
1916
|
let savedProviderConfigurations=[];
|
|
2004
1917
|
function providerEndpoint(){return $('provider-engine').value==='briefloop-native'?'native':'opencode'}
|
|
2005
|
-
$('provider-engine').onchange=()=>{
|
|
1918
|
+
$('provider-engine').onchange=()=>{providerDirectory.invalidate();$('custom-api-key').value='';$('custom-provider').value='';$('provider-open').click()};
|
|
2006
1919
|
$('provider-open').onclick=async()=>{$('provider-result').textContent='';$('custom-supports-images').value='';providerCapabilities.reset(providerEndpoint());$('provider-use').hidden=true;settingsView('models');settingsModelTab('api');
|
|
2007
1920
|
try{const r=await api(providerEndpoint()+'/providers');savedProviderConfigurations=r.configurations||[];
|
|
2008
1921
|
$('custom-saved').innerHTML='<option value="">新建配置</option>'+savedProviderConfigurations.map((p,i)=>`<option value="${i}">${esc(p.name)} · ${esc(p.model)}</option>`).join('');
|
|
@@ -2025,30 +1938,25 @@ $('provider-close').onclick=()=>{$('custom-api-key').value='';if(welcomeFromProv
|
|
|
2025
1938
|
$('provider-dialog').addEventListener('close',()=>{$('custom-api-key').value=''});
|
|
2026
1939
|
$('provider-form').onsubmit=async event=>{
|
|
2027
1940
|
event.preventDefault();const button=$('provider-save');button.disabled=true;$('provider-result').textContent='正在保存到本机…';
|
|
2028
|
-
const
|
|
1941
|
+
const engine=providerEndpoint(),backend=engine==='native'?'briefloop-native':'opencode';
|
|
1942
|
+
const body={protocol:$('custom-protocol').value,name:$('custom-name').value.trim(),context_limit:$('custom-context-limit').value?Number($('custom-context-limit').value):null,output_limit:$('custom-output-limit').value?Number($('custom-output-limit').value):null,provider:$('custom-provider').value.trim(),base_url:$('custom-base-url').value.trim(),model:$('custom-model').value.trim(),api_key:$('custom-api-key').value,supports_images:$('custom-supports-images').value===''?null:$('custom-supports-images').value==='true',...providerCapabilities.read(engine)};
|
|
2029
1943
|
$('custom-api-key').value='';
|
|
2030
1944
|
try{
|
|
2031
|
-
const result=await api(
|
|
2032
|
-
|
|
1945
|
+
const result=await api(engine+'/provider',body);body.api_key='';
|
|
1946
|
+
modelDirectory.invalidate(backend);providerDirectory.invalidate(engine,body.provider);
|
|
1947
|
+
const refreshed=modelDirectory.fetchModelCatalog(true,backend);
|
|
1948
|
+
if(engine!==providerEndpoint()||body.provider!==$('custom-provider').value.trim()){await refreshed;return}
|
|
1949
|
+
$('provider-use').hidden=false;$('provider-use').dataset.model=result.model;$('provider-use').dataset.backend=backend;
|
|
2033
1950
|
$('provider-result').textContent='已保存 '+result.model+'。当前模型选择保持原值。';
|
|
2034
|
-
|
|
1951
|
+
await Promise.all([refreshed,loadProviderCatalog()]);
|
|
2035
1952
|
}catch(e){$('provider-result').textContent=e.message}finally{body.api_key='';button.disabled=false}
|
|
2036
1953
|
};
|
|
2037
1954
|
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
const provider=$('custom-provider').value.trim();if(!provider)return;
|
|
2041
|
-
const engine=providerEndpoint(),request=++providerCatalogRequest;$('provider-model-options').innerHTML='';
|
|
2042
|
-
$('provider-result').textContent='正在读取模型目录…';
|
|
2043
|
-
try{
|
|
2044
|
-
const r=await api(engine+'/provider-catalog',{provider});
|
|
2045
|
-
if(request!==providerCatalogRequest||engine!==providerEndpoint()||provider!==$('custom-provider').value.trim())return;
|
|
2046
|
-
$('provider-model-options').innerHTML=(r.models||[]).map(id=>`<option value="${esc(id)}"></option>`).join('');
|
|
2047
|
-
const labels={reachable:'目录已更新',auth_failed:'认证失败',insufficient_balance:'余额不足',forbidden:'无权访问',catalog_unavailable:'目录接口不可用,可手填模型',rate_limited:'请求限流',upstream_unavailable:'服务商暂不可用',connection_failed:'连接失败,可手填模型',invalid_catalog:'响应不是可识别的模型目录',http_error:'接口返回错误'};
|
|
2048
|
-
$('provider-result').textContent=(labels[r.status]||r.status)+' · '+(r.models||[]).length+' 个模型。未调用模型。';
|
|
2049
|
-
}catch(e){if(request===providerCatalogRequest)$('provider-result').textContent='目录读取失败:'+e.message+';可手动输入模型 ID。'}
|
|
2050
|
-
}
|
|
1955
|
+
const providerDirectory=createProviderCatalog({api,$,getEndpoint:providerEndpoint,modelDirectory});
|
|
1956
|
+
const loadProviderCatalog=()=>providerDirectory.load();
|
|
2051
1957
|
$('provider-catalog').onclick=loadProviderCatalog;
|
|
1958
|
+
$('custom-model').onfocus=loadProviderCatalog;
|
|
1959
|
+
$('custom-provider').oninput=()=>providerDirectory.invalidate();
|
|
2052
1960
|
$('provider-test-model').onclick=()=>action(async()=>{
|
|
2053
1961
|
$('provider-result').textContent='正在提交短工具调用…';
|
|
2054
1962
|
const r=providerEndpoint()==='native'?await api('runtime-test',{backend:'briefloop-native',model:$('custom-provider').value.trim()+'/'+$('custom-model').value.trim()}):await api('opencode/provider-test',{provider:$('custom-provider').value.trim(),model:$('custom-model').value.trim()});
|
|
@@ -2069,7 +1977,7 @@ $('custom-protocol').onchange=()=>{
|
|
|
2069
1977
|
};
|
|
2070
1978
|
$('custom-preset').onchange=()=>{
|
|
2071
1979
|
const presets={deepseek:['DeepSeek','deepseek','chat-completions','https://api.deepseek.com'],openai:['OpenAI','openai-custom','responses','https://api.openai.com/v1'],anthropic:['Anthropic','anthropic-custom','anthropic-messages','https://api.anthropic.com/v1']};
|
|
2072
|
-
const p=presets[$('custom-preset').value];if(!p)return;
|
|
1980
|
+
const p=presets[$('custom-preset').value];if(!p)return;providerDirectory.invalidate();
|
|
2073
1981
|
['custom-name','custom-provider','custom-protocol','custom-base-url'].forEach((id,i)=>$(id).value=p[i]);
|
|
2074
1982
|
};
|
|
2075
1983
|
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import {esc} from './dom.js';
|
|
2
|
+
|
|
3
|
+
const sourceNames={provider_api:'提供方 API',host:'宿主目录',host_catalog:'宿主目录',host_session:'宿主会话目录',native_config:'本机配置',local_settings:'本机配置',local_routes:'本机路由',host_default_only:'宿主未提供目录',unsupported:'不支持目录',builtin_hints:'静态建议(已停用)'};
|
|
4
|
+
const statusNames={ok:'目录已读取',reachable:'目录已读取',partial:'部分目录读取失败',error:'目录读取失败',failed:'目录读取失败',unsupported:'不支持列举模型',unavailable:'宿主未提供目录',configured:'已读取本机设置(非实时目录)',unconfigured:'尚未配置提供商',empty:'目录为空',auth_failed:'认证失败',insufficient_balance:'余额不足',forbidden:'无权访问',catalog_unavailable:'目录接口不可用',rate_limited:'请求限流',upstream_unavailable:'提供方暂不可用',connection_failed:'连接失败',invalid_catalog:'目录响应无法识别',http_error:'接口返回错误'};
|
|
5
|
+
const unavailable=new Set(['error','failed','unsupported','unconfigured','auth_failed','insufficient_balance','forbidden','catalog_unavailable','rate_limited','upstream_unavailable','connection_failed','invalid_catalog','http_error']);
|
|
6
|
+
export function catalogSource(source){return sourceNames[source]||source||'来源未说明'}
|
|
7
|
+
export function catalogStatus(catalog){
|
|
8
|
+
if(catalog?.loading)return '正在查询目录;上次结果尚未刷新';
|
|
9
|
+
if(!catalog)return '尚未读取目录';
|
|
10
|
+
return statusNames[catalog.status]||catalog.status||(catalog.models?.length?'目录已读取':'未读取到模型');
|
|
11
|
+
}
|
|
12
|
+
export function catalogDescription(catalog,name=''){
|
|
13
|
+
const parts=[name,catalogStatus(catalog)];
|
|
14
|
+
if(catalog){
|
|
15
|
+
parts.push(catalogSource(catalog.source));
|
|
16
|
+
if(catalog.models?.length)parts.push(`${catalog.models.length} 个模型`);
|
|
17
|
+
const checked=catalog.checked_at||catalog.refreshed_at;
|
|
18
|
+
if(checked)parts.push(`${catalog.loading?'上次查询':'查询时间'}:${checked}`);
|
|
19
|
+
if(catalog.diagnostic)parts.push(catalog.diagnostic);
|
|
20
|
+
if(catalog.note)parts.push(catalog.note);
|
|
21
|
+
const providers=(catalog.providers||[]).map(p=>`${p.name||p.provider||p.id}:${statusNames[p.status]||p.status||'状态未说明'}${p.diagnostic?'('+p.diagnostic+')':''}`);
|
|
22
|
+
if(providers.length)parts.push(providers.join(';'));
|
|
23
|
+
}
|
|
24
|
+
return parts.filter(Boolean).join(' · ')+'。可手动输入模型 ID;目录结果不代表模型调用成功。';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// One live source for every model selector. Settled results are only a display
|
|
28
|
+
// snapshot: every open/refresh queries the backend, while concurrent opens share
|
|
29
|
+
// the same request. A response never writes a selected model or selected backend.
|
|
30
|
+
export function createModelCatalog({api,$,getBackend,getChatBackend,runtimeName=id=>id,onCatalogChange=()=>{},document:doc=globalThis.document,Option:OptionClass=globalThis.Option,MutationObserver:Observer=globalThis.MutationObserver}){
|
|
31
|
+
const catalogs=new Map(),pending=new Map(),generations=new Map();
|
|
32
|
+
let pickerTarget=null,pickerRevision=0;
|
|
33
|
+
const targetBackend=target=>{
|
|
34
|
+
const backendInput=target&&$(target)?.dataset?.modelBackendInput;
|
|
35
|
+
return backendInput?$(backendInput)?.value||getBackend():target==='chat-model'?getChatBackend():getBackend();
|
|
36
|
+
};
|
|
37
|
+
function normalize(data,backend){
|
|
38
|
+
const disabled=data.source==='builtin_hints'||unavailable.has(data.status);
|
|
39
|
+
const models=disabled?[]:(data.models||[]).map(m=>typeof m==='string'?{id:m,name:m}:{...m,name:m.name||m.label||m.id}).filter(m=>m.id);
|
|
40
|
+
return {...data,backend,models,loading:false,diagnostic:data.diagnostic||data.error||'',providers:Array.isArray(data.providers)?data.providers:[]};
|
|
41
|
+
}
|
|
42
|
+
function changed(){
|
|
43
|
+
refreshInlineModelPickers();
|
|
44
|
+
const status=$('runtime-model-status');if(status)status.textContent=catalogDescription(catalogs.get(getBackend()),runtimeName(getBackend()));
|
|
45
|
+
const suggestions=$('model-suggestions');if(suggestions)suggestions.innerHTML=(catalogs.get(getBackend())?.models||[]).map(m=>`<option value="${esc(m.id)}" label="${esc(m.name)}"></option>`).join('');
|
|
46
|
+
if(pickerTarget&&$('model-picker')?.open)renderModelPicker();
|
|
47
|
+
onCatalogChange();
|
|
48
|
+
}
|
|
49
|
+
function fetchModelCatalog(_force=false,backend=getBackend()){
|
|
50
|
+
if(pending.has(backend))return pending.get(backend);
|
|
51
|
+
const generation=generations.get(backend)||0;
|
|
52
|
+
catalogs.set(backend,{...catalogs.get(backend),backend,models:catalogs.get(backend)?.models||[],loading:true});
|
|
53
|
+
const current=()=>generation===(generations.get(backend)||0)&&pending.get(backend)===request;
|
|
54
|
+
const request=Promise.resolve().then(()=>api('models?backend='+encodeURIComponent(backend)+'&refresh=1')).then(data=>{
|
|
55
|
+
if(!current())return [];
|
|
56
|
+
catalogs.set(backend,normalize(data,backend));return catalogs.get(backend).models;
|
|
57
|
+
}).catch(error=>{
|
|
58
|
+
if(!current())return [];
|
|
59
|
+
catalogs.set(backend,{backend,models:[],status:'error',diagnostic:error.message||'模型目录读取失败',loading:false});return [];
|
|
60
|
+
}).finally(()=>{if(current()){pending.delete(backend);changed()}});
|
|
61
|
+
pending.set(backend,request);changed();return request;
|
|
62
|
+
}
|
|
63
|
+
function invalidate(backend=getBackend()){
|
|
64
|
+
generations.set(backend,(generations.get(backend)||0)+1);
|
|
65
|
+
pending.delete(backend);catalogs.delete(backend);changed();
|
|
66
|
+
}
|
|
67
|
+
async function refreshModelSuggestions(){
|
|
68
|
+
await Promise.all([...new Set([getBackend(),getChatBackend()])].filter(Boolean).map(backend=>fetchModelCatalog(true,backend)));
|
|
69
|
+
}
|
|
70
|
+
async function openModelPicker(target){
|
|
71
|
+
pickerTarget=target;pickerRevision++;
|
|
72
|
+
$('model-picker-search').value='';$('model-picker').showModal();
|
|
73
|
+
return refreshCurrentModelPicker();
|
|
74
|
+
}
|
|
75
|
+
async function refreshCurrentModelPicker(){
|
|
76
|
+
const revision=++pickerRevision,backend=targetBackend(pickerTarget);
|
|
77
|
+
await fetchModelCatalog(true,backend);
|
|
78
|
+
if(revision===pickerRevision&&backend===targetBackend(pickerTarget))renderModelPicker();
|
|
79
|
+
}
|
|
80
|
+
function renderModelPicker(){
|
|
81
|
+
if(!pickerTarget)return;
|
|
82
|
+
const backend=targetBackend(pickerTarget),catalog=catalogs.get(backend),models=catalog?.models||[];
|
|
83
|
+
const q=$('model-picker-search').value.trim().toLowerCase();
|
|
84
|
+
const shown=models.filter(m=>[m.id,m.name,m.provider].some(value=>String(value||'').toLowerCase().includes(q)));
|
|
85
|
+
$('model-picker-status').textContent=catalogDescription(catalog,runtimeName(backend))+(q?` · 筛出 ${shown.length} 个`:'');
|
|
86
|
+
$('model-picker-refresh').disabled=!!catalog?.loading;
|
|
87
|
+
let lastProvider=null,html='';
|
|
88
|
+
for(const model of shown){
|
|
89
|
+
const provider=model.provider||runtimeName(backend);
|
|
90
|
+
if(provider!==lastProvider){lastProvider=provider;html+=`<h3 class="workspace-list-heading">${esc(provider)}</h3>`}
|
|
91
|
+
html+=`<button type="button" class="workspace-choice" data-model-pick="${esc(model.id)}"><span><strong>${esc(model.id)}</strong><small>${esc(model.name||'')}</small></span><em>选用</em></button>`;
|
|
92
|
+
}
|
|
93
|
+
const custom=$('model-picker-search').value.trim();
|
|
94
|
+
const customChoice=custom&&!/\s/.test(custom)&&!shown.some(m=>m.id===custom)?`<button type="button" class="workspace-choice" data-model-pick="${esc(custom)}"><span><strong>${esc(custom)}</strong><small>使用此模型 ID</small></span><em>选用</em></button>`:'';
|
|
95
|
+
$('model-picker-list').innerHTML=(html||`<p class="help">${esc(models.length?'没有匹配的模型。可输入完整模型 ID 后按回车选用。':catalogDescription(catalog,runtimeName(backend)))}</p>`)+customChoice;
|
|
96
|
+
$('model-picker-list').querySelectorAll('[data-model-pick]').forEach(button=>button.onclick=()=>pickModel(button.dataset.modelPick));
|
|
97
|
+
}
|
|
98
|
+
function pickModel(id){
|
|
99
|
+
const input=pickerTarget&&$(pickerTarget);$('model-picker').close();pickerRevision++;
|
|
100
|
+
if(!input)return;input.value=id;input.dispatchEvent(new Event('change',{bubbles:true}));
|
|
101
|
+
}
|
|
102
|
+
function refreshInlineModelPickers(){
|
|
103
|
+
doc.querySelectorAll('.model-picker-select').forEach(select=>{
|
|
104
|
+
const input=select.parentElement.querySelector('input'),backend=targetBackend(input?.id),catalog=catalogs.get(backend);
|
|
105
|
+
select.replaceChildren(new OptionClass('▾',''));
|
|
106
|
+
const status=new OptionClass(`${catalogSource(catalog?.source)} · ${catalogStatus(catalog)}${catalog?.diagnostic?':'+catalog.diagnostic:''}`,'__status__');status.disabled=true;select.add(status);
|
|
107
|
+
for(const model of catalog?.models||[])select.add(new OptionClass(model.name+' · '+model.id,model.id));
|
|
108
|
+
select.add(new OptionClass('输入其他模型 ID…','__custom__'));
|
|
109
|
+
select.add(new OptionClass('搜索 / 刷新模型目录…','__browse__'));
|
|
110
|
+
if(input?.dataset.roleModel)select.add(new OptionClass('继承主链模型','__inherit__'));
|
|
111
|
+
select.title=catalogDescription(catalog,runtimeName(backend));
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function setupModelPickers(root=doc){
|
|
115
|
+
for(const input of root.querySelectorAll('input[list="model-suggestions"]')){
|
|
116
|
+
input.removeAttribute('list');
|
|
117
|
+
const wrap=doc.createElement('span');wrap.className='model-picker';input.before(wrap);wrap.append(input);
|
|
118
|
+
const select=doc.createElement('select');select.className='model-picker-select';select.setAttribute('aria-label',input.id==='chat-model'?'选择模型':'选择'+(input.getAttribute('aria-label')||'模型'));select.dataset.testid='model-catalog-select';
|
|
119
|
+
// Pointer and keyboard opens refresh equally; a focus event alone does not
|
|
120
|
+
// double-query the following pointer event.
|
|
121
|
+
select.onpointerdown=()=>{if(!input.disabled)fetchModelCatalog(true,targetBackend(input.id))};
|
|
122
|
+
select.onkeydown=event=>{if(['ArrowDown','ArrowUp',' ','Enter','F4'].includes(event.key)&&!input.disabled)fetchModelCatalog(true,targetBackend(input.id))};
|
|
123
|
+
select.onchange=()=>{
|
|
124
|
+
const model=select.value;select.value='';if(input.disabled)return;
|
|
125
|
+
if(model==='__custom__'){input.focus();input.select();return}
|
|
126
|
+
if(model==='__browse__'){openModelPicker(input.id);return}
|
|
127
|
+
if(!model||model==='__status__')return;input.value=model==='__inherit__'?'':model;
|
|
128
|
+
input.dispatchEvent(new Event('input',{bubbles:true}));input.dispatchEvent(new Event('change',{bubbles:true}));input.focus();
|
|
129
|
+
};
|
|
130
|
+
wrap.append(select);
|
|
131
|
+
if(Observer)new Observer(()=>{select.disabled=input.disabled}).observe(input,{attributes:true,attributeFilter:['disabled']});select.disabled=input.disabled;
|
|
132
|
+
}
|
|
133
|
+
refreshInlineModelPickers();
|
|
134
|
+
}
|
|
135
|
+
return {catalogs,invalidate,fetchModelCatalog,refreshModelSuggestions,openModelPicker,refreshCurrentModelPicker,renderModelPicker,pickModel,refreshInlineModelPickers,setupModelPickers,targetBackend};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// The Native configuration form consumes the same provider response as the
|
|
139
|
+
// execution selectors. OpenCode's configuration probe remains a direct provider
|
|
140
|
+
// API check, distinct from OpenCode's execution-host catalogue.
|
|
141
|
+
export function createProviderCatalog({api,$,getEndpoint,modelDirectory}){
|
|
142
|
+
const pending=new Map(),generations=new Map();let revision=0;
|
|
143
|
+
function invalidate(engine,provider){
|
|
144
|
+
if(engine&&provider){const key=JSON.stringify([engine,provider]);generations.set(key,(generations.get(key)||0)+1);pending.delete(key)}
|
|
145
|
+
if(!engine||(engine===getEndpoint()&&provider===$('custom-provider').value.trim())){revision++;$('provider-model-options').innerHTML=''}
|
|
146
|
+
}
|
|
147
|
+
async function load(){
|
|
148
|
+
const provider=$('custom-provider').value.trim(),engine=getEndpoint(),request=++revision;
|
|
149
|
+
$('provider-model-options').innerHTML='';
|
|
150
|
+
if(!provider){$('provider-result').textContent='先保存提供商配置,再读取目录;也可手动输入模型 ID。';return}
|
|
151
|
+
$('provider-result').textContent='正在查询提供方模型目录;此操作不调用模型。';
|
|
152
|
+
const key=JSON.stringify([engine,provider]),generation=generations.get(key)||0;
|
|
153
|
+
if(!pending.has(key)){
|
|
154
|
+
const query=engine==='native'?modelDirectory.fetchModelCatalog(true,'briefloop-native').then(()=>{
|
|
155
|
+
const catalog=modelDirectory.catalogs.get('briefloop-native');
|
|
156
|
+
const result=catalog?.providers?.find(p=>(p.provider||p.id)===provider);
|
|
157
|
+
return result?{...result,models:(result.models||[]).map(id=>typeof id==='string'?{id,name:id}:id)}:
|
|
158
|
+
{...catalog,models:[],diagnostic:catalog?.diagnostic||'此提供商未返回模型目录;请先保存配置。'};
|
|
159
|
+
}):Promise.resolve().then(()=>api('opencode/provider-catalog',{provider})).then(result=>({...result,source:'provider_api',models:(result.models||[]).map(id=>typeof id==='string'?{id,name:id}:id)}));
|
|
160
|
+
const active=query.finally(()=>{if(pending.get(key)===active)pending.delete(key)});
|
|
161
|
+
pending.set(key,active);
|
|
162
|
+
}
|
|
163
|
+
let result;
|
|
164
|
+
try{result=await pending.get(key)}catch(error){result={models:[],status:'error',source:'provider_api',diagnostic:error.message}}
|
|
165
|
+
if(request!==revision||generation!==(generations.get(key)||0)||engine!==getEndpoint()||provider!==$('custom-provider').value.trim())return;
|
|
166
|
+
const models=unavailable.has(result.status)?[]:result.models||[];
|
|
167
|
+
$('provider-model-options').innerHTML=models.map(model=>`<option value="${esc(model.id)}"></option>`).join('');
|
|
168
|
+
$('provider-result').textContent=catalogDescription({...result,models},provider);
|
|
169
|
+
}
|
|
170
|
+
return {load,invalidate};
|
|
171
|
+
}
|