Skip to content

v0.5.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Jun 00:39
808987c

Added

  • ki add / ki rm — incremental write surface (#67, #16). Per-target index sync, no full rebuild. ki rm <doc-or-folder> removes a document or folder subtree from the index (a folder takes its subtree; not a whole vault — that's ki drop; not a bare section — edit the doc and re-add); source files are untouched, like git rm --cached. ki add <path> upserts one new/edited document or folder — it clears the subtree and re-ingests just those files, resolving outbound links against the whole vault and edge-restoring still-valid inbound LINKS_TO so a refresh matches a full ki index (a stale referrer after a rename correctly drops). There is no ki mvki owns the index, not the source, so a move is just rm + add. See docs/commands/add-rm.md.
  • neo4j-cli credential bridge + ki profile sync (#18). ki configure now best-effort registers each profile into neo4j-cli's credential store (named after the profile), and ki profile sync [name] (re)registers existing ones. This lets an agent run delegated graph-reasoning Cypher via neo4j-cli query "<cypher>" --credential <name> without ever handling the password — the secret flows kineo4j-cli's store through a 0600 temp --env file (never on argv, never in stdout, never in the agent session); the agent uses only the credential name. neo4j-cli stays an optional dependency: registration is skipped cleanly when it isn't installed. The SKILL Custom Cypher / Inferences sections now use --credential <profile> (schema-first).
  • ki search --under <uri-or-path> — scope a search to a containment subtree (folder / document / section). Takes a uri (works in either mode) or a filesystem path (local mode only — -N-safe, resolved through the on-disk marker). See #67, docs/commands/search.md §5.2.
  • ki search --profile P [--vault a,b] — remote mode: search a profile you're not standing in (--profile alone → all its vaults; --vault limits to a comma-separated list of vault uris; --profile P --under <uri> scopes to one subtree). --vault requires --profile; --under and --vault are mutually exclusive; all guards error clearly.
  • ki outline command + ki tree permanent alias (#60). ki outline is now the canonical name for the containment-tree renderer — the "key outline of this document" idiom reads naturally where ki tree (key + CS-data-structure jargon) didn't. ki tree is registered under the same callback as a hidden alias so existing skill bundles, blog posts, and muscle memory keep working; pass-through is bit-for-bit identical. This is the first of a small family of ki <X> verbs (concepts / connections / references on the roadmap) that all read like one coherent "key X" vocabulary.
  • Positional URI on ki outline (#60). ki outline <uri> is the new canonical shape, matching ki get <uri>. The --at <uri> flag survives as a back-compat fallback (positional wins when both are passed). All four forms work: ki outline <uri>, ki outline --at <uri>, ki tree <uri>, ki tree --at <uri>.
  • Landing page at knowledge-index.ai. A minimal static site (site/index.html + logo-derived rounded favicons) introducing ki, carrying the one-command install snippet and links to GitHub / PyPI. It's served alongside the existing install.sh, so the README's curl -sSfL https://knowledge-index.ai/install.sh | bash URL now resolves. Hosted via Cloudflare Pages: a trivial build assembles site/ + install.sh + img/ki.png into the published root, and any push to main redeploys (no GitHub Actions, no secrets). The assembled _site/ output is gitignored; site/ is the source of truth.

Changed

  • SKILL: write-surface workflow + KB-structuring runbook. The skill now teaches the ki add / ki rm workflow (rename = rm + add) and ships references/structuring-a-knowledge-base.md — light, opinion-light guidance for laying out a knowledge base from scratch (link liberally; read-only raw/ + an inbox/ drop zone + golden references + interconnected LLM-authored pages + outputs/; no hand-maintained index — ki outline is the table of contents). On First Use ends at READY, with an orient-first (ki outline, shallow-then-drill) nudge opening Usage.
  • SKILL graph-reasoning framing. The neo4j-cli delegation now leads with a reasoning-first nudge — "reason over the graph (paths / neighborhoods / centrality), don't translate the question into a query" — and explicitly leans on neo4j-cli's own skills (which already enforce schema-first, graph-shaped querying) rather than re-teaching the stance. Light-touch by design: an empirical run against the live wiki graph showed the tool already scaffolds most of it (docs/experiments/graph-reasoning.md).
  • ki status is walk-up only — uses -C/--directory, no --profile. status reads your local files (it diffs disk against the index for STALE), so its profile/vault/source all come from the vault's binding via the walk-up; --profile (which would void the walk-up and the local source it needs) is removed. It also drops the positional [PATH] for -C (matching search/outline/get): ki status (cwd) or ki status -C <dir>. To check whether a vault is indexed in another profile without local source, use ki vault list --profile P. (pre-1.0; ki status <path> / ki status --profile no longer work.)
  • ki status STALE no longer prescribes ki index ., and gains -v/--verbose. The STALE line now reports the drift (N added, M changed on disk since last index) without advising a re-index — a bare ki index . is cwd-relative (wrong when status was pointed elsewhere) and a full rebuild is overkill for one file. ki status -v lists the out-of-sync files (+ added / - removed / ~ changed); the uri lists are also in --json detail. (Re-indexing guidance, with an explicit vault path, lives in the skill's Re-Indexing section.)
  • ki outline scopes to the vault you're in. A bare ki outline (no uri) now renders the vault at your cwd / -C <dir>, not every vault — aligning it with the scoping model (docs/scoping.md §3.2). All vaults in a profile is now the explicit ki outline --profile <name>; an explicit <uri> still renders that subtree. Bare ki outline outside any vault (no uri, no --profile) is a clear error instead of dumping everything.
  • No default profile, anywhere. ki no longer has a default_profile, and never auto-picks a profile (not even when only one is configured). Every command resolves the profile by one rule (docs/scoping.md §4): --profile → the vault's .ki binding → $KI_PROFILEerror. Unresolvable profiles now fail with a clear message instead of silently using a default — most importantly for ki nuke (wipes a whole profile) and ki index (binds a fresh vault). Migration: a default_profile: key in an existing config.yaml is ignored; select a profile with --profile or KI_PROFILE. ki configure no longer writes a default (the --set-default flag is removed); ki profile list no longer shows a default marker.
  • ki search scope predicate now matches a node that is or is under any of one-or-more containment roots (the any() three-part = / STARTS WITH '/' / STARTS WITH '#' test), replacing the single uri STARTS WITH <vault>/ prefix. Correct for vault / folder / document / section roots alike. See docs/commands/search.md §5.4.
  • Agent skill renamed kiknowledge-base. The bundled skill's frontmatter name is now knowledge-base, and ki skill install writes it to <agent-config>/skills/knowledge-base/SKILL.md (previously .../skills/ki/SKILL.md) — a use-case-descriptive name (the skill builds and searches a knowledge base), sitting alongside the sibling neo4j-cli skill. The ki CLI command and the knowledge-index Python package are unchanged.
    • Migration: a prior ki skill install left the skill at the old skills/ki/ path. After upgrading, re-run ki skill install to write the new knowledge-base/ skill, then delete the stale skills/ki/ directory in each agent's config by hand — ki skill remove now targets the new path and won't clean up the old one.
  • Docs sweep to ki outline (#60). AGENTS.md, docs/, skills/ki/SKILL.md, and source-file docstrings now use ki outline as the canonical command name, with ki tree mentioned as a recognized alias. docs/tree-format.md is renamed to docs/outline-format.md (the format spec itself is unchanged; the file's title and every reference is retargeted). Error messages in ki get similarly point at ki outline for Folder/Vault URI hints.
  • Source-file renames to match the new vocabulary. src/ki/commands/tree.pysrc/ki/commands/outline.py (and the dispatcher cmd_treecmd_outline); tests/unit/test_tree.pytests/unit/test_outline.py. The Click-callback names outline_cmd and tree_cmd are kept as-is — tree_cmd specifically names the alias's callback.

Fixed

  • ki get --type full no longer leaks Rule-1 uri: child pointers (#42). The reconstructed reading-order body dropped the scaffolding pointer lines (the children are inlined right after, so they were redundant). Stripping is guarded to the reconstruction's known node uris, so it can never remove a user's literal uri:… prose. --type content is unchanged — it keeps the pointers (Rule 1 is its purpose). (--type path keeps its full metadata bag by design — the "metadata, no content" view.)
  • ki outline --at <folder> --depth 3 no longer raises RecursionError on cyclic :LINKS_TO subgraphs (#60). The DFS in src/ki/commands/outline.py::_dfs_emit walks the merged HAS + LINKS_TO child map; a section that links back to an ancestor doc (or any already-emitted node) produces a cycle in that map, which would recurse forever without a guard. Now uses a visited: set[str] so the walk always terminates. The L-row still renders so the link is visible; the renderer just won't re-expand the target's subtree under it.
  • _parse_at no longer truncates external URL Documents. Pre-0.5.0 the code partitioned on the first colon to strip a Label:uri prefix — which silently ate the URL scheme on external URL Documents, turning https://beltagy.net/ into //beltagy.net/ and breaking ki outline <url> for any URL-keyed :Document. Now matches only the four real node-label prefixes (Vault: / Folder: / Document: / Section:) and returns everything else verbatim — preserving the URI-column round-trip invariant for http:// / https:// / file:// URIs that came in via the #37 link-capture work.