Skip to content

Releases: johnnydecimal/cli.johnnydecimal.com

3.5.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 15 Sep 05:09
34f6707

AI generated. Reviewed by Johnny.

This release makes jd agent-setup the one home for setup. The
johnnydecimal.com MCP server's install_cli tool clones this repo and
then sends the agent to this prompt. The prompt no longer sends the
agent back to the server.

Changes

  • The prompt carries the safety rules that lived in the server's text
    before: name the package manager before jq is installed, add to an
    existing config and never overwrite it, JD_CONFIG overrides the
    file's location, the rc file for each shell with config.fish for
    fish, show the line and the file before writing, never add the source
    line twice, append and never reorder, resolve a symlinked rc file
    and say where the real file lives, and touch no other file.
  • Step 3 sends a bought system that is not on disk to the server's
    install_system tool, which builds it and writes the config.
  • Step 8 offers the zsh prompt both ways, _jd_pwd in the user's own
    prompt or Johnny's theme, and warns that the theme sets PROMPT
    whatever was there. Nothing is added without a yes.
  • The line "If you have the Johnny.Decimal MCP server, call its
    install_cli tool" is gone.
  • test/cases/setup.sh checks the new lines and that install_cli is
    no longer named.

3.4.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 14 Sep 22:32
d13581d

AI generated. Reviewed by Johnny.

This release adds a shell hook for fish. Sean Lunsford contributed it
in #12.

Features

  • jd.fish is the shell hook for fish. Source it from config.fish.
    It defines jd, jdex, and one command per system, the same as
    jd.sh does. Each one runs bin/jd and moves your shell to the
    folder the program prints. It also puts bin on $PATH. There is
    no fish port of the zsh prompt.

Changes

  • test/cases/fish.sh covers the fish hook. It runs fish as a
    subprocess, and skips with one line when fish is not installed. CI
    installs fish, so the tests run there.
  • The README lists fish next to bash and zsh, with its own install
    step.

3.3.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 14 Sep 08:13
186eb19

AI generated. Reviewed by Johnny.

This release adds a rename and a subfolder target to jd move.

Features

  • jd move <path> <id> --as <name> moves and renames in one step.
    --as=<name> works too. The journal keeps the old name in from and
    the new name in to, so jd undo move gives the old name back. The
    clash check is on the new name.
  • jd move <path> <id>/<subfolder> puts the file or folder in a
    subfolder of the ID's folder, one level down. jd makes the subfolder
    when it does not exist. An undo leaves the subfolder in place. A
    second / is refused.
  • The --json result has two more fields: name, the name at to,
    and folder, the folder at to.

3.2.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 12 Sep 07:24
69e5201

AI generated. Reviewed by Johnny.

This release adds jd move, which moves a file or a folder into an ID
and journals it, and jd undo move, which moves it back. Both are beta.

Features

  • jd move <path> <id> moves the file or folder at <path> into the
    folder for an ID or a W number, and prints the new path. An ID that
    is in the JDex but has no folder gets its folder made first. It
    refuses a name the target already holds, an iCloud stub that is not
    downloaded, and a target inside the thing you are moving. It never
    renames.
  • Every move is one line in ~/.jd/journal.jsonl: when, which system,
    the ID, from, to, and whether a person or a program asked. The file
    is append only. The journal has to be writable before anything
    moves. jd writes nothing into the JDex.
  • jd undo move moves the newest move in the system back, or, with a
    path, the move that put that path where it is. It refuses if the
    moved thing is no longer where jd put it, or if something else is
    now where it came from. An undo is one more journal line.
  • Both take --dry-run and --json, in the shape jd new uses.

Changes

  • The README opens with an attribution line that points at the AI
    attribution section.

Closes #8.

3.1.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 12 Sep 02:05
3b409ce

AI generated. Reviewed by Johnny.

This release adds jd agent-setup, which has your agent write the config
for you.

Features

  • jd agent-setup prints a prompt for your agent. Paste it in, and the
    agent finds your systems on disk, confirms each root with you, and
    writes ~/.jd/config.json and the source line in your shell config.
    It works before any config exists. Only the prompt goes to stdout, so
    jd agent-setup | pbcopy puts it on the clipboard.

Changes

  • The "no config" error is now three lines: the file it looked for, the
    help page for a person to read, and jd agent-setup for an agent.
    Every command that needs the config says the same thing.

Closes #7.

v3.0.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 12 Sep 00:38
d58c80d

AI generated. Reviewed by Johnny.

This release makes jd a standalone program, and removes the 1.x shims.

Breaking changes

  • The jd-nav/ and jd-prompt/ directories are gone. A .zshrc that
    sources either one now fails at shell start with "no such file".
    Replace that line with source ~/.jd/cli/jd.sh.
  • jd new --json no longer changes directory. It prints the object and
    exits. Without --json, jd new moves into the new folder as before.

Features

  • bin/jd is the program. It can be run without sourcing anything,
    from a script, cron, an agent, or another program.
  • A move run from the program prints the folder on stdout and exits 0,
    so cd "$(~/.jd/cli/bin/jd 11.11)" works.
  • The shell hook sets JD_HOOK when it runs the program. A move then
    exits 3 instead of 0, and the hook does the cd.
  • --system is now read only as the first word, so it cannot be taken
    for a title or for a flag of jd new.
  • jd help now works without a config.
  • source ~/.jd/cli/jd.sh now adds ~/.jd/cli/bin to $PATH.

Changes

  • jd.sh is now a hook. It defines jd, jdex and one command per
    system, adds bin to $PATH, and loads nothing from lib but the
    zsh prompt. Each function it defines is self-contained, so a shell
    that copies jd without its helpers still gets a working command.
  • The version number now lives only in bin/jd. jd version reads it
    from there.
  • jd and jdex no longer hard-code a system. The program resolves
    the default on every run, so a config edit takes effect immediately.

v2.5.1

Choose a tag to compare

@johnnydecimal johnnydecimal released this 10 Sep 07:24
7d40096

AI generated. Reviewed by Johnny.

Changed

  • jd beta on warns you that beta features are unstable and modify
    your data. You also see the warning in jd beta --help, and when you
    run a beta feature with beta off.

v2.5.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 10 Sep 07:17
1468d2f

AI generated. Reviewed by Johnny.

Added

  • Beta features, and one flag that turns them all on.
    • jd beta says whether beta is on. jd beta on and jd beta off
      turn it on and off.
    • The flag is "beta": true at the top level of ~/.jd/config.json.
      JD_BETA=1 turns beta on for one shell, and writes nothing.
    • Beta features may change, or go, without notice.
  • jd new 21.41 A title makes a whole work package with one command.
    It is a beta feature.
    • It takes the next free W number from the JDex and the filesystem.
    • It writes the JDex note from your template note.
    • It makes the folder, and copies your template folder into it.
    • It makes the project in your task app, and writes the links both
      ways. Things is the first task app. Obsidian is the first note app.
    • The workPackages block in ~/.jd/config.json names the templates
      and the apps. config.example.json shows the block.
  • jd new -n says what it would make, and makes nothing.
  • jd new --no-tasks makes the work package without the task app.
  • jd new --refresh reads the template project out of Things and writes
    it to the template file.
  • jd new --json prints one JSON object on stdout, for an agent. Every
    failure has a code that does not change.
  • jd new --peek prints the next free W number, and makes nothing.
  • A template note can hold a blank, such as {{?SCOPE}} or
    {{?DELIVERABLE What we hand over}}. jd new leaves the blank in the
    note and names it, so that you or your agent can fill it in.

Changed

  • new and beta are command words in first position. jd new and
    jd beta no longer search for a folder with that word in its name. A
    scoped search, such as jd 21 new, still does.

v2.4.1

Choose a tag to compare

@johnnydecimal johnnydecimal released this 10 Sep 04:58
f545b6e

AI generated. Reviewed by Johnny.

Changed

  • jd finds the work package area by the start of its number. It looks
    for a folder named W0000... at the top of the system. It used to
    read the area from the JDex entry's parent folder, and match the whole
    number, so a renamed area stopped it.

    A work package always lives in W0000-9999, so there is nothing to
    work out. The linked ID in a name like W0214~00.00 is not read.

v2.4.0

Choose a tag to compare

@johnnydecimal johnnydecimal released this 10 Sep 04:48
dccc275

AI generated.

Added

  • A work package that is in the JDex but has no folder gets its folder
    made for it, the same as an ID does. jd W0189 makes
    W0189~21.41 Some title from the JDex entry of that name, then goes
    to it.

    The folder goes in the W0000-9999 area. If the filesystem has no
    folder for that area, jd says so and makes nothing. The linked ID in
    a name like W0189~21.41 is not read.

    2.4.1 changes how jd finds that area.