@arnilo/prism 0.11.0 → 0.11.1

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 CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.11.1] - 2026-09-24 (System One decision models)
2
+
3
+ ### Added
4
+ - **`@arnilo/prism-providers/typesafe` and `@arnilo/prism-providers/laya`.** Structured-output decision models on `POST /v1/systemone`. Jev is hosted (`https://api.typesafe.ai`, env `TYPESAFE_API_KEY`). Laya is self-hosted `laya-serve` (default `http://localhost:8000`, optional `LAYA_API_KEY`). A request without `options.structuredOutput`, or with tools, fails before any network call. See [docs/providers/typesafe.md](docs/providers/typesafe.md) and [docs/providers/laya.md](docs/providers/laya.md).
5
+
1
6
  ## [0.11.0] - 2026-09-24 (store bounds, lease fence reset, subpath removals)
2
7
 
3
8
  > **Twelve publishable packages.** Lockstep minor. No new public exports from the review remediation. Two host-visible store contracts change, and three subpaths that the published 0.10.0 tarball still shipped are removed. Predecessor published line is **0.10.0**. Registry/tag writes stay operator-authorized.
package/README.md CHANGED
@@ -162,18 +162,18 @@ printf '{"id":"1","command":"prompt","params":{"input":"Hi"}}\n' \
162
162
 
163
163
  | package | version | notes |
164
164
  | --- | --- | --- |
165
- | `@arnilo/prism` | 0.11.0 | core — runtime, CLI/RPC, templates, docs |
166
- | `@arnilo/prism-channels` | 0.11.0 | family — transport-neutral messaging runtime, durable journal, pairing and one-use approvals; official /telegram (private DMs, opt-in granted groups/topics) and experimental pinned signal-cli /signal |
167
- | `@arnilo/prism-coding-tools` | 0.11.0 | family — /agent, /security, /openapi, /computer-use-linux, /dev, /impeccable subpaths |
168
- | `@arnilo/prism-core` | 0.11.0 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /validation subpaths |
169
- | `@arnilo/prism-providers` | 0.11.0 | family — all provider adapters as `/<adapter>` subpaths |
170
- | `@arnilo/prism-acp-agent` | 0.11.0 | capability — ACP adapter |
171
- | `@arnilo/prism-ag-ui` | 0.11.0 | capability — AG-UI/A2A/A2UI adapter |
172
- | `@arnilo/prism-hooks` | 0.11.0 | capability — Claude/Codex-compatible hooks.json adapter compiled onto middleware, guardrail, injector, and stop-hook seams |
173
- | `@arnilo/prism-mcp` | 0.11.0 | capability — MCP client/server/OAuth interop |
174
- | `@arnilo/prism-memory` | 0.11.0 | capability — memory plus /rag, /compaction/*, /fabric, /wiki subpaths |
175
- | `@arnilo/prism-web-tools` | 0.11.0 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
176
- | `@arnilo/prism-work` | 0.11.0 | capability — /connectors, /documents, /sheets, /diagrams, /document-reader, /sandbox, /skills, /tools subpaths |
165
+ | `@arnilo/prism` | 0.11.1 | core — runtime, CLI/RPC, templates, docs |
166
+ | `@arnilo/prism-channels` | 0.11.1 | family — transport-neutral messaging runtime, durable journal, pairing and one-use approvals; official /telegram (private DMs, opt-in granted groups/topics) and experimental pinned signal-cli /signal |
167
+ | `@arnilo/prism-coding-tools` | 0.11.1 | family — /agent, /security, /openapi, /computer-use-linux, /dev, /impeccable subpaths |
168
+ | `@arnilo/prism-core` | 0.11.1 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /validation subpaths |
169
+ | `@arnilo/prism-providers` | 0.11.1 | family — all provider adapters as `/<adapter>` subpaths |
170
+ | `@arnilo/prism-acp-agent` | 0.11.1 | capability — ACP adapter |
171
+ | `@arnilo/prism-ag-ui` | 0.11.1 | capability — AG-UI/A2A/A2UI adapter |
172
+ | `@arnilo/prism-hooks` | 0.11.1 | capability — Claude/Codex-compatible hooks.json adapter compiled onto middleware, guardrail, injector, and stop-hook seams |
173
+ | `@arnilo/prism-mcp` | 0.11.1 | capability — MCP client/server/OAuth interop |
174
+ | `@arnilo/prism-memory` | 0.11.1 | capability — memory plus /rag, /compaction/*, /fabric, /wiki subpaths |
175
+ | `@arnilo/prism-web-tools` | 0.11.1 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
176
+ | `@arnilo/prism-work` | 0.11.1 | capability — /connectors, /documents, /sheets, /diagrams, /document-reader, /sandbox, /skills, /tools subpaths |
177
177
  <!-- generated:package-truth:inventory end -->
178
178
 
179
179
  ## Scripts
package/dist/index.d.ts CHANGED
@@ -131,5 +131,5 @@ export { MODEL_FAMILY_TOKENS, resolveModelFamily } from "./usage-estimation.js";
131
131
  export type { ResolvedUseCaseModel, ResolveUseCaseModelInput, UseCaseModelBinding, } from "./use-case-model.js";
132
132
  export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
133
133
  export declare const name = "prism";
134
- export declare const version = "0.11.0";
134
+ export declare const version = "0.11.1";
135
135
  export declare const description = "Agent harness for AI providers, agents, sessions, and tools.";
package/dist/index.js CHANGED
@@ -72,6 +72,6 @@ export { trimTrailingSlashes } from "./trim-trailing-slashes.js";
72
72
  export { MODEL_FAMILY_TOKENS, resolveModelFamily } from "./usage-estimation.js";
73
73
  export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
74
74
  export const name = "prism";
75
- export const version = "0.11.0";
75
+ export const version = "0.11.1";
76
76
  export const description = "Agent harness for AI providers, agents, sessions, and tools.";
77
77
  //# sourceMappingURL=index.js.map
package/docs/index.md CHANGED
@@ -2,14 +2,15 @@
2
2
 
3
3
  Prism is a TypeScript/Node.js agent harness. Hosts own providers, tools, credentials, storage, and behavior; Prism supplies contracts, registries, events, and replaceable runtime primitives.
4
4
 
5
- ## Current line (0.11.0)
5
+ ## Current line (0.11.1)
6
6
 
7
7
  - **Memory-store branch reads**: the built-in memory session store implements `readBranchPath`. A snapshot walks the branch once and clones each kept entry once.
8
8
  - **JSONL parse cache**: a read after an in-process append reuses the parsed file when size and mtime match. A same-size write inside one filesystem timestamp tick can still look unchanged.
9
9
  - **Idempotency window**: memory and JSONL stores remember the latest 4,096 dedup keys. Replaying an older key appends a new entry instead of rejecting the write.
10
10
  - **In-memory lease sweep**: expired lease rows are deleted once the map reaches 1,024. A swept key starts its next fence at 1. A released key still in the map keeps `fencingToken + 1`. SQLite and Postgres adapters still keep the counter on the row.
11
11
  - **Shared text token estimate**: plain-text estimates use one `ceil(length/4)` helper. Message and entry estimates are unchanged.
12
- - **12 publishable packages** at current **0.11.0** lockstep, with the migration guide reachable from the release section below — inventory below.
12
+ - **System One decision models**: `@arnilo/prism-providers/typesafe` (hosted Jev) and `@arnilo/prism-providers/laya` (self-hosted `laya-serve`) answer only `options.structuredOutput` requests, one `POST /v1/systemone` round trip, no tools or streaming.
13
+ - **12 publishable packages** at current **0.11.1** lockstep, with the migration guide reachable from the release section below — inventory below.
13
14
 
14
15
  ### Carried from the 0.10.0 line
15
16
 
@@ -131,7 +132,7 @@ Prism is a TypeScript/Node.js agent harness. Hosts own providers, tools, credent
131
132
  - [Use-case model selection](use-case-model-selection.md): bind models for compaction, memory, and other non-session LLM jobs.
132
133
  - [Provider request policies](provider-request-policies.md): kernel request-option defaults with host `ProviderRequestPolicy` overlays.
133
134
  - [Provider packages](provider-packages.md): all adapters as `@arnilo/prism-providers/<adapter>` subpaths; tool_result and event wire shapes stay provider-neutral.
134
- - First-party adapters: [`openai`](providers/openai.md), [`anthropic`](providers/anthropic.md), [`google`](providers/google.md), [`opencode-go`](providers/opencode-go.md), [`openrouter`](providers/openrouter.md), [`zai`](providers/zai.md), [`deepseek`](providers/deepseek.md), [`xai`](providers/xai.md), [`clinepass`](providers/clinepass.md), [`hyper`](providers/hyper.md), [`commandcode`](providers/commandcode.md), [`kimi`](providers/kimi.md), [`alibaba`](providers/alibaba.md), [`ollama`](providers/ollama.md), [`neuralwatt`](providers/neuralwatt.md), plus the cross-vendor `model-discovery` listing adapters on the same page.
135
+ - First-party adapters: [`openai`](providers/openai.md), [`anthropic`](providers/anthropic.md), [`google`](providers/google.md), [`opencode-go`](providers/opencode-go.md), [`openrouter`](providers/openrouter.md), [`zai`](providers/zai.md), [`deepseek`](providers/deepseek.md), [`xai`](providers/xai.md), [`clinepass`](providers/clinepass.md), [`hyper`](providers/hyper.md), [`commandcode`](providers/commandcode.md), [`kimi`](providers/kimi.md), [`alibaba`](providers/alibaba.md), [`ollama`](providers/ollama.md), [`neuralwatt`](providers/neuralwatt.md), [`typesafe`](providers/typesafe.md), [`laya`](providers/laya.md), plus the cross-vendor `model-discovery` listing adapters on the same page.
135
136
  - Enterprise cloud (workload identity): [`azure`](providers/azure.md) (Entra/Foundry), [`bedrock`](providers/bedrock.md) (IAM/SigV4; OpenAI-compatible or native Converse route), [`vertex`](providers/vertex.md) (ADC/Vertex).
136
137
  - Optional AI SDK adapter: [`ai-sdk`](providers/ai-sdk.md) maps host-owned pinned `LanguageModelV4` models onto Prism streams.
137
138
  - [OpenAI-compatible provider](providers/openai-compatible.md): base Chat Completions subpath with strict-completion default and vendor hooks.
@@ -272,16 +273,16 @@ The generated inventory below derives from [`scripts/package-truth.json`](../scr
272
273
 
273
274
  | package | version | notes |
274
275
  | --- | --- | --- |
275
- | `@arnilo/prism` | 0.11.0 | core — runtime, CLI/RPC, templates, docs |
276
- | `@arnilo/prism-channels` | 0.11.0 | family — transport-neutral messaging runtime, durable journal, pairing and one-use approvals; official /telegram (private DMs, opt-in granted groups/topics) and experimental pinned signal-cli /signal |
277
- | `@arnilo/prism-coding-tools` | 0.11.0 | family — /agent, /security, /openapi, /computer-use-linux, /dev, /impeccable subpaths |
278
- | `@arnilo/prism-core` | 0.11.0 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /validation subpaths |
279
- | `@arnilo/prism-providers` | 0.11.0 | family — all provider adapters as `/<adapter>` subpaths |
280
- | `@arnilo/prism-acp-agent` | 0.11.0 | capability — ACP adapter |
281
- | `@arnilo/prism-ag-ui` | 0.11.0 | capability — AG-UI/A2A/A2UI adapter |
282
- | `@arnilo/prism-hooks` | 0.11.0 | capability — Claude/Codex-compatible hooks.json adapter compiled onto middleware, guardrail, injector, and stop-hook seams |
283
- | `@arnilo/prism-mcp` | 0.11.0 | capability — MCP client/server/OAuth interop |
284
- | `@arnilo/prism-memory` | 0.11.0 | capability — memory plus /rag, /compaction/*, /fabric, /wiki subpaths |
285
- | `@arnilo/prism-web-tools` | 0.11.0 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
286
- | `@arnilo/prism-work` | 0.11.0 | capability — /connectors, /documents, /sheets, /diagrams, /document-reader, /sandbox, /skills, /tools subpaths |
276
+ | `@arnilo/prism` | 0.11.1 | core — runtime, CLI/RPC, templates, docs |
277
+ | `@arnilo/prism-channels` | 0.11.1 | family — transport-neutral messaging runtime, durable journal, pairing and one-use approvals; official /telegram (private DMs, opt-in granted groups/topics) and experimental pinned signal-cli /signal |
278
+ | `@arnilo/prism-coding-tools` | 0.11.1 | family — /agent, /security, /openapi, /computer-use-linux, /dev, /impeccable subpaths |
279
+ | `@arnilo/prism-core` | 0.11.1 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /validation subpaths |
280
+ | `@arnilo/prism-providers` | 0.11.1 | family — all provider adapters as `/<adapter>` subpaths |
281
+ | `@arnilo/prism-acp-agent` | 0.11.1 | capability — ACP adapter |
282
+ | `@arnilo/prism-ag-ui` | 0.11.1 | capability — AG-UI/A2A/A2UI adapter |
283
+ | `@arnilo/prism-hooks` | 0.11.1 | capability — Claude/Codex-compatible hooks.json adapter compiled onto middleware, guardrail, injector, and stop-hook seams |
284
+ | `@arnilo/prism-mcp` | 0.11.1 | capability — MCP client/server/OAuth interop |
285
+ | `@arnilo/prism-memory` | 0.11.1 | capability — memory plus /rag, /compaction/*, /fabric, /wiki subpaths |
286
+ | `@arnilo/prism-web-tools` | 0.11.1 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
287
+ | `@arnilo/prism-work` | 0.11.1 | capability — /connectors, /documents, /sheets, /diagrams, /document-reader, /sandbox, /skills, /tools subpaths |
287
288
  <!-- generated:package-truth:inventory end -->
@@ -21,30 +21,32 @@ Do not use provider packages as a package manager, credential store, env loader,
21
21
  ### Provider inventory
22
22
 
23
23
  <!-- generated:package-truth:providers begin -->
24
- **20 provider adapters** — first-party adapters ship as `@arnilo/prism-providers/<adapter>` subpaths in one tarball (importing one never evaluates another):
24
+ **22 provider adapters** — first-party adapters ship as `@arnilo/prism-providers/<adapter>` subpaths in one tarball (importing one never evaluates another):
25
25
 
26
26
  | adapter package | version |
27
27
  | --- | --- |
28
- | `@arnilo/prism-providers/ai-sdk` | 0.11.0 |
29
- | `@arnilo/prism-providers/alibaba` | 0.11.0 |
30
- | `@arnilo/prism-providers/anthropic` | 0.11.0 |
31
- | `@arnilo/prism-providers/azure` | 0.11.0 |
32
- | `@arnilo/prism-providers/bedrock` | 0.11.0 |
33
- | `@arnilo/prism-providers/clinepass` | 0.11.0 |
34
- | `@arnilo/prism-providers/commandcode` | 0.11.0 |
35
- | `@arnilo/prism-providers/deepseek` | 0.11.0 |
36
- | `@arnilo/prism-providers/google` | 0.11.0 |
37
- | `@arnilo/prism-providers/hyper` | 0.11.0 |
38
- | `@arnilo/prism-providers/kimi` | 0.11.0 |
39
- | `@arnilo/prism-providers/model-discovery` | 0.11.0 |
40
- | `@arnilo/prism-providers/neuralwatt` | 0.11.0 |
41
- | `@arnilo/prism-providers/ollama` | 0.11.0 |
42
- | `@arnilo/prism-providers/openai` | 0.11.0 |
43
- | `@arnilo/prism-providers/opencode-go` | 0.11.0 |
44
- | `@arnilo/prism-providers/openrouter` | 0.11.0 |
45
- | `@arnilo/prism-providers/vertex` | 0.11.0 |
46
- | `@arnilo/prism-providers/xai` | 0.11.0 |
47
- | `@arnilo/prism-providers/zai` | 0.11.0 |
28
+ | `@arnilo/prism-providers/ai-sdk` | 0.11.1 |
29
+ | `@arnilo/prism-providers/alibaba` | 0.11.1 |
30
+ | `@arnilo/prism-providers/anthropic` | 0.11.1 |
31
+ | `@arnilo/prism-providers/azure` | 0.11.1 |
32
+ | `@arnilo/prism-providers/bedrock` | 0.11.1 |
33
+ | `@arnilo/prism-providers/clinepass` | 0.11.1 |
34
+ | `@arnilo/prism-providers/commandcode` | 0.11.1 |
35
+ | `@arnilo/prism-providers/deepseek` | 0.11.1 |
36
+ | `@arnilo/prism-providers/google` | 0.11.1 |
37
+ | `@arnilo/prism-providers/hyper` | 0.11.1 |
38
+ | `@arnilo/prism-providers/kimi` | 0.11.1 |
39
+ | `@arnilo/prism-providers/laya` | 0.11.1 |
40
+ | `@arnilo/prism-providers/model-discovery` | 0.11.1 |
41
+ | `@arnilo/prism-providers/neuralwatt` | 0.11.1 |
42
+ | `@arnilo/prism-providers/ollama` | 0.11.1 |
43
+ | `@arnilo/prism-providers/openai` | 0.11.1 |
44
+ | `@arnilo/prism-providers/opencode-go` | 0.11.1 |
45
+ | `@arnilo/prism-providers/openrouter` | 0.11.1 |
46
+ | `@arnilo/prism-providers/typesafe` | 0.11.1 |
47
+ | `@arnilo/prism-providers/vertex` | 0.11.1 |
48
+ | `@arnilo/prism-providers/xai` | 0.11.1 |
49
+ | `@arnilo/prism-providers/zai` | 0.11.1 |
48
50
  <!-- generated:package-truth:providers end -->
49
51
 
50
52
 
@@ -0,0 +1,113 @@
1
+ # Laya provider package
2
+
3
+ ## What it does
4
+
5
+ `@arnilo/prism-providers/laya` registers the Laya decision model served by `laya-serve`. Laya speaks the same `POST /v1/systemone` wire as TypeSafe Jev. It does not generate free text, stream, or call tools. A request is valid only with `options.structuredOutput`.
6
+
7
+ The package registers provider `laya`, checkpoints `laya`, `laya-multilingual`, and `laya-typed-decisions`, and an optional `api_key` auth method. The server Router picks the checkpoint. The `model` field is advisory and is not a client-side force.
8
+
9
+ ## When to use it
10
+
11
+ Use it when a host runs `laya-serve` locally or on another machine and wants the same structured decision contract as Jev without a hosted account. Do not use it as a general chat model or a tool-calling agent.
12
+
13
+ ## Inputs / request
14
+
15
+ ```ts
16
+ import {
17
+ createLayaProvider,
18
+ createLayaProviderPackage,
19
+ DEFAULT_LAYA_BASE_URL,
20
+ defineLayaModel,
21
+ LAYA_API_KEY_ENV,
22
+ layaBaseUrl,
23
+ layaModels,
24
+ } from "@arnilo/prism-providers/laya";
25
+ ```
26
+
27
+ | Field | Type | Purpose |
28
+ | --- | --- | --- |
29
+ | `apiKey` | `CredentialValueSource` | Optional. Send it only when the server was started with `LAYA_API_KEY`. Absent key means no `Authorization` header. |
30
+ | `fetch` | `typeof fetch` | Optional fetch for tests and hosts. |
31
+ | `baseUrl` | `string` | Overrides `http://localhost:8000`. Any absolute URL wins, including `https://laya.example.com` and `https://10.0.0.5:8443`. Trailing slashes are trimmed. `layaBaseUrl({ baseUrl })` is the same resolver. |
32
+ | `id` | `string` | Overrides the provider id (default `laya`). |
33
+ | `models` | `readonly ModelConfig[]` | Overrides `layaModels`. |
34
+ | `maxRetries` | `number` | Retries after the first attempt. Default 2. |
35
+
36
+ Gating, schema mapping, `compat.boolean_threshold`, state rules, and the event sequence match [TypeSafe Jev](typesafe.md). Unsupported schema fields, tools, a missing schema, and an out-of-range threshold fail before any fetch.
37
+
38
+ | Checkpoint | Context | Notes |
39
+ | --- | --- | --- |
40
+ | `laya` | 512 | English encoder. |
41
+ | `laya-multilingual` | 1024 | `metadata.extendedContextWindow` is `8192` — `laya-serve` may extend the window. |
42
+ | `laya-typed-decisions` | 1024 | Typed-decision checkpoint. |
43
+
44
+ All three declare the same capability set as Jev (`structuredOutput: "json_schema"`, `streaming: false`, `tools: false`, text in and out), `maxOutputTokens: 0`, and zero cost.
45
+
46
+ ## Outputs / response / events
47
+
48
+ Same sequence as Jev: `message_start`, one `content_delta` of schema-valid JSON, `usage` (`inputTokens` only, `outputTokens: 0`), `done` with `stopReason: "end_turn"`. Gate, HTTP, and render failures are a terminal `error` event. `401` is not retried and only occurs when a key is configured. `422` is not retried and the message includes the API field detail. The server's chosen model id is not rewritten into the rendered text.
49
+
50
+ ## Request/response example
51
+
52
+ ```json
53
+ {
54
+ "model": "laya",
55
+ "state": "rm -rf ./build",
56
+ "questions": {
57
+ "verdict": {
58
+ "type": "choice",
59
+ "instructions": "How should this be handled?",
60
+ "criteria": { "run": "run", "reject": "reject" }
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ The response shape matches Jev. Rendered text is the schema object, for example `{"verdict":"reject"}`.
67
+
68
+ ## Implementation example
69
+
70
+ ```ts
71
+ import { createEnvCredentialResolver, createExtensionKernel } from "@arnilo/prism";
72
+ import { createLayaProviderPackage, LAYA_API_KEY_ENV } from "@arnilo/prism-providers/laya";
73
+
74
+ const kernel = createExtensionKernel();
75
+
76
+ // Local laya-serve, no key.
77
+ await kernel.load([createLayaProviderPackage()]);
78
+
79
+ // laya-serve on another machine.
80
+ await kernel.load([
81
+ createLayaProviderPackage({
82
+ baseUrl: "https://laya.example.com",
83
+ apiKey: createEnvCredentialResolver(process.env, { laya: LAYA_API_KEY_ENV }),
84
+ }),
85
+ ]);
86
+ ```
87
+
88
+ ## Extension and configuration notes
89
+
90
+ - `baseUrl` is the deployment switch. A host-supplied endpoint always overrides `DEFAULT_LAYA_BASE_URL`.
91
+ - `model` on the wire is advisory. There is no client checkpoint override.
92
+ - Schema extension keys are `x-systemone` and the `x-typesafe` alias: `criteria` for booleans, `options` for choices, `levels` for rubrics. See [TypeSafe Jev](typesafe.md) for the field table.
93
+ - `compat.boolean_threshold` (`0..1`, default `0.5`) is the only request knob.
94
+ - No checkpoint probing and no model listing run at setup or during `generate()`.
95
+
96
+ ## Security and performance notes
97
+
98
+ - **Egress follows `baseUrl`.** State text and compiled questions are sent to whatever origin that URL names. Do not put secrets in the state.
99
+ - **Cost and latency.** One `POST /v1/systemone` round trip per structured-output request. Questions are free in parallel; state tokens are the cost. Catalog cost is zero. There is no streaming and no second hop.
100
+ - **Credentials.** When set, the bearer token is resolved at the provider edge and redacted from error events. It is never logged.
101
+
102
+ ### Remote deployment
103
+
104
+ Host `laya-serve` on another machine only behind TLS. Terminate HTTPS at the server or a reverse proxy, set `LAYA_API_KEY` on the server, and pass the same secret as `apiKey` on the client (`LAYA_API_KEY`). Point `baseUrl` at that `https://` origin (`https://laya.example.com`, `https://10.0.0.5:8443`, and so on).
105
+
106
+ The default `http://localhost:8000` is plaintext loopback only. A non-loopback `http://` base URL (not `localhost`, `*.localhost`, `::1`, or `127/8`) logs a `console.warn` and still sends the request — air-gapped LAN HTTP is a legitimate setup. `https://` and loopback `http://` stay silent. The warning uses the URL origin, so userinfo is not printed. Prefer HTTPS plus a matching `LAYA_API_KEY` for any machine that is not the local host.
107
+
108
+ ## Related APIs
109
+
110
+ - [TypeSafe Jev](typesafe.md): hosted twin. Schema mapping and event sequence are defined there.
111
+ - [Structured output](../structured-output.md): `options.structuredOutput` contract this adapter requires.
112
+ - [Provider packages](../provider-packages.md): registration and auth-method shape.
113
+ - [Credentials and redaction](../credentials-and-redaction.md): `CredentialValueSource` and `createEnvCredentialResolver`.
@@ -0,0 +1,145 @@
1
+ # TypeSafe Jev provider package
2
+
3
+ ## What it does
4
+
5
+ `@arnilo/prism-providers/typesafe` registers the TypeSafe Jev decision model. Jev does not generate free text, stream, or call tools. A request is valid only with `options.structuredOutput`: the JSON schema compiles to System One questions, the messages become the state, and one `POST /v1/systemone` round trip returns typed answers rendered as schema-valid JSON.
6
+
7
+ The package registers provider `typesafe`, models `jev-latest` and `jev-preview`, and an `api_key` auth method through `createExtensionKernel().load([...])`. Versioned pins (`jev-1.13.0`) go through `defineTypeSafeModel`.
8
+
9
+ ## When to use it
10
+
11
+ Use it when a host wants a hosted yes/no, pick-one, or rubric decision and already has a JSON object schema. Do not use it as a general chat model, a tool-calling agent, or a streaming text model.
12
+
13
+ ## Inputs / request
14
+
15
+ ```ts
16
+ import {
17
+ createTypeSafeProvider,
18
+ createTypeSafeProviderPackage,
19
+ defineTypeSafeModel,
20
+ TYPESAFE_API_KEY_ENV,
21
+ TYPESAFE_DEFAULT_BASE_URL,
22
+ typeSafeModels,
23
+ } from "@arnilo/prism-providers/typesafe";
24
+ ```
25
+
26
+ | Field | Type | Purpose |
27
+ | --- | --- | --- |
28
+ | `apiKey` | `CredentialValueSource` | Bearer token. Hosts wire `TYPESAFE_API_KEY` through the credential seam. The library does not read `process.env`. |
29
+ | `fetch` | `typeof fetch` | Optional fetch for tests and hosts. |
30
+ | `baseUrl` | `string` | Overrides `https://api.typesafe.ai`. Trailing slashes are trimmed. `/v1/systemone` is appended per request. |
31
+ | `id` | `string` | Overrides the provider id (default `typesafe`). |
32
+ | `models` | `readonly ModelConfig[]` | Overrides `typeSafeModels`. |
33
+ | `maxRetries` | `number` | Retries after the first attempt. Default 2. Forwarded to the shared client. |
34
+
35
+ `generate()` accepts a normal `ProviderRequest` with these constraints:
36
+
37
+ | Field | Requirement |
38
+ | --- | --- |
39
+ | `options.structuredOutput` | Required. `{ name, schema }`. Missing schema fails before any fetch. |
40
+ | `tools` | Rejected. Decision model, no tool support. Fails before any fetch. |
41
+ | `options.compat.boolean_threshold` | Optional number in `0..1`. Default `0.5`. Out of range fails before any fetch. A boolean is true only when the noul probability is strictly greater than the threshold, so `0.5` renders `false` at the default. |
42
+ | `messages` | State only. A single user text message is sent as a string; otherwise the client sends `[{ role, text }]` and drops non-text parts. Do not write the question into the state — the model judges that text instead of answering it. |
43
+ | `model.model` | Sent verbatim. The responding version in the API body is not rewritten into the output. |
44
+ | `signal` | A signal already aborted throws before fetch. Abort during the round trip rejects the request. |
45
+
46
+ Schema mapping (unsupported shapes throw before any network call and name the field path):
47
+
48
+ | JSON Schema | Question |
49
+ | --- | --- |
50
+ | `boolean` | `noul`. Instructions come from `description`, then `title`, then the field path. |
51
+ | string `enum` of 2–255 values | `choice`. Criteria are the option labels unless `x-systemone.options` (or the `x-typesafe` alias) supplies descriptions. |
52
+ | integer `enum` equal to `0..N-1` with 2–10 described levels | `score`. Levels come from `x-systemone.levels` (alias `x-typesafe`), aligned to the declared enum order and sent in numeric order. An undescribed whole-number enum stays a `choice`. |
53
+ | nested object | One question per leaf, id `outer.inner`. |
54
+ | string, unbounded number, array, union, empty object | Rejected. |
55
+
56
+ Extension keys live on the property:
57
+
58
+ ```json
59
+ { "type": "boolean", "x-systemone": { "criteria": { "true": "destructive", "false": "safe" } } }
60
+ { "type": "string", "enum": ["run", "reject"], "x-systemone": { "options": { "run": "safe", "reject": "destructive" } } }
61
+ { "type": "integer", "enum": [0, 1, 2], "x-systemone": { "levels": ["opaque", "partial", "actionable"] } }
62
+ ```
63
+
64
+ Limits rejected up front: more than 255 choice options, more than 10 score levels, more than 256 questions. Field names that contain a dot are rejected so dotted nesting stays unambiguous.
65
+
66
+ Curated models declare `capabilities: { input: ["text"], output: ["text"], tools: false, streaming: false, structuredOutput: "json_schema" }`, `limits: { contextWindow: 32000, maxOutputTokens: 0 }`, and `cost: { input: 0.04, output: 0, currency: "USD", unit: "per_million_tokens" }`.
67
+
68
+ ## Outputs / response / events
69
+
70
+ | Event | Behavior |
71
+ | --- | --- |
72
+ | `message_start` | One, before the answer. |
73
+ | `content_delta` | One text block. The text is `JSON.stringify` of the schema-shaped object. |
74
+ | `usage` | `inputTokens` from the API. `outputTokens` is `0`. `totalTokens` equals `inputTokens`. Omitted when the API sends no usage. |
75
+ | `done` | `stopReason: "end_turn"`, same usage when present. |
76
+ | `error` | Terminal event for gate failures, HTTP failures, and render failures. `401` is not retried. `422` is not retried and the message includes the API field detail. `429` and `5xx` (including `529`) retry, honoring `Retry-After`. |
77
+
78
+ Booleans come from noul vs `boolean_threshold`. Enums come from the choice string (whole-number options stay numbers). Rubric integers are `Math.round` of the score, half rounds up, clamped to the rubric. Nested objects are reassembled from dotted ids. Confidence, probabilities, and score distributions are not copied onto events; the text must stay schema-valid.
79
+
80
+ ## Request/response example
81
+
82
+ ```json
83
+ {
84
+ "model": "jev-latest",
85
+ "state": "rm -rf ./build",
86
+ "questions": {
87
+ "verdict": {
88
+ "type": "choice",
89
+ "instructions": "How should this be handled?",
90
+ "criteria": { "run": "run", "reject": "reject", "ask": "ask" }
91
+ },
92
+ "irreversible": { "type": "noul", "instructions": "Would running this destroy data?" }
93
+ }
94
+ }
95
+ ```
96
+
97
+ ```json
98
+ {
99
+ "model": "jev-1.13.0",
100
+ "answers": {
101
+ "verdict": { "type": "choice", "choice": "ask" },
102
+ "irreversible": { "type": "noul", "noul": 0.91 }
103
+ },
104
+ "usage": { "input_tokens": 96, "output_tokens": 0 }
105
+ }
106
+ ```
107
+
108
+ Rendered text: `{"verdict":"ask","irreversible":true}`.
109
+
110
+ ## Implementation example
111
+
112
+ ```ts
113
+ import { createEnvCredentialResolver, createExtensionKernel } from "@arnilo/prism";
114
+ import { createTypeSafeProviderPackage, TYPESAFE_API_KEY_ENV } from "@arnilo/prism-providers/typesafe";
115
+
116
+ const kernel = createExtensionKernel();
117
+ await kernel.load([
118
+ createTypeSafeProviderPackage({
119
+ apiKey: createEnvCredentialResolver(process.env, { typesafe: TYPESAFE_API_KEY_ENV }),
120
+ }),
121
+ ]);
122
+ ```
123
+
124
+ A request must carry `options.structuredOutput`. The answer arrives as one text delta.
125
+
126
+ ## Extension and configuration notes
127
+
128
+ - Replace the catalog with `models` or register extra pins via `defineTypeSafeModel({ model: "jev-1.13.0" })`. Defaults (capabilities, 32k context, zero output tokens, $0.04/1M input) still apply.
129
+ - `compat.boolean_threshold` is the only request knob. There is no temperature, tool choice, or streaming flag.
130
+ - `baseUrl` points the same client at a proxy. It does not change the wire shape.
131
+ - No model listing runs at setup or during `generate()`.
132
+
133
+ ## Security and performance notes
134
+
135
+ - **Egress.** State text and compiled questions leave the process for TypeSafe's hosted API (`https://api.typesafe.ai` unless `baseUrl` overrides it). Do not put secrets in the state.
136
+ - **Credentials.** The bearer token is resolved at the provider edge and redacted from error events. It is never logged.
137
+ - **Cost and latency.** One `POST /v1/systemone` round trip per structured-output request. Questions are free in parallel; state tokens are the cost. Output tokens are not billed (`output: 0`). There is no streaming and no second hop for model discovery.
138
+ - **Fail closed.** Missing schema, tools, an out-of-range threshold, and unsupported fields fail before fetch.
139
+
140
+ ## Related APIs
141
+
142
+ - [Laya](laya.md): same wire and schema mapping against a self-hosted `laya-serve`.
143
+ - [Structured output](../structured-output.md): `options.structuredOutput` contract this adapter requires.
144
+ - [Provider packages](../provider-packages.md): registration and auth-method shape.
145
+ - [Credentials and redaction](../credentials-and-redaction.md): `CredentialValueSource` and `createEnvCredentialResolver`.
@@ -5,57 +5,59 @@
5
5
  ## What it does
6
6
 
7
7
 
8
- Prism's current **0.11.0** line has **12 publishable manifests**: the root `@arnilo/prism` core package plus **11 workspace packages** — **20 provider adapters** (20 provider adapter subpaths inside the `@arnilo/prism-providers` family), 4 `prism-*` family packages, and 7 capability packages. (Generated by `node scripts/package-truth.mjs` → `scripts/package-truth.json` — the manifest-derived single source for counts, provider membership, umbrella closures, and profile closures.) The last lockstep cut was 0.3.0; Decision B now publishes changed packages independently inside `^0.3.0` — the plan 039 changed-package cut moved root `@arnilo/prism` and every plan-035+ changed package to **0.3.1**, and the plan 050 changed-package cut moved root plus four changed packages to **0.3.2**; the plan 041-044 changed-package cut moves root to **0.3.3** with `@arnilo/prism-memory@0.3.2` (composite recall scoring), `@arnilo/prism-evals@0.3.1` (trace-to-dataset curation), the three session-store packages at **0.3.1** (run-ledger `promptVersion` provenance), and the initial `@arnilo/prism-prompts@0.0.1` (independent opt-in, outside `prism-all`); plan 054 consolidation then folded `@arnilo/prism-browser` and `@arnilo/prism-obscura` into the `@arnilo/prism-web-tools` family as `/browser` and `/obscura` subpaths, folded `@arnilo/prism-rag`, both compaction strategies, `@arnilo/prism-graft`, and `@arnilo/prism-wiki` into the `@arnilo/prism-memory` family as `/rag`, `/compaction/llm`, `/compaction/observational-memory`, `/graft`, and `/wiki` subpaths (deleting the `@arnilo/prism-compaction` profile), and folded all 17 `@arnilo/prism-provider-*` packages into the `@arnilo/prism-providers` family as `/<adapter>` subpaths (Azure/Bedrock/Vertex stop being special all-only manifests); independent publication continues inside `^0.3.0` ranges (which satisfy 0.3.1, 0.3.2, and 0.3.3). This page describes how they are packed, what each tarball contains, how to install them, the required non-optional **caret** `@arnilo/prism@^0.11.0` peer range, the release workflow, and the offline test budget. The measurable 1.0 readiness gates (command-per-gate) live in [`0.1.0-readiness.md`](history/./0.1.0-readiness.md).
8
+ Prism's current **0.11.1** line has **12 publishable manifests**: the root `@arnilo/prism` core package plus **11 workspace packages** — **22 provider adapters** (22 provider adapter subpaths inside the `@arnilo/prism-providers` family), 4 `prism-*` family packages, and 7 capability packages. (Generated by `node scripts/package-truth.mjs` → `scripts/package-truth.json` — the manifest-derived single source for counts, provider membership, umbrella closures, and profile closures.) The last lockstep cut was 0.3.0; Decision B now publishes changed packages independently inside `^0.3.0` — the plan 039 changed-package cut moved root `@arnilo/prism` and every plan-035+ changed package to **0.3.1**, and the plan 050 changed-package cut moved root plus four changed packages to **0.3.2**; the plan 041-044 changed-package cut moves root to **0.3.3** with `@arnilo/prism-memory@0.3.2` (composite recall scoring), `@arnilo/prism-evals@0.3.1` (trace-to-dataset curation), the three session-store packages at **0.3.1** (run-ledger `promptVersion` provenance), and the initial `@arnilo/prism-prompts@0.0.1` (independent opt-in, outside `prism-all`); plan 054 consolidation then folded `@arnilo/prism-browser` and `@arnilo/prism-obscura` into the `@arnilo/prism-web-tools` family as `/browser` and `/obscura` subpaths, folded `@arnilo/prism-rag`, both compaction strategies, `@arnilo/prism-graft`, and `@arnilo/prism-wiki` into the `@arnilo/prism-memory` family as `/rag`, `/compaction/llm`, `/compaction/observational-memory`, `/graft`, and `/wiki` subpaths (deleting the `@arnilo/prism-compaction` profile), and folded all 17 `@arnilo/prism-provider-*` packages into the `@arnilo/prism-providers` family as `/<adapter>` subpaths (Azure/Bedrock/Vertex stop being special all-only manifests); independent publication continues inside `^0.3.0` ranges (which satisfy 0.3.1, 0.3.2, and 0.3.3). This page describes how they are packed, what each tarball contains, how to install them, the required non-optional **caret** `@arnilo/prism@^0.11.1` peer range, the release workflow, and the offline test budget. The measurable 1.0 readiness gates (command-per-gate) live in [`0.1.0-readiness.md`](history/./0.1.0-readiness.md).
9
9
 
10
10
  Core `@arnilo/prism` ships runtime, CLI, templates, and docs. Every code package has a required `@arnilo/prism` peer inside the Decision B window — the caret current spec is `@arnilo/prism@^0.3.3` and every declared window peer satisfies it: packages republishing in the plan 050 cut carry `^0.3.2`; the plan 039 set keeps `^0.3.1`; unchanged packages keep their `^0.3.0` peer; profiles are pure manifests. The plan 050 republished set declares the required `@arnilo/prism@^0.3.2` peer; the plan 041-044 republished set keeps its existing `^0.3.0` window peer; unchanged packages keep their prior window. Installation activates no provider, listener, database, browser, credential, or tool capability.
11
11
 
12
- The **0.11.0 lockstep cut** moved all **twelve** manifests together. The current declared peer is `@arnilo/prism@^0.11.0` on every package, and `release.mjs` lockstep mode fails closed on any internal range that merely satisfies the cut version instead of matching it. The **0.6.0–0.10.0 lockstep cuts** each moved their then-current manifest set together (`@arnilo/prism-hooks` arrived in the 0.10.0 cut). The independent-publication history above (0.3.x, 0.4.x, 0.5.x) describes how the line grew when packages moved separately.
12
+ The **0.11.1 lockstep cut** moved all **twelve** manifests together. The current declared peer is `@arnilo/prism@^0.11.1` on every package, and `release.mjs` lockstep mode fails closed on any internal range that merely satisfies the cut version instead of matching it. The **0.6.0–0.11.0 lockstep cuts** each moved their then-current manifest set together (`@arnilo/prism-hooks` arrived in the 0.10.0 cut). The independent-publication history above (0.3.x, 0.4.x, 0.5.x) describes how the line grew when packages moved separately.
13
13
 
14
14
  <!-- generated:package-truth:inventory begin -->
15
15
  **12 publishable manifests** — root `@arnilo/prism` plus 11 workspace packages (4 `prism-*` family packages, 7 capability packages). Generated by `node scripts/package-truth.mjs --emit-docs` — do not hand-edit.
16
16
 
17
17
  | package | version | notes |
18
18
  | --- | --- | --- |
19
- | `@arnilo/prism` | 0.11.0 | core — runtime, CLI/RPC, templates, docs |
20
- | `@arnilo/prism-channels` | 0.11.0 | family — transport-neutral messaging runtime, durable journal, pairing and one-use approvals; official /telegram (private DMs, opt-in granted groups/topics) and experimental pinned signal-cli /signal |
21
- | `@arnilo/prism-coding-tools` | 0.11.0 | family — /agent, /security, /openapi, /computer-use-linux, /dev, /impeccable subpaths |
22
- | `@arnilo/prism-core` | 0.11.0 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /validation subpaths |
23
- | `@arnilo/prism-providers` | 0.11.0 | family — all provider adapters as `/<adapter>` subpaths |
24
- | `@arnilo/prism-acp-agent` | 0.11.0 | capability — ACP adapter |
25
- | `@arnilo/prism-ag-ui` | 0.11.0 | capability — AG-UI/A2A/A2UI adapter |
26
- | `@arnilo/prism-hooks` | 0.11.0 | capability — Claude/Codex-compatible hooks.json adapter compiled onto middleware, guardrail, injector, and stop-hook seams |
27
- | `@arnilo/prism-mcp` | 0.11.0 | capability — MCP client/server/OAuth interop |
28
- | `@arnilo/prism-memory` | 0.11.0 | capability — memory plus /rag, /compaction/*, /fabric, /wiki subpaths |
29
- | `@arnilo/prism-web-tools` | 0.11.0 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
30
- | `@arnilo/prism-work` | 0.11.0 | capability — /connectors, /documents, /sheets, /diagrams, /document-reader, /sandbox, /skills, /tools subpaths |
19
+ | `@arnilo/prism` | 0.11.1 | core — runtime, CLI/RPC, templates, docs |
20
+ | `@arnilo/prism-channels` | 0.11.1 | family — transport-neutral messaging runtime, durable journal, pairing and one-use approvals; official /telegram (private DMs, opt-in granted groups/topics) and experimental pinned signal-cli /signal |
21
+ | `@arnilo/prism-coding-tools` | 0.11.1 | family — /agent, /security, /openapi, /computer-use-linux, /dev, /impeccable subpaths |
22
+ | `@arnilo/prism-core` | 0.11.1 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /validation subpaths |
23
+ | `@arnilo/prism-providers` | 0.11.1 | family — all provider adapters as `/<adapter>` subpaths |
24
+ | `@arnilo/prism-acp-agent` | 0.11.1 | capability — ACP adapter |
25
+ | `@arnilo/prism-ag-ui` | 0.11.1 | capability — AG-UI/A2A/A2UI adapter |
26
+ | `@arnilo/prism-hooks` | 0.11.1 | capability — Claude/Codex-compatible hooks.json adapter compiled onto middleware, guardrail, injector, and stop-hook seams |
27
+ | `@arnilo/prism-mcp` | 0.11.1 | capability — MCP client/server/OAuth interop |
28
+ | `@arnilo/prism-memory` | 0.11.1 | capability — memory plus /rag, /compaction/*, /fabric, /wiki subpaths |
29
+ | `@arnilo/prism-web-tools` | 0.11.1 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
30
+ | `@arnilo/prism-work` | 0.11.1 | capability — /connectors, /documents, /sheets, /diagrams, /document-reader, /sandbox, /skills, /tools subpaths |
31
31
  <!-- generated:package-truth:inventory end -->
32
32
 
33
33
 
34
34
  <!-- generated:package-truth:providers begin -->
35
- **20 provider adapters** — first-party adapters ship as `@arnilo/prism-providers/<adapter>` subpaths in one tarball (importing one never evaluates another):
35
+ **22 provider adapters** — first-party adapters ship as `@arnilo/prism-providers/<adapter>` subpaths in one tarball (importing one never evaluates another):
36
36
 
37
37
  | adapter package | version |
38
38
  | --- | --- |
39
- | `@arnilo/prism-providers/ai-sdk` | 0.11.0 |
40
- | `@arnilo/prism-providers/alibaba` | 0.11.0 |
41
- | `@arnilo/prism-providers/anthropic` | 0.11.0 |
42
- | `@arnilo/prism-providers/azure` | 0.11.0 |
43
- | `@arnilo/prism-providers/bedrock` | 0.11.0 |
44
- | `@arnilo/prism-providers/clinepass` | 0.11.0 |
45
- | `@arnilo/prism-providers/commandcode` | 0.11.0 |
46
- | `@arnilo/prism-providers/deepseek` | 0.11.0 |
47
- | `@arnilo/prism-providers/google` | 0.11.0 |
48
- | `@arnilo/prism-providers/hyper` | 0.11.0 |
49
- | `@arnilo/prism-providers/kimi` | 0.11.0 |
50
- | `@arnilo/prism-providers/model-discovery` | 0.11.0 |
51
- | `@arnilo/prism-providers/neuralwatt` | 0.11.0 |
52
- | `@arnilo/prism-providers/ollama` | 0.11.0 |
53
- | `@arnilo/prism-providers/openai` | 0.11.0 |
54
- | `@arnilo/prism-providers/opencode-go` | 0.11.0 |
55
- | `@arnilo/prism-providers/openrouter` | 0.11.0 |
56
- | `@arnilo/prism-providers/vertex` | 0.11.0 |
57
- | `@arnilo/prism-providers/xai` | 0.11.0 |
58
- | `@arnilo/prism-providers/zai` | 0.11.0 |
39
+ | `@arnilo/prism-providers/ai-sdk` | 0.11.1 |
40
+ | `@arnilo/prism-providers/alibaba` | 0.11.1 |
41
+ | `@arnilo/prism-providers/anthropic` | 0.11.1 |
42
+ | `@arnilo/prism-providers/azure` | 0.11.1 |
43
+ | `@arnilo/prism-providers/bedrock` | 0.11.1 |
44
+ | `@arnilo/prism-providers/clinepass` | 0.11.1 |
45
+ | `@arnilo/prism-providers/commandcode` | 0.11.1 |
46
+ | `@arnilo/prism-providers/deepseek` | 0.11.1 |
47
+ | `@arnilo/prism-providers/google` | 0.11.1 |
48
+ | `@arnilo/prism-providers/hyper` | 0.11.1 |
49
+ | `@arnilo/prism-providers/kimi` | 0.11.1 |
50
+ | `@arnilo/prism-providers/laya` | 0.11.1 |
51
+ | `@arnilo/prism-providers/model-discovery` | 0.11.1 |
52
+ | `@arnilo/prism-providers/neuralwatt` | 0.11.1 |
53
+ | `@arnilo/prism-providers/ollama` | 0.11.1 |
54
+ | `@arnilo/prism-providers/openai` | 0.11.1 |
55
+ | `@arnilo/prism-providers/opencode-go` | 0.11.1 |
56
+ | `@arnilo/prism-providers/openrouter` | 0.11.1 |
57
+ | `@arnilo/prism-providers/typesafe` | 0.11.1 |
58
+ | `@arnilo/prism-providers/vertex` | 0.11.1 |
59
+ | `@arnilo/prism-providers/xai` | 0.11.1 |
60
+ | `@arnilo/prism-providers/zai` | 0.11.1 |
59
61
  <!-- generated:package-truth:providers end -->
60
62
 
61
63
 
@@ -152,7 +154,7 @@ A packed tarball contains only public compiled output and release files:
152
154
  - Code packages ship `README.md`, `LICENSE`, and `CHANGELOG.md`; family/profile packages ship `README.md` and `CHANGELOG.md`.
153
155
  - The core tarball additionally ships the full `docs/` directory (the docs hub), `templates/init/`, and the `templates/` gallery (e.g. `deep-research`) used by `prism init`.
154
156
  - `dist/cli.js` and the `bin` link in core.
155
- - **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.11.0.tgz`; family packages produce `arnilo-prism-core-0.11.0.tgz`, `arnilo-prism-coding-tools-0.11.0.tgz`, `arnilo-prism-providers-0.11.0.tgz` (all 20 adapters inside), `arnilo-prism-channels-0.11.0.tgz`, `arnilo-prism-memory-0.11.0.tgz`, and `arnilo-prism-web-tools-0.11.0.tgz`; capability packages like `arnilo-prism-hooks-0.11.0.tgz`, `arnilo-prism-mcp-0.11.0.tgz`, and `arnilo-prism-work-0.11.0.tgz` carry their own package version. Independent-package tags carry their own version. The CLI bin name `prism` is unaffected by the package name (`npx prism` still works; npm allows the bin field to differ from the package name).
157
+ - **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.11.1.tgz`; family packages produce `arnilo-prism-core-0.11.1.tgz`, `arnilo-prism-coding-tools-0.11.1.tgz`, `arnilo-prism-providers-0.11.1.tgz` (all 22 adapters inside), `arnilo-prism-channels-0.11.1.tgz`, `arnilo-prism-memory-0.11.1.tgz`, and `arnilo-prism-web-tools-0.11.1.tgz`; capability packages like `arnilo-prism-hooks-0.11.1.tgz`, `arnilo-prism-mcp-0.11.1.tgz`, and `arnilo-prism-work-0.11.1.tgz` carry their own package version. Independent-package tags carry their own version. The CLI bin name `prism` is unaffected by the package name (`npx prism` still works; npm allows the bin field to differ from the package name).
156
158
 
157
159
  Excluded from every tarball by `files` negation:
158
160
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arnilo/prism",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "Agent harness for AI providers, agents, sessions, and tools.",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.4.2",