Skip to content
aylith-labsPublic

About

One manifest, every terminal. A standard for teaching a terminal what the text in it means.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Lintel

A terminal shows you text. Almost all of it is a reference to something that lives somewhere else — an issue key, a session id, a pull request, a pane address. The terminal knows none of it, so you copy the string into a browser to find out what it is.

Lintel closes that loop with a file. A manifest is JSON that says how to recognise a reference, how to look it up, and how to show it. Hover the text, get a card. Click it, land on the thing. No plugin code, no process, no extension host — a manifest is data, and the terminal is the only thing that executes.

{
    "id": "jira",
    "settings": [{ "key": "host", "required": true }],
    "credentials": [{ "key": "email" }, { "key": "token" }],
    "matchers": [
        { "kind": "text", "pattern": "\b(?<key>[A-Z][A-Z0-9]{1,9}-\d{1,7})\b",
          "link": "https://{{settings.host}}/browse/{{key}}", "suggested": true }
    ],
    "fetch": [
        { "id": "issue", "url": "https://{{settings.host}}/rest/api/3/issue/{{key}}",
          "auth": { "type": "basic", "user": "{{credentials.email}}", "password": "{{credentials.token}}" } }
    ],
    "fields": [
        { "key": "summary", "label": "Summary", "path": "/fields/summary", "kind": "title" },
        { "key": "status",  "label": "Status",  "path": "/fields/status/name", "kind": "badge" }
    ]
}

That is the whole idea. CAB-8209 in a build log is now hoverable, and the card says what it is.

What is here

SPEC.md The standard. Start here.
schema/lintel-1.json JSON Schema, for an editor to validate against.
schemes.md The URI registry — stith://, shefrd://, and what a host does with one.
presets.json The preset catalogue: ready-made rules, so adding one does not start with writing a regex.
paths/ Shared absolute path detection and Windows/WSL resolution policy in C++ and TypeScript.
file-types.json Shared language names, extensions, filenames, icons, file groups and platform reveal labels.
CONTRIBUTING.md Propose a preset or add one with npm run preset:add; no terminal build required.
integrations/ The canonical manifests. Hosts sync from here.
conformance/ Canonical data and host manifest parity checks.

Who implements it

Host What it is
Windows Terminal (aylith fork) C++/WinRT, ICU regex, Windows.Web.Http, credentials in the Windows vault.
Torbie TypeScript/Angular, JS RegExp, Node https, credentials via Electron safeStorage.
shefrd Produces shefrd:// addresses described by a Lintel manifest; it is not a host checked by the conformance runner.

Run node conformance/run.mjs --torbie /path/to/torbie/tabby-links/src/integrations to compare a specific host's manifests against the canonical copy. Use --terminal with the Windows Terminal fork's src/cascadia/TerminalSettingsModel/integrations directory. Without an explicit path, the runner tries its historical Windows mount paths and reports when those hosts are skipped. A divergence written down in conformance/allowances.json, with a reason about the host, is a decision. One that is not is drift, and the suite fails on it.

Why it has a name

Because "integration manifest" is a description, and a description cannot be cited, versioned or refused. A lintel is the beam over an opening: it is what lets you put a door in a wall without the wall coming down, and it is the piece nobody looks at once it is in.

Synchronizing preset consumers

presets.json owns the ordered catalog. Generate both consumers together:

node conformance/sync-presets.mjs --terminal /path/to/terminal --torbie /path/to/torbie
node conformance/sync-presets.mjs --check --terminal /path/to/terminal --torbie /path/to/torbie

The command validates IDs, examples and unique integration matches before writing. Commit the resulting C++ header and TypeScript catalog; host builds are offline. File presets include text, PDF and Office documents. See SPEC.md for capability semantics.

The catalog also includes Unblocked Code task IDs (UNB-123) and details URLs. Both hosts offer preset search and allow an existing rule to be duplicated and customized.

Synchronize language metadata and its reusable SVG/PNG icons with node conformance/sync-file-types.mjs --terminal /path/to/terminal --torbie /path/to/torbie. Pass --check to verify consumers. Native hosts use the PNG assets; web hosts can use the SVGs directly or the generated TypeScript catalog, which embeds them as data URLs.

The documentation overview is available at / and /home/. The latter always serves the full standard overview; Lintel does not introduce a hosted account or terminal application. The site build supports an empty LINTEL_BASE_PATH for lintel.aylith.com and /lintel for a repository Pages preview. From site, run npm ci, npm run build, and node check.mjs; repeat build/check with LINTEL_BASE_PATH=/lintel to validate the repository prefix. Pushes run the conformance and both documentation preflights. Publishing requires an explicit workflow dispatch with publish=true and uses the verified root artifact only after an actual Pages API binding readback equals lintel.aylith.com. API failure or a missing/different binding fails publication closed.

About

One manifest, every terminal. A standard for teaching a terminal what the text in it means.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages