briefloop 0.28.3__tar.gz → 0.28.4__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 (1010) hide show
  1. {briefloop-0.28.3 → briefloop-0.28.4}/CHANGELOG.md +9 -0
  2. {briefloop-0.28.3 → briefloop-0.28.4}/PKG-INFO +1 -1
  3. briefloop-0.28.4/VERSION +1 -0
  4. {briefloop-0.28.3 → briefloop-0.28.4}/desktop/electron/package-lock.json +2 -2
  5. {briefloop-0.28.3 → briefloop-0.28.4}/desktop/electron/package.json +1 -1
  6. briefloop-0.28.4/docs/release-0.28.4.md +9 -0
  7. {briefloop-0.28.3 → briefloop-0.28.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 +1 -1
  8. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/app.js +11 -4
  9. briefloop-0.28.4/frontend/next-report.js +53 -0
  10. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/research-process.js +1 -0
  11. {briefloop-0.28.3 → briefloop-0.28.4}/pyproject.toml +1 -1
  12. briefloop-0.28.4/src/briefloop/__init__.py +1 -0
  13. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_tools.py +10 -1
  14. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/external_client.py +7 -1
  15. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/models.py +3 -1
  16. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_orchestrator.py +46 -11
  17. briefloop-0.28.4/src/briefloop/next_report.py +49 -0
  18. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/progress.py +2 -0
  19. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime.py +2 -0
  20. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/schedules.py +1 -1
  21. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/server.py +9 -1
  22. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/app.js +81 -81
  23. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/index.html +3 -3
  24. briefloop-0.28.4/src/briefloop/static/release-notes.json +4 -0
  25. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/store.py +10 -2
  26. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/task_progress.py +2 -2
  27. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/PKG-INFO +1 -1
  28. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/SOURCES.txt +7 -0
  29. {briefloop-0.28.3 → briefloop-0.28.4}/start.sh +0 -0
  30. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_commands.mjs +1 -1
  31. briefloop-0.28.4/tests/frontend_next_report.mjs +46 -0
  32. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_form_defaults.mjs +7 -2
  33. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_research_process.mjs +5 -0
  34. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_save_barrier.mjs +6 -1
  35. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_setup_state.mjs +1 -1
  36. briefloop-0.28.4/tests/test_chat_stop.py +70 -0
  37. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_switch.py +19 -4
  38. briefloop-0.28.4/tests/test_native_scout_round_paths.py +69 -0
  39. briefloop-0.28.4/tests/test_next_report.py +73 -0
  40. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_capability.py +2 -2
  41. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_scout_coverage.py +49 -0
  42. briefloop-0.28.3/VERSION +0 -1
  43. briefloop-0.28.3/src/briefloop/__init__.py +0 -1
  44. briefloop-0.28.3/src/briefloop/static/release-notes.json +0 -4
  45. {briefloop-0.28.3 → briefloop-0.28.4}/.gitattributes +0 -0
  46. {briefloop-0.28.3 → briefloop-0.28.4}/CONTRIBUTING.md +0 -0
  47. {briefloop-0.28.3 → briefloop-0.28.4}/KNOWN_ISSUES.md +0 -0
  48. {briefloop-0.28.3 → briefloop-0.28.4}/LICENSE +0 -0
  49. {briefloop-0.28.3 → briefloop-0.28.4}/MANIFEST.in +0 -0
  50. {briefloop-0.28.3 → briefloop-0.28.4}/README.md +0 -0
  51. {briefloop-0.28.3 → briefloop-0.28.4}/SECURITY.md +0 -0
  52. {briefloop-0.28.3 → briefloop-0.28.4}/THIRD_PARTY_NOTICES.md +0 -0
  53. {briefloop-0.28.3 → briefloop-0.28.4}/bootstrap.py +0 -0
  54. {briefloop-0.28.3 → briefloop-0.28.4}/docs/OpenCode/347/211/210/346/234/254/345/205/274/345/256/271.md" +0 -0
  55. {briefloop-0.28.3 → briefloop-0.28.4}/docs/WorkBuddy/345/244/226/351/203/250/345/205/245/345/217/243.md" +0 -0
  56. {briefloop-0.28.3 → briefloop-0.28.4}/docs/architecture.md +0 -0
  57. {briefloop-0.28.3 → briefloop-0.28.4}/docs/compose/spec/home-v2.md +0 -0
  58. {briefloop-0.28.3 → briefloop-0.28.4}/docs/design-v3.1-validation.md +0 -0
  59. {briefloop-0.28.3 → briefloop-0.28.4}/docs/dmg-density-validation.md +0 -0
  60. {briefloop-0.28.3 → briefloop-0.28.4}/docs/draft-first.md +0 -0
  61. {briefloop-0.28.3 → briefloop-0.28.4}/docs/jev-precheck.md +0 -0
  62. {briefloop-0.28.3 → briefloop-0.28.4}/docs/native-integration.md +0 -0
  63. {briefloop-0.28.3 → briefloop-0.28.4}/docs/quality-reading-context.md +0 -0
  64. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.0.md +0 -0
  65. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.1.md +0 -0
  66. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.2.md +0 -0
  67. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.3.md +0 -0
  68. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.26.4.md +0 -0
  69. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.27.0.md +0 -0
  70. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.0.md +0 -0
  71. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.1.md +0 -0
  72. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.2.md +0 -0
  73. {briefloop-0.28.3 → briefloop-0.28.4}/docs/release-0.28.3.md +0 -0
  74. {briefloop-0.28.3 → briefloop-0.28.4}/docs/report-length.md +0 -0
  75. {briefloop-0.28.3 → briefloop-0.28.4}/docs/report-time-window.md +0 -0
  76. {briefloop-0.28.3 → briefloop-0.28.4}/docs/report-version-information.md +0 -0
  77. {briefloop-0.28.3 → briefloop-0.28.4}/docs/research-handoff.md +0 -0
  78. {briefloop-0.28.3 → briefloop-0.28.4}/docs/revision-learning.md +0 -0
  79. {briefloop-0.28.3 → briefloop-0.28.4}/docs/sqlite-benchmark.md +0 -0
  80. {briefloop-0.28.3 → briefloop-0.28.4}/docs/technical-report-0.21.0/evidence-index.md +0 -0
  81. {briefloop-0.28.3 → briefloop-0.28.4}/docs/technical-report-0.21.0/technical-report.md +0 -0
  82. {briefloop-0.28.3 → briefloop-0.28.4}/docs/windows.md +0 -0
  83. {briefloop-0.28.3 → briefloop-0.28.4}/docs/writer-input.md +0 -0
  84. {briefloop-0.28.3 → briefloop-0.28.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 -0
  85. {briefloop-0.28.3 → briefloop-0.28.4}/docs//344/274/232/350/256/256/347/272/252/350/246/201.md" +0 -0
  86. {briefloop-0.28.3 → briefloop-0.28.4}/docs//344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -0
  87. {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/206/205/347/275/256/345/274/225/346/223/216.md" +0 -0
  88. {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/215/207/347/272/247/350/257/264/346/230/216.md" +0 -0
  89. {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/233/276/350/241/250/344/270/216Excel.md" +0 -0
  90. {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/244/232Runtime/344/270/216/346/250/241/345/236/213.md" +0 -0
  91. {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/244/232/346/250/241/346/200/201/346/235/245/346/272/220.md" +0 -0
  92. {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/256/232/346/227/266/346/212/245/345/221/212.md" +0 -0
  93. {briefloop-0.28.3 → briefloop-0.28.4}/docs//345/257/271/350/257/235/345/256/277/344/270/273/345/210/207/346/215/242.md" +0 -0
  94. {briefloop-0.28.3 → briefloop-0.28.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 -0
  95. {briefloop-0.28.3 → briefloop-0.28.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 -0
  96. {briefloop-0.28.3 → briefloop-0.28.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 -0
  97. {briefloop-0.28.3 → briefloop-0.28.4}/docs//350/241/214/344/270/232/346/212/245/345/221/212.md" +0 -0
  98. {briefloop-0.28.3 → briefloop-0.28.4}/docs//350/257/201/345/210/270/347/240/224/347/251/266.md" +0 -0
  99. {briefloop-0.28.3 → briefloop-0.28.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 -0
  100. {briefloop-0.28.3 → briefloop-0.28.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 -0
  101. {briefloop-0.28.3 → briefloop-0.28.4}/docs//351/252/214/346/224/266/350/256/260/345/275/225.md" +0 -0
  102. {briefloop-0.28.3 → briefloop-0.28.4}/examples/internal-weekly-report/README.md +0 -0
  103. {briefloop-0.28.3 → briefloop-0.28.4}/examples/internal-weekly-report/report.md +0 -0
  104. {briefloop-0.28.3 → briefloop-0.28.4}/examples/internal-weekly-report/source.txt +0 -0
  105. {briefloop-0.28.3 → briefloop-0.28.4}/examples/meeting-minutes/transcript.txt +0 -0
  106. {briefloop-0.28.3 → briefloop-0.28.4}/examples/stock-research/earnings-event.txt +0 -0
  107. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/anchored-popover.js +0 -0
  108. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/api.js +0 -0
  109. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/app-updates.js +0 -0
  110. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/assessment-checks.js +0 -0
  111. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/assessment-panel.js +0 -0
  112. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/citation-evidence.js +0 -0
  113. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/citation-sources.js +0 -0
  114. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/clipboard.js +0 -0
  115. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/composer-options.js +0 -0
  116. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/connectors.js +0 -0
  117. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/delivery.js +0 -0
  118. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/dom.js +0 -0
  119. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/excel-export.js +0 -0
  120. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/fact-check-availability.js +0 -0
  121. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/fact-check-grants.js +0 -0
  122. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/feedback-list.js +0 -0
  123. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/jev-checks.js +0 -0
  124. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/job-presentation.js +0 -0
  125. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/learning-retry.js +0 -0
  126. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/length-controls.js +0 -0
  127. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/market-convention.js +0 -0
  128. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/market-decorations.js +0 -0
  129. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/mcp-selection.js +0 -0
  130. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/model-catalog.js +0 -0
  131. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/native-requests.js +0 -0
  132. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/notifications.js +0 -0
  133. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/office-tools.js +0 -0
  134. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/polling.js +0 -0
  135. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/previous-report.js +0 -0
  136. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/provider-capabilities.js +0 -0
  137. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/quick-report.js +0 -0
  138. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/readers.js +0 -0
  139. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/reasoning-controls.js +0 -0
  140. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-browsing.js +0 -0
  141. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-export.js +0 -0
  142. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-form-defaults.js +0 -0
  143. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-language.js +0 -0
  144. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-panels.js +0 -0
  145. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-sources.js +0 -0
  146. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/report-version-info.js +0 -0
  147. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-controls.js +0 -0
  148. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-coverage.js +0 -0
  149. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-results.js +0 -0
  150. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/review-status.js +0 -0
  151. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/revision-questions.js +0 -0
  152. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/rich-document.js +0 -0
  153. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-cards.js +0 -0
  154. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-model-picker.js +0 -0
  155. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-permission-modes.js +0 -0
  156. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-permission-panel.js +0 -0
  157. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/runtime-picker-bindings.js +0 -0
  158. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/schedules.js +0 -0
  159. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/session-budget.js +0 -0
  160. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/skill-verification.js +0 -0
  161. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/source-library-search.js +0 -0
  162. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/source-upload.js +0 -0
  163. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/task-progress.js +0 -0
  164. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/template-output.js +0 -0
  165. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/templates.js +0 -0
  166. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/time.js +0 -0
  167. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/uploads.js +0 -0
  168. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/version-diff.js +0 -0
  169. {briefloop-0.28.3 → briefloop-0.28.4}/frontend/welcome.js +0 -0
  170. {briefloop-0.28.3 → briefloop-0.28.4}/package-lock.json +0 -0
  171. {briefloop-0.28.3 → briefloop-0.28.4}/package.json +0 -0
  172. {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/README.md +0 -0
  173. {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/probe.py +0 -0
  174. {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/requirements.txt +0 -0
  175. {briefloop-0.28.3 → briefloop-0.28.4}/probes/mcp_m0/server.py +0 -0
  176. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/README.md +0 -0
  177. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/bridge.test.mjs +0 -0
  178. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/build.mjs +0 -0
  179. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/catalog.json +0 -0
  180. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/claude.ts +0 -0
  181. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/main.ts +0 -0
  182. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/permission-catalog.ts +0 -0
  183. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/pi.ts +0 -0
  184. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/reasoning.ts +0 -0
  185. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/user-input.ts +0 -0
  186. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/windows-command.ts +0 -0
  187. {briefloop-0.28.3 → briefloop-0.28.4}/runtime-bridge/zcode.ts +0 -0
  188. {briefloop-0.28.3 → briefloop-0.28.4}/scripts/build_frontend.mjs +0 -0
  189. {briefloop-0.28.3 → briefloop-0.28.4}/scripts/build_frontend_licenses.mjs +0 -0
  190. {briefloop-0.28.3 → briefloop-0.28.4}/scripts/check_versions.py +0 -0
  191. {briefloop-0.28.3 → briefloop-0.28.4}/scripts/sync_versions.py +0 -0
  192. {briefloop-0.28.3 → briefloop-0.28.4}/scripts/test_frontend.mjs +0 -0
  193. {briefloop-0.28.3 → briefloop-0.28.4}/setup.cfg +0 -0
  194. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/__main__.py +0 -0
  195. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/_entrypoint.py +0 -0
  196. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/agent_commands.py +0 -0
  197. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/agent_prompts.py +0 -0
  198. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/analyst.py +0 -0
  199. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/analyst_drafts.py +0 -0
  200. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/app_server.py +0 -0
  201. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/audit_bundle.py +0 -0
  202. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/backends/__init__.py +0 -0
  203. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/backends/opencode_server.py +0 -0
  204. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/backends/opencode_v2.py +0 -0
  205. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/bocha.py +0 -0
  206. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/bridge_harness.py +0 -0
  207. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_dispatch.py +0 -0
  208. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_execution.py +0 -0
  209. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/chat_store.py +0 -0
  210. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/cli.py +0 -0
  211. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/codex_diagnostics.py +0 -0
  212. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/company_context.py +0 -0
  213. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/comparison_contract.py +0 -0
  214. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/conflicts.py +0 -0
  215. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/MATERIALS.md +0 -0
  216. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/README.md +0 -0
  217. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/__init__.py +0 -0
  218. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/config.py +0 -0
  219. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/grants.py +0 -0
  220. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/materials.py +0 -0
  221. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/receipts.py +0 -0
  222. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/runtime.py +0 -0
  223. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/runtime_tools.py +0 -0
  224. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/service.py +0 -0
  225. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/stdio_supervisor.py +0 -0
  226. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/task_client.py +0 -0
  227. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/tasks.py +0 -0
  228. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/transport.py +0 -0
  229. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/connectors/windows_acl.py +0 -0
  230. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/default_fonts.py +0 -0
  231. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/deliverable_spec.py +0 -0
  232. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/delivery_checks.py +0 -0
  233. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/demo.py +0 -0
  234. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/document_export.py +0 -0
  235. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/document_model.py +0 -0
  236. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/document_workflows.py +0 -0
  237. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/docx_text.py +0 -0
  238. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/draft_checks.py +0 -0
  239. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/draft_completion.py +0 -0
  240. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/duckduckgo.py +0 -0
  241. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/evaluation_reading.py +0 -0
  242. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/evidence.py +0 -0
  243. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/evidence_context.py +0 -0
  244. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/execution_records.py +0 -0
  245. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/execution_timing.py +0 -0
  246. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/export_jobs.py +0 -0
  247. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/export_labeling.py +0 -0
  248. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/exports.py +0 -0
  249. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/external_mcp.py +0 -0
  250. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/external_requests.py +0 -0
  251. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fact_check.py +0 -0
  252. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fast_mode.py +0 -0
  253. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fast_reports.py +0 -0
  254. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/fast_research.py +0 -0
  255. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/feedback_view.py +0 -0
  256. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/figure_support.py +0 -0
  257. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/figure_text.py +0 -0
  258. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/figures.py +0 -0
  259. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/finding_anchors.py +0 -0
  260. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/harness.py +0 -0
  261. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/host_bins.py +0 -0
  262. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/industry_data.py +0 -0
  263. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/industry_export.py +0 -0
  264. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/interactive_runtime.py +0 -0
  265. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/jev.py +0 -0
  266. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/jev_checks.py +0 -0
  267. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/learning.py +0 -0
  268. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/learning_budget.py +0 -0
  269. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/length.py +0 -0
  270. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/market_convention.py +0 -0
  271. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/media.py +0 -0
  272. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/model_budget.py +0 -0
  273. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_engine.py +0 -0
  274. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_harness.py +0 -0
  275. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_providers.py +0 -0
  276. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/native_roles.py +0 -0
  277. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/notifications.py +0 -0
  278. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/office_cli.py +0 -0
  279. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/ooxml_order.py +0 -0
  280. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/opencode_harness.py +0 -0
  281. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/opencode_version.py +0 -0
  282. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/packet_views.py +0 -0
  283. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/parent_watch.py +0 -0
  284. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/plain_isolation.py +0 -0
  285. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/platform_support.py +0 -0
  286. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/previous_report.py +0 -0
  287. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/process_host.py +0 -0
  288. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/projections.py +0 -0
  289. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/core.zh.md +0 -0
  290. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/mode.background.zh.md +0 -0
  291. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/mode.interactive.zh.md +0 -0
  292. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.analyst.zh.md +0 -0
  293. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.chat.zh.md +0 -0
  294. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.evaluator.zh.md +0 -0
  295. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.fact_checker.zh.md +0 -0
  296. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.maintainer.zh.md +0 -0
  297. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.orchestrator.zh.md +0 -0
  298. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.proposer.zh.md +0 -0
  299. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.quick_writer.zh.md +0 -0
  300. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.reviewer.zh.md +0 -0
  301. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/prompt_assets/role.scout.zh.md +0 -0
  302. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/provider_catalog.py +0 -0
  303. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/readers.py +0 -0
  304. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/reconciliation.py +0 -0
  305. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/release.py +0 -0
  306. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_browsing.py +0 -0
  307. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_profiles.py +0 -0
  308. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_time.py +0 -0
  309. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/report_tools.py +0 -0
  310. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/research_budget.py +0 -0
  311. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/research_handoff.py +0 -0
  312. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/research_plan.py +0 -0
  313. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/review.py +0 -0
  314. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/review_capability.py +0 -0
  315. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/review_learning.py +0 -0
  316. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/revision_edits.py +0 -0
  317. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/revision_metadata.py +0 -0
  318. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/revision_policy.py +0 -0
  319. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/rpc_writer.py +0 -0
  320. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime_bridge.py +0 -0
  321. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime_permissions.py +0 -0
  322. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/runtime_reasoning.py +0 -0
  323. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout.py +0 -0
  324. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout_coverage.py +0 -0
  325. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout_evidence.py +0 -0
  326. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/scout_tools.py +0 -0
  327. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/search_credentials.py +0 -0
  328. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/search_policy.py +0 -0
  329. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/briefloop-external/SKILL.md +0 -0
  330. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/duckduckgo/SKILL.md +0 -0
  331. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/multi-search/SKILL.md +0 -0
  332. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_assets/tavily/SKILL.md +0 -0
  333. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skill_verification.py +0 -0
  334. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/skills.py +0 -0
  335. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/software_release_notes.py +0 -0
  336. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/software_version.py +0 -0
  337. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_context.py +0 -0
  338. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_extraction.py +0 -0
  339. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_ingestion.py +0 -0
  340. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_library_search.py +0 -0
  341. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_search.py +0 -0
  342. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/source_updates.py +0 -0
  343. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/sources.py +0 -0
  344. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/frontend-licenses.txt +0 -0
  345. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-image-worker.mjs +0 -0
  346. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-licenses.txt +0 -0
  347. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-models.json +0 -0
  348. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine-photon.wasm +0 -0
  349. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/native-engine.mjs +0 -0
  350. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-aider.png +0 -0
  351. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-amr.svg +0 -0
  352. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-antigravity.svg +0 -0
  353. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.LICENSE.txt +0 -0
  354. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.NOTICE.txt +0 -0
  355. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-bridge.mjs +0 -0
  356. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-briefloop.svg +0 -0
  357. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-claude.svg +0 -0
  358. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-codebuddy.svg +0 -0
  359. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-codex.svg +0 -0
  360. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-copilot.svg +0 -0
  361. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-cursor-agent.svg +0 -0
  362. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-deepseek.svg +0 -0
  363. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-devin.png +0 -0
  364. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-grok-build.svg +0 -0
  365. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-hermes.svg +0 -0
  366. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-kilo.svg +0 -0
  367. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-kimi.svg +0 -0
  368. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-kiro.svg +0 -0
  369. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-mimo.svg +0 -0
  370. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-opencode.svg +0 -0
  371. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-pi.svg +0 -0
  372. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-qoder.svg +0 -0
  373. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-qwen.svg +0 -0
  374. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-reasoning.json +0 -0
  375. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-reasonix.svg +0 -0
  376. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-trae-cli.png +0 -0
  377. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/runtime-vibe.svg +0 -0
  378. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/style.css +0 -0
  379. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/static/tokens.css +0 -0
  380. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/task_labels.py +0 -0
  381. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/task_notify.py +0 -0
  382. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/tavily.py +0 -0
  383. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t1.docx +0 -0
  384. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t1.spec.json +0 -0
  385. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t2.docx +0 -0
  386. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t2.spec.json +0 -0
  387. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t3.docx +0 -0
  388. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t3.spec.json +0 -0
  389. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t4.docx +0 -0
  390. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t4.spec.json +0 -0
  391. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t5.docx +0 -0
  392. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/academic-paper-zh-t5.spec.json +0 -0
  393. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t1.docx +0 -0
  394. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t1.spec.json +0 -0
  395. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t2.docx +0 -0
  396. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t2.spec.json +0 -0
  397. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t3.docx +0 -0
  398. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t3.spec.json +0 -0
  399. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t4.docx +0 -0
  400. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t4.spec.json +0 -0
  401. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t5.docx +0 -0
  402. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/annual-report-zh-t5.spec.json +0 -0
  403. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t1.docx +0 -0
  404. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t1.spec.json +0 -0
  405. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t2.docx +0 -0
  406. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t2.spec.json +0 -0
  407. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t3.docx +0 -0
  408. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t3.spec.json +0 -0
  409. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t4.docx +0 -0
  410. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t4.spec.json +0 -0
  411. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t5.docx +0 -0
  412. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/business-report-zh-t5.spec.json +0 -0
  413. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t1.docx +0 -0
  414. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t1.spec.json +0 -0
  415. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t2.docx +0 -0
  416. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t2.spec.json +0 -0
  417. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t3.docx +0 -0
  418. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t3.spec.json +0 -0
  419. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t4.docx +0 -0
  420. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t4.spec.json +0 -0
  421. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t5.docx +0 -0
  422. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-en-t5.spec.json +0 -0
  423. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t1.docx +0 -0
  424. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t1.spec.json +0 -0
  425. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t2.docx +0 -0
  426. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t2.spec.json +0 -0
  427. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t3.docx +0 -0
  428. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t3.spec.json +0 -0
  429. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t4.docx +0 -0
  430. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t4.spec.json +0 -0
  431. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t5.docx +0 -0
  432. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/general-report-zh-t5.spec.json +0 -0
  433. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/government-doc-zh-t4.docx +0 -0
  434. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/government-doc-zh-t4.spec.json +0 -0
  435. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t1.docx +0 -0
  436. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t1.spec.json +0 -0
  437. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t2.docx +0 -0
  438. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t2.spec.json +0 -0
  439. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t3.docx +0 -0
  440. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t3.spec.json +0 -0
  441. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t4.docx +0 -0
  442. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t4.spec.json +0 -0
  443. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t5.docx +0 -0
  444. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/legal-contract-zh-t5.spec.json +0 -0
  445. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t1.docx +0 -0
  446. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t1.spec.json +0 -0
  447. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t2.docx +0 -0
  448. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t2.spec.json +0 -0
  449. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t3.docx +0 -0
  450. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t3.spec.json +0 -0
  451. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t4.docx +0 -0
  452. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t4.spec.json +0 -0
  453. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t5.docx +0 -0
  454. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/meeting-minutes-zh-t5.spec.json +0 -0
  455. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t1.docx +0 -0
  456. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t1.spec.json +0 -0
  457. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t2.docx +0 -0
  458. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t2.spec.json +0 -0
  459. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t3.docx +0 -0
  460. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t3.spec.json +0 -0
  461. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t4.docx +0 -0
  462. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t4.spec.json +0 -0
  463. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t5.docx +0 -0
  464. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-en-t5.spec.json +0 -0
  465. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t1.docx +0 -0
  466. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t1.spec.json +0 -0
  467. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t2.docx +0 -0
  468. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t2.spec.json +0 -0
  469. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t3.docx +0 -0
  470. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t3.spec.json +0 -0
  471. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t4.docx +0 -0
  472. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t4.spec.json +0 -0
  473. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t5.docx +0 -0
  474. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_assets/stock-research-zh-t5.spec.json +0 -0
  475. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/template_conversion.py +0 -0
  476. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/templates.py +0 -0
  477. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/user_input.py +0 -0
  478. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/version_execution.py +0 -0
  479. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/websearch.py +0 -0
  480. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/windows_process.py +0 -0
  481. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/word_import.py +0 -0
  482. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workbook_figures.py +0 -0
  483. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/evaluation.md +0 -0
  484. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/manifest.json +0 -0
  485. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/decision_memo.md +0 -0
  486. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/industry_periodic.md +0 -0
  487. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/methods/work_progress.md +0 -0
  488. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/planning.md +0 -0
  489. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/business_report/writing.md +0 -0
  490. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/evaluation.md +0 -0
  491. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/manifest.json +0 -0
  492. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/planning.md +0 -0
  493. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/general_report/writing.md +0 -0
  494. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/evaluation.md +0 -0
  495. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/manifest.json +0 -0
  496. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/planning.md +0 -0
  497. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/meeting_minutes/writing.md +0 -0
  498. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/evaluation.md +0 -0
  499. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/manifest.json +0 -0
  500. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/company_research.md +0 -0
  501. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/event_commentary.md +0 -0
  502. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/methods/industry_tracking.md +0 -0
  503. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/planning.md +0 -0
  504. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workflow_assets/stock_research/writing.md +0 -0
  505. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workspace_profile.py +0 -0
  506. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/workspaces.py +0 -0
  507. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/writer_assembly.py +0 -0
  508. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/writer_input.py +0 -0
  509. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/writing_guidance.py +0 -0
  510. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/xlsx_export.py +0 -0
  511. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop/zhipu.py +0 -0
  512. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/dependency_links.txt +0 -0
  513. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/entry_points.txt +0 -0
  514. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/requires.txt +0 -0
  515. {briefloop-0.28.3 → briefloop-0.28.4}/src/briefloop.egg-info/top_level.txt +0 -0
  516. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/__init__.py +0 -0
  517. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/__main__.py +0 -0
  518. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/LICENSE +0 -0
  519. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/NOTICE.md +0 -0
  520. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/acorn/LICENSE +0 -0
  521. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/acorn/NOTICE.md +0 -0
  522. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/officeqa/LICENSE-APACHE +0 -0
  523. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/_licenses/third_party/officeqa/NOTICE +0 -0
  524. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/__init__.py +0 -0
  525. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/act.sh +0 -0
  526. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/rollout.py +0 -0
  527. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/alfworld/step.py +0 -0
  528. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/__init__.py +0 -0
  529. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/alfworld.py +0 -0
  530. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/livemath.py +0 -0
  531. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/sealqa.py +0 -0
  532. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/benchmarks/spreadsheet.py +0 -0
  533. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/cli.py +0 -0
  534. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/codex_identity.py +0 -0
  535. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/engine.py +0 -0
  536. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/feedback_loop.py +0 -0
  537. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/__init__.py +0 -0
  538. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/audit.py +0 -0
  539. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/runtime.py +0 -0
  540. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/isolated/tools_server.py +0 -0
  541. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/jsonl.py +0 -0
  542. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/k4_lock.py +0 -0
  543. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/livemath/__init__.py +0 -0
  544. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/livemath/loop.py +0 -0
  545. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/livemath/rollout.py +0 -0
  546. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/native_agents.py +0 -0
  547. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/__init__.py +0 -0
  548. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/dataset.py +0 -0
  549. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/fetch.py +0 -0
  550. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/loop.py +0 -0
  551. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/retrieval.py +0 -0
  552. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/reward.py +0 -0
  553. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/rollout.py +0 -0
  554. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/scoring.py +0 -0
  555. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/officeqa/wiki_agents.py +0 -0
  556. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/paper_alignment/__init__.py +0 -0
  557. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/paper_alignment/contracts.py +0 -0
  558. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/paper_alignment/evidence.py +0 -0
  559. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product.py +0 -0
  560. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product_cli.py +0 -0
  561. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product_install.py +0 -0
  562. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/product_views.py +0 -0
  563. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/split_manifest.json +0 -0
  564. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/test.json +0 -0
  565. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/train.json +0 -0
  566. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/id_split/val.json +0 -0
  567. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/SKILL-s0.md +0 -0
  568. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/index.md +0 -0
  569. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/logs.md +0 -0
  570. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/prompts/maintainer.md +0 -0
  571. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/prompts/proposer.md +0 -0
  572. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/alfworld/wiki/skill-impact.md +0 -0
  573. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/isolated/model-catalog-direct.json +0 -0
  574. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/split_manifest.json +0 -0
  575. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/test.json +0 -0
  576. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/train.json +0 -0
  577. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split/val.json +0 -0
  578. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/split_manifest.json +0 -0
  579. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/test.json +0 -0
  580. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/train.json +0 -0
  581. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/id_split-v2/val.json +0 -0
  582. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/protocol.json +0 -0
  583. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/SKILL-s0.md +0 -0
  584. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/index.md +0 -0
  585. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/logs.md +0 -0
  586. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/prompts/maintainer.md +0 -0
  587. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/prompts/proposer.md +0 -0
  588. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/livemath/wiki/skill-impact.md +0 -0
  589. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/split_manifest.json +0 -0
  590. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/test.json +0 -0
  591. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/train.json +0 -0
  592. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/id_split/val.json +0 -0
  593. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/protocol.json +0 -0
  594. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/SKILL-s0.md +0 -0
  595. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/index.md +0 -0
  596. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/logs.md +0 -0
  597. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/prompts/maintainer.md +0 -0
  598. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/prompts/proposer.md +0 -0
  599. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/officeqa/wiki/skill-impact.md +0 -0
  600. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/README.md +0 -0
  601. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/maintainer.paper.md +0 -0
  602. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/officeqa.paper.md +0 -0
  603. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/proposer.paper.md +0 -0
  604. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/paper_alignment/prompts/spreadsheet.paper.md +0 -0
  605. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-executor.md +0 -0
  606. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-maintainer.md +0 -0
  607. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/claude-code/wikiskill-proposer.md +0 -0
  608. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-executor.toml +0 -0
  609. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-maintainer.toml +0 -0
  610. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/agents/codex/wikiskill-proposer.toml +0 -0
  611. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/SKILL.md +0 -0
  612. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/agents/openai.yaml +0 -0
  613. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/references/native-subagents.md +0 -0
  614. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/entry-skill/references/workflow.md +0 -0
  615. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/executor.md +0 -0
  616. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/maintainer.md +0 -0
  617. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/product/roles/proposer.md +0 -0
  618. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/manifest.json +0 -0
  619. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/math-episodes.json +0 -0
  620. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/sealqa-pairs.json +0 -0
  621. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/spreadsheet-SKILL.md +0 -0
  622. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/spreadsheet-pairs.json +0 -0
  623. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/final-20260907/summary.json +0 -0
  624. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/example-provenance.json +0 -0
  625. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/installed-smoke.json +0 -0
  626. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/manifest.json +0 -0
  627. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat1-pairs.json +0 -0
  628. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat2-pairs.json +0 -0
  629. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/repeat3-pairs.json +0 -0
  630. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/summary.json +0 -0
  631. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/repeatability-20260908/wiki-deliver-the-recalculated-workbook.md +0 -0
  632. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/livemath/55.md +0 -0
  633. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/livemath/luna.md +0 -0
  634. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa/55.md +0 -0
  635. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa/terra.md +0 -0
  636. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa-retrieval/55.md +0 -0
  637. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/officeqa-retrieval/sol.md +0 -0
  638. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/sealqa/sol.md +0 -0
  639. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/spreadsheet/55.md +0 -0
  640. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/skills/spreadsheet/sol.md +0 -0
  641. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/snapshot.json +0 -0
  642. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/snapshot.sha256 +0 -0
  643. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/livemath-luna-pairs.json +0 -0
  644. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/livemath-luna-skill.md +0 -0
  645. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/manifest.json +0 -0
  646. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-luna-skill.md +0 -0
  647. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-sol-skill.md +0 -0
  648. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/officeqa-sol-v2-pairs.json +0 -0
  649. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260906/studies.json +0 -0
  650. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/effort-analysis.json +0 -0
  651. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/effort-pairs.json +0 -0
  652. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/manifest.json +0 -0
  653. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-pairs.json +0 -0
  654. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/officeqa-luna-paper-tools-skill.md +0 -0
  655. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-pairs.json +0 -0
  656. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/spreadsheet-luna-scoped-python-skill.md +0 -0
  657. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/research/update-20260907/studies.json +0 -0
  658. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/runtime/acorn.mjs +0 -0
  659. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/runtime/audit_js.mjs +0 -0
  660. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/split_manifest.json +0 -0
  661. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/test.json +0 -0
  662. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/train.json +0 -0
  663. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/id_split/val.json +0 -0
  664. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/protocol.json +0 -0
  665. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/SKILL-s0.md +0 -0
  666. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/index.md +0 -0
  667. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/logs.md +0 -0
  668. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/prompts/maintainer.md +0 -0
  669. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/prompts/proposer.md +0 -0
  670. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/sealqa/wiki/skill-impact.md +0 -0
  671. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/split_manifest.json +0 -0
  672. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/test.json +0 -0
  673. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/train.json +0 -0
  674. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/id_split/val.json +0 -0
  675. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/protocol.json +0 -0
  676. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/SKILL-s0.md +0 -0
  677. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/index.md +0 -0
  678. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/logs.md +0 -0
  679. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/prompts/maintainer.md +0 -0
  680. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/prompts/proposer.md +0 -0
  681. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/resources/spreadsheet/wiki/skill-impact.md +0 -0
  682. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/results.py +0 -0
  683. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/score_rules.py +0 -0
  684. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/scorer_trust.py +0 -0
  685. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/sealqa/__init__.py +0 -0
  686. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/sealqa/loop.py +0 -0
  687. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/sealqa/rollout.py +0 -0
  688. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/settings.py +0 -0
  689. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/skill_proposer.py +0 -0
  690. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/__init__.py +0 -0
  691. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/loop.py +0 -0
  692. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/rollout.py +0 -0
  693. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/spreadsheet/study.py +0 -0
  694. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/tool_audit.py +0 -0
  695. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/wiki.py +0 -0
  696. {briefloop-0.28.3 → briefloop-0.28.4}/src/wikiskill/wiki_maintainer.py +0 -0
  697. {briefloop-0.28.3 → briefloop-0.28.4}/start.ps1 +0 -0
  698. {briefloop-0.28.3 → briefloop-0.28.4}/tests/check_distribution.py +0 -0
  699. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_anchored_popover.mjs +0 -0
  700. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_app_updates.mjs +0 -0
  701. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_assessment_checks.mjs +0 -0
  702. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_brand_colors.mjs +0 -0
  703. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_attachments.mjs +0 -0
  704. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_drafts.mjs +0 -0
  705. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_layout.mjs +0 -0
  706. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_chat_polling.mjs +0 -0
  707. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_checkout_eol.mjs +0 -0
  708. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_clipboard.mjs +0 -0
  709. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_edit.mjs +0 -0
  710. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_evidence.mjs +0 -0
  711. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_citation_sources.mjs +0 -0
  712. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_clipboard_fallback.mjs +0 -0
  713. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_excel_export.mjs +0 -0
  714. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_export_menu.mjs +0 -0
  715. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_fact_check_availability.mjs +0 -0
  716. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_fact_check_grants.mjs +0 -0
  717. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_fast_mode.mjs +0 -0
  718. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_feedback_list.mjs +0 -0
  719. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_home_v2.mjs +0 -0
  720. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_job_presentation.mjs +0 -0
  721. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_learning_authorization.mjs +0 -0
  722. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_learning_retry.mjs +0 -0
  723. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_length_controls.mjs +0 -0
  724. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_licenses.mjs +0 -0
  725. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_live_status.mjs +0 -0
  726. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_markdown_import.mjs +0 -0
  727. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_market_convention.mjs +0 -0
  728. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_mcp_selection.mjs +0 -0
  729. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_model_catalog_refresh.mjs +0 -0
  730. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_model_label.mjs +0 -0
  731. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_model_selection.mjs +0 -0
  732. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_native_requests.mjs +0 -0
  733. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_native_runtime.mjs +0 -0
  734. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_office_tools.mjs +0 -0
  735. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_open_brief_status.mjs +0 -0
  736. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_pending_report.mjs +0 -0
  737. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_polling.mjs +0 -0
  738. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_previous_report.mjs +0 -0
  739. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_progress_race.mjs +0 -0
  740. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_provider_capabilities.mjs +0 -0
  741. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_quick_report.mjs +0 -0
  742. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_readers.mjs +0 -0
  743. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_reasoning_controls.mjs +0 -0
  744. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_release_controls.mjs +0 -0
  745. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_release_navigation.mjs +0 -0
  746. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_browsing.mjs +0 -0
  747. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_chat_drawer.mjs +0 -0
  748. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_export.mjs +0 -0
  749. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_language.mjs +0 -0
  750. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_load.mjs +0 -0
  751. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_outline.mjs +0 -0
  752. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_panels.mjs +0 -0
  753. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_report_version_info.mjs +0 -0
  754. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_review_capability.mjs +0 -0
  755. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_review_coverage.mjs +0 -0
  756. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_review_status.mjs +0 -0
  757. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_revision_questions.mjs +0 -0
  758. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_discovery.mjs +0 -0
  759. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_feedback.mjs +0 -0
  760. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_model_picker.mjs +0 -0
  761. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_runtime_permission_panel.mjs +0 -0
  762. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_settings_workspaces.mjs +0 -0
  763. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_skill_verification.mjs +0 -0
  764. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_source_library.mjs +0 -0
  765. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_source_search.mjs +0 -0
  766. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_source_upload.mjs +0 -0
  767. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_startup_recovery.mjs +0 -0
  768. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_task_progress.mjs +0 -0
  769. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_template_groups.mjs +0 -0
  770. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_template_output.mjs +0 -0
  771. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_update_notifications.mjs +0 -0
  772. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_upload_limits.mjs +0 -0
  773. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_version_bodies.mjs +0 -0
  774. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_version_diff.mjs +0 -0
  775. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_welcome_gate.mjs +0 -0
  776. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_workspace_proposal.mjs +0 -0
  777. {briefloop-0.28.3 → briefloop-0.28.4}/tests/frontend_writing_preferences.mjs +0 -0
  778. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_agent_backend.py +0 -0
  779. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_agent_commands.py +0 -0
  780. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_agent_session_budget.py +0 -0
  781. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_analyst_draft_versions.py +0 -0
  782. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_assessment_admission_recovery.py +0 -0
  783. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_assessment_followup.py +0 -0
  784. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_background_no_question.py +0 -0
  785. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_brand_assets.py +0 -0
  786. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_bridge_harness.py +0 -0
  787. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_builtin_templates.py +0 -0
  788. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_chat_dispatch.py +0 -0
  789. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_chat_execution.py +0 -0
  790. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_chat_model_selection.py +0 -0
  791. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_cli_doctor.py +0 -0
  792. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_codex_idle.py +0 -0
  793. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connection_test_history.py +0 -0
  794. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_authorization.py +0 -0
  795. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_empty_catalog.py +0 -0
  796. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_materials.py +0 -0
  797. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connector_tasks.py +0 -0
  798. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_connectors.py +0 -0
  799. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_core.py +0 -0
  800. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_cross_module_regressions.py +0 -0
  801. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_delivery_checks.py +0 -0
  802. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_delivery_consumers.py +0 -0
  803. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_demo.py +0 -0
  804. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_desktop_lifecycle.py +0 -0
  805. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_document_workflows.py +0 -0
  806. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_draft_completion.py +0 -0
  807. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_draft_contract.py +0 -0
  808. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_english_reports.py +0 -0
  809. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_entrypoint.py +0 -0
  810. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_evidence.py +0 -0
  811. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_evidence_parse_failures.py +0 -0
  812. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_execution_records.py +0 -0
  813. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_execution_timing.py +0 -0
  814. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_admission.py +0 -0
  815. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_labeling.py +0 -0
  816. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_layout_swap.py +0 -0
  817. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_export_xlsx.py +0 -0
  818. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_external_mcp.py +0 -0
  819. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_external_requests.py +0 -0
  820. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_contract.py +0 -0
  821. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_orchestration.py +0 -0
  822. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_phase.py +0 -0
  823. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_check_review.py +0 -0
  824. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fact_status_tool.py +0 -0
  825. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_evidence.py +0 -0
  826. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_mode.py +0 -0
  827. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_qualifier_checks.py +0 -0
  828. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_reports.py +0 -0
  829. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_fast_research.py +0 -0
  830. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_feedback_view.py +0 -0
  831. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figure_exports.py +0 -0
  832. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figure_flow.py +0 -0
  833. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figure_text.py +0 -0
  834. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_figures.py +0 -0
  835. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_finding_anchors.py +0 -0
  836. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_generation_schema_guidance.py +0 -0
  837. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_harness.py +0 -0
  838. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_host_bins.py +0 -0
  839. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_human_learning.py +0 -0
  840. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_industry_export.py +0 -0
  841. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_industry_flow.py +0 -0
  842. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_industry_research.py +0 -0
  843. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_interactive_runtime.py +0 -0
  844. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_jev_checks.py +0 -0
  845. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_learning_authorization.py +0 -0
  846. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_learning_integrity.py +0 -0
  847. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_length.py +0 -0
  848. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_length_policy.py +0 -0
  849. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_markdown_download.py +0 -0
  850. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_market_convention.py +0 -0
  851. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_media_sources.py +0 -0
  852. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_model_catalog_defaults.py +0 -0
  853. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_monthly_research.py +0 -0
  854. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_multimodal_harness.py +0 -0
  855. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_multimodal_http.py +0 -0
  856. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_analyst.py +0 -0
  857. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_evaluator.py +0 -0
  858. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_harness.py +0 -0
  859. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_learning.py +0 -0
  860. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_orchestrator.py +0 -0
  861. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_provider_storage.py +0 -0
  862. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_providers.py +0 -0
  863. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_research_closeout.py +0 -0
  864. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_review_contract.py +0 -0
  865. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_native_scout.py +0 -0
  866. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_notifications.py +0 -0
  867. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_npm_native_shim.py +0 -0
  868. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_numeric_occurrence_review.py +0 -0
  869. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_office_cli.py +0 -0
  870. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_office_source_structure.py +0 -0
  871. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_office_surfaces.py +0 -0
  872. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_ooxml_order.py +0 -0
  873. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_harness.py +0 -0
  874. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_idle.py +0 -0
  875. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_prompt_versions.py +0 -0
  876. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_provider.py +0 -0
  877. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_questions.py +0 -0
  878. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_reasoning.py +0 -0
  879. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_review_version.py +0 -0
  880. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_search_prompt.py +0 -0
  881. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_server_stdin.py +0 -0
  882. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_v2.py +0 -0
  883. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_opencode_version_probe.py +0 -0
  884. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_periodic_preflight.py +0 -0
  885. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_plain_isolation.py +0 -0
  886. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_posix_process_tree.py +0 -0
  887. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_pr593_roundtrip.py +0 -0
  888. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_previous_report.py +0 -0
  889. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_product_summary_consistency.py +0 -0
  890. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_progress.py +0 -0
  891. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_progress_pipeline.py +0 -0
  892. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_provider_catalog.py +0 -0
  893. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_public_research.py +0 -0
  894. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_quality_reading_context.py +0 -0
  895. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_contract.py +0 -0
  896. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_profiles.py +0 -0
  897. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_source_export.py +0 -0
  898. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reader_workflow.py +0 -0
  899. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_reconciliation.py +0 -0
  900. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_release.py +0 -0
  901. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_release_identity.py +0 -0
  902. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_browsing.py +0 -0
  903. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_concurrency.py +0 -0
  904. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_deletion.py +0 -0
  905. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_length_feedback.py +0 -0
  906. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_path_regressions.py +0 -0
  907. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_report_time.py +0 -0
  908. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_budget.py +0 -0
  909. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_gap_updates.py +0 -0
  910. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_handoff.py +0 -0
  911. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_plan.py +0 -0
  912. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_research_response_admission.py +0 -0
  913. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_resume_in_place.py +0 -0
  914. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review.py +0 -0
  915. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_finding_consistency.py +0 -0
  916. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_learning.py +0 -0
  917. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_modes.py +0 -0
  918. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_packet_paths.py +0 -0
  919. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_packet_utf8.py +0 -0
  920. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_public_metadata.py +0 -0
  921. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_schema_drift.py +0 -0
  922. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_snapshot.py +0 -0
  923. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_review_visual_input.py +0 -0
  924. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_revision_citations.py +0 -0
  925. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_revision_edits.py +0 -0
  926. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_revision_policy.py +0 -0
  927. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_rich_document.py +0 -0
  928. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_role_models.py +0 -0
  929. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_bridge.py +0 -0
  930. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_bridge_idle.py +0 -0
  931. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_concurrency.py +0 -0
  932. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_json_bom.py +0 -0
  933. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_liveness.py +0 -0
  934. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_names.py +0 -0
  935. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_permissions.py +0 -0
  936. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_propagation.py +0 -0
  937. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_retry.py +0 -0
  938. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_runtime_settlement.py +0 -0
  939. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_schedules.py +0 -0
  940. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_scout_experiment.py +0 -0
  941. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_search_credentials.py +0 -0
  942. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_search_policy.py +0 -0
  943. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_semantic_experiment.py +0 -0
  944. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_semantic_governance.py +0 -0
  945. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_server_boundary.py +0 -0
  946. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_settings_transactions.py +0 -0
  947. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_skill_verification.py +0 -0
  948. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_software_release_notes.py +0 -0
  949. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_software_version.py +0 -0
  950. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_ingestion.py +0 -0
  951. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_library_search.py +0 -0
  952. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_recovery_regressions.py +0 -0
  953. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_source_updates.py +0 -0
  954. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_sources_provenance.py +0 -0
  955. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_store_sqlite_benchmark.py +0 -0
  956. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_store_wal.py +0 -0
  957. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_table_citation_advisory.py +0 -0
  958. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_task_labels.py +0 -0
  959. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_task_notify.py +0 -0
  960. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_task_progress.py +0 -0
  961. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_tavily.py +0 -0
  962. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_template_conversion.py +0 -0
  963. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_template_conversion_http.py +0 -0
  964. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_template_saved_state.py +0 -0
  965. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_templates.py +0 -0
  966. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_user_input.py +0 -0
  967. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_user_source_refresh.py +0 -0
  968. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_version_consistency.py +0 -0
  969. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_version_execution.py +0 -0
  970. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_websearch.py +0 -0
  971. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_websearch_singleflight.py +0 -0
  972. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_wikiskill_engine_windows.py +0 -0
  973. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_antigravity_permissions.py +0 -0
  974. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_connector_acl.py +0 -0
  975. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_distribution.py +0 -0
  976. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_mcp_supervisor.py +0 -0
  977. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_platform.py +0 -0
  978. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_release_paths.py +0 -0
  979. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_review_paths.py +0 -0
  980. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_runtime_bundle.py +0 -0
  981. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_windows_xlsx_paths.py +0 -0
  982. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_word_import.py +0 -0
  983. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_word_source_locators.py +0 -0
  984. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_word_toc.py +0 -0
  985. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_worker_idle.py +0 -0
  986. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_workspace_action_errors.py +0 -0
  987. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_workspace_profile.py +0 -0
  988. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_workspaces.py +0 -0
  989. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_assembly.py +0 -0
  990. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_cli_guidance.py +0 -0
  991. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_context.py +0 -0
  992. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_writer_input.py +0 -0
  993. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_xlsx_officecli_integration.py +0 -0
  994. {briefloop-0.28.3 → briefloop-0.28.4}/tests/test_xlsx_preview.py +0 -0
  995. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/LICENSE +0 -0
  996. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/NOTICE.md +0 -0
  997. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/constants.ts +0 -0
  998. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/json.ts +0 -0
  999. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/models.ts +0 -0
  1000. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/rpc.ts +0 -0
  1001. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/session-params.ts +0 -0
  1002. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/acp/types.ts +0 -0
  1003. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/byok-reference/byok-opencode.ts +0 -0
  1004. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/byok-reference/provider-models.ts +0 -0
  1005. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/core/index.ts +0 -0
  1006. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/core/json-line-stream.ts +0 -0
  1007. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/codex-models.ts +0 -0
  1008. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/mmd-routes.ts +0 -0
  1009. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/models.ts +0 -0
  1010. {briefloop-0.28.3 → briefloop-0.28.4}/third_party/open-design/runtime-models/opencode-models.ts +0 -0
@@ -1,5 +1,14 @@
1
1
  # 变更记录
2
2
 
3
+ ## 0.28.4 — 2026-10-02
4
+
5
+ - 对话 Agent 可以通过正在运行的服务停止指定任务及子任务,保留已保存稿件,并返回实际停止状态。
6
+ - 新工作区的联网完整报告默认启用独立事实核查;已有选择、单报告覆盖、离线和快速模式保持各自规则。
7
+ - Native Scout 沿用已登记的轮次结果路径,在冻结上限内恢复可用并行容量,显示真实开始与结束时间。
8
+ - 后续研究轮次声明任务时同步保存计划,避免上一轮任务残留导致无法结束研究。
9
+ - 支持从已保存报告准备下一期:复用写作约定,重新确认本期日期和材料;不继承旧证据、评分或联网授权。
10
+ - 点击“基于此报告开始下一期”直接准备表单,不再弹出确认框;页面保留说明与取消跨期关联入口,取消时保留已填内容。
11
+
3
12
  ## 0.28.3 — 2026-10-02
4
13
 
5
14
  - 内置 BriefLoop Agent 升级至 Pi 1.0.0,适配压缩指令的新 transcript 接口,保留角色工具隔离及失败后的会话恢复。
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: briefloop
3
- Version: 0.28.3
3
+ Version: 0.28.4
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
@@ -0,0 +1 @@
1
+ 0.28.4
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "briefloop-desktop",
3
- "version": "0.28.3",
3
+ "version": "0.28.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "briefloop-desktop",
9
- "version": "0.28.3",
9
+ "version": "0.28.4",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "briefloop-desktop",
3
- "version": "0.28.3",
3
+ "version": "0.28.4",
4
4
  "private": true,
5
5
  "description": "BriefLoop local desktop workspace",
6
6
  "author": "Stahl-G",
@@ -0,0 +1,9 @@
1
+ # BriefLoop 0.28.4
2
+
3
+ 整合 #891、#892、#893 与 #870。修复对话停止任务、Native Scout 多轮路径、并行容量及计划同步;支持从已保存报告准备下一期,并按用户要求移除反复弹出的确认框。
4
+
5
+ 旧报告的正文、来源和评分保留;下一期只复用写作约定,需重新指定日期、材料和联网选择。修复复用时旧日期预览短暂残留的问题。完成实现与页面验收不代表连续多期返工率已改善,#865/#866/#858 的效果验收继续保持独立。
6
+
7
+ #855 与 #857 的实验工具和评价候选不纳入本次发行;已有开发集结果不当作人工答案、留出集结果或稳定收益。
8
+
9
+ 从干净冻结提交构建一次共享 wheel,Mac、Windows、PyPI 复用同一字节。平台随包后端、合成 Word/Excel 导出、更新及实际安装结果记录在发行附件;缺少的 GUI 验证明确列出,不由 CI 代替。延续未签名桌面发行,不声称公证。发布后替换本机正式入口,不新增日常 App 安装副本。
@@ -18,7 +18,7 @@
18
18
 
19
19
  ## 生成后的独立事实核查
20
20
 
21
- 在新建报告中勾选「生成后独立核查公开主张」。默认关闭;未允许联网时不能启用。任务保存实际开关,之后改工作区设置不会追溯改变旧任务。
21
+ 在新建报告中勾选「生成后独立核查公开主张」。新工作区的联网完整报告默认开启;已有工作区保留已保存的选择,单份报告可关闭。离线及快速模式默认不启用,未允许联网时不能显式开启。任务保存实际开关,之后改工作区设置不会追溯改变旧任务。
22
22
 
23
23
  执行顺序为:保存可编辑草稿 → 独立核查公开主张 → 独立审阅 → 按设置自动修订一次并复核。核查需要正文中已经登记并绑定的主张;没有可核查主张、研究阶段仍未收束或无法接纳预算时,会记录原因,不能显示为已完成核查。
24
24
 
@@ -53,6 +53,7 @@ import {createFeedbackList} from './feedback-list.js';
53
53
  import {readersUI} from './readers.js';
54
54
  import {verificationBadge} from './skill-verification.js';
55
55
  import {previousReportUI} from './previous-report.js';
56
+ import {nextReportUI} from './next-report.js';
56
57
  import {learningRetry} from './learning-retry.js';
57
58
  import {templatesUI,GENRE_META,ICONS,splitTemplateName} from './templates.js';
58
59
  import {createTemplateOutput} from './template-output.js';
@@ -187,6 +188,8 @@ function acceptCommand(){
187
188
  // Only editorial preferences lack a form control. Runtime/template snapshots are
188
189
  // deliberately rebuilt by the server and must never be copied from a prior run.
189
190
  let writingPreferencesOverride;
191
+ const nextReport=nextReportUI({$,api,savedVersion,getTemplate:id=>{const t=state?.templates?.find(t=>t.id===id);return t?{...t,sections:parse(t.spec).sections||[]}:null},getCurrent:()=>current,applyRequirements,refreshTime:()=>previewReportTime(),notice,clearSources:()=>{selected.clear();referenceSelected.clear();document.querySelectorAll('[data-check],[data-reference-source]').forEach(input=>input.checked=false);renderReferenceSources()}});
192
+ nextReport.bind();
190
193
  function preserveWritingPreferences(req,previous,override){
191
194
  if(!Object.prototype.hasOwnProperty.call(req,'writing_preferences'))req.writing_preferences=[...(Array.isArray(override)?override:Array.isArray(previous?.writing_preferences)?previous.writing_preferences:[])];
192
195
  return req;
@@ -562,10 +565,12 @@ let reportTimePreviewTicket=0;
562
565
  async function previewReportTime(){
563
566
  const ticket=++reportTimePreviewTicket;
564
567
  const form=$('requirements'),box=$('report-system-clock');
568
+ if(form.elements.previous_report_version_id?.value&&!['period','period_start','period_end'].some(key=>form.elements[key].value.trim())){box.textContent='请填写并确认本期时间范围;不会沿用上期日期。';return}
569
+ box.textContent='正在核对本期时间范围…';
565
570
  try{const requirements={title:form.elements.title.value||'预览',objective:form.elements.objective.value||'预览'};for(const key of ['period','period_start','period_end','report_timezone'])requirements[key]=form.elements[key].value;const t=await api('report-time-preview',{requirements});if(ticket!==reportTimePreviewTicket)return;reportFormDefaults.setWindow(t,requirements);box.textContent=`系统日期:${t.today} · ${t.timezone};报告范围:${t.start} 至 ${t.end_exclusive}(不含结束时刻)。提交时冻结。`;}catch(e){if(ticket===reportTimePreviewTicket)box.textContent=e.message}
566
571
  }
567
572
  for(const key of ['period','period_start','period_end','report_timezone'])$('requirements').elements[key].addEventListener('change',previewReportTime);
568
- $('requirements').onsubmit=e=>{e.preventDefault();action(async()=>{const f=new FormData(e.target),req=Object.fromEntries(f.entries());if(!['fast','fast_web'].includes(req.completion_mode)&&req.writing_mode==='internal_report'&&state.settings.company_context_enabled==null){$('company-choice-dialog').showModal();return}req.allow_web=f.has('allow_web');req.fact_check=f.has('fact_check');req.target_words=Number(req.target_words);req.max_words=Number(req.max_words);Object.assign(req,lengthControls.read(),quickReport.read());req.research_budget=readResearchBudget();reportFormDefaults.prepare(req);reportMarket.prepare(req);req.search_policy=readSearchPolicy();Object.assign(req,readWorkflowChoice());req.reference_source_ids=[...referenceSelected];req.template_id=req.template_id||null;req.sections=readTemplateSections();req.key_questions=(req.key_questions_text||'').split('\n').map(x=>x.trim()).filter(Boolean);delete req.key_questions_text;req.manual_sections=(req.manual_sections_text||'').split('\n').map(x=>x.trim()).filter(Boolean);for(const title of req.manual_sections){const found=req.sections.find(s=>s.title===title);if(found){found.mode='manual';found.placeholder='待填充'}}delete req.manual_sections_text;preserveWritingPreferences(req,state.requirements,writingPreferencesOverride);if(!req.reader_id)delete req.reader_id;req.raw_input=req.objective;delete req.runtime_model;delete req.runtime_effort;await saveModel();if(current)await savedVersion();const connector_selection=reportMcpSelection.selection();const job=await api('generate',{...(connector_selection?{connector_selection}:{}),requirements:req,session_id:chat.id||undefined,source_ids:[...selected].filter(id=>!req.reference_source_ids.includes(id))});showPendingReport(parse(job.payload).run_id);page('report');notice('任务已排队,后台会生成简报')})};
573
+ $('requirements').onsubmit=e=>{e.preventDefault();action(async()=>{const f=new FormData(e.target),req=Object.fromEntries(f.entries());if(!['fast','fast_web'].includes(req.completion_mode)&&req.writing_mode==='internal_report'&&state.settings.company_context_enabled==null){$('company-choice-dialog').showModal();return}req.allow_web=f.has('allow_web');req.fact_check=f.has('fact_check');req.target_words=Number(req.target_words);req.max_words=Number(req.max_words);Object.assign(req,lengthControls.read(),quickReport.read());req.research_budget=readResearchBudget();reportFormDefaults.prepare(req);reportMarket.prepare(req);req.search_policy=readSearchPolicy();Object.assign(req,readWorkflowChoice());req.reference_source_ids=[...referenceSelected];req.template_id=req.template_id||null;req.sections=readTemplateSections();req.key_questions=(req.key_questions_text||'').split('\n').map(x=>x.trim()).filter(Boolean);delete req.key_questions_text;req.manual_sections=(req.manual_sections_text||'').split('\n').map(x=>x.trim()).filter(Boolean);for(const title of req.manual_sections){const found=req.sections.find(s=>s.title===title);if(found){found.mode='manual';found.placeholder='待填充'}}delete req.manual_sections_text;preserveWritingPreferences(req,state.requirements,writingPreferencesOverride);if(!req.reader_id)delete req.reader_id;req.raw_input=req.objective;delete req.runtime_model;delete req.runtime_effort;await saveModel();if(current)await savedVersion();const connector_selection=reportMcpSelection.selection();const job=await api('generate',{...(connector_selection?{connector_selection}:{}),requirements:req,session_id:chat.id||undefined,source_ids:[...selected].filter(id=>!req.reference_source_ids.includes(id))});nextReport.clear();showPendingReport(parse(job.payload).run_id);page('report');notice('任务已排队,后台会生成简报')})};
569
574
  $('upload').onchange=e=>action(async()=>{preflightSources(e.target.files,getUploadLimits());for(const f of e.target.files){const s=await uploadSource(f);if(s.status==='ready')selected.add(s.id)}e.target.value=''},'来源已保存');
570
575
  $('add-url').onclick=()=>action(async()=>{const s=await api('source-url',{url:$('source-url').value});if(s.status==='ready')selected.add(s.id);$('source-url').value='';notice(s.status==='ready'?'网页已读取':'来源已保存,但读取失败:'+s.error,s.status!=='ready')});
571
576
  $('rescore').onclick=()=>action(async()=>{await savedVersion();await api('assess',{version_id:current.id,session_id:chat.id||undefined})},'已提交评分');
@@ -1820,7 +1825,8 @@ function readTemplateSections(){
1820
1825
  // Never submit a report whose chosen template is not ready; falling back to the
1821
1826
  // general layout would silently change the deliverable.
1822
1827
  if(template&&template.status&&template.status!=='ready')throw Error('所选模板尚未就绪:'+template.name+';请改用通用模板,或等模板准备完成后再提交');
1823
- const saved=templateId&&state.requirements?.template_id===templateId?state.requirements.sections||[]:[];
1828
+ const reused=nextReport.requirementsForTemplate(templateId);
1829
+ const saved=reused?.sections||(templateId&&state.requirements?.template_id===templateId?state.requirements.sections||[]:[]);
1824
1830
  return [...$('template-sections').querySelectorAll('[data-section-id]')].map(row=>{
1825
1831
  const base=original.find(s=>s.section_id===row.dataset.sectionId)||{},requirement=saved.find(s=>s.section_id===row.dataset.sectionId);
1826
1832
  return {section_id:row.dataset.sectionId,title:row.querySelector('[data-title]').value,purpose:row.querySelector('[data-purpose]')?.value??requirement?.purpose??base.purpose??'',mode:row.querySelector('select').value,placeholder:'待填充'};
@@ -1832,8 +1838,9 @@ function templateSections(){
1832
1838
  }
1833
1839
  function applyTemplateSectionEdits(){
1834
1840
  const templateId=$('template-select').value;
1835
- if(!templateId||state?.requirements?.template_id!==templateId)return;
1836
- for(const section of state.requirements.sections||[]){const row=[...$('template-sections').querySelectorAll('[data-section-id]')].find(r=>r.dataset.sectionId===section.section_id);if(row){row.querySelector('[data-title]').value=section.title;row.querySelector('select').value=section.mode||'required'}}
1841
+ const reused=nextReport.requirementsForTemplate(templateId);
1842
+ if(!templateId||(!reused&&state?.requirements?.template_id!==templateId))return;
1843
+ for(const section of (reused||state.requirements).sections||[]){const row=[...$('template-sections').querySelectorAll('[data-section-id]')].find(r=>r.dataset.sectionId===section.section_id);if(row){row.querySelector('[data-title]').value=section.title;row.querySelector('select').value=section.mode||'required'}}
1837
1844
  }
1838
1845
  function unreadyTemplate(id){const template=(state?.templates||[]).find(t=>t.id===id);return template&&template.status&&template.status!=='ready'?template:null}
1839
1846
  function renderTemplates(first=false){
@@ -0,0 +1,53 @@
1
+ // Reuse the saved contract, not old facts, reviews or runtime authorizations.
2
+ export function nextReportUI({$,api,savedVersion,getCurrent,applyRequirements,clearSources,notice,getTemplate,refreshTime=()=>{}}){
3
+ let pending=false,contract=null;
4
+ const form=()=>$('requirements');
5
+ function set(name,value){const field=form()?.elements?.[name];if(!field)return;
6
+ if(field.type==='checkbox')field.checked=!!value;else field.value=value??'';
7
+ field.dispatchEvent?.(new Event('change',{bubbles:true}));
8
+ }
9
+ function clear(){contract=null;set('previous_report_version_id','');set('previous_report_hash','');
10
+ if($('next-report-notice'))$('next-report-notice').hidden=true;
11
+ }
12
+ function requirementsForTemplate(id){return contract&&form()?.elements?.previous_report_version_id?.value&&contract.template_id===id?contract:null}
13
+ async function start(){
14
+ if(pending||!getCurrent())return;
15
+ pending=true;
16
+ try{
17
+ const version=await savedVersion();
18
+ const data=await api('next-report?version_id='+encodeURIComponent(version));
19
+ if(getCurrent()?.id!==version)throw Error('当前报告已切换,请重新选择要复用的版本');
20
+ const candidate=data.requirements;
21
+ if(candidate.template_id){
22
+ const template=getTemplate(candidate.template_id);
23
+ if(!template||template.status!=='ready')throw Error('往期模板已不可用或尚未就绪,请先恢复模板,或手动建立本期需求');
24
+ const sections=template.sections||[];
25
+ if((candidate.sections||[]).some(section=>!sections.some(item=>item.section_id===section.section_id)))
26
+ throw Error('往期模板章节已变化,请核对模板后再复用,避免遗漏人工保留的章节');
27
+ }
28
+ contract=candidate;
29
+ set('completion_mode','standard');
30
+ set('template_id',contract.template_id||'');
31
+ applyRequirements(JSON.stringify(contract));
32
+ for(const key of ['organization','industry','report_date','reader_id','previous_report_version_id','previous_report_hash'])set(key,contract[key]);
33
+ set('allow_web',false);set('fact_check',false);
34
+ clearSources();
35
+ const sections=contract.sections||[];
36
+ for(const row of $('template-sections')?.querySelectorAll('[data-section-id]')||[]){
37
+ const section=sections.find(item=>item.section_id===row.dataset.sectionId);
38
+ if(section){row.querySelector('[data-title]').value=section.title;row.querySelector('select').value=section.mode||'required'}
39
+ }
40
+ const box=$('next-report-notice');
41
+ if(box){box.hidden=false;$('next-report-summary').textContent=`基于《${data.previous.title}》的已保存版本开始下一期。${data.notice}`+
42
+ (data.reader?` 当前读者:${data.reader.name};用途:${data.reader.decisions};偏好:${data.reader.preferences}。请确认是否仍适用。`:'');}
43
+ refreshTime();
44
+ form()?.elements?.title?.focus?.();
45
+ notice('已复用约定;请填写本期标题、时间范围并选择材料');
46
+ }finally{pending=false}
47
+ }
48
+ function bind(){const button=$('next-report');if(button)button.onclick=()=>start().catch(error=>notice(error.message,true));
49
+ if($('next-report-cancel'))$('next-report-cancel').onclick=clear;
50
+ form()?.addEventListener?.('reset',clear);
51
+ }
52
+ return {bind,start,clear,requirementsForTemplate};
53
+ }
@@ -17,6 +17,7 @@ function stepState(value,active){
17
17
  return ['running','active'].includes(value)?(active?'active':'pending'):'pending';
18
18
  }
19
19
  function stepTime(step,now){
20
+ if(step.not_started)return '尚未开始';
20
21
  const duration=step.duration_ms??(step.duration_seconds==null?null:Number(step.duration_seconds)*1000);
21
22
  if(duration!==null&&Number.isFinite(Number(duration))&&Number(duration)>=0)return elapsedText('1970-01-01T00:00:00Z',Number(duration));
22
23
  if(step.started&&(step.ended||step.status==='active'))return elapsedText(step.started,step.ended?Date.parse(step.ended):now);
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "briefloop"
7
- version = "0.28.3"
7
+ version = "0.28.4"
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.28.4"
@@ -31,7 +31,7 @@ WORKSPACE_ACTIONS = (
31
31
  'profile_read','profile_update',
32
32
  'freeze_research_plan','research_status','begin_research_round','finish_research_round','set_scout_tasks',
33
33
  'reconciliation_candidates','reconciliation_save','reconciliation_read',
34
- 'export_word','inspect','generate','assess','comment','learn',
34
+ 'export_word','inspect','stop_job','generate','assess','comment','learn',
35
35
  )
36
36
 
37
37
 
@@ -198,6 +198,13 @@ def workspace_action(store, request):
198
198
  'runtime':store.runtime_config(),
199
199
  'note':'简要工作区索引;需要原文时使用 read-source --id SOURCE_ID。任务状态和 error 是已记录事实,不代表根因诊断;没有对应日志证据不得声称服务重启、网络故障或权限拒绝。来源已保存不代表已核验其真实性或时效性,研究进度不代表报告已完成。',
200
200
  }
201
+ if action=='stop_job':
202
+ job_id=request.get('job_id')
203
+ if not isinstance(job_id,str) or not job_id.strip():raise ValueError('请提供要停止的明确 job_id')
204
+ # Use the live worker, including transport cancellation and child jobs.
205
+ # A CLI Store is a separate process and must never just flip DB status.
206
+ from .external_client import Client
207
+ return Client(store.root).stop_job(job_id)
201
208
  if action=='generate':
202
209
  requirements=Requirements.model_validate(request['requirements'])
203
210
  source_ids=request.get('source_ids',[])
@@ -338,7 +345,9 @@ def chat_instructions(store, runtime, *, internal=False, allow_web=False, backen
338
345
  - {{"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),省略则保留;只修改引用也保存新版本,定位描述不表示已独立核验。
339
346
  - {{"action":"import_word_revision","base_version":"用户指定基础版本","source_id":"DOCX来源ID"}}:导入用户修改的 Word。返回 needs_alignment 时先核对原件和基础版本,向用户说明对齐问题;仅按用户明确选择提供 accept_unaligned=true。用户希望更新模板时另用 template_import 并提供 parent_id。
340
347
  - {{"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,其余沿用工作区设置)。
348
+ 联网完整报告的 fact_check 沿用工作区默认(新工作区开启);用户选择关闭时显式传 false,选择开启时传 true。离线或快速模式不自动开启,也不为核查偷偷开启联网。
341
349
  提交 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;不改变共享预算。提交回执中的实际冻结值与用户要求不一致时明确说明,不宣称已应用。
350
+ - {{"action":"stop_job","job_id":"真实任务ID"}}:用户要求停止任务时,先通过 inspect 确认具体任务,再停止该任务及其子任务,已保存稿件保留。用户要求“停掉旧任务再重新生成”时先取得停止回执,再提交新任务;停止失败时如实说明,不启动重复任务。目标不明确时先问,不猜 ID,不停止整个服务。以回执的实际 status 为准,已经完成的任务不会变成 cancelled。
342
351
  - {{"action":"assess","version_id":"真实简报版本ID"}}:为已有稿件安排评分。
343
352
  - {{"action":"comment","version_id":"真实简报版本ID","text":"用户反馈"}}:记录用户明确提出的反馈。页面自动学习开启时,保存反馈可能稍后自动触发学习,要如实告知。
344
353
  - {{"action":"learn"}}:仅当用户明确要求启动技能学习时调用,会消耗额外模型额度。调用前先告诉用户上限(每轮最多 3 个案例、每案例基线与候选各试写一次,另有整理、提案与比较回合;轮数按学习设置),得到明确同意后再调用;保存反馈本身不需要调用它。
@@ -56,6 +56,12 @@ class Client:
56
56
  raise ValueError(self.info.get('message', '工作区服务尚未就绪'))
57
57
 
58
58
  def request(self, body):
59
+ return self._post('/api/external/action', body)
60
+
61
+ def stop_job(self, job_id):
62
+ return self._post('/api/stop', {'job_id': job_id})
63
+
64
+ def _post(self, path, body):
59
65
  if not isinstance(body, dict):
60
66
  raise ValueError('请求必须是 JSON 对象')
61
67
  wid = body.get('workspace_id', self.info['workspace_id'])
@@ -65,7 +71,7 @@ class Client:
65
71
  endpoint = urlsplit(self.info['url'])
66
72
  connection = http.client.HTTPConnection(endpoint.hostname, endpoint.port, timeout=15)
67
73
  try:
68
- connection.request('POST', '/api/external/action', body=json.dumps({**body, 'workspace_id': wid}, ensure_ascii=False).encode(),
74
+ connection.request('POST', path, body=json.dumps({**body, 'workspace_id': wid}, ensure_ascii=False).encode(),
69
75
  headers={'Content-Type': 'application/json', 'X-BriefLoop-Token': token})
70
76
  response = connection.getresponse()
71
77
  data = response.read(32 * 1024 * 1024 + 1)
@@ -113,6 +113,8 @@ class Requirements(Model):
113
113
  # A saved reader profile (#858); create_run freezes it into reader_profile.
114
114
  reader_id: str | None = Field(default=None, max_length=80)
115
115
  reader_profile: dict | None = None
116
+ previous_report_version_id: str | None = Field(default=None, max_length=100)
117
+ previous_report_hash: str | None = Field(default=None, max_length=64)
116
118
  # Report body language. The interface, internal records and review notes
117
119
  # stay Chinese; only the report text and its length presets follow this.
118
120
  language: Literal["zh", "en"] = "zh"
@@ -362,7 +364,7 @@ class Settings(RoleModel):
362
364
  default_template_id: str | None = None
363
365
  company_context_enabled: bool | None = None
364
366
  # Workspace-wide default for the per-task fact_check switch; tasks may override.
365
- fact_checker: bool = False
367
+ fact_checker: bool = True
366
368
  # Workspace-wide optional local file quality checks via officecli; the
367
369
  # switch has no effect while the binary is not installed.
368
370
  officecli_enabled: bool = False
@@ -9,7 +9,7 @@ import hashlib
9
9
  import json
10
10
  from pathlib import Path
11
11
 
12
- from .store import dump
12
+ from .store import dump, now
13
13
  from .native_roles import ToolError, _atomic, _json_result
14
14
  from .revision_metadata import binding_schema, response_schema, validate_arrays, validate_bindings
15
15
 
@@ -19,7 +19,7 @@ READ_ACTIONS = {'inspect', 'capabilities', 'templates', 'workflows', 'profile_re
19
19
  RUN_ACTIONS = {'set_reader_contract', 'freeze_research_plan', 'begin_research_round',
20
20
  'finish_research_round', 'set_scout_tasks', 'reconciliation_save', 'evidence_span',
21
21
  'claim_create', 'claim_bind', 'company_update', 'company_review_complete'}
22
- CHAT_ACTIONS = READ_ACTIONS | {'generate', 'assess', 'comment', 'export_word', 'profile_update', 'company_config', 'company_resolve', 'revise_document', 'learn', 'template_import', 'template_rebuild', 'import_word_revision'}
22
+ CHAT_ACTIONS = READ_ACTIONS | {'stop_job', 'generate', 'assess', 'comment', 'export_word', 'profile_update', 'company_config', 'company_resolve', 'revise_document', 'learn', 'template_import', 'template_rebuild', 'import_word_revision'}
23
23
 
24
24
 
25
25
  def _save(path, value):
@@ -102,7 +102,8 @@ def action(store, config, args):
102
102
  frozen_req = json.loads(view.one('runs', result['run_id'])['requirements'])
103
103
  result['accepted_requirements'] = {**result.get('accepted_requirements', {}),
104
104
  'length_mode': frozen_req.get('length_mode', 'soft'),
105
- 'length_requirement': frozen_req.get('length_requirement')}
105
+ 'length_requirement': frozen_req.get('length_requirement'),
106
+ 'fact_check': frozen_req.get('fact_check')}
106
107
  else:
107
108
  from .models import Settings, Requirements, runtime_fields
108
109
  settings = Settings.model_validate({**view.settings(), **request['runtime']})
@@ -118,13 +119,28 @@ def action(store, config, args):
118
119
  result = {'job_id': job['id'], 'run_id': run['id'], 'status': 'queued',
119
120
  'accepted_requirements': {key: value for key, value in json.loads(run['requirements']).items()
120
121
  if key in ('title', 'target_minutes', 'hard_timeout_minutes', 'research_budget', 'key_questions',
121
- 'writing_preferences', 'target_words', 'max_words', 'length_mode', 'length_requirement', 'period', 'search_policy')}}
122
+ 'writing_preferences', 'target_words', 'max_words', 'length_mode', 'length_requirement', 'period', 'search_policy', 'fact_check')}}
122
123
  view.set_meta(key, {'fingerprint': fingerprint, 'result': result})
123
124
  store.wake_jobs()
124
125
  from .task_notify import notify
125
126
  notify(store, store.one('jobs', result['job_id']), 'queued')
126
127
  return _json_result(result)
127
128
  result = workspace_action(store, request)
129
+ if name == 'set_scout_tasks' and 'scout_tasks' in request and config.get('packet_root'):
130
+ # A successful declaration is the binding plan for this round. Keep the
131
+ # saved Native plan current; otherwise closeout compares round 2 with
132
+ # round 1 forever. Declaration still rejects dropped/rewritten work.
133
+ from .research_plan import frozen
134
+ research = frozen(store, run_id) or {}
135
+ round_id = request.get('round_id') or research.get('current_round_id') or 'legacy'
136
+ path = _folder(config) / 'plan.json'
137
+ if path.is_file():
138
+ plan = json.loads(path.read_text(encoding='utf-8-sig'))
139
+ plan['scout_tasks'] = [
140
+ {key: task[key] for key in ('slot_id', 'assignment', 'result_file')}
141
+ for task in result['scout_execution'] if task['round_id'] == round_id]
142
+ _save(path, plan)
143
+ _save(Path(config['packet_root']) / 'plan.json', plan)
128
144
  if name == 'reconciliation_save' and config.get('packet_root'):
129
145
  _save(_folder(config) / 'reconciliation.json', result)
130
146
  if name == 'finish_research_round' and config.get('packet_root'):
@@ -174,8 +190,10 @@ def _child(store, config, directory, callback):
174
190
  with harness._lock:
175
191
  path = _folder(config) / 'agents.json'
176
192
  records = json.loads(path.read_text(encoding='utf-8')) if path.exists() else {'agents': []}
193
+ previous = next((a for a in records['agents'] if a['agent_id'] == identity), {})
177
194
  records['agents'] = [a for a in records['agents'] if a['agent_id'] != identity]
178
- records['agents'].append({'agent_id': identity, 'role': role, 'status': status})
195
+ timing = {'started': now()} if status == 'running' else {'started': previous.get('started'), 'ended': now()}
196
+ records['agents'].append({'agent_id': identity, 'role': role, 'status': status, **timing})
179
197
  _save(path, records)
180
198
  with harness.child_runtime(config['session_id'], runtime):
181
199
  _alive(store, config)
@@ -225,13 +243,29 @@ def run_scouts(store, config, args):
225
243
  committed = {task['slot_id']: task for task in view(store, config['run_id'])['scout_execution'] if task['round_id'] == identity}
226
244
  for task in tasks:
227
245
  expected = committed.get(task['slot_id'])
228
- result_file = str((folder / ('round-' + round_id) / task['slot_id'] / 'result.json').resolve())
229
- if not expected or expected['assignment'] != str(task.get('assignment') or '').strip() or expected['result_file'] != result_file:
230
- raise ToolError('实际 Scout 任务必须匹配已保存 scout_tasks 的分工与结果路径;先补全本轮计划')
246
+ scoped = {folder / ('round-' + round_id) / task['slot_id'] / 'result.json',
247
+ store.root / 'research' / config['run_id'] / 'rounds' / round_id / task['slot_id'] / 'result.json'}
248
+ if round_id == '1':
249
+ scoped.add(folder / task['slot_id'] / 'result.json')
250
+ if not expected or expected['assignment'] != str(task.get('assignment') or '').strip():
251
+ raise ToolError('实际 Scout 任务必须匹配已保存 scout_tasks 的分工;先读取 research_status')
252
+ result_file = Path(expected['result_file'])
253
+ if result_file not in scoped or result_file.resolve() != result_file:
254
+ raise ToolError('已登记 Scout 结果路径不属于本任务、本轮与槽位')
255
+ if task.get('result_file') and task['result_file'] != str(result_file):
256
+ raise ToolError('实际 Scout 结果路径须沿用已登记路径:' + str(result_file))
257
+ # A concurrent job may have occupied slots while the initial packet was
258
+ # prepared. Reclaim now-free capacity within the original frozen ceiling.
259
+ budget_for_job = getattr(store, '_scout_budget_for_job', None)
260
+ budget = budget_for_job(job) if budget_for_job else None
261
+ if budget:
262
+ ceiling = min(int((frozen_plan or {}).get('frozen_runtime', {}).get('max_parallel') or limit),
263
+ int((frozen_plan or {}).get('structure', {}).get('parallel') or limit), len(tasks))
264
+ limit = max(1, min(ceiling, budget(ceiling)))
231
265
  update(store, config['run_id'], [{'slot_id': task['slot_id'], 'status': 'dispatched'} for task in tasks])
232
266
  results = []
233
267
  def execute(task):
234
- path = folder / ('round-' + round_id) / task['slot_id']
268
+ path = Path(committed[task['slot_id']]['result_file']).parent
235
269
  path.mkdir(parents=True, exist_ok=True)
236
270
  assignment = path / 'assignment.json'
237
271
  if assignment.exists() and json.loads(assignment.read_text(encoding='utf-8')) != task:
@@ -251,14 +285,15 @@ def run_scouts(store, config, args):
251
285
  with ThreadPoolExecutor(max_workers=min(limit, len(tasks))) as pool:
252
286
  results = list(pool.map(execute, tasks))
253
287
  _alive(store, config)
254
- paths = sorted(folder.glob('round-*/scout-*/result.json'))
288
+ paths = sorted({Path(task['result_file']) for task in view(store, config['run_id'])['scout_execution']
289
+ if Path(task['result_file']).is_file()})
255
290
  # All rounds remain available; replayed slots are not duplicated.
256
291
  joined = join_scouts(store, paths, run_id=config['run_id']) if paths else {'sources': [], 'gaps': []}
257
292
  from .research_handoff import current_research
258
293
  joined = current_research(store, config['run_id'], joined, register=True)
259
294
  _save(folder / 'research.json', joined)
260
295
  _save(Path(config['packet_root']) / 'research.json', joined)
261
- return _json_result({'tasks': results, 'research_file': 'research.json', 'sources': len(joined['sources']), 'gaps': joined['gaps'], 'gap_records': joined.get('gap_records', []), 'gap_history': joined.get('gap_history', []), 'execution_gaps': joined.get('execution_gaps', [])})
296
+ return _json_result({'parallel_limit': limit, 'tasks': results, 'research_file': 'research.json', 'sources': len(joined['sources']), 'gaps': joined['gaps'], 'gap_records': joined.get('gap_records', []), 'gap_history': joined.get('gap_history', []), 'execution_gaps': joined.get('execution_gaps', [])})
262
297
 
263
298
 
264
299
  def _refresh_research(store, config):
@@ -0,0 +1,49 @@
1
+ """Reuse an explicitly selected report's contract, never its current facts (#865)."""
2
+ import json
3
+
4
+
5
+ CONTRACT_FIELDS = (
6
+ 'objective', 'audience', 'organization', 'industry', 'language', 'extent',
7
+ 'writing_mode', 'report_profile', 'workflow_id', 'workflow_variant',
8
+ 'template_id', 'sections', 'manual_sections', 'key_questions',
9
+ 'writing_preferences', 'target_words', 'max_words', 'length_mode',
10
+ 'length_requirement', 'report_timezone',
11
+ )
12
+
13
+
14
+ def prepare(store, version_id):
15
+ """Read-only preview; opening it creates no source, run, job or authorization."""
16
+ brief = store.one('briefs', version_id)
17
+ run = store.one('runs', brief['run_id'])
18
+ previous = json.loads(run['requirements'])
19
+ requirements = {key: previous[key] for key in CONTRACT_FIELDS if key in previous}
20
+ reader = None
21
+ if previous.get('reader_id'):
22
+ from .readers import profile
23
+ try:
24
+ reader = profile(store, previous['reader_id'])
25
+ requirements['reader_id'] = reader['id']
26
+ except ValueError:
27
+ pass # Archived readers are not silently reactivated.
28
+ requirements.update(title='', period='', period_start='', period_end='', report_date='',
29
+ allow_web=False, fact_check=False, reference_source_ids=[],
30
+ previous_report_version_id=brief['id'], previous_report_hash=brief['hash'])
31
+ return {'requirements': requirements,
32
+ 'previous': {'version_id': brief['id'], 'run_id': run['id'], 'hash': brief['hash'],
33
+ 'title': json.loads(brief['detail']).get('title', previous.get('title', ''))},
34
+ 'source_ids': [], 'reader': reader,
35
+ 'notice': '沿用已保存的要求与写作偏好;请填写本期标题和时间范围,核对要求中的历史条件,并重新选择本期材料。旧来源、评分、联网及费用授权不会自动沿用。'}
36
+
37
+
38
+ def validate_origin(store, requirements):
39
+ version = requirements.previous_report_version_id
40
+ digest = requirements.previous_report_hash
41
+ if not version and not digest:
42
+ return
43
+ if not version or not digest:
44
+ raise ValueError('下一期需要明确的往期版本与内容哈希')
45
+ brief = store.one('briefs', version)
46
+ if brief['hash'] != digest:
47
+ raise ValueError('往期报告内容已变化,请重新选择复用版本')
48
+ if not (requirements.period.strip() or (requirements.period_start and requirements.period_end)):
49
+ raise ValueError('开始下一期前请确认本期时间范围')
@@ -253,6 +253,8 @@ class ProgressTracker:
253
253
  if row.get('status') not in ENDED:
254
254
  row['status']=agent.get('status','running')
255
255
  row['task']=str(agent.get('responsibility',''))[:240]
256
+ for field in ('started','ended'):
257
+ if agent.get(field):row[field]=agent[field]
256
258
  except (ValueError,OSError):pass
257
259
  workers=list(self.workers.values())
258
260
  active=[w for w in workers if w.get('status') not in ENDED | {'unknown'}]
@@ -513,6 +513,7 @@ class Worker:
513
513
  self.store=store;self._runtime=runtime;self.stopping=threading.Event();self.current=None
514
514
  self._queue_wakes=[threading.Event() for _ in range(4)]
515
515
  self.store._job_wakeup=self.wake
516
+ self.store._scout_budget_for_job=self._scout_budget
516
517
  self.schedule_thread=threading.Thread(target=self.schedule_loop,name='briefloop-schedules',daemon=True)
517
518
  self.thread=threading.Thread(target=self.loop,name='briefloop-worker',daemon=True)
518
519
  self.task_thread=None
@@ -584,6 +585,7 @@ class Worker:
584
585
  if self.file_thread.is_alive():self.file_thread.join(timeout=12)
585
586
  if self.extraction_thread.is_alive():self.extraction_thread.join(timeout=12)
586
587
  if self.store._job_wakeup==self.wake:self.store._job_wakeup=None
588
+ if getattr(self.store,'_scout_budget_for_job',None)==self._scout_budget:self.store._scout_budget_for_job=None
587
589
 
588
590
  def schedule_loop(self):
589
591
  from .schedules import tick
@@ -77,7 +77,7 @@ def validate(store, body):
77
77
  # Freeze the optional paid check when the schedule is saved. A later change
78
78
  # of workspace defaults must not silently enable it on recurring reports.
79
79
  if req['fact_check'] is None:
80
- req['fact_check']=store.settings().get('fact_checker') is True
80
+ req['fact_check']=req['allow_web'] and req['completion_mode'] not in ('fast','fast_web') and store.settings().get('fact_checker') is True
81
81
  if req['fact_check'] and not req['allow_web']:
82
82
  raise ValueError('离线任务不能开启联网事实核查;请允许联网检索,或关闭该开关')
83
83
  if req['fact_check']:
@@ -243,6 +243,9 @@ def _make_server(workspace, port, *, paused, backend, lock):
243
243
  elif u.path=='/api/report-context':
244
244
  from .report_browsing import context
245
245
  self.send(200,context(store,q['version_id'][0]))
246
+ elif u.path=='/api/next-report':
247
+ from .next_report import prepare
248
+ self.send(200,prepare(store,q['version_id'][0]))
246
249
  elif u.path=='/api/report-search':
247
250
  self.send(200,{'run_ids':store.search_briefs(q.get('q',[''])[0])})
248
251
  elif u.path=='/api/source-search':
@@ -868,7 +871,12 @@ def _make_server(workspace, port, *, paused, backend, lock):
868
871
  # The confirmation names the plan the user saw, so a settings
869
872
  # change in another window cannot enlarge this batch (#727).
870
873
  result=enqueue_feedback(store,confirmed_plan=body.get('confirm_plan'))
871
- elif path=='/api/stop':worker.stop_job(body['job_id']);result={'ok':True}
874
+ elif path=='/api/stop':
875
+ if body.get('workspace_id',store.meta('workspace_id'))!=store.meta('workspace_id'):
876
+ raise ValueError('停止请求不属于当前工作区')
877
+ worker.stop_job(body['job_id'])
878
+ stopped=store.one('jobs',body['job_id'])
879
+ result={'ok':True,'job_id':stopped['id'],'status':stopped['status']}
872
880
  elif path=='/api/resume':result=worker.retry_with_current_model(body['job_id'],confirmed_plan=body.get('confirm_plan')) if body.get('use_current_model') is True else worker.resume(body['job_id'])
873
881
  elif path=='/api/task-dismiss':
874
882
  job=store.one('jobs',body['job_id'])