Repository navigation
chore: version packages - #142
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 🚀 New features to boost your workflow:
|
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to master, this PR will be updated.
Releases
agentsmesh@0.42.0
Minor Changes
agentsmesh generateonce. Some generated files change format, soagentsmesh generate --checkreports drift until you regenerate: Claude Code rules scope files withpaths:(the field Claude Code reads) instead ofglobs:; Windsurf rules useglobs:instead ofglob:and a scoped rule is written once (generateremoves the old.windsurf/rules/<dir>.mdcopy; you can delete an old<dir>/AGENTS.mdit wrote for Windsurf only); Codex CLI and Codebuff write each rule in a nested<dir>/AGENTS.mdwith anagentsmesh:embedded-rulemarker.import --from codex-cli,codebufforwindsurfcycle created a folder rule such as.agentsmesh/rules/src.mdthat repeats another rule's text, delete it once.agentsmesh initwithout--yesnow stops with exit code 1 when it finds existing config for a tool it would enable, because it would not import that config. Useagentsmesh init --yes, or--targetsto leave that tool out.agentsmesh checknow fails afteragentsmesh generate --targets …left an enabled target out of date (the lock lists it understale_targets). Run a fullagentsmesh generate.check()andcheck --jsonreport these targets asstaleTargets..agentsmesh/permissions.yaml,.agentsmesh/ignoreand.agentsmesh/mcp.jsoninstead of replacing them, and never removes an entry; edit those files to remove one. In oneagentsmesh init --yesrun, two tools' rules, commands or agents with the same name and different text are both kept, the later one as<name>-<tool>.md(listed assameNameCopiesininit --json).root: truerule from an installed pack or anextendssource no longer replaces your own.agentsmesh/rules/_root.md; it is used as a normal rule, with a warning.index.yaml+topics/+journal.md, up to 0.22): the migration keepsjournal.md, never runs from the recall hook, and stops with nothing changed if a topic file has a list item outside a## Rulesor## Lessonssection.Patch Changes
0878dcd:
agentsmesh checkno longer passes afteragentsmesh generate --targets …left other targets out of date. Before, a filtered run recorded the new canonical checksums in.agentsmesh/.lockeven though the targets it skipped were not regenerated, so the CI gate said "Lock file is in sync." while, for example,CLAUDE.mdwas stale. Now, when the canonical sources changed, the lock lists the enabled targets the run left out under a newstale_targetskey, andcheckfails and names them (staleTargetsin--json, the MCPchecktool and thecheck()API) until each is generated again. A fullagentsmesh generateclears the list, and the lock does not change for projects that never use--targets.75daebd: Claude Code rules keep their file scope. Claude Code scopes a rule in
.claude/rules/*.mdwithpaths:, the only field it reads from a rule.agentsmesh import --from claude-codeignoredpaths(the canonical rule gotglobs: []), andagentsmesh generatewrote a canonical rule'sglobsasglobs:, which Claude Code ignores, so scoped rules applied to every file. Now import readspaths(a YAML list or a comma-separated string) intoglobs, older generated files withglobs:still import, and generate writespaths:.aaeeabe: Importing generated Codex CLI or Codebuff output back no longer adds duplicate rules. A scoped rule, for example
globs: ["src/**/*.ts"], is written to a nestedsrc/AGENTS.md.agentsmesh import --from codex-cli(orcodebufforwindsurf) read that file as a new rule.agentsmesh/rules/src.md, and each import and generate cycle then repeated the rule text insrc/AGENTS.mdand copied it to every other target. Now each rule in a nestedAGENTS.mdis written as anagentsmesh:embedded-ruleentry that names its canonical source, so import restores the original rule (with its globs and Codex instruction variant) and only hand-written text becomes a directory rule. If an earlier cycle already created such a rule, such as.agentsmesh/rules/src.md, delete it once.e61d957: Importing a second tool no longer drops the settings the first one brought in. Before,
agentsmesh import --from cursorafteragentsmesh import --from claude-codereplaced.agentsmesh/permissions.yamland.agentsmesh/ignorewith Cursor's values, so Claude Codedenyrules that protect secrets were lost without a word, and the nextgenerateremoved them from.claude/settings.json. Some importers (Gemini CLI, Cline, Windsurf, Crush) also replaced.agentsmesh/mcp.json. Now each import adds its permissions (allow,deny,ask), ignore patterns and MCP servers to the canonical files and keeps the ones already there; for an MCP server with the same name, the later import wins. This works the same forimport,init --yes, theimportFrom()API, the MCPimporttool, and plugin targets. Import never removes an entry from these files; to drop one, edit the canonical file.1b6e186:
agentsmesh initno longer sets up a silent overwrite of your existing tool config. In a script or CI shell (no wizard) and without--yes,initused to find existing config, print only a hint to import it, and still enable that tool, so the nextagentsmesh generatereplaced it: in--globalmode your~/.claude/CLAUDE.mdand the MCP servers in~/.claude.json, which git cannot restore. Nowinitstops with exit code 1 and writes nothing when a tool it would enable already has config. Runagentsmesh init --yesto import that config first, or pass--targetsto leave the tool out. The interactive wizard is unchanged.982f61d:
agentsmesh init --yesno longer loses a rule, command or agent when two tools have one with the same name. Before, the later tool's file replaced the earlier one in.agentsmesh/, with the earlier file's frontmatter mixed in, and the nextgeneratewrote that text over the first tool's own file. Now, if both texts are the same, one canonical file is kept. If they differ, the first tool's file keeps its name, and the later tool's version is saved as<name>-<tool>.md(for example.agentsmesh/rules/typescript-cursor.md), each with only its own frontmatter. Init prints a warning for each copy, andinit --jsonlists them insameNameCopies. The interactive wizard works the same way. Separateagentsmesh import --fromruns stay last-import-wins.ad0a72b: The one-time migration of the old lessons store (
index.yaml+topics/*.md+journal.md, used up to 0.22) no longer loses lessons. Before, it kept only single-line numbered rules under a## Rulesheading, dropped bullet rules, rules under other headings and the rest of wrapped rules, never readjournal.md, and then deleted all the old files, even when started silently by the recall hook. Now every list item under a## Rulesor## Lessonsheading becomes a lesson, numbered or bullet, with the lines that wrap onto it, and rules with the same number in two sections are both kept. If a topic file has a list item under any other heading, the migration stops, names the file and line, and changes nothing.journal.mdis kept for you to review, and the recall hook never migrates: the firstlessonscommand you run does, and says so.e66d8df: The MCP server no longer loses changes when a client sends several write calls at once. Each write tool reads a file, changes it and writes it back, so parallel calls such as three
add_mcp_server,update_permissions(append),update_ignore(append) orupdate_configcalls kept only one change while all of them reported success.agentsmesh mcpnow runs tool calls one at a time, in the order they arrive.f7a5e11: The MCP
create_*andupdate_*tools for rules, commands and skills now store the body exactly as sent. Before, with emptyfrontmatter, a body that started with a---block was saved so that the block became the file's frontmatter.get_*then returned different metadata, and body text could set fields such asroot: true,allowed-toolsornameforgenerate. Now an empty frontmatter block is written before such a body, and the MCP server reads files with the same frontmatter rules as the canonical loader.b4ba0fa: The MCP
installanduninstalltools no longer write plain-text notices into the JSON-RPC stream. When an installed skill had a broken link, or an uninstalled pack had locally changed files,agentsmesh mcpprinted those notices on stdout, which stricter MCP clients cannot parse. They now go to stderr like every other message from the server. With--json, the CLI no longer prints them into the JSON output either.00e6337:
install(includinginstall --syncandrefresh) anduninstallnow refuse a.agentsmesh/packsfolder, or a single pack folder, that resolves outside the project, for example through a symlink committed to the repository. Before, they followed the link and could write, replace or delete a folder outside the project. The check runs before anything is read or written, also under--dry-run, and the error names where the path really points. The MCPinstallanduninstalltools get the same protection.Lessons get the same protection: when
.agentsmesh/lessons(or.agentsmesh) resolves outside the project,lessons addand every other lessons write,init --lessonsand the MCP lessons tools refuse with a clear error instead of writinglessons.json, its lock or its logs there. The recall hook keeps working and simply skips its logs. A link to a folder inside the project still works.8b51999: An installed pack or an extended source can no longer replace your root instructions. Before, a pack rule with
root: true(under any name other than_root.md) silently became the root rule, soCLAUDE.md,AGENTS.mdand Cursor's root rule showed only the pack's text, andcheckstill passed. This worked even for remote packs, whose hooks, MCP servers and permissions are stripped as untrusted. Now there is exactly one root rule: your own, else an installed pack's, else an extended source's. Any otherroot: truerule is used as a normal rule, andgenerateprints a warning naming it.1dc629f:
agentsmesh generateno longer fails when the root rule links to another rule and two enabled targets write the sameAGENTS.md(for example Codex CLI and Cursor, Codex CLI and Gemini CLI, or Cursor and Windsurf). The sharedAGENTS.mdkeeps canonical references so both copies stay the same, but a relative link such as[TS rule](./typescript.md)was left unchanged and pointed to nothing, so the broken-link check stopped the run. Now such Markdown links point to the canonical file (.agentsmesh/rules/typescript.md); every other path in the shared file stays exactly as written.7a8aea3: A skill whose
SKILL.mdis a symlink is now skipped, like every other symlinked canonical file. Before,install,generateand pack loading followed the link and copied the file it pointed to into.agentsmesh/packs/and the generated.claude/skills/and.cursor/skills/folders, so a skills repository could pull a local file into folders that usually get committed. The other skills in the same source are still installed.bacd901: Windsurf rules with a single glob now activate. Windsurf reads a rule's scope from
globs:(one string, several patterns joined by commas), butagentsmesh generatewrote a single pattern asglob:, which Windsurf ignores, and several patterns as a YAML list. Now every scoped rule in.windsurf/rules/*.mdgetsglobs: <pattern>orglobs: <a>,<b>.agentsmesh import --from windsurfalso got sturdier: it readsglobsas a string or a list and still reads the olderglob:, keeps a brace pattern likesrc/**/*.{ts,tsx}whole, accepts the unquoted form from Windsurf's docs (globs: **/*.test.ts), which used to stop the whole import with a YAML error, and skips a rule it still cannot read with a warning instead of failing.543b348: Windsurf now gets each scoped rule once. For a rule with
globs: ["src/**/*.ts"],agentsmesh generatewrote.windsurf/rules/typescript.md, an identical.windsurf/rules/src.md, andsrc/AGENTS.md, so Windsurf loaded the rule several times,src/AGENTS.mdapplied it to every file insrc/, andagentsmesh import --from windsurfadded a duplicate.agentsmesh/rules/src.md. Now only.windsurf/rules/typescript.md(trigger: glob) is written; the nextgenerateremoves the old.windsurf/rules/src.md, and import ignores an oldsrc/AGENTS.mdthat holds the same text as a Windsurf rule, so a generate and import round trip no longer adds rules. You can delete such an oldsrc/AGENTS.mdif no other tool uses it. A nestedAGENTS.mdyou wrote yourself is still imported as a folder rule.