@zenera/neo 1.1.30 → 1.1.32

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/README.md CHANGED
@@ -17,6 +17,9 @@
17
17
  [![npm](https://img.shields.io/npm/v/@zenera/neo.svg)](https://www.npmjs.com/package/@zenera/neo)
18
18
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/andreyryabov/ZeneraNeo/blob/main/LICENSE)
19
19
  [![Node](https://img.shields.io/badge/node-%E2%89%A524-brightgreen.svg)](https://nodejs.org)
20
+ [![CI](https://github.com/andreyryabov/ZeneraNeo/actions/workflows/ci.yml/badge.svg)](https://github.com/andreyryabov/ZeneraNeo/actions/workflows/ci.yml)
21
+
22
+ [Install](#install) · [Use](#use) · [Entry points](#entry-points) · [Documentation](#documentation) · [Family](#the-rest-of-the-family) · [License](#license)
20
23
 
21
24
  </div>
22
25
 
@@ -29,6 +32,28 @@ an append-only trajectory.**
29
32
  > open-source side project for experimentation and chore work - **not** the
30
33
  > official Zenera AI Platform. It carries no support or stability promises.
31
34
 
35
+ ## What it gives you
36
+
37
+ - **Agents** - an instruction, a model, tools, skills, who it may hand the work
38
+ to, and how it splits into parallel branches. There is no hidden orchestration
39
+ layer.
40
+ - **Models** - OpenAI, Anthropic, Google/Vertex and OpenRouter behind one
41
+ interface, each through its own SDK, plus any OpenAI-compatible endpoint.
42
+ Named providers and model aliases resolve from config or from the host.
43
+ - **Tools** - plain typed functions, selectable per agent by name, group or
44
+ wildcard. Workspace file tools and a Podman sandbox ship with the library.
45
+ - **Skills** - instruction bundles discovered and loaded on demand instead of
46
+ permanently occupying the prompt, optionally owning their own tools.
47
+ - **Memory** - a timed, masked knowledge graph that outlives a run: recall
48
+ returns a stitched subgraph rather than a ranked list, remembered files are
49
+ mounted at `/memory`, and standing preferences go into the system prompt.
50
+ - **Trajectory** - an append-only log of everything that happened. What is sent
51
+ to a provider is derived from it, and compaction _covers_ nodes rather than
52
+ deleting them, so the full record survives even when older turns have to be
53
+ pushed out of the context window.
54
+ - **Inspection** - `renderReportHtml` turns any run into one self-contained HTML
55
+ file: the graph, every request, every token.
56
+
32
57
  ## Install
33
58
 
34
59
  Node.js 24+, ESM only. Runtime dependencies are `yaml` and `zod` and nothing
@@ -140,28 +165,6 @@ It is validated strictly at load: an unknown tool, a handoff to nobody, a
140
165
  missing prompt file - each fails immediately, naming the offending key, instead
141
166
  of surfacing three turns into a run as a confused model.
142
167
 
143
- ## What it gives you
144
-
145
- - **Agents** - an instruction, a model, tools, skills, who it may hand the work
146
- to, and how it splits into parallel branches. There is no hidden orchestration
147
- layer.
148
- - **Models** - OpenAI, Anthropic, Google/Vertex and OpenRouter behind one
149
- interface, each through its own SDK, plus any OpenAI-compatible endpoint.
150
- Named providers and model aliases resolve from config or from the host.
151
- - **Tools** - plain typed functions, selectable per agent by name, group or
152
- wildcard. Workspace file tools and a Podman sandbox ship with the library.
153
- - **Skills** - instruction bundles discovered and loaded on demand instead of
154
- permanently occupying the prompt, optionally owning their own tools.
155
- - **Memory** - a timed, masked knowledge graph that outlives a run: recall
156
- returns a stitched subgraph rather than a ranked list, remembered files are
157
- mounted at `/memory`, and standing preferences go into the system prompt.
158
- - **Trajectory** - an append-only log of everything that happened. What is sent
159
- to a provider is derived from it, and compaction _covers_ nodes rather than
160
- deleting them, so the full record survives even when older turns have to be
161
- pushed out of the context window.
162
- - **Inspection** - `renderReportHtml` turns any run into one self-contained HTML
163
- file: the graph, every request, every token.
164
-
165
168
  ## Entry points
166
169
 
167
170
  | Specifier | Contents |
@@ -184,9 +187,11 @@ folder.
184
187
 
185
188
  | Package | What it is |
186
189
  | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
187
- | [`@zenera/cli`](https://github.com/andreyryabov/ZeneraNeo/blob/main/packages/cli/README.md) | `zen` - this runtime on the command line, with a TUI |
190
+ | [`@zenera/cli`](https://github.com/andreyryabov/ZeneraNeo/blob/main/packages/cli/README.md) | `zen` - agent projects on the command line |
191
+ | **`@zenera/neo`** | the runtime - agents, models, tools, skills, memory |
188
192
  | [`@zenera/faker`](https://github.com/andreyryabov/ZeneraNeo/blob/main/packages/faker/README.md) | `zen faker` - a mock API from an openapi/swagger document |
189
- | [`@zenera/rag`](https://github.com/andreyryabov/ZeneraNeo/blob/main/packages/rag/README.md) | `zen rag` - an API description as a searchable graph, + tools |
193
+ | [`@zenera/rag`](https://github.com/andreyryabov/ZeneraNeo/blob/main/packages/rag/README.md) | `zen rag` - indexing and search for documents and API schemas |
194
+ | [`@zenera/view`](https://github.com/andreyryabov/ZeneraNeo/blob/main/packages/view/README.md) | `zen view` - a live local viewer for a folder |
190
195
 
191
196
  `@zenera/rag` also exports tools you can hand straight to `loadProject`, so an
192
197
  agent can search an API it has never read.
@@ -10,7 +10,21 @@ export interface Gateway {
10
10
  /** the virtual key; absent for a gateway that enforces none */
11
11
  apiKey?: string;
12
12
  }
13
- /** The gateway this process is configured for, or undefined when vendors are called directly. */
13
+ /**
14
+ * The single switch for gateway mode: the Bifrost gateway named by
15
+ * `BIFROST_BASE_URL` (and its virtual key from `BIFROST_API_KEY`), or undefined
16
+ * when providers are called directly with their own vendor keys.
17
+ *
18
+ * When it returns a gateway, the model registry routes every provider through
19
+ * it (only a pre-built client is left alone), and the CLI stops requiring
20
+ * per-vendor keys since the virtual key stands in for all of them.
21
+ *
22
+ * The environment is the only source, read on every call and never cached.
23
+ * `zen key mode bifrost` keeps the url and key in the keyring, not the shell;
24
+ * they reach `process.env` only when the CLI's `KeyStore.materialize()` runs.
25
+ * Called before that, or from the library without the CLI, this returns
26
+ * undefined unless `BIFROST_BASE_URL` is really set.
27
+ */
14
28
  export declare function gatewayOf(): Gateway | undefined;
15
29
  /** The wire formats Bifrost has a drop-in endpoint for. */
16
30
  export type GatewayProtocol = 'openai' | 'anthropic' | 'gemini';
@@ -19,7 +19,21 @@ export const GATEWAY_URL_ENV = 'BIFROST_BASE_URL';
19
19
  export const GATEWAY_KEY_ENV = 'BIFROST_API_KEY';
20
20
  /** Bifrost's own virtual-key header: still read when `Authorization` is taken by gateway login. */
21
21
  export const GATEWAY_KEY_HEADER = 'x-bf-vk';
22
- /** The gateway this process is configured for, or undefined when vendors are called directly. */
22
+ /**
23
+ * The single switch for gateway mode: the Bifrost gateway named by
24
+ * `BIFROST_BASE_URL` (and its virtual key from `BIFROST_API_KEY`), or undefined
25
+ * when providers are called directly with their own vendor keys.
26
+ *
27
+ * When it returns a gateway, the model registry routes every provider through
28
+ * it (only a pre-built client is left alone), and the CLI stops requiring
29
+ * per-vendor keys since the virtual key stands in for all of them.
30
+ *
31
+ * The environment is the only source, read on every call and never cached.
32
+ * `zen key mode bifrost` keeps the url and key in the keyring, not the shell;
33
+ * they reach `process.env` only when the CLI's `KeyStore.materialize()` runs.
34
+ * Called before that, or from the library without the CLI, this returns
35
+ * undefined unless `BIFROST_BASE_URL` is really set.
36
+ */
23
37
  export function gatewayOf() {
24
38
  const url = process.env[GATEWAY_URL_ENV]?.trim();
25
39
  if (!url) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenera/neo",
3
- "version": "1.1.30",
3
+ "version": "1.1.32",
4
4
  "description": "A multi-agent runtime for Node.js: agents, models, tools, skills, memory and an append-only trajectory.",
5
5
  "keywords": [
6
6
  "agents",