Repository navigation
refactor(claude-toolsets): move the Python and TypeScript packages into one product folder - #90
Draft
mislavivanda wants to merge 1 commit into
Draft
mislavivanda wants to merge 1 commit into
mislavivanda wants to merge 1 commit into
Conversation
…to one product folder The two ports of the Claude toolset drivers lived as unrelated siblings: packages/daytona-claude-toolsets (PyPI) and packages/claude-toolsets (npm). They are one product with two language bindings, and the TypeScript suite already reaches into the Python sources to assert the shared _xtest.py and _page_js.py assets are byte-identical across ports. Put them under one product folder so that relationship is visible in the tree: packages/daytona-claude-toolsets -> packages/claude-toolsets/python packages/claude-toolsets -> packages/claude-toolsets/typescript Moved with git mv so history follows. No package name, code or API changes: PyPI stays daytona-claude-toolsets, npm stays @daytona/claude-toolsets. Publishing is unaffected. The release-please components are untouched (daytona-claude-toolsets and claude-toolsets), and release-please resolves a package's previous release by its component tag, not by its path key, so daytona-claude-toolsets-v0.1.0 and claude-toolsets-v1.0.0 remain the resume points and versions continue from 0.1.0 and 1.0.0. Only the path keys in release-please-config.json and .release-please-manifest.json change, along with the matching steps.release.outputs['<path>--...'] keys in release.yml, which are keyed by path. The PyPI and npm trusted publishers are bound to the repository, the release.yml filename and the pypi/npm environments -- none of which change here. Also updated: the ci.yml path filters (each now scoped to its own language subfolder, so the Python and TypeScript jobs still never overlap), the test -f guards and working-directory values in both workflows, the npm repository.directory and homepage, the pyproject Homepage/Documentation URLs, the root README package rows, and the two TypeScript tests that resolve the Python sources for the cross-port asset-identity checks. CHANGELOG history is left untouched. Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>
10 tasks
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Important
Merge order. release-please assigns commits to packages by path, so a commit that touched the old path but was never released drops out of every future changelog once this move lands. #88 (Python fixes) touches only
packages/daytona-claude-toolsets/. Merge #88 → its release-please PR (daytona-claude-toolsets0.1.1) → then rebase and merge this PR. #89 is atest:change (no release) and only needs a rebase.The Claude toolset drivers shipped as two unrelated siblings in
packages/: a Python port and a TypeScript port of the same product. They are one product with two language bindings — the TypeScript suite already reaches across into the Python sources to assert the shared_xtest.pyand_page_js.pyassets are byte-identical between the ports. This puts them under one product folder so that relationship is visible in the tree.The move
packages/daytona-claude-toolsets/packages/claude-toolsets/python/daytona-claude-toolsetsdaytona-claude-toolsets(unchanged)0.1.0(unchanged)packages/claude-toolsets/packages/claude-toolsets/typescript/@daytona/claude-toolsetsclaude-toolsets(unchanged)1.0.0(unchanged)Done with
git mv, so history follows (80 files changed, 71 pure renames, 9 files with real content changes). No package names, code or APIs change.Why releases and publishing are unaffected
Tags continue. release-please resolves a package's previous release from its component tag, not from its path key: with
include-component-in-tag: truethe tag is<component>-v<version>, andManifest.backfillReleasesFromTags()builds thatTagNamefrom the configuredcomponentplus the manifest version (manifest-releaser.md,src/manifest.ts). Both components are untouched here, so the existing tagsdaytona-claude-toolsets-v0.1.0andclaude-toolsets-v1.0.0stay the resume points — the next releases continue from 0.1.0 / 1.0.0 rather than restarting.Trusted publishers are untouched. PyPI and npm Trusted Publishing bind to the repository + the workflow filename (
release.yml) + the environment (pypi/npm). None of those change — onlyworking-directory/packages-dirvalues inside the existing jobs. Job names (publish-daytona-claude-toolsets,publish-claude-toolsets) are also left as-is.No path ambiguity from the nesting. release-please attributes a commit to a package by changed-file path prefix, requiring a
/boundary and treating configured paths as unique and non-overlapping (src/util/commit-split.ts).packages/claude-toolsets/pythonandpackages/claude-toolsets/typescriptare siblings, and no package is registered atpackages/claude-toolsets, so nothing is double-attributed. Verified programmatically: no configured package path is a parent directory of another.This PR does not trigger a release.
refactoris not a bumping type — onlyfeat,fixand!/BREAKING CHANGEbump by default, andrefactoris a hidden changelog section for the python strategy (src/strategies/python.ts).Release-please risk found (assessed, low)
The one real hazard when moving a package path is unreleased commits still sitting under the old path: commit attribution is purely path-prefix based, so a commit that only touched
packages/daytona-claude-toolsets/**and had not yet been released would stop being attributed to the package after the move and would fall out of the next changelog. There is no automatic old-path → new-path mapping in release-please.That hazard does not apply here: both packages are fully released as of the base commit.
d45a269ischore(main): release claude-toolsets 1.0.0 (#87), anddaytona-claude-toolsets-v0.1.0was cut in #85 — there are zero unreleased commits under either old path to lose. Nobootstrap-sha,last-release-shaorrelease-search-depthadjustment is needed.Every reference updated
Release config (path keys only — components and versions preserved)
release-please-config.json:packages/claude-toolsets→packages/claude-toolsets/typescript,packages/daytona-claude-toolsets→packages/claude-toolsets/python.release-please-manifest.json: same two keys rekeyed,1.0.0and0.1.0kept verbatimCHANGELOG.mdmoved with it, so the defaultchangelog-pathstill resolves.github/workflows/release.ymlsteps.release.outputs['packages/...--release_created' | '--tag_name']keys — these are keyed by path, so they had to move with itpublish-daytona-claude-toolsets:working-directoryandpackages-dir: .../python/distpublish-claude-toolsets:working-directory→.../typescript.github/workflows/ci.ymltoolsetsfilter →packages/claude-toolsets/python/**;claude_toolsetsfilter →packages/claude-toolsets/typescript/**. Each is scoped to its own language subfolder, so the two still never overlap (deliberately notpackages/claude-toolsets/**, which would have fired the TypeScript job on Python-only changes and vice versa). Verified no filter glob is a prefix of another.test -fguards in both jobs (.../python/pyproject.toml,.../typescript/package.json)working-directory:linesPackage metadata
typescript/package.json:repository.directory,homepagepython/pyproject.toml:Homepage,DocumentationDocs and cross-language tests
README.md: both package table rowstypescript/tests/helpers/extractPythonXtest.ts→../../../python/daytona_claude_toolsets/_xtest.pytypescript/tests/pageJs.test.ts→../../python/daytona_claude_toolsets/_page_js.pyCHANGELOG.mdhistory is left untouched.Verification
npm ci && npm run typecheck(typescript)npm run build(typescript)npm test(typescript)pageJs > matches the checked-out Python __dt bundle byte-for-byte✓ andxtest > preserves the Python helper asset byte-for-byte✓ — both resolve the Python sources at their new pathruff check .(python)black --check .(python)mypy daytona_claude_toolsetspytest(python)actionlint ci.yml release.ymlgit grep "packages/daytona-claude-toolsets"git grep -E "packages/claude-toolsets([^/]|$)"/pythonor/typescript)steps.release.outputs[...]path keys resolve to a configured package; no configured path nests inside another; both new dirs and theirCHANGELOG.mdexistcubic review --base origin/mainPython verified in a fresh
uvvenv withuv pip install -e "packages/claude-toolsets/python[dev]", running the same commands as the ci.ymltoolsetsjob.Notes
Important
Draft: rebase after #88 (Python fixes) and #89 (TS offline tests) merge — both touch these packages and will conflict.
FYI @aprojic:
release.ymlpublish jobs only change working directories.One pre-existing behaviour is deliberately preserved rather than fixed here: a PR that touches only the Python asset sources does not run the TypeScript job, so the byte-identity tests would not catch cross-port drift on such a PR. That was already true when the packages were separate top-level folders; widening the filters is a behaviour change and belongs in its own PR.
Summary by cubic
Consolidates the Python and TypeScript Claude toolset drivers into a single
packages/claude-toolsets/product folder withpython/andtypescript/subdirectories. Done withgit mvso history is preserved, and no package names, versions, code, or APIs change.Releases and publishing are unaffected: release-please components and tags stay the same, and only path keys in
release-please-config.json,.release-please-manifest.json, and the workflow output references are updated. CI path filters are now scoped to each language subfolder, so the Python and TypeScript jobs never overlap. All other path references (workflow working directories, package metadata, README, cross-language tests) are updated accordingly.Written for commit 02bac4e. Summary will update on new commits.