openmerit 0.1.6-preview.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +45 -106
- package/dist/terminal/public/app.js +18 -18
- package/dist/terminal/public/styles.css +18 -0
- package/dist/terminal/src/cli.mjs +1 -2
- package/dist/terminal/src/collect.mjs +36 -14
- package/dist/terminal/src/repository-background.mjs +37 -0
- package/dist/terminal/src/repository-index.mjs +155 -62
- package/dist/terminal/src/repository-policy.mjs +3 -0
- package/dist/terminal/src/repository-worker.mjs +15 -0
- package/dist/terminal/src/server.mjs +28 -14
- package/docs/architecture.md +1 -1
- package/docs/commands.md +2 -2
- package/docs/index.md +12 -1
- package/docs/inference-terminal.md +32 -14
- package/docs/operations.md +1 -1
- package/docs/security.md +8 -4
- package/docs/site-faq-maintenance.md +22 -0
- package/docs/site-terminal-preview.md +13 -0
- package/package.json +1 -1
|
@@ -1,30 +1,32 @@
|
|
|
1
1
|
# Inference Terminal
|
|
2
2
|
|
|
3
|
-
The Inference Terminal is
|
|
3
|
+
The Inference Terminal is included in the default `openmerit@0.1.6` npm release. It is an early part of OpenMerit, not the complete product vision. It gives people and agents a local overview of an application’s models, providers, connections, inference activity, and compute. The selected repository or application path defines its scope. A coding agent can launch or read the terminal, but the coding harness’s own requests, tokens, and costs are outside that scope. Earlier `openmerit@0.1.5` does not include this command.
|
|
4
4
|
|
|
5
5
|
The terminal reads existing metadata independently of inference. It does not call a model, change a route, run evaluations, load or unload models, or store prompts and responses. Closing it does not stop your workloads. Collection consumes a small amount of local CPU, memory, and runtime API capacity; it is not zero-overhead monitoring.
|
|
6
6
|
|
|
7
7
|
## Share the sample
|
|
8
8
|
|
|
9
|
-
The [hosted sample
|
|
9
|
+
The [hosted sample](https://dash.openmerit.site/) lets you explore a fictional environment in a browser without installing the terminal. It is deployed separately from this npm package, so its sample data and interface can differ. All identities, requests, costs, and hardware readings in the sample are illustrative.
|
|
10
10
|
|
|
11
|
-
The
|
|
11
|
+
The hosted page does not connect to your machine, accept project uploads, or run local collectors. Use the npm installation below to view your own application.
|
|
12
12
|
|
|
13
|
-
## Install
|
|
13
|
+
## Install
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Requires **Node.js 22.19 or newer**, with npm available in your terminal. From your application's directory:
|
|
16
16
|
|
|
17
17
|
```sh
|
|
18
18
|
cd /path/to/your/project
|
|
19
|
-
npm install -g openmerit
|
|
19
|
+
npm install -g openmerit
|
|
20
20
|
openmerit dash
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Version `0.1.6` brings the code from `0.1.6-preview.5` into npm's default `latest` channel. It includes historical activity ranges, project-evidence corrections, expanded endpoint discovery, code/configuration indexing, counts-only diagnostics, and phased background indexing. References to earlier preview versions below explain when behavior changed; all of those changes are included in `0.1.6`.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
The terminal is bundled alongside the coordinator, protocol, and Pi adapter. The installation downloads prebuilt assets; no Git checkout, build step, API key, Pi installation, or separate audit command is needed to run the terminal. Installation is global for your Node environment: it does not add a dependency, lockfile, or configuration to the application directory. It replaces any globally installed `openmerit` in the same npm prefix.
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
`openmerit dash` reads the current directory, starts a server bound to `127.0.0.1`, and opens its URL before collection finishes. Port 4310 is preferred; when occupied, the operating system chooses a free local port. The actual URL is always printed. macOS, Windows, and Linux desktop opening use the platform's default URL handler. SSH and headless Linux sessions print the URL instead; use a private SSH port forward to view a remote instance. A browser-launch failure does not stop collection.
|
|
28
|
+
|
|
29
|
+
Run `npm install -g openmerit` to update, including from an earlier `@preview` or hosted `-dash.` build. Stop the old terminal process and launch `openmerit dash` again after updating. Pin this release with `npm install -g openmerit@0.1.6`; remove it with `npm uninstall -g openmerit`. `npm ls -g openmerit --depth=0` shows the installed version, and `npm view openmerit dist-tags` shows the registry channels. The separate `preview` tag can still point to an older prerelease; use the default install for `0.1.6`.
|
|
28
30
|
|
|
29
31
|
If npm reports `EACCES`, use a user-owned Node installation/npm prefix rather than installing with `sudo`. If `openmerit` is not found after a successful install, reopen the terminal and check that your npm global executable directory is on `PATH`.
|
|
30
32
|
|
|
@@ -56,15 +58,15 @@ openmerit dash --no-open
|
|
|
56
58
|
| `--no-discovery` | Skip project-file and request-log discovery and additional runtime discovery for this run; explicitly declared runtimes and exports, explicitly linked machine context remain available |
|
|
57
59
|
| `--no-open` | Start collection and print the URL without launching a browser |
|
|
58
60
|
| `--json` | Print one snapshot and exit without starting an HTTP server |
|
|
59
|
-
| `--diagnostics` |
|
|
61
|
+
| `--diagnostics` | Print repository-index coverage counts only, then exit; no browser, server, or endpoint probes |
|
|
60
62
|
| `--demo` | Use an explicitly fictional environment; no local collectors run |
|
|
61
63
|
| `--help` | Show usage |
|
|
62
64
|
|
|
63
65
|
Use Ctrl+C to close the terminal. There is no persistent daemon or background scheduler. Collection runs only while the command is running. The terminal is separate from Pi's `/openmerit pause` and other orchestration commands.
|
|
64
66
|
|
|
65
|
-
## Repository indexing
|
|
67
|
+
## Repository indexing
|
|
66
68
|
|
|
67
|
-
Version `0.1.6
|
|
69
|
+
Version `0.1.6` includes a local syntax index of application declarations, introduced in `0.1.6-preview.4` and extended with continuing background batches in `0.1.6-preview.5`. No repository access needs to be shared with OpenMerit, and no separate audit step is required. The index runs initially and rechecks 60 seconds after a pass completes while the terminal is running. It creates no files in the application.
|
|
68
70
|
|
|
69
71
|
The reader supports Python, JavaScript/TypeScript (including JSX/TSX), JSON, YAML, TOML, and project-local `.env*` files. It finds literal model/endpoint fields, conservative same-file variable and object references, environment references resolved from the nearest project-local dotenv directory, selected SDK call patterns, and enclosing function names. Unknown/private HTTP(S) endpoints remain named by their sanitized address; a custom host or port never establishes a vendor, runtime, deployment, or physical machine. Public Hub/download URLs do not establish an inference service. URLs found by this index are **never probed**; existing explicitly authorized runtime discovery remains separate.
|
|
70
72
|
|
|
@@ -74,11 +76,11 @@ The reader supports Python, JavaScript/TypeScript (including JSX/TSX), JSON, YAM
|
|
|
74
76
|
|
|
75
77
|
The index does not execute or import project code, load shell files, inspect running processes, consult inherited shell variables, or fetch cloud accounts. It does not resolve cross-file imports, arbitrary expressions, template interpolation, configuration loading order, dynamic routers, YAML aliases, or multiline TOML values. Conditional values remain candidates; a fallback remains a fallback even if a runtime might choose it. Supported syntax is deliberately conservative. Models and task names are never inferred from prose, prompts, or model-name conventions.
|
|
76
78
|
|
|
77
|
-
Reads stay within the selected directory, skipping symlinks, hidden directories, dependency/build folders, credential-named files, and request-log roots handled by the separate activity reader.
|
|
79
|
+
Reads stay within the selected directory, skipping symlinks, hidden directories, dependency/build folders, credential-named files, and request-log roots handled by the separate activity reader. In published `0.1.6-preview.4`, each scan visits at most 8,000 entries and eight nested directories, reads at most 400 supported files, 128 KiB per file and 4 MiB overall, and retains at most 2,000 declarations and 100 detailed coverage notes. Dotenv files are prioritized, then files are sorted by path. These bounds can leave a large repository partially indexed. Removing a declaration removes it after the next scan.
|
|
78
80
|
|
|
79
81
|
The snapshot retains selected identifiers, relative file paths, line numbers, and sanitized endpoint addresses. It discards raw source text, prompt/response fields, credentials, URL credentials, query strings, fragments, and resource paths. Known dedicated resource subdomains are redacted. Structural paths such as `/v1` or `/api/v1` may remain. Local endpoint addresses, model names, and filenames can still be sensitive; the full snapshot is intended for local viewing.
|
|
80
82
|
|
|
81
|
-
To share coverage without sharing the repository or its identifiers, run this option from the project with **0.1.6
|
|
83
|
+
To share coverage without sharing the repository or its identifiers, run this option from the project with **0.1.6**:
|
|
82
84
|
|
|
83
85
|
```sh
|
|
84
86
|
openmerit dash --diagnostics
|
|
@@ -88,6 +90,22 @@ It prints only format/read/skip/declaration/issue counts and scan limits. It doe
|
|
|
88
90
|
|
|
89
91
|
`--no-discovery` or `"discovery": false` disables the index. Request history still requires supported application logs or explicit exports. An inactive project can expose its declarations without having retained any usage history; code cannot reconstruct missing requests, tokens, latency, or spend.
|
|
90
92
|
|
|
93
|
+
## Phased repository indexing
|
|
94
|
+
|
|
95
|
+
Version `0.1.6` retains the `0.1.6-preview.5` behavior, which replaces the repository-wide entry, depth, file-count, total-byte, and declaration limits above with continuing batches. Versions through `0.1.6-preview.4` retain the earlier bounds.
|
|
96
|
+
|
|
97
|
+
- **Open immediately:** the loopback server listens before initial collection. The browser shows “Opening your inference terminal” while sources load, without displaying empty metrics as measured zero. Initial collection failures are disclosed and retried on the next collection tick.
|
|
98
|
+
- **Discover, index, link:** a dedicated worker walks eligible directories, then prioritizes dotenv files, structured configuration, and inference-related source names. The initial index publishes usable declarations in batches. The interface shows discovered files while the total is unknown, then checked/total files. Completion means the eligible-file pass finished; exclusions and unresolved syntax still appear in coverage.
|
|
99
|
+
- **Keep collection independent:** saved activity and authorized runtimes continue on the existing 10–30-second interval. While indexing, the browser checks progress every second; this reads a snapshot and does not re-scan or probe endpoints. Worker progress is published at most twice per second. A pass never overlaps another pass.
|
|
100
|
+
- **Reuse unchanged files:** the worker checks again 60 seconds after completing a pass. It caches sanitized parser metadata and file fingerprints in memory. Unchanged source/configuration files need only filesystem checks; changed files are read again, with a content hash avoiding a reparse when only timestamps changed. Dotenv bindings are re-read and discarded each pass. Their changes re-resolve cached call sites. Deleted, newly excluded, oversized, or unreadable files lose their old declarations after the next pass. Restarting the terminal starts a fresh cache.
|
|
101
|
+
- **Stay useful while updating:** after the first pass, the previous index stays visible with an updating status until its replacement is complete. The local browser reuses its reference catalog when the revision is unchanged. The plain `/api/snapshot` response remains self-contained; during initial collection it has `loading: true` and no established measurements. Once ready, repository snapshots include `progress`, `revision`, and coverage counters. The optional `repositoryRevision` query omits `repository.references` only if that revision matches; callers must retain their matching catalog.
|
|
102
|
+
|
|
103
|
+
Each worker batch yields after 32 files/entries, 1 MiB of reads, or about 40 ms between files. These are scheduling budgets, **not total coverage caps**. A single file still has a 128 KiB read limit, syntax parsing retains its complexity protections, and the detailed issue list retains 100 notes. Issue totals by code now count all notes, including those beyond the detail list. The worker has a 256 MiB old-generation heap ceiling; if it fails, the terminal explicitly marks indexing interrupted, retains any available result, and retries in 60 seconds. This is not a guarantee of unlimited repository capacity: metadata and snapshots still occupy memory. Coverage distinguishes `filesIndexed` (including cache reuse) from `filesRead` and `bytesRead` on the current pass. Policy exclusions, supported syntax, and the absence of cross-file expression evaluation are unchanged.
|
|
104
|
+
|
|
105
|
+
Nothing is written into the application, and no persistent index or source-content cache is created. Endpoint identities are sanitized before entering the in-memory cache. Static URLs still never trigger network calls. `--json` and `--diagnostics` deliberately wait for a complete one-shot pass and then exit; `--no-discovery` disables this worker.
|
|
106
|
+
|
|
107
|
+
These changes apply to **repository declarations only**. The separate request-log, runtime, hardware-export, and configuration-inventory limits elsewhere in this guide still apply. They do not recover missing historical usage or make a log importer unlimited.
|
|
108
|
+
|
|
91
109
|
## Review corrections (0.1.6-preview.3)
|
|
92
110
|
|
|
93
111
|
Version `0.1.6-preview.3` includes the following corrections; earlier previews retain their previous behavior:
|
package/docs/operations.md
CHANGED
|
@@ -10,7 +10,7 @@ Operational data lives under `.openmerit/` in the target product repository. It
|
|
|
10
10
|
- `audit-export-errors.jsonl` — failures from optional external event exporters; these failures never replace or erase the canonical local event.
|
|
11
11
|
- `evidence/*.json` — evidence-reference manifests.
|
|
12
12
|
- `scheduler-status.json` — last headless wakeup time and exit code in the unreleased macOS source implementation, when a wakeup actually ran.
|
|
13
|
-
- `terminal.json` — optional source configuration and declared inventory for the
|
|
13
|
+
- `terminal.json` — optional source configuration and declared inventory for the Inference Terminal included in `0.1.6`.
|
|
14
14
|
- `inference.jsonl` — optional request-metadata export supplied by your existing tools for the terminal. The terminal reads this file; it does not instrument your application or create the feed.
|
|
15
15
|
|
|
16
16
|
Snapshot writes are atomic. Files use owner-only permissions where POSIX modes are supported.
|
package/docs/security.md
CHANGED
|
@@ -28,10 +28,14 @@ OpenMerit validates structure and deterministic Pareto conformance, not the trut
|
|
|
28
28
|
|
|
29
29
|
Do not include credentials, private traces, or proprietary evaluation data in public issues.
|
|
30
30
|
|
|
31
|
-
## Inference Terminal (
|
|
31
|
+
## Inference Terminal (0.1.6)
|
|
32
32
|
|
|
33
|
-
The
|
|
33
|
+
The terminal reads supported project metadata, request logs, explicit exports, and authorized loopback runtime inventory/metrics endpoints. It calls no inference endpoint and exposes no mutation API. A local syntax index reads supported Python, JavaScript/TypeScript, JSON, YAML, TOML, and project-local dotenv declarations. It does not execute or import project code, source shell files, or resolve arbitrary expressions. Known credential-variable presence can identify configuration; credential values are discarded and never used for provider calls. Endpoint addresses are sanitized before retention. Static URLs found by the syntax index never authorize network probes.
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Loopback runtime probes require supported project endpoint declarations or explicit terminal configuration. No standard ports, remote provider accounts, credential stores, running processes, or general home directories are scanned. Whole-machine readings are context, not per-request measurements; the compute view requires explicit links or supplied host evidence.
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Coding-harness histories are outside the terminal's application scope and are not scanned or imported. The retired Pi history reader and access prompts are removed; legacy grants in `~/.openmerit/terminal-access.json` are never consulted. Application request logs and explicit exports retain only allowlisted metadata, without prompts or responses. Sources must belong to the selected application; the terminal cannot infer the purpose of an unlabeled API response. Records explicitly marked `scope: "development"` are rejected.
|
|
38
|
+
|
|
39
|
+
The local web service binds to `127.0.0.1` and rejects unexpected Host, Origin, and cross-site browser requests. It only serves bundled assets and specific read-only JSON routes. It is not authenticated against other local processes or machine users. Model names, endpoint identifiers, and relative source paths can still be sensitive. Names and identifiers in imported metadata must be kept free of secrets.
|
|
40
|
+
|
|
41
|
+
Repository metadata and usage caches live in process memory and disappear when the terminal exits. The terminal creates no persistent index or files in the application. Per-file/parser protections, request-log read limits, runtime inventory limits, and explicit coverage gaps still apply. See [terminal data handling and limits](inference-terminal.md) for supported sources, precedence, retention bounds, diagnostics, and sample-data separation.
|
|
@@ -166,3 +166,25 @@ Reviewed data handling, evidence, background collection, and readiness claims. T
|
|
|
166
166
|
## Repository index release preparation — 10 October 2026
|
|
167
167
|
|
|
168
168
|
Prepared `0.1.6-preview.4` to deliver repository indexing and counts-only diagnostics through the existing npm preview channel. The public guide identifies the minimum version and retains the boundaries on static references, recorded usage, supported syntax, and bounded scans. Registry publication and registry-install verification are pending. The VM source-build acceptance retained the existing 242 records; a separate real HF smoke workload added three successful requests and one credit-related failure. Its provider and route metadata were explicitly logged by the test application, not reconstructed from network traffic. Stable-package homepage FAQ claims remain unchanged; no website deployment is included.
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
## Repository index — published preview.4, 10 October 2026
|
|
172
|
+
|
|
173
|
+
Published and verified `0.1.6-preview.4`, superseding the unreleased/preparation status above. The npm package integrity matches the tested archive and `preview` points to this version. Direct registry installation and the restarted VM dashboard preserve all 246 real request records and 128 application files across passive refresh, with counts-only diagnostics and package-export checks passing. The release acceptance makes no inference calls; the separate earlier HF test supplied its provider/route identifiers explicitly. Static declarations remain distinct from actual usage. Stable `latest` is still `0.1.5`; homepage FAQ wording and site deployments are unchanged.
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
## Phased repository indexing — unreleased source, 10 October 2026
|
|
177
|
+
|
|
178
|
+
Reviewed startup, background collection, data handling, coverage and readiness claims. The source build opens the local dashboard before initial collection and indexes declarations in a dedicated worker. Repository-wide coverage limits become continuing batch budgets; per-file and parser protections remain, along with a worker memory ceiling. Fingerprints and sanitized parser metadata live only in process memory; no project files or persistent source cache are created. Rechecks start 60 seconds after a completed pass, while request/runtime collection keeps its existing interval and limits. Progress and failures remain explicit. The guide separates this unreleased behavior from published preview.4. No homepage FAQ wording, npm publication, or site deployment is implied.
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
## Phased indexing release preparation — 10 October 2026
|
|
182
|
+
|
|
183
|
+
Prepared `0.1.6-preview.5` for the existing npm preview channel. The source build passed all 281 verification tests. A separate 5,001-file synthetic repository on the four-core, 4 GiB VM exposed 25,001 references: URL ready in 43 ms, first declarations at about 1 second, full index at 4.1 seconds. An edit/deletion pass reused 4,998 files, read about 9 KiB, and completed in 1.27 seconds. These are fixture measurements, not a universal performance guarantee. The private VM source build preserved all 246 real request records and all 128 application files through passive refresh. Registry publication and installation verification are pending. The guide identifies behavior by minimum version; stable `latest`, homepage FAQ claims, and site deployments are unchanged.
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
## npm default-channel release preparation — 11 October 2026
|
|
187
|
+
|
|
188
|
+
Prepared `0.1.6` using the unchanged runtime code from npm `0.1.6-preview.5`. The packaged README, terminal install guide, command entry, architecture/operations references, and terminal security boundaries now describe the default npm installation. Registry publication remains pending release verification and authentication.
|
|
189
|
+
|
|
190
|
+
Reviewed homepage evidence, data, background, cost, and readiness claims. The terminal remains passive, requires recorded evidence for usage, does not call models or perform routing/evaluations, and stops when the command exits. Indexing is explicitly local and syntax-limited. Its availability in the default npm package does not establish the complete OpenMerit product vision or measured optimization results. Pi coordinator behavior is unchanged from the preview; existing version-specific `0.1.5` caveats are historical. This is an npm-only release: repository branches, the website, and its separately deployed documentation are not changed or deployed. The npm README points to the bundled terminal guide for this version's behavior.
|
|
@@ -134,3 +134,16 @@ After publication, the VM updated directly with `npm install -g openmerit@previe
|
|
|
134
134
|
Friends can update with `npm install -g openmerit@preview`, stop any running terminal, and run `openmerit dash` again from their application directory. The main website and hosted sample were not deployed. The source branch remains `codex/inference-terminal-preview`; this is a preview release, not a stable-channel release or a claim of universal log compatibility.
|
|
135
135
|
|
|
136
136
|
Evidence: `/private/tmp/terminal-preview3-release/verify.log`, `pack.json`, `registry.json`, `tags.json`, `tarball-vm.json`, and `registry-vm.json`. Publication screenshot: `/private/tmp/terminal-preview3-release/npm-published.png`.
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
### Repository index — npm preview release, 10 October 2026
|
|
140
|
+
|
|
141
|
+
Published source commit `38d294f` as `openmerit@0.1.6-preview.4` under the `preview` dist-tag. The 103-file package is 1,080,626 bytes, with SHA-1 `f5217dc0e49f89cb48c129d65cd046443667a56a`. npm registry SHA-512 integrity matches the exact tested tarball. Availability and the preview tag were verified after npm processing; stable `latest` remains `0.1.5`. The release adds bounded repository syntax indexing, nested configuration and custom endpoint references, file/line evidence, and counts-only diagnostics. Static declarations remain distinct from recorded usage.
|
|
142
|
+
|
|
143
|
+
Full release verification passed 272 tests (162 terminal tests) plus syntax, typecheck, build, demo, and documentation checks. Before publication, the exact release tarball was installed in an isolated VM prefix and passed plain `openmerit dash`, a passive refresh, diagnostics, package-export imports, and installed/served asset hashes. It preserved all 246 request records and all 128 application files.
|
|
144
|
+
|
|
145
|
+
After publication, the VM updated from the registry using `npm install -g openmerit@preview` with sudo for its existing root-owned prefix. Installation completed in 14 seconds; plain `openmerit dash` started in 306 ms. The temporary source-build service override was moved to the VM release evidence directory, restoring the original `/usr/local/bin/openmerit` service command. The persistent dashboard at `http://127.0.0.1:4313/` passed the same checks across a passive refresh. All 246 request records remained deeply equal and all 128 application files stayed unchanged. The four HF records retain three completed requests, one prior credit failure, 99 input tokens, and 30 output tokens. Those calls were made by a separate test application before release acceptance; the application explicitly logged its provider/route metadata. Installation and acceptance generated no new inference calls.
|
|
146
|
+
|
|
147
|
+
Friends can update with `npm install -g openmerit@preview`, stop the running terminal, and launch `openmerit dash` again in the application directory. This verifies the saved VM workload and supported source patterns; it does not establish complete discovery of arbitrary applications or reconstruct missing usage. The hosted sample and main website were not deployed.
|
|
148
|
+
|
|
149
|
+
Evidence: `/private/tmp/terminal-preview4-release/verify.log`, `pack.json`, `build.json`, `registry.json`, `tags.json`, `tarball-vm.json`, `registry-vm.json`, and `persistent-vm.json`. Publication screenshot: `/private/tmp/terminal-preview4-release/npm-published.png`.
|