briefloop 0.28.2__tar.gz → 0.28.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {briefloop-0.28.2 → briefloop-0.28.3}/.gitattributes +1 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/CHANGELOG.md +9 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/PKG-INFO +1 -1
- briefloop-0.28.3/VERSION +1 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/desktop/electron/package-lock.json +2 -2
- {briefloop-0.28.2 → briefloop-0.28.3}/desktop/electron/package.json +1 -1
- briefloop-0.28.3/docs/release-0.28.3.md +13 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/app-updates.js +45 -11
- {briefloop-0.28.2 → briefloop-0.28.3}/pyproject.toml +1 -1
- {briefloop-0.28.2 → briefloop-0.28.3}/scripts/build_frontend.mjs +9 -0
- briefloop-0.28.3/src/briefloop/__init__.py +1 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/server.py +3 -0
- briefloop-0.28.3/src/briefloop/software_release_notes.py +56 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/software_version.py +2 -1
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/app.js +1 -1
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/index.html +7 -4
- briefloop-0.28.3/src/briefloop/static/native-engine-image-worker.mjs +8 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/native-engine-licenses.txt +18 -18
- briefloop-0.28.3/src/briefloop/static/native-engine-photon.wasm +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/native-engine.mjs +2240 -1772
- briefloop-0.28.3/src/briefloop/static/release-notes.json +4 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/style.css +4 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop.egg-info/PKG-INFO +1 -1
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop.egg-info/SOURCES.txt +7 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/check_distribution.py +3 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_app_updates.mjs +35 -5
- briefloop-0.28.3/tests/test_periodic_preflight.py +98 -0
- briefloop-0.28.3/tests/test_software_release_notes.py +79 -0
- briefloop-0.28.2/VERSION +0 -1
- briefloop-0.28.2/src/briefloop/__init__.py +0 -1
- {briefloop-0.28.2 → briefloop-0.28.3}/CONTRIBUTING.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/KNOWN_ISSUES.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/MANIFEST.in +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/SECURITY.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/THIRD_PARTY_NOTICES.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/bootstrap.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/architecture.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/compose/spec/home-v2.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/design-v3.1-validation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/dmg-density-validation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/draft-first.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/jev-precheck.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/native-integration.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/quality-reading-context.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.26.0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.26.1.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.26.2.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.26.3.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.26.4.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.27.0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.28.0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.28.1.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/release-0.28.2.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/report-length.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/report-time-window.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/report-version-information.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/research-handoff.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/revision-learning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/sqlite-benchmark.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/technical-report-0.21.0/evidence-index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/technical-report-0.21.0/technical-report.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/windows.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs/writer-input.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//344/272/247/345/223/201/345/256/232/344/275/215/344/270/216/351/252/214/350/257/201.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//344/274/232/350/256/256/347/272/252/350/246/201.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//345/206/205/347/275/256/345/274/225/346/223/216.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//345/215/207/347/272/247/350/257/264/346/230/216.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//345/233/276/350/241/250/344/270/216Excel.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//345/256/232/346/227/266/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//346/212/245/345/221/212/347/274/226/350/276/221/344/270/216/346/250/241/346/235/277.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//346/241/214/351/235/242/345/256/211/350/243/205/344/270/216/346/233/264/346/226/260.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/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.28.2 → briefloop-0.28.3}/docs//347/211/210/346/234/254/344/270/200/350/207/264/346/200/247/346/243/200/346/237/245.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//350/241/214/344/270/232/346/212/245/345/221/212.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//350/257/201/345/210/270/347/240/224/347/251/266.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//350/257/201/346/215/256/344/270/216/347/273/223/350/256/272/350/277/275/346/272/257.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//350/277/220/350/241/214/346/227/266/351/200/211/346/213/251/344/270/216/346/243/200/346/265/213.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/docs//351/252/214/346/224/266/350/256/260/345/275/225.md" +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/examples/internal-weekly-report/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/examples/internal-weekly-report/report.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/examples/internal-weekly-report/source.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/examples/meeting-minutes/transcript.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/examples/stock-research/earnings-event.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/anchored-popover.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/api.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/app.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/assessment-checks.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/assessment-panel.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/citation-evidence.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/citation-sources.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/clipboard.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/composer-options.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/connectors.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/delivery.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/dom.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/excel-export.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/fact-check-availability.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/fact-check-grants.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/feedback-list.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/jev-checks.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/job-presentation.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/learning-retry.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/length-controls.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/market-convention.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/market-decorations.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/mcp-selection.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/model-catalog.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/native-requests.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/notifications.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/office-tools.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/polling.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/previous-report.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/provider-capabilities.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/quick-report.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/readers.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/reasoning-controls.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/report-browsing.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/report-export.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/report-form-defaults.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/report-language.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/report-panels.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/report-sources.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/report-version-info.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/research-process.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/review-controls.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/review-coverage.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/review-results.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/review-status.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/revision-questions.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/rich-document.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/runtime-cards.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/runtime-model-picker.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/runtime-permission-modes.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/runtime-permission-panel.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/runtime-picker-bindings.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/schedules.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/session-budget.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/skill-verification.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/source-library-search.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/source-upload.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/task-progress.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/template-output.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/templates.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/time.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/uploads.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/version-diff.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/frontend/welcome.js +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/package-lock.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/package.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/probes/mcp_m0/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/probes/mcp_m0/probe.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/probes/mcp_m0/requirements.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/probes/mcp_m0/server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/bridge.test.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/build.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/catalog.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/claude.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/main.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/permission-catalog.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/pi.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/reasoning.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/user-input.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/windows-command.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/runtime-bridge/zcode.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/scripts/build_frontend_licenses.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/scripts/check_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/scripts/sync_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/scripts/test_frontend.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/setup.cfg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/__main__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/_entrypoint.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/agent_commands.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/agent_prompts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/analyst.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/analyst_drafts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/app_server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/audit_bundle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/backends/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/backends/opencode_server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/backends/opencode_v2.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/bocha.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/bridge_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/chat_dispatch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/chat_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/chat_store.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/chat_tools.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/codex_diagnostics.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/company_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/comparison_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/conflicts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/MATERIALS.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/config.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/grants.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/materials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/receipts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/runtime_tools.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/service.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/stdio_supervisor.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/task_client.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/tasks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/transport.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/connectors/windows_acl.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/default_fonts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/deliverable_spec.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/delivery_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/demo.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/document_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/document_model.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/document_workflows.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/docx_text.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/draft_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/draft_completion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/duckduckgo.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/evaluation_reading.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/evidence_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/execution_records.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/execution_timing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/export_jobs.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/export_labeling.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/exports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/external_client.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/external_mcp.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/external_requests.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/fact_check.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/fast_mode.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/fast_reports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/fast_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/feedback_view.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/figure_support.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/figure_text.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/figures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/finding_anchors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/host_bins.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/industry_data.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/industry_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/interactive_runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/jev.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/jev_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/learning_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/length.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/market_convention.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/media.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/model_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/models.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/native_engine.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/native_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/native_orchestrator.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/native_providers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/native_roles.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/notifications.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/office_cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/ooxml_order.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/opencode_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/opencode_version.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/packet_views.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/parent_watch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/plain_isolation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/platform_support.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/previous_report.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/process_host.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/progress.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/projections.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/core.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.analyst.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.evaluator.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.orchestrator.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/provider_catalog.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/readers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/reconciliation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/release.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/report_browsing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/report_profiles.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/report_time.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/report_tools.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/research_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/research_handoff.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/research_plan.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/review_capability.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/review_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/revision_edits.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/revision_metadata.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/revision_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/rpc_writer.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/runtime_bridge.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/runtime_permissions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/runtime_reasoning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/schedules.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/scout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/scout_coverage.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/scout_evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/scout_tools.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/search_credentials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/search_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/skill_verification.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/skills.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/source_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/source_extraction.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/source_ingestion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/source_library_search.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/source_search.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/source_updates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/sources.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/frontend-licenses.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/native-engine-models.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-aider.png +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-amr.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-antigravity.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-bridge.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-briefloop.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-claude.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-codebuddy.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-codex.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-copilot.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-deepseek.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-devin.png +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-grok-build.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-hermes.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-kilo.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-kimi.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-kiro.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-mimo.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-opencode.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-pi.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-qoder.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-qwen.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-reasoning.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-reasonix.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-trae-cli.png +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/runtime-vibe.svg +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/static/tokens.css +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/store.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/task_labels.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/task_notify.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/task_progress.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/tavily.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/template_conversion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/templates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/user_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/version_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/websearch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/windows_process.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/word_import.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workbook_figures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workspace_profile.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/workspaces.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/writer_assembly.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/writer_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/writing_guidance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/xlsx_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop/zhipu.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop.egg-info/dependency_links.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop.egg-info/entry_points.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop.egg-info/requires.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/briefloop.egg-info/top_level.txt +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/__main__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/_licenses/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/_licenses/NOTICE.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/alfworld/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/alfworld/act.sh +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/alfworld/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/alfworld/step.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/benchmarks/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/benchmarks/alfworld.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/benchmarks/livemath.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/benchmarks/sealqa.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/codex_identity.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/engine.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/feedback_loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/isolated/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/isolated/audit.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/isolated/runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/isolated/tools_server.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/jsonl.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/k4_lock.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/livemath/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/livemath/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/livemath/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/native_agents.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/dataset.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/fetch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/retrieval.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/reward.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/scoring.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/officeqa/wiki_agents.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/paper_alignment/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/paper_alignment/contracts.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/paper_alignment/evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/product.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/product_cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/product_install.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/product_views.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/paper_alignment/README.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/roles/executor.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/product/roles/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/snapshot.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/results.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/score_rules.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/scorer_trust.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/sealqa/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/sealqa/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/sealqa/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/settings.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/skill_proposer.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/spreadsheet/__init__.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/spreadsheet/loop.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/spreadsheet/rollout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/spreadsheet/study.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/tool_audit.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/wiki.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/src/wikiskill/wiki_maintainer.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/start.ps1 +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/start.sh +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_anchored_popover.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_assessment_checks.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_brand_colors.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_chat_attachments.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_chat_commands.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_chat_drafts.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_chat_layout.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_chat_polling.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_checkout_eol.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_citation_clipboard.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_citation_edit.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_citation_evidence.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_citation_sources.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_clipboard_fallback.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_excel_export.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_export_menu.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_fact_check_availability.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_fact_check_grants.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_fast_mode.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_feedback_list.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_home_v2.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_job_presentation.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_learning_authorization.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_learning_retry.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_length_controls.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_licenses.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_live_status.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_markdown_import.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_market_convention.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_mcp_selection.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_model_catalog_refresh.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_model_label.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_model_selection.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_native_requests.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_native_runtime.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_office_tools.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_open_brief_status.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_pending_report.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_polling.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_previous_report.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_progress_race.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_provider_capabilities.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_quick_report.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_readers.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_reasoning_controls.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_release_controls.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_release_navigation.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_browsing.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_chat_drawer.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_export.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_form_defaults.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_language.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_load.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_outline.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_panels.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_report_version_info.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_research_process.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_review_capability.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_review_coverage.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_review_status.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_revision_questions.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_runtime_discovery.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_runtime_feedback.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_runtime_model_picker.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_runtime_permission_panel.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_save_barrier.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_settings_workspaces.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_setup_state.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_skill_verification.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_source_library.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_source_search.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_source_upload.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_startup_recovery.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_task_progress.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_template_groups.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_template_output.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_update_notifications.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_upload_limits.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_version_bodies.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_version_diff.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_welcome_gate.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_workspace_proposal.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/frontend_writing_preferences.mjs +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_agent_backend.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_agent_commands.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_agent_session_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_analyst_draft_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_assessment_admission_recovery.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_assessment_followup.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_background_no_question.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_brand_assets.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_bridge_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_builtin_templates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_chat_dispatch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_chat_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_chat_model_selection.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_cli_doctor.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_codex_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_connection_test_history.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_connector_authorization.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_connector_empty_catalog.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_connector_materials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_connector_tasks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_connectors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_core.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_cross_module_regressions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_delivery_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_delivery_consumers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_demo.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_desktop_lifecycle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_document_workflows.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_draft_completion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_draft_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_english_reports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_entrypoint.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_evidence_parse_failures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_execution_records.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_execution_timing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_export_admission.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_export_labeling.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_export_layout_swap.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_export_xlsx.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_external_mcp.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_external_requests.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fact_check_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fact_check_orchestration.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fact_check_phase.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fact_check_review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fact_check_switch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fact_status_tool.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fast_evidence.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fast_mode.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fast_qualifier_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fast_reports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_fast_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_feedback_view.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_figure_exports.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_figure_flow.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_figure_text.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_figures.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_finding_anchors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_generation_schema_guidance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_host_bins.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_human_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_industry_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_industry_flow.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_industry_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_interactive_runtime.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_jev_checks.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_learning_authorization.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_learning_integrity.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_length.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_length_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_markdown_download.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_market_convention.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_media_sources.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_model_catalog_defaults.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_monthly_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_multimodal_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_multimodal_http.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_analyst.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_evaluator.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_orchestrator.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_provider_storage.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_providers.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_research_closeout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_review_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_native_scout.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_notifications.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_npm_native_shim.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_numeric_occurrence_review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_office_cli.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_office_source_structure.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_office_surfaces.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_ooxml_order.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_harness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_prompt_versions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_provider.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_questions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_reasoning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_review_version.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_search_prompt.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_server_stdin.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_v2.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_opencode_version_probe.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_plain_isolation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_posix_process_tree.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_pr593_roundtrip.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_previous_report.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_product_summary_consistency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_progress.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_progress_pipeline.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_provider_catalog.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_public_research.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_quality_reading_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_reader_contract.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_reader_profiles.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_reader_source_export.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_reader_workflow.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_reconciliation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_release.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_release_identity.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_report_browsing.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_report_concurrency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_report_deletion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_report_length_feedback.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_report_path_regressions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_report_time.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_research_budget.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_research_gap_updates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_research_handoff.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_research_plan.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_research_response_admission.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_resume_in_place.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_capability.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_finding_consistency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_learning.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_modes.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_packet_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_packet_utf8.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_public_metadata.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_schema_drift.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_snapshot.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_review_visual_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_revision_citations.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_revision_edits.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_revision_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_rich_document.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_role_models.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_bridge.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_bridge_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_concurrency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_json_bom.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_liveness.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_names.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_permissions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_propagation.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_retry.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_runtime_settlement.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_schedules.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_scout_coverage.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_scout_experiment.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_search_credentials.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_search_policy.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_semantic_experiment.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_semantic_governance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_server_boundary.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_settings_transactions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_skill_verification.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_software_version.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_source_ingestion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_source_library_search.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_source_recovery_regressions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_source_updates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_sources_provenance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_store_sqlite_benchmark.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_store_wal.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_table_citation_advisory.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_task_labels.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_task_notify.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_task_progress.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_tavily.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_template_conversion.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_template_conversion_http.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_template_saved_state.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_templates.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_user_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_user_source_refresh.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_version_consistency.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_version_execution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_websearch.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_websearch_singleflight.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_wikiskill_engine_windows.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_antigravity_permissions.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_connector_acl.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_distribution.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_mcp_supervisor.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_platform.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_release_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_review_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_runtime_bundle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_windows_xlsx_paths.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_word_import.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_word_source_locators.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_word_toc.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_worker_idle.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_workspace_action_errors.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_workspace_profile.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_workspaces.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_writer_assembly.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_writer_cli_guidance.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_writer_context.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_writer_input.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_xlsx_officecli_integration.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/tests/test_xlsx_preview.py +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/LICENSE +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/NOTICE.md +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/acp/constants.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/acp/json.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/acp/models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/acp/rpc.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/acp/session-params.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/acp/types.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/byok-reference/byok-opencode.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/byok-reference/provider-models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/core/index.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/core/json-line-stream.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/runtime-models/codex-models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/runtime-models/mmd-routes.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/runtime-models/models.ts +0 -0
- {briefloop-0.28.2 → briefloop-0.28.3}/third_party/open-design/runtime-models/opencode-models.ts +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
/src/wikiskill/** text=auto eol=lf
|
|
5
5
|
|
|
6
6
|
# Build checks compare these generated artifacts byte-for-byte on every platform.
|
|
7
|
+
/native-engine/models.json text eol=lf
|
|
7
8
|
/src/briefloop/static/app.js text eol=lf
|
|
8
9
|
/src/briefloop/static/frontend-licenses.txt text eol=lf
|
|
9
10
|
/frontend/ui-system.css text eol=lf
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.28.3 — 2026-10-02
|
|
4
|
+
|
|
5
|
+
- 内置 BriefLoop Agent 升级至 Pi 1.0.0,适配压缩指令的新 transcript 接口,保留角色工具隔离及失败后的会话恢复。
|
|
6
|
+
- 随包提供图像解码 worker 与 WASM,使报告图片在独立 wheel 和桌面后端中可实际解码、缩放和发送;增加旧版会话迁移与 Mac/Windows 引擎回归。
|
|
7
|
+
- 修复极窄图片缩放被遗漏的问题,关闭长子任务期间未计入用量的默认缓存预热,并更新内置依赖以消除已知漏洞版本。
|
|
8
|
+
- 版本与更新设置直接显示当前版本及可用更新的改动说明,保留检查、下载和安装状态;当前版本说明随包提供,离线也能查看。
|
|
9
|
+
- 增加定期报告实验的离线预检,核对时间范围、材料哈希及输入与参考答案隔离;预检本身不代表报告质量提升。
|
|
10
|
+
- 修复桌面正常停止后端时 Python 等待 stdin 导致异常退出的问题;忙任务拒绝停止时保留服务与管道。
|
|
11
|
+
|
|
3
12
|
## 0.28.2 — 2026-10-01
|
|
4
13
|
|
|
5
14
|
- 延续设计 v3.1 的品牌、引用与来源卡、过程折叠和 Word / Excel 涨跌惯例与 AI 来源标识。
|
briefloop-0.28.3/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.28.3
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "briefloop-desktop",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.3",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "briefloop-desktop",
|
|
9
|
-
"version": "0.28.
|
|
9
|
+
"version": "0.28.3",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# BriefLoop 0.28.3
|
|
2
|
+
|
|
3
|
+
本次发行包含 Pi 1.0.0 升级与兼容修复 #888、版本说明页 #887、定期报告实验离线预检 #873。下一期报告 #870 及评分实验 #855 / #857 保留在各自分支,尚未通过的验收不作为本版质量承诺。
|
|
4
|
+
|
|
5
|
+
原生引擎保留角色工具隔离和旧会话恢复,适配压缩指令的 transcript 接口,随包提供图像 worker 与 Photon WASM。修复 5000×1 / 1×5000 图片缩放被遗漏的问题,关闭长子任务期间默认缓存预热,保证请求与用量事件一致。原生引擎使用固定 pnpm 锁及修复后的 brace-expansion;前端和桌面继续使用 npm。
|
|
6
|
+
|
|
7
|
+
三个 PR 的组合已通过 1283 项 Python 测试(65 跳过)、246 项前端测试(3 跳过)、构建与 design:check,47 项原生引擎回归和依赖审计零告警。版本说明页的 1440px 和 768px 实际浏览器截图已核验;检查更新可用,当前说明与 wheel / sdist 中的资源一致。Pi 升级最终提交的 Linux、macOS、Windows 六项 CI 全通过。
|
|
8
|
+
|
|
9
|
+
用户已授权合并、GitHub Release、PyPI、官网及可访问的本机安装更新,保留旧版回退。发行从干净冻结提交构建,共用后端 wheel 仅构建一次,所有渠道复用相同字节。发行工件哈希、平台验收和发布后渠道状态随本版验证记录披露。
|
|
10
|
+
|
|
11
|
+
发行验收另复现并修复了桌面正常停止后端的 stdin 交接问题:原行为使 Python 以 SIGABRT 退出;收到正式停止接口的成功回执后关闭 owner 管道,实际 Python / Electron 组合恢复正常退出。忙任务拒绝停止时保留管道及服务。安装包验收脚本直接加载实际 ASAR 模块,检查随包环境、Pi 1.0、版本说明、正常退出,以及两种涨跌惯例和 agent / user 合成稿的八份 Word / Excel 产物;不调用模型、不替代原生窗口或办公软件操作验收。
|
|
12
|
+
|
|
13
|
+
延续现有未签名桌面发行路径,不声称 Developer ID 签名或公证。缺少的原生窗口、Finder 或办公软件操作证据必须标为未核验,不能以 CI、源码版本或旧版结果替代。AI 来源标识不代表完整法律合规保证;离线预检不证明模型输出质量提升。
|
|
@@ -2,18 +2,51 @@
|
|
|
2
2
|
import {$} from './dom.js';
|
|
3
3
|
export function appUpdatesUI({api,notice}){
|
|
4
4
|
let appUpdateState=null,softwareInfo=null,appUpdatePending=false,appUpdateLastAction='check';
|
|
5
|
+
const releaseNotes=new Map();
|
|
6
|
+
function showNotes(id,title,value){
|
|
7
|
+
$(`${id}-title`).textContent=title;
|
|
8
|
+
$(id).textContent=value?.state==='loaded'?value.notes:value?.state==='empty'?'该版本未提供发布说明。':value?.message||'正在读取发布说明…';
|
|
9
|
+
}
|
|
10
|
+
function renderNotes(value){
|
|
11
|
+
const current=softwareInfo?.version;
|
|
12
|
+
const installed=value?.currentAppVersion||current;
|
|
13
|
+
if(current)showNotes('app-update-current-notes',`${current===installed?'当前版本':'当前后端'} v${current} 的改动`,releaseNotes.get(current)||softwareInfo.release_notes);
|
|
14
|
+
const latest=value?.releaseVersion;
|
|
15
|
+
// A failed check may retain the old download target; do not call it latest.
|
|
16
|
+
const known=latest&&value?.state!=='checking'&&!(value?.state==='error'&&(value.error?.operation||appUpdateLastAction)==='check');
|
|
17
|
+
$('app-update-latest-version').textContent=known?`最近检查的发布版本 v${latest}`:value?.state==='checking'?'正在检查可用版本…':value?.state==='error'?'可用版本检查未完成':'尚未检查可用版本';
|
|
18
|
+
$('app-update-notes-box').hidden=!known||latest===current;
|
|
19
|
+
if(known&&latest!==current)showNotes('app-update-notes',`${['available','downloading','downloaded'].includes(value.state)?'可用更新':'发布版本'} v${latest} 的改动`,value.source==='local-test'?{state:value.notes?'loaded':'empty',notes:value.notes}:releaseNotes.get(latest));
|
|
20
|
+
}
|
|
21
|
+
async function loadNotes(version,force=false){
|
|
22
|
+
if(!version||releaseNotes.get(version)?.state==='loading'||(!force&&releaseNotes.has(version)))return;
|
|
23
|
+
releaseNotes.set(version,{state:'loading'});renderNotes(appUpdateState);
|
|
24
|
+
try{
|
|
25
|
+
const result=await api('software-release-notes',{version});
|
|
26
|
+
releaseNotes.set(version,result?.version===version?result:{state:'error',message:'发布说明版本不匹配,请重新检查。'});
|
|
27
|
+
}catch{releaseNotes.set(version,{state:'error',message:'无法获取该版本的发布说明,请检查网络后重试。'})}
|
|
28
|
+
renderNotes(appUpdateState);
|
|
29
|
+
}
|
|
30
|
+
function refreshNotes(force=false){
|
|
31
|
+
const current=softwareInfo?.version;
|
|
32
|
+
if(current&&!softwareInfo.release_notes)void loadNotes(current,force);
|
|
33
|
+
const target=appUpdateState?.releaseVersion;
|
|
34
|
+
if(target&&target!==current&&appUpdateState.source!=='local-test')void loadNotes(target,force);
|
|
35
|
+
}
|
|
5
36
|
function renderAppUpdates(value=appUpdateState){
|
|
6
37
|
const box=$('settings-view-updates');if(!box)return;
|
|
7
38
|
const desktop=typeof window.briefloopDesktop?.updateStatus==='function';
|
|
8
39
|
$('app-update-controls').hidden=false;
|
|
9
|
-
$('app-update-version').textContent=
|
|
40
|
+
$('app-update-version').textContent=desktop?`当前 App v${value?.currentAppVersion||'读取中'}`:softwareInfo?`当前版本 v${softwareInfo.version}`:'正在读取实际运行版本…';
|
|
10
41
|
const installations={desktop:'桌面管理的后端 · App 与 CLI 共用',source:'开发源码',pip:'Python 包安装',pipx:'pipx 安装',uv:'uv 工具安装'};
|
|
11
|
-
$('app-update-installation').textContent=softwareInfo
|
|
42
|
+
$('app-update-installation').textContent=softwareInfo?`${installations[softwareInfo.installation]||'独立安装'} · 后端 v${softwareInfo.version}${softwareInfo.build?` · 构建 ${softwareInfo.build}`:''}`:'';
|
|
12
43
|
$('app-update-command').hidden=!softwareInfo?.update_command;
|
|
13
44
|
$('app-update-command').textContent=softwareInfo?.update_command||'';
|
|
14
|
-
$('app-update-source').textContent=value?.source==='local-test'?'本地测试更新源 · 仅验证流程,不代表官方发布':desktop?'官方稳定来源:Stahl-G/briefloop · GitHub Releases':'
|
|
45
|
+
$('app-update-source').textContent=value?.source==='local-test'?'本地测试更新源 · 仅验证流程,不代表官方发布':desktop?'官方稳定来源:Stahl-G/briefloop · GitHub Releases':'版本检查:PyPI · 发布说明:GitHub Releases';
|
|
46
|
+
$('app-update-test-source').hidden=value?.source!=='local-test';
|
|
15
47
|
const reinstall=value?.source==='local-test'&&value?.reinstall===true;
|
|
16
|
-
$('app-update-guidance').textContent=!desktop?(softwareInfo?.guidance||'正在读取安装来源…'):value?.installMode==='zip'?'
|
|
48
|
+
$('app-update-guidance').textContent=!desktop?(softwareInfo?.guidance||'正在读取安装来源…'):value?.installMode==='zip'?'安装前会保存编辑并处理忙任务。退出后,在 Finder 中将新版 App 拖入“安装位置”并替换,再打开 BriefLoop;工作区保留。':value?.installMode==='dmg'?`安装前会保存编辑并处理忙任务,再退出并打开 DMG;请在 Finder 中${reinstall?'重新安装当前版本':'手动安装新版本'}。`:'安装前会保存编辑并处理忙任务,再退出并交给安装器更新;工作区保留。';
|
|
49
|
+
$('app-update-guidance').hidden=desktop&&!['available','downloading','downloaded','error'].includes(value?.state);
|
|
17
50
|
const errorOperation=value?.error?.operation||(value?.error?.code==='open_failed'?'install':appUpdateLastAction);
|
|
18
51
|
const errorLabel={check:'更新检查失败(当前安装不受影响)',download:'更新包下载未完成',install:'更新安装未完成'}[errorOperation]||'更新检查失败(当前安装不受影响)';
|
|
19
52
|
const labels={idle:'尚未检查更新',checking:'正在检查更新…',available:'发现可用更新',current:'当前 App 无需更新',downloading:'正在下载更新…',downloaded:'下载完成,等待安装',error:errorLabel};
|
|
@@ -31,8 +64,9 @@ export function appUpdatesUI({api,notice}){
|
|
|
31
64
|
$('app-update-progress-box').hidden=!progress;
|
|
32
65
|
$('app-update-progress').value=progress?.percent||0;
|
|
33
66
|
$('app-update-progress-text').textContent=progress?`${Math.round(progress.percent||0)}% · ${(Math.max(0,progress.transferred||0)/1048576).toFixed(1)} / ${(Math.max(0,progress.total||0)/1048576).toFixed(1)} MiB`:'';
|
|
34
|
-
|
|
35
|
-
|
|
67
|
+
$('app-update-progress-detail').textContent='';
|
|
68
|
+
if(progress?.mode==='differential')$('app-update-progress-detail').textContent=`增量下载,复用 ${(Math.max(0,progress.reused||0)/1048576).toFixed(1)} MiB`;
|
|
69
|
+
else if(progress?.mode==='full')$('app-update-progress-detail').textContent=({
|
|
36
70
|
no_baseline:'无有效基准缓存,完整下载并建立缓存',
|
|
37
71
|
little_reuse:'本次可复用内容较少,完整下载',
|
|
38
72
|
range_unavailable:'下载服务不支持分段传输,完整下载',
|
|
@@ -41,13 +75,13 @@ export function appUpdatesUI({api,notice}){
|
|
|
41
75
|
differential_unavailable:'增量不可用,已回退完整下载',
|
|
42
76
|
blockmap_unavailable:'此版本无可用增量信息,完整下载'
|
|
43
77
|
}[progress.fallback]||'完整下载');
|
|
44
|
-
|
|
78
|
+
renderNotes(value);
|
|
45
79
|
}
|
|
46
80
|
async function refreshAppUpdates(){
|
|
47
81
|
renderAppUpdates();
|
|
48
82
|
try{softwareInfo=await api('software-version');
|
|
49
83
|
if(typeof window.briefloopDesktop?.updateStatus==='function')appUpdateState=await window.briefloopDesktop.updateStatus();
|
|
50
|
-
renderAppUpdates()}
|
|
84
|
+
renderAppUpdates();refreshNotes()}
|
|
51
85
|
catch{notice('无法读取 App 更新状态,请重新打开设置。',true)}
|
|
52
86
|
}
|
|
53
87
|
async function runAppUpdate(command){
|
|
@@ -58,7 +92,7 @@ export function appUpdatesUI({api,notice}){
|
|
|
58
92
|
appUpdatePending=true;appUpdateState={state:'checking'};renderAppUpdates();
|
|
59
93
|
try{appUpdateState=await api('software-update-check',{});softwareInfo=appUpdateState}
|
|
60
94
|
catch(error){appUpdateState={state:'error',retryable:true,error:{message:error.message||'版本检查未完成'}}}
|
|
61
|
-
finally{appUpdatePending=false;renderAppUpdates()}
|
|
95
|
+
finally{appUpdatePending=false;renderAppUpdates();refreshNotes(command==='check')}
|
|
62
96
|
return;
|
|
63
97
|
}
|
|
64
98
|
appUpdatePending=true;appUpdateLastAction=command;renderAppUpdates();
|
|
@@ -72,7 +106,7 @@ export function appUpdatesUI({api,notice}){
|
|
|
72
106
|
}catch(error){
|
|
73
107
|
notice(error.message||'更新操作未完成,请重试。',true);
|
|
74
108
|
try{appUpdateState=await desktop.updateStatus()}catch{}
|
|
75
|
-
}finally{appUpdatePending=false;renderAppUpdates()}
|
|
109
|
+
}finally{appUpdatePending=false;renderAppUpdates();refreshNotes(command==='check')}
|
|
76
110
|
}
|
|
77
111
|
function init(){
|
|
78
112
|
if($('settings-view-updates')){
|
|
@@ -81,7 +115,7 @@ export function appUpdatesUI({api,notice}){
|
|
|
81
115
|
$('app-update-install').onclick=()=>runAppUpdate('install');
|
|
82
116
|
// A temporary DMG open error can retry the saved asset through the same gate.
|
|
83
117
|
$('app-update-retry').onclick=()=>runAppUpdate(appUpdateState?.error?.code==='open_failed'?'install':(appUpdateState?.error?.operation||appUpdateLastAction)==='install'?'download':appUpdateState?.error?.operation||appUpdateLastAction);
|
|
84
|
-
window.briefloopDesktop?.onUpdateStatus?.(value=>{appUpdateState=value;renderAppUpdates()});
|
|
118
|
+
window.briefloopDesktop?.onUpdateStatus?.(value=>{appUpdateState=value;renderAppUpdates();refreshNotes()});
|
|
85
119
|
renderAppUpdates();
|
|
86
120
|
}
|
|
87
121
|
}
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "briefloop"
|
|
7
|
-
version = "0.28.
|
|
7
|
+
version = "0.28.3"
|
|
8
8
|
description = "Local multi-runtime agent workbench for sourced briefings, independent review and skill learning"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -6,11 +6,20 @@ import { collectFrontendLicenses, renderFrontendLicenses } from './build_fronten
|
|
|
6
6
|
|
|
7
7
|
const root = fileURLToPath(new URL('../', import.meta.url));
|
|
8
8
|
const check = process.argv.includes('--check');
|
|
9
|
+
// Ship the exact running version's changelog so settings remains useful offline.
|
|
10
|
+
const version = fs.readFileSync(path.join(root, 'pyproject.toml'), 'utf8').match(/^version\s*=\s*"([^"]+)"/m)?.[1];
|
|
11
|
+
if (!version) throw Error('Missing product version in pyproject.toml');
|
|
12
|
+
const changelog = fs.readFileSync(path.join(root, 'CHANGELOG.md'), 'utf8').replaceAll('\r\n', '\n');
|
|
13
|
+
const sections = [...changelog.matchAll(/^## ([^\r\n]+)\r?\n([\s\S]*?)(?=^## |$(?![\s\S]))/gm)];
|
|
14
|
+
const section = sections.find(match => match[1].split(/\s/)[0] === version);
|
|
15
|
+
if (!section) throw Error(`Missing changelog for running version ${version}`);
|
|
9
16
|
const result = await build({ absWorkingDir: root, entryPoints: ['frontend/app.js'],
|
|
10
17
|
bundle: true, format: 'esm', minify: true, outfile: 'src/briefloop/static/app.js',
|
|
11
18
|
metafile: true, write: false });
|
|
12
19
|
const rows = collectFrontendLicenses(result.metafile, root);
|
|
13
20
|
const artifacts = [...result.outputFiles.map(file => ({ path: file.path, contents: file.contents })),
|
|
21
|
+
{ path: path.join(root, 'src/briefloop/static/release-notes.json'),
|
|
22
|
+
contents: Buffer.from(JSON.stringify({version, notes: section[2].trim()}, null, 2) + '\n') },
|
|
14
23
|
{ path: path.join(root, 'src/briefloop/static/frontend-licenses.txt'),
|
|
15
24
|
contents: Buffer.from(renderFrontendLicenses(rows)) }];
|
|
16
25
|
// Retain the legacy layout during migration; the shared component layer is
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.28.3"
|
|
@@ -642,6 +642,9 @@ def _make_server(workspace, port, *, paused, backend, lock):
|
|
|
642
642
|
if result.get('state')=='available':
|
|
643
643
|
from .notifications import version_available
|
|
644
644
|
version_available(store,software_identity['version'],result['releaseVersion'])
|
|
645
|
+
elif path=='/api/software-release-notes':
|
|
646
|
+
from .software_release_notes import release_notes
|
|
647
|
+
result=release_notes(body.get('version'))
|
|
645
648
|
elif path=='/api/notifications/read':
|
|
646
649
|
from .notifications import mark_read
|
|
647
650
|
result=mark_read(store,body.get('through'),body.get('category'),body.get('seq'))
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Version-bound changelog text; independent of update installation decisions."""
|
|
2
|
+
import json
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import re
|
|
5
|
+
import threading
|
|
6
|
+
import time
|
|
7
|
+
from urllib.error import HTTPError, URLError
|
|
8
|
+
from urllib.request import Request, urlopen
|
|
9
|
+
|
|
10
|
+
RELEASES = 'https://github.com/Stahl-G/briefloop/releases/tag/v'
|
|
11
|
+
_cache = {}
|
|
12
|
+
_lock = threading.Lock()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def bundled_notes(version):
|
|
16
|
+
try:
|
|
17
|
+
value = json.loads((Path(__file__).parent / 'static' / 'release-notes.json').read_text(encoding='utf-8'))
|
|
18
|
+
if value.get('version') == version and isinstance(value.get('notes'), str):
|
|
19
|
+
return {'version': version, 'state': 'loaded' if value['notes'].strip() else 'empty',
|
|
20
|
+
'notes': value['notes'], 'source': 'bundled', 'url': RELEASES + version}
|
|
21
|
+
except (OSError, ValueError, AttributeError):
|
|
22
|
+
pass
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def release_notes(version):
|
|
27
|
+
if not isinstance(version, str) or not re.fullmatch(r'\d+\.\d+\.\d+', version):
|
|
28
|
+
raise ValueError('发布说明需要明确的稳定版本号')
|
|
29
|
+
with _lock:
|
|
30
|
+
cached = _cache.get(version)
|
|
31
|
+
if cached and time.monotonic() - cached[0] < 300:
|
|
32
|
+
return dict(cached[1])
|
|
33
|
+
result = {'version': version, 'notes': '', 'source': 'github', 'url': RELEASES + version}
|
|
34
|
+
try:
|
|
35
|
+
request = Request('https://api.github.com/repos/Stahl-G/briefloop/releases/tags/v' + version,
|
|
36
|
+
headers={'Accept': 'application/vnd.github+json', 'User-Agent': 'BriefLoop-Release-Notes'})
|
|
37
|
+
with urlopen(request, timeout=10) as response:
|
|
38
|
+
raw = response.read(256 * 1024 + 1)
|
|
39
|
+
if len(raw) > 256 * 1024:
|
|
40
|
+
raise ValueError('release response too large')
|
|
41
|
+
value = json.loads(raw)
|
|
42
|
+
if (value.get('tag_name') != 'v' + version or value.get('draft') is not False
|
|
43
|
+
or value.get('prerelease') is not False or not isinstance(value.get('body'), (str, type(None)))):
|
|
44
|
+
raise ValueError('release version does not match')
|
|
45
|
+
notes = (value.get('body') or '')[:20000]
|
|
46
|
+
result.update(state='loaded' if notes.strip() else 'empty', notes=notes)
|
|
47
|
+
with _lock:
|
|
48
|
+
if len(_cache) >= 20:
|
|
49
|
+
_cache.clear()
|
|
50
|
+
_cache[version] = (time.monotonic(), dict(result))
|
|
51
|
+
except HTTPError as exc:
|
|
52
|
+
result.update(state='unavailable' if exc.code == 404 else 'error',
|
|
53
|
+
message='该版本尚无公开发布说明。' if exc.code == 404 else f'发布说明获取失败(HTTP {exc.code}),请稍后重试或查看官方发布。')
|
|
54
|
+
except (OSError, URLError, ValueError, TypeError, AttributeError):
|
|
55
|
+
result.update(state='error', message='无法获取该版本的发布说明,请检查网络后重试;当前安装不受影响。')
|
|
56
|
+
return result
|
|
@@ -59,7 +59,8 @@ def runtime_info():
|
|
|
59
59
|
'pipx': '使用 pipx 更新,完成后重启服务。',
|
|
60
60
|
'uv': '使用 uv 更新,完成后重启服务。',
|
|
61
61
|
}[kind]
|
|
62
|
-
|
|
62
|
+
from .software_release_notes import bundled_notes
|
|
63
|
+
return {'version': __version__, 'installation': kind, 'build': build, 'release_notes': bundled_notes(__version__),
|
|
63
64
|
'update_command': command, 'guidance': guidance, 'download_url': DOWNLOADS}
|
|
64
65
|
|
|
65
66
|
|
|
@@ -249,7 +249,7 @@ Please report this to https://github.com/markedjs/marked.`,t){let r="<p>An error
|
|
|
249
249
|
<button type="button" data-edit="${w(m.id)}">\u4FEE\u6539</button><button type="button" data-delete="${w(m.id)}">\u79FB\u9664</button></div>
|
|
250
250
|
<div data-remove="${w(m.id)}" class="connector-remove" hidden><p>\u79FB\u9664\u6B64\u8FDE\u63A5\u914D\u7F6E\u548C\u672C\u673A\u4FDD\u5B58\u7684\u8FDE\u63A5\u51ED\u636E\uFF1F\u5DF2\u6709\u62A5\u544A\u4E0E\u6765\u6E90\u4FDD\u7559\u3002</p><button type="button" data-op="delete" data-id="${w(m.id)}">\u786E\u8BA4\u79FB\u9664</button><button type="button" data-keep>\u4FDD\u7559</button></div></article>`}).join(""):'<p class="help">\u8FD8\u6CA1\u6709\u8FDE\u63A5\u5668\u3002\u6DFB\u52A0\u4E00\u4E2A MCP \u670D\u52A1\u540E\u5373\u53EF\u6D4B\u8BD5\u8FDE\u63A5\u3002</p>',t.querySelectorAll("[data-edit]").forEach(m=>m.onclick=()=>d(r.find(g=>g.id===m.dataset.edit))),t.querySelectorAll("[data-delete]").forEach(m=>m.onclick=()=>{m.closest("article").querySelector("[data-remove]").hidden=!1}),t.querySelectorAll("[data-keep]").forEach(m=>m.onclick=()=>{m.parentElement.hidden=!0}),t.querySelectorAll("[data-op]").forEach(m=>m.onclick=()=>h(async()=>{let g=await e("connectors/"+m.dataset.op,{connector_id:m.dataset.id});return await f(),m.dataset.op==="test"?g.ok?"\u8FDE\u63A5\u6D4B\u8BD5\u901A\u8FC7\u3002":g.error?.message||"\u8FDE\u63A5\u6D4B\u8BD5\u672A\u901A\u8FC7\u3002":g.error?g.error.message:(m.dataset.op==="delete"&&s===m.dataset.id&&(a.reset(),a.hidden=!0,s=null),{enable:"\u8FDE\u63A5\u5DF2\u542F\u7528\u3002",disable:"\u8FDE\u63A5\u5DF2\u505C\u7528\u3002",delete:"\u8FDE\u63A5\u914D\u7F6E\u5DF2\u79FB\u9664\u3002"}[m.dataset.op])},m.dataset.op==="test"?"\u6B63\u5728\u8FDE\u63A5\u5E76\u8BFB\u53D6\u80FD\u529B\u76EE\u5F55\u2026":"\u6B63\u5728\u5904\u7406\u8FDE\u63A5\u2026"))}async function f(){r=(await e("connectors")).connectors,p()}async function h(m,g="\u6B63\u5728\u4FDD\u5B58\u2026"){if(!o){o=!0,i("[data-status]").textContent=g,t.querySelectorAll("button").forEach(y=>y.disabled=!0);try{let y=await m();i("[data-status]").textContent=y||""}catch(y){i("[data-status]").textContent=y.message||"\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u8BF7\u91CD\u8BD5\u3002"}finally{o=!1,t.querySelectorAll("button").forEach(y=>y.disabled=!1)}}}return a.onsubmit=m=>{m.preventDefault(),h(async()=>{let g=l("transport").value==="http",y={name:l("name").value,transport:l("transport").value,timeout_seconds:Number(l("timeout_seconds").value),max_response_bytes:Math.round(Number(l("max_response_mb").value)*1048576)};g?y.url=l("url").value.trim():Object.assign(y,{command:l("command").value.trim(),args:l("args").value.split(`
|
|
251
251
|
`).filter(v=>v!==""),cwd:l("cwd").value.trim()||null});let b={config:y,connector_id:s};if(l("clear_credentials").checked)b.secrets={};else if(g&&l("credential_value").value){if(!["authorization","bearer"].includes(l("credential_type").value))throw Error("\u8BF7\u9009\u62E9\u65B0\u51ED\u636E\u7684\u8BA4\u8BC1\u65B9\u5F0F\u3002");b.secrets={[l("credential_type").value==="authorization"?"authorization_header":"bearer_token"]:l("credential_value").value}}else if(!g&&l("env").value.trim()){let v={};for(let k of l("env").value.split(`
|
|
252
|
-
`).filter(S=>S.trim())){let S=k.indexOf("=");if(S<1)throw Error("\u6BCF\u884C\u73AF\u5883\u53D8\u91CF\u8BF7\u4F7F\u7528 NAME=VALUE \u683C\u5F0F\u3002");v[k.slice(0,S).trim()]=k.slice(S+1)}b.secrets={env:v}}return await e("connectors/save",b),a.reset(),a.hidden=!0,s=null,await f(),"\u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF0C\u53EF\u6D4B\u8BD5\u6216\u542F\u7528\u8FDE\u63A5\u3002"})},l("transport").onchange=c,i("[data-new]").onclick=()=>d(),i("[data-cancel]").onclick=()=>{a.reset(),a.hidden=!0,s=null},i("[data-refresh]").onclick=()=>h(f,"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u72B6\u6001\u2026"),{refresh:()=>h(f,"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u72B6\u6001\u2026")}}function T$(t,e,n,r){let s=[];for(let[i,a]of e){if(!a.resources.size&&!a.tools.size)continue;let l=t.find(c=>c.id===i);if(!l?.enabled||l.state!=="connected"||[...a.resources].some(c=>!l.capabilities?.resources?.some(d=>d.uri===c))||[...a.tools].some(c=>!l.capabilities?.tools?.some(d=>d.name===c)))throw Error("\u5DF2\u9009\u8FDE\u63A5\u5668\u6216\u6750\u6599\u4E0D\u518D\u53EF\u7528\uFF0C\u8BF7\u5237\u65B0\u5E76\u91CD\u65B0\u9009\u62E9")}for(let i of t){if(!i.enabled||i.state!=="connected")continue;let a=e.get(i.id);if(!a)continue;let l=(i.capabilities?.resources||[]).map(d=>d.uri).filter(d=>a.resources.has(d)),c=(i.capabilities?.tools||[]).map(d=>d.name).filter(d=>a.tools.has(d));(l.length||c.length)&&s.push({connector_id:i.id,resources:l,tools:c})}if(!s.length)return null;if(!Number.isInteger(n)||n<1||n>1e3)throw Error("\u8FDE\u63A5\u5668\u8C03\u7528\u6B21\u6570\u987B\u4E3A 1\u20131000 \u7684\u6574\u6570");if(!Number.isInteger(r)||r<1||r>1073741824)throw Error("\u8FDE\u63A5\u5668\u6750\u6599\u9884\u7B97\u987B\u4E3A 1\u20131024 MiB");let o=Math.max(...t.filter(i=>s.some(a=>a.connector_id===i.id)).map(i=>i.max_response_bytes||0));if(r<o)throw Error("\u6750\u6599\u9884\u7B97\u4E0D\u80FD\u5C0F\u4E8E\u6240\u9009\u8FDE\u63A5\u5668\u7684\u5355\u6B21\u54CD\u5E94\u4E0A\u9650");return{selections:s,max_calls:n,max_total_bytes:r}}function Ev(t,e){let n=new Map,r=[],s=!1,o=!1;t.innerHTML='<details><summary>\u672C\u8F6E\u8FDE\u63A5\u5668\u6750\u6599\uFF08\u53EF\u9009\uFF09</summary><p class="help">\u9009\u62E9\u5141\u8BB8 BriefLoop \u8BFB\u53D6\u7684\u6750\u6599\u548C\u8C03\u7528\u7684\u5DE5\u5177\u3002\u8054\u7F51\u5F00\u5173\u5355\u72EC\u63A7\u5236\u516C\u5F00\u641C\u7D22\u3002</p><button type="button" class="outline" data-refresh>\u5237\u65B0\u8FDE\u63A5\u5668</button><p data-status role="status"></p><div data-catalog></div><div class="row"><label>\u8C03\u7528\u6B21\u6570\u4E0A\u9650<input type="number" data-calls min="1" max="1000" step="1" value="20"></label><label>\u6750\u6599\u603B\u91CF\u4E0A\u9650\uFF08MiB\uFF09<input type="number" data-bytes min="1" max="1024" step="1" value="20"></label></div><p class="help">\u4EC5\u52FE\u9009\u9879\u6388\u4E88\u672C\u8F6E\u4EFB\u52A1\uFF1B\u672A\u52FE\u9009\u65F6\u4E0D\u4F7F\u7528\u8FDE\u63A5\u5668\u3002\u8BFB\u53D6\u6210\u529F\u7684\u6750\u6599\u4F1A\u51FA\u73B0\u5728\u62A5\u544A\u6765\u6E90\u4E2D\u3002</p></details>';let i=c=>t.querySelector(c);function a(){let c=r.filter(d=>d.enabled);i("[data-catalog]").innerHTML=c.map(d=>{let p=n.get(d.id),f=d.capabilities||{},h=d.state==="connected";return`<fieldset><legend>${w(d.name||d.id)} \xB7 ${h?"\u5DF2\u8FDE\u63A5":"\u5C1A\u672A\u8FDE\u63A5"}</legend>${h?"":'<p class="help">\u8BF7\u5148\u5728\u8BBE\u7F6E\u4E2D\u542F\u7528\u5E76\u8FDE\u63A5\uFF0C\u518D\u5237\u65B0\u3002</p>'}${(f.resources||[]).map(m=>`<label class="check"><input type="checkbox" data-connector="${w(d.id)}" data-kind="resources" data-item="${w(m.uri)}" ${p?.resources.has(m.uri)?"checked":""}>${w(m.name||m.uri)}</label>`).join("")}${(f.tools||[]).map(m=>`<label class="check"><input type="checkbox" data-connector="${w(d.id)}" data-kind="tools" data-item="${w(m.name)}" ${p?.tools.has(m.name)?"checked":""}>${w(m.title||m.name)}${m.annotations?.readOnlyHint===!0?"\uFF08\u58F0\u660E\u53EA\u8BFB\uFF09":"\uFF08\u53EF\u80FD\u4FEE\u6539\u5916\u90E8\u6570\u636E\uFF0C\u8BF7\u786E\u8BA4\u7528\u9014\uFF09"}</label>`).join("")}${h&&!f.resources?.length&&!f.tools?.length?'<p class="help">\u672A\u63D0\u4F9B\u53EF\u9009\u6750\u6599\u6216\u5DE5\u5177\u3002</p>':""}</fieldset>`}).join("")||'<p class="help">\u6CA1\u6709\u5DF2\u542F\u7528\u7684\u8FDE\u63A5\u5668\u3002\u53EF\u5728\u8BBE\u7F6E \u2192 \u6570\u636E\u8FDE\u63A5\u5668\u4E2D\u6DFB\u52A0\u3002</p>',t.querySelectorAll("[data-item]").forEach(d=>d.onchange=()=>{let{connector:p,kind:f,item:h}=d.dataset;n.has(p)||n.set(p,{resources:new Set,tools:new Set});let m=n.get(p)[f];d.checked?m.add(h):m.delete(h)})}async function l(){if(!s){s=!0,i("[data-refresh]").disabled=!0,i("[data-status]").textContent="\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u5668\u2026";try{r=(await e("connectors")).connectors||[],o=!1,a(),i("[data-status]").textContent=""}catch(c){o=!0,i("[data-status]").textContent="\u65E0\u6CD5\u8BFB\u53D6\u8FDE\u63A5\u5668\uFF1A"+c.message}finally{s=!1,i("[data-refresh]").disabled=!1}}}return i("[data-refresh]").onclick=l,{refresh:l,selection(){if(s)throw Error("\u8FDE\u63A5\u5668\u76EE\u5F55\u6B63\u5728\u5237\u65B0\uFF0C\u8BF7\u7A0D\u540E\u63D0\u4EA4");if(o&&[...n.values()].some(c=>c.resources.size||c.tools.size))throw Error("\u8FDE\u63A5\u5668\u76EE\u5F55\u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u540E\u63D0\u4EA4");return T$(r,n,Number(i("[data-calls]").value),Number(i("[data-bytes]").value)*1048576)}}}function Av({api:t,notice:e}){let n=null,r=null,s=!1,o="check";function i(d=n){if(!u("settings-view-updates"))return;let f=typeof window.briefloopDesktop?.updateStatus=="function";u("app-update-controls").hidden=!1,u("app-update-version").textContent=r?`BriefLoop v${r.version}${r.build?` \xB7 \u6784\u5EFA ${r.build}`:""}${f?` \xB7 \u684C\u9762 App v${d?.currentAppVersion||"\u8BFB\u53D6\u4E2D"}`:""}`:"\u6B63\u5728\u8BFB\u53D6\u5B9E\u9645\u8FD0\u884C\u7248\u672C\u2026";let h={desktop:"\u684C\u9762\u7BA1\u7406\u7684\u540E\u7AEF \xB7 App \u4E0E CLI \u5171\u7528",source:"\u5F00\u53D1\u6E90\u7801",pip:"Python \u5305\u5B89\u88C5",pipx:"pipx \u5B89\u88C5",uv:"uv \u5DE5\u5177\u5B89\u88C5"};u("app-update-installation").textContent=r?h[r.installation]||"\u72EC\u7ACB\u5B89\u88C5":"",u("app-update-command").hidden=!r?.update_command,u("app-update-command").textContent=r?.update_command||"",u("app-update-source").textContent=d?.source==="local-test"?"\u672C\u5730\u6D4B\u8BD5\u66F4\u65B0\u6E90 \xB7 \u4EC5\u9A8C\u8BC1\u6D41\u7A0B\uFF0C\u4E0D\u4EE3\u8868\u5B98\u65B9\u53D1\u5E03":f?"\u5B98\u65B9\u7A33\u5B9A\u6765\u6E90\uFF1AStahl-G/briefloop \xB7 GitHub Releases":"Python \u5305\u7A33\u5B9A\u6765\u6E90\uFF1APyPI \xB7 briefloop";let m=d?.source==="local-test"&&d?.reinstall===!0;u("app-update-guidance").textContent=f?d?.installMode==="zip"?"\u4E0B\u8F7D\u5B8C\u6210\u540E\uFF0C\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u4FDD\u5B58\u5E76\u9000\u51FA\u3002Finder \u4F1A\u6253\u5F00\u65B0\u7248 App \u548C\u201C\u5B89\u88C5\u4F4D\u7F6E\u201D\uFF1A\u5C06 App \u62D6\u5165\u5E76\u66FF\u6362\uFF0C\u518D\u6253\u5F00 BriefLoop\u3002\u62A5\u544A\u4E0E\u5DE5\u4F5C\u533A\u4F1A\u4FDD\u7559\u3002":d?.installMode==="dmg"?`\u4E0B\u8F7D\u540E\u4F1A\u5148\u4FDD\u5B58\u7F16\u8F91\u5E76\u5904\u7406\u5FD9\u4EFB\u52A1\uFF0C\u518D\u9000\u51FA App\u3001\u6253\u5F00 DMG\uFF1B\u8BF7\u5728 Finder \u4E2D${m?"\u91CD\u65B0\u5B89\u88C5\u5F53\u524D\u7248\u672C":"\u624B\u52A8\u5B89\u88C5\u65B0\u7248\u672C"}\u3002`:"\u4E0B\u8F7D\u540E\u4F1A\u5148\u4FDD\u5B58\u7F16\u8F91\u5E76\u5904\u7406\u5FD9\u4EFB\u52A1\uFF0C\u518D\u9000\u51FA App \u5E76\u4EA4\u7ED9\u539F\u751F\u5B89\u88C5\u5668\u66F4\u65B0\u3002":r?.guidance||"\u6B63\u5728\u8BFB\u53D6\u5B89\u88C5\u6765\u6E90\u2026";let g=d?.error?.operation||(d?.error?.code==="open_failed"?"install":o),b={idle:"\u5C1A\u672A\u68C0\u67E5\u66F4\u65B0",checking:"\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026",available:"\u53D1\u73B0\u53EF\u7528\u66F4\u65B0",current:"\u5F53\u524D App \u65E0\u9700\u66F4\u65B0",downloading:"\u6B63\u5728\u4E0B\u8F7D\u66F4\u65B0\u2026",downloaded:"\u4E0B\u8F7D\u5B8C\u6210\uFF0C\u7B49\u5F85\u5B89\u88C5",error:{check:"\u66F4\u65B0\u68C0\u67E5\u5931\u8D25\uFF08\u5F53\u524D\u5B89\u88C5\u4E0D\u53D7\u5F71\u54CD\uFF09",download:"\u66F4\u65B0\u5305\u4E0B\u8F7D\u672A\u5B8C\u6210",install:"\u66F4\u65B0\u5B89\u88C5\u672A\u5B8C\u6210"}[g]||"\u66F4\u65B0\u68C0\u67E5\u5931\u8D25\uFF08\u5F53\u524D\u5B89\u88C5\u4E0D\u53D7\u5F71\u54CD\uFF09"},v=`\u91CD\u65B0\u5B89\u88C5\u5F53\u524D App v${d?.currentAppVersion||""}`;u("app-update-status").textContent=f?m&&d?.state==="available"?v:(b[d?.state]||"\u6B63\u5728\u8BFB\u53D6 App \u7248\u672C\u2026")+(d?.state==="error"&&g==="check"?"":m?` \xB7 ${v}`:d?.releaseVersion?` \xB7 v${d.releaseVersion}`:""):{idle:"\u5C1A\u672A\u68C0\u67E5\u66F4\u65B0",checking:"\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026",available:`\u53D1\u73B0\u53EF\u7528\u540E\u7AEF\u7248\u672C v${d?.releaseVersion||""}`,current:"\u5F53\u524D\u540E\u7AEF\u5DF2\u662F PyPI \u6700\u65B0\u7A33\u5B9A\u7248",ahead:`\u5F53\u524D\u540E\u7AEF\u9AD8\u4E8E PyPI \u5DF2\u53D1\u5E03\u7248\u672C v${d?.releaseVersion||""}`,error:"\u7248\u672C\u68C0\u67E5\u672A\u5B8C\u6210"}[d?.state||"idle"]||"\u5C1A\u672A\u68C0\u67E5\u66F4\u65B0",u("app-update-download").textContent=m?"\u4E0B\u8F7D\u5F53\u524D\u7248\u672C\u5B89\u88C5\u5305":"\u4E0B\u8F7D\u66F4\u65B0";let k=s||["checking","downloading"].includes(d?.state);u("app-update-check").disabled=k,u("app-update-download").hidden=!f||d?.state!=="available",u("app-update-download").disabled=k,u("app-update-install").hidden=!f||d?.state!=="downloaded",u("app-update-install").disabled=k,u("app-update-install").textContent=d?.installMode==="zip"?"\u4FDD\u5B58\u5E76\u9000\u51FA\uFF0C\u6253\u5F00\u5B89\u88C5\u6587\u4EF6\u5939":d?.installMode==="dmg"?"\u4FDD\u5B58\u5E76\u6253\u5F00 DMG":"\u4FDD\u5B58\u5E76\u5B89\u88C5\u66F4\u65B0",u("app-update-retry").hidden=d?.state!=="error"||!d?.retryable,u("app-update-retry").disabled=k,u("app-update-error").hidden=!d?.error,u("app-update-error").textContent=d?.error?.message||"";let S=d?.progress;u("app-update-progress-box").hidden=!S,u("app-update-progress").value=S?.percent||0,u("app-update-progress-text").textContent=S?`${Math.round(S.percent||0)}% \xB7 ${(Math.max(0,S.transferred||0)/1048576).toFixed(1)} / ${(Math.max(0,S.total||0)/1048576).toFixed(1)} MiB`:"",S?.mode==="differential"?u("app-update-progress-text").textContent+=` \xB7 \u589E\u91CF\u4E0B\u8F7D\uFF0C\u590D\u7528 ${(Math.max(0,S.reused||0)/1048576).toFixed(1)} MiB`:S?.mode==="full"&&(u("app-update-progress-text").textContent+=" \xB7 "+({no_baseline:"\u65E0\u6709\u6548\u57FA\u51C6\u7F13\u5B58\uFF0C\u5B8C\u6574\u4E0B\u8F7D\u5E76\u5EFA\u7ACB\u7F13\u5B58",little_reuse:"\u672C\u6B21\u53EF\u590D\u7528\u5185\u5BB9\u8F83\u5C11\uFF0C\u5B8C\u6574\u4E0B\u8F7D",range_unavailable:"\u4E0B\u8F7D\u670D\u52A1\u4E0D\u652F\u6301\u5206\u6BB5\u4F20\u8F93\uFF0C\u5B8C\u6574\u4E0B\u8F7D",range_size:"\u5206\u6BB5\u54CD\u5E94\u4E0D\u5B8C\u6574\uFF0C\u91CD\u65B0\u5B8C\u6574\u4E0B\u8F7D",delta_hash:"\u589E\u91CF\u91CD\u5EFA\u6821\u9A8C\u5931\u8D25\uFF0C\u91CD\u65B0\u5B8C\u6574\u4E0B\u8F7D",differential_unavailable:"\u589E\u91CF\u4E0D\u53EF\u7528\uFF0C\u5DF2\u56DE\u9000\u5B8C\u6574\u4E0B\u8F7D",blockmap_unavailable:"\u6B64\u7248\u672C\u65E0\u53EF\u7528\u589E\u91CF\u4FE1\u606F\uFF0C\u5B8C\u6574\u4E0B\u8F7D"}[S.fallback]||"\u5B8C\u6574\u4E0B\u8F7D")),u("app-update-notes-box").hidden=!d?.notes,u("app-update-notes").textContent=d?.notes||""}async function a(){i();try{r=await t("software-version"),typeof window.briefloopDesktop?.updateStatus=="function"&&(n=await window.briefloopDesktop.updateStatus()),i()}catch{e("\u65E0\u6CD5\u8BFB\u53D6 App \u66F4\u65B0\u72B6\u6001\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u8BBE\u7F6E\u3002",!0)}}async function l(d){if(s)return;let p=window.briefloopDesktop;if(typeof p?.updateStatus!="function"){if(d!=="check")return;s=!0,n={state:"checking"},i();try{n=await t("software-update-check",{}),r=n}catch(f){n={state:"error",retryable:!0,error:{message:f.message||"\u7248\u672C\u68C0\u67E5\u672A\u5B8C\u6210"}}}finally{s=!1,i()}return}s=!0,o=d,i();try{if(d==="install"){let f=await p.installUpdate();f?.cancelled&&e("\u5DF2\u4FDD\u7559\u5F53\u524D\u5DE5\u4F5C\u533A\uFF0C\u66F4\u65B0\u5305\u4ECD\u53EF\u7A0D\u540E\u5B89\u88C5\u3002"),f?.cancelled&&(n=await p.updateStatus())}else n=await(d==="download"?p.downloadUpdate():p.checkForUpdates())}catch(f){e(f.message||"\u66F4\u65B0\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u8BF7\u91CD\u8BD5\u3002",!0);try{n=await p.updateStatus()}catch{}}finally{s=!1,i()}}function c(){u("settings-view-updates")&&(u("app-update-check").onclick=()=>l("check"),u("app-update-download").onclick=()=>l("download"),u("app-update-install").onclick=()=>l("install"),u("app-update-retry").onclick=()=>l(n?.error?.code==="open_failed"?"install":(n?.error?.operation||o)==="install"?"download":n?.error?.operation||o),window.briefloopDesktop?.onUpdateStatus?.(d=>{n=d,i()}),i())}return{init:c,renderAppUpdates:i,refreshAppUpdates:a,runAppUpdate:l}}var E$=[["taste","\u5199\u6CD5\u504F\u597D","\u539F\u7A3F\u6CA1\u9519\uFF0C\u53EA\u662F\u6211\u60F3\u8FD9\u6837\u5199"],["fact_correction","\u4E8B\u5B9E\u7EA0\u9519","\u539F\u7A3F\u7684\u6570\u5B57\u3001\u4E8B\u5B9E\u6216\u53E3\u5F84\u4E0D\u5BF9"],["reader_specific","\u53EA\u9488\u5BF9\u8FD9\u4F4D\u8BFB\u8005","\u6362\u4E00\u4F4D\u8BFB\u8005\u672A\u5FC5\u8981\u8FD9\u6837\u6539"]];function _s(t,e=160){let n=String(t||"").replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e)+"\u2026":n}function $v(t){let e=t.op==="delete"?`\u5220\u6389\u4E86\uFF1A<q>${w(_s(t.before))}</q>`:t.op==="insert"?`\u52A0\u5165\u4E86\uFF1A<q>${w(_s(t.after))}</q>`:`\u628A <q>${w(_s(t.before))}</q> \u6539\u6210 <q>${w(_s(t.after))}</q>`;return`<div class="revision-question" data-edit="${w(t.id)}"><p class="revision-question-where">${w(t.heading||"\u6B63\u6587")}</p><p>${e}</p><p class="help">\u4E3A\u4EC0\u4E48\u8FD9\u6837\u6539\uFF1F</p><div class="revision-question-choices">${E$.map(([n,r,s])=>`<button type="button" class="outline" data-answer="${n}" title="${w(s)}">${w(r)}</button>`).join("")}<button type="button" class="ghost" data-answer="skip" title="\u8FD9\u5904\u6539\u52A8\u4E0D\u8FDB\u5165\u5B66\u4E60">\u8DF3\u8FC7</button></div></div>`}function Rv({api:t,action:e,$:n=u}){function r(o){o.querySelectorAll("[data-answer]").forEach(i=>i.onclick=()=>{let a=i.closest("[data-edit]").dataset.edit,l=i.dataset.answer;e(()=>t("revision-answer",{edit_id:a,category:l}),l==="skip"?"\u5DF2\u8DF3\u8FC7\uFF0C\u8FD9\u5904\u6539\u52A8\u4E0D\u8FDB\u5165\u5B66\u4E60":l==="fact_correction"?"\u5DF2\u8BB0\u4E3A\u4E8B\u5B9E\u7EA0\u9519\uFF0C\u4E0D\u4F5C\u4E3A\u5199\u4F5C\u7ECF\u9A8C":l==="reader_specific"?"\u8BFB\u8005\u7279\u5B9A\u6539\u52A8\u5DF2\u4FDD\u7559\uFF1B\u672A\u7ED1\u5B9A\u8BFB\u8005\u65F6\u4FDD\u6301\u672A\u786E\u8BA4\uFF0C\u4E0D\u8FDB\u5165\u5168\u5C40\u5B66\u4E60":"\u5DF2\u8BB0\u4E0B\uFF0C\u4F1A\u8FDB\u5165\u4E0B\u4E00\u6B21\u5B66\u4E60")})}function s(o){let i=o?.questions||[],a=o?.unconfirmed||[],l=o?.fact_corrections||[],c=n("revision-questions");c&&(c.hidden=!i.length&&!a.length,c.innerHTML=i.length?`<h3>${i.length} \u5904\u6539\u52A8\u9700\u8981\u4F60\u786E\u8BA4\u539F\u56E0</h3><p class="help">\u53EA\u95EE\u62FF\u4E0D\u51C6\u3001\u6539\u52A8\u8F83\u5927\u7684\u5730\u65B9\u3002\u4E8B\u5B9E\u7EA0\u9519\u4E0D\u4F1A\u5199\u8FDB\u5199\u4F5C\u6280\u5DE7\uFF1B\u8DF3\u8FC7\u7684\u6539\u52A8\u4E0D\u8FDB\u5165\u5B66\u4E60\u3002</p>${i.map($v).join("")}`:"",a.length&&(c.innerHTML+=`<details><summary>${a.length} \u5904\u672A\u786E\u8BA4\u6539\u52A8 \xB7 \u4E0D\u8FDB\u5165\u5B66\u4E60</summary><p class="help">\u65E0\u9700\u9010\u6761\u5904\u7406\u3002\u4F60\u4E5F\u53EF\u4EE5\u5C55\u5F00\u540E\u786E\u8BA4\u6539\u52A8\u539F\u56E0\u3002</p>${a.map($v).join("")}</details>`),r(c));let d=n("fact-corrections");d&&(d.innerHTML=l.length?l.map(f=>`<div class="fact-correction"><small>${w(f.heading||"\u6B63\u6587")} \xB7 ${f.decided_by==="user"?"\u4F60\u786E\u8BA4":"Evaluator \u5224\u65AD"}</small><p><del>${w(_s(f.before,120))}</del> \u2192 ${w(_s(f.after,120))}</p></div>`).join(""):'<p class="help">\u8FD8\u6CA1\u6709\u4E8B\u5B9E\u7EA0\u9519\u8BB0\u5F55\u3002</p>');let p=n("revision-questions-hint");p&&(p.hidden=!i.length,p.textContent=i.length?`\u6709 ${i.length} \u5904\u6539\u52A8\u7B49\u4F60\u786E\u8BA4\u539F\u56E0\uFF0C\u5728\u201C\u7ECF\u9A8C\u201D\u9875\u5904\u7406\u3002`:"")}return{render:s}}function Nv({$:t,esc:e,getState:n,openLearning:r}){let s=l=>{try{return typeof l=="string"?JSON.parse(l):l||{}}catch{return{}}},o={queued:"\u6392\u961F\u6574\u7406",running:"\u6B63\u5728\u6574\u7406",complete:"\u5DF2\u6574\u7406",failed:"\u6574\u7406\u5931\u8D25",interrupted:"\u6574\u7406\u4E2D\u65AD",cancelled:"\u6574\u7406\u5DF2\u505C\u6B62"};function i(){let l=n()||{},c=new Map((l.jobs||[]).filter(d=>d.kind==="learn").map(d=>[d.id,d]));return(l.feedback||[]).map(d=>{let p=s(d.data),f=c.get(d.batch_id),h="learning_status"in d?d.learning_status:f?.status,m=d.batch_id?o[h]||"\u6574\u7406\u72B6\u6001\u672A\u77E5":"\u5F85\u6574\u7406",g=d.kind==="revision"||d.kind==="revision_edit",y=p.summary||p.text||p.verified_reason||(g?"\u6539\u7A3F\u8BB0\u5F55":"\u53CD\u9988\u8BB0\u5F55"),b=g?"\u6539\u7A3F":d.kind==="review_correction"?"\u6838\u67E5\u4FEE\u8BA2":p.learning_intent==="explicit_requirement"?"\u5FC5\u987B\u4FDD\u7559\u7684\u8981\u6C42":"\u53CD\u9988";return{id:d.id,text:y,kind:b,status:m,pending:!d.batch_id,created:d.created}})}function a(){let l=i(),c=n()?.feedback_summary,d=c?.total??l.length,p=c?.pending??l.filter(y=>y.pending).length,f=d>l.length,h=c?`\u5171 ${d} \u6761\uFF0C\u5176\u4E2D ${p} \u6761\u5F85\u6574\u7406\u3002`:`\u6700\u8FD1 ${d} \u6761\uFF0C\u5176\u4E2D ${p} \u6761\u5F85\u6574\u7406\u3002`,m=t("feedback-list");m&&(m.innerHTML=`<h2>\u5DF2\u4FDD\u5B58\u7684\u53CD\u9988</h2><p class="help">${d?h:"\u8FD8\u6CA1\u6709\u4FDD\u5B58\u7684\u53CD\u9988\u3002"}${f?`\u4EC5\u663E\u793A\u6700\u8FD1 ${l.length} \u6761\u3002`:""}\u5F85\u6574\u7406\u7684\u53CD\u9988\u5728\u4F60\u70B9\u201C\u73B0\u5728\u6574\u7406\u6210\u7ECF\u9A8C\u201D\u6216\u5F00\u542F\u81EA\u52A8\u5B66\u4E60\u540E\uFF0C\u7531 Wiki \u7EF4\u62A4\u8005\u6574\u7406\uFF1B\u4E8B\u5B9E\u7EA0\u9519\u53EA\u8BB0\u5F55\uFF0C\u4E0D\u5199\u8FDB\u5199\u4F5C\u6280\u5DE7\u3002</p>`+(l.length?`<ul class="feedback-items">${l.map(y=>`<li><span class="chip">${e(y.status)}</span> <span class="help">${e(y.kind)} \xB7 ${e((y.created||"").slice(0,16).replace("T"," "))}</span><p>${e(y.text)}</p></li>`).join("")}</ul>`:""));let g=t("feedback-saved-hint");g&&(g.hidden=!d,g.innerHTML=d?`${c?"\u5DF2\u4FDD\u5B58":"\u6700\u8FD1\u5DF2\u4FDD\u5B58"} ${d} \u6761\u53CD\u9988${p?`\uFF0C${p} \u6761\u5F85\u6574\u7406`:""} \xB7 <button type="button" class="outline" data-feedback-open>\u67E5\u770B\u53CD\u9988</button>`:"",g.querySelector("[data-feedback-open]")?.addEventListener("click",r))}return{render:a,rows:i}}function Lv({api:t,action:e,$:n=u}){let r=null,s=[],o=!1;function i(h,m){let g=n("reader-select");if(!g)return;let y=o?g.value:m??g.value;g.innerHTML='<option value="">\u4E0D\u6307\u5B9A\u8BFB\u8005\u6863\u6848</option>'+h.map(b=>`<option value="${w(b.id)}">${w(b.name)}</option>`).join(""),g.value=h.some(b=>b.id===y)?y:"",o=!0}function a(){let h=n("reader-select"),m=h?.form?.elements?.audience;if(!h||!m)return;let g=s.find(y=>y.id===h.value);g&&(!m.value.trim()||m.value==="\u81EA\u5DF1"||s.some(y=>y.name===m.value))&&(m.value=g.name)}function l(h){return`<div class="reader-profile" data-reader="${w(h.id)}"><div class="reader-profile-head"><strong>${w(h.name)}</strong><span>${h.skill_id?"\u5386\u53F2\u4E13\u5C5E\u6280\u80FD "+w(h.skill_id)+"\uFF08\u6682\u4E0D\u542F\u7528\uFF09":"\u4F7F\u7528\u5DE5\u4F5C\u533A\u6280\u80FD"}</span></div>${h.decisions?`<p><small>\u7528\u62A5\u544A\u505A\u4EC0\u4E48\u51B3\u5B9A</small>${w(h.decisions)}</p>`:""}${h.preferences?`<p><small>\u504F\u597D</small>${w(h.preferences)}</p>`:""}<div class="reader-profile-actions"><button type="button" class="outline" data-reader-edit>\u7F16\u8F91</button>${h.skill_id?'<button type="button" class="outline" data-reader-unbind>\u6E05\u9664\u5386\u53F2\u7ED1\u5B9A</button>':""}<button type="button" class="ghost" data-reader-archive>\u5F52\u6863</button></div>${h.wiki?`<details><summary>\u5386\u53F2\u8BFB\u8005\u7ECF\u9A8C\uFF08\u6682\u4E0D\u542F\u7528\uFF09</summary><pre class="reader-wiki">${w(h.wiki)}</pre></details>`:""}</div>`}function c(h){let m=n("reader-profiles");m&&(m.innerHTML=h.length?h.map(l).join(""):'<p class="help">\u8FD8\u6CA1\u6709\u8BFB\u8005\u6863\u6848\u3002\u5199\u7ED9\u56FA\u5B9A\u8BFB\u8005\u7684\u62A5\u544A\uFF0C\u5EFA\u4E00\u4E2A\u6863\u6848\u540E\uFF0C\u62A5\u544A\u4F1A\u8BB0\u5F55\u7528\u9014\u4E0E\u504F\u597D\u3002\u8BFB\u8005\u7279\u5B9A\u6539\u52A8\u5148\u4FDD\u7559\uFF0C\u7B49\u5F85\u9002\u7528\u6761\u4EF6\u4E0E\u8DE8\u8BFB\u8005\u9A8C\u8BC1\u3002</p>',m.querySelectorAll("[data-reader]").forEach(g=>{let y=h.find(v=>v.id===g.dataset.reader);g.querySelector("[data-reader-edit]").onclick=()=>d(y),g.querySelector("[data-reader-archive]").onclick=()=>e(()=>t("reader-archive",{id:y.id}),"\u8BFB\u8005\u6863\u6848\u5DF2\u5F52\u6863\uFF0C\u65E7\u62A5\u544A\u4FDD\u7559\u539F\u6837");let b=g.querySelector("[data-reader-unbind]");b&&(b.onclick=()=>e(()=>t("reader-skill",{reader_id:y.id,skill_id:null}),"\u5DF2\u6E05\u9664\u5386\u53F2\u4E13\u5C5E\u6280\u80FD\u7ED1\u5B9A"))}))}function d(h=null){let m=n("reader-form");m&&(r=h?.id||null,m.hidden=!1,m.elements.name.value=h?.name||"",m.elements.decisions.value=h?.decisions||"",m.elements.preferences.value=h?.preferences||"",m.querySelector("[data-reader-form-title]").textContent=h?"\u7F16\u8F91\u8BFB\u8005\u6863\u6848":"\u65B0\u5EFA\u8BFB\u8005\u6863\u6848",m.elements.name.focus?.())}function p(){let h=n("reader-add");h&&(h.onclick=()=>d());let m=n("reader-form");if(m){m.onsubmit=b=>{b.preventDefault();let v={name:m.elements.name.value,decisions:m.elements.decisions.value,preferences:m.elements.preferences.value,...r?{id:r}:{}};e(async()=>{await t("reader-save",v),m.hidden=!0,r=null},"\u8BFB\u8005\u6863\u6848\u5DF2\u4FDD\u5B58")};let y=m.querySelector("[data-reader-cancel]");y&&(y.onclick=()=>{m.hidden=!0,r=null})}let g=n("reader-select");g&&g.addEventListener("change",a)}function f(h=[],{readerId:m}={}){s=h,i(h,m),c(h)}return{render:f,bind:p,openForm:d}}function Ov(t){if(!t)return"";let e=t.status==="untracked"&&!t.registration_conflict,n=e?"untracked":"pending",r=e?"\u65E0\u53EF\u8FFD\u8E2A\u6539\u52A8":"\u5F85\u9A8C\u6536",s=e?["\u6CA1\u6709\u53EF\u8FFD\u8E2A\u7684\u6539\u52A8"]:["\u521D\u6B65\u89C2\u5BDF\uFF0C\u672A\u9A8C\u6536",`\u5B8C\u6574\u6838\u9A8C ${t.observed||0} \u4EFD \xB7 \u672A\u77E5 ${t.unknown??t.reports??0} \u4EFD`];return t.flagged_reports&&s.push(`\u660E\u786E\u6807\u51FA\u590D\u53D1 ${t.repeats||0} \u6B21\uFF08${t.flagged_reports} \u4EFD\u62A5\u544A\uFF09`),t.excluded&&s.push(`\u8303\u56F4\u4E0D\u4E00\u81F4\uFF0C\u6392\u9664 ${t.excluded} \u4EFD`),t.registration_conflict&&s.push("\u540C\u4E00\u6280\u80FD\u5BF9\u5E94\u4E0D\u540C\u8BFB\u8005\u6216\u6279\u6B21\uFF0C\u7ED1\u5B9A\u5F85\u6F84\u6E05"),e||s.push(t.note||"\u5C1A\u672A\u5B8C\u6210\u5B8C\u6574\u590D\u53D1\u6838\u9A8C\u3001\u53CC\u6A21\u578B family \u6821\u51C6\u3001\u4EBA\u5DE5\u5206\u6B67\u5904\u7406\u4E0E\u7559\u51FA\u9A8C\u6536"),(t.legacy_status_corrected||["adopted","not_improving"].includes(t.status))&&s.push(t.legacy_note||"\u65E7\u81EA\u52A8\u72B6\u6001\u4E0D\u8BC1\u660E\u9A8C\u6536\uFF0C\u539F\u8BB0\u5F55\u4E0E\u6280\u80FD\u4FDD\u7559"),`<span class="skill-verification skill-verification-${w(n)}"><span class="tag">${w(r)}</span><small>${w(s.join(" \xB7 "))}</small></span>`}function A$(t){return`/discuss \u8FD9\u662F\u6211\u4EEC\u5DF2\u7ECF\u4EA4\u4ED8\u8FC7\u7684\u4E00\u671F\u62A5\u544A\u300A${t}\u300B\uFF08\u89C1\u9644\u4EF6\uFF09\u3002\u8BF7\u9605\u8BFB\u5B83\uFF0C\u53CD\u63A8\u8FD9\u4EFD\u5468\u671F\u62A5\u544A\u7684\u7B80\u62A5\u7EA6\u5B9A\uFF1A\u8BFB\u8005\u662F\u8C01\u3001\u8BFB\u5B8C\u8981\u505A\u4EC0\u4E48\u51B3\u5B9A\uFF1B\u6CBF\u7528\u7684\u7AE0\u8282\u7ED3\u6784\uFF1B\u6570\u5B57\u5355\u4F4D\u3001\u65F6\u95F4\u8303\u56F4\u4E0E\u6765\u6E90\u7B49\u53E3\u5F84\uFF1B\u6709\u660E\u786E\u4F9D\u636E\u7684\u7981\u533A\uFF08\u6CA1\u6709\u5199\u4E0D\u7B49\u4E8E\u7981\u6B62\uFF09\u3002\u5F80\u671F\u6570\u5B57\u4E0D\u662F\u672C\u671F\u4E8B\u5B9E\uFF1B\u5168\u90E8\u7EA6\u5B9A\u5148\u4F5C\u4E3A\u5F85\u786E\u8BA4\u5EFA\u8BAE\uFF0C\u770B\u4E0D\u51FA\u6765\u7684\u5217\u4E3A\u672A\u51B3\u9879\uFF0C\u4E0D\u8981\u731C\u3002\u6574\u7406\u597D\u540E\u7ED9\u51FA briefloop-requirements\uFF0C\u8BFB\u8005\u6E05\u695A\u65F6\u518D\u7ED9\u4E00\u4E2A briefloop-reader\u3002`}function $$(t){let e=/```briefloop-reader\s*([\s\S]*?)```/.exec(t||"");if(!e)return null;try{let n=JSON.parse(e[1].trim());return!n||typeof n.name!="string"||!n.name.trim()?null:{name:n.name.trim(),decisions:typeof n.decisions=="string"?n.decisions:"",preferences:typeof n.preferences=="string"?n.preferences:""}}catch{return null}}function Iv({api:t,uploadPayload:e,getUploadLimits:n,openChat:r,notice:s,saveReader:o,$:i=u}){async function a(d){let p=await t("import-previous",await e(d,n(),{}));return await r({text:A$(p.title),source_id:p.source_id}),s(p.tracked_changes?"\u5DF2\u5BFC\u5165\u5F80\u671F\u62A5\u544A\uFF1B\u5176\u4E2D\u7684 Word \u4FEE\u8BA2\u5DF2\u8BB0\u4E3A\u6539\u7A3F\uFF0C\u4E0B\u6B21\u5B66\u4E60\u65F6\u5206\u7C7B\u3002\u786E\u8BA4\u540E\u628A\u8BF7\u6C42\u53D1\u7ED9 BriefLoop\u3002":"\u5DF2\u5BFC\u5165\u5F80\u671F\u62A5\u544A\u3002\u786E\u8BA4\u540E\u628A\u8BF7\u6C42\u53D1\u7ED9 BriefLoop\uFF0C\u5B83\u4F1A\u53CD\u63A8\u7B80\u62A5\u7EA6\u5B9A\u3002"),p}function l(){let d=i("previous-report-file");d&&(d.onchange=async p=>{let f=p.target.files[0];if(p.target.value="",!!f)try{await a(f)}catch(h){s(h.message,!0)}})}function c(d,p){let f=$$(p);if(!f||!o)return;let h=document.createElement("button");h.type="button",h.className="outline apply-requirements",h.textContent="\u4FDD\u5B58\u4E3A\u8BFB\u8005\u6863\u6848",h.onclick=()=>o(f),d.append(h)}return{bind:l,importFile:a,appendReaderAction:c}}function Dv({api:t,getPlan:e,confirm:n,describePlan:r}){return async s=>{let o={job_id:s.id,use_current_model:!0};if(s.kind==="learn"){let i=e();if(!i||!n(`\u6309\u5F53\u524D\u6A21\u578B\u65B0\u5EFA\u5B66\u4E60\u5C1D\u8BD5\uFF0C\u4FDD\u7559\u539F\u4EFB\u52A1\u4E0E\u53CD\u9988\u3002
|
|
252
|
+
`).filter(S=>S.trim())){let S=k.indexOf("=");if(S<1)throw Error("\u6BCF\u884C\u73AF\u5883\u53D8\u91CF\u8BF7\u4F7F\u7528 NAME=VALUE \u683C\u5F0F\u3002");v[k.slice(0,S).trim()]=k.slice(S+1)}b.secrets={env:v}}return await e("connectors/save",b),a.reset(),a.hidden=!0,s=null,await f(),"\u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF0C\u53EF\u6D4B\u8BD5\u6216\u542F\u7528\u8FDE\u63A5\u3002"})},l("transport").onchange=c,i("[data-new]").onclick=()=>d(),i("[data-cancel]").onclick=()=>{a.reset(),a.hidden=!0,s=null},i("[data-refresh]").onclick=()=>h(f,"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u72B6\u6001\u2026"),{refresh:()=>h(f,"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u72B6\u6001\u2026")}}function T$(t,e,n,r){let s=[];for(let[i,a]of e){if(!a.resources.size&&!a.tools.size)continue;let l=t.find(c=>c.id===i);if(!l?.enabled||l.state!=="connected"||[...a.resources].some(c=>!l.capabilities?.resources?.some(d=>d.uri===c))||[...a.tools].some(c=>!l.capabilities?.tools?.some(d=>d.name===c)))throw Error("\u5DF2\u9009\u8FDE\u63A5\u5668\u6216\u6750\u6599\u4E0D\u518D\u53EF\u7528\uFF0C\u8BF7\u5237\u65B0\u5E76\u91CD\u65B0\u9009\u62E9")}for(let i of t){if(!i.enabled||i.state!=="connected")continue;let a=e.get(i.id);if(!a)continue;let l=(i.capabilities?.resources||[]).map(d=>d.uri).filter(d=>a.resources.has(d)),c=(i.capabilities?.tools||[]).map(d=>d.name).filter(d=>a.tools.has(d));(l.length||c.length)&&s.push({connector_id:i.id,resources:l,tools:c})}if(!s.length)return null;if(!Number.isInteger(n)||n<1||n>1e3)throw Error("\u8FDE\u63A5\u5668\u8C03\u7528\u6B21\u6570\u987B\u4E3A 1\u20131000 \u7684\u6574\u6570");if(!Number.isInteger(r)||r<1||r>1073741824)throw Error("\u8FDE\u63A5\u5668\u6750\u6599\u9884\u7B97\u987B\u4E3A 1\u20131024 MiB");let o=Math.max(...t.filter(i=>s.some(a=>a.connector_id===i.id)).map(i=>i.max_response_bytes||0));if(r<o)throw Error("\u6750\u6599\u9884\u7B97\u4E0D\u80FD\u5C0F\u4E8E\u6240\u9009\u8FDE\u63A5\u5668\u7684\u5355\u6B21\u54CD\u5E94\u4E0A\u9650");return{selections:s,max_calls:n,max_total_bytes:r}}function Ev(t,e){let n=new Map,r=[],s=!1,o=!1;t.innerHTML='<details><summary>\u672C\u8F6E\u8FDE\u63A5\u5668\u6750\u6599\uFF08\u53EF\u9009\uFF09</summary><p class="help">\u9009\u62E9\u5141\u8BB8 BriefLoop \u8BFB\u53D6\u7684\u6750\u6599\u548C\u8C03\u7528\u7684\u5DE5\u5177\u3002\u8054\u7F51\u5F00\u5173\u5355\u72EC\u63A7\u5236\u516C\u5F00\u641C\u7D22\u3002</p><button type="button" class="outline" data-refresh>\u5237\u65B0\u8FDE\u63A5\u5668</button><p data-status role="status"></p><div data-catalog></div><div class="row"><label>\u8C03\u7528\u6B21\u6570\u4E0A\u9650<input type="number" data-calls min="1" max="1000" step="1" value="20"></label><label>\u6750\u6599\u603B\u91CF\u4E0A\u9650\uFF08MiB\uFF09<input type="number" data-bytes min="1" max="1024" step="1" value="20"></label></div><p class="help">\u4EC5\u52FE\u9009\u9879\u6388\u4E88\u672C\u8F6E\u4EFB\u52A1\uFF1B\u672A\u52FE\u9009\u65F6\u4E0D\u4F7F\u7528\u8FDE\u63A5\u5668\u3002\u8BFB\u53D6\u6210\u529F\u7684\u6750\u6599\u4F1A\u51FA\u73B0\u5728\u62A5\u544A\u6765\u6E90\u4E2D\u3002</p></details>';let i=c=>t.querySelector(c);function a(){let c=r.filter(d=>d.enabled);i("[data-catalog]").innerHTML=c.map(d=>{let p=n.get(d.id),f=d.capabilities||{},h=d.state==="connected";return`<fieldset><legend>${w(d.name||d.id)} \xB7 ${h?"\u5DF2\u8FDE\u63A5":"\u5C1A\u672A\u8FDE\u63A5"}</legend>${h?"":'<p class="help">\u8BF7\u5148\u5728\u8BBE\u7F6E\u4E2D\u542F\u7528\u5E76\u8FDE\u63A5\uFF0C\u518D\u5237\u65B0\u3002</p>'}${(f.resources||[]).map(m=>`<label class="check"><input type="checkbox" data-connector="${w(d.id)}" data-kind="resources" data-item="${w(m.uri)}" ${p?.resources.has(m.uri)?"checked":""}>${w(m.name||m.uri)}</label>`).join("")}${(f.tools||[]).map(m=>`<label class="check"><input type="checkbox" data-connector="${w(d.id)}" data-kind="tools" data-item="${w(m.name)}" ${p?.tools.has(m.name)?"checked":""}>${w(m.title||m.name)}${m.annotations?.readOnlyHint===!0?"\uFF08\u58F0\u660E\u53EA\u8BFB\uFF09":"\uFF08\u53EF\u80FD\u4FEE\u6539\u5916\u90E8\u6570\u636E\uFF0C\u8BF7\u786E\u8BA4\u7528\u9014\uFF09"}</label>`).join("")}${h&&!f.resources?.length&&!f.tools?.length?'<p class="help">\u672A\u63D0\u4F9B\u53EF\u9009\u6750\u6599\u6216\u5DE5\u5177\u3002</p>':""}</fieldset>`}).join("")||'<p class="help">\u6CA1\u6709\u5DF2\u542F\u7528\u7684\u8FDE\u63A5\u5668\u3002\u53EF\u5728\u8BBE\u7F6E \u2192 \u6570\u636E\u8FDE\u63A5\u5668\u4E2D\u6DFB\u52A0\u3002</p>',t.querySelectorAll("[data-item]").forEach(d=>d.onchange=()=>{let{connector:p,kind:f,item:h}=d.dataset;n.has(p)||n.set(p,{resources:new Set,tools:new Set});let m=n.get(p)[f];d.checked?m.add(h):m.delete(h)})}async function l(){if(!s){s=!0,i("[data-refresh]").disabled=!0,i("[data-status]").textContent="\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u5668\u2026";try{r=(await e("connectors")).connectors||[],o=!1,a(),i("[data-status]").textContent=""}catch(c){o=!0,i("[data-status]").textContent="\u65E0\u6CD5\u8BFB\u53D6\u8FDE\u63A5\u5668\uFF1A"+c.message}finally{s=!1,i("[data-refresh]").disabled=!1}}}return i("[data-refresh]").onclick=l,{refresh:l,selection(){if(s)throw Error("\u8FDE\u63A5\u5668\u76EE\u5F55\u6B63\u5728\u5237\u65B0\uFF0C\u8BF7\u7A0D\u540E\u63D0\u4EA4");if(o&&[...n.values()].some(c=>c.resources.size||c.tools.size))throw Error("\u8FDE\u63A5\u5668\u76EE\u5F55\u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u540E\u63D0\u4EA4");return T$(r,n,Number(i("[data-calls]").value),Number(i("[data-bytes]").value)*1048576)}}}function Av({api:t,notice:e}){let n=null,r=null,s=!1,o="check",i=new Map;function a(g,y,b){u(`${g}-title`).textContent=y,u(g).textContent=b?.state==="loaded"?b.notes:b?.state==="empty"?"\u8BE5\u7248\u672C\u672A\u63D0\u4F9B\u53D1\u5E03\u8BF4\u660E\u3002":b?.message||"\u6B63\u5728\u8BFB\u53D6\u53D1\u5E03\u8BF4\u660E\u2026"}function l(g){let y=r?.version,b=g?.currentAppVersion||y;y&&a("app-update-current-notes",`${y===b?"\u5F53\u524D\u7248\u672C":"\u5F53\u524D\u540E\u7AEF"} v${y} \u7684\u6539\u52A8`,i.get(y)||r.release_notes);let v=g?.releaseVersion,k=v&&g?.state!=="checking"&&!(g?.state==="error"&&(g.error?.operation||o)==="check");u("app-update-latest-version").textContent=k?`\u6700\u8FD1\u68C0\u67E5\u7684\u53D1\u5E03\u7248\u672C v${v}`:g?.state==="checking"?"\u6B63\u5728\u68C0\u67E5\u53EF\u7528\u7248\u672C\u2026":g?.state==="error"?"\u53EF\u7528\u7248\u672C\u68C0\u67E5\u672A\u5B8C\u6210":"\u5C1A\u672A\u68C0\u67E5\u53EF\u7528\u7248\u672C",u("app-update-notes-box").hidden=!k||v===y,k&&v!==y&&a("app-update-notes",`${["available","downloading","downloaded"].includes(g.state)?"\u53EF\u7528\u66F4\u65B0":"\u53D1\u5E03\u7248\u672C"} v${v} \u7684\u6539\u52A8`,g.source==="local-test"?{state:g.notes?"loaded":"empty",notes:g.notes}:i.get(v))}async function c(g,y=!1){if(!(!g||i.get(g)?.state==="loading"||!y&&i.has(g))){i.set(g,{state:"loading"}),l(n);try{let b=await t("software-release-notes",{version:g});i.set(g,b?.version===g?b:{state:"error",message:"\u53D1\u5E03\u8BF4\u660E\u7248\u672C\u4E0D\u5339\u914D\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u3002"})}catch{i.set(g,{state:"error",message:"\u65E0\u6CD5\u83B7\u53D6\u8BE5\u7248\u672C\u7684\u53D1\u5E03\u8BF4\u660E\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u540E\u91CD\u8BD5\u3002"})}l(n)}}function d(g=!1){let y=r?.version;y&&!r.release_notes&&c(y,g);let b=n?.releaseVersion;b&&b!==y&&n.source!=="local-test"&&c(b,g)}function p(g=n){if(!u("settings-view-updates"))return;let b=typeof window.briefloopDesktop?.updateStatus=="function";u("app-update-controls").hidden=!1,u("app-update-version").textContent=b?`\u5F53\u524D App v${g?.currentAppVersion||"\u8BFB\u53D6\u4E2D"}`:r?`\u5F53\u524D\u7248\u672C v${r.version}`:"\u6B63\u5728\u8BFB\u53D6\u5B9E\u9645\u8FD0\u884C\u7248\u672C\u2026";let v={desktop:"\u684C\u9762\u7BA1\u7406\u7684\u540E\u7AEF \xB7 App \u4E0E CLI \u5171\u7528",source:"\u5F00\u53D1\u6E90\u7801",pip:"Python \u5305\u5B89\u88C5",pipx:"pipx \u5B89\u88C5",uv:"uv \u5DE5\u5177\u5B89\u88C5"};u("app-update-installation").textContent=r?`${v[r.installation]||"\u72EC\u7ACB\u5B89\u88C5"} \xB7 \u540E\u7AEF v${r.version}${r.build?` \xB7 \u6784\u5EFA ${r.build}`:""}`:"",u("app-update-command").hidden=!r?.update_command,u("app-update-command").textContent=r?.update_command||"",u("app-update-source").textContent=g?.source==="local-test"?"\u672C\u5730\u6D4B\u8BD5\u66F4\u65B0\u6E90 \xB7 \u4EC5\u9A8C\u8BC1\u6D41\u7A0B\uFF0C\u4E0D\u4EE3\u8868\u5B98\u65B9\u53D1\u5E03":b?"\u5B98\u65B9\u7A33\u5B9A\u6765\u6E90\uFF1AStahl-G/briefloop \xB7 GitHub Releases":"\u7248\u672C\u68C0\u67E5\uFF1APyPI \xB7 \u53D1\u5E03\u8BF4\u660E\uFF1AGitHub Releases",u("app-update-test-source").hidden=g?.source!=="local-test";let k=g?.source==="local-test"&&g?.reinstall===!0;u("app-update-guidance").textContent=b?g?.installMode==="zip"?"\u5B89\u88C5\u524D\u4F1A\u4FDD\u5B58\u7F16\u8F91\u5E76\u5904\u7406\u5FD9\u4EFB\u52A1\u3002\u9000\u51FA\u540E\uFF0C\u5728 Finder \u4E2D\u5C06\u65B0\u7248 App \u62D6\u5165\u201C\u5B89\u88C5\u4F4D\u7F6E\u201D\u5E76\u66FF\u6362\uFF0C\u518D\u6253\u5F00 BriefLoop\uFF1B\u5DE5\u4F5C\u533A\u4FDD\u7559\u3002":g?.installMode==="dmg"?`\u5B89\u88C5\u524D\u4F1A\u4FDD\u5B58\u7F16\u8F91\u5E76\u5904\u7406\u5FD9\u4EFB\u52A1\uFF0C\u518D\u9000\u51FA\u5E76\u6253\u5F00 DMG\uFF1B\u8BF7\u5728 Finder \u4E2D${k?"\u91CD\u65B0\u5B89\u88C5\u5F53\u524D\u7248\u672C":"\u624B\u52A8\u5B89\u88C5\u65B0\u7248\u672C"}\u3002`:"\u5B89\u88C5\u524D\u4F1A\u4FDD\u5B58\u7F16\u8F91\u5E76\u5904\u7406\u5FD9\u4EFB\u52A1\uFF0C\u518D\u9000\u51FA\u5E76\u4EA4\u7ED9\u5B89\u88C5\u5668\u66F4\u65B0\uFF1B\u5DE5\u4F5C\u533A\u4FDD\u7559\u3002":r?.guidance||"\u6B63\u5728\u8BFB\u53D6\u5B89\u88C5\u6765\u6E90\u2026",u("app-update-guidance").hidden=b&&!["available","downloading","downloaded","error"].includes(g?.state);let S=g?.error?.operation||(g?.error?.code==="open_failed"?"install":o),T={idle:"\u5C1A\u672A\u68C0\u67E5\u66F4\u65B0",checking:"\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026",available:"\u53D1\u73B0\u53EF\u7528\u66F4\u65B0",current:"\u5F53\u524D App \u65E0\u9700\u66F4\u65B0",downloading:"\u6B63\u5728\u4E0B\u8F7D\u66F4\u65B0\u2026",downloaded:"\u4E0B\u8F7D\u5B8C\u6210\uFF0C\u7B49\u5F85\u5B89\u88C5",error:{check:"\u66F4\u65B0\u68C0\u67E5\u5931\u8D25\uFF08\u5F53\u524D\u5B89\u88C5\u4E0D\u53D7\u5F71\u54CD\uFF09",download:"\u66F4\u65B0\u5305\u4E0B\u8F7D\u672A\u5B8C\u6210",install:"\u66F4\u65B0\u5B89\u88C5\u672A\u5B8C\u6210"}[S]||"\u66F4\u65B0\u68C0\u67E5\u5931\u8D25\uFF08\u5F53\u524D\u5B89\u88C5\u4E0D\u53D7\u5F71\u54CD\uFF09"},$=`\u91CD\u65B0\u5B89\u88C5\u5F53\u524D App v${g?.currentAppVersion||""}`;u("app-update-status").textContent=b?k&&g?.state==="available"?$:(T[g?.state]||"\u6B63\u5728\u8BFB\u53D6 App \u7248\u672C\u2026")+(g?.state==="error"&&S==="check"?"":k?` \xB7 ${$}`:g?.releaseVersion?` \xB7 v${g.releaseVersion}`:""):{idle:"\u5C1A\u672A\u68C0\u67E5\u66F4\u65B0",checking:"\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026",available:`\u53D1\u73B0\u53EF\u7528\u540E\u7AEF\u7248\u672C v${g?.releaseVersion||""}`,current:"\u5F53\u524D\u540E\u7AEF\u5DF2\u662F PyPI \u6700\u65B0\u7A33\u5B9A\u7248",ahead:`\u5F53\u524D\u540E\u7AEF\u9AD8\u4E8E PyPI \u5DF2\u53D1\u5E03\u7248\u672C v${g?.releaseVersion||""}`,error:"\u7248\u672C\u68C0\u67E5\u672A\u5B8C\u6210"}[g?.state||"idle"]||"\u5C1A\u672A\u68C0\u67E5\u66F4\u65B0",u("app-update-download").textContent=k?"\u4E0B\u8F7D\u5F53\u524D\u7248\u672C\u5B89\u88C5\u5305":"\u4E0B\u8F7D\u66F4\u65B0";let A=s||["checking","downloading"].includes(g?.state);u("app-update-check").disabled=A,u("app-update-download").hidden=!b||g?.state!=="available",u("app-update-download").disabled=A,u("app-update-install").hidden=!b||g?.state!=="downloaded",u("app-update-install").disabled=A,u("app-update-install").textContent=g?.installMode==="zip"?"\u4FDD\u5B58\u5E76\u9000\u51FA\uFF0C\u6253\u5F00\u5B89\u88C5\u6587\u4EF6\u5939":g?.installMode==="dmg"?"\u4FDD\u5B58\u5E76\u6253\u5F00 DMG":"\u4FDD\u5B58\u5E76\u5B89\u88C5\u66F4\u65B0",u("app-update-retry").hidden=g?.state!=="error"||!g?.retryable,u("app-update-retry").disabled=A,u("app-update-error").hidden=!g?.error,u("app-update-error").textContent=g?.error?.message||"";let N=g?.progress;u("app-update-progress-box").hidden=!N,u("app-update-progress").value=N?.percent||0,u("app-update-progress-text").textContent=N?`${Math.round(N.percent||0)}% \xB7 ${(Math.max(0,N.transferred||0)/1048576).toFixed(1)} / ${(Math.max(0,N.total||0)/1048576).toFixed(1)} MiB`:"",u("app-update-progress-detail").textContent="",N?.mode==="differential"?u("app-update-progress-detail").textContent=`\u589E\u91CF\u4E0B\u8F7D\uFF0C\u590D\u7528 ${(Math.max(0,N.reused||0)/1048576).toFixed(1)} MiB`:N?.mode==="full"&&(u("app-update-progress-detail").textContent={no_baseline:"\u65E0\u6709\u6548\u57FA\u51C6\u7F13\u5B58\uFF0C\u5B8C\u6574\u4E0B\u8F7D\u5E76\u5EFA\u7ACB\u7F13\u5B58",little_reuse:"\u672C\u6B21\u53EF\u590D\u7528\u5185\u5BB9\u8F83\u5C11\uFF0C\u5B8C\u6574\u4E0B\u8F7D",range_unavailable:"\u4E0B\u8F7D\u670D\u52A1\u4E0D\u652F\u6301\u5206\u6BB5\u4F20\u8F93\uFF0C\u5B8C\u6574\u4E0B\u8F7D",range_size:"\u5206\u6BB5\u54CD\u5E94\u4E0D\u5B8C\u6574\uFF0C\u91CD\u65B0\u5B8C\u6574\u4E0B\u8F7D",delta_hash:"\u589E\u91CF\u91CD\u5EFA\u6821\u9A8C\u5931\u8D25\uFF0C\u91CD\u65B0\u5B8C\u6574\u4E0B\u8F7D",differential_unavailable:"\u589E\u91CF\u4E0D\u53EF\u7528\uFF0C\u5DF2\u56DE\u9000\u5B8C\u6574\u4E0B\u8F7D",blockmap_unavailable:"\u6B64\u7248\u672C\u65E0\u53EF\u7528\u589E\u91CF\u4FE1\u606F\uFF0C\u5B8C\u6574\u4E0B\u8F7D"}[N.fallback]||"\u5B8C\u6574\u4E0B\u8F7D"),l(g)}async function f(){p();try{r=await t("software-version"),typeof window.briefloopDesktop?.updateStatus=="function"&&(n=await window.briefloopDesktop.updateStatus()),p(),d()}catch{e("\u65E0\u6CD5\u8BFB\u53D6 App \u66F4\u65B0\u72B6\u6001\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u8BBE\u7F6E\u3002",!0)}}async function h(g){if(s)return;let y=window.briefloopDesktop;if(typeof y?.updateStatus!="function"){if(g!=="check")return;s=!0,n={state:"checking"},p();try{n=await t("software-update-check",{}),r=n}catch(b){n={state:"error",retryable:!0,error:{message:b.message||"\u7248\u672C\u68C0\u67E5\u672A\u5B8C\u6210"}}}finally{s=!1,p(),d(g==="check")}return}s=!0,o=g,p();try{if(g==="install"){let b=await y.installUpdate();b?.cancelled&&e("\u5DF2\u4FDD\u7559\u5F53\u524D\u5DE5\u4F5C\u533A\uFF0C\u66F4\u65B0\u5305\u4ECD\u53EF\u7A0D\u540E\u5B89\u88C5\u3002"),b?.cancelled&&(n=await y.updateStatus())}else n=await(g==="download"?y.downloadUpdate():y.checkForUpdates())}catch(b){e(b.message||"\u66F4\u65B0\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u8BF7\u91CD\u8BD5\u3002",!0);try{n=await y.updateStatus()}catch{}}finally{s=!1,p(),d(g==="check")}}function m(){u("settings-view-updates")&&(u("app-update-check").onclick=()=>h("check"),u("app-update-download").onclick=()=>h("download"),u("app-update-install").onclick=()=>h("install"),u("app-update-retry").onclick=()=>h(n?.error?.code==="open_failed"?"install":(n?.error?.operation||o)==="install"?"download":n?.error?.operation||o),window.briefloopDesktop?.onUpdateStatus?.(g=>{n=g,p(),d()}),p())}return{init:m,renderAppUpdates:p,refreshAppUpdates:f,runAppUpdate:h}}var E$=[["taste","\u5199\u6CD5\u504F\u597D","\u539F\u7A3F\u6CA1\u9519\uFF0C\u53EA\u662F\u6211\u60F3\u8FD9\u6837\u5199"],["fact_correction","\u4E8B\u5B9E\u7EA0\u9519","\u539F\u7A3F\u7684\u6570\u5B57\u3001\u4E8B\u5B9E\u6216\u53E3\u5F84\u4E0D\u5BF9"],["reader_specific","\u53EA\u9488\u5BF9\u8FD9\u4F4D\u8BFB\u8005","\u6362\u4E00\u4F4D\u8BFB\u8005\u672A\u5FC5\u8981\u8FD9\u6837\u6539"]];function _s(t,e=160){let n=String(t||"").replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e)+"\u2026":n}function $v(t){let e=t.op==="delete"?`\u5220\u6389\u4E86\uFF1A<q>${w(_s(t.before))}</q>`:t.op==="insert"?`\u52A0\u5165\u4E86\uFF1A<q>${w(_s(t.after))}</q>`:`\u628A <q>${w(_s(t.before))}</q> \u6539\u6210 <q>${w(_s(t.after))}</q>`;return`<div class="revision-question" data-edit="${w(t.id)}"><p class="revision-question-where">${w(t.heading||"\u6B63\u6587")}</p><p>${e}</p><p class="help">\u4E3A\u4EC0\u4E48\u8FD9\u6837\u6539\uFF1F</p><div class="revision-question-choices">${E$.map(([n,r,s])=>`<button type="button" class="outline" data-answer="${n}" title="${w(s)}">${w(r)}</button>`).join("")}<button type="button" class="ghost" data-answer="skip" title="\u8FD9\u5904\u6539\u52A8\u4E0D\u8FDB\u5165\u5B66\u4E60">\u8DF3\u8FC7</button></div></div>`}function Rv({api:t,action:e,$:n=u}){function r(o){o.querySelectorAll("[data-answer]").forEach(i=>i.onclick=()=>{let a=i.closest("[data-edit]").dataset.edit,l=i.dataset.answer;e(()=>t("revision-answer",{edit_id:a,category:l}),l==="skip"?"\u5DF2\u8DF3\u8FC7\uFF0C\u8FD9\u5904\u6539\u52A8\u4E0D\u8FDB\u5165\u5B66\u4E60":l==="fact_correction"?"\u5DF2\u8BB0\u4E3A\u4E8B\u5B9E\u7EA0\u9519\uFF0C\u4E0D\u4F5C\u4E3A\u5199\u4F5C\u7ECF\u9A8C":l==="reader_specific"?"\u8BFB\u8005\u7279\u5B9A\u6539\u52A8\u5DF2\u4FDD\u7559\uFF1B\u672A\u7ED1\u5B9A\u8BFB\u8005\u65F6\u4FDD\u6301\u672A\u786E\u8BA4\uFF0C\u4E0D\u8FDB\u5165\u5168\u5C40\u5B66\u4E60":"\u5DF2\u8BB0\u4E0B\uFF0C\u4F1A\u8FDB\u5165\u4E0B\u4E00\u6B21\u5B66\u4E60")})}function s(o){let i=o?.questions||[],a=o?.unconfirmed||[],l=o?.fact_corrections||[],c=n("revision-questions");c&&(c.hidden=!i.length&&!a.length,c.innerHTML=i.length?`<h3>${i.length} \u5904\u6539\u52A8\u9700\u8981\u4F60\u786E\u8BA4\u539F\u56E0</h3><p class="help">\u53EA\u95EE\u62FF\u4E0D\u51C6\u3001\u6539\u52A8\u8F83\u5927\u7684\u5730\u65B9\u3002\u4E8B\u5B9E\u7EA0\u9519\u4E0D\u4F1A\u5199\u8FDB\u5199\u4F5C\u6280\u5DE7\uFF1B\u8DF3\u8FC7\u7684\u6539\u52A8\u4E0D\u8FDB\u5165\u5B66\u4E60\u3002</p>${i.map($v).join("")}`:"",a.length&&(c.innerHTML+=`<details><summary>${a.length} \u5904\u672A\u786E\u8BA4\u6539\u52A8 \xB7 \u4E0D\u8FDB\u5165\u5B66\u4E60</summary><p class="help">\u65E0\u9700\u9010\u6761\u5904\u7406\u3002\u4F60\u4E5F\u53EF\u4EE5\u5C55\u5F00\u540E\u786E\u8BA4\u6539\u52A8\u539F\u56E0\u3002</p>${a.map($v).join("")}</details>`),r(c));let d=n("fact-corrections");d&&(d.innerHTML=l.length?l.map(f=>`<div class="fact-correction"><small>${w(f.heading||"\u6B63\u6587")} \xB7 ${f.decided_by==="user"?"\u4F60\u786E\u8BA4":"Evaluator \u5224\u65AD"}</small><p><del>${w(_s(f.before,120))}</del> \u2192 ${w(_s(f.after,120))}</p></div>`).join(""):'<p class="help">\u8FD8\u6CA1\u6709\u4E8B\u5B9E\u7EA0\u9519\u8BB0\u5F55\u3002</p>');let p=n("revision-questions-hint");p&&(p.hidden=!i.length,p.textContent=i.length?`\u6709 ${i.length} \u5904\u6539\u52A8\u7B49\u4F60\u786E\u8BA4\u539F\u56E0\uFF0C\u5728\u201C\u7ECF\u9A8C\u201D\u9875\u5904\u7406\u3002`:"")}return{render:s}}function Nv({$:t,esc:e,getState:n,openLearning:r}){let s=l=>{try{return typeof l=="string"?JSON.parse(l):l||{}}catch{return{}}},o={queued:"\u6392\u961F\u6574\u7406",running:"\u6B63\u5728\u6574\u7406",complete:"\u5DF2\u6574\u7406",failed:"\u6574\u7406\u5931\u8D25",interrupted:"\u6574\u7406\u4E2D\u65AD",cancelled:"\u6574\u7406\u5DF2\u505C\u6B62"};function i(){let l=n()||{},c=new Map((l.jobs||[]).filter(d=>d.kind==="learn").map(d=>[d.id,d]));return(l.feedback||[]).map(d=>{let p=s(d.data),f=c.get(d.batch_id),h="learning_status"in d?d.learning_status:f?.status,m=d.batch_id?o[h]||"\u6574\u7406\u72B6\u6001\u672A\u77E5":"\u5F85\u6574\u7406",g=d.kind==="revision"||d.kind==="revision_edit",y=p.summary||p.text||p.verified_reason||(g?"\u6539\u7A3F\u8BB0\u5F55":"\u53CD\u9988\u8BB0\u5F55"),b=g?"\u6539\u7A3F":d.kind==="review_correction"?"\u6838\u67E5\u4FEE\u8BA2":p.learning_intent==="explicit_requirement"?"\u5FC5\u987B\u4FDD\u7559\u7684\u8981\u6C42":"\u53CD\u9988";return{id:d.id,text:y,kind:b,status:m,pending:!d.batch_id,created:d.created}})}function a(){let l=i(),c=n()?.feedback_summary,d=c?.total??l.length,p=c?.pending??l.filter(y=>y.pending).length,f=d>l.length,h=c?`\u5171 ${d} \u6761\uFF0C\u5176\u4E2D ${p} \u6761\u5F85\u6574\u7406\u3002`:`\u6700\u8FD1 ${d} \u6761\uFF0C\u5176\u4E2D ${p} \u6761\u5F85\u6574\u7406\u3002`,m=t("feedback-list");m&&(m.innerHTML=`<h2>\u5DF2\u4FDD\u5B58\u7684\u53CD\u9988</h2><p class="help">${d?h:"\u8FD8\u6CA1\u6709\u4FDD\u5B58\u7684\u53CD\u9988\u3002"}${f?`\u4EC5\u663E\u793A\u6700\u8FD1 ${l.length} \u6761\u3002`:""}\u5F85\u6574\u7406\u7684\u53CD\u9988\u5728\u4F60\u70B9\u201C\u73B0\u5728\u6574\u7406\u6210\u7ECF\u9A8C\u201D\u6216\u5F00\u542F\u81EA\u52A8\u5B66\u4E60\u540E\uFF0C\u7531 Wiki \u7EF4\u62A4\u8005\u6574\u7406\uFF1B\u4E8B\u5B9E\u7EA0\u9519\u53EA\u8BB0\u5F55\uFF0C\u4E0D\u5199\u8FDB\u5199\u4F5C\u6280\u5DE7\u3002</p>`+(l.length?`<ul class="feedback-items">${l.map(y=>`<li><span class="chip">${e(y.status)}</span> <span class="help">${e(y.kind)} \xB7 ${e((y.created||"").slice(0,16).replace("T"," "))}</span><p>${e(y.text)}</p></li>`).join("")}</ul>`:""));let g=t("feedback-saved-hint");g&&(g.hidden=!d,g.innerHTML=d?`${c?"\u5DF2\u4FDD\u5B58":"\u6700\u8FD1\u5DF2\u4FDD\u5B58"} ${d} \u6761\u53CD\u9988${p?`\uFF0C${p} \u6761\u5F85\u6574\u7406`:""} \xB7 <button type="button" class="outline" data-feedback-open>\u67E5\u770B\u53CD\u9988</button>`:"",g.querySelector("[data-feedback-open]")?.addEventListener("click",r))}return{render:a,rows:i}}function Lv({api:t,action:e,$:n=u}){let r=null,s=[],o=!1;function i(h,m){let g=n("reader-select");if(!g)return;let y=o?g.value:m??g.value;g.innerHTML='<option value="">\u4E0D\u6307\u5B9A\u8BFB\u8005\u6863\u6848</option>'+h.map(b=>`<option value="${w(b.id)}">${w(b.name)}</option>`).join(""),g.value=h.some(b=>b.id===y)?y:"",o=!0}function a(){let h=n("reader-select"),m=h?.form?.elements?.audience;if(!h||!m)return;let g=s.find(y=>y.id===h.value);g&&(!m.value.trim()||m.value==="\u81EA\u5DF1"||s.some(y=>y.name===m.value))&&(m.value=g.name)}function l(h){return`<div class="reader-profile" data-reader="${w(h.id)}"><div class="reader-profile-head"><strong>${w(h.name)}</strong><span>${h.skill_id?"\u5386\u53F2\u4E13\u5C5E\u6280\u80FD "+w(h.skill_id)+"\uFF08\u6682\u4E0D\u542F\u7528\uFF09":"\u4F7F\u7528\u5DE5\u4F5C\u533A\u6280\u80FD"}</span></div>${h.decisions?`<p><small>\u7528\u62A5\u544A\u505A\u4EC0\u4E48\u51B3\u5B9A</small>${w(h.decisions)}</p>`:""}${h.preferences?`<p><small>\u504F\u597D</small>${w(h.preferences)}</p>`:""}<div class="reader-profile-actions"><button type="button" class="outline" data-reader-edit>\u7F16\u8F91</button>${h.skill_id?'<button type="button" class="outline" data-reader-unbind>\u6E05\u9664\u5386\u53F2\u7ED1\u5B9A</button>':""}<button type="button" class="ghost" data-reader-archive>\u5F52\u6863</button></div>${h.wiki?`<details><summary>\u5386\u53F2\u8BFB\u8005\u7ECF\u9A8C\uFF08\u6682\u4E0D\u542F\u7528\uFF09</summary><pre class="reader-wiki">${w(h.wiki)}</pre></details>`:""}</div>`}function c(h){let m=n("reader-profiles");m&&(m.innerHTML=h.length?h.map(l).join(""):'<p class="help">\u8FD8\u6CA1\u6709\u8BFB\u8005\u6863\u6848\u3002\u5199\u7ED9\u56FA\u5B9A\u8BFB\u8005\u7684\u62A5\u544A\uFF0C\u5EFA\u4E00\u4E2A\u6863\u6848\u540E\uFF0C\u62A5\u544A\u4F1A\u8BB0\u5F55\u7528\u9014\u4E0E\u504F\u597D\u3002\u8BFB\u8005\u7279\u5B9A\u6539\u52A8\u5148\u4FDD\u7559\uFF0C\u7B49\u5F85\u9002\u7528\u6761\u4EF6\u4E0E\u8DE8\u8BFB\u8005\u9A8C\u8BC1\u3002</p>',m.querySelectorAll("[data-reader]").forEach(g=>{let y=h.find(v=>v.id===g.dataset.reader);g.querySelector("[data-reader-edit]").onclick=()=>d(y),g.querySelector("[data-reader-archive]").onclick=()=>e(()=>t("reader-archive",{id:y.id}),"\u8BFB\u8005\u6863\u6848\u5DF2\u5F52\u6863\uFF0C\u65E7\u62A5\u544A\u4FDD\u7559\u539F\u6837");let b=g.querySelector("[data-reader-unbind]");b&&(b.onclick=()=>e(()=>t("reader-skill",{reader_id:y.id,skill_id:null}),"\u5DF2\u6E05\u9664\u5386\u53F2\u4E13\u5C5E\u6280\u80FD\u7ED1\u5B9A"))}))}function d(h=null){let m=n("reader-form");m&&(r=h?.id||null,m.hidden=!1,m.elements.name.value=h?.name||"",m.elements.decisions.value=h?.decisions||"",m.elements.preferences.value=h?.preferences||"",m.querySelector("[data-reader-form-title]").textContent=h?"\u7F16\u8F91\u8BFB\u8005\u6863\u6848":"\u65B0\u5EFA\u8BFB\u8005\u6863\u6848",m.elements.name.focus?.())}function p(){let h=n("reader-add");h&&(h.onclick=()=>d());let m=n("reader-form");if(m){m.onsubmit=b=>{b.preventDefault();let v={name:m.elements.name.value,decisions:m.elements.decisions.value,preferences:m.elements.preferences.value,...r?{id:r}:{}};e(async()=>{await t("reader-save",v),m.hidden=!0,r=null},"\u8BFB\u8005\u6863\u6848\u5DF2\u4FDD\u5B58")};let y=m.querySelector("[data-reader-cancel]");y&&(y.onclick=()=>{m.hidden=!0,r=null})}let g=n("reader-select");g&&g.addEventListener("change",a)}function f(h=[],{readerId:m}={}){s=h,i(h,m),c(h)}return{render:f,bind:p,openForm:d}}function Ov(t){if(!t)return"";let e=t.status==="untracked"&&!t.registration_conflict,n=e?"untracked":"pending",r=e?"\u65E0\u53EF\u8FFD\u8E2A\u6539\u52A8":"\u5F85\u9A8C\u6536",s=e?["\u6CA1\u6709\u53EF\u8FFD\u8E2A\u7684\u6539\u52A8"]:["\u521D\u6B65\u89C2\u5BDF\uFF0C\u672A\u9A8C\u6536",`\u5B8C\u6574\u6838\u9A8C ${t.observed||0} \u4EFD \xB7 \u672A\u77E5 ${t.unknown??t.reports??0} \u4EFD`];return t.flagged_reports&&s.push(`\u660E\u786E\u6807\u51FA\u590D\u53D1 ${t.repeats||0} \u6B21\uFF08${t.flagged_reports} \u4EFD\u62A5\u544A\uFF09`),t.excluded&&s.push(`\u8303\u56F4\u4E0D\u4E00\u81F4\uFF0C\u6392\u9664 ${t.excluded} \u4EFD`),t.registration_conflict&&s.push("\u540C\u4E00\u6280\u80FD\u5BF9\u5E94\u4E0D\u540C\u8BFB\u8005\u6216\u6279\u6B21\uFF0C\u7ED1\u5B9A\u5F85\u6F84\u6E05"),e||s.push(t.note||"\u5C1A\u672A\u5B8C\u6210\u5B8C\u6574\u590D\u53D1\u6838\u9A8C\u3001\u53CC\u6A21\u578B family \u6821\u51C6\u3001\u4EBA\u5DE5\u5206\u6B67\u5904\u7406\u4E0E\u7559\u51FA\u9A8C\u6536"),(t.legacy_status_corrected||["adopted","not_improving"].includes(t.status))&&s.push(t.legacy_note||"\u65E7\u81EA\u52A8\u72B6\u6001\u4E0D\u8BC1\u660E\u9A8C\u6536\uFF0C\u539F\u8BB0\u5F55\u4E0E\u6280\u80FD\u4FDD\u7559"),`<span class="skill-verification skill-verification-${w(n)}"><span class="tag">${w(r)}</span><small>${w(s.join(" \xB7 "))}</small></span>`}function A$(t){return`/discuss \u8FD9\u662F\u6211\u4EEC\u5DF2\u7ECF\u4EA4\u4ED8\u8FC7\u7684\u4E00\u671F\u62A5\u544A\u300A${t}\u300B\uFF08\u89C1\u9644\u4EF6\uFF09\u3002\u8BF7\u9605\u8BFB\u5B83\uFF0C\u53CD\u63A8\u8FD9\u4EFD\u5468\u671F\u62A5\u544A\u7684\u7B80\u62A5\u7EA6\u5B9A\uFF1A\u8BFB\u8005\u662F\u8C01\u3001\u8BFB\u5B8C\u8981\u505A\u4EC0\u4E48\u51B3\u5B9A\uFF1B\u6CBF\u7528\u7684\u7AE0\u8282\u7ED3\u6784\uFF1B\u6570\u5B57\u5355\u4F4D\u3001\u65F6\u95F4\u8303\u56F4\u4E0E\u6765\u6E90\u7B49\u53E3\u5F84\uFF1B\u6709\u660E\u786E\u4F9D\u636E\u7684\u7981\u533A\uFF08\u6CA1\u6709\u5199\u4E0D\u7B49\u4E8E\u7981\u6B62\uFF09\u3002\u5F80\u671F\u6570\u5B57\u4E0D\u662F\u672C\u671F\u4E8B\u5B9E\uFF1B\u5168\u90E8\u7EA6\u5B9A\u5148\u4F5C\u4E3A\u5F85\u786E\u8BA4\u5EFA\u8BAE\uFF0C\u770B\u4E0D\u51FA\u6765\u7684\u5217\u4E3A\u672A\u51B3\u9879\uFF0C\u4E0D\u8981\u731C\u3002\u6574\u7406\u597D\u540E\u7ED9\u51FA briefloop-requirements\uFF0C\u8BFB\u8005\u6E05\u695A\u65F6\u518D\u7ED9\u4E00\u4E2A briefloop-reader\u3002`}function $$(t){let e=/```briefloop-reader\s*([\s\S]*?)```/.exec(t||"");if(!e)return null;try{let n=JSON.parse(e[1].trim());return!n||typeof n.name!="string"||!n.name.trim()?null:{name:n.name.trim(),decisions:typeof n.decisions=="string"?n.decisions:"",preferences:typeof n.preferences=="string"?n.preferences:""}}catch{return null}}function Iv({api:t,uploadPayload:e,getUploadLimits:n,openChat:r,notice:s,saveReader:o,$:i=u}){async function a(d){let p=await t("import-previous",await e(d,n(),{}));return await r({text:A$(p.title),source_id:p.source_id}),s(p.tracked_changes?"\u5DF2\u5BFC\u5165\u5F80\u671F\u62A5\u544A\uFF1B\u5176\u4E2D\u7684 Word \u4FEE\u8BA2\u5DF2\u8BB0\u4E3A\u6539\u7A3F\uFF0C\u4E0B\u6B21\u5B66\u4E60\u65F6\u5206\u7C7B\u3002\u786E\u8BA4\u540E\u628A\u8BF7\u6C42\u53D1\u7ED9 BriefLoop\u3002":"\u5DF2\u5BFC\u5165\u5F80\u671F\u62A5\u544A\u3002\u786E\u8BA4\u540E\u628A\u8BF7\u6C42\u53D1\u7ED9 BriefLoop\uFF0C\u5B83\u4F1A\u53CD\u63A8\u7B80\u62A5\u7EA6\u5B9A\u3002"),p}function l(){let d=i("previous-report-file");d&&(d.onchange=async p=>{let f=p.target.files[0];if(p.target.value="",!!f)try{await a(f)}catch(h){s(h.message,!0)}})}function c(d,p){let f=$$(p);if(!f||!o)return;let h=document.createElement("button");h.type="button",h.className="outline apply-requirements",h.textContent="\u4FDD\u5B58\u4E3A\u8BFB\u8005\u6863\u6848",h.onclick=()=>o(f),d.append(h)}return{bind:l,importFile:a,appendReaderAction:c}}function Dv({api:t,getPlan:e,confirm:n,describePlan:r}){return async s=>{let o={job_id:s.id,use_current_model:!0};if(s.kind==="learn"){let i=e();if(!i||!n(`\u6309\u5F53\u524D\u6A21\u578B\u65B0\u5EFA\u5B66\u4E60\u5C1D\u8BD5\uFF0C\u4FDD\u7559\u539F\u4EFB\u52A1\u4E0E\u53CD\u9988\u3002
|
|
253
253
|
|
|
254
254
|
`+r(i)))return;o.confirm_plan=i.fingerprint}return t("resume",o)}}var Pv=["\u5546\u4E1A\u62A5\u544A","\u5238\u5546\u7814\u62A5","\u5B66\u672F\u8BBA\u6587","\u4F1A\u8BAE\u7EAA\u8981","\u5408\u540C","\u4E0A\u5E02\u516C\u53F8\u5E74\u62A5","\u653F\u5E9C\u516C\u6587","\u901A\u7528\u62A5\u544A","\u82F1\u6587\u901A\u7528\u62A5\u544A","\u82F1\u6587\u7814\u62A5"],mp={\u5546\u4E1A\u62A5\u544A:{desc:"\u9002\u7528\u4E8E\u5546\u4E1A\u5206\u6790\u3001\u5E02\u573A\u7814\u7A76\u7B49\u3002",icon:"briefcase",cat:"cat-business"},\u5238\u5546\u7814\u62A5:{desc:"\u9002\u7528\u4E8E\u8BC1\u5238\u7814\u7A76\u3001\u884C\u4E1A\u5206\u6790\u3002",icon:"chart",cat:"cat-markets"},\u5B66\u672F\u8BBA\u6587:{desc:"\u9002\u7528\u4E8E\u5B66\u672F\u7814\u7A76\u3001\u8BBA\u6587\u5199\u4F5C\u3002",icon:"book",cat:"cat-academic"},\u4F1A\u8BAE\u7EAA\u8981:{desc:"\u9002\u7528\u4E8E\u4F1A\u8BAE\u8BB0\u5F55\u3001\u8BA8\u8BBA\u8981\u70B9\u3002",icon:"users",cat:"cat-collab"},\u5408\u540C:{desc:"\u9002\u7528\u4E8E\u5404\u7C7B\u5408\u540C\u3001\u534F\u8BAE\u3002",icon:"file",cat:"cat-business"},\u4E0A\u5E02\u516C\u53F8\u5E74\u62A5:{desc:"\u9002\u7528\u4E8E\u4E0A\u5E02\u516C\u53F8\u5E74\u5EA6\u62A5\u544A\u3002",icon:"bars",cat:"cat-business"},\u653F\u5E9C\u516C\u6587:{desc:"\u9002\u7528\u4E8E\u653F\u5E9C\u673A\u5173\u516C\u6587\u3001\u653F\u7B56\u6587\u4EF6\uFF1B\u7EA2\u5934\u4E0E\u5B57\u4F53\u6309 GB/T 9704 \u56FA\u5B9A\u3002",icon:"landmark",cat:"cat-markets"},\u901A\u7528\u62A5\u544A:{desc:"\u9002\u7528\u4E8E\u5404\u7C7B\u901A\u7528\u578B\u62A5\u544A\u3002",icon:"layers",cat:"cat-neutral"},\u82F1\u6587\u901A\u7528\u62A5\u544A:{desc:"\u82F1\u6587\u6B63\u6587\u4E0E\u7AE0\u8282\u6807\u9898\uFF0C\u9002\u7528\u4E8E\u9762\u5411\u6D77\u5916\u8BFB\u8005\u7684\u62A5\u544A\uFF1B\u9009\u7528\u540E\u62A5\u544A\u8BED\u8A00\u8BBE\u4E3A\u82F1\u6587\u3002",icon:"layers",cat:"cat-neutral"},\u82F1\u6587\u7814\u62A5:{desc:"\u82F1\u6587\u8BC1\u5238\u7814\u7A76\u7248\u5F0F\uFF0C\u9002\u7528\u4E8E\u9762\u5411\u6D77\u5916\u6295\u8D44\u8005\u7684\u516C\u53F8\u4E0E\u884C\u4E1A\u7814\u7A76\uFF1B\u9009\u7528\u540E\u62A5\u544A\u8BED\u8A00\u8BBE\u4E3A\u82F1\u6587\u3002",icon:"chart",cat:"cat-markets"}},Tl={briefcase:'<rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/>',chart:'<rect x="4" y="12" width="4" height="8" rx="1.2"/><rect x="10" y="6" width="4" height="14" rx="1.2"/><rect x="16" y="9" width="4" height="11" rx="1.2"/>',book:'<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"/><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"/>',users:'<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',file:'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/>',bars:'<rect x="4" y="12" width="4" height="8" rx="1.2"/><rect x="10" y="6" width="4" height="14" rx="1.2"/><rect x="16" y="9" width="4" height="11" rx="1.2"/>',compare:'<rect x="3" y="10" width="3.5" height="10" rx="1"/><rect x="7.5" y="6" width="3.5" height="14" rx="1"/><rect x="13" y="13" width="3.5" height="7" rx="1"/><rect x="17.5" y="8" width="3.5" height="12" rx="1"/>',landmark:'<line x1="3" y1="22" x2="21" y2="22"/><line x1="5" y1="22" x2="5" y2="11"/><line x1="9" y1="22" x2="9" y2="11"/><line x1="15" y1="22" x2="15" y2="11"/><line x1="19" y1="22" x2="19" y2="11"/><path d="M2 11L12 3l10 8z"/>',layers:'<polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/>',paperclip:'<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/>',buildingsSlash:'<path d="M4 21V9.5L9 6v15"/><path d="M4 21h7"/><line x1="6.2" y1="11" x2="7.8" y2="11"/><line x1="6.2" y1="14" x2="7.8" y2="14"/><line x1="6.2" y1="17" x2="7.8" y2="17"/><line x1="13.2" y1="5.5" x2="17.8" y2="18.5"/><path d="M14 21v-9.5L18.5 8.5V21"/><path d="M14 21h7"/><line x1="16" y1="14" x2="17.5" y2="14"/><line x1="16" y1="17" x2="17.5" y2="17"/>'},zv={\u54C1\u724C\u9EDB\u84DD:"#2448B8",\u6781\u7B80\u84DD:"#2563EB",\u73CA\u745A\u7EA2:"#C62828",\u77F3\u58A8\u9ED1:"#1E2320",\u5178\u96C5\u7070:"#8A9089"},qv=Object.keys(zv);function Ml(t){let e=t.lastIndexOf("\xB7");return e<0?{genre:t,theme:""}:{genre:t.slice(0,e),theme:t.slice(e+1)}}function R$(t){let e=new Map;for(let n of t.filter(r=>r.origin==="builtin"&&r.name.includes("\xB7"))){let{genre:r,theme:s}=Ml(n.name),o=r+"\0"+s,i=e.get(o);(!i||((l,c)=>+(l.status==="ready")-+(c.status==="ready")||Number(l.revision||0)-Number(c.revision||0)||String(l.created||"").localeCompare(String(c.created||""))||String(l.id).localeCompare(String(c.id)))(n,i)>0)&&e.set(o,n)}return[...e.values()].map(n=>({...n,...Ml(n.name)}))}function Bv({notice:t,action:e,page:n,renderWorkflowChoices:r,templateSections:s,getState:o,syncTemplateLanguage:i,openTemplateOutput:a}){let l=null,c=null;function d(){let p=o(),f=u("templates-page-list");if(!f||!p)return;c!==p.workspace_id&&(c=p.workspace_id,l=null,d.sig="");let h=p.templates||[],m=R$(h),g=h.filter(R=>R.origin!=="builtin"),y=[...m,...g],b=JSON.stringify([c,p.settings?.default_template_id,l,...h.map(R=>[R.id,R.status,R.revision,R.created,R.name,R.origin,R.error])]);if(d.sig===b)return;if(d.sig=b,!y.some(R=>R.id===l&&R.status==="ready")){let R=h.find(B=>B.id===p.settings?.default_template_id),z=R&&m.find(B=>B.name===R.name&&B.status==="ready");l=(y.find(B=>B.id===R?.id&&B.status==="ready")||z||m.find(B=>B.genre==="\u5546\u4E1A\u62A5\u544A"&&B.theme==="\u54C1\u724C\u9EDB\u84DD"&&B.status==="ready")||y.find(B=>B.status==="ready"))?.id||null}let v={};for(let R of m)(v[R.genre]??=[]).push(R);for(let R of Object.values(v))R.sort((z,B)=>qv.indexOf(z.theme)-qv.indexOf(B.theme));let S=[...Pv,...Object.keys(v).filter(R=>!Pv.includes(R))].filter(R=>v[R]).map(R=>{let z=mp[R]||{desc:"",icon:"file",cat:"cat-neutral"},B=v[R],x=B.some(E=>E.id===l),L=B.find(E=>E.id===l)||B.find(E=>E.status==="ready")||B[0],D=B.map(E=>`<button type="button" class="color-dot${L.id===E.id?" selected":""}" style="--swatch-color:${zv[E.theme]||"var(--color-text-muted)"}" data-genre="${w(R)}" data-theme="${w(E.theme)}" data-id="${w(E.id)}" data-testid="template-theme" title="${w(R+" \xB7 "+E.theme)}" aria-label="${w(R+" "+E.theme)}" aria-pressed="${E.id===l}" ${E.status==="ready"?"":"disabled"}></button>`).join("");return`<div class="tpl-card${x?" selected":""}" data-genre="${w(R)}"><span class="tpl-check" aria-hidden="true">\u2713</span><span class="tpl-icon ${z.cat}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${Tl[z.icon]||""}</svg></span><button type="button" class="tpl-name tpl-select" data-template-pick="${w(L.id)}" aria-pressed="${x}" ${B.some(E=>E.status==="ready")?"":"disabled"}>${w(R)}</button><span class="tpl-desc" title="${w(z.desc)}">${w(z.desc)}</span><span class="tpl-dots"><span class="label">\u914D\u8272</span>${D}</span></div>`}).join(""),C=y.find(R=>R.id===l),T=C?`\u5DF2\u9009\uFF1A<strong>${w(C.name.replace("\xB7"," \xB7 "))}</strong>`:"\u5C1A\u65E0\u53EF\u7528\u6A21\u677F",$=g.length?'<div class="tpl-custom"><h2>\u6211\u7684\u7248\u5F0F\u6A21\u677F</h2>'+g.map(R=>`<div class="source-row tpl-custom-row${l===R.id?" selected":""}"><span class="name">${w(R.name)} \xB7 v${w(R.revision)}</span><span class="tag ${R.status!=="ready"?"error":""}">${R.status==="ready"?"\u53EF\u7528":w(R.error||"\u51C6\u5907\u4E2D")}</span><button type="button" class="outline" data-template-pick="${w(R.id)}" data-testid="custom-template-select" aria-pressed="${l===R.id}" ${R.status==="ready"?"":"disabled"}>${l===R.id?"\u5DF2\u9009\u62E9":"\u9009\u62E9\u6A21\u677F"}</button></div>`).join("")+"</div>":"";f.innerHTML=(S?`<div class="tpl-grid">${S}</div>`:"")+$+(h.length?`<div class="tpl-bar tpl-output-bar"><span class="picked">${T}</span><div class="tpl-output-actions"><button type="button" id="template-use-upload" data-testid="template-use-upload" class="primary" ${C?"":"disabled"}>\u4E0A\u4F20\u539F\u7A3F\u5957\u7528</button><button type="button" id="template-use-report" data-testid="template-use-report" class="outline" ${C?"":"disabled"}>\u4ECE\u5DF2\u6709\u62A5\u544A\u5957\u7528</button><button type="button" id="template-new-report" data-testid="template-new-report" class="ghost" ${C?"":"disabled"}>\u6309\u6A21\u677F\u65B0\u5EFA\u62A5\u544A</button></div><p class="help">\u4E0A\u4F20\u539F\u7A3F\u6216\u9009\u62E9\u5DF2\u6709\u62A5\u544A\uFF0C\u6309\u6240\u9009\u7248\u5F0F\u751F\u6210 Word\uFF1B\u65B0\u5EFA\u62A5\u544A\u4F1A\u8FDB\u5165\u5199\u4F5C\u8BBE\u7F6E\u3002</p></div>`:'<p class="help">\u8FD8\u6CA1\u6709\u6A21\u677F\u3002\u6DFB\u52A0\u4E00\u4E2A Word \u4F5C\u4E3A\u7248\u5F0F\u6A21\u677F\u3002</p>');let A=R=>{y.some(z=>z.id===R&&z.status==="ready")&&(l=R,d.sig="",d())};f.querySelectorAll(".tpl-card").forEach(R=>R.onclick=z=>{if(z.target.closest("button"))return;let B=v[R.dataset.genre]||[];A((B.find(x=>x.id===l)||B.find(x=>x.status==="ready"))?.id)}),f.querySelectorAll("[data-template-pick]").forEach(R=>R.onclick=()=>A(R.dataset.templatePick)),f.querySelectorAll(".color-dot").forEach(R=>R.onclick=z=>{z.stopPropagation(),A(R.dataset.id)});for(let[R,z]of[["template-use-upload","upload"],["template-use-report","report"]]){let B=u(R);B&&(B.onclick=()=>{l&&a?.(l,z)})}let N=u("template-new-report");N&&(N.onclick=()=>e(async()=>{let R=(o().templates||[]).find(z=>z.id===l&&z.status==="ready");R&&(u("template-select").value=R.id,r(),s(),i?.(R),t(`\u65B0\u5EFA\u62A5\u544A\u5DF2\u9009\u62E9 ${R.name}`),n("setup"))}))}return{render:d}}var N$=t=>["queued","running"].includes(t?.status),L$=t=>{try{return typeof t=="string"?JSON.parse(t):t||{}}catch{return{}}},O$=t=>L$(t?.detail).title||t?.title||"\u672A\u547D\u540D\u62A5\u544A";function Hv({api:t,notice:e,refresh:n,getState:r,openBrief:s,uploadPayload:o,getUploadLimits:i,getCurrent:a=()=>null,savedVersion:l}){let c=null,d=null,p=0,f=new Map,h=x=>x.epoch===p&&r()?.workspace_id===x.workspace,m=x=>d===x&&c?.open&&h(x);function g(){c||(c=document.createElement("dialog"),c.id="template-output-dialog",c.className="template-output-dialog",c.setAttribute("aria-labelledby","template-output-title"),c.dataset.testid="template-output-dialog",c.addEventListener("cancel",x=>{x.preventDefault(),y()}),document.body.append(c))}function y(){c?.close()}function b(){++p;for(let x of f.values())clearTimeout(x.timer);f.clear(),d=null,y()}function v(x){return clearTimeout(x.timer),x.busy=!1,!1}function k(x){return h(x)||v(x)}function S(x){return x.versions.find(L=>L.id===x.selectedId)}function C(x){if(!m(x))return;let L=x.job?.status==="complete",D=!!x.job,E=x.busy||L,P=["failed","cancelled","interrupted"].includes(x.job?.status),H=x.error||x.message||"",W=document.activeElement,Y=c.contains?.(W)?W?.id:null;c.innerHTML=`<div class="section-title"><h2 id="template-output-title">${x.mode==="upload"?"\u4E0A\u4F20\u539F\u7A3F\u5957\u7528":"\u4ECE\u5DF2\u6709\u62A5\u544A\u5957\u7528"}</h2><button type="button" id="template-output-close" data-testid="template-output-close" class="ghost" aria-label="\u5173\u95ED\u5957\u7528\u9762\u677F">\u5173\u95ED</button></div><p class="template-output-choice">\u7248\u5F0F\uFF1A<strong>${w(x.template.name.replace("\xB7"," \xB7 "))}</strong><span class="help">\u8F93\u51FA Word\uFF08.docx\uFF09</span></p>`+(x.mode==="upload"?`<p class="help">\u652F\u6301 DOCX\u3001Markdown\u3001TXT \u7684\u6B63\u6587\u3001\u6807\u9898\u3001\u5217\u8868\u548C\u8868\u683C\uFF1B\u4E0D\u8054\u7F51\u3001\u4E0D\u6539\u5199\u3002\u590D\u6742 Word \u5185\u5BB9\u6682\u4E0D\u652F\u6301\uFF0C\u539F\u6587\u4EF6\u4F1A\u4FDD\u7559\u3002</p><label class="template-output-field" ${x.file?"hidden":""}>\u9009\u62E9\u8981\u6392\u7248\u7684\u539F\u7A3F<input type="file" id="template-output-file" data-testid="template-output-file" accept=".docx,.md,.markdown,.txt" ${E||D?"disabled":""}></label>${x.file?`<div class="template-output-file-choice"><p class="help">\u5DF2\u9009\u539F\u7A3F\uFF1A${w(x.file.name)}</p>${E||D?"":'<button type="button" id="template-output-change-file" data-testid="template-output-change-file" class="outline">\u66F4\u6362\u6587\u4EF6</button>'}</div>`:""}`:`<p class="help">\u9009\u62E9\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u62A5\u544A\uFF0C\u4EE5\u9009\u4E2D\u7684\u5DF2\u4FDD\u5B58\u7248\u672C\u751F\u6210 Word\u3002\u82E5\u9009\u4E2D\u7248\u672C\u6B63\u5728\u7F16\u8F91\uFF0C\u4F1A\u5148\u4FDD\u5B58\u5176\u5F53\u524D\u4FEE\u6539\u3002</p><form id="template-output-search-form" class="template-output-search"><label for="template-output-search">\u67E5\u627E\u62A5\u544A</label><input type="search" id="template-output-search" data-testid="template-output-search" placeholder="\u641C\u7D22\u6807\u9898\u6216\u6B63\u6587" maxlength="200" value="${w(x.query)}" ${E||D?"disabled":""}><button type="submit" class="outline" ${E||D?"disabled":""}>\u67E5\u627E</button></form><label class="template-output-field">\u9009\u62E9\u62A5\u544A<select id="template-output-report" data-testid="template-output-report" ${E||D||x.loading?"disabled":""}><option value="">${x.loading?"\u6B63\u5728\u8BFB\u53D6\u62A5\u544A\u2026":"\u8BF7\u9009\u62E9\u4E00\u4EFD\u62A5\u544A"}</option>${x.items.map(I=>`<option value="${w(I.id)}" ${x.reportId===I.id?"selected":""}>${w(O$(I))} \xB7 ${w(js(I.created)||"\u4FDD\u5B58\u65F6\u95F4\u672A\u77E5")}</option>`).join("")}</select></label>${!x.loading&&!x.items.length?`<p class="help">${x.query?"\u6CA1\u6709\u627E\u5230\u7B26\u5408\u641C\u7D22\u6761\u4EF6\u7684\u62A5\u544A\u3002":"\u5F53\u524D\u5DE5\u4F5C\u533A\u8FD8\u6CA1\u6709\u5DF2\u4FDD\u5B58\u62A5\u544A\u3002"}</p>`:""}${x.listError?`<p class="template-output-error" role="alert">${w(x.listError)}</p><button type="button" id="template-output-reload" class="outline">\u91CD\u65B0\u8BFB\u53D6\u62A5\u544A</button>`:""}${x.cursor?`<button type="button" id="template-output-more" data-testid="template-output-more" class="ghost" ${E||D||x.loading?"disabled":""}>${x.loading?"\u6B63\u5728\u8BFB\u53D6\u2026":"\u52A0\u8F7D\u66F4\u591A\u62A5\u544A"}</button>`:""}`)+(x.mode==="report"&&x.reportId?`<label class="template-output-field">\u9009\u62E9\u5DF2\u4FDD\u5B58\u7248\u672C<select id="template-output-version" data-testid="template-output-version" ${E||D||x.historyLoading?"disabled":""}><option value="">${x.historyLoading?"\u6B63\u5728\u8BFB\u53D6\u7248\u672C\u2026":"\u8BF7\u9009\u62E9\u7248\u672C"}</option>${x.versions.map((I,X)=>`<option value="${w(I.id)}" ${x.selectedId===I.id?"selected":""}>${w(I.parent_id?"\u4FEE\u8BA2\u7A3F":"\u539F\u7A3F")} \xB7 ${w(js(I.created)||"\u4FDD\u5B58\u65F6\u95F4\u672A\u77E5")} \xB7 ${w(I.version_count>X?"\u7B2C"+(I.version_count-X)+"\u7248":I.author==="user"?"\u4EBA\u5DE5\u4FDD\u5B58":"\u5DF2\u4FDD\u5B58")}</option>`).join("")}</select></label>${x.historyError?`<p class="template-output-error" role="alert">${w(x.historyError)}</p><button type="button" id="template-output-history-reload" class="outline">\u91CD\u65B0\u8BFB\u53D6\u7248\u672C</button>`:""}${x.historyCursor?`<button type="button" id="template-output-history-more" class="ghost" ${E||D||x.historyLoading?"disabled":""}>\u52A0\u8F7D\u66F4\u65E9\u7248\u672C</button>`:""}`:"")+`<p id="template-output-status" data-testid="template-output-status" class="template-output-status${x.error?" template-output-error":""}" role="status" aria-live="polite">${w(H)}</p>`+(x.notes.length?`<ul class="template-output-notes">${x.notes.map(I=>`<li>${w(typeof I=="string"?I:I?.message||I?.description||String(I))}</li>`).join("")}</ul>`:"")+`<div class="template-output-actions">${L?`<a class="primary template-output-download" id="template-output-download" data-testid="template-output-download" href="/api/export-file?${new URLSearchParams({job:x.job.id,workspace_id:x.workspace})}" download>\u4E0B\u8F7D Word</a><button type="button" id="template-output-open" data-testid="template-output-open" class="outline">${x.mode==="upload"?"\u6253\u5F00\u8F6C\u6362\u7A3F":"\u6253\u5F00\u6240\u9009\u62A5\u544A"}</button><button type="button" id="template-output-again" class="ghost">${x.mode==="upload"?"\u5957\u7528\u53E6\u4E00\u4EFD\u539F\u7A3F":"\u5957\u7528\u53E6\u4E00\u4EFD\u62A5\u544A"}</button>`:x.pollError?'<button type="button" id="template-output-poll" data-testid="template-output-poll" class="primary">\u91CD\u65B0\u68C0\u67E5\u8FDB\u5EA6</button>':`<button type="button" id="template-output-submit" data-testid="template-output-submit" class="primary" ${x.busy||x.loading||x.historyLoading||!(x.mode==="upload"?x.file:x.selectedId)?"disabled":""}>${x.busy?"\u6B63\u5728\u5236\u4F5C\u2026":D?"\u91CD\u8BD5\u751F\u6210 Word":"\u5957\u7528\u5E76\u751F\u6210 Word"}</button>`}${P?`<button type="button" id="template-output-again" class="outline">${x.mode==="upload"?"\u66F4\u6362\u539F\u7A3F":"\u91CD\u65B0\u9009\u62E9\u62A5\u544A"}</button>`:""}</div>`+(x.busy?'<p class="help">\u5173\u95ED\u9762\u677F\u4E0D\u4F1A\u505C\u6B62\u5DF2\u63D0\u4EA4\u7684\u5236\u4F5C\u4EFB\u52A1\uFF1B\u518D\u6B21\u70B9\u51FB\u540C\u4E00\u6A21\u677F\u7684\u5957\u7528\u5165\u53E3\u53EF\u67E5\u770B\u8FDB\u5EA6\u3002</p>':""),u("template-output-close").onclick=y,u("template-output-file")&&(u("template-output-file").onchange=I=>{x.file=I.target.files?.[0]||null,x.requestId=crypto.randomUUID(),x.version=null,x.error="",x.message="",x.file&&!/\.(docx|md|markdown|txt)$/i.test(x.file.name)&&(x.file=null,x.error="\u8BF7\u9009\u62E9 DOCX\u3001Markdown \u6216 TXT \u539F\u7A3F\u3002"),C(x)}),u("template-output-change-file")&&(u("template-output-change-file").onclick=()=>u("template-output-file").click()),u("template-output-search-form")&&(u("template-output-search-form").onsubmit=I=>{I.preventDefault(),x.query=u("template-output-search").value.trim(),$(x),x.version=null,T(x)}),u("template-output-report")&&(u("template-output-report").onchange=I=>{$(x),x.reportId=I.target.value,x.version=null,x.error="",C(x),x.reportId&&A(x)}),u("template-output-version")&&(u("template-output-version").onchange=I=>{x.selectedId=I.target.value,x.version=null,x.error="",C(x)}),u("template-output-history-more")&&(u("template-output-history-more").onclick=()=>A(x,!0)),u("template-output-history-reload")&&(u("template-output-history-reload").onclick=()=>A(x)),u("template-output-more")&&(u("template-output-more").onclick=()=>T(x,!0)),u("template-output-reload")&&(u("template-output-reload").onclick=()=>T(x)),u("template-output-submit")&&(u("template-output-submit").onclick=()=>z(x)),u("template-output-poll")&&(u("template-output-poll").onclick=()=>{x.busy||(x.busy=!0,x.pollError=!1,x.error="",C(x),R(x))}),u("template-output-download")&&(u("template-output-download").onclick=I=>{h(x)||(I.preventDefault(),e("\u5DE5\u4F5C\u533A\u5DF2\u5207\u6362\uFF0C\u8BF7\u56DE\u5230\u539F\u5DE5\u4F5C\u533A\u4E0B\u8F7D\u3002",!0))}),u("template-output-open")&&(u("template-output-open").onclick=async()=>{if(!k(x))return;let I=u("template-output-open");I.disabled=!0;try{await s(x.version)&&y()}catch(X){m(x)&&e(X.message,!0)}finally{m(x)&&(I.disabled=!1)}}),u("template-output-again")&&(u("template-output-again").onclick=()=>{clearTimeout(x.timer),$(x),x.job=null,x.version=null,x.file=null,x.requestId=null,x.pollError=!1,x.error="",x.message="",x.notes=[],C(x),x.mode==="report"&&T(x)}),Y&&(Y==="template-output-file"&&x.file?u("template-output-change-file"):u(Y))?.focus?.()}async function T(x,L=!1){if(!k(x)||x.busy||x.job)return;let D=++x.listTicket,E=x.query;x.loading=!0,x.listError="",C(x);let P=new URLSearchParams({q:E,workspace_id:x.workspace});L&&x.cursor&&P.set("cursor",x.cursor);try{let H=await t("reports?"+P);if(!k(x)||D!==x.listTicket)return;let W=Array.isArray(H.items)?H.items:[];x.items=L?[...x.items,...W.filter(Y=>!x.items.some(I=>I.id===Y.id))]:W,x.cursor=H.next_cursor||"",x.items.some(Y=>Y.id===x.reportId)||$(x)}catch(H){h(x)&&D===x.listTicket&&(x.listError="\u62A5\u544A\u8BFB\u53D6\u5931\u8D25\uFF1A"+H.message)}finally{h(x)&&D===x.listTicket&&(x.loading=!1,C(x))}}function $(x){++x.historyTicket,x.reportId="",x.selectedId="",x.versions=[],x.historyCursor="",x.historyLoading=!1,x.historyError=""}async function A(x,L=!1){if(!k(x)||x.busy||x.job)return;let D=x.items.find(W=>W.id===x.reportId);if(!D)return;let E=++x.historyTicket,P=x.reportId;x.historyLoading=!0,x.historyError="",C(x);let H=new URLSearchParams({run_id:D.run_id,workspace_id:x.workspace});L&&x.historyCursor&&H.set("cursor",x.historyCursor);try{let W=await t("report-history?"+H);if(!k(x)||E!==x.historyTicket||x.reportId!==P)return;let Y=(Array.isArray(W.items)?W.items:[]).filter(I=>I.run_id===D.run_id);x.versions=L?[...x.versions,...Y.filter(I=>!x.versions.some(X=>X.id===I.id))]:Y,x.historyCursor=W.next_cursor||"",x.versions.some(I=>I.id===x.selectedId)||(x.selectedId=x.versions[0]?.id||"")}catch(W){h(x)&&E===x.historyTicket&&(x.historyError="\u7248\u672C\u8BFB\u53D6\u5931\u8D25\uFF1A"+W.message)}finally{h(x)&&E===x.historyTicket&&(x.historyLoading=!1,C(x))}}function N(x,L){if(!L?.id)throw Error("\u672A\u6536\u5230\u6587\u4EF6\u5236\u4F5C\u4EFB\u52A1\uFF0C\u8BF7\u68C0\u67E5\u62A5\u544A\u5217\u8868\u540E\u518D\u8BD5\u3002");if(x.job=L,L.status==="complete"){x.busy=!1,x.pollError=!1,x.error="",x.message=x.mode==="upload"?"Word \u5DF2\u751F\u6210\uFF0C\u8F6C\u6362\u7A3F\u5DF2\u4FDD\u5B58\u3002":"Word \u5DF2\u751F\u6210\u3002",C(x),Promise.resolve().then(()=>h(x)&&n?.()).catch(()=>{h(x)&&(x.message+=" \u62A5\u544A\u5217\u8868\u6682\u672A\u5237\u65B0\uFF0C\u53EF\u7A0D\u540E\u91CD\u8BD5\u3002",C(x))});return}if(!N$(L)){x.busy=!1,x.pollError=!1,x.error=L.error||{cancelled:"Word \u5236\u4F5C\u5DF2\u53D6\u6D88\uFF0C\u53EF\u91CD\u8BD5\u3002",interrupted:"Word \u5236\u4F5C\u5DF2\u4E2D\u65AD\uFF0C\u53EF\u91CD\u8BD5\u3002",failed:"Word \u5236\u4F5C\u5931\u8D25\uFF0C\u53EF\u91CD\u8BD5\u3002"}[L.status]||"Word \u5C1A\u672A\u5236\u4F5C\u5B8C\u6210\uFF0C\u8BF7\u91CD\u8BD5\u3002",C(x);return}let D=L.status==="queued"?"\u5DF2\u63D0\u4EA4\uFF0C\u7B49\u5F85\u5236\u4F5C Word\u2026":"\u6B63\u5728\u5236\u4F5C Word\u2026";x.message!==D&&(x.message=D,C(x)),x.timer=setTimeout(()=>R(x),1e3)}async function R(x){if(clearTimeout(x.timer),!(!k(x)||!x.job))try{let L=await t("export-status?"+new URLSearchParams({job:x.job.id,workspace_id:x.workspace}));k(x)&&N(x,L)}catch(L){h(x)&&(x.busy=!1,x.pollError=!0,x.error="\u6682\u65F6\u65E0\u6CD5\u8BFB\u53D6\u5236\u4F5C\u8FDB\u5EA6\uFF1A"+L.message+"\u3002\u4EFB\u52A1\u53EF\u80FD\u4ECD\u5728\u8FD0\u884C\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u8FDB\u5EA6\u3002",C(x))}}async function z(x){if(!k(x)||x.busy||x.loading||x.historyLoading||x.pollError||x.job?.status==="complete")return;if((r().templates||[]).find(E=>E.id===x.template.id)?.status!=="ready"){x.error="\u6240\u9009\u6A21\u677F\u5C1A\u4E0D\u53EF\u7528\uFF0C\u8BF7\u8FD4\u56DE\u6A21\u677F\u9875\u91CD\u65B0\u9009\u62E9\u3002",C(x);return}let D=S(x);if(!(x.mode==="upload"&&!x.file||x.mode==="report"&&!D)){x.busy=!0,x.error="",x.message="\u6B63\u5728\u51C6\u5907\u539F\u7A3F\u2026",C(x);try{if(x.mode==="upload"&&!x.version){let E=await o(x.file,i(),{template_id:x.template.id,workspace_id:x.workspace,request_id:x.requestId});if(!k(x))return;let P=await t("template-convert",E);if(!k(x))return;if(!P.version?.id)throw Error("\u672A\u6536\u5230\u5DF2\u4FDD\u5B58\u7684\u8F6C\u6362\u7A3F\uFF0C\u8BF7\u68C0\u67E5\u62A5\u544A\u5217\u8868\u540E\u518D\u8BD5\u3002");x.version=P.version,x.notes=Array.isArray(P.notes)?P.notes:[],N(x,P.job)}else{let E=x.version||D;if(!x.version&&a()?.id===D.id&&l){let H=await l();if(!k(x))return;if(a()?.run_id!==D.run_id||a()?.id!==H)throw Error("\u6B63\u5728\u7F16\u8F91\u7684\u62A5\u544A\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u62A5\u544A\u3002");E={...a(),id:H}}if(!k(x))return;x.version=E;let P=await t("export",{version_id:E.id,template_id:x.template.id,workspace_id:x.workspace});k(x)&&N(x,P)}}catch(E){h(x)&&(x.busy=!1,x.error=E.message,C(x))}}}function B(x,L="upload"){let D=r(),E=D?.templates?.find(W=>W.id===x);if(!D?.workspace_id||E?.status!=="ready")return e("\u6240\u9009\u6A21\u677F\u5C1A\u4E0D\u53EF\u7528\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u3002",!0),!1;L=L==="report"?"report":"upload",g();let P=JSON.stringify([D.workspace_id,x,L]),H=f.get(P);return H||(H={epoch:p,workspace:D.workspace_id,template:E,mode:L,file:null,requestId:null,items:[],query:"",cursor:"",selectedId:"",reportId:"",versions:[],historyTicket:0,historyCursor:"",historyLoading:!1,historyError:"",listTicket:0,loading:!1,listError:"",busy:!1,pollError:!1,job:null,version:null,notes:[],message:"",error:""},f.set(P,H)),d=H,c.open||c.showModal(),C(H),(u("template-output-download")||u("template-output-change-file")||u(L==="upload"?"template-output-file":"template-output-search"))?.focus?.(),L==="report"&&!H.job&&!H.loading&&T(H),!0}return{open:B,close:y,reset:b}}var Vo={initial:"\u9996\u6B21\u4EA4\u4ED8",correction:"\u66F4\u6B63",update:"\u540E\u7EED\u4FE1\u606F\u66F4\u65B0"},Ko=t=>t?Gt(t):"\u65F6\u95F4\u672A\u8BB0\u5F55";function jv({api:t,notice:e,action:n,page:r,openBrief:s,savedVersion:o,statuses:i,getState:a,getCurrent:l,isDirty:c,isSaving:d,office:p}){let f={version:null,data:null,loading:!1},h=null,m={pending:"\u7B49\u5F85\u5236\u4F5C",released:"\u6B63\u5F0F\u4EF6\u5DF2\u4FDD\u5B58",failed:"\u5236\u4F5C\u672A\u5B8C\u6210",cancelled:"\u5DF2\u505C\u6B62"};function g(A){if(!A)return"<p>\u4EA4\u4ED8\u6761\u4EF6\u6682\u4E0D\u53EF\u7528\uFF0C\u5C1A\u672A\u5224\u5B9A\u901A\u8FC7\u3002</p>";let N=A.blockers||[],R=A.notices||[];return`<h3>${A.eligible?"\u5F53\u524D\u7248\u672C\u6EE1\u8DB3\u6B63\u5F0F\u4EA4\u4ED8\u6761\u4EF6":"\u5F53\u524D\u7248\u672C\u8FD8\u6709\u9700\u5904\u7406\u4E8B\u9879"}</h3>${N.length?`<ul class="release-blockers">${N.map(z=>`<li>${w(z.message||z)}</li>`).join("")}</ul>`:""}${R.length?`<details open><summary>\u4FDD\u7559\u7684\u63D0\u793A \xB7 ${R.length} \u9879</summary><ul>${R.map(z=>`<li>${w(z.message||z)}</li>`).join("")}</ul></details>`:""}${A.eligible?"":'<p class="help">\u5DE5\u4F5C\u7A3F\u4ECD\u53EF\u7F16\u8F91\u548C\u4E0B\u8F7D\u3002\u8BF7\u5728\u201C\u5BA1\u9605\u4E0E\u9700\u5904\u7406\u201D\u4E2D\u5904\u7406\u95EE\u9898\u540E\u590D\u6838\u3002</p>'}`}function y(A){let N=a(),R=l(),z=N.jobs.find(L=>L.id===A.job_id),B=A.status==="released"?m.released:i[z?.status]||m[A.status]||A.status,x=Vo[A.change_type]||(A.previous_id?"\u5173\u8054\u65E7\u6B63\u5F0F\u4EF6":"\u9996\u6B21\u4EA4\u4ED8");return`<article class="release-card"><div class="section-title"><strong>${w(x)} \xB7 ${w(Ko(A.created))}</strong><span class="tag">${w(B)}</span></div><p class="help">${A.version_id===R?.id?"\u5F53\u524D\u6B63\u5728\u67E5\u770B\u7684\u7A3F\u4EF6\u7248\u672C":"\u5386\u53F2\u7A3F\u4EF6\u7248\u672C"}${A.previous_id?" \xB7 \u5173\u8054\u65E7\u6B63\u5F0F\u4EF6 "+w(A.previous_id.slice(-8)):""}</p>${A.change_reason?`<p>${w(A.change_reason)}</p>`:""}${z?.error?`<p class="error">${w(z.error)}</p>`:""}${A.status==="released"?`<div class="release-actions"><a href="/api/release-file?id=${encodeURIComponent(A.id)}" download>\u4E0B\u8F7D\u6B63\u5F0F Word</a><button type="button" data-audit-release="${w(A.id)}">\u5BFC\u51FA\u5BA1\u8BA1\u5305\u2026</button></div>`:'<p class="help">\u4EFB\u52A1\u8FDB\u5EA6\u89C1\u62A5\u544A\u4E0B\u65B9\u7684\u6587\u4EF6\u5236\u4F5C\u8BB0\u5F55\u3002</p>'}</article>`}async function b(){if(f.loading||!u("release-dialog").open)return;let A=l()?.id;if(A){f.loading=!0;try{let N=await t("release-state?version="+encodeURIComponent(A));if(!u("release-dialog").open||l()?.id!==A)return;f.version=A,f.data=N,u("release-eligibility").innerHTML=(c()?'<p class="help">\u6709\u672A\u4FDD\u5B58\u4FEE\u6539\uFF0C\u4E0B\u5217\u6761\u4EF6\u9488\u5BF9\u4E0A\u6B21\u4FDD\u5B58\u7684\u7248\u672C\u3002</p>':"")+g(N.eligibility),u("release-submit").disabled=c()||d()||!N.eligibility?.eligible||f.submitting;let R=(N.releases||[]).filter(L=>L.status==="released"),z=u("release-previous"),B=R.map(L=>L.id).join(",");if(z.dataset.choices!==B){let L=z.value;z.innerHTML='<option value="">\u9996\u6B21\u4EA4\u4ED8</option>'+R.map(D=>`<option value="${w(D.id)}">${w(Ko(D.created))} \xB7 ${w(Vo[D.change_type]||"\u6B63\u5F0F\u4EF6")} \xB7 ${w(D.id.slice(-8))}</option>`).join(""),z.dataset.choices=B,R.some(D=>D.id===L)&&(z.value=L),v()}let x=(N.releases||[]).map(y).join("")||'<p class="help">\u6B64\u62A5\u544A\u5C1A\u65E0\u6B63\u5F0F\u4EA4\u4ED8\u8BB0\u5F55\u3002</p>';u("release-list").innerHTML!==x&&(u("release-list").innerHTML=x,u("release-list").querySelectorAll("[data-audit-release]").forEach(L=>L.onclick=()=>C(L.dataset.auditRelease)))}finally{f.loading=!1}}}function v(){let A=!!u("release-previous").value;u("release-change-fields").hidden=!A,u("release-change-reason").required=A}async function k(A=null){if(A&&!s(A,{follow:!1}))return;let N=s.request;if(N&&(!await N.promise||s.request||l()?.id!==N.id)||A&&l()?.id!==A.id)return;let R=l()?.run_id,z=await o();s.request||l()?.id!==z||l()?.run_id!==R||(r("report"),u("release-eligibility").textContent="\u6B63\u5728\u6838\u5BF9\u5F53\u524D\u7248\u672C\u7684\u4EA4\u4ED8\u6761\u4EF6\u2026",u("release-submit").disabled=!0,u("release-dialog").showModal(),await b())}async function S(){let A=u("release-previous").value,N=u("release-change-type").value,R=u("release-change-reason").value.trim();if(A&&!R)throw Error("\u8BF7\u8BF4\u660E\u672C\u6B21\u66F4\u6B63\u6216\u66F4\u65B0\u7684\u4F9D\u636E\u548C\u5F71\u54CD");let B={version_id:await o()};return A&&Object.assign(B,{previous_id:A,change_type:N,change_reason:R}),await t("release",B)}function C(A){let N=f.data?.releases.find(B=>B.id===A);if(!N||N.status!=="released"){e("\u8BF7\u5148\u7B49\u5F85\u6B63\u5F0F\u4EF6\u5236\u4F5C\u5B8C\u6210",!0);return}h=N;let R=u("audit-office-render");R&&(R.checked=!1);let z=u("audit-office-row");z&&(z.hidden=!p?.officeEnabled()),u("audit-target").textContent="\u6B63\u5F0F\u4EF6\uFF1A"+Ko(N.created)+" \xB7 "+(Vo[N.change_type]||"\u9996\u6B21\u4EA4\u4ED8")+" \xB7 "+N.id.slice(-8),u("audit-source-list").innerHTML=(N.sources||N.data?.snapshot?.sources||[]).map(B=>`<label class="audit-source-row"><span>${w(B.name||B.id)}</span><select data-audit-source="${w(B.id)}" aria-label="${w(B.name||B.id)}\u7684\u6253\u5305\u8303\u56F4"><option value="metadata">\u4EC5\u5B9A\u4F4D\uFF0C\u4E0D\u542B\u539F\u4EF6\u548C\u6458\u5F55</option><option value="excerpt">\u5B9A\u4F4D\u4E0E\u8BC1\u636E\u6458\u5F55</option><option value="original">\u539F\u4EF6\u53CA\u8BC1\u636E\u6458\u5F55</option></select></label>`).join("")||'<p class="help">\u6B64\u6B63\u5F0F\u4EF6\u6CA1\u6709\u767B\u8BB0\u6765\u6E90\u6587\u4EF6\u3002</p>',u("audit-submit").disabled=!1,u("audit-dialog").showModal()}async function T(){if(!h)throw Error("\u8BF7\u5148\u9009\u62E9\u4E00\u4E2A\u5DF2\u4FDD\u5B58\u7684\u6B63\u5F0F\u4EF6");let A=h.id,N=Object.fromEntries([...u("audit-source-list").querySelectorAll("[data-audit-source]")].map(R=>[R.dataset.auditSource,R.value]));return t("audit-bundle",{release_id:A,source_permissions:N,include_office_render:u("audit-office-render")?.checked===!0})}function $(){u("release-previous").onchange=v,u("release-open").onclick=()=>n(()=>k()),u("release-close").onclick=()=>u("release-dialog").close(),u("release-form").onsubmit=A=>{A.preventDefault(),!f.submitting&&(f.submitting=!0,u("release-submit").disabled=!0,n(async()=>{try{await S(),u("release-dialog").close(),e("\u6B63\u5F0F Word \u5DF2\u6392\u961F\uFF0C\u4F7F\u7528\u672C\u6B21\u63D0\u4EA4\u65F6\u56FA\u5B9A\u7684\u7248\u672C")}finally{f.submitting=!1,await b()}}))},u("audit-close").onclick=()=>u("audit-dialog").close(),u("audit-all-original").onclick=()=>{u("audit-source-list").querySelectorAll("[data-audit-source]").forEach(A=>A.value="original")},u("audit-all-metadata").onclick=()=>{u("audit-source-list").querySelectorAll("[data-audit-source]").forEach(A=>A.value="metadata")},u("audit-form").onsubmit=A=>{A.preventDefault(),!u("audit-submit").disabled&&(u("audit-submit").disabled=!0,n(async()=>{try{await T(),u("audit-dialog").close(),u("release-dialog").close(),e("\u5BA1\u8BA1\u5305\u5DF2\u6392\u961F\uFF0C\u5B8C\u6210\u540E\u53EF\u5728\u6587\u4EF6\u5236\u4F5C\u8BB0\u5F55\u4E0B\u8F7D")}finally{u("audit-submit").disabled=!1}}))}}return{init:$,refreshReleaseState:b,openReleaseDialog:k,openAuditBundle:C,submitFormalRelease:S,submitAuditBundle:T}}function Wv(t){if(/^#[a-f\d]{6}$/i.test(t||""))return t.toLowerCase();let e=/^rgb\(\s*(\d+)[, ]+\s*(\d+)[, ]+\s*(\d+)\s*\)$/.exec(t||"");return e?"#"+e.slice(1).map(n=>Math.min(255,Number(n)).toString(16).padStart(2,"0")).join(""):null}var Jo=ht.create({name:"textStyle",addAttributes(){return{color:{default:null,parseHTML:t=>Wv(t.style.color),renderHTML:t=>t.color?{style:"color:"+t.color}:{}}}},parseHTML(){return[{tag:"span",getAttrs:t=>t.style.color?{}:!1}]},renderHTML({HTMLAttributes:t}){return["span",pe(t),0]},renderMarkdown(t,e){return e.renderChildren(t)}}),Go=ke.create({name:"reportLayout",addGlobalAttributes(){return[{types:["paragraph","heading","image","table","tableCell","tableHeader"],attributes:{textAlign:{default:null,parseHTML:t=>t.style.textAlign||null,renderHTML:t=>t.textAlign?{style:"text-align:"+t.textAlign}:{}},blockId:{default:null,parseHTML:t=>t.getAttribute("data-block-id"),renderHTML:t=>t.blockId?{"data-block-id":t.blockId}:{}}}},{types:["tableCell","tableHeader"],attributes:{backgroundColor:{default:null,parseHTML:t=>Wv(t.style.backgroundColor),renderHTML:t=>t.backgroundColor?{style:"background-color:"+t.backgroundColor}:{}},textAlign:{default:null,parseHTML:t=>t.style.textAlign||null,renderHTML:t=>t.textAlign?{style:"text-align:"+t.textAlign}:{}}}}]}});function I$(){return new ce({appendTransaction(t,e,n){let r=n.schema.nodes.paragraph;return!t.some(s=>s.docChanged)||!r||n.doc.lastChild?.type===r?null:n.tr.insert(n.doc.content.size,r.create()).setMeta("addToHistory",!1)}})}var Uv=ke.create({name:"reportTrailingParagraph",addProseMirrorPlugins(){return[I$()]}}),Xo=lv.extend({addAttributes(){return{...this.parent?.(),width:{default:null,parseHTML:t=>Number(t.getAttribute("width"))||null},height:{default:null,parseHTML:t=>Number(t.getAttribute("height"))||null},caption:{default:null,parseHTML:t=>t.getAttribute("data-caption"),renderHTML:t=>t.caption?{"data-caption":t.caption}:{}}}},renderHTML({node:t,HTMLAttributes:e}){return["figure",{class:"report-image"},["img",pe(this.options.HTMLAttributes,e)],...t.attrs.caption?[["figcaption",{},t.attrs.caption]]:[]]},renderMarkdown(t){let e=t.attrs;return"!["+(e.alt||"").replaceAll("]","\\]")+"]("+e.src+")"+(e.caption?`
|
|
255
255
|
|