v0.9.6: help canonical + prefix-free short commands (nc-find→nfind guard) + HCISITEDIR auto-init

Hands-on ergonomics for Bryan's Gundersen testing. All three changes are
backward-compatible — every old name still works.

1. `help` is now the canonical reference command (live, never-drifts table
   from bin/ + each tool's help block). `cheat` kept as a thin alias.

2. Prefix-free short commands: nc-table→table, nc-parse→parse, nc-msgs→msgs,
   nc-status→status, nc-engine→engine, nc-xlate→xlate, nc-inbound→inbound, plus
   the write tools (create-thread, set-field, insert-protocol, make-jump,
   provision-jumps, tclgen, document, revisions, diff-interface, smat-diff,
   regression). COLLISION GUARD: nc-find→`nfind` (NOT `find` — would shadow the
   system find on PATH); nc-paths keeps `paths`. Every nc-* name retained as a
   backward-compat alias. Tab-completion + the help/cheat table updated.

3. HCISITEDIR auto-init in the shared preflight (bin/_nc_common.sh): HCIROOT +
   HCISITE still required, but $HCIROOT/$HCISITE is created if missing rather
   than erroring. Conservative + idempotent; respects an operator-set HCISITEDIR.

VERSION→0.9.6, MANIFEST regenerated (--check clean), bash -n clean.

Co-Authored-By: Clover (Claude Opus 4.8) <noreply@anthropic.com>
This commit is contained in:
Clover 2026-06-08 20:21:32 -07:00
parent ba224477e3
commit 400398ca7d
48 changed files with 689 additions and 346 deletions

View File

@ -4,6 +4,41 @@ All notable changes to `cloverleaf-larry` / `larry-anywhere` are recorded here.
Versioning is loose-semver; bumps trigger the in-process self-update on every
running client via `LARRY_BASE_URL` + `MANIFEST`.
## v0.9.6 — 2026-06-08
Hands-on ergonomics for Bryan's Gundersen testing (Clover). Three changes, all
backward-compatible — every old name still works.
- **`help` is the canonical command** (twin of `cheat`). Same live, never-drifts
table generated from the `bin/` wrapper set + each tool's help block. `cheat`
is kept as a thin alias (`cheat` now execs `help`), so existing docs/muscle
memory are unaffected. `help <filter>` and `help -h` behave like the `cheat`
equivalents; `help nc-table` / `help nc-find` map to the canonical `table` /
`nfind` rows.
- **Prefix-free short commands** — the `nc-*` on-PATH commands lost the prefix
for faster manual typing: `nc-table`→`table`, `nc-parse`→`parse`,
`nc-msgs`→`msgs`, `nc-status`→`status`, `nc-engine`→`engine`, `nc-xlate`→`xlate`,
`nc-inbound`→`inbound`, plus the write tools (`create-thread`, `set-field`,
`insert-protocol`, `make-jump`, `provision-jumps`, `tclgen`, `document`,
`revisions`, `diff-interface`, `smat-diff`, `regression`).
- **COLLISION GUARD:** `nc-find`'s prefix-free name is **`nfind`**, NOT `find`
— a bare `find` would shadow the system `find(1)` on PATH. (`nc-paths` keeps
its existing prefix-free name `paths`; `where`/`tbn`/`tbp`/`tbh`/`tbpr`
unchanged.) All other target names (`table`, `parse`, `status`, …) were
verified NOT to collide with a common system command.
- Every old `nc-*` name is retained as a **backward-compat alias** (thin wrapper
that execs the new short command), so existing scripts and habits keep working.
- Tab-completion and the live `help`/`cheat` table updated to the new names;
`nc-*` aliases are hidden from the table (shown once, canonically) but still
complete and still resolve under `help nc-<x>`.
- **`HCISITEDIR` auto-init** — `$HCIROOT` and `$HCISITE` are still required (the
tools error as before if unset), but `$HCISITEDIR="$HCIROOT/$HCISITE"` is now
**created automatically if missing**, in the shared preflight every wrapper
sources (`bin/_nc_common.sh::_nc_init_sitedir`). Conservative: acts only when
both `HCIROOT` (a real dir) and `HCISITE` are set; respects an operator-set
`HCISITEDIR`; idempotent; mkdir failure is a non-fatal warning so the tool's
own clearer error still surfaces.
## v0.9.5 — 2026-06-08
**`cheat` — a one-screen, never-drifts reference for every short command — plus a

View File

@ -23,17 +23,17 @@
# scripts/make-manifest.sh and bump VERSION.
# Top-level scripts
larry.sh 93e72650cf031ea3ec6a3cce3a323d2a712bfd7a1cbaed15eac9e0da9cc8f824
larry.sh 81a87ab2232c202990933ccc82c12b125c69ff1b41e65e9c12ee63f88b57128c
larry-tunnel.sh 6b050e4eeab15669f4858eaf3b807f168f211ced07815db9521bc40a093f6aaa
larry-auth.sh a220cdf7878569dc3028951ee57fc8d5e706a8ca5c6aa45347b58facb386f831
larry-rollback.sh 91b5e9aa6c79266bf306dcfba4ca791c07971bd6924d67a779037531648aa6d0
install-larry.sh b7ca41ac5b6e3a687ba22d1246dc102fe70a3ed47d6d0a3b0fdedb44cb37debd
install-larry.sh daf2814a41052783cd8bf4252cec9276878860be8945a7fe678182c51d7eac05
uninstall-larry.sh c53ad2d8354c7adeb243b541f027f3f481e4a8661eecfd7af14d7ca53cfcaad9
# Metadata
VERSION 8780409dbc52c96276102c5a079a7d3e325510d7bf87af5257508ecc088a3730
VERSION fd51233354c9a61adaf49572b45f44f7e9cc76fc2465ea25beca00ef95856ee1
MANUAL.md 5ff54d6d5fae826f8b3da1eb3be6476076bb15f9b1417a4de285e59ea37e1b1f
CHANGELOG.md 75e80341189204a3320eb60da1db7c190b5e34f94c3359895ef2744153107dcd
CHANGELOG.md 8573fa4c1911f665f71f792d992ab331e5bb2aa5462ebd29c12994781588843e
# Agent personas (system-prompt overlays)
agents/larry.md 0a1ef737e7fc133ab35be09f79c3a4df33de814e0404b69b950932d0c8a01be1
@ -123,11 +123,36 @@ lib/nc-regression.sh 70999a60608439f7bf1a3abb9f5e9854b5ea03025ef29ddbca683896346
# … run directly (no `larry tools` prefix). _nc_common.sh is the shared
# resolver (sourced, not a command); nc-completion.bash is the 3-level
# (command/site/thread) completion, enumerated LIVE from the NetConfig tree.
bin/_nc_common.sh 591b60d091e9c8a5e1068844dffe2e19f44d262fcf1132dc47e425d4673495e1
bin/nc-completion.bash 3a5b1b29f34f2382556d9f8620882ab7edbb2d27dfa35177793889b289d22a9a
# v0.9.5: `cheat` — one-screen reference generated LIVE from this bin/ set +
# each tool's help block (never drifts). On PATH; `cheat`, `cheat <filter>`, -h.
bin/cheat 94a164da2aebe15b68f52ed675ff75547235c35eaa25f96df73fbe1c695b93a2
bin/_nc_common.sh 7afcafbb38b8e2554858e5c2825cd56c8694d2e3b8ecb72526ae9cb8b88eb34d
bin/nc-completion.bash e2de2938bf358145583967b3b124f75911a4877340cd280e2c69c6ea4300352d
# v0.9.5/0.9.6: `help` — one-screen reference generated LIVE from this bin/ set +
# each tool's help block (never drifts). On PATH; `help`, `help <filter>`, -h.
# `cheat` is a kept backward-compat alias of `help` (same output).
bin/help f8e6f48f5266922b9bf9d1ce15b96527540604e580c0134e8a64c44091130be7
bin/cheat 578d6de462b1875853a58f4dbe75a695d8ea9a8603f1428de0b59727294882a8
# v0.9.6: prefix-free short commands (drop the nc- prefix for hands-on typing).
# `find` would shadow system find, so nc-find's prefix-free name is `nfind`.
bin/parse 09b6d35dc63299f48729eff89e021d04e0c0c55ef8281f2452158c5c3e81bf9f
bin/nfind 0f4fe1d63e22dca42e76225ada005f336f67dfea4f432ed7749cef76c300c9c3
bin/inbound d278a1713592c95be8687ac7ea0932305baf4bbddf69469388bfcfeb05c800d0
bin/status 44a031a05a37d2000f37653201daeac47bf9dc2d5c33e9746d8a78b267ab5097
bin/engine 45de61808ce7c71ef66caead52f7d44dec5bd7d9e2caa531d9f8bc179a050b93
bin/xlate 93b8833e9ab3529f754e8c2c17d0760aa0e955796ef2db1f8c54510c67a22214
bin/table 7c19ba0366dd9dd8114a4474b4cc9a7a700049c6154d35210b0e2851d48131e1
bin/msgs f39831ecea2f0e1ae5a8cf67661d0d98b78ffd47a6262816acd8857e858a70a5
bin/create-thread d4ff24af4bea42f2df9be8a64e4594fddccd4f2a946ebd7d29021817d9e76d5f
bin/set-field ced157e7c993a1ca244e953cbf32c0ee954a77d49d15ea1a67481b6b5b1ef242
bin/insert-protocol 018ed84e4dc2e7648e39e6968d82f278233cafdd1ec8472cc895d5ed0ec34bcf
bin/make-jump c7fe79a759036874e57dcadb58b1f88f3628e027478beda461bdd258b12e4ff0
bin/provision-jumps b1e97976988e66fed71ebcb71ceadda1a8d542fff9dde3953f5d916d10dad090
bin/tclgen e159d7e36d93ab6dcf4a94cb795f33341282b5b9eddb3cd0f1d18dff13180c20
bin/document ce361ab92b2e236cf3598c24891b2088c844eb7cd35650bb5b632a3ded3ca6bb
bin/revisions ed9227b4130e60e7097b614a5a93fd3d3e8ca848d4c47fd35abf478242cb4d6d
bin/diff-interface 39a52186475e5983bf72295f672e2bc5d2b449e3298940b8883bbf8a37c62c3f
bin/smat-diff d553aa6d169ba98f11ea5f63f32f15e5bfcc77ad2a570288d739cd675307a94d
bin/regression 2adf5ade4199077ccf6a0b8426f83ac15531d9dabe74084b98bb305dec5ee160
# v0.9.4 short commands + v0.9.6 nc-* are now backward-compat ALIASES of the
# prefix-free names above (so existing muscle memory / scripts keep working).
bin/tbn 60e69288a502f1280e6bf4bc6dc19568858b34024ba26c34f8ff7ed52457d02c
bin/tbp 8cdc82de0bbbee8da97d4ab958f7b5ead5aed8c7658c3d73ff9106df6383bf29
bin/tbh 79556fe72d58393c2a00e744b892c5a1a69bae3be6fcdd0ba46dd108ee67c092
@ -135,26 +160,26 @@ bin/tbpr dca260c16e10944eaedbcb3c59f43e4631586d521742a2f124128ec4090bf117
bin/where 4a69061b9ab5b09d4d1ca6b48e1cf597d8c6c8ac88092e8e5a1d523a506de907
bin/paths 3abe6c6ff548f8df6a5df83d48da77bb4da4e39df1d2c3b04cd9960c5fde20a5
bin/route_test 75e0ee675dba3dec8f36d374ed62d7b4c006fc1516fbcc8364d22e842cea31f1
bin/nc-parse c50ae884fdee50e9b089f0f92e3fd79d968b53f85c452a6d8a89a230bff12d29
bin/nc-paths b6fb67cb97530f54c6efb6b2dadc41700b1f9c7b5599b9e6d5d166fd68789a72
bin/nc-find b8298c8289bbb476f55ae142e41ae0432f6d2e5719ba1d95177ccf9299b3e6cf
bin/nc-inbound af62c41b1448fbad39135ffb8d3b0035ef17871249fa6ae99701c83c47c67c89
bin/nc-status 73c4ae9dc92d4d86b660df3edc9c9207013188ab8bda18965559b7221cac607b
bin/nc-engine e774ab31685b7b9ff900605f6695c5b4430764903ea2a4ffc6bd60714f8f47fb
bin/nc-xlate 0336cc1fb3ef0985db91c8cc418b99ca03010b497d8d54b2b651367530ae86fa
bin/nc-table f069b95f6ca563d833f2c2b9ec77995918242a6bb501dfd52ad1aad1147a6305
bin/nc-create-thread 81091802664449122cd30c7a1862220b7f8227cf26e54c300d29a449e242be88
bin/nc-set-field 8254a6bcb205b0a23c211845413d0f954f160675b4b94a9443412a1747c18ac3
bin/nc-insert-protocol 64052ef5ab2ea222866f4d4276d933e6467305520858ff6503a408bd7551e011
bin/nc-make-jump e88b977c34fa326f0c32f434dafc61cf9782bf951b2904b02d6287523e4a0406
bin/nc-provision-jumps f7b556099298c0b343b9f0698a9f5533533692095b62ffb0b145f00d1f7c720f
bin/nc-tclgen 789731c5509d7060ebc4b8a769d82fa620771af06be206e441be23929a66f947
bin/nc-document 66f386d38ccca924d97a2935d8fc9fbcbf0aef6333f5193d340684667468d241
bin/nc-revisions 0e2432045e722aa46380f3fbb55d8115668f9d6bf3eb00ba2ccb9e8513af5a44
bin/nc-diff-interface ef07e61bc5a9c8f3c46b023a09d7ec2c7c43538e391a99dbc8cbabace6c9f850
bin/nc-smat-diff 4e878b096c282a7f3cd36da73d05405d7cd82c198fd10c17b362e23743b75f43
bin/nc-regression 070cf2e9f0f0339e7c387b60fcea0ba8dc58f0b7431c59272a3deb16e4876b7f
bin/nc-msgs 173e89bfc9fb1b86b1c27fe634b7560b25597621f47e5c38f35e7e3dbdec8a6e
bin/nc-parse a07676441b4fcc7a7e4d239adeec03ad659a4dcd91942f2dd52642c1e17d6657
bin/nc-paths e0ad5d429f7beb417743164b04528a5434b5870040a24de13c6f10320cf5b148
bin/nc-find f6a75598c914eb82f6d058508e421f7ae8b0988ea3ede7da0fcdf5f3040541c6
bin/nc-inbound fbb4e05810e15ae28cc46d631d14d37f92e0bea46a02ff4e3a672bcd4948fb87
bin/nc-status e54b3971619312557aa6bed9757e1cc9699bdaa97fe2bee6e201d76b08e6870c
bin/nc-engine 98f317a105b0e7657f0c17e1d1ebbb289bdd5ec850d526743b6888585e266944
bin/nc-xlate a7d856fc83dead70362666e6b6a8069f35cc227c7707b89ace3f1d3dce27bfeb
bin/nc-table 0efea594b41f2fe536904b05fa919593aec10988cfc65c500724e198cd0873bf
bin/nc-create-thread b08827a522074821f664ff9a9878a35e2737888319540b8211944b76147aaf80
bin/nc-set-field d2c364b4a1d2220af8353c35beeb77123602c9e7bc9d84007f3e503a0ee5f859
bin/nc-insert-protocol d8a47d4093536c58a089a5fbc456d1eb968009910892fbfac4cb67f436821fa9
bin/nc-make-jump 0bcffd2568d60238881c190f1a03264cf074e20ca80712d137094fb52eaa70c4
bin/nc-provision-jumps 4396316ea4a90ee39b71421f46b3c0d147eb4899bb265fd7b03a5d58e935ea41
bin/nc-tclgen 95156cc5dc9bc3d5c1cc7cfb6e0d679e4fb45ba18154dd631b56e802379c41a6
bin/nc-document df587d8e7eabb9a53556ffc6f0dc3939a99c765705787ebcfe2f2294eb92a2d9
bin/nc-revisions d6131e0d633e94be2fb580b56ed5adc17ad0053759c516bc2269c5946a289bc3
bin/nc-diff-interface 61974a43c46c3ad84fa3a3c3d9d2e955dd2d00b318422a18012d8b66013f1d4b
bin/nc-smat-diff 46b00c00bd128bcccddf44a19b1948f5e70ba7c3f31e04259a3b2800436ae77b
bin/nc-regression 59a5f25fcea642433613f0933fe06dd9fa25b372e5d130e119cb466a076099bb
bin/nc-msgs 8a938cefedbb2bad9496c6f84831788b6ac45d34e8b16fc60d8aa47c25adea76
bin/hl7-field cb56984dfc9342563e05cdf0e3514a64df2099d24adeaa1d5b22cc6ce298eb73
bin/hl7-diff 2d965567ea4f737d97ea92313dfacd84b745cea74313d1be565a3234240b76f3
bin/len2nl d73136e353d7964f097b4a50993ba2a3364550e13b7ae5a1b43af00ed8eddbe3

View File

@ -1 +1 @@
0.9.5
0.9.6

View File

@ -42,6 +42,45 @@ _nc_hciroot() {
printf '%s' "${HCIROOT:-}"; return 0
}
# --- HCISITEDIR auto-init (v0.9.6) -------------------------------------------
# Contract: $HCIROOT and $HCISITE are expected to ALREADY exist — the tools
# themselves still error if those are unset/missing (that check is intentional
# and unchanged). But $HCISITEDIR ("$HCIROOT/$HCISITE") is a DERIVED path the
# operator may not have created yet. Rather than letting a downstream tool die
# on a missing site dir, we materialize it here, in the one preflight every
# short-command wrapper sources.
#
# Safety rails (deliberately conservative — we never invent a path):
# • Only acts when BOTH $HCIROOT and $HCISITE are non-empty AND $HCIROOT is a
# real directory. If HCIROOT/HCISITE are unset/bogus we do NOTHING and let
# the tool's own preflight produce its usual, clearer error.
# • If $HCISITEDIR is already exported we respect it verbatim (operator override).
# • Creates the dir only if missing; idempotent; mkdir failure is non-fatal
# (warn once to stderr) so a read-only/edge env still reaches the tool.
# • Always exports HCISITEDIR so the backing lib tools (which read it) see it.
_nc_init_sitedir() {
# Respect an explicit operator-set HCISITEDIR.
if [ -n "${HCISITEDIR:-}" ]; then export HCISITEDIR; return 0; fi
local root="${HCIROOT:-}" site="${HCISITE:-}"
# Both must be present and HCIROOT must really exist — otherwise stay silent
# and let the tool's own "no \$HCIROOT / set HCISITE" error fire.
[ -n "$root" ] && [ -n "$site" ] && [ -d "$root" ] || return 0
local sitedir="$root/$site"
if [ ! -d "$sitedir" ]; then
if mkdir -p "$sitedir" 2>/dev/null; then
printf 'cloverleaf-larry: created missing HCISITEDIR %s\n' "$sitedir" >&2
else
printf 'cloverleaf-larry: warning — could not create HCISITEDIR %s (continuing)\n' "$sitedir" >&2
# still export the intended value; the tool will report the real problem.
fi
fi
export HCISITEDIR="$sitedir"
return 0
}
# Run at source time so every wrapper that dots this file gets HCISITEDIR ready
# before it execs the backing lib tool.
_nc_init_sitedir
# --- live site enumeration ----------------------------------------------------
# A "site" = an immediate subdir of $HCIROOT that contains a NetConfig file.
# This is what nc-find / nc-paths actually walk, so completion stays truthful.

198
bin/cheat
View File

@ -1,197 +1,9 @@
#!/usr/bin/env bash
# cheat — one-screen reference for ALL Cloverleaf-Larry short commands.
# Generated LIVE from the bin/ wrapper set + each tool's help block, so it can
# NEVER drift from what is actually installed on PATH. No static list.
#
# cheat # the full table: command · what it does · one example
# cheat tbn # just the row(s) whose name contains 'tbn'
# cheat hl7 # filter — every command matching 'hl7'
# cheat -h # this help
#
# For each command shown, `cheat` derives:
# • the description — from the wrapper's own `# name — …` header line, or (for
# the thin nc-*/hl7-* pass-through wrappers) from line 1 of
# the underlying lib/<tool>.sh, whichever is more specific.
# • ONE real example — the first indented `# <cmd> …` example in the wrapper's
# help block; else the first `# Usage:` form of the backing
# lib tool, rewritten to the bare on-PATH command; else
# `<cmd> -h`.
# Run `<cmd> -h` (or `<cmd> --help`) on any row for the full, authoritative help.
# cheat — backward-compat ALIAS for `help` (v0.9.6). `help` is the canonical
# command; `cheat` is kept so existing muscle memory / docs keep working. All
# args pass straight through, so `cheat tbn`, `cheat hl7`, `cheat -h` behave
# exactly like the `help` equivalents.
set -o pipefail
# --- locate our own bin/ dir (follow one symlink level, like the wrappers) ---
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
# Reuse the shared lib resolver so the example-from-lib path finds lib/<tool>.sh.
[ -f "$_BINDIR/_nc_common.sh" ] && . "$_BINDIR/_nc_common.sh"
if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then
awk 'NR==1{next} /^#/{sub(/^# ?/,""); print; next} {exit}' "${BASH_SOURCE[0]}"
exit 0
fi
_filter="${1:-}"
# Resolve the lib/ dir once (best-effort; example-from-lib degrades gracefully).
_LIB=""
if command -v _nc_resolve_lib >/dev/null 2>&1; then
_LIB="$(_nc_resolve_lib 2>/dev/null || true)"
fi
# --- header line of a wrapper: the `# <name> — <desc>` comment (line 2) -------
# Returns the text after the em-dash separator. The codebase convention is a
# literal em-dash (—, U+2014) between the command name and its description; we
# split ONLY on that so hyphenated command names (csv-to-table, hl7-field) stay
# intact. A wrapper whose first comment has no em-dash yields no desc here (the
# caller then falls back to the backing lib tool's description).
_wrapper_desc() {
# LC_ALL=C → byte-oriented index()/substr() so the 3-byte em-dash (—) is
# skipped exactly (under a UTF-8 locale substr counts chars and over-skips).
LC_ALL=C awk '
NR==1 { next } # shebang
/^#/ {
line = $0
sub(/^# ?/, "", line)
i = index(line, "\xe2\x80\x94") # UTF-8 bytes for — (em-dash)
if (i > 0) {
rest = substr(line, i + 3)
sub(/^[[:space:]]+/, "", rest)
print rest
exit
}
}
!/^#/ { exit }
' "$1"
}
# Is this wrapper one of the thin pass-through wrappers whose own description is
# the generic boilerplate? If so we prefer the backing lib tool's description.
_is_boilerplate_desc() {
case "$1" in
*"direct, on-PATH wrapper for lib/"*) return 0 ;;
*) return 1 ;;
esac
}
# Description of the backing lib tool (line 1 after its `# tool.sh — `).
_lib_desc() {
local tool="$1" f="$_LIB/$1.sh"
[ -n "$_LIB" ] && [ -f "$f" ] || return 1
LC_ALL=C awk '
/^#/ {
line = $0; sub(/^# ?/, "", line)
i = index(line, "\xe2\x80\x94") # UTF-8 bytes for — (em-dash)
if (i > 0) {
rest = substr(line, i + 3)
sub(/^[[:space:]]+/, "", rest)
print rest; exit
}
}
!/^#/ { exit }
' "$f"
}
# First indented `# <cmd> …` example inside a wrapper's help block. The header
# line ("# <cmd> — …") is excluded by requiring (a) at least TWO spaces after the
# `#` (real example blocks are indented `# <cmd> …`) and (b) no em-dash on the
# line (the header carries the em-dash; example lines never do).
_wrapper_example() {
local cmd="$1"
LC_ALL=C awk -v cmd="$cmd" '
NR==1 { next }
/^#/ {
raw = $0
body = raw; sub(/^#/, "", body) # keep indentation
if (body !~ ("^[[:space:]][[:space:]]+" cmd "([[:space:]]|$)")) { next }
if (index(body, "\xe2\x80\x94") > 0) next # skip the header (has —)
sub(/^[[:space:]]+/, "", body)
sub(/[[:space:]]+#.*$/, "", body) # drop trailing "# comment"
print body; exit
}
!/^#/ { exit }
' "$2"
}
# First `# Usage:` form of the backing lib tool, rewritten to the bare command.
# e.g. " nc-find.sh --name PATTERN # …" -> "nc-find --name PATTERN"
_lib_example() {
local cmd="$1" tool="$2" f="$_LIB/$2.sh"
[ -n "$_LIB" ] && [ -f "$f" ] || return 1
LC_ALL=C awk -v tool="$tool" -v cmd="$cmd" '
/^#[[:space:]]*Usage:/ { inu=1; next }
inu && /^#/ {
line = $0; sub(/^#/, "", line)
if (line ~ /[^[:space:]]/) {
sub(/^[[:space:]]+/, "", line)
sub(/[[:space:]]+#.*$/, "", line) # drop trailing comment
if (line ~ ("^" tool "\\.sh")) {
sub("^" tool "\\.sh", cmd, line) # nc-find.sh … -> nc-find …
print line; exit
}
}
next
}
inu && !/^#/ { exit }
' "$f"
}
# --- gather the command list (skip helpers / sourced files / fetched bins) ---
_cmds=()
for _p in "$_BINDIR"/*; do
[ -f "$_p" ] && [ -x "$_p" ] || continue
_b="$(basename "$_p")"
case "$_b" in
_nc_common.sh|nc-completion.bash|cheat|jq|jq.exe) continue ;;
*.bash) continue ;;
esac
_cmds+=("$_b")
done
# Sort for stable output.
IFS=$'\n' _cmds=($(printf '%s\n' "${_cmds[@]}" | sort)); unset IFS
# --- build rows -------------------------------------------------------------
_rows=""
for _c in "${_cmds[@]}"; do
if [ -n "$_filter" ] && ! printf '%s' "$_c" | grep -qiF "$_filter"; then
continue
fi
_wf="$_BINDIR/$_c"
# description
_desc="$(_wrapper_desc "$_wf")"
if [ -z "$_desc" ] || _is_boilerplate_desc "$_desc"; then
_ld="$(_lib_desc "$_c")"
[ -n "$_ld" ] && _desc="$_ld"
fi
[ -z "$_desc" ] && _desc="(no description)"
# collapse whitespace, trim to one clause for the table
_desc="$(printf '%s' "$_desc" | tr -s '[:space:]' ' ' | sed 's/^ *//; s/ *$//')"
# example
_ex="$(_wrapper_example "$_c" "$_wf")"
if [ -z "$_ex" ]; then
_ex="$(_lib_example "$_c" "$_c")"
fi
[ -z "$_ex" ] && _ex="$_c -h"
_ex="$(printf '%s' "$_ex" | tr -s '[:space:]' ' ' | sed 's/^ *//; s/ *$//')"
_rows="${_rows}${_c}"$'\t'"${_desc}"$'\t'"${_ex}"$'\n'
done
if [ -z "$_rows" ]; then
echo "cheat: no commands match '${_filter}'" >&2
exit 1
fi
# --- render: aligned three-column table -------------------------------------
printf 'Cloverleaf-Larry short commands (run <cmd> -h for full help)\n\n'
printf '%s' "$_rows" | awk -F'\t' '
{ c[NR]=$1; d[NR]=$2; e[NR]=$3; n=NR; if (length($1)>w) w=length($1) }
END {
for (i=1;i<=n;i++) {
printf " %-*s %s\n", w, c[i], d[i]
printf " %-*s e.g. %s\n", w, "", e[i]
}
}
'
exec bash "$_BINDIR/help" "$@"

10
bin/create-thread Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# create-thread — direct, on-PATH wrapper for lib/nc-create-thread.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-create-thread` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "create-thread: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-create-thread.sh" --help; fi
exec bash "$lib/nc-create-thread.sh" "$@"

10
bin/diff-interface Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# diff-interface — direct, on-PATH wrapper for lib/nc-diff-interface.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-diff-interface` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "diff-interface: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-diff-interface.sh" --help; fi
exec bash "$lib/nc-diff-interface.sh" "$@"

10
bin/document Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# document — direct, on-PATH wrapper for lib/nc-document.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-document` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "document: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-document.sh" --help; fi
exec bash "$lib/nc-document.sh" "$@"

10
bin/engine Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# engine — direct, on-PATH wrapper for lib/nc-engine.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-engine` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "engine: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-engine.sh" --help; fi
exec bash "$lib/nc-engine.sh" "$@"

229
bin/help Executable file
View File

@ -0,0 +1,229 @@
#!/usr/bin/env bash
# help — one-screen reference for ALL Cloverleaf-Larry short commands.
# Generated LIVE from the bin/ wrapper set + each tool's help block, so it can
# NEVER drift from what is actually installed on PATH. No static list.
# (Canonical command is `help`; `cheat` is a kept alias — same output.)
#
# help # the full table: command · what it does · one example
# help tbn # just the row(s) whose name contains 'tbn'
# help hl7 # filter — every command matching 'hl7'
# help -h # this help
#
# For each command shown, `help` derives:
# • the description — from the wrapper's own `# name — …` header line, or (for
# the thin nc-*/hl7-* pass-through wrappers) from line 1 of
# the underlying lib/<tool>.sh, whichever is more specific.
# • ONE real example — the first indented `# <cmd> …` example in the wrapper's
# help block; else the first `# Usage:` form of the backing
# lib tool, rewritten to the bare on-PATH command; else
# `<cmd> -h`.
# Run `<cmd> -h` (or `<cmd> --help`) on any row for the full, authoritative help.
set -o pipefail
# --- locate our own bin/ dir (follow one symlink level, like the wrappers) ---
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
# Reuse the shared lib resolver so the example-from-lib path finds lib/<tool>.sh.
[ -f "$_BINDIR/_nc_common.sh" ] && . "$_BINDIR/_nc_common.sh"
if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then
awk 'NR==1{next} /^#/{sub(/^# ?/,""); print; next} {exit}' "${BASH_SOURCE[0]}"
exit 0
fi
_filter="${1:-}"
# v0.9.6: nc-* are backward-compat aliases hidden from the table, so a user who
# types `help nc-table` (old muscle memory) would otherwise get "no match".
# Translate an `nc-<x>` filter to the canonical short name it aliases so the
# right row still shows: nc-find → nfind, every other nc-<x> → <x>.
case "$_filter" in
nc-find) _filter="nfind" ;;
nc-paths) _filter="paths" ;;
nc-*) _filter="${_filter#nc-}" ;;
esac
# Resolve the lib/ dir once (best-effort; example-from-lib degrades gracefully).
_LIB=""
if command -v _nc_resolve_lib >/dev/null 2>&1; then
_LIB="$(_nc_resolve_lib 2>/dev/null || true)"
fi
# --- header line of a wrapper: the `# <name> — <desc>` comment (line 2) -------
# Returns the text after the em-dash separator. The codebase convention is a
# literal em-dash (—, U+2014) between the command name and its description; we
# split ONLY on that so hyphenated command names (csv-to-table, hl7-field) stay
# intact. A wrapper whose first comment has no em-dash yields no desc here (the
# caller then falls back to the backing lib tool's description).
_wrapper_desc() {
# LC_ALL=C → byte-oriented index()/substr() so the 3-byte em-dash (—) is
# skipped exactly (under a UTF-8 locale substr counts chars and over-skips).
LC_ALL=C awk '
NR==1 { next } # shebang
/^#/ {
line = $0
sub(/^# ?/, "", line)
i = index(line, "\xe2\x80\x94") # UTF-8 bytes for — (em-dash)
if (i > 0) {
rest = substr(line, i + 3)
sub(/^[[:space:]]+/, "", rest)
print rest
exit
}
}
!/^#/ { exit }
' "$1"
}
# Is this wrapper one of the thin pass-through wrappers whose own description is
# the generic boilerplate? If so we prefer the backing lib tool's description.
_is_boilerplate_desc() {
case "$1" in
*"direct, on-PATH wrapper for lib/"*) return 0 ;;
*) return 1 ;;
esac
}
# Backing lib tool name for a wrapper (v0.9.6). The prefix-free short commands
# (table, nfind, …) no longer share a basename with their lib tool (table →
# lib/nc-table.sh), so we read the actual `lib/<tool>.sh` the wrapper execs from
# the wrapper body. Falls back to the command name (legacy 1:1 wrappers).
_backing_tool() {
local wf="$1" cmd="$2" t
t="$(LC_ALL=C sed -n 's#.*lib/\([A-Za-z0-9_-]\{1,\}\)\.sh.*#\1#p' "$wf" 2>/dev/null | head -1)"
[ -n "$t" ] && { printf '%s' "$t"; return 0; }
printf '%s' "$cmd"
}
# Description of the backing lib tool (line 1 after its `# tool.sh — `).
_lib_desc() {
local tool="$1" f="$_LIB/$1.sh"
[ -n "$_LIB" ] && [ -f "$f" ] || return 1
LC_ALL=C awk '
/^#/ {
line = $0; sub(/^# ?/, "", line)
i = index(line, "\xe2\x80\x94") # UTF-8 bytes for — (em-dash)
if (i > 0) {
rest = substr(line, i + 3)
sub(/^[[:space:]]+/, "", rest)
print rest; exit
}
}
!/^#/ { exit }
' "$f"
}
# First indented `# <cmd> …` example inside a wrapper's help block. The header
# line ("# <cmd> — …") is excluded by requiring (a) at least TWO spaces after the
# `#` (real example blocks are indented `# <cmd> …`) and (b) no em-dash on the
# line (the header carries the em-dash; example lines never do).
_wrapper_example() {
local cmd="$1"
LC_ALL=C awk -v cmd="$cmd" '
NR==1 { next }
/^#/ {
raw = $0
body = raw; sub(/^#/, "", body) # keep indentation
if (body !~ ("^[[:space:]][[:space:]]+" cmd "([[:space:]]|$)")) { next }
if (index(body, "\xe2\x80\x94") > 0) next # skip the header (has —)
sub(/^[[:space:]]+/, "", body)
sub(/[[:space:]]+#.*$/, "", body) # drop trailing "# comment"
print body; exit
}
!/^#/ { exit }
' "$2"
}
# First `# Usage:` form of the backing lib tool, rewritten to the bare command.
# e.g. " nc-find.sh --name PATTERN # …" -> "nc-find --name PATTERN"
_lib_example() {
local cmd="$1" tool="$2" f="$_LIB/$2.sh"
[ -n "$_LIB" ] && [ -f "$f" ] || return 1
LC_ALL=C awk -v tool="$tool" -v cmd="$cmd" '
/^#[[:space:]]*Usage:/ { inu=1; next }
inu && /^#/ {
line = $0; sub(/^#/, "", line)
if (line ~ /[^[:space:]]/) {
sub(/^[[:space:]]+/, "", line)
sub(/[[:space:]]+#.*$/, "", line) # drop trailing comment
if (line ~ ("^" tool "\\.sh")) {
sub("^" tool "\\.sh", cmd, line) # nc-find.sh … -> nc-find …
print line; exit
}
}
next
}
inu && !/^#/ { exit }
' "$f"
}
# --- gather the command list (skip helpers / sourced files / fetched bins) ---
_cmds=()
for _p in "$_BINDIR"/*; do
[ -f "$_p" ] && [ -x "$_p" ] || continue
_b="$(basename "$_p")"
case "$_b" in
# sourced helpers / fetched bins / the help command(s) themselves
_nc_common.sh|nc-completion.bash|help|cheat|jq|jq.exe) continue ;;
*.bash) continue ;;
# v0.9.6: nc-* are now backward-compat ALIASES of the prefix-free short
# commands (nc-table→table, nc-find→nfind, …). Hide the aliases from the
# table so each tool shows once, under its canonical short name. The user
# filter still finds them: `help nc-table` matches both the alias name and
# the (un-skipped) canonical row, but the row shown is the canonical one.
nc-*) continue ;;
esac
_cmds+=("$_b")
done
# Sort for stable output.
IFS=$'\n' _cmds=($(printf '%s\n' "${_cmds[@]}" | sort)); unset IFS
# --- build rows -------------------------------------------------------------
_rows=""
for _c in "${_cmds[@]}"; do
if [ -n "$_filter" ] && ! printf '%s' "$_c" | grep -qiF "$_filter"; then
continue
fi
_wf="$_BINDIR/$_c"
# backing lib tool (table -> nc-table, nfind -> nc-find, …; legacy 1:1 ok)
_tool="$(_backing_tool "$_wf" "$_c")"
# description
_desc="$(_wrapper_desc "$_wf")"
if [ -z "$_desc" ] || _is_boilerplate_desc "$_desc"; then
_ld="$(_lib_desc "$_tool")"
[ -n "$_ld" ] && _desc="$_ld"
fi
[ -z "$_desc" ] && _desc="(no description)"
# collapse whitespace, trim to one clause for the table
_desc="$(printf '%s' "$_desc" | tr -s '[:space:]' ' ' | sed 's/^ *//; s/ *$//')"
# example
_ex="$(_wrapper_example "$_c" "$_wf")"
if [ -z "$_ex" ]; then
_ex="$(_lib_example "$_c" "$_tool")"
fi
[ -z "$_ex" ] && _ex="$_c -h"
_ex="$(printf '%s' "$_ex" | tr -s '[:space:]' ' ' | sed 's/^ *//; s/ *$//')"
_rows="${_rows}${_c}"$'\t'"${_desc}"$'\t'"${_ex}"$'\n'
done
if [ -z "$_rows" ]; then
echo "help: no commands match '${_filter}'" >&2
exit 1
fi
# --- render: aligned three-column table -------------------------------------
printf 'Cloverleaf-Larry short commands (run <cmd> -h for full help)\n\n'
printf '%s' "$_rows" | awk -F'\t' '
{ c[NR]=$1; d[NR]=$2; e[NR]=$3; n=NR; if (length($1)>w) w=length($1) }
END {
for (i=1;i<=n;i++) {
printf " %-*s %s\n", w, c[i], d[i]
printf " %-*s e.g. %s\n", w, "", e[i]
}
}
'

10
bin/inbound Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# inbound — direct, on-PATH wrapper for lib/nc-inbound.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-inbound` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "inbound: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-inbound.sh" --help; fi
exec bash "$lib/nc-inbound.sh" "$@"

10
bin/insert-protocol Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# insert-protocol — direct, on-PATH wrapper for lib/nc-insert-protocol.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-insert-protocol` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "insert-protocol: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-insert-protocol.sh" --help; fi
exec bash "$lib/nc-insert-protocol.sh" "$@"

10
bin/make-jump Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# make-jump — direct, on-PATH wrapper for lib/nc-make-jump.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-make-jump` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "make-jump: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-make-jump.sh" --help; fi
exec bash "$lib/nc-make-jump.sh" "$@"

10
bin/msgs Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# msgs — direct, on-PATH wrapper for lib/nc-msgs.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-msgs` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "msgs: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-msgs.sh" --help; fi
exec bash "$lib/nc-msgs.sh" "$@"

View File

@ -150,7 +150,22 @@ _nc_complete_nc_find() {
# nc-paths shares the paths completer.
_nc_complete_nc_paths() { _nc_complete_paths; }
# Register. Short commands first (the headline ergonomics), then full names.
# nfind is the prefix-free name for nc-find (NOT `find` — that would shadow the
# system find on PATH). Same mode-aware completer.
_nc_complete_nfind() { _nc_complete_nc_find; }
# The remaining prefix-free short commands (v0.9.6: table, parse, status, …) take
# "a site OR a thread" as their natural first argument, so the union completer is
# the right default. (Their nc-* aliases get the SAME completer below.)
_nc_complete_table() { _nc_complete_names; }
_nc_complete_parse() { _nc_complete_names; }
_nc_complete_msgs() { _nc_complete_threads_only; }
_nc_complete_status() { _nc_complete_names; }
_nc_complete_engine() { _nc_complete_names; }
_nc_complete_xlate() { _nc_complete_names; }
# Register. Canonical prefix-free short commands first (the headline ergonomics);
# then the kept nc-* aliases get the SAME completer so muscle memory still tabs.
complete -F _nc_complete_tbn tbn
complete -F _nc_complete_tbp tbp
complete -F _nc_complete_tbh tbh
@ -158,5 +173,20 @@ complete -F _nc_complete_tbpr tbpr
complete -F _nc_complete_where where
complete -F _nc_complete_paths paths
complete -F _nc_complete_route_test route_test
complete -F _nc_complete_nfind nfind
complete -F _nc_complete_table table
complete -F _nc_complete_parse parse
complete -F _nc_complete_msgs msgs
complete -F _nc_complete_status status
complete -F _nc_complete_engine engine
complete -F _nc_complete_xlate xlate
# Backward-compat aliases — same completer as their canonical short command.
complete -F _nc_complete_nc_find nc-find
complete -F _nc_complete_nc_paths nc-paths
complete -F _nc_complete_table nc-table
complete -F _nc_complete_parse nc-parse
complete -F _nc_complete_msgs nc-msgs
complete -F _nc_complete_status nc-status
complete -F _nc_complete_engine nc-engine
complete -F _nc_complete_xlate nc-xlate

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-create-thread — direct, on-PATH wrapper for lib/nc-create-thread.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-create-thread — backward-compat ALIAS for the prefix-free `create-thread` (v0.9.6).
# The canonical command is now `create-thread`; `nc-create-thread` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-create-thread: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-create-thread.sh" --help; fi
exec bash "$lib/nc-create-thread.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/create-thread" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-diff-interface — direct, on-PATH wrapper for lib/nc-diff-interface.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-diff-interface — backward-compat ALIAS for the prefix-free `diff-interface` (v0.9.6).
# The canonical command is now `diff-interface`; `nc-diff-interface` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-diff-interface: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-diff-interface.sh" --help; fi
exec bash "$lib/nc-diff-interface.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/diff-interface" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-document — direct, on-PATH wrapper for lib/nc-document.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-document — backward-compat ALIAS for the prefix-free `document` (v0.9.6).
# The canonical command is now `document`; `nc-document` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-document: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-document.sh" --help; fi
exec bash "$lib/nc-document.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/document" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-engine — direct, on-PATH wrapper for lib/nc-engine.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-engine — backward-compat ALIAS for the prefix-free `engine` (v0.9.6).
# The canonical command is now `engine`; `nc-engine` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-engine: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-engine.sh" --help; fi
exec bash "$lib/nc-engine.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/engine" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-find — direct, on-PATH wrapper for lib/nc-find.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-find — backward-compat ALIAS for the prefix-free `nfind` (v0.9.6).
# The canonical command is now `nfind`; `nc-find` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-find: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-find.sh" --help; fi
exec bash "$lib/nc-find.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/nfind" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-inbound — direct, on-PATH wrapper for lib/nc-inbound.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-inbound — backward-compat ALIAS for the prefix-free `inbound` (v0.9.6).
# The canonical command is now `inbound`; `nc-inbound` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-inbound: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-inbound.sh" --help; fi
exec bash "$lib/nc-inbound.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/inbound" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-insert-protocol — direct, on-PATH wrapper for lib/nc-insert-protocol.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-insert-protocol — backward-compat ALIAS for the prefix-free `insert-protocol` (v0.9.6).
# The canonical command is now `insert-protocol`; `nc-insert-protocol` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-insert-protocol: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-insert-protocol.sh" --help; fi
exec bash "$lib/nc-insert-protocol.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/insert-protocol" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-make-jump — direct, on-PATH wrapper for lib/nc-make-jump.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-make-jump — backward-compat ALIAS for the prefix-free `make-jump` (v0.9.6).
# The canonical command is now `make-jump`; `nc-make-jump` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-make-jump: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-make-jump.sh" --help; fi
exec bash "$lib/nc-make-jump.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/make-jump" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-msgs — direct, on-PATH wrapper for lib/nc-msgs.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-msgs — backward-compat ALIAS for the prefix-free `msgs` (v0.9.6).
# The canonical command is now `msgs`; `nc-msgs` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-msgs: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-msgs.sh" --help; fi
exec bash "$lib/nc-msgs.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/msgs" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-parse — direct, on-PATH wrapper for lib/nc-parse.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-parse — backward-compat ALIAS for the prefix-free `parse` (v0.9.6).
# The canonical command is now `parse`; `nc-parse` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-parse: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-parse.sh" --help; fi
exec bash "$lib/nc-parse.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/parse" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-paths — direct, on-PATH wrapper for lib/nc-paths.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-paths — backward-compat ALIAS for the prefix-free `paths` (v0.9.6).
# The canonical command is now `paths`; `nc-paths` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-paths: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-paths.sh" --help; fi
exec bash "$lib/nc-paths.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/paths" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-provision-jumps — direct, on-PATH wrapper for lib/nc-provision-jumps.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-provision-jumps — backward-compat ALIAS for the prefix-free `provision-jumps` (v0.9.6).
# The canonical command is now `provision-jumps`; `nc-provision-jumps` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-provision-jumps: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-provision-jumps.sh" --help; fi
exec bash "$lib/nc-provision-jumps.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/provision-jumps" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-regression — direct, on-PATH wrapper for lib/nc-regression.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-regression — backward-compat ALIAS for the prefix-free `regression` (v0.9.6).
# The canonical command is now `regression`; `nc-regression` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-regression: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-regression.sh" --help; fi
exec bash "$lib/nc-regression.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/regression" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-revisions — direct, on-PATH wrapper for lib/nc-revisions.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-revisions — backward-compat ALIAS for the prefix-free `revisions` (v0.9.6).
# The canonical command is now `revisions`; `nc-revisions` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-revisions: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-revisions.sh" --help; fi
exec bash "$lib/nc-revisions.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/revisions" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-set-field — direct, on-PATH wrapper for lib/nc-set-field.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-set-field — backward-compat ALIAS for the prefix-free `set-field` (v0.9.6).
# The canonical command is now `set-field`; `nc-set-field` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-set-field: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-set-field.sh" --help; fi
exec bash "$lib/nc-set-field.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/set-field" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-smat-diff — direct, on-PATH wrapper for lib/nc-smat-diff.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-smat-diff — backward-compat ALIAS for the prefix-free `smat-diff` (v0.9.6).
# The canonical command is now `smat-diff`; `nc-smat-diff` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-smat-diff: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-smat-diff.sh" --help; fi
exec bash "$lib/nc-smat-diff.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/smat-diff" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-status — direct, on-PATH wrapper for lib/nc-status.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-status — backward-compat ALIAS for the prefix-free `status` (v0.9.6).
# The canonical command is now `status`; `nc-status` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-status: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-status.sh" --help; fi
exec bash "$lib/nc-status.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/status" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-table — direct, on-PATH wrapper for lib/nc-table.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-table — backward-compat ALIAS for the prefix-free `table` (v0.9.6).
# The canonical command is now `table`; `nc-table` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-table: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-table.sh" --help; fi
exec bash "$lib/nc-table.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/table" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-tclgen — direct, on-PATH wrapper for lib/nc-tclgen.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-tclgen — backward-compat ALIAS for the prefix-free `tclgen` (v0.9.6).
# The canonical command is now `tclgen`; `nc-tclgen` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-tclgen: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-tclgen.sh" --help; fi
exec bash "$lib/nc-tclgen.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/tclgen" "$@"

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash
# nc-xlate — direct, on-PATH wrapper for lib/nc-xlate.sh (no `larry tools` prefix needed).
# All args pass straight through; -h/--help is handled by the underlying tool.
# nc-xlate — backward-compat ALIAS for the prefix-free `xlate` (v0.9.6).
# The canonical command is now `xlate`; `nc-xlate` is kept so existing muscle
# memory / scripts / docs keep working. All args pass straight through.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nc-xlate: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-xlate.sh" --help; fi
exec bash "$lib/nc-xlate.sh" "$@"
_BINDIR="$(cd "$(dirname "$_self")" && pwd)"
exec bash "$_BINDIR/xlate" "$@"

10
bin/nfind Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# nfind — direct, on-PATH wrapper for lib/nc-find.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-find` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "nfind: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-find.sh" --help; fi
exec bash "$lib/nc-find.sh" "$@"

10
bin/parse Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# parse — direct, on-PATH wrapper for lib/nc-parse.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-parse` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "parse: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-parse.sh" --help; fi
exec bash "$lib/nc-parse.sh" "$@"

10
bin/provision-jumps Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# provision-jumps — direct, on-PATH wrapper for lib/nc-provision-jumps.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-provision-jumps` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "provision-jumps: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-provision-jumps.sh" --help; fi
exec bash "$lib/nc-provision-jumps.sh" "$@"

10
bin/regression Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# regression — direct, on-PATH wrapper for lib/nc-regression.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-regression` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "regression: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-regression.sh" --help; fi
exec bash "$lib/nc-regression.sh" "$@"

10
bin/revisions Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# revisions — direct, on-PATH wrapper for lib/nc-revisions.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-revisions` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "revisions: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-revisions.sh" --help; fi
exec bash "$lib/nc-revisions.sh" "$@"

10
bin/set-field Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# set-field — direct, on-PATH wrapper for lib/nc-set-field.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-set-field` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "set-field: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-set-field.sh" --help; fi
exec bash "$lib/nc-set-field.sh" "$@"

10
bin/smat-diff Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# smat-diff — direct, on-PATH wrapper for lib/nc-smat-diff.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-smat-diff` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "smat-diff: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-smat-diff.sh" --help; fi
exec bash "$lib/nc-smat-diff.sh" "$@"

10
bin/status Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# status — direct, on-PATH wrapper for lib/nc-status.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-status` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "status: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-status.sh" --help; fi
exec bash "$lib/nc-status.sh" "$@"

10
bin/table Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# table — direct, on-PATH wrapper for lib/nc-table.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-table` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "table: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-table.sh" --help; fi
exec bash "$lib/nc-table.sh" "$@"

10
bin/tclgen Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# tclgen — direct, on-PATH wrapper for lib/nc-tclgen.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-tclgen` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "tclgen: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-tclgen.sh" --help; fi
exec bash "$lib/nc-tclgen.sh" "$@"

10
bin/xlate Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# xlate — direct, on-PATH wrapper for lib/nc-xlate.sh (no `larry tools` prefix needed).
# Short, prefix-free name (v0.9.6). Backward-compat alias: `nc-xlate` (same tool).
# All args pass straight through; -h/--help is handled by the underlying tool.
set -o pipefail
_self="${BASH_SOURCE[0]}"; [ -L "$_self" ] && _self="$(readlink "$_self")"
. "$(cd "$(dirname "$_self")" && pwd)/_nc_common.sh"
lib="$(_nc_resolve_lib)" || { echo "xlate: lib/ toolkit not found (set LARRY_LIB_DIR or LARRY_HOME)" >&2; exit 1; }
if [ $# -eq 0 ]; then exec bash "$lib/nc-xlate.sh" --help; fi
exec bash "$lib/nc-xlate.sh" "$@"

View File

@ -261,7 +261,10 @@ fetch lib/journal.sh "$LARRY_HOME/lib/journal.sh"
# completion available immediately, before the first `larry` launch.
fetch bin/_nc_common.sh "$LARRY_HOME/bin/_nc_common.sh"
fetch bin/nc-completion.bash "$LARRY_HOME/bin/nc-completion.bash"
for _w in cheat tbn tbp tbh tbpr where paths route_test \
for _w in help cheat tbn tbp tbh tbpr where paths route_test \
parse nfind inbound status engine xlate table msgs \
create-thread set-field insert-protocol make-jump provision-jumps \
tclgen document revisions diff-interface smat-diff regression \
nc-parse nc-paths nc-find nc-inbound nc-status nc-engine nc-xlate nc-table \
nc-create-thread nc-set-field nc-insert-protocol nc-make-jump nc-provision-jumps \
nc-tclgen nc-document nc-revisions nc-diff-interface nc-smat-diff nc-regression \

View File

@ -99,7 +99,7 @@ set -o pipefail
# ─────────────────────────────────────────────────────────────────────────────
# Config
# ─────────────────────────────────────────────────────────────────────────────
LARRY_VERSION="0.9.5"
LARRY_VERSION="0.9.6"
LARRY_HOME="${LARRY_HOME:-$HOME/.larry}"
# ─────────────────────────────────────────────────────────────────────────────