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.
- columbina-0.1.0/.gitattributes +8 -0
- columbina-0.1.0/.github/workflows/ci.yml +70 -0
- columbina-0.1.0/.github/workflows/release.yml +79 -0
- columbina-0.1.0/.gitignore +33 -0
- columbina-0.1.0/.python-version +1 -0
- columbina-0.1.0/CHANGELOG.md +62 -0
- columbina-0.1.0/LICENSE +21 -0
- columbina-0.1.0/PKG-INFO +84 -0
- columbina-0.1.0/README.ja.md +133 -0
- columbina-0.1.0/README.md +184 -0
- columbina-0.1.0/README.zh-CN.md +133 -0
- columbina-0.1.0/bench/__init__.py +10 -0
- columbina-0.1.0/bench/__main__.py +7 -0
- columbina-0.1.0/bench/check.py +121 -0
- columbina-0.1.0/bench/cli.py +228 -0
- columbina-0.1.0/bench/database.py +166 -0
- columbina-0.1.0/bench/generate/__init__.py +30 -0
- columbina-0.1.0/bench/generate/compute.py +252 -0
- columbina-0.1.0/bench/generate/files.py +33 -0
- columbina-0.1.0/bench/generate/sql.py +297 -0
- columbina-0.1.0/bench/grade.py +289 -0
- columbina-0.1.0/bench/ollama.py +120 -0
- columbina-0.1.0/bench/plugins/__init__.py +1 -0
- columbina-0.1.0/bench/plugins/lookup.py +78 -0
- columbina-0.1.0/bench/plugins/sqlite.py +128 -0
- columbina-0.1.0/bench/run.py +425 -0
- columbina-0.1.0/bench/subsets/matrix.txt +31 -0
- columbina-0.1.0/bench/table.py +165 -0
- columbina-0.1.0/bench/task.py +105 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/checks/test_bill_hidden.py +77 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/reference/bill.py +26 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/reference/money.py +17 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/task.yml +11 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/bill.py +26 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/money.py +17 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-bill-split-cents/workspace/tests/test_bill.py +28 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/checks/test_config_checks.py +109 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/reference/config.py +55 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/reference/envvars.py +41 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/task.yml +13 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/config.py +54 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/envvars.py +15 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-config-env-override/workspace/tests/test_config.py +31 -0
- columbina-0.1.0/bench/tasks/code/code-csv-category-totals/checks/test_report_hidden.py +76 -0
- columbina-0.1.0/bench/tasks/code/code-csv-category-totals/reference/report.py +42 -0
- columbina-0.1.0/bench/tasks/code/code-csv-category-totals/task.yml +11 -0
- columbina-0.1.0/bench/tasks/code/code-csv-category-totals/workspace/report.py +38 -0
- columbina-0.1.0/bench/tasks/code/code-csv-category-totals/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-csv-category-totals/workspace/tests/test_report.py +40 -0
- columbina-0.1.0/bench/tasks/code/code-duration-parsing/checks/test_durations_hidden.py +75 -0
- columbina-0.1.0/bench/tasks/code/code-duration-parsing/reference/durations.py +36 -0
- columbina-0.1.0/bench/tasks/code/code-duration-parsing/task.yml +11 -0
- columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/durations.py +36 -0
- columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/tests/test_durations.py +37 -0
- columbina-0.1.0/bench/tasks/code/code-duration-parsing/workspace/timeouts.py +17 -0
- columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/checks/test_events_checks.py +150 -0
- columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/reference/events.py +50 -0
- columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/task.yml +12 -0
- columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/workspace/events.py +50 -0
- columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-event-bus-unsubscribe/workspace/tests/test_events.py +34 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/checks/test_inventory_checks.py +93 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/reference/warehouse/errors.py +31 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/reference/warehouse/inventory.py +74 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/task.yml +12 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/tests/test_inventory.py +37 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/warehouse/__init__.py +1 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/warehouse/errors.py +21 -0
- columbina-0.1.0/bench/tasks/code/code-inventory-negative-stock/workspace/warehouse/inventory.py +59 -0
- columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/checks/test_lru_hidden.py +102 -0
- columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/reference/lru.py +81 -0
- columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/task.yml +10 -0
- columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/workspace/lru.py +81 -0
- columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-lru-cache-eviction/workspace/tests/test_lru.py +37 -0
- columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/checks/test_mdtable_checks.py +118 -0
- columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/reference/mdtable.py +62 -0
- columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/task.yml +12 -0
- columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/mdtable.py +62 -0
- columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/report.py +14 -0
- columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-markdown-table-widths/workspace/tests/test_mdtable.py +36 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/checks/test_periods_hidden.py +101 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/reference/months.py +25 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/reference/periods.py +42 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/task.yml +12 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/months.py +23 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/periods.py +42 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-month-split-ranges/workspace/tests/test_periods.py +39 -0
- columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/checks/test_retrying_checks.py +122 -0
- columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/reference/retrying.py +44 -0
- columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/task.yml +11 -0
- columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/workspace/retrying.py +44 -0
- columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-retry-last-attempt/workspace/tests/test_retrying.py +41 -0
- columbina-0.1.0/bench/tasks/code/code-semver-precedence/checks/test_versions_hidden.py +99 -0
- columbina-0.1.0/bench/tasks/code/code-semver-precedence/reference/versions.py +86 -0
- columbina-0.1.0/bench/tasks/code/code-semver-precedence/task.yml +11 -0
- columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/release.py +22 -0
- columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/tests/test_versions.py +37 -0
- columbina-0.1.0/bench/tasks/code/code-semver-precedence/workspace/versions.py +80 -0
- columbina-0.1.0/bench/tasks/code/code-slugify-accents/checks/test_slugs_checks.py +68 -0
- columbina-0.1.0/bench/tasks/code/code-slugify-accents/reference/slugs.py +40 -0
- columbina-0.1.0/bench/tasks/code/code-slugify-accents/task.yml +11 -0
- columbina-0.1.0/bench/tasks/code/code-slugify-accents/workspace/slugs.py +37 -0
- columbina-0.1.0/bench/tasks/code/code-slugify-accents/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-slugify-accents/workspace/tests/test_slugs.py +26 -0
- columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/checks/test_ratelimit_hidden.py +109 -0
- columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/reference/ratelimit.py +60 -0
- columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/task.yml +11 -0
- columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/workspace/ratelimit.py +60 -0
- columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-token-bucket-refill/workspace/tests/test_ratelimit.py +33 -0
- columbina-0.1.0/bench/tasks/code/code-word-count-contractions/checks/test_wordfreq_checks.py +66 -0
- columbina-0.1.0/bench/tasks/code/code-word-count-contractions/reference/wordfreq.py +31 -0
- columbina-0.1.0/bench/tasks/code/code-word-count-contractions/task.yml +12 -0
- columbina-0.1.0/bench/tasks/code/code-word-count-contractions/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-word-count-contractions/workspace/tests/test_wordfreq.py +27 -0
- columbina-0.1.0/bench/tasks/code/code-word-count-contractions/workspace/wordfreq.py +30 -0
- columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/checks/test_wrapping_hidden.py +96 -0
- columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/reference/wrapping.py +55 -0
- columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/task.yml +10 -0
- columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/workspace/tests/__init__.py +0 -0
- columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/workspace/tests/test_wrapping.py +26 -0
- columbina-0.1.0/bench/tasks/code/code-wrap-exact-width/workspace/wrapping.py +55 -0
- columbina-0.1.0/bench/tasks/compute/compute-01-factory/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-01-factory/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-01-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-01-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-02-commerce/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-02-commerce/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-02-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-02-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-03-logistics/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-03-logistics/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-03-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-03-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-04-factory/private/values.json +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-04-factory/reference/answer.json +11 -0
- columbina-0.1.0/bench/tasks/compute/compute-04-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-04-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-05-commerce/private/values.json +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-05-commerce/reference/answer.json +11 -0
- columbina-0.1.0/bench/tasks/compute/compute-05-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-05-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-06-logistics/private/values.json +7 -0
- columbina-0.1.0/bench/tasks/compute/compute-06-logistics/reference/answer.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-06-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-06-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-07-factory/private/values.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-07-factory/reference/answer.json +12 -0
- columbina-0.1.0/bench/tasks/compute/compute-07-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-07-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-08-commerce/private/values.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-08-commerce/reference/answer.json +12 -0
- columbina-0.1.0/bench/tasks/compute/compute-08-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-08-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-09-logistics/private/values.json +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-09-logistics/reference/answer.json +11 -0
- columbina-0.1.0/bench/tasks/compute/compute-09-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-09-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-10-factory/private/values.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-10-factory/reference/answer.json +13 -0
- columbina-0.1.0/bench/tasks/compute/compute-10-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-10-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-11-commerce/private/values.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-11-commerce/reference/answer.json +13 -0
- columbina-0.1.0/bench/tasks/compute/compute-11-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-11-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-12-logistics/private/values.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-12-logistics/reference/answer.json +13 -0
- columbina-0.1.0/bench/tasks/compute/compute-12-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-12-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-13-factory/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-13-factory/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-13-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-13-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-14-commerce/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-14-commerce/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-14-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-14-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-15-logistics/private/values.json +7 -0
- columbina-0.1.0/bench/tasks/compute/compute-15-logistics/reference/answer.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-15-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-15-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-16-factory/private/values.json +7 -0
- columbina-0.1.0/bench/tasks/compute/compute-16-factory/reference/answer.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-16-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-16-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-17-commerce/private/values.json +7 -0
- columbina-0.1.0/bench/tasks/compute/compute-17-commerce/reference/answer.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-17-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-17-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-18-logistics/private/values.json +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-18-logistics/reference/answer.json +11 -0
- columbina-0.1.0/bench/tasks/compute/compute-18-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-18-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-19-factory/private/values.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-19-factory/reference/answer.json +12 -0
- columbina-0.1.0/bench/tasks/compute/compute-19-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-19-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-20-commerce/private/values.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-20-commerce/reference/answer.json +12 -0
- columbina-0.1.0/bench/tasks/compute/compute-20-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-20-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-21-logistics/private/values.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-21-logistics/reference/answer.json +12 -0
- columbina-0.1.0/bench/tasks/compute/compute-21-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-21-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-22-factory/private/values.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-22-factory/reference/answer.json +13 -0
- columbina-0.1.0/bench/tasks/compute/compute-22-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-22-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-23-commerce/private/values.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-23-commerce/reference/answer.json +12 -0
- columbina-0.1.0/bench/tasks/compute/compute-23-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-23-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-24-logistics/private/values.json +10 -0
- columbina-0.1.0/bench/tasks/compute/compute-24-logistics/reference/answer.json +13 -0
- columbina-0.1.0/bench/tasks/compute/compute-24-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-24-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-25-factory/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-25-factory/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-25-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-25-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-26-commerce/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-26-commerce/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-26-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-26-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-27-logistics/private/values.json +6 -0
- columbina-0.1.0/bench/tasks/compute/compute-27-logistics/reference/answer.json +9 -0
- columbina-0.1.0/bench/tasks/compute/compute-27-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-27-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-28-factory/private/values.json +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-28-factory/reference/answer.json +11 -0
- columbina-0.1.0/bench/tasks/compute/compute-28-factory/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-28-factory/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-29-commerce/private/values.json +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-29-commerce/reference/answer.json +11 -0
- columbina-0.1.0/bench/tasks/compute/compute-29-commerce/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-29-commerce/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/compute/compute-30-logistics/private/values.json +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-30-logistics/reference/answer.json +11 -0
- columbina-0.1.0/bench/tasks/compute/compute-30-logistics/task.yml +8 -0
- columbina-0.1.0/bench/tasks/compute/compute-30-logistics/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/checks/expected.json +43 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/missing.txt +2 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/2023-q1.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/2023-q2.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/2023-q3.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/board meeting 2023-06.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/archive/reports/drafts/2023-q3-draft.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/notes/ideas.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/reports/2023-q4.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/reports/2024-q1.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/reports/drafts/2024-q2-draft.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/reference/to-archive.txt +11 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/task.yml +10 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/notes/ideas.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q1.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q2.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q3.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2023-q4.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/2024-q1.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/board meeting 2023-06.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/drafts/2023-q3-draft.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/reports/drafts/2024-q2-draft.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-archive-manifest/workspace/to-archive.txt +11 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/checks/expected.json +36 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/data/records.csv +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/data/sample.tmpl +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/docs/guide.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/docs/template.tmp.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/docs/tmp-notes.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/notes.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/src/main.py +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/src/utils/helpers.py +2 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/project/src/utils/old~notes.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/reference/scratch.tmp +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/task.yml +8 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/build.tmp +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/data/records.csv +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/data/records.csv.tmp +2 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/data/sample.tmpl +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/guide.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/guide.md~ +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/template.tmp.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/docs/tmp-notes.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/notes.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/notes.md~ +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/.session.tmp +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/cache.tmp +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/main.py +3 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/main.py~ +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/utils/helpers.py +2 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/utils/helpers.py.tmp +2 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/project/src/utils/old~notes.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-clean-temp/workspace/scratch.tmp +1 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/checks/expected.json +7 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/reference/lists/README.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/reference/lists/beta-testers.txt +4 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/reference/lists/newsletter.txt +8 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/task.yml +9 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/workspace/lists/README.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/workspace/lists/beta-testers.txt +6 -0
- columbina-0.1.0/bench/tasks/files/files-dedupe-lines/workspace/lists/newsletter.txt +13 -0
- columbina-0.1.0/bench/tasks/files/files-extract-errors/checks/expected.json +10 -0
- columbina-0.1.0/bench/tasks/files/files-extract-errors/reference/logs/app.log +21 -0
- columbina-0.1.0/bench/tasks/files/files-extract-errors/reference/logs/errors.log +5 -0
- columbina-0.1.0/bench/tasks/files/files-extract-errors/reference/logs/worker.log +4 -0
- columbina-0.1.0/bench/tasks/files/files-extract-errors/task.yml +9 -0
- columbina-0.1.0/bench/tasks/files/files-extract-errors/workspace/logs/app.log +21 -0
- columbina-0.1.0/bench/tasks/files/files-extract-errors/workspace/logs/worker.log +4 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/checks/expected.json +8 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/INDEX.txt +10 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/ideas.md +7 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/inbox.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/journal/2024-01.md +13 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/journal/2024-02.md +6 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/journal/2024-03.md.bak +1 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/archive/shed.md +4 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/bike repair.md +5 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/budget.csv +3 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/garden.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/projects/kitchen.md +7 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/reading-list.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/reference/notes/scratch.md +0 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/task.yml +11 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/ideas.md +7 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/inbox.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/journal/2024-01.md +13 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/journal/2024-02.md +6 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/journal/2024-03.md.bak +1 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/archive/shed.md +4 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/bike repair.md +5 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/budget.csv +3 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/garden.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/projects/kitchen.md +7 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/reading-list.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-line-count-index/workspace/notes/scratch.md +0 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/checks/expected.json +14 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/report/q1.csv +12 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2023-12.csv +3 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2024-01.csv +5 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2024-02.csv +4 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/2024-03.csv +5 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/reference/sales/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/task.yml +11 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2023-12.csv +3 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2024-01.csv +5 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2024-02.csv +4 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/2024-03.csv +5 -0
- columbina-0.1.0/bench/tasks/files/files-merge-csv/workspace/sales/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/checks/expected.json +6 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/reference/CHANGELOG.md +35 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/reference/README.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/reference/VERSION +1 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/task.yml +11 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/workspace/CHANGELOG.md +35 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/workspace/README.md +9 -0
- columbina-0.1.0/bench/tasks/files/files-normalise-changelog/workspace/VERSION +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/checks/expected.json +13 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/__init__.py +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/cli.py +12 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/data.py +25 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/app/report.py +7 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/docs/usage.md +5 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/tests/test_data.py +14 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/vendor/legacy_client/__init__.py +3 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/reference/vendor/legacy_client/client.py +5 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/task.yml +10 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/__init__.py +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/cli.py +12 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/data.py +25 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/app/report.py +7 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/docs/usage.md +5 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/tests/test_data.py +14 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/vendor/legacy_client/__init__.py +3 -0
- columbina-0.1.0/bench/tasks/files/files-rename-function/workspace/vendor/legacy_client/client.py +5 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/checks/expected.json +39 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023/2023-07-04_1.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023/2023-07-04_2.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023/album.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2023-12-31_3.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-01-05_1.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-01-05_2.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-02-14_10.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/2024-03-02_4.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/IMG_20240105_1.png.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/IMG_20240302_cover.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/VID_20240214_1.mp4.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/reference/photos/captions.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/task.yml +10 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/2023/IMG_20230704_1.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/2023/IMG_20230704_2.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/2023/album.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20231231_3.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240105_1.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240105_1.png.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240105_2.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240214_10.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240302_4.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/IMG_20240302_cover.jpg.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/VID_20240214_1.mp4.txt +1 -0
- columbina-0.1.0/bench/tasks/files/files-rename-photos/workspace/photos/captions.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/checks/expected.json +34 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/LICENSE +2 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/csv/Contacts.CSV +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/csv/budget-2024.csv +4 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/json/settings.json +4 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/md/meeting-notes.md +4 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/md/report.final.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/reference/inbox/txt/todo.txt +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/task.yml +10 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/Contacts.CSV +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/LICENSE +2 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/budget-2024.csv +4 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/meeting-notes.md +4 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/report.final.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/settings.json +4 -0
- columbina-0.1.0/bench/tasks/files/files-sort-by-extension/workspace/inbox/todo.txt +3 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/checks/expected.json +25 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/bundle.txt +35 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/README.md +6 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/config/settings.ini +3 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/data/empty.txt +0 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/data/users.csv +3 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/docs/setup.md +4 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/reference/unpacked/src/app.py +11 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/task.yml +11 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/files/files-unpack-bundle/workspace/bundle.txt +35 -0
- columbina-0.1.0/bench/tasks/files/files-update-config/checks/expected.json +38 -0
- columbina-0.1.0/bench/tasks/files/files-update-config/reference/config/app.json +28 -0
- columbina-0.1.0/bench/tasks/files/files-update-config/reference/config/worker.ini +19 -0
- columbina-0.1.0/bench/tasks/files/files-update-config/task.yml +11 -0
- columbina-0.1.0/bench/tasks/files/files-update-config/workspace/config/app.json +28 -0
- columbina-0.1.0/bench/tasks/files/files-update-config/workspace/config/worker.ini +19 -0
- columbina-0.1.0/bench/tasks/sql/sql-busiest-month/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-busiest-month/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-busiest-month/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-busiest-month/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-busiest-month/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-cancelled-share/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-category-customers/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-category-customers/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-category-customers/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-category-customers/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-category-customers/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-city-average-order/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-city-average-order/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-city-average-order/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-city-average-order/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-city-average-order/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-customers-per-city/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-delivered-revenue/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-first-order-gap/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-frequent-customers/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-large-orders/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-large-orders/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-large-orders/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-large-orders/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-large-orders/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-customers/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-never-ordered-products/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-orders-per-status/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-priciest-per-category/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-revenue-per-category/workspace/README.md +3 -0
- columbina-0.1.0/bench/tasks/sql/sql-top-products/private/changed.sql +275 -0
- columbina-0.1.0/bench/tasks/sql/sql-top-products/private/database.sql +285 -0
- columbina-0.1.0/bench/tasks/sql/sql-top-products/reference/answer.sql +1 -0
- columbina-0.1.0/bench/tasks/sql/sql-top-products/task.yml +10 -0
- columbina-0.1.0/bench/tasks/sql/sql-top-products/workspace/README.md +3 -0
- columbina-0.1.0/docs/bench/README.md +99 -0
- columbina-0.1.0/docs/guide.ja.md +778 -0
- columbina-0.1.0/docs/guide.md +1099 -0
- columbina-0.1.0/docs/guide.zh-CN.md +778 -0
- columbina-0.1.0/docs/plans/2026-10-09-columbina-design.md +994 -0
- columbina-0.1.0/docs/plans/2026-10-09-columbina-stage1-kernel.md +9634 -0
- columbina-0.1.0/docs/plans/2026-10-09-columbina-stage2-loop.md +685 -0
- columbina-0.1.0/docs/plans/2026-10-09-columbina-stage3-tools.md +671 -0
- columbina-0.1.0/docs/plans/2026-10-09-columbina-stage4-cli.md +395 -0
- columbina-0.1.0/docs/plans/2026-10-10-columbina-stage5-context.md +384 -0
- columbina-0.1.0/docs/plans/2026-10-10-columbina-stage6-extensions.md +463 -0
- columbina-0.1.0/docs/plans/2026-10-11-columbina-stage10-serve.md +233 -0
- columbina-0.1.0/docs/plans/2026-10-13-columbina-stage7-sandbox.md +412 -0
- columbina-0.1.0/docs/plans/2026-10-14-columbina-hardening.md +159 -0
- columbina-0.1.0/docs/plans/2026-10-14-columbina-stage8-bench.md +102 -0
- columbina-0.1.0/docs/plans/2026-10-14-columbina-video-design.md +257 -0
- columbina-0.1.0/docs/plans/2026-10-14-columbina-video1.md +154 -0
- columbina-0.1.0/docs/protocol/README.md +517 -0
- columbina-0.1.0/docs/protocol/events.schema.json +2375 -0
- columbina-0.1.0/docs/protocol/samples/tour.jsonl +122 -0
- columbina-0.1.0/docs/pypi.md +48 -0
- columbina-0.1.0/docs/report.md +237 -0
- columbina-0.1.0/docs/report.zh-CN.md +127 -0
- columbina-0.1.0/docs/research/claude-code-digest.md +202 -0
- columbina-0.1.0/docs/research/codex-digest.md +400 -0
- columbina-0.1.0/docs/research/dsh-digest.md +609 -0
- columbina-0.1.0/examples/clock.py +29 -0
- columbina-0.1.0/examples/kernel_demo.py +30 -0
- columbina-0.1.0/examples/no_push.py +29 -0
- columbina-0.1.0/examples/word_count.py +92 -0
- columbina-0.1.0/pyproject.toml +156 -0
- columbina-0.1.0/src/columbina/__init__.py +7 -0
- columbina-0.1.0/src/columbina/__main__.py +5 -0
- columbina-0.1.0/src/columbina/agent/__init__.py +125 -0
- columbina-0.1.0/src/columbina/agent/agent.py +363 -0
- columbina-0.1.0/src/columbina/agent/context.py +44 -0
- columbina-0.1.0/src/columbina/agent/events.py +187 -0
- columbina-0.1.0/src/columbina/agent/inbox.py +166 -0
- columbina-0.1.0/src/columbina/agent/replies.py +43 -0
- columbina-0.1.0/src/columbina/agent_loop/__init__.py +65 -0
- columbina-0.1.0/src/columbina/agent_loop/loop.py +826 -0
- columbina-0.1.0/src/columbina/approval/__init__.py +241 -0
- columbina-0.1.0/src/columbina/apps/__init__.py +19 -0
- columbina-0.1.0/src/columbina/apps/cli/__init__.py +520 -0
- columbina-0.1.0/src/columbina/apps/cli/approval.py +106 -0
- columbina-0.1.0/src/columbina/apps/cli/lines.py +37 -0
- columbina-0.1.0/src/columbina/apps/cli/prompt.py +364 -0
- columbina-0.1.0/src/columbina/apps/cli/status.py +98 -0
- columbina-0.1.0/src/columbina/apps/cli/terminal.py +97 -0
- columbina-0.1.0/src/columbina/apps/cli/transcript.py +495 -0
- columbina-0.1.0/src/columbina/apps/common.py +60 -0
- columbina-0.1.0/src/columbina/apps/headless.py +209 -0
- columbina-0.1.0/src/columbina/apps/hooks.py +298 -0
- columbina-0.1.0/src/columbina/apps/launcher.py +891 -0
- columbina-0.1.0/src/columbina/apps/serve/__init__.py +40 -0
- columbina-0.1.0/src/columbina/apps/serve/rpc.py +291 -0
- columbina-0.1.0/src/columbina/apps/serve/server.py +846 -0
- columbina-0.1.0/src/columbina/apps/serve/wire.py +314 -0
- columbina-0.1.0/src/columbina/apps/sessions.py +150 -0
- columbina-0.1.0/src/columbina/apps/setup.py +943 -0
- columbina-0.1.0/src/columbina/apps/terminal_text.py +96 -0
- columbina-0.1.0/src/columbina/builtin_tools/__init__.py +1 -0
- columbina-0.1.0/src/columbina/builtin_tools/edit.py +163 -0
- columbina-0.1.0/src/columbina/builtin_tools/glob.py +164 -0
- columbina-0.1.0/src/columbina/builtin_tools/grep.py +425 -0
- columbina-0.1.0/src/columbina/builtin_tools/grep_worker.py +107 -0
- columbina-0.1.0/src/columbina/builtin_tools/read.py +387 -0
- columbina-0.1.0/src/columbina/builtin_tools/shell.py +449 -0
- columbina-0.1.0/src/columbina/builtin_tools/subagent.py +192 -0
- columbina-0.1.0/src/columbina/builtin_tools/write.py +81 -0
- columbina-0.1.0/src/columbina/bundles/__init__.py +1 -0
- columbina-0.1.0/src/columbina/bundles/base.yml +96 -0
- columbina-0.1.0/src/columbina/bundles/cli.yml +33 -0
- columbina-0.1.0/src/columbina/bundles/headless.yml +13 -0
- columbina-0.1.0/src/columbina/bundles/minimal.yml +30 -0
- columbina-0.1.0/src/columbina/bundles/serve.yml +33 -0
- columbina-0.1.0/src/columbina/cancellation.py +142 -0
- columbina-0.1.0/src/columbina/commands/__init__.py +156 -0
- columbina-0.1.0/src/columbina/commands/compact.py +74 -0
- columbina-0.1.0/src/columbina/commands/fork.py +62 -0
- columbina-0.1.0/src/columbina/commands/mcp.py +49 -0
- columbina-0.1.0/src/columbina/commands/permissions.py +66 -0
- columbina-0.1.0/src/columbina/commands/sessions.py +61 -0
- columbina-0.1.0/src/columbina/commands/skills.py +107 -0
- columbina-0.1.0/src/columbina/commands/todos.py +31 -0
- columbina-0.1.0/src/columbina/commands/tools.py +43 -0
- columbina-0.1.0/src/columbina/compaction/__init__.py +200 -0
- columbina-0.1.0/src/columbina/compaction/basic/__init__.py +661 -0
- columbina-0.1.0/src/columbina/compaction/basic/region.py +134 -0
- columbina-0.1.0/src/columbina/compaction/basic/summary.py +240 -0
- columbina-0.1.0/src/columbina/compaction/basic/trim.py +304 -0
- columbina-0.1.0/src/columbina/context/__init__.py +6 -0
- columbina-0.1.0/src/columbina/context/instructions.py +229 -0
- columbina-0.1.0/src/columbina/context/runtime.py +40 -0
- columbina-0.1.0/src/columbina/data.py +9 -0
- columbina-0.1.0/src/columbina/descent.py +54 -0
- columbina-0.1.0/src/columbina/frontmatter.py +164 -0
- columbina-0.1.0/src/columbina/fs/__init__.py +646 -0
- columbina-0.1.0/src/columbina/fs/bound.py +635 -0
- columbina-0.1.0/src/columbina/fs/paths.py +244 -0
- columbina-0.1.0/src/columbina/fs/patterns.py +60 -0
- columbina-0.1.0/src/columbina/fs/walk.py +162 -0
- columbina-0.1.0/src/columbina/guard/__init__.py +8 -0
- columbina-0.1.0/src/columbina/guard/budget.py +139 -0
- columbina-0.1.0/src/columbina/hooks/__init__.py +628 -0
- columbina-0.1.0/src/columbina/hooks/config.py +378 -0
- columbina-0.1.0/src/columbina/hooks/files.py +115 -0
- columbina-0.1.0/src/columbina/hooks/run.py +366 -0
- columbina-0.1.0/src/columbina/kernel/__init__.py +100 -0
- columbina-0.1.0/src/columbina/kernel/compose.py +391 -0
- columbina-0.1.0/src/columbina/kernel/context.py +362 -0
- columbina-0.1.0/src/columbina/kernel/errors.py +41 -0
- columbina-0.1.0/src/columbina/kernel/events.py +267 -0
- columbina-0.1.0/src/columbina/kernel/fiber.py +802 -0
- columbina-0.1.0/src/columbina/kernel/plugin.py +99 -0
- columbina-0.1.0/src/columbina/kernel/registry.py +70 -0
- columbina-0.1.0/src/columbina/kernel/services.py +18 -0
- columbina-0.1.0/src/columbina/llm/__init__.py +96 -0
- columbina-0.1.0/src/columbina/llm/adapters/__init__.py +1 -0
- columbina-0.1.0/src/columbina/llm/adapters/openai_chat.py +673 -0
- columbina-0.1.0/src/columbina/llm/adapters/replay.py +151 -0
- columbina-0.1.0/src/columbina/llm/adapters/scripted.py +254 -0
- columbina-0.1.0/src/columbina/llm/assembler.py +155 -0
- columbina-0.1.0/src/columbina/llm/credentials.py +819 -0
- columbina-0.1.0/src/columbina/llm/render.py +92 -0
- columbina-0.1.0/src/columbina/llm/runtime.py +309 -0
- columbina-0.1.0/src/columbina/llm/services.py +180 -0
- columbina-0.1.0/src/columbina/llm/types.py +261 -0
- columbina-0.1.0/src/columbina/mcp/__init__.py +127 -0
- columbina-0.1.0/src/columbina/mcp/server/__init__.py +191 -0
- columbina-0.1.0/src/columbina/mcp/server/connection.py +879 -0
- columbina-0.1.0/src/columbina/mcp/server/content.py +112 -0
- columbina-0.1.0/src/columbina/mcp/server/names.py +60 -0
- columbina-0.1.0/src/columbina/mcp/server/offer.py +164 -0
- columbina-0.1.0/src/columbina/mcp/server/reach.py +214 -0
- columbina-0.1.0/src/columbina/mcp/server/schema.py +108 -0
- columbina-0.1.0/src/columbina/mcp/server/served.py +162 -0
- columbina-0.1.0/src/columbina/permissions/__init__.py +743 -0
- columbina-0.1.0/src/columbina/permissions/commands.py +141 -0
- columbina-0.1.0/src/columbina/permissions/rules.py +286 -0
- columbina-0.1.0/src/columbina/places.py +162 -0
- columbina-0.1.0/src/columbina/plain_yaml.py +109 -0
- columbina-0.1.0/src/columbina/process.py +903 -0
- columbina-0.1.0/src/columbina/programs.py +147 -0
- columbina-0.1.0/src/columbina/project.py +38 -0
- columbina-0.1.0/src/columbina/py.typed +0 -0
- columbina-0.1.0/src/columbina/retry.py +118 -0
- columbina-0.1.0/src/columbina/sandbox/__init__.py +380 -0
- columbina-0.1.0/src/columbina/sandbox/base.py +128 -0
- columbina-0.1.0/src/columbina/sandbox/docker.py +2063 -0
- columbina-0.1.0/src/columbina/session/__init__.py +129 -0
- columbina-0.1.0/src/columbina/session/codec.py +209 -0
- columbina-0.1.0/src/columbina/session/errors.py +25 -0
- columbina-0.1.0/src/columbina/session/events.py +297 -0
- columbina-0.1.0/src/columbina/session/lock.py +52 -0
- columbina-0.1.0/src/columbina/session/log.py +271 -0
- columbina-0.1.0/src/columbina/session/projection.py +128 -0
- columbina-0.1.0/src/columbina/session/repair.py +115 -0
- columbina-0.1.0/src/columbina/session/service.py +247 -0
- columbina-0.1.0/src/columbina/session/store.py +391 -0
- columbina-0.1.0/src/columbina/session/surface.py +77 -0
- columbina-0.1.0/src/columbina/shells.py +55 -0
- columbina-0.1.0/src/columbina/skills/__init__.py +387 -0
- columbina-0.1.0/src/columbina/skills/files.py +340 -0
- columbina-0.1.0/src/columbina/spill/__init__.py +133 -0
- columbina-0.1.0/src/columbina/spill/local.py +299 -0
- columbina-0.1.0/src/columbina/spill/policy.py +222 -0
- columbina-0.1.0/src/columbina/subagents/__init__.py +573 -0
- columbina-0.1.0/src/columbina/subagents/spawn.py +146 -0
- columbina-0.1.0/src/columbina/subagents/types.py +379 -0
- columbina-0.1.0/src/columbina/system_prompt/__init__.py +121 -0
- columbina-0.1.0/src/columbina/system_prompt/conduct.md +65 -0
- columbina-0.1.0/src/columbina/system_prompt/conduct.py +108 -0
- columbina-0.1.0/src/columbina/text.py +33 -0
- columbina-0.1.0/src/columbina/todo/__init__.py +266 -0
- columbina-0.1.0/src/columbina/token_meter/__init__.py +281 -0
- columbina-0.1.0/src/columbina/tools/__init__.py +74 -0
- columbina-0.1.0/src/columbina/tools/pipeline.py +597 -0
- columbina-0.1.0/src/columbina/tools/tool.py +273 -0
- columbina-0.1.0/src/columbina/unseen.py +52 -0
- columbina-0.1.0/src/columbina/video/__init__.py +6 -0
- columbina-0.1.0/src/columbina/video/media.py +155 -0
- columbina-0.1.0/src/columbina/withheld.py +135 -0
- columbina-0.1.0/tests/agent/test_agents.py +428 -0
- columbina-0.1.0/tests/agent/test_inbox.py +247 -0
- columbina-0.1.0/tests/agent/test_replies.py +123 -0
- columbina-0.1.0/tests/agent_loop/snapshots/a_session.txt +73 -0
- columbina-0.1.0/tests/agent_loop/test_cancel.py +814 -0
- columbina-0.1.0/tests/agent_loop/test_context.py +720 -0
- columbina-0.1.0/tests/agent_loop/test_hooks.py +540 -0
- columbina-0.1.0/tests/agent_loop/test_maintenance.py +313 -0
- columbina-0.1.0/tests/agent_loop/test_properties.py +672 -0
- columbina-0.1.0/tests/agent_loop/test_request_shape.py +116 -0
- columbina-0.1.0/tests/agent_loop/test_rest.py +118 -0
- columbina-0.1.0/tests/agent_loop/test_tools.py +719 -0
- columbina-0.1.0/tests/agent_loop/test_turns.py +654 -0
- columbina-0.1.0/tests/approval/test_approval.py +375 -0
- columbina-0.1.0/tests/apps/cli/snapshots/a_session_at_the_terminal.txt +58 -0
- columbina-0.1.0/tests/apps/cli/snapshots/the_screen_of_a_session.txt +47 -0
- columbina-0.1.0/tests/apps/cli/test_a_session_at_the_terminal.py +220 -0
- columbina-0.1.0/tests/apps/cli/test_a_tool_of_a_server.py +82 -0
- columbina-0.1.0/tests/apps/cli/test_approval.py +260 -0
- columbina-0.1.0/tests/apps/cli/test_cli.py +1296 -0
- columbina-0.1.0/tests/apps/cli/test_lines.py +95 -0
- columbina-0.1.0/tests/apps/cli/test_prompt.py +757 -0
- columbina-0.1.0/tests/apps/cli/test_status.py +221 -0
- columbina-0.1.0/tests/apps/cli/test_terminal.py +171 -0
- columbina-0.1.0/tests/apps/cli/test_the_terminal_of_the_tests.py +346 -0
- columbina-0.1.0/tests/apps/cli/test_transcript.py +1296 -0
- columbina-0.1.0/tests/apps/cli/test_what_the_screen_shows.py +236 -0
- columbina-0.1.0/tests/apps/conftest.py +43 -0
- columbina-0.1.0/tests/apps/serve/conftest.py +23 -0
- columbina-0.1.0/tests/apps/serve/test_approval.py +513 -0
- columbina-0.1.0/tests/apps/serve/test_commands.py +888 -0
- columbina-0.1.0/tests/apps/serve/test_handshake.py +363 -0
- columbina-0.1.0/tests/apps/serve/test_rpc.py +390 -0
- columbina-0.1.0/tests/apps/serve/test_sessions.py +661 -0
- columbina-0.1.0/tests/apps/serve/test_skills.py +141 -0
- columbina-0.1.0/tests/apps/serve/test_turns.py +379 -0
- columbina-0.1.0/tests/apps/serve/test_wire.py +659 -0
- columbina-0.1.0/tests/apps/snapshots/fix_a_repository.txt +38 -0
- columbina-0.1.0/tests/apps/test_a_killed_run_is_taken_up.py +142 -0
- columbina-0.1.0/tests/apps/test_a_long_session.py +303 -0
- columbina-0.1.0/tests/apps/test_base_program.py +677 -0
- columbina-0.1.0/tests/apps/test_extensions.py +522 -0
- columbina-0.1.0/tests/apps/test_fix_a_repository.py +167 -0
- columbina-0.1.0/tests/apps/test_guide_extensions.py +114 -0
- columbina-0.1.0/tests/apps/test_headless.py +262 -0
- columbina-0.1.0/tests/apps/test_hooks_command.py +819 -0
- columbina-0.1.0/tests/apps/test_launcher.py +1369 -0
- columbina-0.1.0/tests/apps/test_sandbox_run.py +294 -0
- columbina-0.1.0/tests/apps/test_serve_process.py +342 -0
- columbina-0.1.0/tests/apps/test_services_at_the_command_line.py +1515 -0
- columbina-0.1.0/tests/apps/test_setup.py +2129 -0
- columbina-0.1.0/tests/apps/test_stored_sessions.py +539 -0
- columbina-0.1.0/tests/apps/test_terminal_text.py +186 -0
- columbina-0.1.0/tests/benchmarks/test_check.py +128 -0
- columbina-0.1.0/tests/benchmarks/test_cli.py +317 -0
- columbina-0.1.0/tests/benchmarks/test_database.py +134 -0
- columbina-0.1.0/tests/benchmarks/test_generate.py +215 -0
- columbina-0.1.0/tests/benchmarks/test_grade.py +437 -0
- columbina-0.1.0/tests/benchmarks/test_ollama.py +67 -0
- columbina-0.1.0/tests/benchmarks/test_plugins.py +128 -0
- columbina-0.1.0/tests/benchmarks/test_run.py +373 -0
- columbina-0.1.0/tests/benchmarks/test_table.py +125 -0
- columbina-0.1.0/tests/benchmarks/test_task.py +67 -0
- columbina-0.1.0/tests/benchmarks/test_tasks.py +19 -0
- columbina-0.1.0/tests/builtin_tools/conftest.py +35 -0
- columbina-0.1.0/tests/builtin_tools/test_edit.py +453 -0
- columbina-0.1.0/tests/builtin_tools/test_glob.py +340 -0
- columbina-0.1.0/tests/builtin_tools/test_grep.py +1030 -0
- columbina-0.1.0/tests/builtin_tools/test_grep_worker.py +257 -0
- columbina-0.1.0/tests/builtin_tools/test_in_the_loop.py +165 -0
- columbina-0.1.0/tests/builtin_tools/test_read.py +960 -0
- columbina-0.1.0/tests/builtin_tools/test_shell.py +1275 -0
- columbina-0.1.0/tests/builtin_tools/test_subagent.py +464 -0
- columbina-0.1.0/tests/builtin_tools/test_write.py +395 -0
- columbina-0.1.0/tests/commands/test_builtin.py +259 -0
- columbina-0.1.0/tests/commands/test_commands.py +197 -0
- columbina-0.1.0/tests/commands/test_compact.py +206 -0
- columbina-0.1.0/tests/commands/test_fork.py +172 -0
- columbina-0.1.0/tests/commands/test_skills.py +306 -0
- columbina-0.1.0/tests/commands/test_todos.py +73 -0
- columbina-0.1.0/tests/compaction/test_region.py +213 -0
- columbina-0.1.0/tests/compaction/test_seam.py +220 -0
- columbina-0.1.0/tests/compaction/test_service.py +1794 -0
- columbina-0.1.0/tests/compaction/test_summary.py +501 -0
- columbina-0.1.0/tests/compaction/test_trim.py +701 -0
- columbina-0.1.0/tests/conftest.py +80 -0
- columbina-0.1.0/tests/context/test_instructions.py +680 -0
- columbina-0.1.0/tests/context/test_runtime.py +234 -0
- columbina-0.1.0/tests/fixtures/mcp_server.py +43 -0
- columbina-0.1.0/tests/fixtures/recorded/README.md +45 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/recording.yml +26 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/requests.txt +36 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/session.v1.jsonl +32 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/work/AGENTS.md +3 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/work/calc.py +6 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-fix/work/check.py +26 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-read/recording.yml +11 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-read/requests.txt +13 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-read/session.v1.jsonl +16 -0
- columbina-0.1.0/tests/fixtures/recorded/deepseek-read/work/notes.txt +5 -0
- columbina-0.1.0/tests/fs/test_bound.py +364 -0
- columbina-0.1.0/tests/fs/test_fs.py +843 -0
- columbina-0.1.0/tests/fs/test_locate.py +408 -0
- columbina-0.1.0/tests/fs/test_patterns.py +94 -0
- columbina-0.1.0/tests/fs/test_replace.py +620 -0
- columbina-0.1.0/tests/fs/test_walk.py +363 -0
- columbina-0.1.0/tests/guard/test_budget.py +323 -0
- columbina-0.1.0/tests/hooks/test_bridge.py +1445 -0
- columbina-0.1.0/tests/hooks/test_config.py +427 -0
- columbina-0.1.0/tests/hooks/test_files.py +231 -0
- columbina-0.1.0/tests/hooks/test_run.py +674 -0
- columbina-0.1.0/tests/kernel/fixtures/compose_demo/__init__.py +1 -0
- columbina-0.1.0/tests/kernel/fixtures/compose_demo/clock.py +16 -0
- columbina-0.1.0/tests/kernel/fixtures/compose_demo/explodes.py +3 -0
- columbina-0.1.0/tests/kernel/fixtures/compose_demo/extras.py +32 -0
- columbina-0.1.0/tests/kernel/fixtures/compose_demo/keys.py +7 -0
- columbina-0.1.0/tests/kernel/fixtures/compose_demo/reporter.py +18 -0
- columbina-0.1.0/tests/kernel/test_cancellation.py +393 -0
- columbina-0.1.0/tests/kernel/test_compose_layers.py +260 -0
- columbina-0.1.0/tests/kernel/test_compose_mount.py +180 -0
- columbina-0.1.0/tests/kernel/test_declarations.py +80 -0
- columbina-0.1.0/tests/kernel/test_dependencies.py +343 -0
- columbina-0.1.0/tests/kernel/test_eager_tasks.py +95 -0
- columbina-0.1.0/tests/kernel/test_effects.py +220 -0
- columbina-0.1.0/tests/kernel/test_events_async.py +196 -0
- columbina-0.1.0/tests/kernel/test_events_sync.py +214 -0
- columbina-0.1.0/tests/kernel/test_fiber_states.py +163 -0
- columbina-0.1.0/tests/kernel/test_lifecycle_properties.py +341 -0
- columbina-0.1.0/tests/kernel/test_plugins.py +353 -0
- columbina-0.1.0/tests/kernel/test_public_api.py +69 -0
- columbina-0.1.0/tests/kernel/test_reentrancy.py +427 -0
- columbina-0.1.0/tests/kernel/test_registry.py +101 -0
- columbina-0.1.0/tests/kernel/test_scopes.py +186 -0
- columbina-0.1.0/tests/kernel/test_services.py +162 -0
- columbina-0.1.0/tests/kernel/test_withdrawal.py +135 -0
- columbina-0.1.0/tests/live/test_deepseek.py +95 -0
- columbina-0.1.0/tests/live/test_deepseek_cli.py +66 -0
- columbina-0.1.0/tests/live/test_deepseek_compaction.py +166 -0
- columbina-0.1.0/tests/live/test_deepseek_extensions.py +231 -0
- columbina-0.1.0/tests/live/test_deepseek_fix.py +83 -0
- columbina-0.1.0/tests/live/test_deepseek_sandbox.py +80 -0
- columbina-0.1.0/tests/live/test_deepseek_tokens.py +139 -0
- columbina-0.1.0/tests/llm/conftest.py +12 -0
- columbina-0.1.0/tests/llm/test_assembler.py +236 -0
- columbina-0.1.0/tests/llm/test_credentials.py +1651 -0
- columbina-0.1.0/tests/llm/test_openai_chat.py +1847 -0
- columbina-0.1.0/tests/llm/test_render.py +228 -0
- columbina-0.1.0/tests/llm/test_replay.py +242 -0
- columbina-0.1.0/tests/llm/test_runtime.py +888 -0
- columbina-0.1.0/tests/llm/test_scripted.py +450 -0
- columbina-0.1.0/tests/llm/test_services.py +231 -0
- columbina-0.1.0/tests/llm/test_types.py +140 -0
- columbina-0.1.0/tests/mcp_client/test_connection.py +2223 -0
- columbina-0.1.0/tests/mcp_client/test_offer.py +458 -0
- columbina-0.1.0/tests/mcp_client/test_pure.py +457 -0
- columbina-0.1.0/tests/mcp_client/test_server_plugin.py +916 -0
- columbina-0.1.0/tests/mutation/mutants.py +23075 -0
- columbina-0.1.0/tests/mutation/mutate.py +148 -0
- columbina-0.1.0/tests/mutation/test_mutants.py +60 -0
- columbina-0.1.0/tests/permissions/test_commands.py +286 -0
- columbina-0.1.0/tests/permissions/test_decide.py +579 -0
- columbina-0.1.0/tests/permissions/test_guard.py +1174 -0
- columbina-0.1.0/tests/permissions/test_rules.py +353 -0
- columbina-0.1.0/tests/protocol/test_schema.py +62 -0
- columbina-0.1.0/tests/protocol/test_tour.py +485 -0
- columbina-0.1.0/tests/replay/test_recorded.py +129 -0
- columbina-0.1.0/tests/sandbox/test_docker.py +1517 -0
- columbina-0.1.0/tests/sandbox/test_docker_kept.py +3081 -0
- columbina-0.1.0/tests/sandbox/test_docker_real.py +749 -0
- columbina-0.1.0/tests/sandbox/test_sandbox.py +745 -0
- columbina-0.1.0/tests/session/test_codec.py +295 -0
- columbina-0.1.0/tests/session/test_events.py +151 -0
- columbina-0.1.0/tests/session/test_fork.py +331 -0
- columbina-0.1.0/tests/session/test_lock.py +55 -0
- columbina-0.1.0/tests/session/test_log.py +209 -0
- columbina-0.1.0/tests/session/test_log_store.py +159 -0
- columbina-0.1.0/tests/session/test_projection.py +251 -0
- columbina-0.1.0/tests/session/test_repair.py +351 -0
- columbina-0.1.0/tests/session/test_service.py +211 -0
- columbina-0.1.0/tests/session/test_store.py +433 -0
- columbina-0.1.0/tests/session/test_stored.py +339 -0
- columbina-0.1.0/tests/session/test_surface.py +299 -0
- columbina-0.1.0/tests/skills/test_files.py +913 -0
- columbina-0.1.0/tests/skills/test_skills.py +960 -0
- columbina-0.1.0/tests/spill/test_local.py +669 -0
- columbina-0.1.0/tests/spill/test_policy.py +589 -0
- columbina-0.1.0/tests/subagents/test_seam.py +1020 -0
- columbina-0.1.0/tests/subagents/test_spawn.py +580 -0
- columbina-0.1.0/tests/subagents/test_types.py +757 -0
- columbina-0.1.0/tests/support/__init__.py +1 -0
- columbina-0.1.0/tests/support/cases.py +35 -0
- columbina-0.1.0/tests/support/coverage_platform.py +42 -0
- columbina-0.1.0/tests/support/desk.py +60 -0
- columbina-0.1.0/tests/support/engines.py +101 -0
- columbina-0.1.0/tests/support/failed.py +143 -0
- columbina-0.1.0/tests/support/fake_docker.py +387 -0
- columbina-0.1.0/tests/support/fake_ollama.py +40 -0
- columbina-0.1.0/tests/support/held.py +46 -0
- columbina-0.1.0/tests/support/hooks.py +29 -0
- columbina-0.1.0/tests/support/launch.py +76 -0
- columbina-0.1.0/tests/support/links.py +48 -0
- columbina-0.1.0/tests/support/long_session.py +70 -0
- columbina-0.1.0/tests/support/loop.py +128 -0
- columbina-0.1.0/tests/support/mcp_servers.py +424 -0
- columbina-0.1.0/tests/support/media.py +52 -0
- columbina-0.1.0/tests/support/names.py +34 -0
- columbina-0.1.0/tests/support/neutral.py +110 -0
- columbina-0.1.0/tests/support/ollama.py +30 -0
- columbina-0.1.0/tests/support/processes.py +76 -0
- columbina-0.1.0/tests/support/protocol.py +158 -0
- columbina-0.1.0/tests/support/sandboxes.py +106 -0
- columbina-0.1.0/tests/support/scenario.py +47 -0
- columbina-0.1.0/tests/support/served.py +62 -0
- columbina-0.1.0/tests/support/snapshot.py +26 -0
- columbina-0.1.0/tests/support/sockets.py +32 -0
- columbina-0.1.0/tests/support/talk.py +70 -0
- columbina-0.1.0/tests/support/terminal.py +185 -0
- columbina-0.1.0/tests/support/user.py +150 -0
- columbina-0.1.0/tests/support/vault.py +258 -0
- columbina-0.1.0/tests/support/vt.py +278 -0
- columbina-0.1.0/tests/support/wires.py +164 -0
- columbina-0.1.0/tests/system_prompt/test_conduct.py +344 -0
- columbina-0.1.0/tests/system_prompt/test_system_prompt.py +149 -0
- columbina-0.1.0/tests/test_cancellation.py +265 -0
- columbina-0.1.0/tests/test_descent.py +131 -0
- columbina-0.1.0/tests/test_drawn_cases.py +64 -0
- columbina-0.1.0/tests/test_examples.py +348 -0
- columbina-0.1.0/tests/test_failed.py +207 -0
- columbina-0.1.0/tests/test_package.py +65 -0
- columbina-0.1.0/tests/test_performance.py +132 -0
- columbina-0.1.0/tests/test_plain_yaml.py +153 -0
- columbina-0.1.0/tests/test_process.py +1621 -0
- columbina-0.1.0/tests/test_process_overflow.py +331 -0
- columbina-0.1.0/tests/test_programs.py +433 -0
- columbina-0.1.0/tests/test_project.py +54 -0
- columbina-0.1.0/tests/test_retry.py +222 -0
- columbina-0.1.0/tests/test_text.py +55 -0
- columbina-0.1.0/tests/test_unseen.py +77 -0
- columbina-0.1.0/tests/test_withheld.py +196 -0
- columbina-0.1.0/tests/todo/test_todo.py +450 -0
- columbina-0.1.0/tests/token_meter/test_estimate.py +201 -0
- columbina-0.1.0/tests/token_meter/test_meter.py +338 -0
- columbina-0.1.0/tests/tools/conftest.py +22 -0
- columbina-0.1.0/tests/tools/test_pipeline.py +1695 -0
- columbina-0.1.0/tests/tools/test_tool.py +372 -0
- columbina-0.1.0/tests/video/test_media.py +304 -0
- columbina-0.1.0/uv.lock +1476 -0
|
@@ -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.
|
columbina-0.1.0/LICENSE
ADDED
|
@@ -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.
|
columbina-0.1.0/PKG-INFO
ADDED
|
@@ -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) をご覧ください。
|