briefloop 0.26.4__tar.gz → 0.27.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. {briefloop-0.26.4 → briefloop-0.27.1}/PKG-INFO +2 -2
  2. {briefloop-0.26.4 → briefloop-0.27.1}/README.md +1 -1
  3. {briefloop-0.26.4 → briefloop-0.27.1}/pyproject.toml +1 -1
  4. briefloop-0.27.1/src/briefloop/__init__.py +1 -0
  5. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/bridge_harness.py +2 -2
  6. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_store.py +5 -0
  7. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_tools.py +32 -6
  8. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/deliverable_spec.py +8 -1
  9. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/docx_text.py +3 -0
  10. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/execution_records.py +17 -0
  11. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fast_reports.py +30 -4
  12. briefloop-0.27.1/src/briefloop/feedback_view.py +12 -0
  13. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/figure_support.py +6 -0
  14. briefloop-0.27.1/src/briefloop/finding_anchors.py +56 -0
  15. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/industry_data.py +2 -0
  16. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/interactive_runtime.py +22 -9
  17. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/learning.py +150 -22
  18. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/learning_budget.py +38 -7
  19. briefloop-0.27.1/src/briefloop/model_budget.py +56 -0
  20. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/models.py +71 -5
  21. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_orchestrator.py +27 -5
  22. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_roles.py +47 -0
  23. briefloop-0.27.1/src/briefloop/plain_isolation.py +134 -0
  24. briefloop-0.27.1/src/briefloop/previous_report.py +141 -0
  25. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/progress.py +66 -1
  26. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.analyst.zh.md +2 -2
  27. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.evaluator.zh.md +1 -1
  28. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.orchestrator.zh.md +1 -1
  29. briefloop-0.27.1/src/briefloop/readers.py +142 -0
  30. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_profiles.py +1 -1
  31. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/research_handoff.py +10 -3
  32. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/research_plan.py +78 -7
  33. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/review.py +42 -6
  34. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/review_capability.py +15 -2
  35. briefloop-0.27.1/src/briefloop/revision_edits.py +243 -0
  36. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime.py +84 -18
  37. briefloop-0.27.1/src/briefloop/scout_coverage.py +210 -0
  38. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/scout_tools.py +9 -1
  39. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/server.py +26 -4
  40. briefloop-0.27.1/src/briefloop/skill_verification.py +231 -0
  41. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/app.js +107 -105
  42. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/index.html +5 -5
  43. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/style.css +43 -0
  44. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/store.py +128 -21
  45. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/task_progress.py +25 -3
  46. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/writing_guidance.py +2 -1
  47. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/PKG-INFO +2 -2
  48. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/SOURCES.txt +10 -417
  49. briefloop-0.26.4/.gitattributes +0 -5
  50. briefloop-0.26.4/CHANGELOG.md +0 -2472
  51. briefloop-0.26.4/CONTRIBUTING.md +0 -33
  52. briefloop-0.26.4/KNOWN_ISSUES.md +0 -24
  53. briefloop-0.26.4/MANIFEST.in +0 -24
  54. briefloop-0.26.4/SECURITY.md +0 -9
  55. briefloop-0.26.4/VERSION +0 -1
  56. briefloop-0.26.4/bootstrap.py +0 -55
  57. briefloop-0.26.4/desktop/electron/package-lock.json +0 -3638
  58. briefloop-0.26.4/desktop/electron/package.json +0 -65
  59. briefloop-0.26.4/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md +0 -58
  60. briefloop-0.26.4/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md +0 -32
  61. briefloop-0.26.4/docs/architecture.md +0 -105
  62. briefloop-0.26.4/docs/compose/spec/home-v2.md +0 -81
  63. briefloop-0.26.4/docs/draft-first.md +0 -73
  64. briefloop-0.26.4/docs/jev-precheck.md +0 -23
  65. briefloop-0.26.4/docs/native-integration.md +0 -31
  66. briefloop-0.26.4/docs/quality-reading-context.md +0 -15
  67. briefloop-0.26.4/docs/release-0.26.0.md +0 -23
  68. briefloop-0.26.4/docs/release-0.26.1.md +0 -19
  69. briefloop-0.26.4/docs/release-0.26.2.md +0 -17
  70. briefloop-0.26.4/docs/release-0.26.3.md +0 -30
  71. briefloop-0.26.4/docs/release-0.26.4.md +0 -9
  72. briefloop-0.26.4/docs/report-length.md +0 -20
  73. briefloop-0.26.4/docs/report-time-window.md +0 -23
  74. briefloop-0.26.4/docs/research-handoff.md +0 -39
  75. briefloop-0.26.4/docs/sqlite-benchmark.md +0 -78
  76. briefloop-0.26.4/docs/technical-report-0.21.0/evidence-index.md +0 -475
  77. briefloop-0.26.4/docs/technical-report-0.21.0/technical-report.md +0 -347
  78. briefloop-0.26.4/docs/windows.md +0 -96
  79. briefloop-0.26.4/docs/writer-input.md +0 -56
  80. briefloop-0.26.4/docs//344/272/247/345/223/201/345/256/232/344/275/215/344/270/216/351/252/214/350/257/201.md +0 -20
  81. briefloop-0.26.4/docs//344/274/232/350/256/256/347/272/252/350/246/201.md +0 -23
  82. briefloop-0.26.4/docs//344/275/277/347/224/250/346/214/207/345/215/227.md +0 -112
  83. briefloop-0.26.4/docs//345/206/205/347/275/256/345/274/225/346/223/216.md +0 -50
  84. briefloop-0.26.4/docs//345/215/207/347/272/247/350/257/264/346/230/216.md +0 -66
  85. briefloop-0.26.4/docs//345/233/276/350/241/250/344/270/216Excel.md +0 -41
  86. briefloop-0.26.4/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md +0 -85
  87. briefloop-0.26.4/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md +0 -32
  88. briefloop-0.26.4/docs//345/256/232/346/227/266/346/212/245/345/221/212.md +0 -29
  89. briefloop-0.26.4/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md +0 -11
  90. briefloop-0.26.4/docs//346/212/245/345/221/212/347/274/226/350/276/221/344/270/216/346/250/241/346/235/277.md +0 -64
  91. briefloop-0.26.4/docs//346/241/214/351/235/242/345/256/211/350/243/205/344/270/216/346/233/264/346/226/260.md +0 -64
  92. briefloop-0.26.4/docs//346/267/261/345/272/246/347/240/224/347/251/266/344/270/216/344/272/213/345/256/236/346/240/270/346/237/245.md +0 -44
  93. briefloop-0.26.4/docs//347/211/210/346/234/254/344/270/200/350/207/264/346/200/247/346/243/200/346/237/245.md +0 -35
  94. briefloop-0.26.4/docs//350/241/214/344/270/232/346/212/245/345/221/212.md +0 -60
  95. briefloop-0.26.4/docs//350/257/201/345/210/270/347/240/224/347/251/266.md +0 -15
  96. briefloop-0.26.4/docs//350/257/201/346/215/256/344/270/216/347/273/223/350/256/272/350/277/275/346/272/257.md +0 -30
  97. briefloop-0.26.4/docs//350/277/220/350/241/214/346/227/266/351/200/211/346/213/251/344/270/216/346/243/200/346/265/213.md +0 -15
  98. briefloop-0.26.4/docs//351/252/214/346/224/266/350/256/260/345/275/225.md +0 -395
  99. briefloop-0.26.4/examples/internal-weekly-report/README.md +0 -22
  100. briefloop-0.26.4/examples/internal-weekly-report/report.md +0 -19
  101. briefloop-0.26.4/examples/internal-weekly-report/source.txt +0 -7
  102. briefloop-0.26.4/examples/meeting-minutes/transcript.txt +0 -13
  103. briefloop-0.26.4/examples/stock-research/earnings-event.txt +0 -17
  104. briefloop-0.26.4/frontend/api.js +0 -22
  105. briefloop-0.26.4/frontend/app-updates.js +0 -90
  106. briefloop-0.26.4/frontend/app.js +0 -2407
  107. briefloop-0.26.4/frontend/assessment-checks.js +0 -11
  108. briefloop-0.26.4/frontend/assessment-panel.js +0 -211
  109. briefloop-0.26.4/frontend/citation-evidence.js +0 -13
  110. briefloop-0.26.4/frontend/clipboard.js +0 -10
  111. briefloop-0.26.4/frontend/composer-options.js +0 -43
  112. briefloop-0.26.4/frontend/connectors.js +0 -93
  113. briefloop-0.26.4/frontend/delivery.js +0 -82
  114. briefloop-0.26.4/frontend/dom.js +0 -7
  115. briefloop-0.26.4/frontend/excel-export.js +0 -30
  116. briefloop-0.26.4/frontend/fact-check-availability.js +0 -14
  117. briefloop-0.26.4/frontend/fact-check-grants.js +0 -33
  118. briefloop-0.26.4/frontend/jev-checks.js +0 -55
  119. briefloop-0.26.4/frontend/job-presentation.js +0 -32
  120. briefloop-0.26.4/frontend/length-controls.js +0 -67
  121. briefloop-0.26.4/frontend/mcp-selection.js +0 -31
  122. briefloop-0.26.4/frontend/model-catalog.js +0 -198
  123. briefloop-0.26.4/frontend/native-requests.js +0 -121
  124. briefloop-0.26.4/frontend/notifications.js +0 -58
  125. briefloop-0.26.4/frontend/office-tools.js +0 -118
  126. briefloop-0.26.4/frontend/polling.js +0 -17
  127. briefloop-0.26.4/frontend/provider-capabilities.js +0 -19
  128. briefloop-0.26.4/frontend/quick-report.js +0 -79
  129. briefloop-0.26.4/frontend/reasoning-controls.js +0 -68
  130. briefloop-0.26.4/frontend/report-browsing.js +0 -113
  131. briefloop-0.26.4/frontend/report-export.js +0 -106
  132. briefloop-0.26.4/frontend/report-language.js +0 -58
  133. briefloop-0.26.4/frontend/report-panels.js +0 -14
  134. briefloop-0.26.4/frontend/report-sources.js +0 -43
  135. briefloop-0.26.4/frontend/review-controls.js +0 -144
  136. briefloop-0.26.4/frontend/review-coverage.js +0 -12
  137. briefloop-0.26.4/frontend/review-results.js +0 -20
  138. briefloop-0.26.4/frontend/review-status.js +0 -99
  139. briefloop-0.26.4/frontend/rich-document.js +0 -110
  140. briefloop-0.26.4/frontend/runtime-cards.js +0 -55
  141. briefloop-0.26.4/frontend/runtime-permission-modes.js +0 -32
  142. briefloop-0.26.4/frontend/runtime-permission-panel.js +0 -91
  143. briefloop-0.26.4/frontend/schedules.js +0 -33
  144. briefloop-0.26.4/frontend/source-library-search.js +0 -30
  145. briefloop-0.26.4/frontend/source-upload.js +0 -65
  146. briefloop-0.26.4/frontend/task-progress.js +0 -26
  147. briefloop-0.26.4/frontend/template-output.js +0 -171
  148. briefloop-0.26.4/frontend/templates.js +0 -91
  149. briefloop-0.26.4/frontend/time.js +0 -25
  150. briefloop-0.26.4/frontend/uploads.js +0 -46
  151. briefloop-0.26.4/frontend/version-diff.js +0 -43
  152. briefloop-0.26.4/frontend/welcome.js +0 -22
  153. briefloop-0.26.4/package-lock.json +0 -1092
  154. briefloop-0.26.4/package.json +0 -21
  155. briefloop-0.26.4/probes/mcp_m0/README.md +0 -92
  156. briefloop-0.26.4/probes/mcp_m0/probe.py +0 -273
  157. briefloop-0.26.4/probes/mcp_m0/requirements.txt +0 -2
  158. briefloop-0.26.4/probes/mcp_m0/server.py +0 -149
  159. briefloop-0.26.4/runtime-bridge/README.md +0 -67
  160. briefloop-0.26.4/runtime-bridge/bridge.test.mjs +0 -517
  161. briefloop-0.26.4/runtime-bridge/build.mjs +0 -6
  162. briefloop-0.26.4/runtime-bridge/catalog.json +0 -205
  163. briefloop-0.26.4/runtime-bridge/claude.ts +0 -62
  164. briefloop-0.26.4/runtime-bridge/main.ts +0 -344
  165. briefloop-0.26.4/runtime-bridge/permission-catalog.ts +0 -72
  166. briefloop-0.26.4/runtime-bridge/pi.ts +0 -89
  167. briefloop-0.26.4/runtime-bridge/reasoning.ts +0 -43
  168. briefloop-0.26.4/runtime-bridge/user-input.ts +0 -53
  169. briefloop-0.26.4/runtime-bridge/windows-command.ts +0 -22
  170. briefloop-0.26.4/runtime-bridge/zcode.ts +0 -123
  171. briefloop-0.26.4/scripts/build_frontend.mjs +0 -41
  172. briefloop-0.26.4/scripts/build_frontend_licenses.mjs +0 -71
  173. briefloop-0.26.4/scripts/check_versions.py +0 -169
  174. briefloop-0.26.4/scripts/sync_versions.py +0 -39
  175. briefloop-0.26.4/scripts/test_frontend.mjs +0 -14
  176. briefloop-0.26.4/src/briefloop/__init__.py +0 -1
  177. briefloop-0.26.4/start.ps1 +0 -6
  178. briefloop-0.26.4/start.sh +0 -4
  179. briefloop-0.26.4/tests/check_distribution.py +0 -62
  180. briefloop-0.26.4/tests/frontend_app_updates.mjs +0 -70
  181. briefloop-0.26.4/tests/frontend_assessment_checks.mjs +0 -12
  182. briefloop-0.26.4/tests/frontend_chat_attachments.mjs +0 -52
  183. briefloop-0.26.4/tests/frontend_chat_commands.mjs +0 -30
  184. briefloop-0.26.4/tests/frontend_chat_drafts.mjs +0 -79
  185. briefloop-0.26.4/tests/frontend_chat_layout.mjs +0 -116
  186. briefloop-0.26.4/tests/frontend_chat_polling.mjs +0 -81
  187. briefloop-0.26.4/tests/frontend_checkout_eol.mjs +0 -34
  188. briefloop-0.26.4/tests/frontend_citation_clipboard.mjs +0 -71
  189. briefloop-0.26.4/tests/frontend_citation_edit.mjs +0 -40
  190. briefloop-0.26.4/tests/frontend_citation_evidence.mjs +0 -14
  191. briefloop-0.26.4/tests/frontend_clipboard_fallback.mjs +0 -10
  192. briefloop-0.26.4/tests/frontend_excel_export.mjs +0 -111
  193. briefloop-0.26.4/tests/frontend_export_menu.mjs +0 -12
  194. briefloop-0.26.4/tests/frontend_fact_check_availability.mjs +0 -25
  195. briefloop-0.26.4/tests/frontend_fact_check_grants.mjs +0 -140
  196. briefloop-0.26.4/tests/frontend_fast_mode.mjs +0 -34
  197. briefloop-0.26.4/tests/frontend_home_v2.mjs +0 -95
  198. briefloop-0.26.4/tests/frontend_job_presentation.mjs +0 -22
  199. briefloop-0.26.4/tests/frontend_learning_authorization.mjs +0 -62
  200. briefloop-0.26.4/tests/frontend_length_controls.mjs +0 -62
  201. briefloop-0.26.4/tests/frontend_licenses.mjs +0 -41
  202. briefloop-0.26.4/tests/frontend_live_status.mjs +0 -24
  203. briefloop-0.26.4/tests/frontend_markdown_import.mjs +0 -23
  204. briefloop-0.26.4/tests/frontend_mcp_selection.mjs +0 -11
  205. briefloop-0.26.4/tests/frontend_model_catalog_refresh.mjs +0 -154
  206. briefloop-0.26.4/tests/frontend_model_label.mjs +0 -53
  207. briefloop-0.26.4/tests/frontend_model_selection.mjs +0 -65
  208. briefloop-0.26.4/tests/frontend_native_requests.mjs +0 -49
  209. briefloop-0.26.4/tests/frontend_native_runtime.mjs +0 -42
  210. briefloop-0.26.4/tests/frontend_office_tools.mjs +0 -289
  211. briefloop-0.26.4/tests/frontend_open_brief_status.mjs +0 -139
  212. briefloop-0.26.4/tests/frontend_pending_report.mjs +0 -19
  213. briefloop-0.26.4/tests/frontend_polling.mjs +0 -68
  214. briefloop-0.26.4/tests/frontend_progress_race.mjs +0 -106
  215. briefloop-0.26.4/tests/frontend_provider_capabilities.mjs +0 -71
  216. briefloop-0.26.4/tests/frontend_quick_report.mjs +0 -71
  217. briefloop-0.26.4/tests/frontend_reasoning_controls.mjs +0 -58
  218. briefloop-0.26.4/tests/frontend_release_controls.mjs +0 -78
  219. briefloop-0.26.4/tests/frontend_release_navigation.mjs +0 -94
  220. briefloop-0.26.4/tests/frontend_report_browsing.mjs +0 -69
  221. briefloop-0.26.4/tests/frontend_report_chat_drawer.mjs +0 -43
  222. briefloop-0.26.4/tests/frontend_report_export.mjs +0 -131
  223. briefloop-0.26.4/tests/frontend_report_language.mjs +0 -41
  224. briefloop-0.26.4/tests/frontend_report_load.mjs +0 -26
  225. briefloop-0.26.4/tests/frontend_report_outline.mjs +0 -68
  226. briefloop-0.26.4/tests/frontend_report_panels.mjs +0 -79
  227. briefloop-0.26.4/tests/frontend_review_capability.mjs +0 -101
  228. briefloop-0.26.4/tests/frontend_review_coverage.mjs +0 -27
  229. briefloop-0.26.4/tests/frontend_review_status.mjs +0 -112
  230. briefloop-0.26.4/tests/frontend_runtime_discovery.mjs +0 -58
  231. briefloop-0.26.4/tests/frontend_runtime_feedback.mjs +0 -16
  232. briefloop-0.26.4/tests/frontend_runtime_permission_panel.mjs +0 -112
  233. briefloop-0.26.4/tests/frontend_save_barrier.mjs +0 -212
  234. briefloop-0.26.4/tests/frontend_settings_workspaces.mjs +0 -24
  235. briefloop-0.26.4/tests/frontend_setup_state.mjs +0 -109
  236. briefloop-0.26.4/tests/frontend_source_library.mjs +0 -65
  237. briefloop-0.26.4/tests/frontend_source_search.mjs +0 -24
  238. briefloop-0.26.4/tests/frontend_source_upload.mjs +0 -51
  239. briefloop-0.26.4/tests/frontend_startup_recovery.mjs +0 -99
  240. briefloop-0.26.4/tests/frontend_task_progress.mjs +0 -64
  241. briefloop-0.26.4/tests/frontend_template_groups.mjs +0 -74
  242. briefloop-0.26.4/tests/frontend_template_output.mjs +0 -149
  243. briefloop-0.26.4/tests/frontend_update_notifications.mjs +0 -48
  244. briefloop-0.26.4/tests/frontend_upload_limits.mjs +0 -23
  245. briefloop-0.26.4/tests/frontend_version_bodies.mjs +0 -78
  246. briefloop-0.26.4/tests/frontend_version_diff.mjs +0 -19
  247. briefloop-0.26.4/tests/frontend_welcome_gate.mjs +0 -114
  248. briefloop-0.26.4/tests/frontend_workspace_proposal.mjs +0 -34
  249. briefloop-0.26.4/tests/frontend_writing_preferences.mjs +0 -45
  250. briefloop-0.26.4/tests/test_agent_backend.py +0 -36
  251. briefloop-0.26.4/tests/test_agent_commands.py +0 -197
  252. briefloop-0.26.4/tests/test_analyst_draft_versions.py +0 -183
  253. briefloop-0.26.4/tests/test_assessment_admission_recovery.py +0 -17
  254. briefloop-0.26.4/tests/test_assessment_followup.py +0 -103
  255. briefloop-0.26.4/tests/test_background_no_question.py +0 -33
  256. briefloop-0.26.4/tests/test_bridge_harness.py +0 -389
  257. briefloop-0.26.4/tests/test_builtin_templates.py +0 -110
  258. briefloop-0.26.4/tests/test_chat_dispatch.py +0 -82
  259. briefloop-0.26.4/tests/test_chat_execution.py +0 -137
  260. briefloop-0.26.4/tests/test_chat_model_selection.py +0 -84
  261. briefloop-0.26.4/tests/test_cli_doctor.py +0 -16
  262. briefloop-0.26.4/tests/test_codex_idle.py +0 -63
  263. briefloop-0.26.4/tests/test_connection_test_history.py +0 -58
  264. briefloop-0.26.4/tests/test_connector_authorization.py +0 -137
  265. briefloop-0.26.4/tests/test_connector_empty_catalog.py +0 -86
  266. briefloop-0.26.4/tests/test_connector_materials.py +0 -217
  267. briefloop-0.26.4/tests/test_connector_tasks.py +0 -23
  268. briefloop-0.26.4/tests/test_connectors.py +0 -191
  269. briefloop-0.26.4/tests/test_core.py +0 -86
  270. briefloop-0.26.4/tests/test_cross_module_regressions.py +0 -43
  271. briefloop-0.26.4/tests/test_delivery_checks.py +0 -388
  272. briefloop-0.26.4/tests/test_delivery_consumers.py +0 -64
  273. briefloop-0.26.4/tests/test_demo.py +0 -77
  274. briefloop-0.26.4/tests/test_desktop_lifecycle.py +0 -162
  275. briefloop-0.26.4/tests/test_document_workflows.py +0 -104
  276. briefloop-0.26.4/tests/test_draft_completion.py +0 -92
  277. briefloop-0.26.4/tests/test_draft_contract.py +0 -72
  278. briefloop-0.26.4/tests/test_english_reports.py +0 -121
  279. briefloop-0.26.4/tests/test_entrypoint.py +0 -22
  280. briefloop-0.26.4/tests/test_evidence.py +0 -175
  281. briefloop-0.26.4/tests/test_evidence_parse_failures.py +0 -91
  282. briefloop-0.26.4/tests/test_execution_records.py +0 -49
  283. briefloop-0.26.4/tests/test_execution_timing.py +0 -4
  284. briefloop-0.26.4/tests/test_export_admission.py +0 -253
  285. briefloop-0.26.4/tests/test_export_layout_swap.py +0 -59
  286. briefloop-0.26.4/tests/test_export_xlsx.py +0 -628
  287. briefloop-0.26.4/tests/test_external_requests.py +0 -85
  288. briefloop-0.26.4/tests/test_fact_check_contract.py +0 -261
  289. briefloop-0.26.4/tests/test_fact_check_orchestration.py +0 -309
  290. briefloop-0.26.4/tests/test_fact_check_phase.py +0 -124
  291. briefloop-0.26.4/tests/test_fact_check_review.py +0 -51
  292. briefloop-0.26.4/tests/test_fact_check_switch.py +0 -34
  293. briefloop-0.26.4/tests/test_fact_status_tool.py +0 -50
  294. briefloop-0.26.4/tests/test_fast_evidence.py +0 -68
  295. briefloop-0.26.4/tests/test_fast_mode.py +0 -59
  296. briefloop-0.26.4/tests/test_fast_qualifier_checks.py +0 -50
  297. briefloop-0.26.4/tests/test_fast_reports.py +0 -74
  298. briefloop-0.26.4/tests/test_fast_research.py +0 -44
  299. briefloop-0.26.4/tests/test_figure_exports.py +0 -85
  300. briefloop-0.26.4/tests/test_figure_flow.py +0 -46
  301. briefloop-0.26.4/tests/test_figure_text.py +0 -89
  302. briefloop-0.26.4/tests/test_figures.py +0 -109
  303. briefloop-0.26.4/tests/test_generation_schema_guidance.py +0 -60
  304. briefloop-0.26.4/tests/test_harness.py +0 -415
  305. briefloop-0.26.4/tests/test_host_bins.py +0 -95
  306. briefloop-0.26.4/tests/test_human_learning.py +0 -101
  307. briefloop-0.26.4/tests/test_industry_export.py +0 -69
  308. briefloop-0.26.4/tests/test_industry_flow.py +0 -72
  309. briefloop-0.26.4/tests/test_industry_research.py +0 -69
  310. briefloop-0.26.4/tests/test_interactive_runtime.py +0 -126
  311. briefloop-0.26.4/tests/test_jev_checks.py +0 -157
  312. briefloop-0.26.4/tests/test_learning_authorization.py +0 -112
  313. briefloop-0.26.4/tests/test_learning_integrity.py +0 -50
  314. briefloop-0.26.4/tests/test_length.py +0 -44
  315. briefloop-0.26.4/tests/test_length_policy.py +0 -94
  316. briefloop-0.26.4/tests/test_markdown_download.py +0 -30
  317. briefloop-0.26.4/tests/test_media_sources.py +0 -188
  318. briefloop-0.26.4/tests/test_model_catalog_defaults.py +0 -50
  319. briefloop-0.26.4/tests/test_multimodal_harness.py +0 -96
  320. briefloop-0.26.4/tests/test_multimodal_http.py +0 -32
  321. briefloop-0.26.4/tests/test_native_analyst.py +0 -221
  322. briefloop-0.26.4/tests/test_native_evaluator.py +0 -232
  323. briefloop-0.26.4/tests/test_native_harness.py +0 -383
  324. briefloop-0.26.4/tests/test_native_learning.py +0 -90
  325. briefloop-0.26.4/tests/test_native_orchestrator.py +0 -401
  326. briefloop-0.26.4/tests/test_native_provider_storage.py +0 -49
  327. briefloop-0.26.4/tests/test_native_providers.py +0 -71
  328. briefloop-0.26.4/tests/test_native_research_closeout.py +0 -38
  329. briefloop-0.26.4/tests/test_native_review_contract.py +0 -114
  330. briefloop-0.26.4/tests/test_native_scout.py +0 -343
  331. briefloop-0.26.4/tests/test_notifications.py +0 -45
  332. briefloop-0.26.4/tests/test_npm_native_shim.py +0 -34
  333. briefloop-0.26.4/tests/test_numeric_occurrence_review.py +0 -157
  334. briefloop-0.26.4/tests/test_office_cli.py +0 -699
  335. briefloop-0.26.4/tests/test_office_source_structure.py +0 -101
  336. briefloop-0.26.4/tests/test_office_surfaces.py +0 -170
  337. briefloop-0.26.4/tests/test_ooxml_order.py +0 -54
  338. briefloop-0.26.4/tests/test_opencode_harness.py +0 -895
  339. briefloop-0.26.4/tests/test_opencode_idle.py +0 -224
  340. briefloop-0.26.4/tests/test_opencode_prompt_versions.py +0 -55
  341. briefloop-0.26.4/tests/test_opencode_provider.py +0 -94
  342. briefloop-0.26.4/tests/test_opencode_questions.py +0 -187
  343. briefloop-0.26.4/tests/test_opencode_reasoning.py +0 -40
  344. briefloop-0.26.4/tests/test_opencode_review_version.py +0 -79
  345. briefloop-0.26.4/tests/test_opencode_search_prompt.py +0 -80
  346. briefloop-0.26.4/tests/test_opencode_server_stdin.py +0 -135
  347. briefloop-0.26.4/tests/test_opencode_v2.py +0 -303
  348. briefloop-0.26.4/tests/test_opencode_version_probe.py +0 -40
  349. briefloop-0.26.4/tests/test_posix_process_tree.py +0 -165
  350. briefloop-0.26.4/tests/test_pr593_roundtrip.py +0 -44
  351. briefloop-0.26.4/tests/test_product_summary_consistency.py +0 -45
  352. briefloop-0.26.4/tests/test_progress.py +0 -50
  353. briefloop-0.26.4/tests/test_progress_pipeline.py +0 -18
  354. briefloop-0.26.4/tests/test_provider_catalog.py +0 -185
  355. briefloop-0.26.4/tests/test_public_research.py +0 -152
  356. briefloop-0.26.4/tests/test_quality_reading_context.py +0 -147
  357. briefloop-0.26.4/tests/test_reader_contract.py +0 -182
  358. briefloop-0.26.4/tests/test_reader_source_export.py +0 -149
  359. briefloop-0.26.4/tests/test_reader_workflow.py +0 -109
  360. briefloop-0.26.4/tests/test_reconciliation.py +0 -183
  361. briefloop-0.26.4/tests/test_release.py +0 -366
  362. briefloop-0.26.4/tests/test_release_identity.py +0 -71
  363. briefloop-0.26.4/tests/test_report_browsing.py +0 -141
  364. briefloop-0.26.4/tests/test_report_concurrency.py +0 -20
  365. briefloop-0.26.4/tests/test_report_deletion.py +0 -84
  366. briefloop-0.26.4/tests/test_report_length_feedback.py +0 -103
  367. briefloop-0.26.4/tests/test_report_path_regressions.py +0 -57
  368. briefloop-0.26.4/tests/test_report_time.py +0 -124
  369. briefloop-0.26.4/tests/test_research_budget.py +0 -184
  370. briefloop-0.26.4/tests/test_research_gap_updates.py +0 -212
  371. briefloop-0.26.4/tests/test_research_handoff.py +0 -111
  372. briefloop-0.26.4/tests/test_research_plan.py +0 -300
  373. briefloop-0.26.4/tests/test_research_response_admission.py +0 -173
  374. briefloop-0.26.4/tests/test_resume_in_place.py +0 -20
  375. briefloop-0.26.4/tests/test_review.py +0 -75
  376. briefloop-0.26.4/tests/test_review_capability.py +0 -172
  377. briefloop-0.26.4/tests/test_review_finding_consistency.py +0 -251
  378. briefloop-0.26.4/tests/test_review_learning.py +0 -47
  379. briefloop-0.26.4/tests/test_review_modes.py +0 -48
  380. briefloop-0.26.4/tests/test_review_packet_paths.py +0 -63
  381. briefloop-0.26.4/tests/test_review_packet_utf8.py +0 -236
  382. briefloop-0.26.4/tests/test_review_schema_drift.py +0 -41
  383. briefloop-0.26.4/tests/test_review_snapshot.py +0 -52
  384. briefloop-0.26.4/tests/test_review_visual_input.py +0 -118
  385. briefloop-0.26.4/tests/test_revision_citations.py +0 -164
  386. briefloop-0.26.4/tests/test_revision_policy.py +0 -71
  387. briefloop-0.26.4/tests/test_rich_document.py +0 -245
  388. briefloop-0.26.4/tests/test_role_models.py +0 -26
  389. briefloop-0.26.4/tests/test_runtime_bridge.py +0 -79
  390. briefloop-0.26.4/tests/test_runtime_bridge_idle.py +0 -75
  391. briefloop-0.26.4/tests/test_runtime_concurrency.py +0 -6
  392. briefloop-0.26.4/tests/test_runtime_json_bom.py +0 -46
  393. briefloop-0.26.4/tests/test_runtime_liveness.py +0 -168
  394. briefloop-0.26.4/tests/test_runtime_names.py +0 -40
  395. briefloop-0.26.4/tests/test_runtime_permissions.py +0 -183
  396. briefloop-0.26.4/tests/test_runtime_retry.py +0 -34
  397. briefloop-0.26.4/tests/test_runtime_settlement.py +0 -51
  398. briefloop-0.26.4/tests/test_schedules.py +0 -53
  399. briefloop-0.26.4/tests/test_scout_experiment.py +0 -54
  400. briefloop-0.26.4/tests/test_search_credentials.py +0 -79
  401. briefloop-0.26.4/tests/test_search_policy.py +0 -56
  402. briefloop-0.26.4/tests/test_semantic_experiment.py +0 -348
  403. briefloop-0.26.4/tests/test_semantic_governance.py +0 -199
  404. briefloop-0.26.4/tests/test_server_boundary.py +0 -183
  405. briefloop-0.26.4/tests/test_settings_transactions.py +0 -188
  406. briefloop-0.26.4/tests/test_software_version.py +0 -37
  407. briefloop-0.26.4/tests/test_source_ingestion.py +0 -218
  408. briefloop-0.26.4/tests/test_source_library_search.py +0 -100
  409. briefloop-0.26.4/tests/test_source_recovery_regressions.py +0 -31
  410. briefloop-0.26.4/tests/test_source_updates.py +0 -225
  411. briefloop-0.26.4/tests/test_sources_provenance.py +0 -327
  412. briefloop-0.26.4/tests/test_store_sqlite_benchmark.py +0 -110
  413. briefloop-0.26.4/tests/test_table_citation_advisory.py +0 -102
  414. briefloop-0.26.4/tests/test_task_labels.py +0 -50
  415. briefloop-0.26.4/tests/test_task_notify.py +0 -75
  416. briefloop-0.26.4/tests/test_task_progress.py +0 -3
  417. briefloop-0.26.4/tests/test_tavily.py +0 -108
  418. briefloop-0.26.4/tests/test_template_conversion.py +0 -339
  419. briefloop-0.26.4/tests/test_template_conversion_http.py +0 -86
  420. briefloop-0.26.4/tests/test_template_saved_state.py +0 -54
  421. briefloop-0.26.4/tests/test_templates.py +0 -46
  422. briefloop-0.26.4/tests/test_user_input.py +0 -139
  423. briefloop-0.26.4/tests/test_user_source_refresh.py +0 -167
  424. briefloop-0.26.4/tests/test_version_consistency.py +0 -73
  425. briefloop-0.26.4/tests/test_websearch.py +0 -29
  426. briefloop-0.26.4/tests/test_websearch_singleflight.py +0 -56
  427. briefloop-0.26.4/tests/test_wikiskill_engine_windows.py +0 -48
  428. briefloop-0.26.4/tests/test_windows_antigravity_permissions.py +0 -19
  429. briefloop-0.26.4/tests/test_windows_connector_acl.py +0 -119
  430. briefloop-0.26.4/tests/test_windows_distribution.py +0 -27
  431. briefloop-0.26.4/tests/test_windows_mcp_supervisor.py +0 -54
  432. briefloop-0.26.4/tests/test_windows_platform.py +0 -366
  433. briefloop-0.26.4/tests/test_windows_release_paths.py +0 -99
  434. briefloop-0.26.4/tests/test_windows_review_paths.py +0 -114
  435. briefloop-0.26.4/tests/test_windows_runtime_bundle.py +0 -43
  436. briefloop-0.26.4/tests/test_windows_xlsx_paths.py +0 -98
  437. briefloop-0.26.4/tests/test_word_import.py +0 -53
  438. briefloop-0.26.4/tests/test_word_source_locators.py +0 -93
  439. briefloop-0.26.4/tests/test_word_toc.py +0 -78
  440. briefloop-0.26.4/tests/test_worker_idle.py +0 -43
  441. briefloop-0.26.4/tests/test_workspace_action_errors.py +0 -35
  442. briefloop-0.26.4/tests/test_workspace_profile.py +0 -40
  443. briefloop-0.26.4/tests/test_workspaces.py +0 -166
  444. briefloop-0.26.4/tests/test_writer_assembly.py +0 -100
  445. briefloop-0.26.4/tests/test_writer_cli_guidance.py +0 -86
  446. briefloop-0.26.4/tests/test_writer_context.py +0 -132
  447. briefloop-0.26.4/tests/test_writer_input.py +0 -443
  448. briefloop-0.26.4/tests/test_xlsx_officecli_integration.py +0 -125
  449. briefloop-0.26.4/tests/test_xlsx_preview.py +0 -128
  450. briefloop-0.26.4/third_party/open-design/LICENSE +0 -201
  451. briefloop-0.26.4/third_party/open-design/NOTICE.md +0 -39
  452. briefloop-0.26.4/third_party/open-design/acp/constants.ts +0 -60
  453. briefloop-0.26.4/third_party/open-design/acp/json.ts +0 -147
  454. briefloop-0.26.4/third_party/open-design/acp/models.ts +0 -324
  455. briefloop-0.26.4/third_party/open-design/acp/rpc.ts +0 -327
  456. briefloop-0.26.4/third_party/open-design/acp/session-params.ts +0 -107
  457. briefloop-0.26.4/third_party/open-design/acp/types.ts +0 -18
  458. briefloop-0.26.4/third_party/open-design/byok-reference/byok-opencode.ts +0 -281
  459. briefloop-0.26.4/third_party/open-design/byok-reference/provider-models.ts +0 -427
  460. briefloop-0.26.4/third_party/open-design/core/index.ts +0 -1
  461. briefloop-0.26.4/third_party/open-design/core/json-line-stream.ts +0 -319
  462. briefloop-0.26.4/third_party/open-design/runtime-models/codex-models.ts +0 -110
  463. briefloop-0.26.4/third_party/open-design/runtime-models/mmd-routes.ts +0 -166
  464. briefloop-0.26.4/third_party/open-design/runtime-models/models.ts +0 -233
  465. briefloop-0.26.4/third_party/open-design/runtime-models/opencode-models.ts +0 -101
  466. {briefloop-0.26.4 → briefloop-0.27.1}/LICENSE +0 -0
  467. {briefloop-0.26.4 → briefloop-0.27.1}/THIRD_PARTY_NOTICES.md +0 -0
  468. {briefloop-0.26.4 → briefloop-0.27.1}/setup.cfg +0 -0
  469. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/__main__.py +0 -0
  470. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/_entrypoint.py +0 -0
  471. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/agent_commands.py +0 -0
  472. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/agent_prompts.py +0 -0
  473. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/analyst.py +0 -0
  474. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/analyst_drafts.py +0 -0
  475. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/app_server.py +0 -0
  476. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/audit_bundle.py +0 -0
  477. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/backends/__init__.py +0 -0
  478. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/backends/opencode_server.py +0 -0
  479. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/backends/opencode_v2.py +0 -0
  480. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/bocha.py +0 -0
  481. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_dispatch.py +0 -0
  482. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/chat_execution.py +0 -0
  483. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/cli.py +0 -0
  484. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/codex_diagnostics.py +0 -0
  485. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/company_context.py +0 -0
  486. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/comparison_contract.py +0 -0
  487. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/conflicts.py +0 -0
  488. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/MATERIALS.md +0 -0
  489. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/README.md +0 -0
  490. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/__init__.py +0 -0
  491. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/config.py +0 -0
  492. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/grants.py +0 -0
  493. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/materials.py +0 -0
  494. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/receipts.py +0 -0
  495. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/runtime.py +0 -0
  496. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/runtime_tools.py +0 -0
  497. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/service.py +0 -0
  498. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/stdio_supervisor.py +0 -0
  499. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/task_client.py +0 -0
  500. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/tasks.py +0 -0
  501. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/transport.py +0 -0
  502. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/connectors/windows_acl.py +0 -0
  503. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/default_fonts.py +0 -0
  504. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/delivery_checks.py +0 -0
  505. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/demo.py +0 -0
  506. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/document_export.py +0 -0
  507. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/document_model.py +0 -0
  508. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/document_workflows.py +0 -0
  509. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/draft_checks.py +0 -0
  510. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/draft_completion.py +0 -0
  511. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/duckduckgo.py +0 -0
  512. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/evaluation_reading.py +0 -0
  513. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/evidence.py +0 -0
  514. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/evidence_context.py +0 -0
  515. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/execution_timing.py +0 -0
  516. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/export_jobs.py +0 -0
  517. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/exports.py +0 -0
  518. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/external_client.py +0 -0
  519. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/external_requests.py +0 -0
  520. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fact_check.py +0 -0
  521. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fast_mode.py +0 -0
  522. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/fast_research.py +0 -0
  523. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/figure_text.py +0 -0
  524. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/figures.py +0 -0
  525. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/harness.py +0 -0
  526. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/host_bins.py +0 -0
  527. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/industry_export.py +0 -0
  528. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/jev.py +0 -0
  529. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/jev_checks.py +0 -0
  530. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/length.py +0 -0
  531. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/media.py +0 -0
  532. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_engine.py +0 -0
  533. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_harness.py +0 -0
  534. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/native_providers.py +0 -0
  535. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/notifications.py +0 -0
  536. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/office_cli.py +0 -0
  537. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/ooxml_order.py +0 -0
  538. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/opencode_harness.py +0 -0
  539. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/opencode_version.py +0 -0
  540. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/packet_views.py +0 -0
  541. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/parent_watch.py +0 -0
  542. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/platform_support.py +0 -0
  543. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/process_host.py +0 -0
  544. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/projections.py +0 -0
  545. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/core.zh.md +0 -0
  546. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
  547. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
  548. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
  549. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
  550. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
  551. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
  552. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
  553. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
  554. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
  555. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/provider_catalog.py +0 -0
  556. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/reconciliation.py +0 -0
  557. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/release.py +0 -0
  558. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_browsing.py +0 -0
  559. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_time.py +0 -0
  560. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/report_tools.py +0 -0
  561. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/research_budget.py +0 -0
  562. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/review_learning.py +0 -0
  563. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/revision_metadata.py +0 -0
  564. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/revision_policy.py +0 -0
  565. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/rpc_writer.py +0 -0
  566. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime_bridge.py +0 -0
  567. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime_permissions.py +0 -0
  568. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/runtime_reasoning.py +0 -0
  569. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/schedules.py +0 -0
  570. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/scout.py +0 -0
  571. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/scout_evidence.py +0 -0
  572. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/search_credentials.py +0 -0
  573. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/search_policy.py +0 -0
  574. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
  575. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
  576. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
  577. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
  578. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/skills.py +0 -0
  579. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/software_version.py +0 -0
  580. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_context.py +0 -0
  581. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_extraction.py +0 -0
  582. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_ingestion.py +0 -0
  583. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_library_search.py +0 -0
  584. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_search.py +0 -0
  585. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/source_updates.py +0 -0
  586. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/sources.py +0 -0
  587. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/frontend-licenses.txt +0 -0
  588. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/native-engine-licenses.txt +0 -0
  589. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/native-engine-models.json +0 -0
  590. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/native-engine.mjs +0 -0
  591. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-aider.png +0 -0
  592. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-amr.svg +0 -0
  593. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-antigravity.svg +0 -0
  594. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
  595. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
  596. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-bridge.mjs +0 -0
  597. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-briefloop.svg +0 -0
  598. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-claude.svg +0 -0
  599. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-codebuddy.svg +0 -0
  600. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-codex.svg +0 -0
  601. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-copilot.svg +0 -0
  602. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
  603. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-deepseek.svg +0 -0
  604. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-devin.png +0 -0
  605. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-grok-build.svg +0 -0
  606. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-hermes.svg +0 -0
  607. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-kilo.svg +0 -0
  608. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-kimi.svg +0 -0
  609. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-kiro.svg +0 -0
  610. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-mimo.svg +0 -0
  611. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-opencode.svg +0 -0
  612. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-pi.svg +0 -0
  613. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-qoder.svg +0 -0
  614. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-qwen.svg +0 -0
  615. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-reasoning.json +0 -0
  616. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-reasonix.svg +0 -0
  617. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-trae-cli.png +0 -0
  618. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/runtime-vibe.svg +0 -0
  619. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/static/tokens.css +0 -0
  620. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/task_labels.py +0 -0
  621. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/task_notify.py +0 -0
  622. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/tavily.py +0 -0
  623. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
  624. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
  625. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
  626. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
  627. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
  628. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
  629. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
  630. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
  631. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
  632. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
  633. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
  634. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
  635. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
  636. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
  637. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
  638. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
  639. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
  640. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
  641. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
  642. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
  643. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
  644. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
  645. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
  646. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
  647. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
  648. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
  649. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
  650. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
  651. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
  652. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
  653. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
  654. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
  655. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
  656. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
  657. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
  658. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
  659. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
  660. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
  661. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
  662. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
  663. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
  664. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
  665. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
  666. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
  667. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
  668. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
  669. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
  670. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
  671. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
  672. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
  673. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
  674. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
  675. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
  676. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
  677. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
  678. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
  679. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
  680. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
  681. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
  682. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
  683. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
  684. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
  685. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
  686. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
  687. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
  688. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
  689. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
  690. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
  691. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
  692. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
  693. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
  694. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
  695. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
  696. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
  697. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
  698. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
  699. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
  700. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
  701. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
  702. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
  703. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
  704. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
  705. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
  706. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
  707. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
  708. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
  709. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
  710. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
  711. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
  712. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
  713. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
  714. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
  715. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/template_conversion.py +0 -0
  716. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/templates.py +0 -0
  717. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/user_input.py +0 -0
  718. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/websearch.py +0 -0
  719. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/windows_process.py +0 -0
  720. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/word_import.py +0 -0
  721. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workbook_figures.py +0 -0
  722. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
  723. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
  724. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
  725. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
  726. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
  727. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
  728. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
  729. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
  730. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
  731. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
  732. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
  733. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
  734. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
  735. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
  736. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
  737. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
  738. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
  739. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
  740. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
  741. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
  742. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
  743. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
  744. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workspace_profile.py +0 -0
  745. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/workspaces.py +0 -0
  746. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/writer_assembly.py +0 -0
  747. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/writer_input.py +0 -0
  748. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/xlsx_export.py +0 -0
  749. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop/zhipu.py +0 -0
  750. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/dependency_links.txt +0 -0
  751. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/entry_points.txt +0 -0
  752. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/requires.txt +0 -0
  753. {briefloop-0.26.4 → briefloop-0.27.1}/src/briefloop.egg-info/top_level.txt +0 -0
  754. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/__init__.py +0 -0
  755. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/__main__.py +0 -0
  756. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/LICENSE +0 -0
  757. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/NOTICE.md +0 -0
  758. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
  759. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
  760. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
  761. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
  762. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/__init__.py +0 -0
  763. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/act.sh +0 -0
  764. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/rollout.py +0 -0
  765. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/alfworld/step.py +0 -0
  766. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/__init__.py +0 -0
  767. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/alfworld.py +0 -0
  768. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/livemath.py +0 -0
  769. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/sealqa.py +0 -0
  770. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
  771. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/cli.py +0 -0
  772. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/codex_identity.py +0 -0
  773. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/engine.py +0 -0
  774. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/feedback_loop.py +0 -0
  775. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/__init__.py +0 -0
  776. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/audit.py +0 -0
  777. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/runtime.py +0 -0
  778. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/isolated/tools_server.py +0 -0
  779. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/jsonl.py +0 -0
  780. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/k4_lock.py +0 -0
  781. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/livemath/__init__.py +0 -0
  782. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/livemath/loop.py +0 -0
  783. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/livemath/rollout.py +0 -0
  784. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/native_agents.py +0 -0
  785. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/__init__.py +0 -0
  786. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/dataset.py +0 -0
  787. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/fetch.py +0 -0
  788. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/loop.py +0 -0
  789. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/retrieval.py +0 -0
  790. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/reward.py +0 -0
  791. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/rollout.py +0 -0
  792. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/scoring.py +0 -0
  793. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/officeqa/wiki_agents.py +0 -0
  794. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/paper_alignment/__init__.py +0 -0
  795. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/paper_alignment/contracts.py +0 -0
  796. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/paper_alignment/evidence.py +0 -0
  797. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product.py +0 -0
  798. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product_cli.py +0 -0
  799. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product_install.py +0 -0
  800. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/product_views.py +0 -0
  801. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
  802. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
  803. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
  804. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
  805. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
  806. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
  807. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
  808. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
  809. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
  810. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
  811. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
  812. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
  813. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
  814. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
  815. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
  816. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
  817. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
  818. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
  819. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
  820. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/protocol.json +0 -0
  821. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
  822. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
  823. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
  824. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
  825. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
  826. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
  827. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
  828. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
  829. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
  830. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
  831. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/protocol.json +0 -0
  832. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
  833. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
  834. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
  835. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
  836. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
  837. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
  838. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/README.md +0 -0
  839. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
  840. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
  841. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
  842. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
  843. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
  844. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
  845. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
  846. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
  847. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
  848. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
  849. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
  850. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
  851. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
  852. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
  853. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/executor.md +0 -0
  854. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
  855. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/product/roles/proposer.md +0 -0
  856. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
  857. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
  858. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
  859. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
  860. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
  861. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
  862. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
  863. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
  864. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
  865. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
  866. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
  867. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
  868. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
  869. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
  870. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
  871. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
  872. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
  873. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
  874. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
  875. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
  876. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
  877. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
  878. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
  879. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/snapshot.json +0 -0
  880. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
  881. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
  882. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
  883. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
  884. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
  885. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
  886. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
  887. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
  888. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
  889. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
  890. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
  891. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
  892. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
  893. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
  894. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
  895. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
  896. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
  897. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
  898. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
  899. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
  900. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
  901. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
  902. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/protocol.json +0 -0
  903. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
  904. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
  905. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
  906. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
  907. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
  908. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
  909. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
  910. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
  911. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
  912. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
  913. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
  914. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
  915. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
  916. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
  917. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
  918. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
  919. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
  920. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/results.py +0 -0
  921. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/score_rules.py +0 -0
  922. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/scorer_trust.py +0 -0
  923. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/sealqa/__init__.py +0 -0
  924. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/sealqa/loop.py +0 -0
  925. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/sealqa/rollout.py +0 -0
  926. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/settings.py +0 -0
  927. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/skill_proposer.py +0 -0
  928. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/__init__.py +0 -0
  929. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/loop.py +0 -0
  930. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/rollout.py +0 -0
  931. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/spreadsheet/study.py +0 -0
  932. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/tool_audit.py +0 -0
  933. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/wiki.py +0 -0
  934. {briefloop-0.26.4 → briefloop-0.27.1}/src/wikiskill/wiki_maintainer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: briefloop
3
- Version: 0.26.4
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.26.4"
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":"用户反馈"}}:记录用户明确提出的反馈。页面自动学习开启时,保存反馈可能稍后自动触发学习,要如实告知。
@@ -66,6 +66,11 @@ def resolve(requirements, template=None, *, reader_contract=None):
66
66
  'requirement_items': requirement_items(requirements),
67
67
  'references': '正文短编号,图表简注,文末精简来源表;详细核查另存',
68
68
  'interpretation_rule': 'objective及requirement_items保留用户原始要求;reader_contract是待对照原文核查的执行解释,不得降级或替换明确要求。'}
69
+ if requirements.get('reader_profile'):
70
+ # Only runs written for a saved reader carry it, so older contracts keep their identity.
71
+ profile = requirements['reader_profile']
72
+ spec['reader_profile'] = {'name': profile.get('name', ''), 'decisions': profile.get('decisions', ''),
73
+ 'preferences': profile.get('preferences', '')}
69
74
  if requirements.get('target_minutes') is not None:
70
75
  spec['target_minutes'] = requirements['target_minutes']
71
76
  # Legacy max_words stays advisory without changing its saved contract hash.
@@ -207,8 +212,10 @@ def instructions(spec, role='analyst', *, include_spec=True):
207
212
 
208
213
  def research_record(store, brief):
209
214
  detail = json.loads(brief['detail']); refs = detail.get('citations', [])
215
+ from .plain_isolation import public_notes
216
+ notes = public_notes(detail.get('research_notes', []))
210
217
  return {'version_id': brief['id'], 'brief_hash': brief['hash'],
211
- 'notes': detail.get('research_notes', []), 'gaps': detail.get('gaps', []),
218
+ 'notes': notes, 'gaps': detail.get('gaps', []),
212
219
  'citations': [{**ref, 'source_name': store.one('sources', ref['source_id'])['name']} for ref in refs],
213
220
  'assessments': [json.loads(x['data']) for x in store.rows('SELECT data FROM assessments WHERE version_id=? ORDER BY rowid DESC', (brief['id'],))]}
214
221
 
@@ -26,6 +26,8 @@ def _paragraph_text(paragraph):
26
26
  parts.append(element.tail or '')
27
27
  continue
28
28
  kind = _name(element)
29
+ # Tracked deletions are not part of the document as it now reads.
30
+ if kind in ('del', 'moveFrom'): continue
29
31
  if kind in ('br', 'cr'): parts.append('\n')
30
32
  elif kind == 'tab': parts.append('\t')
31
33
  parts.append(element.text or '')
@@ -80,6 +82,7 @@ def document_text(document):
80
82
  if depth > 50: raise ValueError('DOCX 表格嵌套过深')
81
83
  lines.append('[DOCX ' + path + ']')
82
84
  for row_index, row in enumerate(_blocks(element, {'tr'}), 1):
85
+ if _property(row, 'trPr', 'del') is not None:continue
83
86
  before = _columns(row, 'trPr', 'gridBefore', 0)
84
87
  after = _columns(row, 'trPr', 'gridAfter', 0)
85
88
  lines.append(f'[DOCX {path} row {row_index} gridBefore={before} gridAfter={after}]')
@@ -15,6 +15,23 @@ _SECRET_HEADER=re.compile(r'''(?im)(?<![\w-])((?:proxy[-_])?authorization|(?:set
15
15
  _SECRET_ENV=re.compile(r'''(?ix)(["']?\b(?:[a-z0-9]+_)*(?:authorization|cookie)["']?\s*=\s*)(?:\[credential[ ]omitted\]|"[^"\n]*"|'[^'\n]*'|[^\s,;&}\]]+)''')
16
16
  _PRIVATE_KEY=re.compile(r'-----BEGIN (?:[A-Z ]+)?PRIVATE KEY-----.*?-----END (?:[A-Z ]+)?PRIVATE KEY-----',re.S)
17
17
 
18
+ # ACP "names" can be entire commands, paths or arbitrary host descriptions.
19
+ # Only exact known identifiers belong in compact public tool summaries.
20
+ _PUBLIC_TOOLS = frozenset('''Read Write Edit MultiEdit Bash Glob Grep LS NotebookEdit TodoWrite Task Agent WebFetch WebSearch
21
+ read write edit bash glob grep find ls task subagent shell search_web web_search webfetch websearch
22
+ read_file write_file edit_file list_directory read_many_files execute_command run_command
23
+ commandExecution command_execution fileChange mcpToolCall dynamicToolCall collabAgentToolCall
24
+ collab_tool_call imageView webSearch runtime_tool opencode_tool subagent_activity'''.split())
25
+ _OTHER_TOOL = '其他宿主工具'
26
+
27
+
28
+ def public_tool_name(value):
29
+ return value if isinstance(value, str) and value in _PUBLIC_TOOLS else _OTHER_TOOL
30
+
31
+
32
+ def public_tool_names(values):
33
+ return sorted({public_tool_name(value) for value in values}) if isinstance(values, list) else []
34
+
18
35
 
19
36
  def _secret_field(key, value):
20
37
  name = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', str(key)).lower()
@@ -55,8 +55,18 @@ def _plain_turn(worker, job, folder, prompt, *, phase=None):
55
55
  (folder / 'packet').mkdir(exist_ok=True)
56
56
  task = {**job, 'allow_web': False, 'plain_output': 'response.txt', 'plain_phase':phase, 'input_source_ids': [],
57
57
  'native_packet': {'role': 'quick_writer', 'run_id': json.loads(job['payload'])['run_id']}}
58
- 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}
@@ -37,6 +37,12 @@ def sync_content_citations(store, run_id, detail, document, figures):
37
37
  if sid not in present:
38
38
  ref={'source_id':sid,'locator':locator,'excerpt':''}
39
39
  citations.append(ref);derived.append(ref);present.add(sid)
40
+ # The final set includes bibliography, data rows, rich nodes and figures.
41
+ # Every saving path calls this helper before committing a draft/revision.
42
+ from .previous_report import source_usage
43
+ for ref in citations:
44
+ if ref['source_id'] in references or source_usage(store,ref['source_id'])=='previous_report':
45
+ raise ValueError('往期报告或风格参考不能作为报告事实引用')
40
46
  detail['citations']=citations
41
47
  detail['content_citations']=derived
42
48
 
@@ -0,0 +1,56 @@
1
+ """Deterministic finding locations, not semantic or factual verification."""
2
+ from .document_model import citation_label_text, document_markdown, markdown_document, source_ids
3
+ from .evidence import blocks
4
+
5
+
6
+ def _passages(document):
7
+ numbers={sid:str(i) for i,sid in enumerate(source_ids(document),1)}
8
+ def inline(node,mode):
9
+ kind=node.get('type');attrs=node.get('attrs',{})
10
+ def citation(sid):
11
+ return '['+('@'+sid if mode=='stored' else sid if mode=='packet' else numbers[sid])+']'
12
+ if kind=='citation':return citation(attrs['sourceId'])
13
+ if kind=='text':
14
+ text=node.get('text','')
15
+ if mode=='packet':return text # packet_views._inline preserves link labels.
16
+ for mark in node.get('marks',[]):
17
+ href=mark.get('attrs',{}).get('href','')
18
+ if href.startswith('#source-'):
19
+ return citation_label_text(text)+citation(href[8:])
20
+ return text
21
+ if kind=='hardBreak':return ' '
22
+ if kind=='image':
23
+ text=attrs.get('caption') or attrs.get('alt') or attrs.get('src','')
24
+ return '[图:'+text+']' if mode=='packet' else text
25
+ return ''.join(inline(child,mode) for child in node.get('content',[]))
26
+ def walk(node,parents):
27
+ identity=node.get('attrs',{}).get('blockId')
28
+ scope=parents|({identity} if identity else set())
29
+ if node.get('type') in ('paragraph','heading','codeBlock','image'):
30
+ for mode in ('stored','packet','reader'):
31
+ yield scope,' '.join(inline(node,mode).split())
32
+ yield scope,' '.join(document_markdown({'type':'doc','content':[node]}).split())
33
+ return
34
+ # Containers are not passages: joining cells or paragraphs could invent
35
+ # a quotation that no reader sees as continuous text.
36
+ for child in node.get('content',[]):yield from walk(child,scope)
37
+ return list(walk(document,set()))
38
+
39
+
40
+ def validate_findings(document,findings,*,reader_preview=''):
41
+ """Check only new, supplied anchors; omitted text and history stay valid."""
42
+ passages=_passages(document);known=set(blocks(document))
43
+ preview=None
44
+ for index,finding in enumerate(findings):
45
+ value=finding.model_dump() if hasattr(finding,'model_dump') else finding
46
+ if value.get('response_to'):continue # A corrected historical quote may be gone.
47
+ selected=set(value.get('block_ids') or [])
48
+ if selected-known:raise ValueError(f'findings[{index}].block_ids 引用了本版不存在的正文块')
49
+ quote=' '.join(str(value.get('report_quote') or '').split())
50
+ if not quote:continue # Missing-content findings need not invent a quotation.
51
+ if any(quote in text for scope,text in passages if not selected or scope&selected):continue
52
+ if not selected and reader_preview:
53
+ if preview is None:preview=_passages(markdown_document(reader_preview))
54
+ if any(quote in text for _,text in preview):continue
55
+ raise ValueError(f'findings[{index}].report_quote 无法在本版指定正文位置连续定位;'
56
+ '请复制实际原文,不拼接省略片段;缺失内容可省略 report_quote 并说明要求')
@@ -50,6 +50,8 @@ def prepare_report_data(payload):
50
50
  elif not row.comparable: reason='尚未确认产品、地区、期间及口径可比'
51
51
  elif row.previous_unit is None or row.previous_tax_basis is None or row.previous_category is None: reason='缺少比较值单位、税口径或数据类别'
52
52
  elif row.previous_unit!=row.unit or row.previous_tax_basis!=row.tax_basis or row.previous_category!=row.category: reason='比较口径不一致'
53
+ elif row.category!='actual' and row.previous_as_of is None: reason='比较预测、指引或一致预期缺少取得数据的截至日 previous_as_of'
54
+ elif row.category!='actual' and row.previous_date==row.current_date and row.previous_as_of>row.as_of: reason='同一目标期的比较值数据截至日晚于本期数据截至日,不能按先后版本计算'
53
55
  elif row.comparison=='pct' and row.previous==0: reason='比较值为零,不能计算百分比'
54
56
  elif row.comparison=='bp' and row.unit not in ('%','percent'): reason='基点变化要求输入为百分数(例如 4.5 表示 4.5%)'
55
57
  else:
@@ -52,7 +52,7 @@ def _usable_output(job, folder, store=None):
52
52
  try:ScoutResult.model_validate(json.loads(filesystem_path(folder/'result.json').read_text(encoding='utf-8-sig')));return True
53
53
  except (OSError,ValueError):return False
54
54
  if role in ('evaluator','scorer','assessor'):
55
- name='comparison.json' if job.get('evaluation_mode')=='pairwise' or role=='assessor' else 'assessment.json'
55
+ name='comparison.json' if job.get('evaluation_mode')=='pairwise' or role=='assessor' else 'triage.json' if job.get('evaluation_mode')=='triage' else 'assessment.json'
56
56
  elif job['kind'] in ('generate','revise'):name='draft.json'
57
57
  elif job['kind']=='assess':name='assessment.json'
58
58
  else:return True # WikiSkill handoffs already request resume_on_complete.
@@ -84,6 +84,13 @@ class InteractiveRuntime:
84
84
  self.session_id = None
85
85
  self.session_backend = None
86
86
 
87
+ @staticmethod
88
+ def _cwd(job, backend, folder):
89
+ if not job.get('plain_output'):
90
+ return folder
91
+ from .plain_isolation import working_directory
92
+ return working_directory(backend, folder)
93
+
87
94
  def _harness_for(self, backend):
88
95
  from .backends import validate_backend
89
96
  try:
@@ -171,12 +178,18 @@ class InteractiveRuntime:
171
178
  runtime = {'model': configured['model'],
172
179
  'effort': configured.get('reasoning_effort', configured.get('effort'))}
173
180
  if job.get('plain_output'):
174
- 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
@@ -237,10 +250,10 @@ class InteractiveRuntime:
237
250
  _write(marker, binding)
238
251
  snapshot = harness.snapshot(binding['session_id'])
239
252
  else:
240
- evaluation_title='Evaluator · 比较' if job.get('evaluation_mode')=='pairwise' else 'Evaluator · 评分'
253
+ evaluation_title={'pairwise':'Evaluator · 比较','triage':'Evaluator · 改动分类'}.get(job.get('evaluation_mode'),'Evaluator · 评分')
241
254
  title = {'evaluator': evaluation_title, 'scorer': 'Evaluator · 评分', 'assessor': 'Evaluator · 比较', 'maintainer': '整理反馈经验', 'proposer': '提出技能改进'}.get(job.get('runtime_role'))
242
255
  title = title or task_label(job['kind'], '简报任务')
243
- session = harness.create_session(title, runtime, folder)
256
+ session = harness.create_session(title, runtime, self._cwd(job, backend, folder))
244
257
  binding = {'job_id': job['id'], 'session_id': session['id'], 'runtime': runtime,
245
258
  'backend': backend, 'message_id': None, 'history': []}
246
259
  _write(marker, binding)
@@ -254,7 +267,7 @@ class InteractiveRuntime:
254
267
  # An explicit job resume may need another turn, but must not undo a
255
268
  # user's archive/delete choice. Completed cached turns bypass this.
256
269
  old_sid=binding['session_id']
257
- session=harness.create_session('恢复简报任务',runtime,folder)
270
+ session=harness.create_session('恢复简报任务',runtime,self._cwd(job,backend,folder))
258
271
  binding.setdefault('previous_session_ids',[]).append(old_sid)
259
272
  binding['session_id']=session['id']
260
273
  if binding.get('message_id'):binding.setdefault('history',[]).append(binding['message_id'])
@@ -303,7 +316,7 @@ class InteractiveRuntime:
303
316
  label = {'company_review':'先检查并维护本轮企业背景,完成后再进入报告写作。', 'generate': '请按已保存的要求研究来源并生成简报。',
304
317
  'assess': '请核对这份简报的要求、内容与来源并给出评分。',
305
318
  'learn': '请继续整理反馈、更新经验并完成当前技能改进步骤。'}.get(job['kind'], '请完成当前简报任务。')
306
- evaluation_label='请使用 Evaluator 成对比较模式,依据任务与来源比较新旧稿件。' if job.get('evaluation_mode')=='pairwise' else '请使用 Evaluator 单稿评分模式,核对简报要求、内容与来源。'
319
+ evaluation_label={'pairwise':'请使用 Evaluator 成对比较模式,依据任务与来源比较新旧稿件。','triage':'请使用 Evaluator 改动分类模式,对照来源判断每处用户改动的性质。'}.get(job.get('evaluation_mode'),'请使用 Evaluator 单稿评分模式,核对简报要求、内容与来源。')
307
320
  label = {'evaluator': evaluation_label, 'scorer': '请使用 Evaluator 单稿评分模式核对简报。', 'assessor': '请使用 Evaluator 成对比较模式核对新旧稿件。', 'maintainer': '请从反馈中整理可复用经验。', 'proposer': '请依据经验提出技能改进。'}.get(job.get('runtime_role'), label)
308
321
  harness.start_internal(filesystem_path(folder / 'prompt.md').read_text(encoding='utf-8'), session_id=sid,
309
322
  runtime=runtime, cwd=folder, job_id=job['id'], display_text=label,
@@ -375,7 +388,7 @@ class InteractiveRuntime:
375
388
  if status in ('interrupted', 'cancelled'):
376
389
  raise InterruptedError('会话已中断,已生成内容保留,可恢复')
377
390
  if status != 'completed':
378
- raise RuntimeError('Agent 执行失败;详情保存在会话与任务日志')
391
+ raise RuntimeError(tracker.failure_message or 'Agent 执行失败;详情保存在会话与任务日志')
379
392
  return result
380
393
  minutes = timing['hard_timeout_minutes']
381
394
  if minutes > 0 and time.monotonic() - started > minutes * 60: