columbina 0.1.0__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 (954) hide show
  1. columbina-0.1.0/.gitattributes +8 -0
  2. columbina-0.1.0/.github/workflows/ci.yml +70 -0
  3. columbina-0.1.0/.github/workflows/release.yml +79 -0
  4. columbina-0.1.0/.gitignore +33 -0
  5. columbina-0.1.0/.python-version +1 -0
  6. columbina-0.1.0/CHANGELOG.md +62 -0
  7. columbina-0.1.0/LICENSE +21 -0
  8. columbina-0.1.0/PKG-INFO +84 -0
  9. columbina-0.1.0/README.ja.md +133 -0
  10. columbina-0.1.0/README.md +184 -0
  11. columbina-0.1.0/README.zh-CN.md +133 -0
  12. columbina-0.1.0/bench/__init__.py +10 -0
  13. columbina-0.1.0/bench/__main__.py +7 -0
  14. columbina-0.1.0/bench/check.py +121 -0
  15. columbina-0.1.0/bench/cli.py +228 -0
  16. columbina-0.1.0/bench/database.py +166 -0
  17. columbina-0.1.0/bench/generate/__init__.py +30 -0
  18. columbina-0.1.0/bench/generate/compute.py +252 -0
  19. columbina-0.1.0/bench/generate/files.py +33 -0
  20. columbina-0.1.0/bench/generate/sql.py +297 -0
  21. columbina-0.1.0/bench/grade.py +289 -0
  22. columbina-0.1.0/bench/ollama.py +120 -0
  23. columbina-0.1.0/bench/plugins/__init__.py +1 -0
  24. columbina-0.1.0/bench/plugins/lookup.py +78 -0
  25. columbina-0.1.0/bench/plugins/sqlite.py +128 -0
  26. columbina-0.1.0/bench/run.py +425 -0
  27. columbina-0.1.0/bench/subsets/matrix.txt +31 -0
  28. columbina-0.1.0/bench/table.py +165 -0
  29. columbina-0.1.0/bench/task.py +105 -0
  30. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/checks/test_bill_hidden.py +77 -0
  31. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/reference/bill.py +26 -0
  32. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/reference/money.py +17 -0
  33. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/task.yml +11 -0
  34. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/bill.py +26 -0
  35. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/money.py +17 -0
  36. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/tests/__init__.py +0 -0
  37. columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/tests/test_bill.py +28 -0
  38. columbina-0.1.0/bench/tasks/code/code-config-env-override/checks/test_config_checks.py +109 -0
  39. columbina-0.1.0/bench/tasks/code/code-config-env-override/reference/config.py +55 -0
  40. columbina-0.1.0/bench/tasks/code/code-config-env-override/reference/envvars.py +41 -0
  41. columbina-0.1.0/bench/tasks/code/code-config-env-override/task.yml +13 -0
  42. columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/config.py +54 -0
  43. columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/envvars.py +15 -0
  44. columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/tests/__init__.py +0 -0
  45. columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/tests/test_config.py +31 -0
  46. columbina-0.1.0/bench/tasks/code/code-csv-category-totals/checks/test_report_hidden.py +76 -0
  47. columbina-0.1.0/bench/tasks/code/code-csv-category-totals/reference/report.py +42 -0
  48. columbina-0.1.0/bench/tasks/code/code-csv-category-totals/task.yml +11 -0
  49. columbina-0.1.0/bench/tasks/code/code-csv-category-totals/workspace/report.py +38 -0
  50. columbina-0.1.0/bench/tasks/code/code-csv-category-totals/workspace/tests/__init__.py +0 -0
  51. columbina-0.1.0/bench/tasks/code/code-csv-category-totals/workspace/tests/test_report.py +40 -0
  52. columbina-0.1.0/bench/tasks/code/code-duration-parsing/checks/test_durations_hidden.py +75 -0
  53. columbina-0.1.0/bench/tasks/code/code-duration-parsing/reference/durations.py +36 -0
  54. columbina-0.1.0/bench/tasks/code/code-duration-parsing/task.yml +11 -0
  55. columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/durations.py +36 -0
  56. columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/tests/__init__.py +0 -0
  57. columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/tests/test_durations.py +37 -0
  58. columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/timeouts.py +17 -0
  59. columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/checks/test_events_checks.py +150 -0
  60. columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/reference/events.py +50 -0
  61. columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/task.yml +12 -0
  62. columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/workspace/events.py +50 -0
  63. columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/workspace/tests/__init__.py +0 -0
  64. columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/workspace/tests/test_events.py +34 -0
  65. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/checks/test_inventory_checks.py +93 -0
  66. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/reference/warehouse/errors.py +31 -0
  67. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/reference/warehouse/inventory.py +74 -0
  68. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/task.yml +12 -0
  69. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/tests/__init__.py +0 -0
  70. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/tests/test_inventory.py +37 -0
  71. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/warehouse/__init__.py +1 -0
  72. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/warehouse/errors.py +21 -0
  73. columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/warehouse/inventory.py +59 -0
  74. columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/checks/test_lru_hidden.py +102 -0
  75. columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/reference/lru.py +81 -0
  76. columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/task.yml +10 -0
  77. columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/workspace/lru.py +81 -0
  78. columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/workspace/tests/__init__.py +0 -0
  79. columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/workspace/tests/test_lru.py +37 -0
  80. columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/checks/test_mdtable_checks.py +118 -0
  81. columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/reference/mdtable.py +62 -0
  82. columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/task.yml +12 -0
  83. columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/mdtable.py +62 -0
  84. columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/report.py +14 -0
  85. columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/tests/__init__.py +0 -0
  86. columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/tests/test_mdtable.py +36 -0
  87. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/checks/test_periods_hidden.py +101 -0
  88. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/reference/months.py +25 -0
  89. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/reference/periods.py +42 -0
  90. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/task.yml +12 -0
  91. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/months.py +23 -0
  92. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/periods.py +42 -0
  93. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/tests/__init__.py +0 -0
  94. columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/tests/test_periods.py +39 -0
  95. columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/checks/test_retrying_checks.py +122 -0
  96. columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/reference/retrying.py +44 -0
  97. columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/task.yml +11 -0
  98. columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/workspace/retrying.py +44 -0
  99. columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/workspace/tests/__init__.py +0 -0
  100. columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/workspace/tests/test_retrying.py +41 -0
  101. columbina-0.1.0/bench/tasks/code/code-semver-precedence/checks/test_versions_hidden.py +99 -0
  102. columbina-0.1.0/bench/tasks/code/code-semver-precedence/reference/versions.py +86 -0
  103. columbina-0.1.0/bench/tasks/code/code-semver-precedence/task.yml +11 -0
  104. columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/release.py +22 -0
  105. columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/tests/__init__.py +0 -0
  106. columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/tests/test_versions.py +37 -0
  107. columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/versions.py +80 -0
  108. columbina-0.1.0/bench/tasks/code/code-slugify-accents/checks/test_slugs_checks.py +68 -0
  109. columbina-0.1.0/bench/tasks/code/code-slugify-accents/reference/slugs.py +40 -0
  110. columbina-0.1.0/bench/tasks/code/code-slugify-accents/task.yml +11 -0
  111. columbina-0.1.0/bench/tasks/code/code-slugify-accents/workspace/slugs.py +37 -0
  112. columbina-0.1.0/bench/tasks/code/code-slugify-accents/workspace/tests/__init__.py +0 -0
  113. columbina-0.1.0/bench/tasks/code/code-slugify-accents/workspace/tests/test_slugs.py +26 -0
  114. columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/checks/test_ratelimit_hidden.py +109 -0
  115. columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/reference/ratelimit.py +60 -0
  116. columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/task.yml +11 -0
  117. columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/workspace/ratelimit.py +60 -0
  118. columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/workspace/tests/__init__.py +0 -0
  119. columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/workspace/tests/test_ratelimit.py +33 -0
  120. columbina-0.1.0/bench/tasks/code/code-word-count-contractions/checks/test_wordfreq_checks.py +66 -0
  121. columbina-0.1.0/bench/tasks/code/code-word-count-contractions/reference/wordfreq.py +31 -0
  122. columbina-0.1.0/bench/tasks/code/code-word-count-contractions/task.yml +12 -0
  123. columbina-0.1.0/bench/tasks/code/code-word-count-contractions/workspace/tests/__init__.py +0 -0
  124. columbina-0.1.0/bench/tasks/code/code-word-count-contractions/workspace/tests/test_wordfreq.py +27 -0
  125. columbina-0.1.0/bench/tasks/code/code-word-count-contractions/workspace/wordfreq.py +30 -0
  126. columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/checks/test_wrapping_hidden.py +96 -0
  127. columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/reference/wrapping.py +55 -0
  128. columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/task.yml +10 -0
  129. columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/workspace/tests/__init__.py +0 -0
  130. columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/workspace/tests/test_wrapping.py +26 -0
  131. columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/workspace/wrapping.py +55 -0
  132. columbina-0.1.0/bench/tasks/compute/compute-01-factory/private/values.json +6 -0
  133. columbina-0.1.0/bench/tasks/compute/compute-01-factory/reference/answer.json +9 -0
  134. columbina-0.1.0/bench/tasks/compute/compute-01-factory/task.yml +8 -0
  135. columbina-0.1.0/bench/tasks/compute/compute-01-factory/workspace/README.md +3 -0
  136. columbina-0.1.0/bench/tasks/compute/compute-02-commerce/private/values.json +6 -0
  137. columbina-0.1.0/bench/tasks/compute/compute-02-commerce/reference/answer.json +9 -0
  138. columbina-0.1.0/bench/tasks/compute/compute-02-commerce/task.yml +8 -0
  139. columbina-0.1.0/bench/tasks/compute/compute-02-commerce/workspace/README.md +3 -0
  140. columbina-0.1.0/bench/tasks/compute/compute-03-logistics/private/values.json +6 -0
  141. columbina-0.1.0/bench/tasks/compute/compute-03-logistics/reference/answer.json +9 -0
  142. columbina-0.1.0/bench/tasks/compute/compute-03-logistics/task.yml +8 -0
  143. columbina-0.1.0/bench/tasks/compute/compute-03-logistics/workspace/README.md +3 -0
  144. columbina-0.1.0/bench/tasks/compute/compute-04-factory/private/values.json +8 -0
  145. columbina-0.1.0/bench/tasks/compute/compute-04-factory/reference/answer.json +11 -0
  146. columbina-0.1.0/bench/tasks/compute/compute-04-factory/task.yml +8 -0
  147. columbina-0.1.0/bench/tasks/compute/compute-04-factory/workspace/README.md +3 -0
  148. columbina-0.1.0/bench/tasks/compute/compute-05-commerce/private/values.json +8 -0
  149. columbina-0.1.0/bench/tasks/compute/compute-05-commerce/reference/answer.json +11 -0
  150. columbina-0.1.0/bench/tasks/compute/compute-05-commerce/task.yml +8 -0
  151. columbina-0.1.0/bench/tasks/compute/compute-05-commerce/workspace/README.md +3 -0
  152. columbina-0.1.0/bench/tasks/compute/compute-06-logistics/private/values.json +7 -0
  153. columbina-0.1.0/bench/tasks/compute/compute-06-logistics/reference/answer.json +10 -0
  154. columbina-0.1.0/bench/tasks/compute/compute-06-logistics/task.yml +8 -0
  155. columbina-0.1.0/bench/tasks/compute/compute-06-logistics/workspace/README.md +3 -0
  156. columbina-0.1.0/bench/tasks/compute/compute-07-factory/private/values.json +9 -0
  157. columbina-0.1.0/bench/tasks/compute/compute-07-factory/reference/answer.json +12 -0
  158. columbina-0.1.0/bench/tasks/compute/compute-07-factory/task.yml +8 -0
  159. columbina-0.1.0/bench/tasks/compute/compute-07-factory/workspace/README.md +3 -0
  160. columbina-0.1.0/bench/tasks/compute/compute-08-commerce/private/values.json +9 -0
  161. columbina-0.1.0/bench/tasks/compute/compute-08-commerce/reference/answer.json +12 -0
  162. columbina-0.1.0/bench/tasks/compute/compute-08-commerce/task.yml +8 -0
  163. columbina-0.1.0/bench/tasks/compute/compute-08-commerce/workspace/README.md +3 -0
  164. columbina-0.1.0/bench/tasks/compute/compute-09-logistics/private/values.json +8 -0
  165. columbina-0.1.0/bench/tasks/compute/compute-09-logistics/reference/answer.json +11 -0
  166. columbina-0.1.0/bench/tasks/compute/compute-09-logistics/task.yml +8 -0
  167. columbina-0.1.0/bench/tasks/compute/compute-09-logistics/workspace/README.md +3 -0
  168. columbina-0.1.0/bench/tasks/compute/compute-10-factory/private/values.json +10 -0
  169. columbina-0.1.0/bench/tasks/compute/compute-10-factory/reference/answer.json +13 -0
  170. columbina-0.1.0/bench/tasks/compute/compute-10-factory/task.yml +8 -0
  171. columbina-0.1.0/bench/tasks/compute/compute-10-factory/workspace/README.md +3 -0
  172. columbina-0.1.0/bench/tasks/compute/compute-11-commerce/private/values.json +10 -0
  173. columbina-0.1.0/bench/tasks/compute/compute-11-commerce/reference/answer.json +13 -0
  174. columbina-0.1.0/bench/tasks/compute/compute-11-commerce/task.yml +8 -0
  175. columbina-0.1.0/bench/tasks/compute/compute-11-commerce/workspace/README.md +3 -0
  176. columbina-0.1.0/bench/tasks/compute/compute-12-logistics/private/values.json +10 -0
  177. columbina-0.1.0/bench/tasks/compute/compute-12-logistics/reference/answer.json +13 -0
  178. columbina-0.1.0/bench/tasks/compute/compute-12-logistics/task.yml +8 -0
  179. columbina-0.1.0/bench/tasks/compute/compute-12-logistics/workspace/README.md +3 -0
  180. columbina-0.1.0/bench/tasks/compute/compute-13-factory/private/values.json +6 -0
  181. columbina-0.1.0/bench/tasks/compute/compute-13-factory/reference/answer.json +9 -0
  182. columbina-0.1.0/bench/tasks/compute/compute-13-factory/task.yml +8 -0
  183. columbina-0.1.0/bench/tasks/compute/compute-13-factory/workspace/README.md +3 -0
  184. columbina-0.1.0/bench/tasks/compute/compute-14-commerce/private/values.json +6 -0
  185. columbina-0.1.0/bench/tasks/compute/compute-14-commerce/reference/answer.json +9 -0
  186. columbina-0.1.0/bench/tasks/compute/compute-14-commerce/task.yml +8 -0
  187. columbina-0.1.0/bench/tasks/compute/compute-14-commerce/workspace/README.md +3 -0
  188. columbina-0.1.0/bench/tasks/compute/compute-15-logistics/private/values.json +7 -0
  189. columbina-0.1.0/bench/tasks/compute/compute-15-logistics/reference/answer.json +10 -0
  190. columbina-0.1.0/bench/tasks/compute/compute-15-logistics/task.yml +8 -0
  191. columbina-0.1.0/bench/tasks/compute/compute-15-logistics/workspace/README.md +3 -0
  192. columbina-0.1.0/bench/tasks/compute/compute-16-factory/private/values.json +7 -0
  193. columbina-0.1.0/bench/tasks/compute/compute-16-factory/reference/answer.json +10 -0
  194. columbina-0.1.0/bench/tasks/compute/compute-16-factory/task.yml +8 -0
  195. columbina-0.1.0/bench/tasks/compute/compute-16-factory/workspace/README.md +3 -0
  196. columbina-0.1.0/bench/tasks/compute/compute-17-commerce/private/values.json +7 -0
  197. columbina-0.1.0/bench/tasks/compute/compute-17-commerce/reference/answer.json +10 -0
  198. columbina-0.1.0/bench/tasks/compute/compute-17-commerce/task.yml +8 -0
  199. columbina-0.1.0/bench/tasks/compute/compute-17-commerce/workspace/README.md +3 -0
  200. columbina-0.1.0/bench/tasks/compute/compute-18-logistics/private/values.json +8 -0
  201. columbina-0.1.0/bench/tasks/compute/compute-18-logistics/reference/answer.json +11 -0
  202. columbina-0.1.0/bench/tasks/compute/compute-18-logistics/task.yml +8 -0
  203. columbina-0.1.0/bench/tasks/compute/compute-18-logistics/workspace/README.md +3 -0
  204. columbina-0.1.0/bench/tasks/compute/compute-19-factory/private/values.json +9 -0
  205. columbina-0.1.0/bench/tasks/compute/compute-19-factory/reference/answer.json +12 -0
  206. columbina-0.1.0/bench/tasks/compute/compute-19-factory/task.yml +8 -0
  207. columbina-0.1.0/bench/tasks/compute/compute-19-factory/workspace/README.md +3 -0
  208. columbina-0.1.0/bench/tasks/compute/compute-20-commerce/private/values.json +9 -0
  209. columbina-0.1.0/bench/tasks/compute/compute-20-commerce/reference/answer.json +12 -0
  210. columbina-0.1.0/bench/tasks/compute/compute-20-commerce/task.yml +8 -0
  211. columbina-0.1.0/bench/tasks/compute/compute-20-commerce/workspace/README.md +3 -0
  212. columbina-0.1.0/bench/tasks/compute/compute-21-logistics/private/values.json +9 -0
  213. columbina-0.1.0/bench/tasks/compute/compute-21-logistics/reference/answer.json +12 -0
  214. columbina-0.1.0/bench/tasks/compute/compute-21-logistics/task.yml +8 -0
  215. columbina-0.1.0/bench/tasks/compute/compute-21-logistics/workspace/README.md +3 -0
  216. columbina-0.1.0/bench/tasks/compute/compute-22-factory/private/values.json +10 -0
  217. columbina-0.1.0/bench/tasks/compute/compute-22-factory/reference/answer.json +13 -0
  218. columbina-0.1.0/bench/tasks/compute/compute-22-factory/task.yml +8 -0
  219. columbina-0.1.0/bench/tasks/compute/compute-22-factory/workspace/README.md +3 -0
  220. columbina-0.1.0/bench/tasks/compute/compute-23-commerce/private/values.json +9 -0
  221. columbina-0.1.0/bench/tasks/compute/compute-23-commerce/reference/answer.json +12 -0
  222. columbina-0.1.0/bench/tasks/compute/compute-23-commerce/task.yml +8 -0
  223. columbina-0.1.0/bench/tasks/compute/compute-23-commerce/workspace/README.md +3 -0
  224. columbina-0.1.0/bench/tasks/compute/compute-24-logistics/private/values.json +10 -0
  225. columbina-0.1.0/bench/tasks/compute/compute-24-logistics/reference/answer.json +13 -0
  226. columbina-0.1.0/bench/tasks/compute/compute-24-logistics/task.yml +8 -0
  227. columbina-0.1.0/bench/tasks/compute/compute-24-logistics/workspace/README.md +3 -0
  228. columbina-0.1.0/bench/tasks/compute/compute-25-factory/private/values.json +6 -0
  229. columbina-0.1.0/bench/tasks/compute/compute-25-factory/reference/answer.json +9 -0
  230. columbina-0.1.0/bench/tasks/compute/compute-25-factory/task.yml +8 -0
  231. columbina-0.1.0/bench/tasks/compute/compute-25-factory/workspace/README.md +3 -0
  232. columbina-0.1.0/bench/tasks/compute/compute-26-commerce/private/values.json +6 -0
  233. columbina-0.1.0/bench/tasks/compute/compute-26-commerce/reference/answer.json +9 -0
  234. columbina-0.1.0/bench/tasks/compute/compute-26-commerce/task.yml +8 -0
  235. columbina-0.1.0/bench/tasks/compute/compute-26-commerce/workspace/README.md +3 -0
  236. columbina-0.1.0/bench/tasks/compute/compute-27-logistics/private/values.json +6 -0
  237. columbina-0.1.0/bench/tasks/compute/compute-27-logistics/reference/answer.json +9 -0
  238. columbina-0.1.0/bench/tasks/compute/compute-27-logistics/task.yml +8 -0
  239. columbina-0.1.0/bench/tasks/compute/compute-27-logistics/workspace/README.md +3 -0
  240. columbina-0.1.0/bench/tasks/compute/compute-28-factory/private/values.json +8 -0
  241. columbina-0.1.0/bench/tasks/compute/compute-28-factory/reference/answer.json +11 -0
  242. columbina-0.1.0/bench/tasks/compute/compute-28-factory/task.yml +8 -0
  243. columbina-0.1.0/bench/tasks/compute/compute-28-factory/workspace/README.md +3 -0
  244. columbina-0.1.0/bench/tasks/compute/compute-29-commerce/private/values.json +8 -0
  245. columbina-0.1.0/bench/tasks/compute/compute-29-commerce/reference/answer.json +11 -0
  246. columbina-0.1.0/bench/tasks/compute/compute-29-commerce/task.yml +8 -0
  247. columbina-0.1.0/bench/tasks/compute/compute-29-commerce/workspace/README.md +3 -0
  248. columbina-0.1.0/bench/tasks/compute/compute-30-logistics/private/values.json +8 -0
  249. columbina-0.1.0/bench/tasks/compute/compute-30-logistics/reference/answer.json +11 -0
  250. columbina-0.1.0/bench/tasks/compute/compute-30-logistics/task.yml +8 -0
  251. columbina-0.1.0/bench/tasks/compute/compute-30-logistics/workspace/README.md +3 -0
  252. columbina-0.1.0/bench/tasks/files/files-archive-manifest/checks/expected.json +43 -0
  253. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/missing.txt +2 -0
  254. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/2023-q1.md +3 -0
  255. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/2023-q2.md +3 -0
  256. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/2023-q3.md +3 -0
  257. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/board meeting 2023-06.md +3 -0
  258. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/drafts/2023-q3-draft.md +3 -0
  259. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/notes/ideas.md +3 -0
  260. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/reports/2023-q4.md +3 -0
  261. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/reports/2024-q1.md +3 -0
  262. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/reports/drafts/2024-q2-draft.md +3 -0
  263. columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/to-archive.txt +11 -0
  264. columbina-0.1.0/bench/tasks/files/files-archive-manifest/task.yml +10 -0
  265. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/notes/ideas.md +3 -0
  266. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q1.md +3 -0
  267. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q2.md +3 -0
  268. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q3.md +3 -0
  269. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q4.md +3 -0
  270. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2024-q1.md +3 -0
  271. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/board meeting 2023-06.md +3 -0
  272. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/drafts/2023-q3-draft.md +3 -0
  273. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/drafts/2024-q2-draft.md +3 -0
  274. columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/to-archive.txt +11 -0
  275. columbina-0.1.0/bench/tasks/files/files-clean-temp/checks/expected.json +36 -0
  276. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/data/records.csv +3 -0
  277. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/data/sample.tmpl +1 -0
  278. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/docs/guide.md +3 -0
  279. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/docs/template.tmp.md +3 -0
  280. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/docs/tmp-notes.txt +1 -0
  281. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/notes.md +3 -0
  282. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/src/main.py +3 -0
  283. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/src/utils/helpers.py +2 -0
  284. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/src/utils/old~notes.txt +1 -0
  285. columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/scratch.tmp +1 -0
  286. columbina-0.1.0/bench/tasks/files/files-clean-temp/task.yml +8 -0
  287. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/build.tmp +1 -0
  288. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/data/records.csv +3 -0
  289. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/data/records.csv.tmp +2 -0
  290. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/data/sample.tmpl +1 -0
  291. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/guide.md +3 -0
  292. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/guide.md~ +1 -0
  293. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/template.tmp.md +3 -0
  294. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/tmp-notes.txt +1 -0
  295. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/notes.md +3 -0
  296. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/notes.md~ +3 -0
  297. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/.session.tmp +1 -0
  298. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/cache.tmp +1 -0
  299. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/main.py +3 -0
  300. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/main.py~ +1 -0
  301. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/utils/helpers.py +2 -0
  302. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/utils/helpers.py.tmp +2 -0
  303. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/utils/old~notes.txt +1 -0
  304. columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/scratch.tmp +1 -0
  305. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/checks/expected.json +7 -0
  306. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/reference/lists/README.md +9 -0
  307. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/reference/lists/beta-testers.txt +4 -0
  308. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/reference/lists/newsletter.txt +8 -0
  309. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/task.yml +9 -0
  310. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/workspace/lists/README.md +9 -0
  311. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/workspace/lists/beta-testers.txt +6 -0
  312. columbina-0.1.0/bench/tasks/files/files-dedupe-lines/workspace/lists/newsletter.txt +13 -0
  313. columbina-0.1.0/bench/tasks/files/files-extract-errors/checks/expected.json +10 -0
  314. columbina-0.1.0/bench/tasks/files/files-extract-errors/reference/logs/app.log +21 -0
  315. columbina-0.1.0/bench/tasks/files/files-extract-errors/reference/logs/errors.log +5 -0
  316. columbina-0.1.0/bench/tasks/files/files-extract-errors/reference/logs/worker.log +4 -0
  317. columbina-0.1.0/bench/tasks/files/files-extract-errors/task.yml +9 -0
  318. columbina-0.1.0/bench/tasks/files/files-extract-errors/workspace/logs/app.log +21 -0
  319. columbina-0.1.0/bench/tasks/files/files-extract-errors/workspace/logs/worker.log +4 -0
  320. columbina-0.1.0/bench/tasks/files/files-line-count-index/checks/expected.json +8 -0
  321. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/INDEX.txt +10 -0
  322. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/ideas.md +7 -0
  323. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/inbox.txt +1 -0
  324. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/journal/2024-01.md +13 -0
  325. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/journal/2024-02.md +6 -0
  326. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/journal/2024-03.md.bak +1 -0
  327. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/archive/shed.md +4 -0
  328. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/bike repair.md +5 -0
  329. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/budget.csv +3 -0
  330. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/garden.md +9 -0
  331. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/kitchen.md +7 -0
  332. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/reading-list.md +9 -0
  333. columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/scratch.md +0 -0
  334. columbina-0.1.0/bench/tasks/files/files-line-count-index/task.yml +11 -0
  335. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/ideas.md +7 -0
  336. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/inbox.txt +1 -0
  337. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/journal/2024-01.md +13 -0
  338. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/journal/2024-02.md +6 -0
  339. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/journal/2024-03.md.bak +1 -0
  340. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/archive/shed.md +4 -0
  341. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/bike repair.md +5 -0
  342. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/budget.csv +3 -0
  343. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/garden.md +9 -0
  344. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/kitchen.md +7 -0
  345. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/reading-list.md +9 -0
  346. columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/scratch.md +0 -0
  347. columbina-0.1.0/bench/tasks/files/files-merge-csv/checks/expected.json +14 -0
  348. columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/report/q1.csv +12 -0
  349. columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2023-12.csv +3 -0
  350. columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2024-01.csv +5 -0
  351. columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2024-02.csv +4 -0
  352. columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2024-03.csv +5 -0
  353. columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/README.md +3 -0
  354. columbina-0.1.0/bench/tasks/files/files-merge-csv/task.yml +11 -0
  355. columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2023-12.csv +3 -0
  356. columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2024-01.csv +5 -0
  357. columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2024-02.csv +4 -0
  358. columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2024-03.csv +5 -0
  359. columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/README.md +3 -0
  360. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/checks/expected.json +6 -0
  361. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/reference/CHANGELOG.md +35 -0
  362. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/reference/README.md +9 -0
  363. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/reference/VERSION +1 -0
  364. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/task.yml +11 -0
  365. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/workspace/CHANGELOG.md +35 -0
  366. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/workspace/README.md +9 -0
  367. columbina-0.1.0/bench/tasks/files/files-normalise-changelog/workspace/VERSION +1 -0
  368. columbina-0.1.0/bench/tasks/files/files-rename-function/checks/expected.json +13 -0
  369. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/README.md +3 -0
  370. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/__init__.py +1 -0
  371. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/cli.py +12 -0
  372. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/data.py +25 -0
  373. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/report.py +7 -0
  374. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/docs/usage.md +5 -0
  375. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/tests/test_data.py +14 -0
  376. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/vendor/legacy_client/__init__.py +3 -0
  377. columbina-0.1.0/bench/tasks/files/files-rename-function/reference/vendor/legacy_client/client.py +5 -0
  378. columbina-0.1.0/bench/tasks/files/files-rename-function/task.yml +10 -0
  379. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/README.md +3 -0
  380. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/__init__.py +1 -0
  381. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/cli.py +12 -0
  382. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/data.py +25 -0
  383. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/report.py +7 -0
  384. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/docs/usage.md +5 -0
  385. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/tests/test_data.py +14 -0
  386. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/vendor/legacy_client/__init__.py +3 -0
  387. columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/vendor/legacy_client/client.py +5 -0
  388. columbina-0.1.0/bench/tasks/files/files-rename-photos/checks/expected.json +39 -0
  389. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023/2023-07-04_1.txt +1 -0
  390. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023/2023-07-04_2.txt +1 -0
  391. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023/album.md +3 -0
  392. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023-12-31_3.txt +1 -0
  393. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-01-05_1.txt +1 -0
  394. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-01-05_2.txt +1 -0
  395. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-02-14_10.txt +1 -0
  396. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-03-02_4.txt +1 -0
  397. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/IMG_20240105_1.png.txt +1 -0
  398. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/IMG_20240302_cover.jpg.txt +1 -0
  399. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/VID_20240214_1.mp4.txt +1 -0
  400. columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/captions.md +3 -0
  401. columbina-0.1.0/bench/tasks/files/files-rename-photos/task.yml +10 -0
  402. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/2023/IMG_20230704_1.jpg.txt +1 -0
  403. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/2023/IMG_20230704_2.jpg.txt +1 -0
  404. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/2023/album.md +3 -0
  405. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20231231_3.jpg.txt +1 -0
  406. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240105_1.jpg.txt +1 -0
  407. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240105_1.png.txt +1 -0
  408. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240105_2.jpg.txt +1 -0
  409. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240214_10.jpg.txt +1 -0
  410. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240302_4.jpg.txt +1 -0
  411. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240302_cover.jpg.txt +1 -0
  412. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/VID_20240214_1.mp4.txt +1 -0
  413. columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/captions.md +3 -0
  414. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/checks/expected.json +34 -0
  415. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/README.md +3 -0
  416. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/LICENSE +2 -0
  417. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/csv/Contacts.CSV +3 -0
  418. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/csv/budget-2024.csv +4 -0
  419. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/json/settings.json +4 -0
  420. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/md/meeting-notes.md +4 -0
  421. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/md/report.final.md +3 -0
  422. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/txt/todo.txt +3 -0
  423. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/task.yml +10 -0
  424. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/README.md +3 -0
  425. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/Contacts.CSV +3 -0
  426. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/LICENSE +2 -0
  427. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/budget-2024.csv +4 -0
  428. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/meeting-notes.md +4 -0
  429. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/report.final.md +3 -0
  430. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/settings.json +4 -0
  431. columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/todo.txt +3 -0
  432. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/checks/expected.json +25 -0
  433. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/README.md +3 -0
  434. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/bundle.txt +35 -0
  435. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/README.md +6 -0
  436. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/config/settings.ini +3 -0
  437. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/data/empty.txt +0 -0
  438. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/data/users.csv +3 -0
  439. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/docs/setup.md +4 -0
  440. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/src/app.py +11 -0
  441. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/task.yml +11 -0
  442. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/workspace/README.md +3 -0
  443. columbina-0.1.0/bench/tasks/files/files-unpack-bundle/workspace/bundle.txt +35 -0
  444. columbina-0.1.0/bench/tasks/files/files-update-config/checks/expected.json +38 -0
  445. columbina-0.1.0/bench/tasks/files/files-update-config/reference/config/app.json +28 -0
  446. columbina-0.1.0/bench/tasks/files/files-update-config/reference/config/worker.ini +19 -0
  447. columbina-0.1.0/bench/tasks/files/files-update-config/task.yml +11 -0
  448. columbina-0.1.0/bench/tasks/files/files-update-config/workspace/config/app.json +28 -0
  449. columbina-0.1.0/bench/tasks/files/files-update-config/workspace/config/worker.ini +19 -0
  450. columbina-0.1.0/bench/tasks/sql/sql-busiest-month/private/changed.sql +275 -0
  451. columbina-0.1.0/bench/tasks/sql/sql-busiest-month/private/database.sql +285 -0
  452. columbina-0.1.0/bench/tasks/sql/sql-busiest-month/reference/answer.sql +1 -0
  453. columbina-0.1.0/bench/tasks/sql/sql-busiest-month/task.yml +10 -0
  454. columbina-0.1.0/bench/tasks/sql/sql-busiest-month/workspace/README.md +3 -0
  455. columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/private/changed.sql +275 -0
  456. columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/private/database.sql +285 -0
  457. columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/reference/answer.sql +1 -0
  458. columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/task.yml +10 -0
  459. columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/workspace/README.md +3 -0
  460. columbina-0.1.0/bench/tasks/sql/sql-category-customers/private/changed.sql +275 -0
  461. columbina-0.1.0/bench/tasks/sql/sql-category-customers/private/database.sql +285 -0
  462. columbina-0.1.0/bench/tasks/sql/sql-category-customers/reference/answer.sql +1 -0
  463. columbina-0.1.0/bench/tasks/sql/sql-category-customers/task.yml +10 -0
  464. columbina-0.1.0/bench/tasks/sql/sql-category-customers/workspace/README.md +3 -0
  465. columbina-0.1.0/bench/tasks/sql/sql-city-average-order/private/changed.sql +275 -0
  466. columbina-0.1.0/bench/tasks/sql/sql-city-average-order/private/database.sql +285 -0
  467. columbina-0.1.0/bench/tasks/sql/sql-city-average-order/reference/answer.sql +1 -0
  468. columbina-0.1.0/bench/tasks/sql/sql-city-average-order/task.yml +10 -0
  469. columbina-0.1.0/bench/tasks/sql/sql-city-average-order/workspace/README.md +3 -0
  470. columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/private/changed.sql +275 -0
  471. columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/private/database.sql +285 -0
  472. columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/reference/answer.sql +1 -0
  473. columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/task.yml +10 -0
  474. columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/workspace/README.md +3 -0
  475. columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/private/changed.sql +275 -0
  476. columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/private/database.sql +285 -0
  477. columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/reference/answer.sql +1 -0
  478. columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/task.yml +10 -0
  479. columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/workspace/README.md +3 -0
  480. columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/private/changed.sql +275 -0
  481. columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/private/database.sql +285 -0
  482. columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/reference/answer.sql +1 -0
  483. columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/task.yml +10 -0
  484. columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/workspace/README.md +3 -0
  485. columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/private/changed.sql +275 -0
  486. columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/private/database.sql +285 -0
  487. columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/reference/answer.sql +1 -0
  488. columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/task.yml +10 -0
  489. columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/workspace/README.md +3 -0
  490. columbina-0.1.0/bench/tasks/sql/sql-large-orders/private/changed.sql +275 -0
  491. columbina-0.1.0/bench/tasks/sql/sql-large-orders/private/database.sql +285 -0
  492. columbina-0.1.0/bench/tasks/sql/sql-large-orders/reference/answer.sql +1 -0
  493. columbina-0.1.0/bench/tasks/sql/sql-large-orders/task.yml +10 -0
  494. columbina-0.1.0/bench/tasks/sql/sql-large-orders/workspace/README.md +3 -0
  495. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/private/changed.sql +275 -0
  496. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/private/database.sql +285 -0
  497. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/reference/answer.sql +1 -0
  498. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/task.yml +10 -0
  499. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/workspace/README.md +3 -0
  500. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/private/changed.sql +275 -0
  501. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/private/database.sql +285 -0
  502. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/reference/answer.sql +1 -0
  503. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/task.yml +10 -0
  504. columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/workspace/README.md +3 -0
  505. columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/private/changed.sql +275 -0
  506. columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/private/database.sql +285 -0
  507. columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/reference/answer.sql +1 -0
  508. columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/task.yml +10 -0
  509. columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/workspace/README.md +3 -0
  510. columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/private/changed.sql +275 -0
  511. columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/private/database.sql +285 -0
  512. columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/reference/answer.sql +1 -0
  513. columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/task.yml +10 -0
  514. columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/workspace/README.md +3 -0
  515. columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/private/changed.sql +275 -0
  516. columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/private/database.sql +285 -0
  517. columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/reference/answer.sql +1 -0
  518. columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/task.yml +10 -0
  519. columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/workspace/README.md +3 -0
  520. columbina-0.1.0/bench/tasks/sql/sql-top-products/private/changed.sql +275 -0
  521. columbina-0.1.0/bench/tasks/sql/sql-top-products/private/database.sql +285 -0
  522. columbina-0.1.0/bench/tasks/sql/sql-top-products/reference/answer.sql +1 -0
  523. columbina-0.1.0/bench/tasks/sql/sql-top-products/task.yml +10 -0
  524. columbina-0.1.0/bench/tasks/sql/sql-top-products/workspace/README.md +3 -0
  525. columbina-0.1.0/docs/bench/README.md +99 -0
  526. columbina-0.1.0/docs/guide.ja.md +778 -0
  527. columbina-0.1.0/docs/guide.md +1099 -0
  528. columbina-0.1.0/docs/guide.zh-CN.md +778 -0
  529. columbina-0.1.0/docs/plans/2026-10-09-columbina-design.md +994 -0
  530. columbina-0.1.0/docs/plans/2026-10-09-columbina-stage1-kernel.md +9634 -0
  531. columbina-0.1.0/docs/plans/2026-10-09-columbina-stage2-loop.md +685 -0
  532. columbina-0.1.0/docs/plans/2026-10-09-columbina-stage3-tools.md +671 -0
  533. columbina-0.1.0/docs/plans/2026-10-09-columbina-stage4-cli.md +395 -0
  534. columbina-0.1.0/docs/plans/2026-10-10-columbina-stage5-context.md +384 -0
  535. columbina-0.1.0/docs/plans/2026-10-10-columbina-stage6-extensions.md +463 -0
  536. columbina-0.1.0/docs/plans/2026-10-11-columbina-stage10-serve.md +233 -0
  537. columbina-0.1.0/docs/plans/2026-10-13-columbina-stage7-sandbox.md +412 -0
  538. columbina-0.1.0/docs/plans/2026-10-14-columbina-hardening.md +159 -0
  539. columbina-0.1.0/docs/plans/2026-10-14-columbina-stage8-bench.md +102 -0
  540. columbina-0.1.0/docs/plans/2026-10-14-columbina-video-design.md +257 -0
  541. columbina-0.1.0/docs/plans/2026-10-14-columbina-video1.md +154 -0
  542. columbina-0.1.0/docs/protocol/README.md +517 -0
  543. columbina-0.1.0/docs/protocol/events.schema.json +2375 -0
  544. columbina-0.1.0/docs/protocol/samples/tour.jsonl +122 -0
  545. columbina-0.1.0/docs/pypi.md +48 -0
  546. columbina-0.1.0/docs/report.md +237 -0
  547. columbina-0.1.0/docs/report.zh-CN.md +127 -0
  548. columbina-0.1.0/docs/research/claude-code-digest.md +202 -0
  549. columbina-0.1.0/docs/research/codex-digest.md +400 -0
  550. columbina-0.1.0/docs/research/dsh-digest.md +609 -0
  551. columbina-0.1.0/examples/clock.py +29 -0
  552. columbina-0.1.0/examples/kernel_demo.py +30 -0
  553. columbina-0.1.0/examples/no_push.py +29 -0
  554. columbina-0.1.0/examples/word_count.py +92 -0
  555. columbina-0.1.0/pyproject.toml +156 -0
  556. columbina-0.1.0/src/columbina/__init__.py +7 -0
  557. columbina-0.1.0/src/columbina/__main__.py +5 -0
  558. columbina-0.1.0/src/columbina/agent/__init__.py +125 -0
  559. columbina-0.1.0/src/columbina/agent/agent.py +363 -0
  560. columbina-0.1.0/src/columbina/agent/context.py +44 -0
  561. columbina-0.1.0/src/columbina/agent/events.py +187 -0
  562. columbina-0.1.0/src/columbina/agent/inbox.py +166 -0
  563. columbina-0.1.0/src/columbina/agent/replies.py +43 -0
  564. columbina-0.1.0/src/columbina/agent_loop/__init__.py +65 -0
  565. columbina-0.1.0/src/columbina/agent_loop/loop.py +826 -0
  566. columbina-0.1.0/src/columbina/approval/__init__.py +241 -0
  567. columbina-0.1.0/src/columbina/apps/__init__.py +19 -0
  568. columbina-0.1.0/src/columbina/apps/cli/__init__.py +520 -0
  569. columbina-0.1.0/src/columbina/apps/cli/approval.py +106 -0
  570. columbina-0.1.0/src/columbina/apps/cli/lines.py +37 -0
  571. columbina-0.1.0/src/columbina/apps/cli/prompt.py +364 -0
  572. columbina-0.1.0/src/columbina/apps/cli/status.py +98 -0
  573. columbina-0.1.0/src/columbina/apps/cli/terminal.py +97 -0
  574. columbina-0.1.0/src/columbina/apps/cli/transcript.py +495 -0
  575. columbina-0.1.0/src/columbina/apps/common.py +60 -0
  576. columbina-0.1.0/src/columbina/apps/headless.py +209 -0
  577. columbina-0.1.0/src/columbina/apps/hooks.py +298 -0
  578. columbina-0.1.0/src/columbina/apps/launcher.py +891 -0
  579. columbina-0.1.0/src/columbina/apps/serve/__init__.py +40 -0
  580. columbina-0.1.0/src/columbina/apps/serve/rpc.py +291 -0
  581. columbina-0.1.0/src/columbina/apps/serve/server.py +846 -0
  582. columbina-0.1.0/src/columbina/apps/serve/wire.py +314 -0
  583. columbina-0.1.0/src/columbina/apps/sessions.py +150 -0
  584. columbina-0.1.0/src/columbina/apps/setup.py +943 -0
  585. columbina-0.1.0/src/columbina/apps/terminal_text.py +96 -0
  586. columbina-0.1.0/src/columbina/builtin_tools/__init__.py +1 -0
  587. columbina-0.1.0/src/columbina/builtin_tools/edit.py +163 -0
  588. columbina-0.1.0/src/columbina/builtin_tools/glob.py +164 -0
  589. columbina-0.1.0/src/columbina/builtin_tools/grep.py +425 -0
  590. columbina-0.1.0/src/columbina/builtin_tools/grep_worker.py +107 -0
  591. columbina-0.1.0/src/columbina/builtin_tools/read.py +387 -0
  592. columbina-0.1.0/src/columbina/builtin_tools/shell.py +449 -0
  593. columbina-0.1.0/src/columbina/builtin_tools/subagent.py +192 -0
  594. columbina-0.1.0/src/columbina/builtin_tools/write.py +81 -0
  595. columbina-0.1.0/src/columbina/bundles/__init__.py +1 -0
  596. columbina-0.1.0/src/columbina/bundles/base.yml +96 -0
  597. columbina-0.1.0/src/columbina/bundles/cli.yml +33 -0
  598. columbina-0.1.0/src/columbina/bundles/headless.yml +13 -0
  599. columbina-0.1.0/src/columbina/bundles/minimal.yml +30 -0
  600. columbina-0.1.0/src/columbina/bundles/serve.yml +33 -0
  601. columbina-0.1.0/src/columbina/cancellation.py +142 -0
  602. columbina-0.1.0/src/columbina/commands/__init__.py +156 -0
  603. columbina-0.1.0/src/columbina/commands/compact.py +74 -0
  604. columbina-0.1.0/src/columbina/commands/fork.py +62 -0
  605. columbina-0.1.0/src/columbina/commands/mcp.py +49 -0
  606. columbina-0.1.0/src/columbina/commands/permissions.py +66 -0
  607. columbina-0.1.0/src/columbina/commands/sessions.py +61 -0
  608. columbina-0.1.0/src/columbina/commands/skills.py +107 -0
  609. columbina-0.1.0/src/columbina/commands/todos.py +31 -0
  610. columbina-0.1.0/src/columbina/commands/tools.py +43 -0
  611. columbina-0.1.0/src/columbina/compaction/__init__.py +200 -0
  612. columbina-0.1.0/src/columbina/compaction/basic/__init__.py +661 -0
  613. columbina-0.1.0/src/columbina/compaction/basic/region.py +134 -0
  614. columbina-0.1.0/src/columbina/compaction/basic/summary.py +240 -0
  615. columbina-0.1.0/src/columbina/compaction/basic/trim.py +304 -0
  616. columbina-0.1.0/src/columbina/context/__init__.py +6 -0
  617. columbina-0.1.0/src/columbina/context/instructions.py +229 -0
  618. columbina-0.1.0/src/columbina/context/runtime.py +40 -0
  619. columbina-0.1.0/src/columbina/data.py +9 -0
  620. columbina-0.1.0/src/columbina/descent.py +54 -0
  621. columbina-0.1.0/src/columbina/frontmatter.py +164 -0
  622. columbina-0.1.0/src/columbina/fs/__init__.py +646 -0
  623. columbina-0.1.0/src/columbina/fs/bound.py +635 -0
  624. columbina-0.1.0/src/columbina/fs/paths.py +244 -0
  625. columbina-0.1.0/src/columbina/fs/patterns.py +60 -0
  626. columbina-0.1.0/src/columbina/fs/walk.py +162 -0
  627. columbina-0.1.0/src/columbina/guard/__init__.py +8 -0
  628. columbina-0.1.0/src/columbina/guard/budget.py +139 -0
  629. columbina-0.1.0/src/columbina/hooks/__init__.py +628 -0
  630. columbina-0.1.0/src/columbina/hooks/config.py +378 -0
  631. columbina-0.1.0/src/columbina/hooks/files.py +115 -0
  632. columbina-0.1.0/src/columbina/hooks/run.py +366 -0
  633. columbina-0.1.0/src/columbina/kernel/__init__.py +100 -0
  634. columbina-0.1.0/src/columbina/kernel/compose.py +391 -0
  635. columbina-0.1.0/src/columbina/kernel/context.py +362 -0
  636. columbina-0.1.0/src/columbina/kernel/errors.py +41 -0
  637. columbina-0.1.0/src/columbina/kernel/events.py +267 -0
  638. columbina-0.1.0/src/columbina/kernel/fiber.py +802 -0
  639. columbina-0.1.0/src/columbina/kernel/plugin.py +99 -0
  640. columbina-0.1.0/src/columbina/kernel/registry.py +70 -0
  641. columbina-0.1.0/src/columbina/kernel/services.py +18 -0
  642. columbina-0.1.0/src/columbina/llm/__init__.py +96 -0
  643. columbina-0.1.0/src/columbina/llm/adapters/__init__.py +1 -0
  644. columbina-0.1.0/src/columbina/llm/adapters/openai_chat.py +673 -0
  645. columbina-0.1.0/src/columbina/llm/adapters/replay.py +151 -0
  646. columbina-0.1.0/src/columbina/llm/adapters/scripted.py +254 -0
  647. columbina-0.1.0/src/columbina/llm/assembler.py +155 -0
  648. columbina-0.1.0/src/columbina/llm/credentials.py +819 -0
  649. columbina-0.1.0/src/columbina/llm/render.py +92 -0
  650. columbina-0.1.0/src/columbina/llm/runtime.py +309 -0
  651. columbina-0.1.0/src/columbina/llm/services.py +180 -0
  652. columbina-0.1.0/src/columbina/llm/types.py +261 -0
  653. columbina-0.1.0/src/columbina/mcp/__init__.py +127 -0
  654. columbina-0.1.0/src/columbina/mcp/server/__init__.py +191 -0
  655. columbina-0.1.0/src/columbina/mcp/server/connection.py +879 -0
  656. columbina-0.1.0/src/columbina/mcp/server/content.py +112 -0
  657. columbina-0.1.0/src/columbina/mcp/server/names.py +60 -0
  658. columbina-0.1.0/src/columbina/mcp/server/offer.py +164 -0
  659. columbina-0.1.0/src/columbina/mcp/server/reach.py +214 -0
  660. columbina-0.1.0/src/columbina/mcp/server/schema.py +108 -0
  661. columbina-0.1.0/src/columbina/mcp/server/served.py +162 -0
  662. columbina-0.1.0/src/columbina/permissions/__init__.py +743 -0
  663. columbina-0.1.0/src/columbina/permissions/commands.py +141 -0
  664. columbina-0.1.0/src/columbina/permissions/rules.py +286 -0
  665. columbina-0.1.0/src/columbina/places.py +162 -0
  666. columbina-0.1.0/src/columbina/plain_yaml.py +109 -0
  667. columbina-0.1.0/src/columbina/process.py +903 -0
  668. columbina-0.1.0/src/columbina/programs.py +147 -0
  669. columbina-0.1.0/src/columbina/project.py +38 -0
  670. columbina-0.1.0/src/columbina/py.typed +0 -0
  671. columbina-0.1.0/src/columbina/retry.py +118 -0
  672. columbina-0.1.0/src/columbina/sandbox/__init__.py +380 -0
  673. columbina-0.1.0/src/columbina/sandbox/base.py +128 -0
  674. columbina-0.1.0/src/columbina/sandbox/docker.py +2063 -0
  675. columbina-0.1.0/src/columbina/session/__init__.py +129 -0
  676. columbina-0.1.0/src/columbina/session/codec.py +209 -0
  677. columbina-0.1.0/src/columbina/session/errors.py +25 -0
  678. columbina-0.1.0/src/columbina/session/events.py +297 -0
  679. columbina-0.1.0/src/columbina/session/lock.py +52 -0
  680. columbina-0.1.0/src/columbina/session/log.py +271 -0
  681. columbina-0.1.0/src/columbina/session/projection.py +128 -0
  682. columbina-0.1.0/src/columbina/session/repair.py +115 -0
  683. columbina-0.1.0/src/columbina/session/service.py +247 -0
  684. columbina-0.1.0/src/columbina/session/store.py +391 -0
  685. columbina-0.1.0/src/columbina/session/surface.py +77 -0
  686. columbina-0.1.0/src/columbina/shells.py +55 -0
  687. columbina-0.1.0/src/columbina/skills/__init__.py +387 -0
  688. columbina-0.1.0/src/columbina/skills/files.py +340 -0
  689. columbina-0.1.0/src/columbina/spill/__init__.py +133 -0
  690. columbina-0.1.0/src/columbina/spill/local.py +299 -0
  691. columbina-0.1.0/src/columbina/spill/policy.py +222 -0
  692. columbina-0.1.0/src/columbina/subagents/__init__.py +573 -0
  693. columbina-0.1.0/src/columbina/subagents/spawn.py +146 -0
  694. columbina-0.1.0/src/columbina/subagents/types.py +379 -0
  695. columbina-0.1.0/src/columbina/system_prompt/__init__.py +121 -0
  696. columbina-0.1.0/src/columbina/system_prompt/conduct.md +65 -0
  697. columbina-0.1.0/src/columbina/system_prompt/conduct.py +108 -0
  698. columbina-0.1.0/src/columbina/text.py +33 -0
  699. columbina-0.1.0/src/columbina/todo/__init__.py +266 -0
  700. columbina-0.1.0/src/columbina/token_meter/__init__.py +281 -0
  701. columbina-0.1.0/src/columbina/tools/__init__.py +74 -0
  702. columbina-0.1.0/src/columbina/tools/pipeline.py +597 -0
  703. columbina-0.1.0/src/columbina/tools/tool.py +273 -0
  704. columbina-0.1.0/src/columbina/unseen.py +52 -0
  705. columbina-0.1.0/src/columbina/video/__init__.py +6 -0
  706. columbina-0.1.0/src/columbina/video/media.py +155 -0
  707. columbina-0.1.0/src/columbina/withheld.py +135 -0
  708. columbina-0.1.0/tests/agent/test_agents.py +428 -0
  709. columbina-0.1.0/tests/agent/test_inbox.py +247 -0
  710. columbina-0.1.0/tests/agent/test_replies.py +123 -0
  711. columbina-0.1.0/tests/agent_loop/snapshots/a_session.txt +73 -0
  712. columbina-0.1.0/tests/agent_loop/test_cancel.py +814 -0
  713. columbina-0.1.0/tests/agent_loop/test_context.py +720 -0
  714. columbina-0.1.0/tests/agent_loop/test_hooks.py +540 -0
  715. columbina-0.1.0/tests/agent_loop/test_maintenance.py +313 -0
  716. columbina-0.1.0/tests/agent_loop/test_properties.py +672 -0
  717. columbina-0.1.0/tests/agent_loop/test_request_shape.py +116 -0
  718. columbina-0.1.0/tests/agent_loop/test_rest.py +118 -0
  719. columbina-0.1.0/tests/agent_loop/test_tools.py +719 -0
  720. columbina-0.1.0/tests/agent_loop/test_turns.py +654 -0
  721. columbina-0.1.0/tests/approval/test_approval.py +375 -0
  722. columbina-0.1.0/tests/apps/cli/snapshots/a_session_at_the_terminal.txt +58 -0
  723. columbina-0.1.0/tests/apps/cli/snapshots/the_screen_of_a_session.txt +47 -0
  724. columbina-0.1.0/tests/apps/cli/test_a_session_at_the_terminal.py +220 -0
  725. columbina-0.1.0/tests/apps/cli/test_a_tool_of_a_server.py +82 -0
  726. columbina-0.1.0/tests/apps/cli/test_approval.py +260 -0
  727. columbina-0.1.0/tests/apps/cli/test_cli.py +1296 -0
  728. columbina-0.1.0/tests/apps/cli/test_lines.py +95 -0
  729. columbina-0.1.0/tests/apps/cli/test_prompt.py +757 -0
  730. columbina-0.1.0/tests/apps/cli/test_status.py +221 -0
  731. columbina-0.1.0/tests/apps/cli/test_terminal.py +171 -0
  732. columbina-0.1.0/tests/apps/cli/test_the_terminal_of_the_tests.py +346 -0
  733. columbina-0.1.0/tests/apps/cli/test_transcript.py +1296 -0
  734. columbina-0.1.0/tests/apps/cli/test_what_the_screen_shows.py +236 -0
  735. columbina-0.1.0/tests/apps/conftest.py +43 -0
  736. columbina-0.1.0/tests/apps/serve/conftest.py +23 -0
  737. columbina-0.1.0/tests/apps/serve/test_approval.py +513 -0
  738. columbina-0.1.0/tests/apps/serve/test_commands.py +888 -0
  739. columbina-0.1.0/tests/apps/serve/test_handshake.py +363 -0
  740. columbina-0.1.0/tests/apps/serve/test_rpc.py +390 -0
  741. columbina-0.1.0/tests/apps/serve/test_sessions.py +661 -0
  742. columbina-0.1.0/tests/apps/serve/test_skills.py +141 -0
  743. columbina-0.1.0/tests/apps/serve/test_turns.py +379 -0
  744. columbina-0.1.0/tests/apps/serve/test_wire.py +659 -0
  745. columbina-0.1.0/tests/apps/snapshots/fix_a_repository.txt +38 -0
  746. columbina-0.1.0/tests/apps/test_a_killed_run_is_taken_up.py +142 -0
  747. columbina-0.1.0/tests/apps/test_a_long_session.py +303 -0
  748. columbina-0.1.0/tests/apps/test_base_program.py +677 -0
  749. columbina-0.1.0/tests/apps/test_extensions.py +522 -0
  750. columbina-0.1.0/tests/apps/test_fix_a_repository.py +167 -0
  751. columbina-0.1.0/tests/apps/test_guide_extensions.py +114 -0
  752. columbina-0.1.0/tests/apps/test_headless.py +262 -0
  753. columbina-0.1.0/tests/apps/test_hooks_command.py +819 -0
  754. columbina-0.1.0/tests/apps/test_launcher.py +1369 -0
  755. columbina-0.1.0/tests/apps/test_sandbox_run.py +294 -0
  756. columbina-0.1.0/tests/apps/test_serve_process.py +342 -0
  757. columbina-0.1.0/tests/apps/test_services_at_the_command_line.py +1515 -0
  758. columbina-0.1.0/tests/apps/test_setup.py +2129 -0
  759. columbina-0.1.0/tests/apps/test_stored_sessions.py +539 -0
  760. columbina-0.1.0/tests/apps/test_terminal_text.py +186 -0
  761. columbina-0.1.0/tests/benchmarks/test_check.py +128 -0
  762. columbina-0.1.0/tests/benchmarks/test_cli.py +317 -0
  763. columbina-0.1.0/tests/benchmarks/test_database.py +134 -0
  764. columbina-0.1.0/tests/benchmarks/test_generate.py +215 -0
  765. columbina-0.1.0/tests/benchmarks/test_grade.py +437 -0
  766. columbina-0.1.0/tests/benchmarks/test_ollama.py +67 -0
  767. columbina-0.1.0/tests/benchmarks/test_plugins.py +128 -0
  768. columbina-0.1.0/tests/benchmarks/test_run.py +373 -0
  769. columbina-0.1.0/tests/benchmarks/test_table.py +125 -0
  770. columbina-0.1.0/tests/benchmarks/test_task.py +67 -0
  771. columbina-0.1.0/tests/benchmarks/test_tasks.py +19 -0
  772. columbina-0.1.0/tests/builtin_tools/conftest.py +35 -0
  773. columbina-0.1.0/tests/builtin_tools/test_edit.py +453 -0
  774. columbina-0.1.0/tests/builtin_tools/test_glob.py +340 -0
  775. columbina-0.1.0/tests/builtin_tools/test_grep.py +1030 -0
  776. columbina-0.1.0/tests/builtin_tools/test_grep_worker.py +257 -0
  777. columbina-0.1.0/tests/builtin_tools/test_in_the_loop.py +165 -0
  778. columbina-0.1.0/tests/builtin_tools/test_read.py +960 -0
  779. columbina-0.1.0/tests/builtin_tools/test_shell.py +1275 -0
  780. columbina-0.1.0/tests/builtin_tools/test_subagent.py +464 -0
  781. columbina-0.1.0/tests/builtin_tools/test_write.py +395 -0
  782. columbina-0.1.0/tests/commands/test_builtin.py +259 -0
  783. columbina-0.1.0/tests/commands/test_commands.py +197 -0
  784. columbina-0.1.0/tests/commands/test_compact.py +206 -0
  785. columbina-0.1.0/tests/commands/test_fork.py +172 -0
  786. columbina-0.1.0/tests/commands/test_skills.py +306 -0
  787. columbina-0.1.0/tests/commands/test_todos.py +73 -0
  788. columbina-0.1.0/tests/compaction/test_region.py +213 -0
  789. columbina-0.1.0/tests/compaction/test_seam.py +220 -0
  790. columbina-0.1.0/tests/compaction/test_service.py +1794 -0
  791. columbina-0.1.0/tests/compaction/test_summary.py +501 -0
  792. columbina-0.1.0/tests/compaction/test_trim.py +701 -0
  793. columbina-0.1.0/tests/conftest.py +80 -0
  794. columbina-0.1.0/tests/context/test_instructions.py +680 -0
  795. columbina-0.1.0/tests/context/test_runtime.py +234 -0
  796. columbina-0.1.0/tests/fixtures/mcp_server.py +43 -0
  797. columbina-0.1.0/tests/fixtures/recorded/README.md +45 -0
  798. columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/recording.yml +26 -0
  799. columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/requests.txt +36 -0
  800. columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/session.v1.jsonl +32 -0
  801. columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/work/AGENTS.md +3 -0
  802. columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/work/calc.py +6 -0
  803. columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/work/check.py +26 -0
  804. columbina-0.1.0/tests/fixtures/recorded/deepseek-read/recording.yml +11 -0
  805. columbina-0.1.0/tests/fixtures/recorded/deepseek-read/requests.txt +13 -0
  806. columbina-0.1.0/tests/fixtures/recorded/deepseek-read/session.v1.jsonl +16 -0
  807. columbina-0.1.0/tests/fixtures/recorded/deepseek-read/work/notes.txt +5 -0
  808. columbina-0.1.0/tests/fs/test_bound.py +364 -0
  809. columbina-0.1.0/tests/fs/test_fs.py +843 -0
  810. columbina-0.1.0/tests/fs/test_locate.py +408 -0
  811. columbina-0.1.0/tests/fs/test_patterns.py +94 -0
  812. columbina-0.1.0/tests/fs/test_replace.py +620 -0
  813. columbina-0.1.0/tests/fs/test_walk.py +363 -0
  814. columbina-0.1.0/tests/guard/test_budget.py +323 -0
  815. columbina-0.1.0/tests/hooks/test_bridge.py +1445 -0
  816. columbina-0.1.0/tests/hooks/test_config.py +427 -0
  817. columbina-0.1.0/tests/hooks/test_files.py +231 -0
  818. columbina-0.1.0/tests/hooks/test_run.py +674 -0
  819. columbina-0.1.0/tests/kernel/fixtures/compose_demo/__init__.py +1 -0
  820. columbina-0.1.0/tests/kernel/fixtures/compose_demo/clock.py +16 -0
  821. columbina-0.1.0/tests/kernel/fixtures/compose_demo/explodes.py +3 -0
  822. columbina-0.1.0/tests/kernel/fixtures/compose_demo/extras.py +32 -0
  823. columbina-0.1.0/tests/kernel/fixtures/compose_demo/keys.py +7 -0
  824. columbina-0.1.0/tests/kernel/fixtures/compose_demo/reporter.py +18 -0
  825. columbina-0.1.0/tests/kernel/test_cancellation.py +393 -0
  826. columbina-0.1.0/tests/kernel/test_compose_layers.py +260 -0
  827. columbina-0.1.0/tests/kernel/test_compose_mount.py +180 -0
  828. columbina-0.1.0/tests/kernel/test_declarations.py +80 -0
  829. columbina-0.1.0/tests/kernel/test_dependencies.py +343 -0
  830. columbina-0.1.0/tests/kernel/test_eager_tasks.py +95 -0
  831. columbina-0.1.0/tests/kernel/test_effects.py +220 -0
  832. columbina-0.1.0/tests/kernel/test_events_async.py +196 -0
  833. columbina-0.1.0/tests/kernel/test_events_sync.py +214 -0
  834. columbina-0.1.0/tests/kernel/test_fiber_states.py +163 -0
  835. columbina-0.1.0/tests/kernel/test_lifecycle_properties.py +341 -0
  836. columbina-0.1.0/tests/kernel/test_plugins.py +353 -0
  837. columbina-0.1.0/tests/kernel/test_public_api.py +69 -0
  838. columbina-0.1.0/tests/kernel/test_reentrancy.py +427 -0
  839. columbina-0.1.0/tests/kernel/test_registry.py +101 -0
  840. columbina-0.1.0/tests/kernel/test_scopes.py +186 -0
  841. columbina-0.1.0/tests/kernel/test_services.py +162 -0
  842. columbina-0.1.0/tests/kernel/test_withdrawal.py +135 -0
  843. columbina-0.1.0/tests/live/test_deepseek.py +95 -0
  844. columbina-0.1.0/tests/live/test_deepseek_cli.py +66 -0
  845. columbina-0.1.0/tests/live/test_deepseek_compaction.py +166 -0
  846. columbina-0.1.0/tests/live/test_deepseek_extensions.py +231 -0
  847. columbina-0.1.0/tests/live/test_deepseek_fix.py +83 -0
  848. columbina-0.1.0/tests/live/test_deepseek_sandbox.py +80 -0
  849. columbina-0.1.0/tests/live/test_deepseek_tokens.py +139 -0
  850. columbina-0.1.0/tests/llm/conftest.py +12 -0
  851. columbina-0.1.0/tests/llm/test_assembler.py +236 -0
  852. columbina-0.1.0/tests/llm/test_credentials.py +1651 -0
  853. columbina-0.1.0/tests/llm/test_openai_chat.py +1847 -0
  854. columbina-0.1.0/tests/llm/test_render.py +228 -0
  855. columbina-0.1.0/tests/llm/test_replay.py +242 -0
  856. columbina-0.1.0/tests/llm/test_runtime.py +888 -0
  857. columbina-0.1.0/tests/llm/test_scripted.py +450 -0
  858. columbina-0.1.0/tests/llm/test_services.py +231 -0
  859. columbina-0.1.0/tests/llm/test_types.py +140 -0
  860. columbina-0.1.0/tests/mcp_client/test_connection.py +2223 -0
  861. columbina-0.1.0/tests/mcp_client/test_offer.py +458 -0
  862. columbina-0.1.0/tests/mcp_client/test_pure.py +457 -0
  863. columbina-0.1.0/tests/mcp_client/test_server_plugin.py +916 -0
  864. columbina-0.1.0/tests/mutation/mutants.py +23075 -0
  865. columbina-0.1.0/tests/mutation/mutate.py +148 -0
  866. columbina-0.1.0/tests/mutation/test_mutants.py +60 -0
  867. columbina-0.1.0/tests/permissions/test_commands.py +286 -0
  868. columbina-0.1.0/tests/permissions/test_decide.py +579 -0
  869. columbina-0.1.0/tests/permissions/test_guard.py +1174 -0
  870. columbina-0.1.0/tests/permissions/test_rules.py +353 -0
  871. columbina-0.1.0/tests/protocol/test_schema.py +62 -0
  872. columbina-0.1.0/tests/protocol/test_tour.py +485 -0
  873. columbina-0.1.0/tests/replay/test_recorded.py +129 -0
  874. columbina-0.1.0/tests/sandbox/test_docker.py +1517 -0
  875. columbina-0.1.0/tests/sandbox/test_docker_kept.py +3081 -0
  876. columbina-0.1.0/tests/sandbox/test_docker_real.py +749 -0
  877. columbina-0.1.0/tests/sandbox/test_sandbox.py +745 -0
  878. columbina-0.1.0/tests/session/test_codec.py +295 -0
  879. columbina-0.1.0/tests/session/test_events.py +151 -0
  880. columbina-0.1.0/tests/session/test_fork.py +331 -0
  881. columbina-0.1.0/tests/session/test_lock.py +55 -0
  882. columbina-0.1.0/tests/session/test_log.py +209 -0
  883. columbina-0.1.0/tests/session/test_log_store.py +159 -0
  884. columbina-0.1.0/tests/session/test_projection.py +251 -0
  885. columbina-0.1.0/tests/session/test_repair.py +351 -0
  886. columbina-0.1.0/tests/session/test_service.py +211 -0
  887. columbina-0.1.0/tests/session/test_store.py +433 -0
  888. columbina-0.1.0/tests/session/test_stored.py +339 -0
  889. columbina-0.1.0/tests/session/test_surface.py +299 -0
  890. columbina-0.1.0/tests/skills/test_files.py +913 -0
  891. columbina-0.1.0/tests/skills/test_skills.py +960 -0
  892. columbina-0.1.0/tests/spill/test_local.py +669 -0
  893. columbina-0.1.0/tests/spill/test_policy.py +589 -0
  894. columbina-0.1.0/tests/subagents/test_seam.py +1020 -0
  895. columbina-0.1.0/tests/subagents/test_spawn.py +580 -0
  896. columbina-0.1.0/tests/subagents/test_types.py +757 -0
  897. columbina-0.1.0/tests/support/__init__.py +1 -0
  898. columbina-0.1.0/tests/support/cases.py +35 -0
  899. columbina-0.1.0/tests/support/coverage_platform.py +42 -0
  900. columbina-0.1.0/tests/support/desk.py +60 -0
  901. columbina-0.1.0/tests/support/engines.py +101 -0
  902. columbina-0.1.0/tests/support/failed.py +143 -0
  903. columbina-0.1.0/tests/support/fake_docker.py +387 -0
  904. columbina-0.1.0/tests/support/fake_ollama.py +40 -0
  905. columbina-0.1.0/tests/support/held.py +46 -0
  906. columbina-0.1.0/tests/support/hooks.py +29 -0
  907. columbina-0.1.0/tests/support/launch.py +76 -0
  908. columbina-0.1.0/tests/support/links.py +48 -0
  909. columbina-0.1.0/tests/support/long_session.py +70 -0
  910. columbina-0.1.0/tests/support/loop.py +128 -0
  911. columbina-0.1.0/tests/support/mcp_servers.py +424 -0
  912. columbina-0.1.0/tests/support/media.py +52 -0
  913. columbina-0.1.0/tests/support/names.py +34 -0
  914. columbina-0.1.0/tests/support/neutral.py +110 -0
  915. columbina-0.1.0/tests/support/ollama.py +30 -0
  916. columbina-0.1.0/tests/support/processes.py +76 -0
  917. columbina-0.1.0/tests/support/protocol.py +158 -0
  918. columbina-0.1.0/tests/support/sandboxes.py +106 -0
  919. columbina-0.1.0/tests/support/scenario.py +47 -0
  920. columbina-0.1.0/tests/support/served.py +62 -0
  921. columbina-0.1.0/tests/support/snapshot.py +26 -0
  922. columbina-0.1.0/tests/support/sockets.py +32 -0
  923. columbina-0.1.0/tests/support/talk.py +70 -0
  924. columbina-0.1.0/tests/support/terminal.py +185 -0
  925. columbina-0.1.0/tests/support/user.py +150 -0
  926. columbina-0.1.0/tests/support/vault.py +258 -0
  927. columbina-0.1.0/tests/support/vt.py +278 -0
  928. columbina-0.1.0/tests/support/wires.py +164 -0
  929. columbina-0.1.0/tests/system_prompt/test_conduct.py +344 -0
  930. columbina-0.1.0/tests/system_prompt/test_system_prompt.py +149 -0
  931. columbina-0.1.0/tests/test_cancellation.py +265 -0
  932. columbina-0.1.0/tests/test_descent.py +131 -0
  933. columbina-0.1.0/tests/test_drawn_cases.py +64 -0
  934. columbina-0.1.0/tests/test_examples.py +348 -0
  935. columbina-0.1.0/tests/test_failed.py +207 -0
  936. columbina-0.1.0/tests/test_package.py +65 -0
  937. columbina-0.1.0/tests/test_performance.py +132 -0
  938. columbina-0.1.0/tests/test_plain_yaml.py +153 -0
  939. columbina-0.1.0/tests/test_process.py +1621 -0
  940. columbina-0.1.0/tests/test_process_overflow.py +331 -0
  941. columbina-0.1.0/tests/test_programs.py +433 -0
  942. columbina-0.1.0/tests/test_project.py +54 -0
  943. columbina-0.1.0/tests/test_retry.py +222 -0
  944. columbina-0.1.0/tests/test_text.py +55 -0
  945. columbina-0.1.0/tests/test_unseen.py +77 -0
  946. columbina-0.1.0/tests/test_withheld.py +196 -0
  947. columbina-0.1.0/tests/todo/test_todo.py +450 -0
  948. columbina-0.1.0/tests/token_meter/test_estimate.py +201 -0
  949. columbina-0.1.0/tests/token_meter/test_meter.py +338 -0
  950. columbina-0.1.0/tests/tools/conftest.py +22 -0
  951. columbina-0.1.0/tests/tools/test_pipeline.py +1695 -0
  952. columbina-0.1.0/tests/tools/test_tool.py +372 -0
  953. columbina-0.1.0/tests/video/test_media.py +304 -0
  954. columbina-0.1.0/uv.lock +1476 -0
@@ -0,0 +1,8 @@
1
+ * text=auto eol=lf
2
+ *.bat text eol=crlf
3
+ *.cmd text eol=crlf
4
+ *.ps1 text eol=crlf
5
+ *.png binary
6
+ *.gif binary
7
+ *.jpg binary
8
+ *.pdf binary
@@ -0,0 +1,70 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: ci-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ check:
17
+ name: ${{ matrix.os }} / Python ${{ matrix.python }}
18
+ runs-on: ${{ matrix.os }}
19
+ # A test that fails and then never ends would hold a runner for six hours.
20
+ timeout-minutes: 30
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ os: [ubuntu-latest, windows-latest, macos-latest]
25
+ python: ["3.11", "3.12"]
26
+ steps:
27
+ - uses: actions/checkout@v7
28
+
29
+ - uses: astral-sh/setup-uv@v10.2.0
30
+ with:
31
+ python-version: ${{ matrix.python }}
32
+
33
+ - name: Install
34
+ run: uv sync --locked
35
+
36
+ - name: Lint
37
+ run: uv run ruff check .
38
+
39
+ - name: Format
40
+ run: uv run ruff format --check .
41
+
42
+ - name: Type check
43
+ run: uv run pyright
44
+
45
+ - name: Images for the tests of the container sandbox and of the benchmark
46
+ if: runner.os == 'Linux'
47
+ run: |
48
+ docker pull -q debian:bookworm-slim
49
+ docker pull -q busybox
50
+ docker pull -q python:3.12-slim
51
+
52
+ - name: Test
53
+ run: uv run python -m coverage run -m pytest --junitxml=junit.xml
54
+ env:
55
+ # On Linux the tests with a real Docker engine have to run. A runner without an
56
+ # engine or without the images fails; it does not pass them over.
57
+ COLUMBINA_REQUIRE_DOCKER: ${{ runner.os == 'Linux' && '1' || '' }}
58
+
59
+ - name: Coverage
60
+ run: uv run python -m coverage report
61
+
62
+ # The log of a run can be read only when one is signed in. Its summary and its
63
+ # annotations can be seen by anyone, and the annotations read through the API.
64
+ # The script needs nothing but Python, so it runs even where the install failed.
65
+ - name: What failed
66
+ if: failure()
67
+ shell: bash
68
+ run: |
69
+ uv run --no-project python tests/support/failed.py junit.xml >> "$GITHUB_STEP_SUMMARY"
70
+ uv run --no-project python tests/support/failed.py --annotations junit.xml
@@ -0,0 +1,79 @@
1
+ name: Release
2
+
3
+ # A tag like v0.1.0 builds the package, tries it, and publishes it on PyPI. No token is kept
4
+ # anywhere: PyPI trusts this workflow of this repository. That is set up once on pypi.org, in
5
+ # the publishing settings of the project: owner Yueran-ML, repository agent-harness, workflow
6
+ # release.yml, environment pypi.
7
+ on:
8
+ push:
9
+ tags: ["v*"]
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ build:
16
+ name: Build and try
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v7
20
+
21
+ - uses: astral-sh/setup-uv@v10.2.0
22
+
23
+ - name: The tag is the version of the package
24
+ run: |
25
+ version="$(uv version --short)"
26
+ if [ "v${version}" != "${GITHUB_REF_NAME}" ]; then
27
+ echo "the tag ${GITHUB_REF_NAME} is not the version ${version} of pyproject.toml"
28
+ exit 1
29
+ fi
30
+
31
+ - name: Build
32
+ run: uv build
33
+
34
+ - name: The description and the metadata
35
+ run: uvx twine check --strict dist/*
36
+
37
+ # In a clean environment of each Python, with a home of its own and a scripted model.
38
+ - name: The wheel installs and runs
39
+ env:
40
+ PYTHON_KEYRING_BACKEND: keyring.backends.null.Keyring
41
+ run: |
42
+ cat > "$RUNNER_TEMP/patch.yml" <<'EOF'
43
+ - id: model
44
+ plugin: columbina.llm.adapters.scripted
45
+ config:
46
+ provider: deepseek
47
+ replies:
48
+ - text: The wheel works.
49
+ EOF
50
+ for version in 3.11 3.12; do
51
+ env="$RUNNER_TEMP/py$version"
52
+ uv venv --python "$version" "$env"
53
+ uv pip install --python "$env" dist/*.whl
54
+ export COLUMBINA_HOME="$RUNNER_TEMP/home$version"
55
+ "$env/bin/columbina" --version
56
+ answer="$("$env/bin/columbina" run --patch "$RUNNER_TEMP/patch.yml" \
57
+ --cwd "$RUNNER_TEMP" "Say whether the wheel works.")"
58
+ test "$answer" = "The wheel works."
59
+ done
60
+
61
+ - uses: actions/upload-artifact@v7
62
+ with:
63
+ name: dist
64
+ path: dist/
65
+
66
+ publish:
67
+ name: Publish on PyPI
68
+ needs: build
69
+ runs-on: ubuntu-latest
70
+ environment: pypi
71
+ permissions:
72
+ id-token: write
73
+ steps:
74
+ - uses: actions/download-artifact@v8
75
+ with:
76
+ name: dist
77
+ path: dist/
78
+
79
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,33 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ build/
6
+ dist/
7
+ .venv/
8
+ venv/
9
+
10
+ # 工具缓存
11
+ .pytest_cache/
12
+ .ruff_cache/
13
+ .pyright/
14
+ .hypothesis/
15
+ .mypy_cache/
16
+ .coverage
17
+ .coverage.*
18
+ htmlcov/
19
+ coverage.xml
20
+
21
+ # 密钥与日志(运行期数据在 COLUMBINA_HOME,不在项目目录里)
22
+ .env
23
+ .env.*
24
+ !.env.example
25
+ *.log
26
+ # The tasks of the benchmark have logs to work on.
27
+ !bench/tasks/**/*.log
28
+
29
+ # 编辑器与系统
30
+ .idea/
31
+ .vscode/
32
+ .DS_Store
33
+ Thumbs.db
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,62 @@
1
+ # Changelog
2
+
3
+ All notable changes are written down here. The version follows
4
+ [Semantic Versioning](https://semver.org/), and while it is below 1.0 a minor version may
5
+ change what was there before.
6
+
7
+ ## 0.1.0 (2026-10-15)
8
+
9
+ The first release. It is the work of ten stages, and each of them ended with something that
10
+ could be run.
11
+
12
+ ### The kernel and the agent
13
+
14
+ - A small asyncio kernel of plugins, with services, scopes and fibers. Everything else is a
15
+ plugin of it, and a program is a profile: a list of plugin entries that may extend another
16
+ profile and be patched.
17
+ - The session log: an append-only log of events that is the truth of a session, with
18
+ projections that are folded from it. A session is taken up again after the program was
19
+ killed, and can be copied from any of its turns.
20
+ - Models over the OpenAI Chat Completions protocol: DeepSeek, OpenAI, OpenRouter, Moonshot,
21
+ Zhipu, SiliconFlow, and Ollama and LM Studio on the same machine, or any service by its
22
+ address. Requests that fail for a passing reason are made again.
23
+ - The tool pipeline and the agent loop: calls are checked, asked about, run, limited and
24
+ logged; a reply that was cut off is taken up again, and the end of every turn says in a
25
+ code why it ended.
26
+
27
+ ### Tools, permissions and the sandbox
28
+
29
+ - Six tools that read, write and edit files, find them, search them and run commands, all
30
+ through one seam of the file system: a file is changed only after it was read, and a path
31
+ that leads out of the working directory is asked about.
32
+ - Three presets of permissions, rules of a project and of the user, and a yes at the prompt
33
+ for one call or for the rest of a session.
34
+ - A sandbox in a Docker container for the commands of the agent: the working directory and
35
+ nothing else of the machine, no network by default, and what a command leaves running is
36
+ stopped with it.
37
+
38
+ ### Long conversations and extensions
39
+
40
+ - An estimate of the size of a conversation, a place for results that are too large to be
41
+ shown whole, and a summary of the oldest part when the conversation comes near the limit
42
+ of its model, with what the summary leaves out said to the model.
43
+ - Skills, hooks, subagents, the tools of servers that speak the Model Context Protocol, and
44
+ plugins of one's own, with an example of a tool.
45
+
46
+ ### Frontends
47
+
48
+ - A terminal interface, `columbina`, and one task at a time with `columbina run`, which can
49
+ report the run as lines of JSON.
50
+ - `columbina serve`, a JSON-RPC service over standard input and output, and a desktop
51
+ application on top of it.
52
+
53
+ ### Measured
54
+
55
+ - A benchmark of 72 tasks that judge themselves: fixes of code, work on files, queries of a
56
+ database and reckonings of several steps. Its tables set two models of DeepSeek against
57
+ each other, each part of the program against the whole of it, and local models in several
58
+ quantizations against each other. On it `deepseek-flash` passed all 216 attempts at the
59
+ tasks, three at each, and `deepseek-v4-pro` 214.
60
+ - Line and branch coverage of 100 percent, more than 3,600 mutants that the tests have to
61
+ notice, pyright in strict mode, and continuous integration on Windows, Linux and macOS
62
+ with Python 3.11 and 3.12. On Linux the tests with a real Docker engine have to run.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yueran Ma
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,84 @@
1
+ Metadata-Version: 2.5
2
+ Name: columbina
3
+ Version: 0.1.0
4
+ Summary: A plugin-based agent harness for Python.
5
+ Project-URL: Homepage, https://github.com/Yueran-ML/agent-harness
6
+ Project-URL: Documentation, https://github.com/Yueran-ML/agent-harness/blob/main/docs/guide.md
7
+ Project-URL: Repository, https://github.com/Yueran-ML/agent-harness
8
+ Project-URL: Issues, https://github.com/Yueran-ML/agent-harness/issues
9
+ Project-URL: Changelog, https://github.com/Yueran-ML/agent-harness/blob/main/CHANGELOG.md
10
+ Author: Yueran Ma
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: agent,asyncio,coding-agent,harness,llm,mcp,tool-calling
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Environment :: Console
16
+ Classifier: Framework :: AsyncIO
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3 :: Only
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
+ Classifier: Topic :: Software Development
25
+ Classifier: Typing :: Typed
26
+ Requires-Python: >=3.11
27
+ Requires-Dist: httpx>=0.27
28
+ Requires-Dist: keyring>=25
29
+ Requires-Dist: prompt-toolkit>=3.0.50
30
+ Requires-Dist: pydantic>=2.9
31
+ Requires-Dist: pyyaml>=6.0.2
32
+ Requires-Dist: rich>=13.9
33
+ Provides-Extra: mcp
34
+ Requires-Dist: mcp<3,>=2.3; extra == 'mcp'
35
+ Description-Content-Type: text/markdown
36
+
37
+ # Columbina
38
+
39
+ **A plugin-based agent harness, written from scratch in Python.**
40
+
41
+ Columbina runs an agent against a language model and lets it work in a directory of yours.
42
+ The agent reads, searches and changes files and runs commands, and what a call may do is
43
+ decided before it runs. Everything that Columbina is made of is a plugin of a small asyncio
44
+ kernel: the model adapter, the tool registry, the session log, and the agent loop itself.
45
+
46
+ - A conversation at the terminal, one task from the command line, and a JSON-RPC service
47
+ for other programs, such as its desktop app.
48
+ - Any model service that speaks the OpenAI Chat Completions protocol; DeepSeek by default,
49
+ and Ollama and LM Studio on the same machine.
50
+ - Long conversations are made shorter by themselves, and a session can be taken up again
51
+ after the program was killed.
52
+ - Skills, hooks, subagents and the tools of MCP servers add to the agent without a change
53
+ to the program.
54
+ - With Docker, the commands of the agent run in a container that has the working directory
55
+ and no network.
56
+
57
+ ## Install
58
+
59
+ ```bash
60
+ pip install columbina # or: uv tool install columbina
61
+ pip install "columbina[mcp]" # with the tools of MCP servers
62
+ ```
63
+
64
+ Columbina needs Python 3.11 or newer.
65
+
66
+ ## First steps
67
+
68
+ ```bash
69
+ columbina setup # choose a service and a model, and store the key
70
+ columbina # a conversation at the terminal
71
+ columbina run "What does this project do? Answer in three sentences."
72
+ ```
73
+
74
+ ## More
75
+
76
+ The [repository](https://github.com/Yueran-ML/agent-harness) has the source, the
77
+ [guide](https://github.com/Yueran-ML/agent-harness/blob/main/docs/guide.md) (also in
78
+ [简体中文](https://github.com/Yueran-ML/agent-harness/blob/main/docs/guide.zh-CN.md) and
79
+ [日本語](https://github.com/Yueran-ML/agent-harness/blob/main/docs/guide.ja.md)), the
80
+ [engineering report](https://github.com/Yueran-ML/agent-harness/blob/main/docs/report.md), and
81
+ the [tables of the benchmark](https://github.com/Yueran-ML/agent-harness/blob/main/docs/bench/README.md)
82
+ that it is measured with.
83
+
84
+ Columbina is released under the MIT license.
@@ -0,0 +1,133 @@
1
+ <p align="center">
2
+ <img src="docs/assets/columbina-wings.png" width="100%"
3
+ alt="満月を背に翼を広げて浮かぶ人影と、その下で静かな水面に立つ廃墟。">
4
+ </p>
5
+ <p align="center">
6
+ <sub>ファンアートです。画像生成 AI で作成しました。<a href="#コロンビーナについて">画像について</a></sub>
7
+ </p>
8
+
9
+ <h1 align="center">Columbina</h1>
10
+
11
+ <p align="center">
12
+ <strong>Python でゼロから書いた、プラグインベースのエージェントハーネス</strong>
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="README.md">English</a> · <a href="README.zh-CN.md">简体中文</a> · <b>日本語</b>
17
+ </p>
18
+
19
+ <p align="center">
20
+ <a href="https://github.com/Yueran-ML/agent-harness/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Yueran-ML/agent-harness/actions/workflows/ci.yml/badge.svg"></a>
21
+ <img alt="Python 3.11 と 3.12" src="https://img.shields.io/badge/python-3.11%20%7C%203.12-8b7fd6?labelColor=1b1b2f&logo=python&logoColor=white">
22
+ <img alt="カバレッジ 100%" src="https://img.shields.io/badge/coverage-100%25-8b7fd6?labelColor=1b1b2f">
23
+ <img alt="型チェック pyright strict モード" src="https://img.shields.io/badge/types-pyright%20strict-8b7fd6?labelColor=1b1b2f">
24
+ <img alt="リント ruff" src="https://img.shields.io/badge/lint-ruff-8b7fd6?labelColor=1b1b2f">
25
+ <img alt="ライセンス MIT" src="https://img.shields.io/badge/license-MIT-8b7fd6?labelColor=1b1b2f">
26
+ </p>
27
+
28
+ <p align="center">
29
+ <a href="#コロンビーナについて">名前</a> ·
30
+ <a href="#概要">概要</a> ·
31
+ <a href="#ダウンロードとセットアップ">ダウンロードとセットアップ</a> ·
32
+ <a href="#ドキュメント">ドキュメント</a>
33
+ </p>
34
+
35
+ ## コロンビーナについて
36
+
37
+ このプロジェクトの名前は、『原神』のキャラクター、コロンビーナ(Columbina)に由来します。彼女は、ファデュイの執行官「十一人のファトゥス」の第三位、「少女」として登場します。ほかの執行官と同じく、名前はイタリアの即興喜劇コンメディア・デッラルテの登場人物から取られており、彼女の場合はコロンビーナ(Colombina)です。彼女の物語はナド・クライを舞台とし、月と関わりがあります。ここにある画像のすべてに月が描かれているのはそのためです。2026 年の初めからはプレイアブルキャラクターになっており、法器を使う星 5 の水元素キャラクターです。
38
+
39
+ 画像は、一人のファンが思い描いた彼女の姿です。作者が画像生成 AI の ChatGPT で作成したもので、公式のイラストではありません。各ファイルは生成されたときのまま保存しており、作成方法を示すコンテンツクレデンシャル(Content Credentials)が含まれています。
40
+
41
+ <p align="center">
42
+ <img src="docs/assets/columbina-ruins.png" width="100%"
43
+ alt="水辺の廃墟に座り、両手の間に小さな光を包んでいる同じ人物。">
44
+ </p>
45
+
46
+ <details>
47
+ <summary>ストーリーボード</summary>
48
+ <br>
49
+ <p align="center">
50
+ <img src="docs/assets/columbina-storyboard.png" width="100%"
51
+ alt="同じ人物を描いた十二の小さな場面。Columbina という名前と、そのためのマークが入っています。">
52
+ </p>
53
+
54
+ この画像の中の文字は、画像の一部です。プログラムの機能の一覧ではありません。
55
+
56
+ </details>
57
+
58
+ 画像を見て彼女に興味を持った方は、ぜひゲームの中で彼女に会ってみてください。『原神』は基本プレイ無料です。公式サイトは [genshin.hoyoverse.com](https://genshin.hoyoverse.com/) で、中国本土向けの公式サイトは [ys.mihoyo.com](https://ys.mihoyo.com/) です。
59
+
60
+ 『原神』とそのキャラクターは HoYoverse(miHoYo)に帰属します。このプロジェクトはファンによるもので、HoYoverse とは関係がなく、公認も受けていません。画像はソフトウェアの一部ではなく、以下のライセンスの対象外です。詳しくは [`docs/assets`](docs/assets/README.md) をご覧ください。
61
+
62
+ ## 概要
63
+
64
+ Columbina は、エージェントを言語モデルにつなぎ、指定したディレクトリの中で作業させます。エージェントはファイルの読み取り、検索、変更とコマンドの実行を行い、それぞれの呼び出しに何が許されるかは実行の前に判定されます。Columbina を構成するものはすべて、小さな asyncio カーネルのプラグインです。モデルアダプター、ツールレジストリ、セッションログ、そしてエージェントループ自体もそうです。
65
+
66
+ **ステータス**:開発の初期です。全十段階のうち七つが完了し、残る三つのうち、ベンチマーク、PyPI パッケージ、ほかのプログラム向けのサービスはでき上がっています。`columbina` はターミナルでエージェントと対話し、`columbina run` はタスクを一つ渡して回答を出力します。エージェントは OpenAI Chat Completions プロトコルでモデルと通信し、既定では DeepSeek を使います。モデルの上限を超えた対話は自動的に圧縮され、プログラムが強制終了された後でもセッションを再開できます。スキル、フック、サブエージェント、MCP サーバーのツールで、プログラムに手を加えずにエージェントを拡張できます。Docker があれば、エージェントのコマンドは、作業ディレクトリだけがありネットワークのないコンテナの中で実行できます。
67
+
68
+ ## ダウンロードとセットアップ
69
+
70
+ Columbina には Python 3.11 以降と [uv](https://docs.astral.sh/uv/) が必要です。まだ PyPI には公開していないため、git でこのリポジトリをクローンして入手します。
71
+
72
+ ```bash
73
+ git clone https://github.com/Yueran-ML/agent-harness.git
74
+ cd agent-harness
75
+ uv sync
76
+ ```
77
+
78
+ `uv sync` は、クローンの中に仮想環境を作り、Columbina に必要なものをそこにインストールします。
79
+
80
+ モデルはサービスから提供され、サービスには API キーが必要です。Columbina はその両方を尋ねます。クローンの中で次のコマンドを実行します。
81
+
82
+ ```bash
83
+ uv run columbina setup
84
+ ```
85
+
86
+ どのサービスを使うか、どのモデルを使うか、そしてキーを尋ねます。DeepSeek、OpenAI、OpenRouter、Moonshot、Zhipu、SiliconFlow は名前で選べます。同じマシンで動く Ollama と LM Studio も同様です。OpenAI Chat Completions プロトコルに対応するほかのサービスは、アドレスを指定して追加できます。キーは入力しても画面に表示されません。キーはシステムのキーリングに保存されます。Windows の資格情報マネージャーや macOS のキーチェーンがこれに当たります。システムにキーリングがない場合は、`~/.columbina` の中のファイルに保存されます。保管の方法は[ガイド](docs/guide.ja.md#サービスとキー)で説明しています。
87
+
88
+ キーは環境変数で渡すこともでき、環境変数は保存したキーより優先されます。何も選んでいない場合、Columbina は DeepSeek に接続し、`DEEPSEEK_API_KEY` を読みます。Windows の PowerShell では次のようにします。
89
+
90
+ ```powershell
91
+ $env:DEEPSEEK_API_KEY = "your-key"
92
+ ```
93
+
94
+ Linux や macOS のシェルでは次のようにします。
95
+
96
+ ```bash
97
+ export DEEPSEEK_API_KEY="your-key"
98
+ ```
99
+
100
+ このように設定した変数は、そのウィンドウを閉じるまで有効です。キーはリクエストを送るときに読み取られます。プロファイルや保存されたセッションに書き込まれることはなく、エラーメッセージからも、表示や保存の前に必ず取り除かれます。
101
+
102
+ クローンの中で次のコマンドを実行すると、ターミナルでの対話が始まります。
103
+
104
+ ```bash
105
+ uv run columbina
106
+ ```
107
+
108
+ コマンドラインでタスクを渡すこともでき、その場合は回答が出力されます。
109
+
110
+ ```bash
111
+ uv run columbina run "What does this project do? Answer in three sentences."
112
+ ```
113
+
114
+ このように起動すると、エージェントはクローン自体の中で作業します。`--cwd DIR` で別のディレクトリを指定できます。どのディレクトリでもコマンドを使えるようにするには、クローンの中で一度インストールします。
115
+
116
+ ```bash
117
+ uv tool install .
118
+ ```
119
+
120
+ 以後は、どのディレクトリで `columbina` を実行しても、そのディレクトリで対話が始まります。シェルがコマンドを見つけられない場合は、`uv tool update-shell` を実行すると、uv がコマンドをインストールするディレクトリが PATH に追加されます。後で `git pull` をしたときは、`uv tool install . --reinstall` でコマンドを最新にします。
121
+
122
+ ## ドキュメント
123
+
124
+ - [ガイド](docs/guide.ja.md)では、そのほかのことを説明しています。ターミナルとそのコマンド、長い対話、単一タスクの実行、サービスとキー、権限、スキル、フック、サブエージェント、ツールサーバー、Columbina のアーキテクチャ、テストの方法、進捗です。
125
+ - [エンジニアリングレポート](docs/report.md)では、Columbina の組み立て、形を決めた選択、テストの方法、性能を説明しています([中国語版](docs/report.zh-CN.md))。
126
+ - [ベンチマークの表](docs/bench/README.md)には、DeepSeek の二つのモデルでの結果、部分ごとの比較、費用があります。
127
+ - [設計文書](docs/plans/2026-10-09-columbina-design.md)は中国語で書かれています。各段階の計画も同じディレクトリにあります。
128
+ - [`docs/research`](docs/research) には、Columbina が手本にしたハーネスから学んだことをまとめています。
129
+ - [`docs/protocol`](docs/protocol) には、デスクトップアプリがプログラムとやり取りするメッセージを記述しています。
130
+
131
+ ## ライセンス
132
+
133
+ コードとドキュメントには MIT ライセンスを適用します。[LICENSE](LICENSE) をご覧ください。