Thank you for being patient! We're working hard on resolving the issue
@tento-lona/cli lives under tento/tento-lona-js/cli/ and inspects sheets
through the live LonaSdk.Client. It talks to the API and runs
against authenticated sheets.
| Scenario | Use |
|---|---|
Inspect a .sheet.json fixture on disk | @tento-lona/cli/rows-fixtures |
| Replay a scripted ops fixture | @tento-lona/cli/rows-fixtures |
| Render a real sheet from your account | @tento-lona/cli |
| Render a sheet's tree as terminal output | @tento-lona/cli |
| Watch a real sheet for live changes | @tento-lona/cli |
Run an ephemeral :home / :weather sheet | @tento-lona/cli |
The SDK CLI requires LONA_ACCESS_TOKEN in the environment.
All scripts live under tento/tento-lona-js/cli/. Run with Deno:
deno run --allow-read --allow-env --allow-net --unstable-sloppy-imports \
tento/tento-lona-js/cli/<script>.deno.ts [args]
sheet-tree.deno.tsRender a sheet (real or ephemeral) as an indented text tree.
# Real sheet:
deno run ... tento/tento-lona-js/cli/sheet-tree.deno.ts ss_3f9a8b2e7c1d4e6f
# Ephemeral catalog template:
deno run ... tento/tento-lona-js/cli/sheet-tree.deno.ts :home
# Ephemeral URL spec:
deno run ... tento/tento-lona-js/cli/sheet-tree.deno.ts \
--url 'https://lona.so/sheet?title=Sprint&r0.type=task&r0.label=Frontend'
render-sheet-tui.deno.tsRender a sheet as a terminal grid (uses TuiReconciler from
@tento-lona/sheets).
deno run ... tento/tento-lona-js/cli/render-sheet-tui.deno.ts ss_3f9a8b2e7c1d4e6f
deno run ... tento/tento-lona-js/cli/render-sheet-tui.deno.ts :home --width 120
render-sheet-tree-watch.deno.tsReactive demo of the per-type CLI plugin pipeline. Opens an
ephemeral sheet, renders it, then mutates the sheet through a
scripted sequence (add row, rename row, delete row). After each
mutation the new tree is re-rendered and diffTree against the
previous output prints a one-line change summary above the new
tree.
deno run ... tento/tento-lona-js/cli/render-sheet-tree-watch.deno.ts
deno run ... tento/tento-lona-js/cli/render-sheet-tree-watch.deno.ts --json
The accompanying test
(cli-reactive-pipeline.deno.test.ts) exercises the same
pipeline against fixed assertions; this driver is the
eyeball-runnable counterpart.
events-row.deno.tsVerify row-backed event rendering. Opens an event row through
RowClient, decodes cells through event.v1, then seeds
EventsIndex exactly as renderers do.
deno run ... tento/tento-lona-js/cli/events-row.deno.ts \
--row r_3f9a8b2e7c1d4e6f \
--start 2026-04-01 --end 2026-05-01 \
--fetch
events-batch.deno.tsBulk-fetch events for many rows in a single batch request. Useful for benchmarking the events-fetch path.
events-aggregate.deno.tsAggregate event counts across multiple sheets / calendars over a date range.
sheet-cells-batch.deno.tsBulk-fetch cells for a list of (rowId, date) pairs. Used to exercise the canonical-cell dedup path.
All scripts read LONA_ACCESS_TOKEN from the environment.
Generate one at lona.so/settings/tokens:
export LONA_ACCESS_TOKEN="lona_pat_..."
Tokens grant the same access as your user account. Do not
commit tokens or inline them on command lines — set the env
var via .env (loaded by ./run) or your shell profile.
Every CLI rendering script wires the canonical per-type plugin
manifest from tento/tento-lona-js/cli/plugins/index.ts. New plugins added
to BUILTIN_RENDER_PLUGIN_SPECS automatically pick up CLI
support — the manifest mirrors the rows-side spec list 1:1.
The rows-side per-type plugin contract lives with the @tento-lona/sheets
library docs.
@tento-lona/cli/rows-fixtures — fixture-driven rows CLI