Repository navigation
feat: land the stacked release features on main - #133
Merged
Merged
Conversation
Every agent tool now belongs to one category (Session, Memory, Explore, or Manage) and its description opens with that label. Orientation prints what each category is for, and the tool inventory and skills are reorganized around it. Only Explore tools are marked open-world. Searching is reserved for note content and the hub's public directory. keg_search, flight_search, and namespace_search are replaced by explore_kegs, explore_flights, and explore_people (and `tap explore kegs|flights|people`), backed by POST /api/v1/explore. The caller's own KEGs, flights, and namespaces are listed, never searched: keg_list now carries titles and descriptions, and namespace_list and invitation_list are always available. The REST contract revision moves to 2026-10-12, since the namespace search route is gone.
On a Hub a flight's cover reaches the KEGs its covered notes link to, up to the cover entry's depth, instead of settings relationships. A cover entry with role none blocks a KEG however it is reached, and covers nothing even when another entry names it. KEG settings links are renamed aliases, since they now only name KEGs for keg:~alias/N links. Settings written with links are still read when aliases is absent, and LinkEntry remains as a deprecated alias of AliasEntry. keg_check reports keg: links that cannot be followed: one missing the @ of a qualified reference, or an alias the settings do not name.
whoami now carries personal_namespace, the user namespace the hub found the account owning rather than one assumed from the username. Relayed MCP tools are granted from it, so `tap auth status` shows it, or says the hub found none. An older hub that does not report it prints no line.
node_edit accepts patch, a unified diff against the node's current body, as an alternative to content, so a small change to a long note sends only the changed lines. Every hunk's context and removed lines must match the body exactly and in one place; a patch that does not fit is refused with the lines it expected and nothing is written. A patch is a content write, held to expected_content_hash, and keeps the body's line endings. Remote kegs send it to the hub as content_patch. An update may keep a body that already opens with frontmatter, written before the no-frontmatter rule, but no update can introduce one.
Where a repository keeps a trash, removing a node moves it there with its snapshots, files, and images, and leaves links to it alone, so restoring it is lossless. trash_list shows removed nodes and why they went, and trash_restore puts 1-100 of them back at their ids. A purge deletes them for good and points links that still name them at node 0. A trashed id stays reserved: no node can be moved onto it, and an archive import that lands on one moves the trashed node to a fresh id first, so it stays restorable. Remote kegs use the hub's /trash routes.
node_merge folds a duplicate into a target in one write: the target takes the merged body (content or patch), links to the source are pointed at the target, and the source goes to the trash as merged, so it restores as it was. keg_replace finds and replaces text across a keg in one atomic write, literal or regex, narrowed by a query and optionally including metadata. dry_run reports every node that would change. A node the write would refuse is reported with its error and left alone while the rest are written. Both are MCP-only for now.
`tap url [REF]` prints the Hub web link for the current keg, a node, a keg, a flight, or a namespace; --open also opens it in the browser and --json adds the kind and canonical reference. The MCP url tool returns the same link so an agent can hand the reader something clickable. The command builds the link from configuration alone, so it skips the startup credential refresh.
`tap info` shows the hub and the user signed in to it, the default keg, the active flight, and the kegs that flight covers with your role in each, noting the config tier that set each default. A hub that cannot be reached is a warning; the local defaults still print. `tap use` and `tap info` share one resolution of those defaults.
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.
Summary
Lands the stacked features on
main. PRs #125–#132 were reviewed and merged, but each merged into the branch below it in the stack, so only #124 reachedmain. This is those eight commits rebased ontomain, unchanged:explore_*public directory (feat(mcp): sort tools into categories and explore the public directory #125)none, settingsaliases(feat(flight): follow note links in covers and block KEGs with none #126)tap auth status(feat(auth): show the personal namespace the hub reports #127)node_editunified diff patches (feat(keg): edit a node's content with a unified diff #128)node_mergeandkeg_replace(feat(mcp): merge nodes and replace text across a keg #130)tap urland theurltool (feat: link to Hub pages with tap url and the url tool #131)tap info(feat(cli): show the CLI's context with tap info #132)The rebase applied without conflicts, and the resulting tree is identical to the tip of
feat/tap-infothat #132 merged.Tests
Each commit built and passed
go test ./...in the stacked PRs; CI runs on this branch.