Skip to content

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/ node conformance/run.mjs. What "conformant" means, executably.

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 Rust, the multiplexer's own hover and click surface.

The compatibility test is not a promise, it is a command: conformance/run.mjs reads each host's manifests off disk and reports any key that differs from the canonical copy. A divergence that is 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.

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