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:
parent
ba224477e3
commit
400398ca7d
35
CHANGELOG.md
35
CHANGELOG.md
@ -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
|
||||
|
||||
83
MANIFEST
83
MANIFEST
@ -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
|
||||
|
||||
@ -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
198
bin/cheat
@ -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
10
bin/create-thread
Executable 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
10
bin/diff-interface
Executable 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
10
bin/document
Executable 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
10
bin/engine
Executable 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
229
bin/help
Executable 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
10
bin/inbound
Executable 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
10
bin/insert-protocol
Executable 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
10
bin/make-jump
Executable 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
10
bin/msgs
Executable 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" "$@"
|
||||
@ -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
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
11
bin/nc-find
11
bin/nc-find
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
11
bin/nc-msgs
11
bin/nc-msgs
@ -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" "$@"
|
||||
|
||||
11
bin/nc-parse
11
bin/nc-parse
@ -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" "$@"
|
||||
|
||||
11
bin/nc-paths
11
bin/nc-paths
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
11
bin/nc-table
11
bin/nc-table
@ -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" "$@"
|
||||
|
||||
@ -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" "$@"
|
||||
|
||||
11
bin/nc-xlate
11
bin/nc-xlate
@ -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
10
bin/nfind
Executable 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
10
bin/parse
Executable 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
10
bin/provision-jumps
Executable 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
10
bin/regression
Executable 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
10
bin/revisions
Executable 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
10
bin/set-field
Executable 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
10
bin/smat-diff
Executable 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
10
bin/status
Executable 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
10
bin/table
Executable 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
10
bin/tclgen
Executable 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
10
bin/xlate
Executable 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" "$@"
|
||||
@ -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 \
|
||||
|
||||
2
larry.sh
2
larry.sh
@ -99,7 +99,7 @@ set -o pipefail
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# Config
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
LARRY_VERSION="0.9.5"
|
||||
LARRY_VERSION="0.9.6"
|
||||
LARRY_HOME="${LARRY_HOME:-$HOME/.larry}"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Loading…
Reference in New Issue
Block a user