mirror of
https://github.com/przeprogramowani/10x-cli.git
synced 2026-09-19 03:30:01 +08:00
5d6466ed36
The bench-kit command is feature-complete (zone-aware update, agent-tool profiles, safe init defaults shipped in v1.17.0), so the experimental opt-in has served its purpose. The command now registers unconditionally, shows up in --help, and is documented in the README; the gating module and its error envelope (experimental_locked) are removed. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
5.0 KiB
5.0 KiB
Changelog
All notable changes to @przeprogramowani/10x-cli are documented in this file.
The format follows Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Changed
10x bench-kitis generally available. TheTENX_CLI_EXPERIMENTALopt-in is gone:initandupdateare registered unconditionally, appear in--help, and are documented in the README. Theexperimental_lockederror envelope no longer exists (the gating module has been removed).
Added
10x sync— bulk download & update with change visibility. One command to download every unlocked lesson (--all) or refresh the ones you've already downloaded (default), with a report of what changed upstream. Each not-updated resource prints the exact10x get …command to take it;--forcetakes all upstream updates over local edits,--dry-runpreviews without writing. Exit code is worst-outcome (1if any lesson errored, else0).- Unchanged lessons are skipped without a download: the catalog now advertises
a per-lesson
contentHash(added in@przeprogramowani/10x-toolkit), compared digest-vs-digest against the value stored in the manifest at last apply. Older backends/manifests without a digest fall back to always-fetch. planBundle()— a pure, non-writing, non-prompting writer planner that classifies per-file actions + conflicts;applyBundlenow consumes it so preview and apply can't diverge.- Manifest
lessons[].catalogContentHash(additive, optional) andLessonSummary.contentHash(optional) carry the per-lesson digest. Change visibility covers skills and prompts (configs are create-only; rules are sentinel-managed).
[1.0.0] - 2026-05-03
Breaking changes
This release upgrades to the directory-shaped skill bundle defined by the
delivery API at @przeprogramowani/10x-toolkit. CLIs older than 1.0.0 cannot
parse bundles produced after the API deploy, and 1.0.0 cannot consume the
old bundle shape. Both repos must roll forward together.
- Skill bundles ship as full directories. A skill is now
{ name, files: [{ path, content, executable? }] }rather than{ name, content }. Every file under the skill directory in@przeprogramowani/ai-artifacts(e.g.scripts/,references/) materializes on disk with its executable bit preserved when set. Running10x get m1l1now writes.claude/skills/<name>/SKILL.md,.claude/skills/<name>/scripts/check-context.sh(with+x), and any other files under the source skill directory. ArtifactResponseis a discriminated union./api/artifacts/.../skills/:namereturns{ type: "skills", name, files, universalContent? }; prompts/rules/configs still return{ type, name, content }. Code readingresult.data.contentfor skills will not type-check.- Manifest schema bumped to v2.
files.skillsis now a record keyed by skill name →{ files: string[] }(relative paths under the skill dir). v1 manifests (skills asstring[]) are read asnull— treated as no-prior-state for one cleanup cycle, then the v2 manifest takes over on the next apply. No migration script.
Added
- Per-file removal within a retained skill. When upstream drops a file from
an existing skill,
10x getremoves the local copy and prunes the now-empty parent directory; the skill directory itself stays put for subsequent applies. - Path-traversal guard for skill files.
assertSafeSkillFilePathrejects empty paths, absolute paths, drive prefixes,..segments, backslash separators, and Windows-reserved names (CON/PRN/...). The writer aborts before any filesystem mutation when a bundle is tampered. - Print-mode notice for multi-file skills.
10x get ... --print --type skills [--name X]emits SKILL.md to stdout (so redirects like> /tmp/SKILL.mdcapture only that), and writesNote: skill "<name>" has N additional files not shown in --print: ...\nRun without --print to materialize all files.to stderr. JSON mode is unchanged; the fullfiles[]array is in the response. - Per-file actions in
WriteResult.skills.result.skills[i]is now{ name, files: [{ path, absolutePath, action }] }instead of{ name, path, action }. The--jsonoutput reflects the same shape; consumers reading per-skill status need to walk thefilesarray.
Changed
ToolProfile.skillDir(name)is a new required field on every profile, returning the skill directory path (without the/SKILL.mdsuffix). The existingskillPath(name)is unchanged for callers that need the SKILL.md file specifically.tool-switchmigration walks every file under each skill directory —migrateArtifactsanddeleteArtifactsno longer assume a single file per skill.
Removed
- Nothing student-facing was removed. Old
ArtifactWrite { name, path, action }entries inWriteResult.skillsare replaced by the per-fileSkillWriteshape described above.