mirror of
https://github.com/przeprogramowani/10x-cli.git
synced 2026-09-19 03:30:01 +08:00
da67b5f7bb
Register a `kiro` profile that writes artifacts under `.kiro/` (skills, prompts, config templates) and co-owns the root `AGENTS.md` for course rules alongside codex, devin-desktop and generic. Content is delivered in the generic variant because the delivery API exposes no `kiro` transform yet. Auto-detection reports Kiro from `.kiro/.10x-cli-manifest.json`, `.kiro/steering/`, `.kiro/specs/`, `.kiro/hooks/`, `.kiro/settings/` or a bare `.kiro/` directory. Every branch is `strong`: the directory name is Kiro-specific with no plausible false positive, so a Kiro workspace never loses the `AGENTS.md` confidence tie to codex and `PROFILE_ORDER` needs no reshuffle. The profile takes its place in the resolution order ahead of generic. Extend `--tool` help text for `get` and `sync`, document the new paths, the `.kiro/config-templates/` staging caveat and the exact limits of `AGENTS.md` co-ownership (byte-identical rules only, so `kiro` pairs with generic but reports `incompatible_shared_owner` next to codex or devin-desktop) in the platform support reference and README, and cover the profile in the detection, profile, tool-switch, writer and install-contract test suites — including the divergent-content case that must fail closed. The bundled `skills/10x-cli-guide/SKILL.md` is deliberately left unchanged: `helpers install` is create-only and exits 1 on a byte difference, so a documentation-only edit there would break every existing install.
5.6 KiB
5.6 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
- Windsurf is now Devin Desktop. The tool selector uses
devin-desktop, writes new artifacts under.devin/, and uses rootAGENTS.mdfor course rules. The formerwindsurfID and.windsurf/markers remain supported for config compatibility, detection, and artifact migration. 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
- Kiro is a supported tool profile.
--tool kirowrites artifacts under.kiro/, uses rootAGENTS.mdfor course rules, and is auto-detected from.kiro/steering/,.kiro/specs/,.kiro/hooks/,.kiro/settings/or a bare.kiro/directory. Content is delivered in the generic variant. 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.