Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
78568e3
docs/README-Add-link-to-VS-Code-extension (#35)
lchoquel Sep 3, 2025
b27f457
Fix/readme (#36)
thomashebrard Sep 3, 2025
f859163
Merge branch 'main' into dev
thomashebrard Sep 3, 2025
a6ce012
Feature/docs fixes and cleanups (#40)
lchoquel Sep 5, 2025
0345545
fix/cursor_rules (#41)
thomashebrard Sep 5, 2025
2c8b328
Better-extension-and-Blackbox-support (#42)
lchoquel Sep 5, 2025
d7f8a9a
Merge branch 'main' into dev
lchoquel Sep 5, 2025
8735c54
Feature/more GitHub power (#44)
lchoquel Sep 6, 2025
82e82ca
Merge branch 'main' into dev
lchoquel Sep 6, 2025
cbd8f57
Merge branch 'main' into dev
lchoquel Sep 6, 2025
b29dc48
Adapt to New inference backend config (#48)
lchoquel Sep 18, 2025
5848d17
Merge branch 'main' into dev
lchoquel Sep 18, 2025
c2749b4
Last step to remove redundancies in finalized changelog (#50)
lchoquel Sep 22, 2025
d06824c
fix/clean cli commands (#51)
thomashebrard Sep 22, 2025
f67449f
Fix/clean cli commands (#53)
thomashebrard Sep 29, 2025
9362b38
Feature/new cmd analyze (#55)
lchoquel Oct 5, 2025
f8a4a39
Last step to remove redundancies in finalized changelog (#56)
lchoquel Oct 5, 2025
0f3caea
Refactor/move pipelines (#57)
lchoquel Oct 14, 2025
4cbb261
Merge branch 'main' into dev
lchoquel Oct 15, 2025
8276bde
Merge branch 'main' into dev
thomashebrard Oct 16, 2025
59e4f19
Adapt to pipelex new syntax for multiplicity (#59)
lchoquel Oct 21, 2025
aa0bbfc
Improve changelog pipeline and Bump Pipelex (#60)
lchoquel Oct 22, 2025
b3cea10
Merge branch 'main' into dev
lchoquel Oct 22, 2025
5bc12f7
Merge branch 'main' into dev
lchoquel Oct 28, 2025
2de2ace
Fix/changelog duplicate bundles (#63)
lchoquel Nov 7, 2025
a7871cc
Merge branch 'main' into dev
lchoquel Nov 7, 2025
69dfe5d
Feature/check is initialized (#65)
lchoquel Nov 13, 2025
a353dfb
Merge branch 'main' into dev
lchoquel Nov 13, 2025
a068026
Merge branch 'main' into dev
lchoquel Nov 18, 2025
7d57684
Merge branch 'main' into dev
lchoquel Nov 18, 2025
701e56a
Pin pipelex to released 0.31.0 and bump pyright to 1.1.410 (#72)
lchoquel Jun 4, 2026
e270162
Merge branch 'main' into dev
lchoquel Jun 5, 2026
0aca4f1
Merge branch 'main' into dev
lchoquel Jun 9, 2026
7fd3223
chore: track pipelex keyword-only refactor + migrate to PipelexMTHDSP…
lchoquel Jul 6, 2026
72a136b
Merge branch 'main' into dev
lchoquel Jul 6, 2026
e1e4922
Drop Python 3.10 support, add 3.14 to CI, bump pipelex to 0.39.0 (#77)
lchoquel Aug 1, 2026
c0e664e
Release v0.9.0
lchoquel Aug 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/lint-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
python-version: ["3.11", "3.12", "3.13", "3.14"]
env:
VIRTUAL_ENV: ${{ github.workspace }}/.venv

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/tests-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
python-version: ["3.11", "3.12", "3.13", "3.14"]
permissions:
contents: read
id-token: write
Expand All @@ -25,7 +25,7 @@ jobs:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

Expand Down
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# Changelog

## [v0.9.0] - 2026-08-01

### Changed
- **Swept onto `pipelex` 0.42.0** (`pipelex[...]==0.39.0` → `==0.42.0`, crossing three release cycles). Despite 0.41.0 being the largest breaking core release of the year, the blast radius here is small — cocode drives pipelex through its public run surface rather than its internals, so only two addresses moved: `pipelex.hub` was deleted with no shim (split into `pipelex.runtime_hub` / `pipelex.interpreter_hub` by owning layer, and `get_required_concept` is interpreter-layer), and `PipeRunMode` moved from `pipelex.pipe_run.pipe_run_mode` to `pipelex.system.pipe_run_mode`. Nothing in the parser move, the Pipe-machinery move, the `pipelex.providers` vendor rename, or the `Concept`-becomes-pure-data change reaches this repo. From 0.42.0, the only change that reaches us is strict PipeFunc name collisions — see the fix below.
- **Pipelines:** Custom PipeFunc functions are now registered solely through the `@pipe_func()` decorator; the redundant manual `func_registry.register_function(...)` calls in `doc_proofread/file_utils.py` and `pipelines/text_utils.py` are gone. `split_text_by_identifiers` gains the decorator it was missing, so it no longer depends on the class-registry scan importing its module as a side effect.
- **CI:** Added Python 3.14 to the lint and test matrices, so every version advertised in the package classifiers is now actually tested.
- **CI:** Bumped `actions/setup-python` from `v4` to `v6` in the lint and test workflows. `v4` targets the Node 16 runtime, which the runners only still execute via a forced fallback; `v6` is the first major on Node 24. Note that `v5` would not have helped — it targets the equally deprecated Node 20.
- **Core:** Import `StrEnum` from the stdlib `enum` module instead of the `pipelex.types` re-export, which upstream deleted along with its own 3.10 support.
- **Tooling:** Point mypy at local paths (`files`) rather than module names (`packages`), so an editable `pipelex` checkout on the import path no longer drags that repo's test suite into our type check.

### Fixed
- **Pipelines:** Every `cocode` command crashed at startup on `pipelex` 0.42.0 with `FuncRegistryError: Function name 'read_file_content' is already registered by a different function`. `file_utils.py` registered `read_file_content` twice — once when imported as a package module by `swe_cmd.py`, once when pipelex's folder scan re-imported the same file by path under a mangled module name — and 0.42.0 turned that silent overwrite into a hard error. Dropping the manual registration leaves the decorator-driven scan as the single registration path.

### Removed
- **Python:** Dropped support for Python 3.10 (breaking). The minimum supported version is now Python 3.11, matching the version the type-checkers and linter already target.

## [v0.8.0] - 2026-07-06

### Added
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ We are open to contributions in all areas of our core cocode library:

## Requirements

- Python ≥3.10
- Python ≥3.11
- uv ≥ 0.7.2

## Development Setup
Expand Down
2 changes: 1 addition & 1 deletion cocode/cli/analyze/analyze_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from typing import Annotated, List, Optional

import typer
from pipelex.pipe_run.pipe_run_mode import PipeRunMode
from pipelex.system.pipe_run_mode import PipeRunMode
from pipelex.tools.misc.file_utils import load_text_from_path

from cocode.common import get_output_dir, validate_repo_path
Expand Down
2 changes: 1 addition & 1 deletion cocode/cli/changelog/changelog_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from typing import Annotated, List, Optional

import typer
from pipelex.pipe_run.pipe_run_mode import PipeRunMode
from pipelex.system.pipe_run_mode import PipeRunMode

from cocode.common import get_output_dir, validate_repo_path
from cocode.swe.swe_cmd import swe_from_repo_diff
Expand Down
2 changes: 1 addition & 1 deletion cocode/cli/features/features_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from typing import Annotated, Optional

import typer
from pipelex.pipe_run.pipe_run_mode import PipeRunMode
from pipelex.system.pipe_run_mode import PipeRunMode

from cocode.common import PipeCode, get_output_dir
from cocode.swe.swe_cmd import swe_from_file
Expand Down
2 changes: 1 addition & 1 deletion cocode/cli/repo/repo_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from typing import Annotated, List, Optional

import typer
from pipelex.pipe_run.pipe_run_mode import PipeRunMode
from pipelex.system.pipe_run_mode import PipeRunMode

from cocode.common import PipeCode, get_output_dir, validate_repo_path
from cocode.repox.models import OutputStyle
Expand Down
2 changes: 1 addition & 1 deletion cocode/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
Common utilities and types shared across CLI modules.
"""

from enum import StrEnum
from pathlib import Path
from typing import Optional

import typer
from pipelex import log
from pipelex.tools.misc.file_utils import path_exists
from pipelex.types import StrEnum

from cocode.github.github_repo_manager import GitHubRepoManager
from cocode.repox.repox_processor import RESULTS_DIR
Expand Down
5 changes: 1 addition & 4 deletions cocode/pipelines/doc_proofread/file_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from pipelex.core.memory.working_memory import WorkingMemory
from pipelex.core.stuffs.list_content import ListContent
from pipelex.system.registries.func_registry import func_registry, pipe_func
from pipelex.system.registries.func_registry import pipe_func

from cocode.pipelines.doc_proofread.doc_proofread_models import CodebaseFileContent, DocumentationFile, FilePath

Expand Down Expand Up @@ -71,6 +71,3 @@ def read_file_content(working_memory: WorkingMemory) -> ListContent[CodebaseFile
)

return ListContent[CodebaseFileContent](items=codebase_files)


func_registry.register_function(read_file_content, name="read_file_content")
1 change: 1 addition & 0 deletions cocode/pipelines/swe_diff/changelog_enhanced.mthds
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ Review and polish the following draft changelog that was generated from a git di
@draft_changelog

Remove redundancy in the changelog. For instance, I don't want to see the same change presented both as a "Changed" and "Removed".
For breaking changes, our official style is just to write a "(Breaking)" suffix AT THE END OF the title.
And when you see several changes that were made for the same purpose, groupd them as a single item.
Don't add fluff, stay sharp and to the point.
Use nice readable markdown formatting.
Expand Down
6 changes: 2 additions & 4 deletions cocode/pipelines/text_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pipelex.core.stuffs.list_content import ListContent
from pipelex.core.stuffs.structured_content import StructuredContent
from pipelex.core.stuffs.text_content import TextContent
from pipelex.system.registries.func_registry import func_registry
from pipelex.system.registries.func_registry import pipe_func
from pydantic import Field


Expand All @@ -18,6 +18,7 @@ class TextChunk(StructuredContent):
end_position: int = Field(..., description="Ending character position in the original text")


@pipe_func()
def split_text_by_identifiers(working_memory: WorkingMemory) -> ListContent[TextChunk]:
"""
Split `text` into chunks using the *first* full-line occurrence of every
Expand Down Expand Up @@ -76,6 +77,3 @@ def split_text_by_identifiers(working_memory: WorkingMemory) -> ListContent[Text
)

return ListContent(items=chunks)


func_registry.register_function(split_text_by_identifiers, name="split_text_by_identifiers")
2 changes: 1 addition & 1 deletion cocode/repox/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from pipelex.types import StrEnum
from enum import StrEnum


class NotableFileType(StrEnum):
Expand Down
2 changes: 1 addition & 1 deletion cocode/repox/process_python.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import ast
from enum import StrEnum
from typing import List

from pipelex import log
from pipelex.types import StrEnum

from cocode.utils import format_with_ruff

Expand Down
4 changes: 2 additions & 2 deletions cocode/swe/swe_cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
from pipelex.core.pipes.pipe_output import PipeOutput
from pipelex.core.stuffs.list_content import ListContent
from pipelex.core.stuffs.stuff_factory import StuffFactory
from pipelex.hub import get_required_concept
from pipelex.pipe_run.pipe_run_mode import PipeRunMode
from pipelex.interpreter_hub import get_required_concept
from pipelex.pipeline.runner import PipelexMTHDSProtocol
from pipelex.reporting.cost_report_renderer import render_cost_report_for_output
from pipelex.system.pipe_run_mode import PipeRunMode
from pipelex.tools.misc.file_utils import ensure_path, failable_load_text_from_path, load_text_from_path, save_text_to_path

from cocode.pipelines.doc_proofread.doc_proofread_models import DocumentationFile, DocumentationInconsistency, RepositoryMap
Expand Down
2 changes: 1 addition & 1 deletion docs/pages/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: Getting Started

## Requirements

- Python ≥ 3.10
- Python ≥ 3.11
- pip

## Installation
Expand Down
16 changes: 8 additions & 8 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
[project]
name = "cocode"
version = "0.8.0"
version = "0.9.0"
description = "Cocode is the friend of your code"
authors = [{ name = "Evotis S.A.S.", email = "evotis@pipelex.com" }]
maintainers = [{ name = "Pipelex staff", email = "oss@pipelex.com" }]
license = "MIT"
readme = "README.md"
requires-python = ">=3.10"
requires-python = ">=3.11"
classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
Expand All @@ -18,7 +17,7 @@ classifiers = [
]

dependencies = [
"pipelex[anthropic,google,google-genai,bedrock]==0.37.0",
"pipelex[anthropic,google,google-genai,bedrock]==0.42.0",
"PyGithub==2.4.0",
]

Expand All @@ -32,7 +31,7 @@ docs = [
dev = [
"boto3-stubs>=1.35.24",
"mypy>=1.11.2",
"pyright>=1.1.410",
"pyright>=1.1.411",
"pytest>=9.0.1",
"pytest_asyncio>=0.24.0",
"pytest-cov>=6.1.1",
Expand Down Expand Up @@ -78,10 +77,11 @@ Documentation = "https://docs.pipelex.com/"
required-version = ">=0.7.2"

[tool.mypy]
packages = ["cocode", "tests"]
# Paths, not module names: an editable pipelex install puts its whole source tree on the
# import path, and a module lookup would pull that repo's own tests in as ours.
files = ["cocode", "tests"]
check_untyped_defs = true
# exclude = "^.*\\.venv/.*$"
exclude = "^.*\\.venv/.*$|^.*/pipelex/tests/.*$"
exclude = "^.*\\.venv/.*$"
mypy_path = "."
plugins = ["pydantic.mypy"]
python_version = "3.11"
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/test_basic.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import asyncio

import pytest
from pipelex.hub import get_required_concept
from pipelex.interpreter_hub import get_required_concept
from pipelex.pipeline.bundle_validator import BundleValidator


Expand Down
2 changes: 1 addition & 1 deletion tests/integration/test_hello_world.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest
from pipelex.pipe_run.pipe_run_mode import PipeRunMode
from pipelex.pipeline.runner import PipelexMTHDSProtocol
from pipelex.system.pipe_run_mode import PipeRunMode


@pytest.mark.asyncio
Expand Down
Loading
Loading