@arnilo/prism 0.5.2 → 0.5.3
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 +5 -0
- package/README.md +10 -10
- package/dist/agent-loops.js +2 -12
- package/dist/agent-session/session/tool-round.js +2 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/input.d.ts +1 -0
- package/dist/input.js +18 -5
- package/dist/providers/openai-primitives.d.ts +1 -0
- package/dist/providers/openai-primitives.js +15 -1
- package/docs/0.1.0-readiness.md +2 -2
- package/docs/index.md +14 -13
- package/docs/migrate-to-0.5.md +1 -1
- package/docs/migration.md +4 -0
- package/docs/provider-packages.md +20 -20
- package/docs/release-and-install.md +32 -32
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
## [0.5.3] - 2026-09-08
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **Content-only tool results no longer serialize as JSON `"null"` on the provider wire.** First-party coding tools return output in `ToolResult.content` (`[{type:'text',text}]`), not `value`. Construction now folds that text onto `tool_result.result`; serializers join sibling `type:text` blocks when `result` is missing. Lockstep `0.5.2` → `0.5.3` with internal ranges `^0.5.2` → `^0.5.3`.
|
|
5
|
+
|
|
1
6
|
## [0.5.2] - 2026-09-08
|
|
2
7
|
|
|
3
8
|
### Fixed
|
package/README.md
CHANGED
|
@@ -162,16 +162,16 @@ printf '{"id":"1","command":"prompt","params":{"input":"Hi"}}\n' \
|
|
|
162
162
|
|
|
163
163
|
| package | version | notes |
|
|
164
164
|
| --- | --- | --- |
|
|
165
|
-
| `@arnilo/prism` | 0.5.
|
|
166
|
-
| `@arnilo/prism-coding-tools` | 0.5.
|
|
167
|
-
| `@arnilo/prism-core` | 0.5.
|
|
168
|
-
| `@arnilo/prism-providers` | 0.5.
|
|
169
|
-
| `@arnilo/prism-acp-agent` | 0.5.
|
|
170
|
-
| `@arnilo/prism-ag-ui` | 0.5.
|
|
171
|
-
| `@arnilo/prism-mcp` | 0.5.
|
|
172
|
-
| `@arnilo/prism-memory` | 0.5.
|
|
173
|
-
| `@arnilo/prism-office` | 0.5.
|
|
174
|
-
| `@arnilo/prism-web-tools` | 0.5.
|
|
165
|
+
| `@arnilo/prism` | 0.5.3 | core — runtime, CLI/RPC, templates, docs |
|
|
166
|
+
| `@arnilo/prism-coding-tools` | 0.5.3 | family — /agent, /security, /document-reader, /openapi, /computer-use-linux, /dev, /caveman, /ponytail, /impeccable subpaths |
|
|
167
|
+
| `@arnilo/prism-core` | 0.5.3 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /work, /validation subpaths |
|
|
168
|
+
| `@arnilo/prism-providers` | 0.5.3 | family — all provider adapters as `/<adapter>` subpaths |
|
|
169
|
+
| `@arnilo/prism-acp-agent` | 0.5.3 | capability — ACP adapter |
|
|
170
|
+
| `@arnilo/prism-ag-ui` | 0.5.3 | capability — AG-UI/A2A/A2UI adapter |
|
|
171
|
+
| `@arnilo/prism-mcp` | 0.5.3 | capability — MCP client/server/OAuth interop |
|
|
172
|
+
| `@arnilo/prism-memory` | 0.5.3 | capability — memory plus /rag, /compaction/*, /graft, /wiki subpaths |
|
|
173
|
+
| `@arnilo/prism-office` | 0.5.3 | capability — /documents, /sheets, /diagrams subpaths |
|
|
174
|
+
| `@arnilo/prism-web-tools` | 0.5.3 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
|
|
175
175
|
<!-- generated:package-truth:inventory end -->
|
|
176
176
|
|
|
177
177
|
## Scripts
|
package/dist/agent-loops.js
CHANGED
|
@@ -1,21 +1,11 @@
|
|
|
1
1
|
import { AgentLoopStateError } from "./contracts.js";
|
|
2
2
|
import { createId } from "./ids.js";
|
|
3
|
-
import { inputMessages } from "./input.js";
|
|
3
|
+
import { inputMessages, toToolResultMessage } from "./input.js";
|
|
4
4
|
import { artifactStructuredOutputRequest, withoutStructuredOutput } from "./structured-output.js";
|
|
5
5
|
function throwIfAborted(signal) {
|
|
6
6
|
if (signal.aborted)
|
|
7
7
|
throw signal.reason instanceof Error ? signal.reason : new Error("Agent run aborted");
|
|
8
8
|
}
|
|
9
|
-
function toolResultMessage(result) {
|
|
10
|
-
return {
|
|
11
|
-
role: "tool",
|
|
12
|
-
content: [
|
|
13
|
-
{ type: "tool_result", toolCallId: result.toolCallId, name: result.name, result: result.value, error: result.error },
|
|
14
|
-
...(result.content ?? []),
|
|
15
|
-
],
|
|
16
|
-
metadata: result.metadata,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
9
|
// ponytail: SingleShotLoop extracted bit-for-bit from the former inline turn
|
|
20
10
|
// loop in RuntimeAgentSession.run. The runtime owns provider calls, retry,
|
|
21
11
|
// abort, store, events via LoopContext; this only orchestrates turns. Phase 28
|
|
@@ -320,7 +310,7 @@ async function appendToolResultMessage(result, ctx) {
|
|
|
320
310
|
// record a phantom tool_result for a call that never dispatched.
|
|
321
311
|
if (result.metadata?.approvalPending === true)
|
|
322
312
|
return;
|
|
323
|
-
const message =
|
|
313
|
+
const message = toToolResultMessage(result);
|
|
324
314
|
ctx.history.push(message);
|
|
325
315
|
await ctx.appendMessage(message);
|
|
326
316
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { AgentRunSuspended, decisionIdentityRef, decisionScopesEqual, nestedApprovalId, nestedOutcomeToolResult, pathsEqual, } from "../../agent-approval.js";
|
|
3
3
|
import { toolElicitationRequest } from "../../agent-tool-dispatch.js";
|
|
4
4
|
import { AgentDecisionError, AgentDelegationSuspendedError, AgentRunStateError, DEFAULT_MAX_PENDING_DECISIONS, HARD_MAX_PENDING_DECISIONS, MAX_ATTRIBUTION_DEPTH, } from "../../contracts.js";
|
|
5
|
+
import { toToolResultMessage } from "../../input.js";
|
|
5
6
|
import { canonicalToolEffectJson, toolEffectArgumentsHash } from "../../tool-effects.js";
|
|
6
7
|
import { dispatchToolCall, resolveToolEffectDeclaration } from "../../tools.js";
|
|
7
8
|
import { randomId } from "../helpers.js";
|
|
@@ -192,14 +193,7 @@ export async function suspendNested(ctx, nested) {
|
|
|
192
193
|
}), interruption);
|
|
193
194
|
}
|
|
194
195
|
export async function replayToolResult(ctx, result) {
|
|
195
|
-
await ctx.session.appendMessage(
|
|
196
|
-
role: "tool",
|
|
197
|
-
content: [
|
|
198
|
-
{ type: "tool_result", toolCallId: result.toolCallId, name: result.name, result: result.value, error: result.error },
|
|
199
|
-
...(result.content ?? []),
|
|
200
|
-
],
|
|
201
|
-
metadata: result.metadata,
|
|
202
|
-
}, ctx.runId);
|
|
196
|
+
await ctx.session.appendMessage(toToolResultMessage(result), ctx.runId);
|
|
203
197
|
}
|
|
204
198
|
export async function handleNestedSignal(ctx, error) {
|
|
205
199
|
const durableOptions = ctx.session.activeDurable?.options;
|
package/dist/index.d.ts
CHANGED
|
@@ -119,5 +119,5 @@ export { trimTrailingSlashes } from "./trim-trailing-slashes.js";
|
|
|
119
119
|
export type { ResolvedUseCaseModel, ResolveUseCaseModelInput, UseCaseModelBinding, } from "./use-case-model.js";
|
|
120
120
|
export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
|
|
121
121
|
export declare const name = "prism";
|
|
122
|
-
export declare const version = "0.5.
|
|
122
|
+
export declare const version = "0.5.3";
|
|
123
123
|
export declare const description = "Agent harness for AI providers, agents, sessions, and tools.";
|
package/dist/index.js
CHANGED
|
@@ -66,6 +66,6 @@ export { createToolParameterValidator, createToolRegistry, dispatchToolCall, fil
|
|
|
66
66
|
export { trimTrailingSlashes } from "./trim-trailing-slashes.js";
|
|
67
67
|
export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
|
|
68
68
|
export const name = "prism";
|
|
69
|
-
export const version = "0.5.
|
|
69
|
+
export const version = "0.5.3";
|
|
70
70
|
export const description = "Agent harness for AI providers, agents, sessions, and tools.";
|
|
71
71
|
//# sourceMappingURL=index.js.map
|
package/dist/input.d.ts
CHANGED
|
@@ -78,3 +78,4 @@ export declare function createDefaultPromptBuilder(): DefaultPromptBuilder;
|
|
|
78
78
|
export declare function renderPromptTemplate(template: string, variables: JsonObject, options?: PromptTemplateOptions): string;
|
|
79
79
|
export declare function assembleProviderInput(options: AssembleProviderInputOptions): Promise<ProviderRequest>;
|
|
80
80
|
export declare function inputMessages(input: AgentInput): Message[];
|
|
81
|
+
export declare function toToolResultMessage(result: ToolResult): Message;
|
package/dist/input.js
CHANGED
|
@@ -304,21 +304,34 @@ async function resourceMessage(uri, context, attachment) {
|
|
|
304
304
|
const label = attachment?.name ?? uri;
|
|
305
305
|
return textMessage("user", `Resource ${label}:\n${text}`, attachmentMetadata({ ...attachment, uri }));
|
|
306
306
|
}
|
|
307
|
-
function
|
|
308
|
-
return
|
|
307
|
+
export function toToolResultMessage(result) {
|
|
308
|
+
return {
|
|
309
309
|
role: "tool",
|
|
310
310
|
content: [
|
|
311
311
|
{
|
|
312
312
|
type: "tool_result",
|
|
313
313
|
toolCallId: result.toolCallId,
|
|
314
314
|
name: result.name,
|
|
315
|
-
result: result
|
|
315
|
+
result: toolResultPayload(result),
|
|
316
316
|
error: result.error,
|
|
317
317
|
},
|
|
318
|
-
...(result.content ?? []),
|
|
318
|
+
...(result.content ?? []).filter((block) => block.type !== "text"),
|
|
319
319
|
],
|
|
320
320
|
metadata: result.metadata,
|
|
321
|
-
}
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
function toolResultPayload(result) {
|
|
324
|
+
if (result.value !== undefined)
|
|
325
|
+
return result.value;
|
|
326
|
+
const text = (result.content ?? [])
|
|
327
|
+
.filter((block) => block.type === "text")
|
|
328
|
+
.map((block) => block.text)
|
|
329
|
+
.filter(Boolean)
|
|
330
|
+
.join("\n");
|
|
331
|
+
return text.length > 0 ? text : undefined;
|
|
332
|
+
}
|
|
333
|
+
function toolResultMessages(results) {
|
|
334
|
+
return (results ?? []).map(toToolResultMessage);
|
|
322
335
|
}
|
|
323
336
|
function textMessage(role, text, metadata) {
|
|
324
337
|
return { role, content: [{ type: "text", text }], metadata };
|
|
@@ -5,5 +5,6 @@ export declare function serializeOpenAIResponsesStructuredOutput(options: Struct
|
|
|
5
5
|
export declare function applyOpenAIChatStructuredOutput(body: Record<string, unknown>, structuredOutput?: StructuredOutputOptions): void;
|
|
6
6
|
export declare function applyOpenAIResponsesStructuredOutput(body: Record<string, unknown>, structuredOutput?: StructuredOutputOptions): void;
|
|
7
7
|
export declare function serializeOpenAITool(tool: ToolDefinition): JsonObject;
|
|
8
|
+
export declare function serializeToolResultJson(message: Message): string;
|
|
8
9
|
export declare function serializeOpenAIChatMessage(message: Message, capabilities?: ModelCapabilities): JsonObject;
|
|
9
10
|
export declare function mapOpenAIChatUsage(usage: unknown): Usage | undefined;
|
|
@@ -51,13 +51,27 @@ export function serializeOpenAITool(tool) {
|
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
+
export function serializeToolResultJson(message) {
|
|
55
|
+
const result = message.content.find((part) => part.type === "tool_result");
|
|
56
|
+
if (!result)
|
|
57
|
+
return "";
|
|
58
|
+
const payload = result.result ?? result.error;
|
|
59
|
+
if (payload !== undefined)
|
|
60
|
+
return JSON.stringify(payload);
|
|
61
|
+
const text = message.content
|
|
62
|
+
.filter((part) => part.type === "text")
|
|
63
|
+
.map((part) => part.text)
|
|
64
|
+
.filter(Boolean)
|
|
65
|
+
.join("\n");
|
|
66
|
+
return JSON.stringify(text.length > 0 ? text : null);
|
|
67
|
+
}
|
|
54
68
|
export function serializeOpenAIChatMessage(message, capabilities = {}) {
|
|
55
69
|
if (message.role === "tool") {
|
|
56
70
|
const result = message.content.find((part) => part.type === "tool_result");
|
|
57
71
|
return {
|
|
58
72
|
role: "tool",
|
|
59
73
|
tool_call_id: result?.toolCallId ?? "",
|
|
60
|
-
content:
|
|
74
|
+
content: serializeToolResultJson(message),
|
|
61
75
|
};
|
|
62
76
|
}
|
|
63
77
|
if (message.role === "assistant") {
|
package/docs/0.1.0-readiness.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0.1.0 / 1.0 Readiness Gates
|
|
2
2
|
|
|
3
|
-
Status: **0.5.
|
|
3
|
+
Status: **0.5.3** is the current release line (10 active packages, family subpaths, `^0.5.3` peers); **0.3.3** was the terminal 0.3.x cut; **0.1.7** was the terminal 0.1.x baseline; **1.0** readiness remains operator-gated, not automatic.
|
|
4
4
|
|
|
5
5
|
This page distills runnable readiness gates into one command-per-gate table.
|
|
6
6
|
The **Last evidence** column records the 0.1.0-tree snapshot (plan 012 Tasks
|
|
@@ -20,7 +20,7 @@ Historical release lines (0.0.16 floor → 0.0.27 Phase 10 ACP interop → 0.1.0
|
|
|
20
20
|
keep their per-phase evidence in the pages above; this page records the 0.2.6
|
|
21
21
|
snapshot (plan 026) with the 0.1.x tables below as the historical record.
|
|
22
22
|
|
|
23
|
-
## Current line (0.5.
|
|
23
|
+
## Current line (0.5.3)
|
|
24
24
|
|
|
25
25
|
| Item | Status |
|
|
26
26
|
|---|---|
|
package/docs/index.md
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Prism is a TypeScript/Node.js agent harness. Host apps and extension packages own providers, tools, resources, credentials, storage, UI, and business behavior. Prism supplies contracts, registries, streaming events, and replaceable runtime primitives.
|
|
4
4
|
|
|
5
|
-
## Current line (0.5.
|
|
5
|
+
## Current line (0.5.3)
|
|
6
6
|
|
|
7
|
+
- **Tool result content on the wire**: content-only `ToolResult`s fold into `tool_result.result`; adapters join sibling text so the model sees tool output instead of JSON `"null"`.
|
|
7
8
|
- **Stream token coalesce**: adjacent `text`/`thinking` deltas merge on persist; replay serializers join with `""` so multi-turn tool loops do not grow interstitial newlines.
|
|
8
9
|
- **Provider request construction**: Prism stamps `sessionId`/`cacheKey` on every owned generate site, default cache breakpoints on `cache_control` / explicit-breakpoint models, and `thinkingLevel` on `AgentConfig` / `RunOptions`. Host policies are overlays. OpenCode Go missing session fails closed with `ProviderRequirementError` before fetch.
|
|
9
|
-
- **10 publishable packages**: lockstep `0.5.
|
|
10
|
+
- **10 publishable packages**: lockstep `0.5.3` (plans 055–066); family packages use explicit subpaths.
|
|
10
11
|
- **Linux desktop control**: optional `@arnilo/prism-coding-tools/computer-use-linux` wraps a host-owned `computer-use-linux` MCP binary; DeviceAdapter admission is deny-by-default and the package is omitted from umbrellas.
|
|
11
12
|
- **Coding/ACP closeouts**: `read.findText`, visible fuzzy edit outcomes and miss context, ACP editor-buffer operations, per-session spawnable coding registries, and delete/move projections.
|
|
12
13
|
|
|
@@ -163,7 +164,7 @@ Prism is a TypeScript/Node.js agent harness. Host apps and extension packages ow
|
|
|
163
164
|
- [Impeccable behavior integration](impeccable.md): optional `@arnilo/prism-coding-tools/impeccable` — host `upstreamPath` to compiled Impeccable `SKILL.md`, skill + `/impeccable` → `load_skill`; no detector CLI, no live browser, not in code/sdk/all.
|
|
164
165
|
|
|
165
166
|
## Release and install
|
|
166
|
-
- [Release and install](release-and-install.md): current **0.5.2** package graph — generated inventory in the [package-inventory section](#package-inventory) and the release page — plan 041-044 changed-package cut (progressive tool loading with `search_tools` disclosure, `@arnilo/prism-prompts` initial cut with run-ledger `promptVersion` provenance (persistence schema 9), trace-to-dataset curation in `@arnilo/prism-evals`, and composite memory-recall scoring in `@arnilo/prism-memory@0.3.2`) and independent `^0.3.0` publication; plan 050 changed-package cut (clay-integration-findings fixes + OKF v0.2 wiki bundles) and independent `^0.3.0` publication; plan 030 last-lockstep cut and independent `^0.3.0` publication; plan 029 **0.2.9** provider adoption (DeepSeek, xAI SuperGrok OAuth, ClinePass), `@arnilo/prism-impeccable`, Ponytail 4.9.0, Caveman v2.1 extras; then plan 028 **0.2.8** ACP adoption fixes; then plan 026 the fully-featured coding-agent-readiness cut: **host-selected PTY** (`pty: true` delegates only to the host `ptyBackend`, fails closed as unsupported when absent, bounded resize/TERM/attach caps), **indexed code search** (host-owned incremental index seam with explicit `indexed_literal`/`semantic` modes, literal remains the default, stale/failed/untrusted indexes fail closed `ERR_PRISM_INDEX_*`, results labeled `untrusted_index`), **coding workspaces** (`createCodingWorkspaceLifecycle`: durable CheckpointStore CAS records + LeaseStore fencing, locked worktrees, credential-free fingerprints, cleanup refusal matrix), **durable recovery** (process intent/ACP `activeRun` refs over Postgres/SQLite stores with attach-if-attested `recover()` and durable fence-checked cancellation, never fabricated exits), **patch review and diagnostics** (`createCodingPatchReviewManifest` + `assertCodingPatchAccepted` with pending/accepted/rejected/superseded bound to digest + revision + identity, opt-in LSP `syncDocument`/`diagnosticDelta`), and the **protected real coding journey** (packed consumer through real provider/Docker/Postgres/GitHub/Playwright/PTY services with retained evidence report; forge breadth GitLab/Bitbucket stays demand-gated); then plan 025 the maintainability-and-bounded-performance cut: **god-module splits** (the six remaining implementation monoliths — `src/contracts-core.ts` 1,719 L, `src/agent-session.ts` 2,049 L, `workflows/src/run.ts` 1,227 L, `server/src/handler.ts` 1,005 L, `coding-agent/src/repository.ts` 974 L, `ag-ui/src/acp/agent.ts` 836 L — split into cohesive family files behind preserved barrels, compat-preserving with zero breaking deltas, no `exports`-map subpath, `RuntimeAgentSession` kept as one class with a recorded reason), **persistence-mechanics dedup** (21 pure ownership/cursor/checkpoint/lifecycle/search helpers moved into the dependency-free `session-store-codecs`; postgres/sqlite adapters shrank 273 lines; SQL dialect stays per-adapter; no schema/shape change; cross-store conformance green), **bounded accumulation removed** (per-push `Buffer.concat` in language framing + tar parsing → chunk-array readers; framing ~100–200× faster at 4,000 chunks, tar linear at 8 MiB, caps fail-closed byte-identical; CLI `collectOutput` audited already linear), **dead-code cleanup internal-only** (62 candidates triaged: 2 internal removals + 60 allow-listed in `docs/_evidence/phase25-dead-exports-triage.md`), and **coverage close** (76 behavior-backed regressions; core 90.53/84.20/90.54 → 91.43/84.80/91.60); additive-only compat (105 helper exports), no migration; then plan 024 the package-documentation-and-compatibility-truth cut: **umbrella wording matches manifests** (`@arnilo/prism-providers` installs 11 of 14 provider adapters — Azure/Bedrock/Vertex are added separately by `prism-all`; `prism-all` installs 20 direct / 43 transitive packages and omits document-reader, OpenAPI tools, NATS, Caveman, Ponytail; membership unchanged in 0.2.x), **manifest-derived package truth** (`scripts/package-truth.mjs` → `scripts/package-truth.json` is the single source for counts, provider membership, and closures; docs literals regenerate from it and drift fails the gates), **peer-version policy Decision A** (exact `@arnilo/prism: 0.2.4` pins, atomic-upgrade rule, ERESOLVE refusal for partial upgrades, `^1.0.0` widening at 1.x), and **current-line truth** (`docs/0.1.0-readiness.md` at the 0.2.x line with 0.1.7 as the terminal 0.1.x baseline); no runtime contract delta (compat gate at 0.2.4: version literal only), no migration; then plan 023 the build-coverage-and-release-evidence-integrity cut: **build serialization** (dependency-free `scripts/with-build-lock.mjs` — one O_EXCL lockfile at `node_modules/.prism-build.lock` serializing every emit/test leaf so concurrent compilers can never expose a partial live `dist/`, stale-PID reclaim, env-overridable `PRISM_BUILD_LOCK_TIMEOUT_MS`, fail-closed; documented direct-`tsc` caveat), **corrected workspace coverage denominators** (package-local `--test-coverage-include=dist/**` so imported core `dist` no longer pollutes workspace rows — `mcp` 45.47→90.25, `rag` 19.70→94.82; evidence-based per-package thresholds in `scripts/coverage-thresholds.json` with `protectedException` for durable-leg packages shown separately, machine-readable `scripts/coverage-summary.json`), **machine-auditable release skip manifest** (`scripts/release-skip-manifest.mjs` → `scripts/release-evidence.json`: every surface recorded `pass`/`skip`/`blocked`/`protected` with reason and required env; the 33 protected/live skips named; a required surface without evidence records `blocked` and fails the release gate fail-closed — missing credentials/services can never convert into a green release), and **stabilized quality gates** (Biome 2.x `preset` config migration with zero lint diagnostics, the racy 150ms MCP bridge timing assert replaced by a deterministic barrier, load-sensitive guards carry documented `ponytail:` ceilings, machine-readable `lint-report.sarif` + `unused-report.json` retained by CI); no runtime contract delta (compat gate at 0.2.3: version literal only), no migration; then plan 022 the concurrent-state-and-durability-integrity cut: atomic model-budget reservation (`ModelRouterStateStore.reserveBudget`/`commitBudget`/`releaseBudget` with fencing tokens, `reservationTtlMs` expiry and unknown-usage reconciliation, rate/budget key-map caps with LRU eviction that never drops a held reservation), atomic conversation metadata (`SessionRecord.version` + `appendSession` `expectedVersion` CAS across Postgres/SQLite — create-only `0`, exact-version `N>0`, legacy last-write-wins when omitted; `SessionMetadataConflictError` `metadata_conflict` with versions only, HTTP 409; concurrent create/branch/archive single-statement with branch caps inside the CAS, archive wins, deleted rows never resurrect), single-consumer `EventMultiplexer` (`EventMultiplexerError` `ERR_PRISM_EVENT_MULTIPLEXER_SINGLE_CONSUMER` instead of silent queue sharing), restart-stable NATS durable consumer identity (`prism_<hmac16>` with no random suffix — crash-resumed subscribe continues from the last ack, orphaned 0.2.1 consumers reclaimed on clean stop), and bounded non-durable active-run registries (sweep + fail-closed 512 cap `ERR_PRISM_WORKFLOW_RUN_REGISTRY_OVERFLOW`); new regression surface `scripts/phase22-security.test.mjs` (4 blockers + gate accounting over built public entrypoints) + packed plain-JS `security22.mjs` consumer + the `@arnilo/prism/testing/state-concurrency-conformance` harness (7 probes across memory/Postgres/SQLite/NATS legs, no timing-only sleeps) + the `scripts/phase22-conformance.test.mjs` gate; additive-only compat (new exports only, no removals); forward-only migrations 008 (`prism_sessions.version`) and 003 (`prism_model_router_budgets.reservations`); migration `0.2.1 → 0.2.2`; then plan 021 the provider-completion-and-outbound-trust-boundaries cut: strict stream completion is the shared OpenAI-compatible default (truncated streams fail `incomplete_delta`, explicit `strictCompletion: false` opt-out), bounded success bodies via `readBoundedResponseJson` on all discovery/quota/embeddings/upload/OAuth JSON endpoints (65,536-byte ceiling, depth/property/shape caps), DNS-pinned OIDC JWKS/OPA/content fetches through the core `pinnedFetch` primitive with 3xx redirects rejected outright (private/metadata answers fail closed `ssrf_denied`), shared bounded OAuth device/token polling (`pollDeviceCodeToken`) across provider-openai and credentials-node, and the four edge fixes (Azure/Vertex credential-once, Bedrock duplicate-case/repeated-query SigV4 canonicalization, OpenAI upload failed-DELETE retention, cache `__overflow__` tokens-only); public-entrypoint threat-suite `scripts/phase21-security.test.mjs` + packed plain-JS consumer; additive-only compat (MCP transport helpers re-exported from core, no removals); migration `0.2.0 → 0.2.1`; then plan 020 the fail-closed runtime-and-sandbox-security cut on the 0.2.x review-remediation line: durable-resume decision validation in core (`assertValidAgentRunResume` — unknown decisions/malformed batches fail closed with `ERR_PRISM_DECISION_*` before any state claim, checkpoint write, or tool execution; server parser remains defense in depth), isolated work-tool subprocess environments (`@arnilo/prism-work-tools` — fixed base allow-list + explicit env + forced HOME/telemetry + late-bound per-identity tokens, 64-name/64-KiB caps, absolute binary/configDir, linear output capture), and explicit sandbox capabilities (`@arnilo/prism-coding-security` — `SandboxAdapter.capabilities` with omission-is-false fail-closed resolution, `SandboxCodingComposition.capabilities` from verified wiring, `containmentClaim` deprecated as the conservative projection; Docker reports only verified controls, native reports filesystem/process/privilege `false`); public-entrypoint security conformance (`scripts/phase20-security.test.mjs`, wired into `security:threat-suites`), packed plain-JS consumer regressions, and the sandbox-browser workflow's fail-loud Docker/native capability evidence gate — 0.2.0 never ships while a blocker is skipped; migration and rollback notes in `docs/migration.md` `0.1.7 → 0.2.0`, store-compatible with 0.1.7 in both directions; 0.1.7 was the performance-and-DX patch — dependency-free `createCacheTelemetry()` per-provider/model cache hit/miss aggregator (bounded cardinality with `__overflow__`, token counters/rates only, host-activated), host-configurable `ModelRouterSelectionPolicy` on `createModelRouter` with the reference `createCostLatencySelection` (ModelCost rank then in-memory latency EMA, default ordered behavior byte-identical), `prism providers add <name>` OpenAI-compatible provider scaffold (manifest/provider/models/cache/conformance test/docs stub, npm-name + traversal + symlink-escape validation, placeholders only), and the async `AgUiProjection` verification closeout (plan 009 Task 15 evidence recorded, no new code); plan 017 the documented breaking cut — deprecated-option removal with `docs/migration.md` `0.1.4 → 0.1.5` section and reviewed compat-baseline regeneration via `--allow-break` then `--update-baseline`: the inert provider request knobs, `RunOptions.maxToolRounds`, observational-memory flat settings keys + top-level worker aliases, `ReadToolOptions.autoResizeImages`, `INIT_PROVIDERS`; all removals fail closed naming their replacement; plan 016 internal god-module split — `agents.ts`/`contracts.ts` reorganized behind barrel re-exports with a byte-identical public entry surface, measured tree-shaking improvement in `scripts/phase16-baseline.json`, and additive `@arnilo/prism-browser` Chrome DevTools Protocol capabilities — `browser_evaluate`/`browser_observe` and `block_urls`/`unblock_urls`/`throttle`/`emulate` act actions; plan 015 dead-code and deprecation hygiene on the frozen 0.1.x line — parameterized benchmark runner `scripts/benchmark.mjs` absorbing the per-version runners, archived review-coverage evidence in `docs/_evidence/`, non-blocking unused-code sweep `npm run sweep:unused`, opt-in checkpoint persistence for loaded-skill names and read-path sets; plan 014 Alibaba provider enrichment — embeddings, video input, verified compatible-mode surface decision table; plan 013 post-release hardening — build single-flight, MCP SSE relay test, combined coverage summary, canonical manifest-count narrative, ACP modes/config persistence guidance; Phase 12 release-candidate hardening; plan 012 — freeze manifest, compatibility matrix, upgrade matrix, packed-install e2e journeys, restart-recovery evidence, capacity envelopes, security policy), exact-peer/install/tarball rules, deterministic resumable publication and publish dry-run, frozen 0.1.x compatibility and support matrix (Node/PostgreSQL/platform/provider/protocol pins and unsupported combinations, machine-checked against `scripts/phase12-freeze-manifest.json`), protected PostgreSQL gate, pinned supply-chain gates, offline tests, the 0.0.15 provider/AI-SDK/RAG/memory protected live-canary matrix, and sandbox-browser Docker/Playwright gates. 0.2.6 (plan 026 Task 7) adds the protected coding journey: `scripts/phase26-coding-journey.test.mjs` runs a packed consumer through real provider calls, a digest-pinned Docker sandbox, the durable Postgres worktree lifecycle, provider-driven ACP edits with policy approval, named checks with `diagnosticDelta`, patch review over the server ArtifactService, cross-replica process recovery, durable cancellation, real GitHub PR push/reconcile/cleanup, host Playwright inspection, and the host PTY adapter (frozen profile) — the retained `scripts/phase26-coding-journey-report.json` gates release evidence (pass/blocked/protected, never a passing skip).
|
|
167
|
+
- [Release and install](release-and-install.md): current **0.5.3** package graph — generated inventory in the [package-inventory section](#package-inventory) and the release page — plan 041-044 changed-package cut (progressive tool loading with `search_tools` disclosure, `@arnilo/prism-prompts` initial cut with run-ledger `promptVersion` provenance (persistence schema 9), trace-to-dataset curation in `@arnilo/prism-evals`, and composite memory-recall scoring in `@arnilo/prism-memory@0.3.2`) and independent `^0.3.0` publication; plan 050 changed-package cut (clay-integration-findings fixes + OKF v0.2 wiki bundles) and independent `^0.3.0` publication; plan 030 last-lockstep cut and independent `^0.3.0` publication; plan 029 **0.2.9** provider adoption (DeepSeek, xAI SuperGrok OAuth, ClinePass), `@arnilo/prism-impeccable`, Ponytail 4.9.0, Caveman v2.1 extras; then plan 028 **0.2.8** ACP adoption fixes; then plan 026 the fully-featured coding-agent-readiness cut: **host-selected PTY** (`pty: true` delegates only to the host `ptyBackend`, fails closed as unsupported when absent, bounded resize/TERM/attach caps), **indexed code search** (host-owned incremental index seam with explicit `indexed_literal`/`semantic` modes, literal remains the default, stale/failed/untrusted indexes fail closed `ERR_PRISM_INDEX_*`, results labeled `untrusted_index`), **coding workspaces** (`createCodingWorkspaceLifecycle`: durable CheckpointStore CAS records + LeaseStore fencing, locked worktrees, credential-free fingerprints, cleanup refusal matrix), **durable recovery** (process intent/ACP `activeRun` refs over Postgres/SQLite stores with attach-if-attested `recover()` and durable fence-checked cancellation, never fabricated exits), **patch review and diagnostics** (`createCodingPatchReviewManifest` + `assertCodingPatchAccepted` with pending/accepted/rejected/superseded bound to digest + revision + identity, opt-in LSP `syncDocument`/`diagnosticDelta`), and the **protected real coding journey** (packed consumer through real provider/Docker/Postgres/GitHub/Playwright/PTY services with retained evidence report; forge breadth GitLab/Bitbucket stays demand-gated); then plan 025 the maintainability-and-bounded-performance cut: **god-module splits** (the six remaining implementation monoliths — `src/contracts-core.ts` 1,719 L, `src/agent-session.ts` 2,049 L, `workflows/src/run.ts` 1,227 L, `server/src/handler.ts` 1,005 L, `coding-agent/src/repository.ts` 974 L, `ag-ui/src/acp/agent.ts` 836 L — split into cohesive family files behind preserved barrels, compat-preserving with zero breaking deltas, no `exports`-map subpath, `RuntimeAgentSession` kept as one class with a recorded reason), **persistence-mechanics dedup** (21 pure ownership/cursor/checkpoint/lifecycle/search helpers moved into the dependency-free `session-store-codecs`; postgres/sqlite adapters shrank 273 lines; SQL dialect stays per-adapter; no schema/shape change; cross-store conformance green), **bounded accumulation removed** (per-push `Buffer.concat` in language framing + tar parsing → chunk-array readers; framing ~100–200× faster at 4,000 chunks, tar linear at 8 MiB, caps fail-closed byte-identical; CLI `collectOutput` audited already linear), **dead-code cleanup internal-only** (62 candidates triaged: 2 internal removals + 60 allow-listed in `docs/_evidence/phase25-dead-exports-triage.md`), and **coverage close** (76 behavior-backed regressions; core 90.53/84.20/90.54 → 91.43/84.80/91.60); additive-only compat (105 helper exports), no migration; then plan 024 the package-documentation-and-compatibility-truth cut: **umbrella wording matches manifests** (`@arnilo/prism-providers` installs 11 of 14 provider adapters — Azure/Bedrock/Vertex are added separately by `prism-all`; `prism-all` installs 20 direct / 43 transitive packages and omits document-reader, OpenAPI tools, NATS, Caveman, Ponytail; membership unchanged in 0.2.x), **manifest-derived package truth** (`scripts/package-truth.mjs` → `scripts/package-truth.json` is the single source for counts, provider membership, and closures; docs literals regenerate from it and drift fails the gates), **peer-version policy Decision A** (exact `@arnilo/prism: 0.2.4` pins, atomic-upgrade rule, ERESOLVE refusal for partial upgrades, `^1.0.0` widening at 1.x), and **current-line truth** (`docs/0.1.0-readiness.md` at the 0.2.x line with 0.1.7 as the terminal 0.1.x baseline); no runtime contract delta (compat gate at 0.2.4: version literal only), no migration; then plan 023 the build-coverage-and-release-evidence-integrity cut: **build serialization** (dependency-free `scripts/with-build-lock.mjs` — one O_EXCL lockfile at `node_modules/.prism-build.lock` serializing every emit/test leaf so concurrent compilers can never expose a partial live `dist/`, stale-PID reclaim, env-overridable `PRISM_BUILD_LOCK_TIMEOUT_MS`, fail-closed; documented direct-`tsc` caveat), **corrected workspace coverage denominators** (package-local `--test-coverage-include=dist/**` so imported core `dist` no longer pollutes workspace rows — `mcp` 45.47→90.25, `rag` 19.70→94.82; evidence-based per-package thresholds in `scripts/coverage-thresholds.json` with `protectedException` for durable-leg packages shown separately, machine-readable `scripts/coverage-summary.json`), **machine-auditable release skip manifest** (`scripts/release-skip-manifest.mjs` → `scripts/release-evidence.json`: every surface recorded `pass`/`skip`/`blocked`/`protected` with reason and required env; the 33 protected/live skips named; a required surface without evidence records `blocked` and fails the release gate fail-closed — missing credentials/services can never convert into a green release), and **stabilized quality gates** (Biome 2.x `preset` config migration with zero lint diagnostics, the racy 150ms MCP bridge timing assert replaced by a deterministic barrier, load-sensitive guards carry documented `ponytail:` ceilings, machine-readable `lint-report.sarif` + `unused-report.json` retained by CI); no runtime contract delta (compat gate at 0.2.3: version literal only), no migration; then plan 022 the concurrent-state-and-durability-integrity cut: atomic model-budget reservation (`ModelRouterStateStore.reserveBudget`/`commitBudget`/`releaseBudget` with fencing tokens, `reservationTtlMs` expiry and unknown-usage reconciliation, rate/budget key-map caps with LRU eviction that never drops a held reservation), atomic conversation metadata (`SessionRecord.version` + `appendSession` `expectedVersion` CAS across Postgres/SQLite — create-only `0`, exact-version `N>0`, legacy last-write-wins when omitted; `SessionMetadataConflictError` `metadata_conflict` with versions only, HTTP 409; concurrent create/branch/archive single-statement with branch caps inside the CAS, archive wins, deleted rows never resurrect), single-consumer `EventMultiplexer` (`EventMultiplexerError` `ERR_PRISM_EVENT_MULTIPLEXER_SINGLE_CONSUMER` instead of silent queue sharing), restart-stable NATS durable consumer identity (`prism_<hmac16>` with no random suffix — crash-resumed subscribe continues from the last ack, orphaned 0.2.1 consumers reclaimed on clean stop), and bounded non-durable active-run registries (sweep + fail-closed 512 cap `ERR_PRISM_WORKFLOW_RUN_REGISTRY_OVERFLOW`); new regression surface `scripts/phase22-security.test.mjs` (4 blockers + gate accounting over built public entrypoints) + packed plain-JS `security22.mjs` consumer + the `@arnilo/prism/testing/state-concurrency-conformance` harness (7 probes across memory/Postgres/SQLite/NATS legs, no timing-only sleeps) + the `scripts/phase22-conformance.test.mjs` gate; additive-only compat (new exports only, no removals); forward-only migrations 008 (`prism_sessions.version`) and 003 (`prism_model_router_budgets.reservations`); migration `0.2.1 → 0.2.2`; then plan 021 the provider-completion-and-outbound-trust-boundaries cut: strict stream completion is the shared OpenAI-compatible default (truncated streams fail `incomplete_delta`, explicit `strictCompletion: false` opt-out), bounded success bodies via `readBoundedResponseJson` on all discovery/quota/embeddings/upload/OAuth JSON endpoints (65,536-byte ceiling, depth/property/shape caps), DNS-pinned OIDC JWKS/OPA/content fetches through the core `pinnedFetch` primitive with 3xx redirects rejected outright (private/metadata answers fail closed `ssrf_denied`), shared bounded OAuth device/token polling (`pollDeviceCodeToken`) across provider-openai and credentials-node, and the four edge fixes (Azure/Vertex credential-once, Bedrock duplicate-case/repeated-query SigV4 canonicalization, OpenAI upload failed-DELETE retention, cache `__overflow__` tokens-only); public-entrypoint threat-suite `scripts/phase21-security.test.mjs` + packed plain-JS consumer; additive-only compat (MCP transport helpers re-exported from core, no removals); migration `0.2.0 → 0.2.1`; then plan 020 the fail-closed runtime-and-sandbox-security cut on the 0.2.x review-remediation line: durable-resume decision validation in core (`assertValidAgentRunResume` — unknown decisions/malformed batches fail closed with `ERR_PRISM_DECISION_*` before any state claim, checkpoint write, or tool execution; server parser remains defense in depth), isolated work-tool subprocess environments (`@arnilo/prism-work-tools` — fixed base allow-list + explicit env + forced HOME/telemetry + late-bound per-identity tokens, 64-name/64-KiB caps, absolute binary/configDir, linear output capture), and explicit sandbox capabilities (`@arnilo/prism-coding-security` — `SandboxAdapter.capabilities` with omission-is-false fail-closed resolution, `SandboxCodingComposition.capabilities` from verified wiring, `containmentClaim` deprecated as the conservative projection; Docker reports only verified controls, native reports filesystem/process/privilege `false`); public-entrypoint security conformance (`scripts/phase20-security.test.mjs`, wired into `security:threat-suites`), packed plain-JS consumer regressions, and the sandbox-browser workflow's fail-loud Docker/native capability evidence gate — 0.2.0 never ships while a blocker is skipped; migration and rollback notes in `docs/migration.md` `0.1.7 → 0.2.0`, store-compatible with 0.1.7 in both directions; 0.1.7 was the performance-and-DX patch — dependency-free `createCacheTelemetry()` per-provider/model cache hit/miss aggregator (bounded cardinality with `__overflow__`, token counters/rates only, host-activated), host-configurable `ModelRouterSelectionPolicy` on `createModelRouter` with the reference `createCostLatencySelection` (ModelCost rank then in-memory latency EMA, default ordered behavior byte-identical), `prism providers add <name>` OpenAI-compatible provider scaffold (manifest/provider/models/cache/conformance test/docs stub, npm-name + traversal + symlink-escape validation, placeholders only), and the async `AgUiProjection` verification closeout (plan 009 Task 15 evidence recorded, no new code); plan 017 the documented breaking cut — deprecated-option removal with `docs/migration.md` `0.1.4 → 0.1.5` section and reviewed compat-baseline regeneration via `--allow-break` then `--update-baseline`: the inert provider request knobs, `RunOptions.maxToolRounds`, observational-memory flat settings keys + top-level worker aliases, `ReadToolOptions.autoResizeImages`, `INIT_PROVIDERS`; all removals fail closed naming their replacement; plan 016 internal god-module split — `agents.ts`/`contracts.ts` reorganized behind barrel re-exports with a byte-identical public entry surface, measured tree-shaking improvement in `scripts/phase16-baseline.json`, and additive `@arnilo/prism-browser` Chrome DevTools Protocol capabilities — `browser_evaluate`/`browser_observe` and `block_urls`/`unblock_urls`/`throttle`/`emulate` act actions; plan 015 dead-code and deprecation hygiene on the frozen 0.1.x line — parameterized benchmark runner `scripts/benchmark.mjs` absorbing the per-version runners, archived review-coverage evidence in `docs/_evidence/`, non-blocking unused-code sweep `npm run sweep:unused`, opt-in checkpoint persistence for loaded-skill names and read-path sets; plan 014 Alibaba provider enrichment — embeddings, video input, verified compatible-mode surface decision table; plan 013 post-release hardening — build single-flight, MCP SSE relay test, combined coverage summary, canonical manifest-count narrative, ACP modes/config persistence guidance; Phase 12 release-candidate hardening; plan 012 — freeze manifest, compatibility matrix, upgrade matrix, packed-install e2e journeys, restart-recovery evidence, capacity envelopes, security policy), exact-peer/install/tarball rules, deterministic resumable publication and publish dry-run, frozen 0.1.x compatibility and support matrix (Node/PostgreSQL/platform/provider/protocol pins and unsupported combinations, machine-checked against `scripts/phase12-freeze-manifest.json`), protected PostgreSQL gate, pinned supply-chain gates, offline tests, the 0.0.15 provider/AI-SDK/RAG/memory protected live-canary matrix, and sandbox-browser Docker/Playwright gates. 0.2.6 (plan 026 Task 7) adds the protected coding journey: `scripts/phase26-coding-journey.test.mjs` runs a packed consumer through real provider calls, a digest-pinned Docker sandbox, the durable Postgres worktree lifecycle, provider-driven ACP edits with policy approval, named checks with `diagnosticDelta`, patch review over the server ArtifactService, cross-replica process recovery, durable cancellation, real GitHub PR push/reconcile/cleanup, host Playwright inspection, and the host PTY adapter (frozen profile) — the retained `scripts/phase26-coding-journey-report.json` gates release evidence (pass/blocked/protected, never a passing skip).
|
|
167
168
|
- [Migrate 0.4 to 0.5](migrate-to-0.5.md): the complete 0.5.x migration guide (plans 055–066) — 0.5.0 lockstep plus **0.5.1** additive request construction (`thinkingLevel` field, kernel session/cache defaults, OpenCode Go `ProviderRequirementError`) — plus rollback.
|
|
168
169
|
- [Migrate legacy 0.3 packages to 0.4](migrate-to-0.4.md): complete breaking package-reorganization guide — all retired package/import mappings, profile replacements, optional peers and host binaries, security boundaries, rollback, and npm `legacy`/deprecation lifecycle.
|
|
169
170
|
- [0.1.0 / 1.0 readiness gates](0.1.0-readiness.md): command-per-gate 1.0 readiness table — frozen API surface + compat gate, migration/docs tripwires, budget table, live-suite matrix, security matrix, current-line status (**0.2.5** current line; 0.1.7 terminal 0.1.x baseline), signed-publication/live-canary prerequisites for 1.0, and Phase 12 demand-evidence entry criteria.
|
|
@@ -179,15 +180,15 @@ The generated inventory below derives from [`scripts/package-truth.json`](../scr
|
|
|
179
180
|
|
|
180
181
|
| package | version | notes |
|
|
181
182
|
| --- | --- | --- |
|
|
182
|
-
| `@arnilo/prism` | 0.5.
|
|
183
|
-
| `@arnilo/prism-coding-tools` | 0.5.
|
|
184
|
-
| `@arnilo/prism-core` | 0.5.
|
|
185
|
-
| `@arnilo/prism-providers` | 0.5.
|
|
186
|
-
| `@arnilo/prism-acp-agent` | 0.5.
|
|
187
|
-
| `@arnilo/prism-ag-ui` | 0.5.
|
|
188
|
-
| `@arnilo/prism-mcp` | 0.5.
|
|
189
|
-
| `@arnilo/prism-memory` | 0.5.
|
|
190
|
-
| `@arnilo/prism-office` | 0.5.
|
|
191
|
-
| `@arnilo/prism-web-tools` | 0.5.
|
|
183
|
+
| `@arnilo/prism` | 0.5.3 | core — runtime, CLI/RPC, templates, docs |
|
|
184
|
+
| `@arnilo/prism-coding-tools` | 0.5.3 | family — /agent, /security, /document-reader, /openapi, /computer-use-linux, /dev, /caveman, /ponytail, /impeccable subpaths |
|
|
185
|
+
| `@arnilo/prism-core` | 0.5.3 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /work, /validation subpaths |
|
|
186
|
+
| `@arnilo/prism-providers` | 0.5.3 | family — all provider adapters as `/<adapter>` subpaths |
|
|
187
|
+
| `@arnilo/prism-acp-agent` | 0.5.3 | capability — ACP adapter |
|
|
188
|
+
| `@arnilo/prism-ag-ui` | 0.5.3 | capability — AG-UI/A2A/A2UI adapter |
|
|
189
|
+
| `@arnilo/prism-mcp` | 0.5.3 | capability — MCP client/server/OAuth interop |
|
|
190
|
+
| `@arnilo/prism-memory` | 0.5.3 | capability — memory plus /rag, /compaction/*, /graft, /wiki subpaths |
|
|
191
|
+
| `@arnilo/prism-office` | 0.5.3 | capability — /documents, /sheets, /diagrams subpaths |
|
|
192
|
+
| `@arnilo/prism-web-tools` | 0.5.3 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
|
|
192
193
|
<!-- generated:package-truth:inventory end -->
|
|
193
194
|
|
package/docs/migrate-to-0.5.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Migrate Prism 0.4 to 0.5
|
|
2
2
|
|
|
3
|
-
> **Status: 0.5.
|
|
3
|
+
> **Status: 0.5.3** (tool-result content fold, additive on the 2026-09-08 `v0.5.2` tag). 0.5.0 covers plans 055–065. 0.5.1 adds kernel provider-request construction. 0.5.2 coalesces stream tokens.
|
|
4
4
|
|
|
5
5
|
## What changes
|
|
6
6
|
|
package/docs/migration.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Migration guide
|
|
2
2
|
|
|
3
|
+
## 0.5.2 → 0.5.3 (additive)
|
|
4
|
+
|
|
5
|
+
Content-only tool results fold onto `tool_result.result` at construction. Serializers join sibling `type:text` blocks when `result` is missing, so coding tools that return `content` (not `value`) no longer reach the model as JSON `"null"`. No import, store, or peer-range break; bump `@arnilo/prism*` to `^0.5.3`.
|
|
6
|
+
|
|
3
7
|
## 0.5.1 → 0.5.2 (additive)
|
|
4
8
|
|
|
5
9
|
Stream tokens coalesce on persist (adjacent `text`/`thinking` deltas merge). Replay serializers join those parts with an empty string instead of a newline. No import, store, or peer-range break; bump `@arnilo/prism*` to `^0.5.2`.
|
|
@@ -25,26 +25,26 @@ Do not use provider packages as a package manager, credential store, env loader,
|
|
|
25
25
|
|
|
26
26
|
| adapter package | version |
|
|
27
27
|
| --- | --- |
|
|
28
|
-
| `@arnilo/prism-providers/ai-sdk` | 0.5.
|
|
29
|
-
| `@arnilo/prism-providers/alibaba` | 0.5.
|
|
30
|
-
| `@arnilo/prism-providers/anthropic` | 0.5.
|
|
31
|
-
| `@arnilo/prism-providers/azure` | 0.5.
|
|
32
|
-
| `@arnilo/prism-providers/bedrock` | 0.5.
|
|
33
|
-
| `@arnilo/prism-providers/clinepass` | 0.5.
|
|
34
|
-
| `@arnilo/prism-providers/commandcode` | 0.5.
|
|
35
|
-
| `@arnilo/prism-providers/deepseek` | 0.5.
|
|
36
|
-
| `@arnilo/prism-providers/google` | 0.5.
|
|
37
|
-
| `@arnilo/prism-providers/hyper` | 0.5.
|
|
38
|
-
| `@arnilo/prism-providers/kimi` | 0.5.
|
|
39
|
-
| `@arnilo/prism-providers/model-discovery` | 0.5.
|
|
40
|
-
| `@arnilo/prism-providers/neuralwatt` | 0.5.
|
|
41
|
-
| `@arnilo/prism-providers/ollama` | 0.5.
|
|
42
|
-
| `@arnilo/prism-providers/openai` | 0.5.
|
|
43
|
-
| `@arnilo/prism-providers/opencode-go` | 0.5.
|
|
44
|
-
| `@arnilo/prism-providers/openrouter` | 0.5.
|
|
45
|
-
| `@arnilo/prism-providers/vertex` | 0.5.
|
|
46
|
-
| `@arnilo/prism-providers/xai` | 0.5.
|
|
47
|
-
| `@arnilo/prism-providers/zai` | 0.5.
|
|
28
|
+
| `@arnilo/prism-providers/ai-sdk` | 0.5.3 |
|
|
29
|
+
| `@arnilo/prism-providers/alibaba` | 0.5.3 |
|
|
30
|
+
| `@arnilo/prism-providers/anthropic` | 0.5.3 |
|
|
31
|
+
| `@arnilo/prism-providers/azure` | 0.5.3 |
|
|
32
|
+
| `@arnilo/prism-providers/bedrock` | 0.5.3 |
|
|
33
|
+
| `@arnilo/prism-providers/clinepass` | 0.5.3 |
|
|
34
|
+
| `@arnilo/prism-providers/commandcode` | 0.5.3 |
|
|
35
|
+
| `@arnilo/prism-providers/deepseek` | 0.5.3 |
|
|
36
|
+
| `@arnilo/prism-providers/google` | 0.5.3 |
|
|
37
|
+
| `@arnilo/prism-providers/hyper` | 0.5.3 |
|
|
38
|
+
| `@arnilo/prism-providers/kimi` | 0.5.3 |
|
|
39
|
+
| `@arnilo/prism-providers/model-discovery` | 0.5.3 |
|
|
40
|
+
| `@arnilo/prism-providers/neuralwatt` | 0.5.3 |
|
|
41
|
+
| `@arnilo/prism-providers/ollama` | 0.5.3 |
|
|
42
|
+
| `@arnilo/prism-providers/openai` | 0.5.3 |
|
|
43
|
+
| `@arnilo/prism-providers/opencode-go` | 0.5.3 |
|
|
44
|
+
| `@arnilo/prism-providers/openrouter` | 0.5.3 |
|
|
45
|
+
| `@arnilo/prism-providers/vertex` | 0.5.3 |
|
|
46
|
+
| `@arnilo/prism-providers/xai` | 0.5.3 |
|
|
47
|
+
| `@arnilo/prism-providers/zai` | 0.5.3 |
|
|
48
48
|
<!-- generated:package-truth:providers end -->
|
|
49
49
|
|
|
50
50
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## What it does
|
|
4
4
|
|
|
5
|
-
Prism's current **0.5.x** line has **10 publishable manifests**: the root `@arnilo/prism` core package plus **9 workspace packages** — **19 provider adapters** (19 provider adapter subpaths inside the `@arnilo/prism-providers` family), 3 `prism-*` family/profile packages, and 6 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.5.
|
|
5
|
+
Prism's current **0.5.x** line has **10 publishable manifests**: the root `@arnilo/prism` core package plus **9 workspace packages** — **19 provider adapters** (19 provider adapter subpaths inside the `@arnilo/prism-providers` family), 3 `prism-*` family/profile packages, and 6 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.5.3` 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`](./0.1.0-readiness.md).
|
|
6
6
|
|
|
7
7
|
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.
|
|
8
8
|
|
|
@@ -11,16 +11,16 @@ Core `@arnilo/prism` ships runtime, CLI, templates, and docs. Every code package
|
|
|
11
11
|
|
|
12
12
|
| package | version | notes |
|
|
13
13
|
| --- | --- | --- |
|
|
14
|
-
| `@arnilo/prism` | 0.5.
|
|
15
|
-
| `@arnilo/prism-coding-tools` | 0.5.
|
|
16
|
-
| `@arnilo/prism-core` | 0.5.
|
|
17
|
-
| `@arnilo/prism-providers` | 0.5.
|
|
18
|
-
| `@arnilo/prism-acp-agent` | 0.5.
|
|
19
|
-
| `@arnilo/prism-ag-ui` | 0.5.
|
|
20
|
-
| `@arnilo/prism-mcp` | 0.5.
|
|
21
|
-
| `@arnilo/prism-memory` | 0.5.
|
|
22
|
-
| `@arnilo/prism-office` | 0.5.
|
|
23
|
-
| `@arnilo/prism-web-tools` | 0.5.
|
|
14
|
+
| `@arnilo/prism` | 0.5.3 | core — runtime, CLI/RPC, templates, docs |
|
|
15
|
+
| `@arnilo/prism-coding-tools` | 0.5.3 | family — /agent, /security, /document-reader, /openapi, /computer-use-linux, /dev, /caveman, /ponytail, /impeccable subpaths |
|
|
16
|
+
| `@arnilo/prism-core` | 0.5.3 | family — /runtime, /sessions, /governance, /credentials, /enterprise, /work, /validation subpaths |
|
|
17
|
+
| `@arnilo/prism-providers` | 0.5.3 | family — all provider adapters as `/<adapter>` subpaths |
|
|
18
|
+
| `@arnilo/prism-acp-agent` | 0.5.3 | capability — ACP adapter |
|
|
19
|
+
| `@arnilo/prism-ag-ui` | 0.5.3 | capability — AG-UI/A2A/A2UI adapter |
|
|
20
|
+
| `@arnilo/prism-mcp` | 0.5.3 | capability — MCP client/server/OAuth interop |
|
|
21
|
+
| `@arnilo/prism-memory` | 0.5.3 | capability — memory plus /rag, /compaction/*, /graft, /wiki subpaths |
|
|
22
|
+
| `@arnilo/prism-office` | 0.5.3 | capability — /documents, /sheets, /diagrams subpaths |
|
|
23
|
+
| `@arnilo/prism-web-tools` | 0.5.3 | capability — Brave/Exa/Firecrawl plus peer-gated /browser and /obscura subpaths |
|
|
24
24
|
<!-- generated:package-truth:inventory end -->
|
|
25
25
|
|
|
26
26
|
|
|
@@ -29,26 +29,26 @@ Core `@arnilo/prism` ships runtime, CLI, templates, and docs. Every code package
|
|
|
29
29
|
|
|
30
30
|
| adapter package | version |
|
|
31
31
|
| --- | --- |
|
|
32
|
-
| `@arnilo/prism-providers/ai-sdk` | 0.5.
|
|
33
|
-
| `@arnilo/prism-providers/alibaba` | 0.5.
|
|
34
|
-
| `@arnilo/prism-providers/anthropic` | 0.5.
|
|
35
|
-
| `@arnilo/prism-providers/azure` | 0.5.
|
|
36
|
-
| `@arnilo/prism-providers/bedrock` | 0.5.
|
|
37
|
-
| `@arnilo/prism-providers/clinepass` | 0.5.
|
|
38
|
-
| `@arnilo/prism-providers/commandcode` | 0.5.
|
|
39
|
-
| `@arnilo/prism-providers/deepseek` | 0.5.
|
|
40
|
-
| `@arnilo/prism-providers/google` | 0.5.
|
|
41
|
-
| `@arnilo/prism-providers/hyper` | 0.5.
|
|
42
|
-
| `@arnilo/prism-providers/kimi` | 0.5.
|
|
43
|
-
| `@arnilo/prism-providers/model-discovery` | 0.5.
|
|
44
|
-
| `@arnilo/prism-providers/neuralwatt` | 0.5.
|
|
45
|
-
| `@arnilo/prism-providers/ollama` | 0.5.
|
|
46
|
-
| `@arnilo/prism-providers/openai` | 0.5.
|
|
47
|
-
| `@arnilo/prism-providers/opencode-go` | 0.5.
|
|
48
|
-
| `@arnilo/prism-providers/openrouter` | 0.5.
|
|
49
|
-
| `@arnilo/prism-providers/vertex` | 0.5.
|
|
50
|
-
| `@arnilo/prism-providers/xai` | 0.5.
|
|
51
|
-
| `@arnilo/prism-providers/zai` | 0.5.
|
|
32
|
+
| `@arnilo/prism-providers/ai-sdk` | 0.5.3 |
|
|
33
|
+
| `@arnilo/prism-providers/alibaba` | 0.5.3 |
|
|
34
|
+
| `@arnilo/prism-providers/anthropic` | 0.5.3 |
|
|
35
|
+
| `@arnilo/prism-providers/azure` | 0.5.3 |
|
|
36
|
+
| `@arnilo/prism-providers/bedrock` | 0.5.3 |
|
|
37
|
+
| `@arnilo/prism-providers/clinepass` | 0.5.3 |
|
|
38
|
+
| `@arnilo/prism-providers/commandcode` | 0.5.3 |
|
|
39
|
+
| `@arnilo/prism-providers/deepseek` | 0.5.3 |
|
|
40
|
+
| `@arnilo/prism-providers/google` | 0.5.3 |
|
|
41
|
+
| `@arnilo/prism-providers/hyper` | 0.5.3 |
|
|
42
|
+
| `@arnilo/prism-providers/kimi` | 0.5.3 |
|
|
43
|
+
| `@arnilo/prism-providers/model-discovery` | 0.5.3 |
|
|
44
|
+
| `@arnilo/prism-providers/neuralwatt` | 0.5.3 |
|
|
45
|
+
| `@arnilo/prism-providers/ollama` | 0.5.3 |
|
|
46
|
+
| `@arnilo/prism-providers/openai` | 0.5.3 |
|
|
47
|
+
| `@arnilo/prism-providers/opencode-go` | 0.5.3 |
|
|
48
|
+
| `@arnilo/prism-providers/openrouter` | 0.5.3 |
|
|
49
|
+
| `@arnilo/prism-providers/vertex` | 0.5.3 |
|
|
50
|
+
| `@arnilo/prism-providers/xai` | 0.5.3 |
|
|
51
|
+
| `@arnilo/prism-providers/zai` | 0.5.3 |
|
|
52
52
|
<!-- generated:package-truth:providers end -->
|
|
53
53
|
|
|
54
54
|
|
|
@@ -137,7 +137,7 @@ A packed tarball contains only public compiled output and release files:
|
|
|
137
137
|
- Code packages ship `README.md`, `LICENSE`, and `CHANGELOG.md`; family/profile packages ship `README.md` and `CHANGELOG.md`.
|
|
138
138
|
- 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`.
|
|
139
139
|
- `dist/cli.js` and the `bin` link in core.
|
|
140
|
-
- **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.5.
|
|
140
|
+
- **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.5.3.tgz`; family packages produce `arnilo-prism-core-0.5.3.tgz`, `arnilo-prism-coding-tools-0.5.3.tgz`, `arnilo-prism-providers-0.5.3.tgz` (all 19 adapters inside), `arnilo-prism-memory-0.5.3.tgz`, `arnilo-prism-web-tools-0.5.3.tgz`, and `arnilo-prism-office-0.5.3.tgz`; capability packages like `arnilo-prism-mcp-0.5.3.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).
|
|
141
141
|
|
|
142
142
|
Excluded from every tarball by `files` negation:
|
|
143
143
|
|