clibo 1.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.
- clibo-1.1.0/.claude/scheduled_tasks.lock +1 -0
- clibo-1.1.0/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
- clibo-1.1.0/.github/ISSUE_TEMPLATE/feature_request.md +32 -0
- clibo-1.1.0/.github/pull_request_template.md +26 -0
- clibo-1.1.0/.github/workflows/ci.yml +32 -0
- clibo-1.1.0/.github/workflows/publish.yml +33 -0
- clibo-1.1.0/.github/workflows/release.yml +60 -0
- clibo-1.1.0/.gitignore +22 -0
- clibo-1.1.0/AGENTS.md +107 -0
- clibo-1.1.0/CHANGELOG.md +124 -0
- clibo-1.1.0/CONTRIBUTING.md +78 -0
- clibo-1.1.0/LICENSE +21 -0
- clibo-1.1.0/PKG-INFO +356 -0
- clibo-1.1.0/PLAN.md +104 -0
- clibo-1.1.0/PROGRESS.md +1356 -0
- clibo-1.1.0/README.md +330 -0
- clibo-1.1.0/clibo/__init__.py +8 -0
- clibo-1.1.0/clibo/admin.py +151 -0
- clibo-1.1.0/clibo/catalog.py +109 -0
- clibo-1.1.0/clibo/clis/__init__.py +147 -0
- clibo-1.1.0/clibo/clis/bills.py +212 -0
- clibo-1.1.0/clibo/clis/birthdays.py +214 -0
- clibo-1.1.0/clibo/clis/bookmark.py +204 -0
- clibo-1.1.0/clibo/clis/books.py +252 -0
- clibo-1.1.0/clibo/clis/brag.py +199 -0
- clibo-1.1.0/clibo/clis/budget.py +179 -0
- clibo-1.1.0/clibo/clis/caffeine.py +401 -0
- clibo-1.1.0/clibo/clis/calorie.py +288 -0
- clibo-1.1.0/clibo/clis/car.py +200 -0
- clibo-1.1.0/clibo/clis/chores.py +183 -0
- clibo-1.1.0/clibo/clis/clients.py +252 -0
- clibo-1.1.0/clibo/clis/crm.py +234 -0
- clibo-1.1.0/clibo/clis/cv.py +306 -0
- clibo-1.1.0/clibo/clis/dashboard.py +161 -0
- clibo-1.1.0/clibo/clis/debt.py +212 -0
- clibo-1.1.0/clibo/clis/documents.py +265 -0
- clibo-1.1.0/clibo/clis/dreams.py +247 -0
- clibo-1.1.0/clibo/clis/events.py +216 -0
- clibo-1.1.0/clibo/clis/expense.py +253 -0
- clibo-1.1.0/clibo/clis/films.py +207 -0
- clibo-1.1.0/clibo/clis/flashcards.py +204 -0
- clibo-1.1.0/clibo/clis/focus.py +208 -0
- clibo-1.1.0/clibo/clis/followup.py +196 -0
- clibo-1.1.0/clibo/clis/gifts.py +173 -0
- clibo-1.1.0/clibo/clis/goals.py +251 -0
- clibo-1.1.0/clibo/clis/gratitude.py +206 -0
- clibo-1.1.0/clibo/clis/groceries.py +144 -0
- clibo-1.1.0/clibo/clis/habit.py +270 -0
- clibo-1.1.0/clibo/clis/home.py +166 -0
- clibo-1.1.0/clibo/clis/ideas.py +246 -0
- clibo-1.1.0/clibo/clis/income.py +234 -0
- clibo-1.1.0/clibo/clis/invoice.py +236 -0
- clibo-1.1.0/clibo/clis/jobs.py +219 -0
- clibo-1.1.0/clibo/clis/journal.py +237 -0
- clibo-1.1.0/clibo/clis/leads.py +242 -0
- clibo-1.1.0/clibo/clis/lessons.py +198 -0
- clibo-1.1.0/clibo/clis/meals.py +187 -0
- clibo-1.1.0/clibo/clis/meditate.py +215 -0
- clibo-1.1.0/clibo/clis/meds.py +265 -0
- clibo-1.1.0/clibo/clis/meetings.py +231 -0
- clibo-1.1.0/clibo/clis/mileage.py +232 -0
- clibo-1.1.0/clibo/clis/mood.py +176 -0
- clibo-1.1.0/clibo/clis/network.py +168 -0
- clibo-1.1.0/clibo/clis/networth.py +222 -0
- clibo-1.1.0/clibo/clis/notes.py +214 -0
- clibo-1.1.0/clibo/clis/pantry.py +178 -0
- clibo-1.1.0/clibo/clis/period.py +225 -0
- clibo-1.1.0/clibo/clis/pets.py +251 -0
- clibo-1.1.0/clibo/clis/plants.py +186 -0
- clibo-1.1.0/clibo/clis/quotes.py +188 -0
- clibo-1.1.0/clibo/clis/recipes.py +222 -0
- clibo-1.1.0/clibo/clis/savings.py +239 -0
- clibo-1.1.0/clibo/clis/sleep.py +198 -0
- clibo-1.1.0/clibo/clis/split.py +229 -0
- clibo-1.1.0/clibo/clis/steps.py +337 -0
- clibo-1.1.0/clibo/clis/stretches.py +239 -0
- clibo-1.1.0/clibo/clis/subs.py +206 -0
- clibo-1.1.0/clibo/clis/time.py +245 -0
- clibo-1.1.0/clibo/clis/tip.py +319 -0
- clibo-1.1.0/clibo/clis/todo.py +233 -0
- clibo-1.1.0/clibo/clis/travel.py +283 -0
- clibo-1.1.0/clibo/clis/vitals.py +262 -0
- clibo-1.1.0/clibo/clis/water.py +171 -0
- clibo-1.1.0/clibo/clis/weight.py +175 -0
- clibo-1.1.0/clibo/clis/wishlist.py +176 -0
- clibo-1.1.0/clibo/clis/worklog.py +184 -0
- clibo-1.1.0/clibo/clis/workout.py +218 -0
- clibo-1.1.0/clibo/core/__init__.py +1 -0
- clibo-1.1.0/clibo/core/base.py +186 -0
- clibo-1.1.0/clibo/core/config.py +37 -0
- clibo-1.1.0/clibo/core/db.py +104 -0
- clibo-1.1.0/clibo/core/output.py +147 -0
- clibo-1.1.0/clibo/core/settings.py +45 -0
- clibo-1.1.0/clibo/dashboard.py +256 -0
- clibo-1.1.0/clibo/main.py +441 -0
- clibo-1.1.0/clibo/recent.py +242 -0
- clibo-1.1.0/clibo/search.py +150 -0
- clibo-1.1.0/clibo/tags.py +75 -0
- clibo-1.1.0/clibo/weekly.py +282 -0
- clibo-1.1.0/clibo/widgets.py +375 -0
- clibo-1.1.0/docs/ADDING_A_TOOL.md +68 -0
- clibo-1.1.0/docs/PHILOSOPHY.md +100 -0
- clibo-1.1.0/docs/SCHEMA.md +1001 -0
- clibo-1.1.0/examples/README.md +24 -0
- clibo-1.1.0/examples/daily_brief.py +101 -0
- clibo-1.1.0/examples/daily_brief.sh +47 -0
- clibo-1.1.0/examples/find_and_act.py +53 -0
- clibo-1.1.0/install.sh +20 -0
- clibo-1.1.0/pyproject.toml +65 -0
- clibo-1.1.0/scripts/demo.sh +59 -0
- clibo-1.1.0/scripts/dump_schema.py +107 -0
- clibo-1.1.0/skills/README.md +28 -0
- clibo-1.1.0/skills/bills/SKILL.md +41 -0
- clibo-1.1.0/skills/birthdays/SKILL.md +39 -0
- clibo-1.1.0/skills/bookmark/SKILL.md +39 -0
- clibo-1.1.0/skills/books/SKILL.md +40 -0
- clibo-1.1.0/skills/brag/SKILL.md +41 -0
- clibo-1.1.0/skills/budget/SKILL.md +41 -0
- clibo-1.1.0/skills/caffeine/SKILL.md +58 -0
- clibo-1.1.0/skills/calorie/SKILL.md +43 -0
- clibo-1.1.0/skills/car/SKILL.md +42 -0
- clibo-1.1.0/skills/chores/SKILL.md +41 -0
- clibo-1.1.0/skills/clients/SKILL.md +40 -0
- clibo-1.1.0/skills/crm/SKILL.md +40 -0
- clibo-1.1.0/skills/cv/SKILL.md +45 -0
- clibo-1.1.0/skills/dashboard/SKILL.md +47 -0
- clibo-1.1.0/skills/debt/SKILL.md +40 -0
- clibo-1.1.0/skills/documents/SKILL.md +53 -0
- clibo-1.1.0/skills/dreams/SKILL.md +41 -0
- clibo-1.1.0/skills/events/SKILL.md +39 -0
- clibo-1.1.0/skills/expense/SKILL.md +40 -0
- clibo-1.1.0/skills/films/SKILL.md +36 -0
- clibo-1.1.0/skills/flashcards/SKILL.md +46 -0
- clibo-1.1.0/skills/focus/SKILL.md +41 -0
- clibo-1.1.0/skills/followup/SKILL.md +40 -0
- clibo-1.1.0/skills/gifts/SKILL.md +38 -0
- clibo-1.1.0/skills/goals/SKILL.md +41 -0
- clibo-1.1.0/skills/gratitude/SKILL.md +38 -0
- clibo-1.1.0/skills/groceries/SKILL.md +36 -0
- clibo-1.1.0/skills/habit/SKILL.md +41 -0
- clibo-1.1.0/skills/home/SKILL.md +38 -0
- clibo-1.1.0/skills/ideas/SKILL.md +44 -0
- clibo-1.1.0/skills/income/SKILL.md +40 -0
- clibo-1.1.0/skills/invoice/SKILL.md +44 -0
- clibo-1.1.0/skills/jobs/SKILL.md +39 -0
- clibo-1.1.0/skills/journal/SKILL.md +42 -0
- clibo-1.1.0/skills/leads/SKILL.md +42 -0
- clibo-1.1.0/skills/lessons/SKILL.md +39 -0
- clibo-1.1.0/skills/meals/SKILL.md +39 -0
- clibo-1.1.0/skills/meditate/SKILL.md +40 -0
- clibo-1.1.0/skills/meds/SKILL.md +41 -0
- clibo-1.1.0/skills/meetings/SKILL.md +40 -0
- clibo-1.1.0/skills/mileage/SKILL.md +39 -0
- clibo-1.1.0/skills/mood/SKILL.md +40 -0
- clibo-1.1.0/skills/network/SKILL.md +37 -0
- clibo-1.1.0/skills/networth/SKILL.md +41 -0
- clibo-1.1.0/skills/notes/SKILL.md +41 -0
- clibo-1.1.0/skills/pantry/SKILL.md +37 -0
- clibo-1.1.0/skills/period/SKILL.md +44 -0
- clibo-1.1.0/skills/pets/SKILL.md +40 -0
- clibo-1.1.0/skills/plants/SKILL.md +40 -0
- clibo-1.1.0/skills/quotes/SKILL.md +36 -0
- clibo-1.1.0/skills/recipes/SKILL.md +41 -0
- clibo-1.1.0/skills/savings/SKILL.md +43 -0
- clibo-1.1.0/skills/sleep/SKILL.md +41 -0
- clibo-1.1.0/skills/split/SKILL.md +43 -0
- clibo-1.1.0/skills/steps/SKILL.md +47 -0
- clibo-1.1.0/skills/stretches/SKILL.md +45 -0
- clibo-1.1.0/skills/subs/SKILL.md +41 -0
- clibo-1.1.0/skills/time/SKILL.md +41 -0
- clibo-1.1.0/skills/tip/SKILL.md +49 -0
- clibo-1.1.0/skills/todo/SKILL.md +43 -0
- clibo-1.1.0/skills/travel/SKILL.md +42 -0
- clibo-1.1.0/skills/vitals/SKILL.md +47 -0
- clibo-1.1.0/skills/water/SKILL.md +39 -0
- clibo-1.1.0/skills/weight/SKILL.md +38 -0
- clibo-1.1.0/skills/wishlist/SKILL.md +42 -0
- clibo-1.1.0/skills/worklog/SKILL.md +37 -0
- clibo-1.1.0/skills/workout/SKILL.md +41 -0
- clibo-1.1.0/tests/conftest.py +43 -0
- clibo-1.1.0/tests/test_add_alias.py +60 -0
- clibo-1.1.0/tests/test_admin.py +55 -0
- clibo-1.1.0/tests/test_bills.py +44 -0
- clibo-1.1.0/tests/test_birthdays.py +55 -0
- clibo-1.1.0/tests/test_bookmark.py +47 -0
- clibo-1.1.0/tests/test_books.py +61 -0
- clibo-1.1.0/tests/test_brag.py +39 -0
- clibo-1.1.0/tests/test_budget.py +46 -0
- clibo-1.1.0/tests/test_caffeine.py +173 -0
- clibo-1.1.0/tests/test_calorie.py +42 -0
- clibo-1.1.0/tests/test_car.py +88 -0
- clibo-1.1.0/tests/test_chores.py +43 -0
- clibo-1.1.0/tests/test_clients.py +45 -0
- clibo-1.1.0/tests/test_crm.py +51 -0
- clibo-1.1.0/tests/test_cv.py +73 -0
- clibo-1.1.0/tests/test_dashboard.py +56 -0
- clibo-1.1.0/tests/test_debt.py +47 -0
- clibo-1.1.0/tests/test_doctor.py +30 -0
- clibo-1.1.0/tests/test_documents.py +189 -0
- clibo-1.1.0/tests/test_dreams.py +66 -0
- clibo-1.1.0/tests/test_dump_schema.py +34 -0
- clibo-1.1.0/tests/test_events.py +52 -0
- clibo-1.1.0/tests/test_expense.py +46 -0
- clibo-1.1.0/tests/test_films.py +47 -0
- clibo-1.1.0/tests/test_flashcards.py +68 -0
- clibo-1.1.0/tests/test_focus.py +41 -0
- clibo-1.1.0/tests/test_followup.py +47 -0
- clibo-1.1.0/tests/test_gifts.py +39 -0
- clibo-1.1.0/tests/test_goals.py +55 -0
- clibo-1.1.0/tests/test_gratitude.py +52 -0
- clibo-1.1.0/tests/test_groceries.py +43 -0
- clibo-1.1.0/tests/test_habit.py +55 -0
- clibo-1.1.0/tests/test_home.py +41 -0
- clibo-1.1.0/tests/test_ideas.py +51 -0
- clibo-1.1.0/tests/test_import.py +63 -0
- clibo-1.1.0/tests/test_income.py +42 -0
- clibo-1.1.0/tests/test_init.py +51 -0
- clibo-1.1.0/tests/test_invoice.py +47 -0
- clibo-1.1.0/tests/test_jobs.py +46 -0
- clibo-1.1.0/tests/test_journal.py +42 -0
- clibo-1.1.0/tests/test_leads.py +41 -0
- clibo-1.1.0/tests/test_lessons.py +53 -0
- clibo-1.1.0/tests/test_meals.py +44 -0
- clibo-1.1.0/tests/test_meditate.py +43 -0
- clibo-1.1.0/tests/test_meds.py +49 -0
- clibo-1.1.0/tests/test_meetings.py +43 -0
- clibo-1.1.0/tests/test_migrations.py +82 -0
- clibo-1.1.0/tests/test_mileage.py +46 -0
- clibo-1.1.0/tests/test_mood.py +39 -0
- clibo-1.1.0/tests/test_network.py +39 -0
- clibo-1.1.0/tests/test_networth.py +38 -0
- clibo-1.1.0/tests/test_notes.py +43 -0
- clibo-1.1.0/tests/test_pantry.py +49 -0
- clibo-1.1.0/tests/test_parse_date.py +130 -0
- clibo-1.1.0/tests/test_period.py +46 -0
- clibo-1.1.0/tests/test_pets.py +54 -0
- clibo-1.1.0/tests/test_plants.py +43 -0
- clibo-1.1.0/tests/test_quotes.py +58 -0
- clibo-1.1.0/tests/test_recent.py +56 -0
- clibo-1.1.0/tests/test_recipes.py +43 -0
- clibo-1.1.0/tests/test_savings.py +46 -0
- clibo-1.1.0/tests/test_search.py +61 -0
- clibo-1.1.0/tests/test_sleep.py +36 -0
- clibo-1.1.0/tests/test_split.py +39 -0
- clibo-1.1.0/tests/test_steps.py +128 -0
- clibo-1.1.0/tests/test_stretches.py +102 -0
- clibo-1.1.0/tests/test_subs.py +42 -0
- clibo-1.1.0/tests/test_tags.py +69 -0
- clibo-1.1.0/tests/test_time.py +47 -0
- clibo-1.1.0/tests/test_tip.py +120 -0
- clibo-1.1.0/tests/test_today.py +58 -0
- clibo-1.1.0/tests/test_todo.py +56 -0
- clibo-1.1.0/tests/test_travel.py +53 -0
- clibo-1.1.0/tests/test_vitals.py +41 -0
- clibo-1.1.0/tests/test_water.py +36 -0
- clibo-1.1.0/tests/test_week.py +65 -0
- clibo-1.1.0/tests/test_weight.py +29 -0
- clibo-1.1.0/tests/test_wishlist.py +37 -0
- clibo-1.1.0/tests/test_worklog.py +41 -0
- clibo-1.1.0/tests/test_workout.py +75 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"sessionId":"64da017d-3a40-4db0-8a48-f0cdcdb0e0d6","pid":49315,"procStart":"Fri May 22 16:44:14 2026","acquiredAt":1779469388744}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ๐ Bug report
|
|
3
|
+
about: Report something clibo does wrong
|
|
4
|
+
labels: bug
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What happened
|
|
8
|
+
|
|
9
|
+
<!-- Describe the bug in 1-2 sentences. -->
|
|
10
|
+
|
|
11
|
+
## To reproduce
|
|
12
|
+
|
|
13
|
+
The smallest sequence of `clibo ...` commands that produces the bug:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
clibo โฆ
|
|
17
|
+
clibo โฆ
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## What you expected to happen
|
|
21
|
+
|
|
22
|
+
## What actually happened
|
|
23
|
+
|
|
24
|
+
Paste the full output / traceback. If it's terminal output, drop it in a code
|
|
25
|
+
block so the formatting survives.
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
โฆ
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Environment
|
|
32
|
+
|
|
33
|
+
Run `clibo doctor --json` and paste the result:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
โฆ
|
|
37
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: โจ Feature request
|
|
3
|
+
about: Suggest a new tool, command or improvement
|
|
4
|
+
labels: enhancement
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What you'd like
|
|
8
|
+
|
|
9
|
+
<!-- One paragraph describing the feature. -->
|
|
10
|
+
|
|
11
|
+
## Why it matters
|
|
12
|
+
|
|
13
|
+
<!-- The use case it unlocks. If it's a new tool, who would use it daily? -->
|
|
14
|
+
|
|
15
|
+
## Sketch
|
|
16
|
+
|
|
17
|
+
If you're proposing a new sub-command, what would it look like?
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
clibo <tool> <verb> ...
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
What does `--json` return?
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
โฆ
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Alternatives
|
|
30
|
+
|
|
31
|
+
Anything else you considered or any existing tool that already does most of
|
|
32
|
+
this?
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Thanks for contributing! A small checklist keeps clibo consistent across all
|
|
3
|
+
50+ tools. Tick whatever applies; delete sections that don't.
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
## What this PR does
|
|
7
|
+
|
|
8
|
+
<!-- One paragraph. -->
|
|
9
|
+
|
|
10
|
+
## Checklist
|
|
11
|
+
|
|
12
|
+
### For a new tool
|
|
13
|
+
|
|
14
|
+
- [ ] Module in `clibo/clis/<tool>.py` follows `docs/ADDING_A_TOOL.md`.
|
|
15
|
+
- [ ] Namespaced `__tablename__` (e.g. `<tool>_<thing>`).
|
|
16
|
+
- [ ] Every command accepts `--json` and uses `core.output` helpers.
|
|
17
|
+
- [ ] Registered in `clibo/clis/__init__.py` (imports **and** `ALL`).
|
|
18
|
+
- [ ] Tests at `tests/test_<tool>.py` cover create, list/show, `--json` shape, stats, an error path.
|
|
19
|
+
- [ ] Micro-skill at `skills/<tool>/SKILL.md` with frontmatter, commands, examples, and a *For agents* section.
|
|
20
|
+
- [ ] Box ticked in `PLAN.md`; entry appended to `PROGRESS.md`.
|
|
21
|
+
|
|
22
|
+
### Always
|
|
23
|
+
|
|
24
|
+
- [ ] `./.venv/bin/pytest` is green.
|
|
25
|
+
- [ ] Smoke-tested by hand, including `--json`.
|
|
26
|
+
- [ ] No `Co-Authored-By` trailer, no "Generated with โฆ" line, no LLM mentions in commit messages.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
17
|
+
uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: ${{ matrix.python-version }}
|
|
20
|
+
- name: Install
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install --upgrade pip
|
|
23
|
+
pip install -e ".[dev]"
|
|
24
|
+
- name: Lint with ruff
|
|
25
|
+
run: ruff check clibo/ tests/ scripts/
|
|
26
|
+
- name: Run tests
|
|
27
|
+
run: pytest
|
|
28
|
+
- name: Smoke-test the CLI
|
|
29
|
+
run: |
|
|
30
|
+
clibo info
|
|
31
|
+
clibo calorie log "ci test" -k 100
|
|
32
|
+
clibo calorie today --json
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: astral-sh/setup-uv@v4
|
|
13
|
+
with:
|
|
14
|
+
python-version: "3.12"
|
|
15
|
+
- run: uv sync --all-extras --dev
|
|
16
|
+
- run: uv run pytest tests/
|
|
17
|
+
- run: uv run ruff check clibo/ tests/ scripts/
|
|
18
|
+
|
|
19
|
+
publish:
|
|
20
|
+
needs: test
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.12"
|
|
27
|
+
- run: pip install build twine
|
|
28
|
+
- run: python -m build
|
|
29
|
+
- run: twine check dist/*
|
|
30
|
+
- run: twine upload dist/*
|
|
31
|
+
env:
|
|
32
|
+
TWINE_USERNAME: __token__
|
|
33
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*.*.*'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write # needed to create the release & upload assets
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build-and-release:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
|
|
22
|
+
- name: Build wheel + sdist
|
|
23
|
+
run: |
|
|
24
|
+
python -m pip install --upgrade pip build
|
|
25
|
+
python -m build
|
|
26
|
+
|
|
27
|
+
- name: Show artifacts
|
|
28
|
+
run: ls -la dist/
|
|
29
|
+
|
|
30
|
+
- name: Sanity-check version matches the tag
|
|
31
|
+
run: |
|
|
32
|
+
tag="${GITHUB_REF#refs/tags/v}"
|
|
33
|
+
ver=$(python -c "import tomllib,sys; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
|
34
|
+
if [ "$tag" != "$ver" ]; then
|
|
35
|
+
echo "Tag $tag does not match pyproject version $ver" >&2
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
- name: Create or update the GitHub release
|
|
40
|
+
env:
|
|
41
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
42
|
+
run: |
|
|
43
|
+
tag="${GITHUB_REF#refs/tags/}"
|
|
44
|
+
if ! gh release view "$tag" >/dev/null 2>&1; then
|
|
45
|
+
gh release create "$tag" \
|
|
46
|
+
--title "clibo $tag" \
|
|
47
|
+
--notes "Automated release for $tag. See [CHANGELOG.md](https://github.com/${GITHUB_REPOSITORY}/blob/main/CHANGELOG.md) for details."
|
|
48
|
+
fi
|
|
49
|
+
gh release upload "$tag" dist/* --clobber
|
|
50
|
+
|
|
51
|
+
- name: Publish to PyPI (only if PYPI_API_TOKEN is configured)
|
|
52
|
+
env:
|
|
53
|
+
PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
|
|
54
|
+
if: env.PYPI_API_TOKEN != ''
|
|
55
|
+
run: |
|
|
56
|
+
python -m pip install --upgrade twine
|
|
57
|
+
python -m twine upload dist/* \
|
|
58
|
+
--username __token__ \
|
|
59
|
+
--password "$PYPI_API_TOKEN" \
|
|
60
|
+
--non-interactive
|
clibo-1.1.0/.gitignore
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
.venv/
|
|
9
|
+
venv/
|
|
10
|
+
|
|
11
|
+
# Tooling
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
.ruff_cache/
|
|
14
|
+
.mypy_cache/
|
|
15
|
+
|
|
16
|
+
# clibo local data (never commit a user's database)
|
|
17
|
+
*.db
|
|
18
|
+
*.db-journal
|
|
19
|
+
.clibo/
|
|
20
|
+
|
|
21
|
+
# OS
|
|
22
|
+
.DS_Store
|
clibo-1.1.0/AGENTS.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Agents guide
|
|
2
|
+
|
|
3
|
+
This file is for **AI agents** (Claude Code, Codex, Aider, OpenCode, โฆ) that
|
|
4
|
+
will be calling clibo on a user's machine. If you are a human contributor,
|
|
5
|
+
read [`docs/ADDING_A_TOOL.md`](docs/ADDING_A_TOOL.md) instead.
|
|
6
|
+
|
|
7
|
+
## What clibo is
|
|
8
|
+
|
|
9
|
+
A box of **50 local-first CLI tools** under one `clibo` command, all writing
|
|
10
|
+
to a single SQLite file at `~/.clibo/clibo.db`. There is no network, no
|
|
11
|
+
account, no cloud โ installing clibo is enough.
|
|
12
|
+
|
|
13
|
+
Each tool is a sub-command: `clibo calorie`, `clibo crm`, `clibo todo`, โฆ Run
|
|
14
|
+
`clibo info --json` for the full list, or `clibo <tool> --help` for any tool.
|
|
15
|
+
|
|
16
|
+
## The contract every command keeps
|
|
17
|
+
|
|
18
|
+
| Rule | Why it matters |
|
|
19
|
+
|---|---|
|
|
20
|
+
| Every command accepts `--json`. | Stdout becomes a clean, parseable JSON document. |
|
|
21
|
+
| Mutations return the affected record. | `add`/`log`/`edit` emit the created/updated object โ no follow-up read required. |
|
|
22
|
+
| Deletes return `{"deleted": ID}`. | One-shot confirmation. |
|
|
23
|
+
| Errors go to **stderr** with non-zero exit code. | Use the exit code and read stderr to recover. |
|
|
24
|
+
| Verbs are predictable. | `add` (or a domain verb like `log`, `drink`, `take`), `list`, `show`, `edit`, `rm`, `stats`. |
|
|
25
|
+
| Free-form IDs accept names too. | Most tools resolve a positional argument as numeric ID *or* case-insensitive name (`clibo habit check "Read 10 pages"`). |
|
|
26
|
+
| Dates are forgiving. | `today`, `yesterday`, `tomorrow`, `YYYY-MM-DD`, `DD.MM`, `MM/DD`. |
|
|
27
|
+
|
|
28
|
+
## Three integrating commands you'll use a lot
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
clibo today --json # one snapshot across 12 tools โ fastest "what's going on?"
|
|
32
|
+
clibo search Q --json # full-text search across 22 text-bearing tables
|
|
33
|
+
clibo export --json # dump the entire local state to one JSON document
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`clibo doctor --json` returns `{"healthy": true, ...}` โ use it as a smoke
|
|
37
|
+
check before doing real work.
|
|
38
|
+
|
|
39
|
+
## Per-tool skills
|
|
40
|
+
|
|
41
|
+
Every tool ships a micro-skill in [`skills/<tool>/SKILL.md`](skills/) with
|
|
42
|
+
YAML frontmatter compatible with Claude Code Skills. Each skill has:
|
|
43
|
+
|
|
44
|
+
- a `name` and `description` for skill-selection,
|
|
45
|
+
- a command table with flags,
|
|
46
|
+
- copy-paste examples,
|
|
47
|
+
- a **For agents** section that documents the exact JSON output.
|
|
48
|
+
|
|
49
|
+
If you can read one file from this repo to learn a tool, read its
|
|
50
|
+
`skills/<tool>/SKILL.md`.
|
|
51
|
+
|
|
52
|
+
## Common agent recipes
|
|
53
|
+
|
|
54
|
+
### Log a meal
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
clibo calorie log "oatmeal with berries" --kcal 320 --protein 12 --carbs 48 --fat 6 -m breakfast --json
|
|
58
|
+
```
|
|
59
|
+
Returns the created entry; check `data["id"]` if you need to edit it later.
|
|
60
|
+
|
|
61
|
+
### Find every mention of a topic
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
clibo search "acme" --json
|
|
65
|
+
```
|
|
66
|
+
Returns `{"query": "acme", "count": N, "results": [{"source", "id", "snippet"}, ...]}`.
|
|
67
|
+
`source` is the tool name; `id` is the row ID in that tool's table.
|
|
68
|
+
|
|
69
|
+
### Read the whole picture
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
clibo today --json # everything actionable today
|
|
73
|
+
path=$(clibo export --json | jq -r .path); cat $path # entire DB as JSON (all tables)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`clibo export --json` returns `{"path", "tables", "rows"}` โ the dump itself
|
|
77
|
+
is written to `path` so it can be reused later.
|
|
78
|
+
|
|
79
|
+
### Mutate by name without a separate lookup
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
clibo habit check "Read 10 pages" --json
|
|
83
|
+
clibo crm touch "Anna Petrova" --json
|
|
84
|
+
clibo savings deposit "Vacation" 200 --json
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Detect that clibo is installed and working
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
clibo doctor --json | jq .healthy # โ true
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Things to avoid
|
|
94
|
+
|
|
95
|
+
- **Don't shell out to `sqlite3` directly.** The schema may evolve between
|
|
96
|
+
versions; use the CLI. If you need bulk reads, use `clibo export --json`.
|
|
97
|
+
- **Don't write the database file.** Use the CLI for mutations so triggers,
|
|
98
|
+
defaults and timestamps stay consistent.
|
|
99
|
+
- **Don't assume timezone.** All dates are local-time, naive. Use the
|
|
100
|
+
command's own date parsing instead of pre-formatting.
|
|
101
|
+
- **Don't pre-quote `--json`.** It's a plain flag.
|
|
102
|
+
|
|
103
|
+
## Versioning
|
|
104
|
+
|
|
105
|
+
Run `clibo --version` or read `clibo doctor --json | jq .version`. Major
|
|
106
|
+
versions follow semver โ a 1.x bump means the JSON contract for any command
|
|
107
|
+
may have changed; minor bumps add new tools or fields.
|
clibo-1.1.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to **clibo** are recorded here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
|
|
5
|
+
follows [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased] โ staged for `v1.1.0`
|
|
8
|
+
|
|
9
|
+
Thirteen polish iterations have landed on `main` since `v1.0.0`. Ship them
|
|
10
|
+
by pushing a `v1.1.0` tag โ the
|
|
11
|
+
[`Release` workflow](.github/workflows/release.yml) handles the rest.
|
|
12
|
+
|
|
13
|
+
### Added โ six new cross-tool commands
|
|
14
|
+
|
|
15
|
+
- ๐ `clibo init` โ one-shot onboarding. Sets the shared currency plus daily
|
|
16
|
+
goals for calories, water, focus, sleep and meditation in a single call.
|
|
17
|
+
- ๐๏ธ `clibo week` โ 7-day rollup across sleep, calories, water, focus,
|
|
18
|
+
mood, habits (vs each habit's weekly target), expenses (with top
|
|
19
|
+
category) and productivity (tasks/journal/worklog).
|
|
20
|
+
- ๐ `clibo recent` โ chronological activity feed across 40+ tables,
|
|
21
|
+
newest-first, with relative "just now / 9h ago / yesterday" labels.
|
|
22
|
+
- ๐ท๏ธ `clibo tags` โ discover every tag used across notes, todo, bookmark,
|
|
23
|
+
crm, brag, recipes and journal, with counts and per-source breakdown.
|
|
24
|
+
- ๐ฉบ `clibo doctor` โ install health check: version, Python, tools built,
|
|
25
|
+
database size and per-table row counts; `--json` returns a `healthy` bool.
|
|
26
|
+
- ๐ฅ `clibo import PATH` โ counterpart to `clibo export`. Loads a JSON dump
|
|
27
|
+
back into the live database (`INSERT OR IGNORE` by default, `--replace`
|
|
28
|
+
for a clean overwrite). Accepts both the v1 envelope and a bare
|
|
29
|
+
`{table: [rows]}` map.
|
|
30
|
+
|
|
31
|
+
### Added โ documentation & ergonomics
|
|
32
|
+
|
|
33
|
+
- ๐ `AGENTS.md` at the repo root: one-page agent guide with the universal
|
|
34
|
+
contract, integrating commands, copy-paste recipes and pitfalls.
|
|
35
|
+
- ๐ฏ `docs/PHILOSOPHY.md` โ the seven design trade-offs that explain
|
|
36
|
+
why clibo looks the way it does (local-first, JSON contract, 50 tools
|
|
37
|
+
vs library, forgiving dates, beautiful output, sane test bar).
|
|
38
|
+
- ๐ `docs/SCHEMA.md` โ auto-generated reference for all 63 tables;
|
|
39
|
+
regenerated by `scripts/dump_schema.py`.
|
|
40
|
+
- ๐ `examples/` directory: `daily_brief.py`/`daily_brief.sh` (combine
|
|
41
|
+
`today` + `week` into a Markdown brief) and `find_and_act.py` (the
|
|
42
|
+
search-then-act agent pattern). All smoke-tested end-to-end.
|
|
43
|
+
- ๐ ๏ธ `CONTRIBUTING.md` and `.github/{ISSUE_TEMPLATE,pull_request_template}.md`
|
|
44
|
+
โ the four-part "done" definition for new tools, a maintainer
|
|
45
|
+
Releasing section, plus pointers to SCHEMA.md and PHILOSOPHY.md.
|
|
46
|
+
|
|
47
|
+
### Added โ infrastructure
|
|
48
|
+
|
|
49
|
+
- ๐ค `.github/workflows/release.yml` โ automated release on `v*.*.*` tag
|
|
50
|
+
push: builds wheel + sdist, sanity-checks the tag matches `pyproject`'s
|
|
51
|
+
version, creates the GitHub release with artifacts, and publishes to
|
|
52
|
+
PyPI when the `PYPI_API_TOKEN` repo secret is set.
|
|
53
|
+
- ๐งน `ruff>=0.5` lint, configured in `pyproject.toml`
|
|
54
|
+
(`E/W/F/I/UP/B/SIM`), enforced as a new `Lint with ruff` step in CI.
|
|
55
|
+
The first run found 12 real issues (unused imports / locals / a stale
|
|
56
|
+
`typing.Callable`); all fixed.
|
|
57
|
+
- ๐ฆ Wheel and sdist attached to the GitHub release page for v1.0.0
|
|
58
|
+
(and every future release via the workflow).
|
|
59
|
+
|
|
60
|
+
### Tests
|
|
61
|
+
|
|
62
|
+
- 332 passing (up from 299 at v1.0.0); ruff clean.
|
|
63
|
+
|
|
64
|
+
[Unreleased]: https://github.com/dm1tryG/clibo/compare/v1.0.0...HEAD
|
|
65
|
+
|
|
66
|
+
## [1.0.0] โ 2026-05-23
|
|
67
|
+
|
|
68
|
+
The first stable release. All 50 planned tools are shipped, every command
|
|
69
|
+
supports a `--json` mode for AI agents, and the project carries 299 tests.
|
|
70
|
+
|
|
71
|
+
### Added โ 50 local-first CLI tools, in 5 categories
|
|
72
|
+
|
|
73
|
+
- **๐ Health & Wellness** โ `calorie`, `water`, `weight`, `workout`,
|
|
74
|
+
`sleep`, `mood`, `meds`, `period`, `meditate`, `vitals`.
|
|
75
|
+
- **๐ฐ Money & Finance** โ `expense`, `budget`, `subs`, `bills`, `savings`,
|
|
76
|
+
`debt`, `networth`, `invoice`, `split`, `wishlist`.
|
|
77
|
+
- **โ
Productivity & Work** โ `todo`, `notes`, `habit`, `focus`, `time`,
|
|
78
|
+
`journal`, `goals`, `events`, `worklog`, `bookmark`.
|
|
79
|
+
- **๐ค CRM & Relationships** โ `crm`, `leads`, `followup`, `meetings`,
|
|
80
|
+
`jobs`, `clients`, `birthdays`, `network`, `gifts`, `brag`.
|
|
81
|
+
- **๐ Home & Life** โ `groceries`, `pantry`, `recipes`, `meals`, `chores`,
|
|
82
|
+
`plants`, `car`, `home`, `pets`, `travel`.
|
|
83
|
+
|
|
84
|
+
### Added โ Cross-tool commands
|
|
85
|
+
|
|
86
|
+
- `clibo today` โ a one-screen dashboard pulling from 12 tools at once:
|
|
87
|
+
overdue/today tasks, habit check-offs, water/calorie/focus progress bars,
|
|
88
|
+
today's events and meals, bills due, follow-ups, plants needing water,
|
|
89
|
+
chores due, and today's birthdays.
|
|
90
|
+
- `clibo search QUERY` โ one query across 13 text-bearing tables (notes,
|
|
91
|
+
journal, todo, bookmark, crm, network, meetings, brag, recipes, worklog,
|
|
92
|
+
gifts, expense, wishlist).
|
|
93
|
+
- `clibo backup [PATH]` / `clibo restore PATH` โ file-level SQLite backup
|
|
94
|
+
and restore, with timestamped defaults under `~/.clibo/backups/`.
|
|
95
|
+
- `clibo export [PATH]` โ dump every clibo table to one JSON file,
|
|
96
|
+
ideal for an agent to read the whole local state in one go.
|
|
97
|
+
- `clibo info` โ progress dashboard for the project itself.
|
|
98
|
+
|
|
99
|
+
### Added โ Agent-native contract
|
|
100
|
+
|
|
101
|
+
- Every command accepts `--json` for machine-readable output on stdout.
|
|
102
|
+
- Mutations return the affected record as JSON; deletes return
|
|
103
|
+
`{"deleted": ID}`; errors go to stderr with a non-zero exit code.
|
|
104
|
+
- One micro-skill (`SKILL.md`) per tool in `skills/`, ready to drop into
|
|
105
|
+
an AI agent's skill set.
|
|
106
|
+
|
|
107
|
+
### Added โ Engineering
|
|
108
|
+
|
|
109
|
+
- Stack: Python 3.10+ ยท [Typer](https://typer.tiangolo.com/) ยท
|
|
110
|
+
[SQLModel](https://sqlmodel.tiangolo.com/) ยท [Rich](https://rich.readthedocs.io/).
|
|
111
|
+
- One SQLite file at `~/.clibo/clibo.db` (`CLIBO_HOME` / `CLIBO_DB` override).
|
|
112
|
+
- 299 pytest tests covering every tool and the cross-tool commands.
|
|
113
|
+
- GitHub Actions CI on Python 3.10/3.11/3.12.
|
|
114
|
+
- MIT licensed.
|
|
115
|
+
|
|
116
|
+
### Install
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
uv tool install --from git+https://github.com/dm1tryG/clibo.git clibo
|
|
120
|
+
# or
|
|
121
|
+
pipx install git+https://github.com/dm1tryG/clibo.git
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
[1.0.0]: https://github.com/dm1tryG/clibo/releases/tag/v1.0.0
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Contributing to clibo
|
|
2
|
+
|
|
3
|
+
Thanks for thinking about contributing โ clibo is built to grow.
|
|
4
|
+
|
|
5
|
+
## Quick setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/dm1tryG/clibo.git
|
|
9
|
+
cd clibo
|
|
10
|
+
uv venv .venv # or python -m venv .venv
|
|
11
|
+
uv pip install --python .venv -e ".[dev]"
|
|
12
|
+
./.venv/bin/pytest # 300+ tests
|
|
13
|
+
./.venv/bin/ruff check # lint
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
CI runs both `ruff check` and `pytest` โ keep both green locally before opening
|
|
17
|
+
a PR. Ruff config lives in `pyproject.toml`.
|
|
18
|
+
|
|
19
|
+
The full developer guide for adding a new clibo tool lives at
|
|
20
|
+
[`docs/ADDING_A_TOOL.md`](docs/ADDING_A_TOOL.md) โ read it before you start.
|
|
21
|
+
[`clibo/clis/calorie.py`](clibo/clis/calorie.py) is the canonical reference.
|
|
22
|
+
[`docs/SCHEMA.md`](docs/SCHEMA.md) lists every existing table; regenerate it
|
|
23
|
+
with `python scripts/dump_schema.py` after adding a new model.
|
|
24
|
+
[`docs/PHILOSOPHY.md`](docs/PHILOSOPHY.md) explains the design trade-offs every
|
|
25
|
+
tool is built on โ please read it before proposing structural changes.
|
|
26
|
+
|
|
27
|
+
## What a "done" tool looks like
|
|
28
|
+
|
|
29
|
+
A tool is not done until **all four** of these are true:
|
|
30
|
+
|
|
31
|
+
1. The module in `clibo/clis/<tool>.py` follows the pattern in
|
|
32
|
+
`docs/ADDING_A_TOOL.md`: namespaced table name, Typer `app`, predictable
|
|
33
|
+
verbs, `--json` on every command, output routed through `core.output`.
|
|
34
|
+
2. It is registered in `clibo/clis/__init__.py` (both the import block and
|
|
35
|
+
the `ALL` list).
|
|
36
|
+
3. There is a pytest file at `tests/test_<tool>.py` that covers create, a
|
|
37
|
+
read/list, the `--json` shape, `stats`, and at least one error path.
|
|
38
|
+
4. There is a micro-skill at `skills/<tool>/SKILL.md` with the YAML
|
|
39
|
+
frontmatter (`name`, `description`), a command table, examples, and a
|
|
40
|
+
**For agents** section documenting the JSON output.
|
|
41
|
+
|
|
42
|
+
`./.venv/bin/pytest` must be green. Smoke-test the new tool by hand,
|
|
43
|
+
including `--json`, before opening a PR.
|
|
44
|
+
|
|
45
|
+
## Commit messages
|
|
46
|
+
|
|
47
|
+
Plain, present-tense, one short subject line. No `Co-Authored-By` trailers,
|
|
48
|
+
no "Generated with โฆ" lines, no mentions of any LLM.
|
|
49
|
+
|
|
50
|
+
## PR checklist
|
|
51
|
+
|
|
52
|
+
A short [pull-request template](.github/pull_request_template.md) is
|
|
53
|
+
auto-filled when you open a PR โ please tick the boxes honestly.
|
|
54
|
+
|
|
55
|
+
## Releasing (maintainers)
|
|
56
|
+
|
|
57
|
+
Cutting a new version is one command on a clean `main`:
|
|
58
|
+
|
|
59
|
+
1. Bump `version` in `pyproject.toml` **and** `__version__` in
|
|
60
|
+
`clibo/__init__.py`.
|
|
61
|
+
2. Add a `## [X.Y.Z] โ YYYY-MM-DD` section at the top of `CHANGELOG.md`.
|
|
62
|
+
3. Commit the bump, then:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git tag -a vX.Y.Z -m "clibo vX.Y.Z"
|
|
66
|
+
git push origin main --follow-tags
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The [`Release` workflow](.github/workflows/release.yml) takes it from there:
|
|
70
|
+
builds the wheel and sdist, sanity-checks the tag matches the pyproject
|
|
71
|
+
version, creates the GitHub release, attaches the artifacts, and (if the
|
|
72
|
+
`PYPI_API_TOKEN` repo secret is set) publishes to PyPI.
|
|
73
|
+
|
|
74
|
+
## Code of conduct
|
|
75
|
+
|
|
76
|
+
Be kind. Assume good faith. We follow the
|
|
77
|
+
[Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
|
|
78
|
+
in spirit; no formal document needed at this size.
|
clibo-1.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dm1tryG
|
|
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.
|