briefloop 0.27.0__tar.gz → 0.27.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (950) hide show
  1. {briefloop-0.27.0 → briefloop-0.27.1}/PKG-INFO +2 -2
  2. {briefloop-0.27.0 → briefloop-0.27.1}/README.md +1 -1
  3. {briefloop-0.27.0 → briefloop-0.27.1}/pyproject.toml +1 -1
  4. briefloop-0.27.1/src/briefloop/__init__.py +1 -0
  5. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/bridge_harness.py +2 -2
  6. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/chat_store.py +5 -0
  7. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/chat_tools.py +32 -6
  8. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/deliverable_spec.py +3 -1
  9. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/execution_records.py +17 -0
  10. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/fast_reports.py +30 -4
  11. briefloop-0.27.1/src/briefloop/feedback_view.py +12 -0
  12. briefloop-0.27.1/src/briefloop/finding_anchors.py +56 -0
  13. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/industry_data.py +2 -0
  14. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/interactive_runtime.py +19 -6
  15. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/learning.py +8 -4
  16. briefloop-0.27.1/src/briefloop/model_budget.py +56 -0
  17. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/models.py +56 -5
  18. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/native_orchestrator.py +27 -5
  19. briefloop-0.27.1/src/briefloop/plain_isolation.py +134 -0
  20. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/progress.py +63 -1
  21. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.analyst.zh.md +1 -1
  22. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.orchestrator.zh.md +1 -1
  23. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/report_profiles.py +1 -1
  24. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/research_handoff.py +10 -3
  25. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/research_plan.py +78 -7
  26. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/review.py +42 -6
  27. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/review_capability.py +15 -2
  28. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/runtime.py +73 -14
  29. briefloop-0.27.1/src/briefloop/scout_coverage.py +210 -0
  30. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/scout_tools.py +9 -1
  31. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/server.py +5 -2
  32. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/app.js +92 -92
  33. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/index.html +3 -3
  34. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/style.css +6 -0
  35. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/store.py +75 -7
  36. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/task_progress.py +25 -3
  37. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop.egg-info/PKG-INFO +2 -2
  38. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop.egg-info/SOURCES.txt +6 -433
  39. briefloop-0.27.0/.gitattributes +0 -5
  40. briefloop-0.27.0/CHANGELOG.md +0 -2481
  41. briefloop-0.27.0/CONTRIBUTING.md +0 -33
  42. briefloop-0.27.0/KNOWN_ISSUES.md +0 -24
  43. briefloop-0.27.0/MANIFEST.in +0 -24
  44. briefloop-0.27.0/SECURITY.md +0 -9
  45. briefloop-0.27.0/VERSION +0 -1
  46. briefloop-0.27.0/bootstrap.py +0 -55
  47. briefloop-0.27.0/desktop/electron/package-lock.json +0 -3638
  48. briefloop-0.27.0/desktop/electron/package.json +0 -65
  49. briefloop-0.27.0/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md +0 -58
  50. briefloop-0.27.0/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md +0 -32
  51. briefloop-0.27.0/docs/architecture.md +0 -105
  52. briefloop-0.27.0/docs/compose/spec/home-v2.md +0 -81
  53. briefloop-0.27.0/docs/draft-first.md +0 -73
  54. briefloop-0.27.0/docs/jev-precheck.md +0 -23
  55. briefloop-0.27.0/docs/native-integration.md +0 -31
  56. briefloop-0.27.0/docs/quality-reading-context.md +0 -15
  57. briefloop-0.27.0/docs/release-0.26.0.md +0 -23
  58. briefloop-0.27.0/docs/release-0.26.1.md +0 -19
  59. briefloop-0.27.0/docs/release-0.26.2.md +0 -17
  60. briefloop-0.27.0/docs/release-0.26.3.md +0 -30
  61. briefloop-0.27.0/docs/release-0.26.4.md +0 -9
  62. briefloop-0.27.0/docs/release-0.27.0.md +0 -13
  63. briefloop-0.27.0/docs/report-length.md +0 -20
  64. briefloop-0.27.0/docs/report-time-window.md +0 -23
  65. briefloop-0.27.0/docs/research-handoff.md +0 -39
  66. briefloop-0.27.0/docs/revision-learning.md +0 -16
  67. briefloop-0.27.0/docs/sqlite-benchmark.md +0 -78
  68. briefloop-0.27.0/docs/technical-report-0.21.0/evidence-index.md +0 -475
  69. briefloop-0.27.0/docs/technical-report-0.21.0/technical-report.md +0 -347
  70. briefloop-0.27.0/docs/windows.md +0 -96
  71. briefloop-0.27.0/docs/writer-input.md +0 -56
  72. briefloop-0.27.0/docs//344/272/247/345/223/201/345/256/232/344/275/215/344/270/216/351/252/214/350/257/201.md +0 -20
  73. briefloop-0.27.0/docs//344/274/232/350/256/256/347/272/252/350/246/201.md +0 -23
  74. briefloop-0.27.0/docs//344/275/277/347/224/250/346/214/207/345/215/227.md +0 -112
  75. briefloop-0.27.0/docs//345/206/205/347/275/256/345/274/225/346/223/216.md +0 -50
  76. briefloop-0.27.0/docs//345/215/207/347/272/247/350/257/264/346/230/216.md +0 -66
  77. briefloop-0.27.0/docs//345/233/276/350/241/250/344/270/216Excel.md +0 -41
  78. briefloop-0.27.0/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md +0 -85
  79. briefloop-0.27.0/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md +0 -32
  80. briefloop-0.27.0/docs//345/256/232/346/227/266/346/212/245/345/221/212.md +0 -29
  81. briefloop-0.27.0/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md +0 -11
  82. briefloop-0.27.0/docs//346/212/245/345/221/212/347/274/226/350/276/221/344/270/216/346/250/241/346/235/277.md +0 -64
  83. briefloop-0.27.0/docs//346/241/214/351/235/242/345/256/211/350/243/205/344/270/216/346/233/264/346/226/260.md +0 -64
  84. briefloop-0.27.0/docs//346/267/261/345/272/246/347/240/224/347/251/266/344/270/216/344/272/213/345/256/236/346/240/270/346/237/245.md +0 -44
  85. briefloop-0.27.0/docs//347/211/210/346/234/254/344/270/200/350/207/264/346/200/247/346/243/200/346/237/245.md +0 -35
  86. briefloop-0.27.0/docs//350/241/214/344/270/232/346/212/245/345/221/212.md +0 -60
  87. briefloop-0.27.0/docs//350/257/201/345/210/270/347/240/224/347/251/266.md +0 -15
  88. briefloop-0.27.0/docs//350/257/201/346/215/256/344/270/216/347/273/223/350/256/272/350/277/275/346/272/257.md +0 -30
  89. briefloop-0.27.0/docs//350/277/220/350/241/214/346/227/266/351/200/211/346/213/251/344/270/216/346/243/200/346/265/213.md +0 -15
  90. briefloop-0.27.0/docs//351/252/214/346/224/266/350/256/260/345/275/225.md +0 -395
  91. briefloop-0.27.0/examples/internal-weekly-report/README.md +0 -22
  92. briefloop-0.27.0/examples/internal-weekly-report/report.md +0 -19
  93. briefloop-0.27.0/examples/internal-weekly-report/source.txt +0 -7
  94. briefloop-0.27.0/examples/meeting-minutes/transcript.txt +0 -13
  95. briefloop-0.27.0/examples/stock-research/earnings-event.txt +0 -17
  96. briefloop-0.27.0/frontend/api.js +0 -22
  97. briefloop-0.27.0/frontend/app-updates.js +0 -90
  98. briefloop-0.27.0/frontend/app.js +0 -2420
  99. briefloop-0.27.0/frontend/assessment-checks.js +0 -11
  100. briefloop-0.27.0/frontend/assessment-panel.js +0 -211
  101. briefloop-0.27.0/frontend/citation-evidence.js +0 -13
  102. briefloop-0.27.0/frontend/clipboard.js +0 -10
  103. briefloop-0.27.0/frontend/composer-options.js +0 -43
  104. briefloop-0.27.0/frontend/connectors.js +0 -93
  105. briefloop-0.27.0/frontend/delivery.js +0 -82
  106. briefloop-0.27.0/frontend/dom.js +0 -7
  107. briefloop-0.27.0/frontend/excel-export.js +0 -30
  108. briefloop-0.27.0/frontend/fact-check-availability.js +0 -14
  109. briefloop-0.27.0/frontend/fact-check-grants.js +0 -33
  110. briefloop-0.27.0/frontend/jev-checks.js +0 -55
  111. briefloop-0.27.0/frontend/job-presentation.js +0 -32
  112. briefloop-0.27.0/frontend/learning-retry.js +0 -11
  113. briefloop-0.27.0/frontend/length-controls.js +0 -67
  114. briefloop-0.27.0/frontend/mcp-selection.js +0 -31
  115. briefloop-0.27.0/frontend/model-catalog.js +0 -198
  116. briefloop-0.27.0/frontend/native-requests.js +0 -121
  117. briefloop-0.27.0/frontend/notifications.js +0 -58
  118. briefloop-0.27.0/frontend/office-tools.js +0 -118
  119. briefloop-0.27.0/frontend/polling.js +0 -17
  120. briefloop-0.27.0/frontend/previous-report.js +0 -32
  121. briefloop-0.27.0/frontend/provider-capabilities.js +0 -22
  122. briefloop-0.27.0/frontend/quick-report.js +0 -79
  123. briefloop-0.27.0/frontend/readers.js +0 -52
  124. briefloop-0.27.0/frontend/reasoning-controls.js +0 -68
  125. briefloop-0.27.0/frontend/report-browsing.js +0 -113
  126. briefloop-0.27.0/frontend/report-export.js +0 -106
  127. briefloop-0.27.0/frontend/report-language.js +0 -58
  128. briefloop-0.27.0/frontend/report-panels.js +0 -14
  129. briefloop-0.27.0/frontend/report-sources.js +0 -43
  130. briefloop-0.27.0/frontend/review-controls.js +0 -144
  131. briefloop-0.27.0/frontend/review-coverage.js +0 -12
  132. briefloop-0.27.0/frontend/review-results.js +0 -20
  133. briefloop-0.27.0/frontend/review-status.js +0 -99
  134. briefloop-0.27.0/frontend/revision-questions.js +0 -42
  135. briefloop-0.27.0/frontend/rich-document.js +0 -110
  136. briefloop-0.27.0/frontend/runtime-cards.js +0 -55
  137. briefloop-0.27.0/frontend/runtime-permission-modes.js +0 -32
  138. briefloop-0.27.0/frontend/runtime-permission-panel.js +0 -91
  139. briefloop-0.27.0/frontend/schedules.js +0 -33
  140. briefloop-0.27.0/frontend/skill-verification.js +0 -17
  141. briefloop-0.27.0/frontend/source-library-search.js +0 -30
  142. briefloop-0.27.0/frontend/source-upload.js +0 -65
  143. briefloop-0.27.0/frontend/task-progress.js +0 -26
  144. briefloop-0.27.0/frontend/template-output.js +0 -171
  145. briefloop-0.27.0/frontend/templates.js +0 -91
  146. briefloop-0.27.0/frontend/time.js +0 -25
  147. briefloop-0.27.0/frontend/uploads.js +0 -46
  148. briefloop-0.27.0/frontend/version-diff.js +0 -43
  149. briefloop-0.27.0/frontend/welcome.js +0 -22
  150. briefloop-0.27.0/package-lock.json +0 -1092
  151. briefloop-0.27.0/package.json +0 -21
  152. briefloop-0.27.0/probes/mcp_m0/README.md +0 -92
  153. briefloop-0.27.0/probes/mcp_m0/probe.py +0 -273
  154. briefloop-0.27.0/probes/mcp_m0/requirements.txt +0 -2
  155. briefloop-0.27.0/probes/mcp_m0/server.py +0 -149
  156. briefloop-0.27.0/runtime-bridge/README.md +0 -67
  157. briefloop-0.27.0/runtime-bridge/bridge.test.mjs +0 -517
  158. briefloop-0.27.0/runtime-bridge/build.mjs +0 -6
  159. briefloop-0.27.0/runtime-bridge/catalog.json +0 -205
  160. briefloop-0.27.0/runtime-bridge/claude.ts +0 -62
  161. briefloop-0.27.0/runtime-bridge/main.ts +0 -344
  162. briefloop-0.27.0/runtime-bridge/permission-catalog.ts +0 -72
  163. briefloop-0.27.0/runtime-bridge/pi.ts +0 -89
  164. briefloop-0.27.0/runtime-bridge/reasoning.ts +0 -43
  165. briefloop-0.27.0/runtime-bridge/user-input.ts +0 -53
  166. briefloop-0.27.0/runtime-bridge/windows-command.ts +0 -22
  167. briefloop-0.27.0/runtime-bridge/zcode.ts +0 -123
  168. briefloop-0.27.0/scripts/build_frontend.mjs +0 -41
  169. briefloop-0.27.0/scripts/build_frontend_licenses.mjs +0 -71
  170. briefloop-0.27.0/scripts/check_versions.py +0 -169
  171. briefloop-0.27.0/scripts/sync_versions.py +0 -39
  172. briefloop-0.27.0/scripts/test_frontend.mjs +0 -14
  173. briefloop-0.27.0/src/briefloop/__init__.py +0 -1
  174. briefloop-0.27.0/start.ps1 +0 -6
  175. briefloop-0.27.0/start.sh +0 -4
  176. briefloop-0.27.0/tests/check_distribution.py +0 -62
  177. briefloop-0.27.0/tests/frontend_app_updates.mjs +0 -70
  178. briefloop-0.27.0/tests/frontend_assessment_checks.mjs +0 -12
  179. briefloop-0.27.0/tests/frontend_chat_attachments.mjs +0 -52
  180. briefloop-0.27.0/tests/frontend_chat_commands.mjs +0 -30
  181. briefloop-0.27.0/tests/frontend_chat_drafts.mjs +0 -79
  182. briefloop-0.27.0/tests/frontend_chat_layout.mjs +0 -116
  183. briefloop-0.27.0/tests/frontend_chat_polling.mjs +0 -81
  184. briefloop-0.27.0/tests/frontend_checkout_eol.mjs +0 -34
  185. briefloop-0.27.0/tests/frontend_citation_clipboard.mjs +0 -71
  186. briefloop-0.27.0/tests/frontend_citation_edit.mjs +0 -40
  187. briefloop-0.27.0/tests/frontend_citation_evidence.mjs +0 -14
  188. briefloop-0.27.0/tests/frontend_clipboard_fallback.mjs +0 -10
  189. briefloop-0.27.0/tests/frontend_excel_export.mjs +0 -111
  190. briefloop-0.27.0/tests/frontend_export_menu.mjs +0 -12
  191. briefloop-0.27.0/tests/frontend_fact_check_availability.mjs +0 -25
  192. briefloop-0.27.0/tests/frontend_fact_check_grants.mjs +0 -140
  193. briefloop-0.27.0/tests/frontend_fast_mode.mjs +0 -34
  194. briefloop-0.27.0/tests/frontend_home_v2.mjs +0 -95
  195. briefloop-0.27.0/tests/frontend_job_presentation.mjs +0 -22
  196. briefloop-0.27.0/tests/frontend_learning_authorization.mjs +0 -63
  197. briefloop-0.27.0/tests/frontend_learning_retry.mjs +0 -12
  198. briefloop-0.27.0/tests/frontend_length_controls.mjs +0 -62
  199. briefloop-0.27.0/tests/frontend_licenses.mjs +0 -41
  200. briefloop-0.27.0/tests/frontend_live_status.mjs +0 -24
  201. briefloop-0.27.0/tests/frontend_markdown_import.mjs +0 -23
  202. briefloop-0.27.0/tests/frontend_mcp_selection.mjs +0 -11
  203. briefloop-0.27.0/tests/frontend_model_catalog_refresh.mjs +0 -154
  204. briefloop-0.27.0/tests/frontend_model_label.mjs +0 -53
  205. briefloop-0.27.0/tests/frontend_model_selection.mjs +0 -65
  206. briefloop-0.27.0/tests/frontend_native_requests.mjs +0 -49
  207. briefloop-0.27.0/tests/frontend_native_runtime.mjs +0 -42
  208. briefloop-0.27.0/tests/frontend_office_tools.mjs +0 -289
  209. briefloop-0.27.0/tests/frontend_open_brief_status.mjs +0 -139
  210. briefloop-0.27.0/tests/frontend_pending_report.mjs +0 -19
  211. briefloop-0.27.0/tests/frontend_polling.mjs +0 -68
  212. briefloop-0.27.0/tests/frontend_previous_report.mjs +0 -23
  213. briefloop-0.27.0/tests/frontend_progress_race.mjs +0 -106
  214. briefloop-0.27.0/tests/frontend_provider_capabilities.mjs +0 -75
  215. briefloop-0.27.0/tests/frontend_quick_report.mjs +0 -71
  216. briefloop-0.27.0/tests/frontend_readers.mjs +0 -42
  217. briefloop-0.27.0/tests/frontend_reasoning_controls.mjs +0 -58
  218. briefloop-0.27.0/tests/frontend_release_controls.mjs +0 -78
  219. briefloop-0.27.0/tests/frontend_release_navigation.mjs +0 -94
  220. briefloop-0.27.0/tests/frontend_report_browsing.mjs +0 -69
  221. briefloop-0.27.0/tests/frontend_report_chat_drawer.mjs +0 -43
  222. briefloop-0.27.0/tests/frontend_report_export.mjs +0 -131
  223. briefloop-0.27.0/tests/frontend_report_language.mjs +0 -41
  224. briefloop-0.27.0/tests/frontend_report_load.mjs +0 -26
  225. briefloop-0.27.0/tests/frontend_report_outline.mjs +0 -68
  226. briefloop-0.27.0/tests/frontend_report_panels.mjs +0 -79
  227. briefloop-0.27.0/tests/frontend_review_capability.mjs +0 -101
  228. briefloop-0.27.0/tests/frontend_review_coverage.mjs +0 -27
  229. briefloop-0.27.0/tests/frontend_review_status.mjs +0 -112
  230. briefloop-0.27.0/tests/frontend_revision_questions.mjs +0 -40
  231. briefloop-0.27.0/tests/frontend_runtime_discovery.mjs +0 -58
  232. briefloop-0.27.0/tests/frontend_runtime_feedback.mjs +0 -16
  233. briefloop-0.27.0/tests/frontend_runtime_permission_panel.mjs +0 -112
  234. briefloop-0.27.0/tests/frontend_save_barrier.mjs +0 -212
  235. briefloop-0.27.0/tests/frontend_settings_workspaces.mjs +0 -24
  236. briefloop-0.27.0/tests/frontend_setup_state.mjs +0 -109
  237. briefloop-0.27.0/tests/frontend_skill_verification.mjs +0 -17
  238. briefloop-0.27.0/tests/frontend_source_library.mjs +0 -65
  239. briefloop-0.27.0/tests/frontend_source_search.mjs +0 -24
  240. briefloop-0.27.0/tests/frontend_source_upload.mjs +0 -51
  241. briefloop-0.27.0/tests/frontend_startup_recovery.mjs +0 -99
  242. briefloop-0.27.0/tests/frontend_task_progress.mjs +0 -64
  243. briefloop-0.27.0/tests/frontend_template_groups.mjs +0 -74
  244. briefloop-0.27.0/tests/frontend_template_output.mjs +0 -149
  245. briefloop-0.27.0/tests/frontend_update_notifications.mjs +0 -48
  246. briefloop-0.27.0/tests/frontend_upload_limits.mjs +0 -23
  247. briefloop-0.27.0/tests/frontend_version_bodies.mjs +0 -78
  248. briefloop-0.27.0/tests/frontend_version_diff.mjs +0 -19
  249. briefloop-0.27.0/tests/frontend_welcome_gate.mjs +0 -114
  250. briefloop-0.27.0/tests/frontend_workspace_proposal.mjs +0 -34
  251. briefloop-0.27.0/tests/frontend_writing_preferences.mjs +0 -45
  252. briefloop-0.27.0/tests/test_agent_backend.py +0 -36
  253. briefloop-0.27.0/tests/test_agent_commands.py +0 -197
  254. briefloop-0.27.0/tests/test_analyst_draft_versions.py +0 -183
  255. briefloop-0.27.0/tests/test_assessment_admission_recovery.py +0 -17
  256. briefloop-0.27.0/tests/test_assessment_followup.py +0 -103
  257. briefloop-0.27.0/tests/test_background_no_question.py +0 -33
  258. briefloop-0.27.0/tests/test_bridge_harness.py +0 -389
  259. briefloop-0.27.0/tests/test_builtin_templates.py +0 -110
  260. briefloop-0.27.0/tests/test_chat_dispatch.py +0 -82
  261. briefloop-0.27.0/tests/test_chat_execution.py +0 -137
  262. briefloop-0.27.0/tests/test_chat_model_selection.py +0 -84
  263. briefloop-0.27.0/tests/test_cli_doctor.py +0 -16
  264. briefloop-0.27.0/tests/test_codex_idle.py +0 -63
  265. briefloop-0.27.0/tests/test_connection_test_history.py +0 -58
  266. briefloop-0.27.0/tests/test_connector_authorization.py +0 -137
  267. briefloop-0.27.0/tests/test_connector_empty_catalog.py +0 -86
  268. briefloop-0.27.0/tests/test_connector_materials.py +0 -217
  269. briefloop-0.27.0/tests/test_connector_tasks.py +0 -23
  270. briefloop-0.27.0/tests/test_connectors.py +0 -191
  271. briefloop-0.27.0/tests/test_core.py +0 -86
  272. briefloop-0.27.0/tests/test_cross_module_regressions.py +0 -43
  273. briefloop-0.27.0/tests/test_delivery_checks.py +0 -388
  274. briefloop-0.27.0/tests/test_delivery_consumers.py +0 -64
  275. briefloop-0.27.0/tests/test_demo.py +0 -77
  276. briefloop-0.27.0/tests/test_desktop_lifecycle.py +0 -162
  277. briefloop-0.27.0/tests/test_document_workflows.py +0 -104
  278. briefloop-0.27.0/tests/test_draft_completion.py +0 -92
  279. briefloop-0.27.0/tests/test_draft_contract.py +0 -72
  280. briefloop-0.27.0/tests/test_english_reports.py +0 -121
  281. briefloop-0.27.0/tests/test_entrypoint.py +0 -22
  282. briefloop-0.27.0/tests/test_evidence.py +0 -175
  283. briefloop-0.27.0/tests/test_evidence_parse_failures.py +0 -91
  284. briefloop-0.27.0/tests/test_execution_records.py +0 -49
  285. briefloop-0.27.0/tests/test_execution_timing.py +0 -4
  286. briefloop-0.27.0/tests/test_export_admission.py +0 -253
  287. briefloop-0.27.0/tests/test_export_layout_swap.py +0 -59
  288. briefloop-0.27.0/tests/test_export_xlsx.py +0 -628
  289. briefloop-0.27.0/tests/test_external_requests.py +0 -85
  290. briefloop-0.27.0/tests/test_fact_check_contract.py +0 -261
  291. briefloop-0.27.0/tests/test_fact_check_orchestration.py +0 -309
  292. briefloop-0.27.0/tests/test_fact_check_phase.py +0 -124
  293. briefloop-0.27.0/tests/test_fact_check_review.py +0 -51
  294. briefloop-0.27.0/tests/test_fact_check_switch.py +0 -34
  295. briefloop-0.27.0/tests/test_fact_status_tool.py +0 -50
  296. briefloop-0.27.0/tests/test_fast_evidence.py +0 -68
  297. briefloop-0.27.0/tests/test_fast_mode.py +0 -59
  298. briefloop-0.27.0/tests/test_fast_qualifier_checks.py +0 -50
  299. briefloop-0.27.0/tests/test_fast_reports.py +0 -74
  300. briefloop-0.27.0/tests/test_fast_research.py +0 -44
  301. briefloop-0.27.0/tests/test_figure_exports.py +0 -85
  302. briefloop-0.27.0/tests/test_figure_flow.py +0 -46
  303. briefloop-0.27.0/tests/test_figure_text.py +0 -89
  304. briefloop-0.27.0/tests/test_figures.py +0 -109
  305. briefloop-0.27.0/tests/test_generation_schema_guidance.py +0 -60
  306. briefloop-0.27.0/tests/test_harness.py +0 -415
  307. briefloop-0.27.0/tests/test_host_bins.py +0 -95
  308. briefloop-0.27.0/tests/test_human_learning.py +0 -101
  309. briefloop-0.27.0/tests/test_industry_export.py +0 -69
  310. briefloop-0.27.0/tests/test_industry_flow.py +0 -72
  311. briefloop-0.27.0/tests/test_industry_research.py +0 -69
  312. briefloop-0.27.0/tests/test_interactive_runtime.py +0 -126
  313. briefloop-0.27.0/tests/test_jev_checks.py +0 -157
  314. briefloop-0.27.0/tests/test_learning_authorization.py +0 -170
  315. briefloop-0.27.0/tests/test_learning_integrity.py +0 -50
  316. briefloop-0.27.0/tests/test_length.py +0 -44
  317. briefloop-0.27.0/tests/test_length_policy.py +0 -94
  318. briefloop-0.27.0/tests/test_markdown_download.py +0 -30
  319. briefloop-0.27.0/tests/test_media_sources.py +0 -188
  320. briefloop-0.27.0/tests/test_model_catalog_defaults.py +0 -50
  321. briefloop-0.27.0/tests/test_multimodal_harness.py +0 -96
  322. briefloop-0.27.0/tests/test_multimodal_http.py +0 -32
  323. briefloop-0.27.0/tests/test_native_analyst.py +0 -221
  324. briefloop-0.27.0/tests/test_native_evaluator.py +0 -232
  325. briefloop-0.27.0/tests/test_native_harness.py +0 -383
  326. briefloop-0.27.0/tests/test_native_learning.py +0 -90
  327. briefloop-0.27.0/tests/test_native_orchestrator.py +0 -401
  328. briefloop-0.27.0/tests/test_native_provider_storage.py +0 -49
  329. briefloop-0.27.0/tests/test_native_providers.py +0 -71
  330. briefloop-0.27.0/tests/test_native_research_closeout.py +0 -38
  331. briefloop-0.27.0/tests/test_native_review_contract.py +0 -114
  332. briefloop-0.27.0/tests/test_native_scout.py +0 -343
  333. briefloop-0.27.0/tests/test_notifications.py +0 -45
  334. briefloop-0.27.0/tests/test_npm_native_shim.py +0 -34
  335. briefloop-0.27.0/tests/test_numeric_occurrence_review.py +0 -157
  336. briefloop-0.27.0/tests/test_office_cli.py +0 -699
  337. briefloop-0.27.0/tests/test_office_source_structure.py +0 -101
  338. briefloop-0.27.0/tests/test_office_surfaces.py +0 -170
  339. briefloop-0.27.0/tests/test_ooxml_order.py +0 -54
  340. briefloop-0.27.0/tests/test_opencode_harness.py +0 -895
  341. briefloop-0.27.0/tests/test_opencode_idle.py +0 -224
  342. briefloop-0.27.0/tests/test_opencode_prompt_versions.py +0 -55
  343. briefloop-0.27.0/tests/test_opencode_provider.py +0 -94
  344. briefloop-0.27.0/tests/test_opencode_questions.py +0 -187
  345. briefloop-0.27.0/tests/test_opencode_reasoning.py +0 -40
  346. briefloop-0.27.0/tests/test_opencode_review_version.py +0 -79
  347. briefloop-0.27.0/tests/test_opencode_search_prompt.py +0 -80
  348. briefloop-0.27.0/tests/test_opencode_server_stdin.py +0 -135
  349. briefloop-0.27.0/tests/test_opencode_v2.py +0 -303
  350. briefloop-0.27.0/tests/test_opencode_version_probe.py +0 -40
  351. briefloop-0.27.0/tests/test_posix_process_tree.py +0 -165
  352. briefloop-0.27.0/tests/test_pr593_roundtrip.py +0 -44
  353. briefloop-0.27.0/tests/test_previous_report.py +0 -140
  354. briefloop-0.27.0/tests/test_product_summary_consistency.py +0 -45
  355. briefloop-0.27.0/tests/test_progress.py +0 -50
  356. briefloop-0.27.0/tests/test_progress_pipeline.py +0 -18
  357. briefloop-0.27.0/tests/test_provider_catalog.py +0 -185
  358. briefloop-0.27.0/tests/test_public_research.py +0 -152
  359. briefloop-0.27.0/tests/test_quality_reading_context.py +0 -147
  360. briefloop-0.27.0/tests/test_reader_contract.py +0 -182
  361. briefloop-0.27.0/tests/test_reader_profiles.py +0 -133
  362. briefloop-0.27.0/tests/test_reader_source_export.py +0 -149
  363. briefloop-0.27.0/tests/test_reader_workflow.py +0 -109
  364. briefloop-0.27.0/tests/test_reconciliation.py +0 -183
  365. briefloop-0.27.0/tests/test_release.py +0 -366
  366. briefloop-0.27.0/tests/test_release_identity.py +0 -71
  367. briefloop-0.27.0/tests/test_report_browsing.py +0 -141
  368. briefloop-0.27.0/tests/test_report_concurrency.py +0 -20
  369. briefloop-0.27.0/tests/test_report_deletion.py +0 -84
  370. briefloop-0.27.0/tests/test_report_length_feedback.py +0 -103
  371. briefloop-0.27.0/tests/test_report_path_regressions.py +0 -57
  372. briefloop-0.27.0/tests/test_report_time.py +0 -124
  373. briefloop-0.27.0/tests/test_research_budget.py +0 -184
  374. briefloop-0.27.0/tests/test_research_gap_updates.py +0 -212
  375. briefloop-0.27.0/tests/test_research_handoff.py +0 -111
  376. briefloop-0.27.0/tests/test_research_plan.py +0 -300
  377. briefloop-0.27.0/tests/test_research_response_admission.py +0 -173
  378. briefloop-0.27.0/tests/test_resume_in_place.py +0 -20
  379. briefloop-0.27.0/tests/test_review.py +0 -75
  380. briefloop-0.27.0/tests/test_review_capability.py +0 -172
  381. briefloop-0.27.0/tests/test_review_finding_consistency.py +0 -251
  382. briefloop-0.27.0/tests/test_review_learning.py +0 -47
  383. briefloop-0.27.0/tests/test_review_modes.py +0 -48
  384. briefloop-0.27.0/tests/test_review_packet_paths.py +0 -63
  385. briefloop-0.27.0/tests/test_review_packet_utf8.py +0 -236
  386. briefloop-0.27.0/tests/test_review_schema_drift.py +0 -41
  387. briefloop-0.27.0/tests/test_review_snapshot.py +0 -52
  388. briefloop-0.27.0/tests/test_review_visual_input.py +0 -118
  389. briefloop-0.27.0/tests/test_revision_citations.py +0 -164
  390. briefloop-0.27.0/tests/test_revision_edits.py +0 -213
  391. briefloop-0.27.0/tests/test_revision_policy.py +0 -71
  392. briefloop-0.27.0/tests/test_rich_document.py +0 -245
  393. briefloop-0.27.0/tests/test_role_models.py +0 -26
  394. briefloop-0.27.0/tests/test_runtime_bridge.py +0 -79
  395. briefloop-0.27.0/tests/test_runtime_bridge_idle.py +0 -75
  396. briefloop-0.27.0/tests/test_runtime_concurrency.py +0 -6
  397. briefloop-0.27.0/tests/test_runtime_json_bom.py +0 -46
  398. briefloop-0.27.0/tests/test_runtime_liveness.py +0 -168
  399. briefloop-0.27.0/tests/test_runtime_names.py +0 -40
  400. briefloop-0.27.0/tests/test_runtime_permissions.py +0 -183
  401. briefloop-0.27.0/tests/test_runtime_retry.py +0 -57
  402. briefloop-0.27.0/tests/test_runtime_settlement.py +0 -51
  403. briefloop-0.27.0/tests/test_schedules.py +0 -53
  404. briefloop-0.27.0/tests/test_scout_experiment.py +0 -54
  405. briefloop-0.27.0/tests/test_search_credentials.py +0 -79
  406. briefloop-0.27.0/tests/test_search_policy.py +0 -56
  407. briefloop-0.27.0/tests/test_semantic_experiment.py +0 -348
  408. briefloop-0.27.0/tests/test_semantic_governance.py +0 -199
  409. briefloop-0.27.0/tests/test_server_boundary.py +0 -183
  410. briefloop-0.27.0/tests/test_settings_transactions.py +0 -188
  411. briefloop-0.27.0/tests/test_skill_verification.py +0 -161
  412. briefloop-0.27.0/tests/test_software_version.py +0 -37
  413. briefloop-0.27.0/tests/test_source_ingestion.py +0 -218
  414. briefloop-0.27.0/tests/test_source_library_search.py +0 -100
  415. briefloop-0.27.0/tests/test_source_recovery_regressions.py +0 -31
  416. briefloop-0.27.0/tests/test_source_updates.py +0 -225
  417. briefloop-0.27.0/tests/test_sources_provenance.py +0 -327
  418. briefloop-0.27.0/tests/test_store_sqlite_benchmark.py +0 -110
  419. briefloop-0.27.0/tests/test_table_citation_advisory.py +0 -102
  420. briefloop-0.27.0/tests/test_task_labels.py +0 -50
  421. briefloop-0.27.0/tests/test_task_notify.py +0 -75
  422. briefloop-0.27.0/tests/test_task_progress.py +0 -3
  423. briefloop-0.27.0/tests/test_tavily.py +0 -108
  424. briefloop-0.27.0/tests/test_template_conversion.py +0 -339
  425. briefloop-0.27.0/tests/test_template_conversion_http.py +0 -86
  426. briefloop-0.27.0/tests/test_template_saved_state.py +0 -54
  427. briefloop-0.27.0/tests/test_templates.py +0 -46
  428. briefloop-0.27.0/tests/test_user_input.py +0 -139
  429. briefloop-0.27.0/tests/test_user_source_refresh.py +0 -167
  430. briefloop-0.27.0/tests/test_version_consistency.py +0 -73
  431. briefloop-0.27.0/tests/test_websearch.py +0 -29
  432. briefloop-0.27.0/tests/test_websearch_singleflight.py +0 -56
  433. briefloop-0.27.0/tests/test_wikiskill_engine_windows.py +0 -48
  434. briefloop-0.27.0/tests/test_windows_antigravity_permissions.py +0 -19
  435. briefloop-0.27.0/tests/test_windows_connector_acl.py +0 -119
  436. briefloop-0.27.0/tests/test_windows_distribution.py +0 -27
  437. briefloop-0.27.0/tests/test_windows_mcp_supervisor.py +0 -54
  438. briefloop-0.27.0/tests/test_windows_platform.py +0 -366
  439. briefloop-0.27.0/tests/test_windows_release_paths.py +0 -99
  440. briefloop-0.27.0/tests/test_windows_review_paths.py +0 -114
  441. briefloop-0.27.0/tests/test_windows_runtime_bundle.py +0 -43
  442. briefloop-0.27.0/tests/test_windows_xlsx_paths.py +0 -98
  443. briefloop-0.27.0/tests/test_word_import.py +0 -53
  444. briefloop-0.27.0/tests/test_word_source_locators.py +0 -93
  445. briefloop-0.27.0/tests/test_word_toc.py +0 -78
  446. briefloop-0.27.0/tests/test_worker_idle.py +0 -43
  447. briefloop-0.27.0/tests/test_workspace_action_errors.py +0 -35
  448. briefloop-0.27.0/tests/test_workspace_profile.py +0 -40
  449. briefloop-0.27.0/tests/test_workspaces.py +0 -166
  450. briefloop-0.27.0/tests/test_writer_assembly.py +0 -100
  451. briefloop-0.27.0/tests/test_writer_cli_guidance.py +0 -86
  452. briefloop-0.27.0/tests/test_writer_context.py +0 -132
  453. briefloop-0.27.0/tests/test_writer_input.py +0 -443
  454. briefloop-0.27.0/tests/test_xlsx_officecli_integration.py +0 -125
  455. briefloop-0.27.0/tests/test_xlsx_preview.py +0 -128
  456. briefloop-0.27.0/third_party/open-design/LICENSE +0 -201
  457. briefloop-0.27.0/third_party/open-design/NOTICE.md +0 -39
  458. briefloop-0.27.0/third_party/open-design/acp/constants.ts +0 -60
  459. briefloop-0.27.0/third_party/open-design/acp/json.ts +0 -147
  460. briefloop-0.27.0/third_party/open-design/acp/models.ts +0 -324
  461. briefloop-0.27.0/third_party/open-design/acp/rpc.ts +0 -327
  462. briefloop-0.27.0/third_party/open-design/acp/session-params.ts +0 -107
  463. briefloop-0.27.0/third_party/open-design/acp/types.ts +0 -18
  464. briefloop-0.27.0/third_party/open-design/byok-reference/byok-opencode.ts +0 -281
  465. briefloop-0.27.0/third_party/open-design/byok-reference/provider-models.ts +0 -427
  466. briefloop-0.27.0/third_party/open-design/core/index.ts +0 -1
  467. briefloop-0.27.0/third_party/open-design/core/json-line-stream.ts +0 -319
  468. briefloop-0.27.0/third_party/open-design/runtime-models/codex-models.ts +0 -110
  469. briefloop-0.27.0/third_party/open-design/runtime-models/mmd-routes.ts +0 -166
  470. briefloop-0.27.0/third_party/open-design/runtime-models/models.ts +0 -233
  471. briefloop-0.27.0/third_party/open-design/runtime-models/opencode-models.ts +0 -101
  472. {briefloop-0.27.0 → briefloop-0.27.1}/LICENSE +0 -0
  473. {briefloop-0.27.0 → briefloop-0.27.1}/THIRD_PARTY_NOTICES.md +0 -0
  474. {briefloop-0.27.0 → briefloop-0.27.1}/setup.cfg +0 -0
  475. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/__main__.py +0 -0
  476. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/_entrypoint.py +0 -0
  477. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/agent_commands.py +0 -0
  478. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/agent_prompts.py +0 -0
  479. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/analyst.py +0 -0
  480. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/analyst_drafts.py +0 -0
  481. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/app_server.py +0 -0
  482. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/audit_bundle.py +0 -0
  483. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/backends/__init__.py +0 -0
  484. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/backends/opencode_server.py +0 -0
  485. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/backends/opencode_v2.py +0 -0
  486. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/bocha.py +0 -0
  487. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/chat_dispatch.py +0 -0
  488. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/chat_execution.py +0 -0
  489. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/cli.py +0 -0
  490. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/codex_diagnostics.py +0 -0
  491. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/company_context.py +0 -0
  492. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/comparison_contract.py +0 -0
  493. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/conflicts.py +0 -0
  494. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/MATERIALS.md +0 -0
  495. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/README.md +0 -0
  496. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/__init__.py +0 -0
  497. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/config.py +0 -0
  498. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/grants.py +0 -0
  499. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/materials.py +0 -0
  500. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/receipts.py +0 -0
  501. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/runtime.py +0 -0
  502. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/runtime_tools.py +0 -0
  503. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/service.py +0 -0
  504. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/stdio_supervisor.py +0 -0
  505. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/task_client.py +0 -0
  506. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/tasks.py +0 -0
  507. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/transport.py +0 -0
  508. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/connectors/windows_acl.py +0 -0
  509. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/default_fonts.py +0 -0
  510. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/delivery_checks.py +0 -0
  511. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/demo.py +0 -0
  512. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/document_export.py +0 -0
  513. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/document_model.py +0 -0
  514. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/document_workflows.py +0 -0
  515. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/docx_text.py +0 -0
  516. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/draft_checks.py +0 -0
  517. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/draft_completion.py +0 -0
  518. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/duckduckgo.py +0 -0
  519. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/evaluation_reading.py +0 -0
  520. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/evidence.py +0 -0
  521. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/evidence_context.py +0 -0
  522. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/execution_timing.py +0 -0
  523. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/export_jobs.py +0 -0
  524. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/exports.py +0 -0
  525. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/external_client.py +0 -0
  526. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/external_requests.py +0 -0
  527. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/fact_check.py +0 -0
  528. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/fast_mode.py +0 -0
  529. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/fast_research.py +0 -0
  530. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/figure_support.py +0 -0
  531. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/figure_text.py +0 -0
  532. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/figures.py +0 -0
  533. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/harness.py +0 -0
  534. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/host_bins.py +0 -0
  535. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/industry_export.py +0 -0
  536. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/jev.py +0 -0
  537. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/jev_checks.py +0 -0
  538. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/learning_budget.py +0 -0
  539. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/length.py +0 -0
  540. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/media.py +0 -0
  541. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/native_engine.py +0 -0
  542. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/native_harness.py +0 -0
  543. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/native_providers.py +0 -0
  544. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/native_roles.py +0 -0
  545. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/notifications.py +0 -0
  546. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/office_cli.py +0 -0
  547. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/ooxml_order.py +0 -0
  548. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/opencode_harness.py +0 -0
  549. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/opencode_version.py +0 -0
  550. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/packet_views.py +0 -0
  551. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/parent_watch.py +0 -0
  552. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/platform_support.py +0 -0
  553. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/previous_report.py +0 -0
  554. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/process_host.py +0 -0
  555. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/projections.py +0 -0
  556. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/core.zh.md +0 -0
  557. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
  558. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
  559. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
  560. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.evaluator.zh.md +0 -0
  561. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
  562. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
  563. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
  564. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
  565. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
  566. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
  567. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/provider_catalog.py +0 -0
  568. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/readers.py +0 -0
  569. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/reconciliation.py +0 -0
  570. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/release.py +0 -0
  571. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/report_browsing.py +0 -0
  572. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/report_time.py +0 -0
  573. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/report_tools.py +0 -0
  574. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/research_budget.py +0 -0
  575. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/review_learning.py +0 -0
  576. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/revision_edits.py +0 -0
  577. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/revision_metadata.py +0 -0
  578. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/revision_policy.py +0 -0
  579. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/rpc_writer.py +0 -0
  580. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/runtime_bridge.py +0 -0
  581. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/runtime_permissions.py +0 -0
  582. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/runtime_reasoning.py +0 -0
  583. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/schedules.py +0 -0
  584. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/scout.py +0 -0
  585. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/scout_evidence.py +0 -0
  586. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/search_credentials.py +0 -0
  587. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/search_policy.py +0 -0
  588. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
  589. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
  590. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
  591. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
  592. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/skill_verification.py +0 -0
  593. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/skills.py +0 -0
  594. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/software_version.py +0 -0
  595. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/source_context.py +0 -0
  596. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/source_extraction.py +0 -0
  597. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/source_ingestion.py +0 -0
  598. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/source_library_search.py +0 -0
  599. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/source_search.py +0 -0
  600. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/source_updates.py +0 -0
  601. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/sources.py +0 -0
  602. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/frontend-licenses.txt +0 -0
  603. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/native-engine-licenses.txt +0 -0
  604. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/native-engine-models.json +0 -0
  605. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/native-engine.mjs +0 -0
  606. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-aider.png +0 -0
  607. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-amr.svg +0 -0
  608. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-antigravity.svg +0 -0
  609. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
  610. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
  611. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.mjs +0 -0
  612. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-briefloop.svg +0 -0
  613. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-claude.svg +0 -0
  614. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-codebuddy.svg +0 -0
  615. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-codex.svg +0 -0
  616. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-copilot.svg +0 -0
  617. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
  618. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-deepseek.svg +0 -0
  619. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-devin.png +0 -0
  620. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-grok-build.svg +0 -0
  621. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-hermes.svg +0 -0
  622. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-kilo.svg +0 -0
  623. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-kimi.svg +0 -0
  624. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-kiro.svg +0 -0
  625. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-mimo.svg +0 -0
  626. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-opencode.svg +0 -0
  627. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-pi.svg +0 -0
  628. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-qoder.svg +0 -0
  629. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-qwen.svg +0 -0
  630. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-reasoning.json +0 -0
  631. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-reasonix.svg +0 -0
  632. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-trae-cli.png +0 -0
  633. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/runtime-vibe.svg +0 -0
  634. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/static/tokens.css +0 -0
  635. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/task_labels.py +0 -0
  636. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/task_notify.py +0 -0
  637. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/tavily.py +0 -0
  638. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
  639. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
  640. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
  641. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
  642. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
  643. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
  644. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
  645. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
  646. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
  647. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
  648. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
  649. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
  650. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
  651. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
  652. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
  653. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
  654. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
  655. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
  656. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
  657. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
  658. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
  659. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
  660. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
  661. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
  662. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
  663. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
  664. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
  665. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
  666. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
  667. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
  668. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
  669. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
  670. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
  671. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
  672. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
  673. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
  674. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
  675. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
  676. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
  677. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
  678. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
  679. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
  680. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
  681. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
  682. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
  683. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
  684. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
  685. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
  686. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
  687. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
  688. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
  689. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
  690. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
  691. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
  692. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
  693. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
  694. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
  695. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
  696. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
  697. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
  698. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
  699. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
  700. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
  701. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
  702. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
  703. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
  704. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
  705. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
  706. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
  707. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
  708. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
  709. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
  710. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
  711. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
  712. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
  713. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
  714. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
  715. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
  716. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
  717. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
  718. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
  719. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
  720. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
  721. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
  722. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
  723. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
  724. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
  725. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
  726. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
  727. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
  728. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
  729. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
  730. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/template_conversion.py +0 -0
  731. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/templates.py +0 -0
  732. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/user_input.py +0 -0
  733. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/websearch.py +0 -0
  734. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/windows_process.py +0 -0
  735. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/word_import.py +0 -0
  736. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workbook_figures.py +0 -0
  737. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
  738. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
  739. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
  740. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
  741. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
  742. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
  743. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
  744. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
  745. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
  746. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
  747. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
  748. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
  749. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
  750. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
  751. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
  752. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
  753. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
  754. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
  755. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
  756. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
  757. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
  758. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
  759. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workspace_profile.py +0 -0
  760. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/workspaces.py +0 -0
  761. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/writer_assembly.py +0 -0
  762. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/writer_input.py +0 -0
  763. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/writing_guidance.py +0 -0
  764. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/xlsx_export.py +0 -0
  765. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop/zhipu.py +0 -0
  766. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop.egg-info/dependency_links.txt +0 -0
  767. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop.egg-info/entry_points.txt +0 -0
  768. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop.egg-info/requires.txt +0 -0
  769. {briefloop-0.27.0 → briefloop-0.27.1}/src/briefloop.egg-info/top_level.txt +0 -0
  770. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/__init__.py +0 -0
  771. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/__main__.py +0 -0
  772. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/_licenses/LICENSE +0 -0
  773. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/_licenses/NOTICE.md +0 -0
  774. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
  775. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
  776. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
  777. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
  778. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/alfworld/__init__.py +0 -0
  779. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/alfworld/act.sh +0 -0
  780. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/alfworld/rollout.py +0 -0
  781. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/alfworld/step.py +0 -0
  782. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/benchmarks/__init__.py +0 -0
  783. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/benchmarks/alfworld.py +0 -0
  784. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/benchmarks/livemath.py +0 -0
  785. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/benchmarks/sealqa.py +0 -0
  786. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
  787. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/cli.py +0 -0
  788. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/codex_identity.py +0 -0
  789. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/engine.py +0 -0
  790. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/feedback_loop.py +0 -0
  791. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/isolated/__init__.py +0 -0
  792. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/isolated/audit.py +0 -0
  793. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/isolated/runtime.py +0 -0
  794. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/isolated/tools_server.py +0 -0
  795. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/jsonl.py +0 -0
  796. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/k4_lock.py +0 -0
  797. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/livemath/__init__.py +0 -0
  798. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/livemath/loop.py +0 -0
  799. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/livemath/rollout.py +0 -0
  800. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/native_agents.py +0 -0
  801. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/__init__.py +0 -0
  802. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/dataset.py +0 -0
  803. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/fetch.py +0 -0
  804. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/loop.py +0 -0
  805. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/retrieval.py +0 -0
  806. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/reward.py +0 -0
  807. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/rollout.py +0 -0
  808. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/scoring.py +0 -0
  809. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/officeqa/wiki_agents.py +0 -0
  810. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/paper_alignment/__init__.py +0 -0
  811. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/paper_alignment/contracts.py +0 -0
  812. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/paper_alignment/evidence.py +0 -0
  813. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/product.py +0 -0
  814. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/product_cli.py +0 -0
  815. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/product_install.py +0 -0
  816. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/product_views.py +0 -0
  817. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
  818. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
  819. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
  820. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
  821. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
  822. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
  823. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
  824. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
  825. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
  826. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
  827. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
  828. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
  829. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
  830. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
  831. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
  832. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
  833. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
  834. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
  835. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
  836. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/protocol.json +0 -0
  837. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
  838. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
  839. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
  840. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
  841. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
  842. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
  843. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
  844. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
  845. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
  846. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
  847. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/protocol.json +0 -0
  848. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
  849. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
  850. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
  851. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
  852. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
  853. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
  854. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/README.md +0 -0
  855. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
  856. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
  857. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
  858. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
  859. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
  860. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
  861. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
  862. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
  863. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
  864. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
  865. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
  866. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
  867. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
  868. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
  869. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/executor.md +0 -0
  870. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
  871. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/proposer.md +0 -0
  872. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
  873. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
  874. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
  875. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
  876. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
  877. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
  878. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
  879. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
  880. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
  881. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
  882. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
  883. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
  884. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
  885. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
  886. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
  887. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
  888. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
  889. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
  890. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
  891. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
  892. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
  893. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
  894. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
  895. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/snapshot.json +0 -0
  896. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
  897. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
  898. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
  899. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
  900. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
  901. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
  902. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
  903. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
  904. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
  905. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
  906. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
  907. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
  908. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
  909. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
  910. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
  911. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
  912. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
  913. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
  914. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
  915. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
  916. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
  917. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
  918. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/protocol.json +0 -0
  919. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
  920. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
  921. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
  922. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
  923. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
  924. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
  925. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
  926. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
  927. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
  928. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
  929. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
  930. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
  931. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
  932. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
  933. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
  934. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
  935. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
  936. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/results.py +0 -0
  937. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/score_rules.py +0 -0
  938. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/scorer_trust.py +0 -0
  939. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/sealqa/__init__.py +0 -0
  940. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/sealqa/loop.py +0 -0
  941. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/sealqa/rollout.py +0 -0
  942. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/settings.py +0 -0
  943. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/skill_proposer.py +0 -0
  944. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/spreadsheet/__init__.py +0 -0
  945. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/spreadsheet/loop.py +0 -0
  946. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/spreadsheet/rollout.py +0 -0
  947. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/spreadsheet/study.py +0 -0
  948. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/tool_audit.py +0 -0
  949. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/wiki.py +0 -0
  950. {briefloop-0.27.0 → briefloop-0.27.1}/src/wikiskill/wiki_maintainer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: briefloop
3
- Version: 0.27.0
3
+ Version: 0.27.1
4
4
  Summary: Local multi-runtime agent workbench for sourced briefings, independent review and skill learning
5
5
  Author: Stahl-G
6
6
  License-Expression: MIT
@@ -327,7 +327,7 @@ npm test
327
327
 
328
328
  Reviewer 使用本任务固定核查包,在独立会话中返回结构化发现及处理说明的复核结果。设置可选**普通审阅**(默认)或**严格审阅**:普通模式通过 Codex、OpenCode 1.x/2.x 或 BriefLoop Agent 的实际只读通道执行,不承诺宿主自动加载的全局/项目上下文完全隔离;严格模式额外强制包内读取,目前由 BriefLoop Agent 的专用核查工具提供。选择严格模式不会自动降级或更换执行后端。两种模式使用相同的事实、证据及交付检查,新任务冻结实际模式,历史未记录模式的审阅不被补标为严格。
329
329
 
330
- 工作稿Word下载保持可用。“正式交付”另行检查当前版本的独立审阅、重要主张及必答内容、核心未核验、重大未决发现和冲突;高分不能抵消阻断项。审计包单独导出,逐来源选择原件、摘录或仅定位,缺省仅定位;离线校验为结构与一致性检查,不是事实真伪自动证明。旧正式件保留,更正或后续更新另建版本。
330
+ 独立审阅可在任一执行引擎上运行:Codex、OpenCode 与内置引擎强制只读;Claude、Antigravity 等 CLI 宿主无法由 BriefLoop 关闭自带工具,审阅改用其原生权限运行,记录上标明“未强制只读”并列出宿主报告的工具使用。严格审阅仍只在内置引擎上执行。工作稿Word下载保持可用。“正式交付”另行检查当前版本的独立审阅、重要主张及必答内容、核心未核验、重大未决发现和冲突;高分不能抵消阻断项。审计包单独导出,逐来源选择原件、摘录或仅定位,缺省仅定位;离线校验为结构与一致性检查,不是事实真伪自动证明。旧正式件保留,更正或后续更新另建版本。
331
331
 
332
332
  存在受限来源时,无法逐来源归属的审阅、回应、历史与内部研究自由文本会明确省略;包中保留身份、状态、定位和获准的证据片段。正式报告本身仍随包提供。旧版受限包需重新导出以应用完整权限投影,旧版全原件包继续支持下载和离线校验。
333
333
 
@@ -287,7 +287,7 @@ npm test
287
287
 
288
288
  Reviewer 使用本任务固定核查包,在独立会话中返回结构化发现及处理说明的复核结果。设置可选**普通审阅**(默认)或**严格审阅**:普通模式通过 Codex、OpenCode 1.x/2.x 或 BriefLoop Agent 的实际只读通道执行,不承诺宿主自动加载的全局/项目上下文完全隔离;严格模式额外强制包内读取,目前由 BriefLoop Agent 的专用核查工具提供。选择严格模式不会自动降级或更换执行后端。两种模式使用相同的事实、证据及交付检查,新任务冻结实际模式,历史未记录模式的审阅不被补标为严格。
289
289
 
290
- 工作稿Word下载保持可用。“正式交付”另行检查当前版本的独立审阅、重要主张及必答内容、核心未核验、重大未决发现和冲突;高分不能抵消阻断项。审计包单独导出,逐来源选择原件、摘录或仅定位,缺省仅定位;离线校验为结构与一致性检查,不是事实真伪自动证明。旧正式件保留,更正或后续更新另建版本。
290
+ 独立审阅可在任一执行引擎上运行:Codex、OpenCode 与内置引擎强制只读;Claude、Antigravity 等 CLI 宿主无法由 BriefLoop 关闭自带工具,审阅改用其原生权限运行,记录上标明“未强制只读”并列出宿主报告的工具使用。严格审阅仍只在内置引擎上执行。工作稿Word下载保持可用。“正式交付”另行检查当前版本的独立审阅、重要主张及必答内容、核心未核验、重大未决发现和冲突;高分不能抵消阻断项。审计包单独导出,逐来源选择原件、摘录或仅定位,缺省仅定位;离线校验为结构与一致性检查,不是事实真伪自动证明。旧正式件保留,更正或后续更新另建版本。
291
291
 
292
292
  存在受限来源时,无法逐来源归属的审阅、回应、历史与内部研究自由文本会明确省略;包中保留身份、状态、定位和获准的证据片段。正式报告本身仍随包提供。旧版受限包需重新导出以应用完整权限投影,旧版全原件包继续支持下载和离线校验。
293
293
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "briefloop"
7
- version = "0.27.0"
7
+ version = "0.27.1"
8
8
  description = "Local multi-runtime agent workbench for sourced briefings, independent review and skill learning"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -0,0 +1 @@
1
+ __version__ = "0.27.1"
@@ -1,4 +1,4 @@
1
- from .execution_records import sanitize
1
+ from .execution_records import sanitize, public_tool_name
2
2
  """Native CLI transports projected into the existing ChatStore, not another agent loop."""
3
3
  import base64
4
4
  import hashlib
@@ -239,7 +239,7 @@ class BridgeHarness(OpencodeHarness):
239
239
  elif kind=='tool':
240
240
  key=event.get('id') or uid('tool');tools[key]={**tools.get(key,{}),**event}
241
241
  tool=tools[key];complete=tool.get('status') in ('completed','failed','error')
242
- item={'id':key,'type':'runtime_tool','tool':tool.get('name','工具'),'status':tool.get('status','running'),
242
+ item={'id':key,'type':'runtime_tool','tool':public_tool_name(tool.get('name')),'status':tool.get('status','running'),
243
243
  'input':sanitize(tool.get('input')), 'output':sanitize(tool.get('output'))}
244
244
  self.chat.event(sid,'item/completed' if complete else 'item/started',{'item':item,'turnId':mid})
245
245
  if complete:
@@ -138,6 +138,11 @@ class ChatStore:
138
138
  event['data']['tokenUsage']=project_usage(event['seq'],event['data'])
139
139
  if not private:
140
140
  for message in messages:message.pop('prompt',None)
141
+ from .execution_records import public_tool_name
142
+ for event in events:
143
+ item = event['data'].get('item') if isinstance(event['data'], dict) else None
144
+ if isinstance(item, dict) and item.get('type') == 'runtime_tool':
145
+ item['tool'] = public_tool_name(item.get('tool'))
141
146
  if not reasoning:
142
147
  for message in messages:message.pop('reasoning',None)
143
148
  return {'session':session,'messages':messages,'events':events,'requests':requests,'token_usage':token_usage}
@@ -13,6 +13,15 @@ def _notify_owner(request):
13
13
  """Conversation that owns a task started from chat; never guessed."""
14
14
  return request.get('session_id') or os.environ.get('BRIEFLOOP_CHAT_SESSION') or None
15
15
 
16
+ def _session_backend(store, session_id):
17
+ if not session_id:
18
+ return None
19
+ rows = store.rows('SELECT runtime FROM chat_sessions WHERE id=?', (session_id,))
20
+ try:
21
+ return json.loads(rows[0]['runtime']).get('backend') if rows else None
22
+ except (TypeError, ValueError):
23
+ return None
24
+
16
25
  WORKSPACE_ACTIONS = (
17
26
  'capabilities','source_snapshot','source_change','source_impacts','refresh_source',
18
27
  'set_reader_contract','conflict_create','conflict_response','review_response','review_status',
@@ -20,7 +29,7 @@ WORKSPACE_ACTIONS = (
20
29
  'revise_document','templates','workflows','template_rebuild','template_import','import_word_revision',
21
30
  'company_review_complete','company_read','company_config','company_update','company_resolve',
22
31
  'profile_read','profile_update',
23
- 'freeze_research_plan','research_status','begin_research_round','finish_research_round',
32
+ 'freeze_research_plan','research_status','begin_research_round','finish_research_round','set_scout_tasks',
24
33
  'reconciliation_candidates','reconciliation_save','reconciliation_read',
25
34
  'export_word','inspect','generate','assess','comment','learn',
26
35
  )
@@ -143,6 +152,15 @@ def workspace_action(store, request):
143
152
  if action=='research_status':
144
153
  from .research_plan import status
145
154
  return status(store,request['run_id'])
155
+ if action=='set_scout_tasks':
156
+ from .scout_coverage import declare, update
157
+ if 'scout_tasks' in request:
158
+ result=declare(store,request['run_id'],request['scout_tasks'],round_id=request.get('round_id'))
159
+ if 'scout_outcomes' in request:
160
+ result=update(store,request['run_id'],request['scout_outcomes'],round_id=request.get('round_id'))
161
+ if 'scout_tasks' not in request and 'scout_outcomes' not in request:
162
+ raise ValueError('需要 scout_tasks 或 scout_outcomes')
163
+ return result
146
164
  if action=='freeze_research_plan':
147
165
  from .research_plan import freeze
148
166
  return freeze(store,request['run_id'],preset=request.get('preset'),structure=request.get('structure'))
@@ -151,7 +169,8 @@ def workspace_action(store, request):
151
169
  return begin_round(store,request['run_id'],target_gap_ids=request.get('target_gap_ids'),tasks=request.get('tasks'),job_id=request.get('job_id'))
152
170
  if action=='finish_research_round':
153
171
  from .research_plan import finish_round
154
- return finish_round(store,request['run_id'],round_id=request.get('round_id'),gaps=request.get('gaps'),summary=request.get('summary',''),gap_updates=request.get('gap_updates'),job_id=request.get('job_id'))
172
+ return finish_round(store,request['run_id'],round_id=request.get('round_id'),gaps=request.get('gaps'),summary=request.get('summary',''),gap_updates=request.get('gap_updates'),job_id=request.get('job_id'),
173
+ continue_research=request.get('continue_research') is True,early_stop_reason=str(request.get('early_stop_reason') or ''),scout_outcomes=request.get('scout_outcomes'))
155
174
  if action=='reconciliation_candidates':
156
175
  from .reconciliation import candidates
157
176
  return candidates(store,request['run_id'])
@@ -186,7 +205,12 @@ def workspace_action(store, request):
186
205
  runtime_payload={}
187
206
  if request.get('runtime'):
188
207
  from .backends import validate_backend
189
- backend=validate_backend(request['runtime'].get('agent_backend',store.settings().get('agent_backend','codex')))
208
+ # A model name only means something on its own engine. Without an explicit
209
+ # engine, use the engine of the conversation that sent this model, never the
210
+ # workspace default (a Claude chat once produced "Antigravity · opus").
211
+ backend=request['runtime'].get('agent_backend') or _session_backend(store,_notify_owner(request)) \
212
+ or store.settings().get('agent_backend','codex')
213
+ backend=validate_backend(backend)
190
214
  settings=Settings.model_validate({**store.settings(),**request['runtime'],'agent_backend':backend})
191
215
  runtime_payload={'runtime':runtime_fields(settings.model_dump(),backend),'agent_backend':backend}
192
216
  run=store.create_run(requirements.model_dump(),source_ids,research_protocol="quality_v1",
@@ -261,8 +285,9 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
261
285
  subagent_note=(OPENCODE_V2_SUBAGENT+'优先不传 model override,继承当前已冻结模型和推理档位;不要启动嵌套模型 CLI。'
262
286
  '宿主 question 工具不可用;需要澄清时直接在聊天回复中提问,用户下一条消息会继续本任务。')
263
287
  else:
264
- request_runtime={'model':runtime['model'],'reasoning_effort':runtime.get('effort'),
288
+ request_runtime={'agent_backend':backend,'model':runtime['model'],'reasoning_effort':runtime.get('effort'),
265
289
  'model_provider':runtime.get('model_provider')}
290
+ if backend=='codex':request_runtime['service_tier']=runtime.get('service_tier')
266
291
  runtime_json=json.dumps(request_runtime,ensure_ascii=False)
267
292
  runtime_label=runtime.get('effort') if runtime.get('effort') is not None else '不指定(provider 默认)'
268
293
  provider_label=runtime.get('model_provider') or f'沿用本机 {BACKEND_LABELS[backend]} 配置'
@@ -301,9 +326,10 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
301
326
  - {{"action":"profile_read"}}:读取本工作区基础设定(称呼、公司/组织、岗位等)。
302
327
  - {{"action":"profile_update","profile":{{"name":"称呼","organization":"公司/组织","role":"岗位","location":"城市","focus":"主要工作","report_types":"常做报告"}}}}:按上文约定保存用户主动提供或任务确有必要的基础信息;只写用户明确说过的内容,不猜、不编造,也不把这些当作报告证据。
303
328
  - {{"action":"research_status","run_id":"真实run ID"}}:读取该任务冻结的研究计划、轮次与用量。
329
+ - {{"action":"set_scout_tasks","run_id":"真实run ID","scout_tasks":[{{"slot_id":"scout-1","assignment":"明确研究方向","result_file":"本轮结果绝对路径"}}]}}:派发前登记完整承诺分工,与 plan.json.scout_tasks 相同;空计划明确写 []。预分配槽位不是承诺。分工不可静默删除;可追加新分工。实际派发后可用同 action 的 scout_outcomes=[{{"slot_id":"scout-1","status":"dispatched","reason":"真实子任务句柄"}}] 记录派发。join-scouts 自动接纳有效结果。
304
330
  - {{"action":"freeze_research_plan","run_id":"真实run ID","preset":"quick|standard|deep","structure":{{"breadth":6,"depth":2,"parallel":2}}}}:在第一次受控联网前冻结研究计划。预算只读取任务已授权的额度,不能借冻结扩大额度或替换模型/搜索源;相同内容重复提交幂等,不同内容会被拒绝。
305
331
  - {{"action":"begin_research_round","run_id":"真实run ID","target_gap_ids":["真实gap ID"],"tasks":[{{"slot_id":"scout-1"}}]}}:在当前轮已结束、且未超过 depth 上限时开始下一轮;必须引用前轮真实缺口 ID。
306
- - {{"action":"finish_research_round","run_id":"真实run ID","gaps":[{{"description":"真实缺口","source_ids":[],"related_claim_ids":[],"requirement_ids":[]}}],"summary":"本轮结论"}}:结束当前轮并生成真实 gap ID;可选 gap_updates 明确变更已登记缺口状态,每项 gap_id/status(open|partial|resolved)/reason/evidence(source_id/locator/excerpt,partial/resolved 至少一条,open 可为空),partial 另填 remaining_question;covered 不会关闭缺口。之后才能 begin 下一轮。
332
+ - {{"action":"finish_research_round","run_id":"真实run ID","gaps":[{{"description":"真实缺口","source_ids":[],"related_claim_ids":[],"requirement_ids":[]}}],"summary":"本轮结论"}}:结束当前轮并生成真实 gap ID;每个已承诺 Scout 分工须已 join,或在 scout_outcomes 中明确 slot_id、status=failed|skipped、reason,保留未检范围;不必用满槽位、预算或后续轮次。可选 gap_updates 明确变更已登记缺口状态,每项 gap_id/status(open|partial|resolved)/reason/evidence(source_id/locator/excerpt,partial/resolved 至少一条,open 可为空),partial 另填 remaining_question;covered 不会关闭缺口。还要继续检索时带 "continue_research":true;只完成第 1 轮且受控搜索额度用了不到一半就结束研究时,必须带 "early_stop_reason" 说明为何已覆盖本期重要事件,否则会被拒绝。之后才能 begin 下一轮。
307
333
  - {{"action":"reconciliation_candidates","run_id":"真实run ID"}}:读取本任务冻结的候选清单(来源与来源陈述),用于写作前对照。
308
334
  - {{"action":"reconciliation_save","run_id":"真实run ID","reconciliation":{{"status":"complete|partial|not_applicable|failed","examined_claim_ids":[],"unexamined_claim_ids":[],"relations":[{{"member_claim_ids":["真实claim ID","真实claim ID"],"relation":"compatible|different_scope|temporal_sequence|correction|supersession|republication|attributed_difference|contradiction|unknown","scope":"","basis_span_ids":[],"reason":"","proposed_treatment":"","affected_requirement_ids":[]}}],"open_questions":[],"coverage_notes":""}}}}:保存写作前对照快照。必须用 examined ∪ unexamined 明确覆盖候选清单全部来源陈述;关系必须引用真实来源陈述;不判定真假,只登记依据与建议写法。重复相同内容幂等。
309
335
  - {{"action":"reconciliation_read","run_id":"真实run ID","reconciliation_id":"真实对照ID"}}:读取对照快照;输入变化时返回 stale 标记。
@@ -311,7 +337,7 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
311
337
  - {{"action":"templates"}}:读取可选模板。用户要求上传材料用作主模板时用 {{"action":"template_import","source_id":"DOCX来源ID"}} 启动一次准备;准备完成后 generate.requirements.template_id 选择具体版本。需要重新准备已有模板版式时,用 {{"action":"template_rebuild","template_id":"已有模板ID"}} 从保留原件创建新模板版本;原模板和已绑定稿件保持不变,新任务选择返回的新模板ID。
312
338
  - {{"action":"read_report","version_id":"稿件ID"}}:读取富文档 JSON、引用和已存正文的 length_stats;revise_document 回执也给出保存后的确定性计数。按 count/rule 核对原始要求、读者约定及当前反馈,不估算字数;over_limit 只比较结构化 max_words,不表示已满足全部篇幅要求。用户明确要求修改内容/章节/图表时,将修改后的 JSON 保存到工作区文件,再用 {{"action":"revise_document","base_version":"刚读取版本ID","document_file":"工作区内JSON绝对路径"}} 保存新版本,不覆盖用户并发编辑。可选 citations 完整替换引用列表(source_id/locator/excerpt,schema 见 capabilities),省略则保留;只修改引用也保存新版本,定位描述不表示已独立核验。
313
339
  - {{"action":"import_word_revision","base_version":"用户指定基础版本","source_id":"DOCX来源ID"}}:导入用户修改的 Word。返回 needs_alignment 时先核对原件和基础版本,向用户说明对齐问题;仅按用户明确选择提供 accept_unaligned=true。用户希望更新模板时另用 template_import 并提供 parent_id。
314
- - {{"action":"generate","requirements":{{"title":"标题","objective":"用户目的","audience":"读者","language":"zh|en","extent":"compact|balanced|detailed","research_tier":"quick|standard|deep","allow_web":{str(bool(allow_web)).lower()},"period":"时间范围"}},"source_ids":["真实来源ID"],"runtime":{runtime_json}}}:正式生成可在页面编辑的简报。language 是报告正文语言(默认 zh);用户要英文报告时写 en,不传 target_words 时篇幅按英文词数默认。research_tier 是研究深度档位(默认 standard):quick 单轮检索,deep 预排 4 轮迭代研究;按用户明确要求选,用户未提就不写该字段。
340
+ - {{"action":"generate","requirements":{{"title":"标题","objective":"用户目的","audience":"读者","language":"zh|en","extent":"compact|balanced|detailed","research_tier":"quick|standard|deep","allow_web":{str(bool(allow_web)).lower()},"period":"时间范围"}},"source_ids":["真实来源ID"],"runtime":{runtime_json}}}:正式生成可在页面编辑的简报。language 是报告正文语言(默认 zh);用户要英文报告时写 en,不传 target_words 时篇幅按英文词数默认。research_tier 是研究深度档位(默认 standard):quick 单轮检索,deep 预排 4 轮迭代研究;按用户明确要求选,用户未提就不写该字段。scout_limit 是本报告最多可同时派发的 Scout 数(1–16),在提交前按信息量决定:一周左右约 4,月报约 8,跨多个行业或市场的大型报告可到 12–16;不写时系统按期间自动设定(月报 8,其余沿用工作区设置)。
315
341
  提交 generate 时,必须把本轮已经确认的 key_questions、writing_preferences、章节、期间和篇幅完整写进 requirements,不能只传标题摘要。用户给出的执行约束同样在提交前冻结:target_minutes 是软目标;hard_timeout_minutes=0 表示不设硬截止;research_budget 包含 search_requests、candidate_urls、source_pages;search_policy 沿用已授权设置。不得说“后台稍后配置”而遗漏已指定的额度。并行数要求写入 writing_preferences,供主 Agent 冻结研究计划时选择 structure.parallel;不改变共享预算。提交回执中的实际冻结值与用户要求不一致时明确说明,不宣称已应用。
316
342
  - {{"action":"assess","version_id":"真实简报版本ID"}}:为已有稿件安排评分。
317
343
  - {{"action":"comment","version_id":"真实简报版本ID","text":"用户反馈"}}:记录用户明确提出的反馈。页面自动学习开启时,保存反馈可能稍后自动触发学习,要如实告知。
@@ -212,8 +212,10 @@ def instructions(spec, role='analyst', *, include_spec=True):
212
212
 
213
213
  def research_record(store, brief):
214
214
  detail = json.loads(brief['detail']); refs = detail.get('citations', [])
215
+ from .plain_isolation import public_notes
216
+ notes = public_notes(detail.get('research_notes', []))
215
217
  return {'version_id': brief['id'], 'brief_hash': brief['hash'],
216
- 'notes': detail.get('research_notes', []), 'gaps': detail.get('gaps', []),
218
+ 'notes': notes, 'gaps': detail.get('gaps', []),
217
219
  'citations': [{**ref, 'source_name': store.one('sources', ref['source_id'])['name']} for ref in refs],
218
220
  'assessments': [json.loads(x['data']) for x in store.rows('SELECT data FROM assessments WHERE version_id=? ORDER BY rowid DESC', (brief['id'],))]}
219
221
 
@@ -15,6 +15,23 @@ _SECRET_HEADER=re.compile(r'''(?im)(?<![\w-])((?:proxy[-_])?authorization|(?:set
15
15
  _SECRET_ENV=re.compile(r'''(?ix)(["']?\b(?:[a-z0-9]+_)*(?:authorization|cookie)["']?\s*=\s*)(?:\[credential[ ]omitted\]|"[^"\n]*"|'[^'\n]*'|[^\s,;&}\]]+)''')
16
16
  _PRIVATE_KEY=re.compile(r'-----BEGIN (?:[A-Z ]+)?PRIVATE KEY-----.*?-----END (?:[A-Z ]+)?PRIVATE KEY-----',re.S)
17
17
 
18
+ # ACP "names" can be entire commands, paths or arbitrary host descriptions.
19
+ # Only exact known identifiers belong in compact public tool summaries.
20
+ _PUBLIC_TOOLS = frozenset('''Read Write Edit MultiEdit Bash Glob Grep LS NotebookEdit TodoWrite Task Agent WebFetch WebSearch
21
+ read write edit bash glob grep find ls task subagent shell search_web web_search webfetch websearch
22
+ read_file write_file edit_file list_directory read_many_files execute_command run_command
23
+ commandExecution command_execution fileChange mcpToolCall dynamicToolCall collabAgentToolCall
24
+ collab_tool_call imageView webSearch runtime_tool opencode_tool subagent_activity'''.split())
25
+ _OTHER_TOOL = '其他宿主工具'
26
+
27
+
28
+ def public_tool_name(value):
29
+ return value if isinstance(value, str) and value in _PUBLIC_TOOLS else _OTHER_TOOL
30
+
31
+
32
+ def public_tool_names(values):
33
+ return sorted({public_tool_name(value) for value in values}) if isinstance(values, list) else []
34
+
18
35
 
19
36
  def _secret_field(key, value):
20
37
  name = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', str(key)).lower()
@@ -55,8 +55,18 @@ def _plain_turn(worker, job, folder, prompt, *, phase=None):
55
55
  (folder / 'packet').mkdir(exist_ok=True)
56
56
  task = {**job, 'allow_web': False, 'plain_output': 'response.txt', 'plain_phase':phase, 'input_source_ids': [],
57
57
  'native_packet': {'role': 'quick_writer', 'run_id': json.loads(job['payload'])['run_id']}}
58
- return worker.runtime.execute(task, prompt, folder,
59
- resume_on_complete=int(json.loads(job['payload']).get('attempt',1))>1)
58
+ result = worker.runtime.execute(task, prompt, folder,
59
+ resume_on_complete=int(json.loads(job['payload']).get('attempt',1))>1)
60
+ from . import plain_isolation
61
+ isolation = plain_isolation.record(json.loads(job['payload']).get('agent_backend', 'codex'), folder)
62
+ worker.store.event(job['id'], 'plain_isolation', {'phase': phase or folder.name, **isolation,
63
+ 'message': plain_isolation.summary(isolation)})
64
+ return result
65
+
66
+
67
+ def _isolation(folder):
68
+ path = folder / 'isolation.json'
69
+ return json.loads(path.read_text(encoding='utf-8')) if path.exists() else None
60
70
 
61
71
 
62
72
  def _response(folder):
@@ -126,6 +136,10 @@ def generate(worker, job):
126
136
  data = {'title': req['title'], 'editor_document': markdown_document(text),
127
137
  'citations': [{'source_id': aliases[a]['source_id']} for a in sorted(cited)],
128
138
  'research_notes': [{'kind': 'fast_draft', 'summary': '一轮聚焦检索后根据已读取原文写作;未做完整事实核查,依据定位与评价在后台继续。' if research else '直接依据已有材料写作;未联网补搜,依据定位与评价在后台继续。'}]}
139
+ isolation = _isolation(folder / 'fast-writing')
140
+ if isolation:
141
+ from .plain_isolation import summary
142
+ data['research_notes'].append({'kind': 'fast_isolation', 'summary': summary(isolation), **isolation})
129
143
  if research:
130
144
  data['research_notes'].append({'kind':'fast_web_gaps','summary':'本次搜索与读取记录','gaps':research['gaps'],'reading_notices':research.get('notices',[]),
131
145
  'questions_before_reading':research.get('questions_before_reading',[])})
@@ -159,7 +173,8 @@ def enrich(worker, job, brief, folder):
159
173
  raise Conflict('材料与快速写作时的原文不同,请使用当前材料新建任务。')
160
174
  phase = folder / 'evidence'
161
175
  prompt = ('核对已保存报告,为重要结论补原文定位。不要改写正文,不搜索、不调用工具、不生成新的报告。'
162
- '只返回一个 JSON 对象,包含 citations 数组及 number_bindings 数组;没有可定位依据时留空,不猜测。'
176
+ '只返回一个 JSON 对象,包含 citations、number_bindings 和 unsupported 三个数组;没有可定位依据时留空,不猜测。'
177
+ 'unsupported 列出正文中在全部来源里找不到依据的重要结论,每条给 report_quote(正文连续原句)和 reason;不要因措辞概括而列入。'
163
178
  '每条 citation 使用 source_id(下方来源别名,如 S1)、report_quote(正文连续原句)、excerpt(连续逐字原文)。'
164
179
  'report_quote 必须能在报告正文中逐字找到;摘录应包含对应的主体、期间、单位及限定条件,不能用同来源的无关段落充数。'
165
180
  '无需猜行号;同一摘录在来源中重复时提供更长的唯一摘录。来源标题及相邻上下文由程序从冻结原文补入。'
@@ -212,8 +227,19 @@ def enrich(worker, job, brief, folder):
212
227
  details = {key:value for key,value in json.loads(brief['detail']).items() if key in BriefDraft.model_fields}
213
228
  details['citations'] = citations + [c for c in details.get('citations', []) if c['source_id'] not in {r['source_id'] for r in citations}]
214
229
  details['number_bindings'] = numbers
230
+ # Claims the materials do not cover. Mostly a slip in an enforced turn; in an
231
+ # observed turn it is where outside information the CLI brought in shows up.
232
+ unsupported = [{'report_quote': item['report_quote'], 'reason': str(item.get('reason', ''))[:500]}
233
+ for item in (data.get('unsupported') if isinstance(data.get('unsupported'), list) else [])[:30]
234
+ if isinstance(item, dict) and isinstance(item.get('report_quote'), str)
235
+ and item['report_quote'].strip() and item['report_quote'] in brief['markdown']]
215
236
  details.setdefault('research_notes', []).append({'kind': 'fast_evidence', 'summary': '逐字定位已检查;支持关系仍需评价。', 'rejected': rejected})
216
- (phase / 'admission.json').write_text(dump({'citations': citations, 'number_bindings': numbers, 'rejected': rejected}), encoding='utf-8')
237
+ if unsupported:
238
+ details['research_notes'].append({'kind': 'fast_unsupported', 'summary': '以下结论在所选材料中找不到原文依据,需核实或删除。', 'items': unsupported})
239
+ store.event(job['id'], 'fast_unsupported', {'version_id': brief['id'], 'count': len(unsupported),
240
+ 'message': f'{len(unsupported)} 条结论在所选材料中找不到原文依据,已单独列出。'})
241
+ (phase / 'admission.json').write_text(dump({'citations': citations, 'number_bindings': numbers, 'rejected': rejected,
242
+ 'unsupported': unsupported}), encoding='utf-8')
217
243
  if worker.runtime.cancelled.is_set() or worker.stopping.is_set():
218
244
  raise InterruptedError('依据补全已停止,初稿和结果保留。')
219
245
  from .draft_completion import verify_input
@@ -0,0 +1,12 @@
1
+ """Bounded feedback history with persisted job status and workspace-wide counts."""
2
+
3
+
4
+ def snapshot(store):
5
+ # batch_id is the learning job's primary key, not a position in recent jobs.
6
+ # At most 100 indexed joins; never scan/parse job payloads per feedback item.
7
+ items = store.rows("SELECT f.*, j.status AS learning_status FROM feedback f "
8
+ "LEFT JOIN jobs j ON j.id=f.batch_id AND j.kind='learn' "
9
+ "ORDER BY f.rowid DESC LIMIT 100")
10
+ counts = store.rows("SELECT count(*) AS total, "
11
+ "count(CASE WHEN batch_id IS NULL THEN 1 END) AS pending FROM feedback")[0]
12
+ return {'feedback': items, 'feedback_summary': counts}
@@ -0,0 +1,56 @@
1
+ """Deterministic finding locations, not semantic or factual verification."""
2
+ from .document_model import citation_label_text, document_markdown, markdown_document, source_ids
3
+ from .evidence import blocks
4
+
5
+
6
+ def _passages(document):
7
+ numbers={sid:str(i) for i,sid in enumerate(source_ids(document),1)}
8
+ def inline(node,mode):
9
+ kind=node.get('type');attrs=node.get('attrs',{})
10
+ def citation(sid):
11
+ return '['+('@'+sid if mode=='stored' else sid if mode=='packet' else numbers[sid])+']'
12
+ if kind=='citation':return citation(attrs['sourceId'])
13
+ if kind=='text':
14
+ text=node.get('text','')
15
+ if mode=='packet':return text # packet_views._inline preserves link labels.
16
+ for mark in node.get('marks',[]):
17
+ href=mark.get('attrs',{}).get('href','')
18
+ if href.startswith('#source-'):
19
+ return citation_label_text(text)+citation(href[8:])
20
+ return text
21
+ if kind=='hardBreak':return ' '
22
+ if kind=='image':
23
+ text=attrs.get('caption') or attrs.get('alt') or attrs.get('src','')
24
+ return '[图:'+text+']' if mode=='packet' else text
25
+ return ''.join(inline(child,mode) for child in node.get('content',[]))
26
+ def walk(node,parents):
27
+ identity=node.get('attrs',{}).get('blockId')
28
+ scope=parents|({identity} if identity else set())
29
+ if node.get('type') in ('paragraph','heading','codeBlock','image'):
30
+ for mode in ('stored','packet','reader'):
31
+ yield scope,' '.join(inline(node,mode).split())
32
+ yield scope,' '.join(document_markdown({'type':'doc','content':[node]}).split())
33
+ return
34
+ # Containers are not passages: joining cells or paragraphs could invent
35
+ # a quotation that no reader sees as continuous text.
36
+ for child in node.get('content',[]):yield from walk(child,scope)
37
+ return list(walk(document,set()))
38
+
39
+
40
+ def validate_findings(document,findings,*,reader_preview=''):
41
+ """Check only new, supplied anchors; omitted text and history stay valid."""
42
+ passages=_passages(document);known=set(blocks(document))
43
+ preview=None
44
+ for index,finding in enumerate(findings):
45
+ value=finding.model_dump() if hasattr(finding,'model_dump') else finding
46
+ if value.get('response_to'):continue # A corrected historical quote may be gone.
47
+ selected=set(value.get('block_ids') or [])
48
+ if selected-known:raise ValueError(f'findings[{index}].block_ids 引用了本版不存在的正文块')
49
+ quote=' '.join(str(value.get('report_quote') or '').split())
50
+ if not quote:continue # Missing-content findings need not invent a quotation.
51
+ if any(quote in text for scope,text in passages if not selected or scope&selected):continue
52
+ if not selected and reader_preview:
53
+ if preview is None:preview=_passages(markdown_document(reader_preview))
54
+ if any(quote in text for _,text in preview):continue
55
+ raise ValueError(f'findings[{index}].report_quote 无法在本版指定正文位置连续定位;'
56
+ '请复制实际原文,不拼接省略片段;缺失内容可省略 report_quote 并说明要求')
@@ -50,6 +50,8 @@ def prepare_report_data(payload):
50
50
  elif not row.comparable: reason='尚未确认产品、地区、期间及口径可比'
51
51
  elif row.previous_unit is None or row.previous_tax_basis is None or row.previous_category is None: reason='缺少比较值单位、税口径或数据类别'
52
52
  elif row.previous_unit!=row.unit or row.previous_tax_basis!=row.tax_basis or row.previous_category!=row.category: reason='比较口径不一致'
53
+ elif row.category!='actual' and row.previous_as_of is None: reason='比较预测、指引或一致预期缺少取得数据的截至日 previous_as_of'
54
+ elif row.category!='actual' and row.previous_date==row.current_date and row.previous_as_of>row.as_of: reason='同一目标期的比较值数据截至日晚于本期数据截至日,不能按先后版本计算'
53
55
  elif row.comparison=='pct' and row.previous==0: reason='比较值为零,不能计算百分比'
54
56
  elif row.comparison=='bp' and row.unit not in ('%','percent'): reason='基点变化要求输入为百分数(例如 4.5 表示 4.5%)'
55
57
  else:
@@ -84,6 +84,13 @@ class InteractiveRuntime:
84
84
  self.session_id = None
85
85
  self.session_backend = None
86
86
 
87
+ @staticmethod
88
+ def _cwd(job, backend, folder):
89
+ if not job.get('plain_output'):
90
+ return folder
91
+ from .plain_isolation import working_directory
92
+ return working_directory(backend, folder)
93
+
87
94
  def _harness_for(self, backend):
88
95
  from .backends import validate_backend
89
96
  try:
@@ -171,12 +178,18 @@ class InteractiveRuntime:
171
178
  runtime = {'model': configured['model'],
172
179
  'effort': configured.get('reasoning_effort', configured.get('effort'))}
173
180
  if job.get('plain_output'):
174
- runtime.update(permission='read-only')
181
+ from . import plain_isolation
182
+ runtime.update(plain_isolation.runtime(backend))
175
183
  if job.get('readonly_output'):
176
- from .review_capability import require_for_review
184
+ from .review_capability import require_for_review, review_isolation
177
185
  review_mode=payload.get('review_mode','standard')
178
186
  require_for_review(backend,review_mode)
179
- runtime.update(permission='read-only',review_root=str((folder/'packet').resolve()),review_mode=review_mode)
187
+ if job['readonly_output']=='review.json' and review_isolation(backend,review_mode)=='observed':
188
+ # The host cannot be made read-only; it reviews on its own permissions
189
+ # and the review record carries that label and its reported tool use.
190
+ runtime.update(review_mode=review_mode)
191
+ else:
192
+ runtime.update(permission='read-only',review_root=str((folder/'packet').resolve()),review_mode=review_mode)
180
193
  if job.get('review_id'):runtime['review_id']=job['review_id']
181
194
  if backend == 'briefloop-native' and not job.get('native_packet') and not job.get('readonly_output'):
182
195
  from .native_orchestrator import prepare
@@ -240,7 +253,7 @@ class InteractiveRuntime:
240
253
  evaluation_title={'pairwise':'Evaluator · 比较','triage':'Evaluator · 改动分类'}.get(job.get('evaluation_mode'),'Evaluator · 评分')
241
254
  title = {'evaluator': evaluation_title, 'scorer': 'Evaluator · 评分', 'assessor': 'Evaluator · 比较', 'maintainer': '整理反馈经验', 'proposer': '提出技能改进'}.get(job.get('runtime_role'))
242
255
  title = title or task_label(job['kind'], '简报任务')
243
- session = harness.create_session(title, runtime, folder)
256
+ session = harness.create_session(title, runtime, self._cwd(job, backend, folder))
244
257
  binding = {'job_id': job['id'], 'session_id': session['id'], 'runtime': runtime,
245
258
  'backend': backend, 'message_id': None, 'history': []}
246
259
  _write(marker, binding)
@@ -254,7 +267,7 @@ class InteractiveRuntime:
254
267
  # An explicit job resume may need another turn, but must not undo a
255
268
  # user's archive/delete choice. Completed cached turns bypass this.
256
269
  old_sid=binding['session_id']
257
- session=harness.create_session('恢复简报任务',runtime,folder)
270
+ session=harness.create_session('恢复简报任务',runtime,self._cwd(job,backend,folder))
258
271
  binding.setdefault('previous_session_ids',[]).append(old_sid)
259
272
  binding['session_id']=session['id']
260
273
  if binding.get('message_id'):binding.setdefault('history',[]).append(binding['message_id'])
@@ -375,7 +388,7 @@ class InteractiveRuntime:
375
388
  if status in ('interrupted', 'cancelled'):
376
389
  raise InterruptedError('会话已中断,已生成内容保留,可恢复')
377
390
  if status != 'completed':
378
- raise RuntimeError('Agent 执行失败;详情保存在会话与任务日志')
391
+ raise RuntimeError(tracker.failure_message or 'Agent 执行失败;详情保存在会话与任务日志')
379
392
  return result
380
393
  minutes = timing['hard_timeout_minutes']
381
394
  if minutes > 0 and time.monotonic() - started > minutes * 60:
@@ -308,9 +308,12 @@ def _generate_trial(store,job,case,skill,folder,tag):
308
308
  trial_payload=json.loads(trial['payload'])
309
309
  for key in ('runtime','role_models','agent_backend','max_parallel'):
310
310
  if trial_payload.get(key)!=conditions[key]:raise ValueError('保存的学习宿主或模型条件不一致')
311
- worker=Worker(store)
312
- # Shared runtime ensures Stop cancels the current trial rather than an unrelated child.
313
- worker.runtime=job['_runtime']
311
+ worker=job.get('_worker')
312
+ if worker is None:
313
+ worker=Worker(store)
314
+ worker.runtime=job['_runtime']
315
+ # Production reuses the owner, including its session budget, cancellation
316
+ # and Store wakeup callback; a new Worker would silently bypass that budget.
314
317
  if trial['status']!='complete':
315
318
  try:
316
319
  value=worker.generate(trial,score=False);value['learning_conditions']=conditions
@@ -526,7 +529,8 @@ def _baseline_for_attempt(store, case, learning_payload):
526
529
  return None
527
530
 
528
531
 
529
- def learn(store,runtime,job):
532
+ def learn(store,runtime,job,*,worker=None):
533
+ if worker is not None:job={**job,'_worker':worker}
530
534
  payload=json.loads(job['payload'])
531
535
  if payload.get('reader_id'):
532
536
  raise InterruptedError('读者专属学习链暂不启用;原反馈与任务进度保留,等待共享适用条件验收')
@@ -0,0 +1,56 @@
1
+ """One workspace-wide ceiling on concurrent agent sessions (#728).
2
+
3
+ Report, review and main-lane dispatch each had their own limit, so the real
4
+ peak was reports x (1 + Scouts) + reviews + 1. Dispatch now reserves sessions
5
+ here first. A report reserves itself plus one Scout; before its research starts
6
+ it may grow up to the Scout count it wants, limited by what is still free.
7
+
8
+ A review that belongs to a running report uses that report's reservation: the
9
+ report waits for it, so charging it again could leave both waiting forever.
10
+ """
11
+ import threading
12
+
13
+
14
+ class ModelBudget:
15
+ def __init__(self, limit):
16
+ self._limit = limit
17
+ self._lock = threading.Lock()
18
+ self._held = {}
19
+ self.peak = 0
20
+
21
+ @property
22
+ def limit(self):
23
+ return max(1, int(self._limit()))
24
+
25
+ def free(self):
26
+ with self._lock:
27
+ return self.limit - sum(self._held.values())
28
+
29
+ def reserve(self, key, count):
30
+ """Hold `count` sessions for `key` if they are all free; False otherwise."""
31
+ with self._lock:
32
+ if self.limit - sum(self._held.values()) < count:
33
+ return False
34
+ self._held[key] = self._held.get(key, 0) + count
35
+ self.peak = max(self.peak, sum(self._held.values()))
36
+ return True
37
+
38
+ def grow(self, key, want):
39
+ """Raise `key` towards `want` total sessions; returns what it now holds."""
40
+ with self._lock:
41
+ held = self._held.get(key, 0)
42
+ extra = max(0, min(want - held, self.limit - sum(self._held.values())))
43
+ if extra:
44
+ self._held[key] = held + extra
45
+ self.peak = max(self.peak, sum(self._held.values()))
46
+ return held + extra
47
+
48
+ def release(self, key):
49
+ with self._lock:
50
+ self._held.pop(key, None)
51
+
52
+ def snapshot(self):
53
+ with self._lock:
54
+ used = sum(self._held.values())
55
+ return {'limit': self.limit, 'in_use': used, 'free': self.limit - used,
56
+ 'peak': self.peak, 'held': dict(self._held)}