@arnilo/prism 0.4.0 → 0.5.0

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.
Files changed (171) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/README.md +23 -20
  3. package/dist/agent-run-state.d.ts +1 -2
  4. package/dist/agent-run-state.js +0 -3
  5. package/dist/agent-session/session/assemble.d.ts +6 -0
  6. package/dist/agent-session/session/assemble.js +391 -0
  7. package/dist/agent-session/session/persist.d.ts +28 -0
  8. package/dist/agent-session/session/persist.js +166 -0
  9. package/dist/agent-session/session/provider-round.d.ts +6 -0
  10. package/dist/agent-session/session/provider-round.js +231 -0
  11. package/dist/agent-session/session/tool-round.d.ts +31 -0
  12. package/dist/agent-session/session/tool-round.js +473 -0
  13. package/dist/agent-session/session/types.d.ts +115 -0
  14. package/dist/agent-session/session/types.js +5 -0
  15. package/dist/agent-session/session.d.ts +49 -43
  16. package/dist/agent-session/session.js +11 -1177
  17. package/dist/capture.d.ts +63 -0
  18. package/dist/capture.js +67 -0
  19. package/dist/cli-init.d.ts +18 -2
  20. package/dist/cli-init.js +2 -7
  21. package/dist/cli-runner.d.ts +2 -2
  22. package/dist/cli-runner.js +45 -9
  23. package/dist/content.d.ts +3 -3
  24. package/dist/content.js +3 -1
  25. package/dist/contracts-core/agent.d.ts +2 -0
  26. package/dist/contracts-core/batch.d.ts +97 -0
  27. package/dist/contracts-core/batch.js +65 -0
  28. package/dist/contracts-core/content.d.ts +72 -1
  29. package/dist/contracts-core/embeddings.d.ts +30 -0
  30. package/dist/contracts-core/embeddings.js +17 -0
  31. package/dist/contracts-core/images.d.ts +60 -0
  32. package/dist/contracts-core/images.js +17 -0
  33. package/dist/contracts-core/moderation.d.ts +46 -0
  34. package/dist/contracts-core/moderation.js +34 -0
  35. package/dist/contracts-core/speech.d.ts +39 -0
  36. package/dist/contracts-core/speech.js +17 -0
  37. package/dist/contracts-core/transcription.d.ts +48 -0
  38. package/dist/contracts-core/transcription.js +17 -0
  39. package/dist/contracts-core/video.d.ts +61 -0
  40. package/dist/contracts-core/video.js +17 -0
  41. package/dist/contracts-core.d.ts +7 -0
  42. package/dist/contracts-core.js +7 -0
  43. package/dist/index.d.ts +5 -3
  44. package/dist/index.js +4 -3
  45. package/dist/node/agent-definitions.d.ts +1 -8
  46. package/dist/node/agent-definitions.js +0 -34
  47. package/dist/node/settings.d.ts +0 -1
  48. package/dist/node/settings.js +0 -5
  49. package/dist/pinned-fetch.js +29 -3
  50. package/dist/provider-events.js +3 -4
  51. package/dist/providers/media.d.ts +1 -2
  52. package/dist/providers/media.js +1 -4
  53. package/dist/rpc.d.ts +1 -1
  54. package/dist/rpc.js +4 -4
  55. package/dist/testing/provider-conformance.d.ts +114 -5
  56. package/dist/testing/provider-conformance.js +342 -0
  57. package/dist/testing/tool-effect-store-conformance.d.ts +0 -1
  58. package/dist/testing/tool-effect-store-conformance.js +0 -3
  59. package/dist/thinking.d.ts +48 -9
  60. package/dist/thinking.js +134 -8
  61. package/docs/0.1.0-readiness.md +3 -3
  62. package/docs/a2a.md +2 -2
  63. package/docs/acp.md +3 -3
  64. package/docs/ag-ui-adoption.md +1 -1
  65. package/docs/ag-ui.md +1 -2
  66. package/docs/agent-definitions.md +1 -1
  67. package/docs/agent-events.md +5 -5
  68. package/docs/agent-identity.md +13 -2
  69. package/docs/audit-export.md +3 -3
  70. package/docs/batch-jobs.md +120 -0
  71. package/docs/cli-rpc.md +20 -9
  72. package/docs/coding-agent-tools.md +19 -19
  73. package/docs/coding-review-and-diagnostics.md +2 -2
  74. package/docs/coding-security.md +4 -4
  75. package/docs/coding-workspaces.md +2 -2
  76. package/docs/computer-use-linux.md +13 -2
  77. package/docs/context-and-skills.md +1 -1
  78. package/docs/conversations.md +4 -4
  79. package/docs/credential-storage.md +11 -7
  80. package/docs/credentials-and-redaction.md +1 -1
  81. package/docs/data-classification.md +1 -1
  82. package/docs/database-persistence.md +4 -4
  83. package/docs/dev-inspector.md +6 -6
  84. package/docs/device-adapters.md +2 -2
  85. package/docs/diagrams.md +1 -1
  86. package/docs/document-reader.md +6 -6
  87. package/docs/documents.md +5 -4
  88. package/docs/embeddings.md +112 -0
  89. package/docs/enterprise-postgres-state.md +7 -7
  90. package/docs/evaluations.md +8 -8
  91. package/docs/extensions.md +3 -3
  92. package/docs/forge-integration.md +3 -3
  93. package/docs/graft.md +2 -2
  94. package/docs/guardrails.md +1 -1
  95. package/docs/host-security.md +15 -15
  96. package/docs/image-generation.md +129 -0
  97. package/docs/impeccable.md +5 -3
  98. package/docs/index.md +60 -33
  99. package/docs/indexed-code-search.md +2 -2
  100. package/docs/language-intelligence.md +4 -4
  101. package/docs/live-testing.md +126 -0
  102. package/docs/mcp-tools.md +43 -12
  103. package/docs/middleware-hooks.md +1 -1
  104. package/docs/migrate-to-0.4.md +3 -3
  105. package/docs/migrate-to-0.5.md +122 -0
  106. package/docs/migration.md +29 -1
  107. package/docs/model-registry.md +38 -0
  108. package/docs/model-routing.md +5 -5
  109. package/docs/moderation.md +117 -0
  110. package/docs/multi-agent-patterns.md +4 -4
  111. package/docs/multimodal-content.md +26 -2
  112. package/docs/obscura.md +2 -2
  113. package/docs/observability.md +32 -7
  114. package/docs/openapi-tools.md +13 -3
  115. package/docs/operations.md +11 -0
  116. package/docs/performance.md +7 -7
  117. package/docs/persistence-credentials-multimodality-primitives.md +6 -6
  118. package/docs/policy-and-audit.md +17 -7
  119. package/docs/ponytail.md +1 -1
  120. package/docs/postgres-persistence.md +5 -5
  121. package/docs/process-sessions.md +2 -2
  122. package/docs/prompt-registry.md +7 -7
  123. package/docs/provider-caching.md +4 -0
  124. package/docs/provider-conformance.md +23 -1
  125. package/docs/provider-packages.md +39 -3
  126. package/docs/provider-primitives.md +1 -1
  127. package/docs/provider-request-policies.md +1 -1
  128. package/docs/providers/ai-sdk.md +15 -3
  129. package/docs/providers/alibaba.md +5 -1
  130. package/docs/providers/anthropic.md +4 -0
  131. package/docs/providers/azure.md +17 -1
  132. package/docs/providers/bedrock.md +15 -0
  133. package/docs/providers/clinepass.md +4 -0
  134. package/docs/providers/commandcode.md +253 -0
  135. package/docs/providers/deepseek.md +4 -0
  136. package/docs/providers/google.md +4 -0
  137. package/docs/providers/hyper.md +284 -0
  138. package/docs/providers/kimi.md +4 -0
  139. package/docs/providers/neuralwatt.md +4 -0
  140. package/docs/providers/ollama.md +15 -0
  141. package/docs/providers/openai-compatible.md +4 -0
  142. package/docs/providers/openai.md +4 -0
  143. package/docs/providers/opencode-go.md +4 -0
  144. package/docs/providers/openrouter.md +5 -1
  145. package/docs/providers/vertex.md +16 -0
  146. package/docs/providers/xai.md +4 -0
  147. package/docs/providers/zai.md +4 -0
  148. package/docs/rag.md +26 -4
  149. package/docs/release-and-install.md +103 -46
  150. package/docs/resource-loading.md +1 -1
  151. package/docs/runs-and-usage.md +14 -2
  152. package/docs/server.md +5 -5
  153. package/docs/settings-auth-trust-security.md +7 -5
  154. package/docs/sheets.md +2 -2
  155. package/docs/speech.md +126 -0
  156. package/docs/sqlite-persistence.md +4 -4
  157. package/docs/supervisors.md +3 -3
  158. package/docs/thinking-and-reasoning.md +93 -60
  159. package/docs/tool-conformance.md +1 -1
  160. package/docs/tool-execution-primitives.md +8 -8
  161. package/docs/tools.md +4 -4
  162. package/docs/web-tools.md +1 -1
  163. package/docs/wiki.md +1 -1
  164. package/docs/work-artifacts-and-review.md +17 -6
  165. package/docs/work-connectors.md +4 -4
  166. package/docs/work-tools.md +5 -5
  167. package/docs/workflow-orchestration-primitives.md +11 -11
  168. package/docs/workflows.md +5 -5
  169. package/package.json +11 -8
  170. package/templates/init/providers.json +24 -8
  171. package/docs/antigravity-agent.md +0 -207
@@ -0,0 +1,17 @@
1
+ export class EmbeddingsError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = "EmbeddingsError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function modelSupportsEmbeddings(capabilities) {
10
+ return capabilities?.embeddings === true;
11
+ }
12
+ export function assertEmbeddingsSupported(model) {
13
+ if (!modelSupportsEmbeddings(model.capabilities)) {
14
+ throw new EmbeddingsError("unsupported_model", `Model ${model.provider}/${model.model} does not declare the embeddings capability`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1,60 @@
1
+ /** Provider-neutral image generation/editing contract (plan 061 Task 4).
2
+ * Generate (prompt→image[s]) and edit (image+mask+prompt) returning `Uint8Array`
3
+ * bytes plus provenance — hosts own persistence (no disk writes, no URL-only
4
+ * contract). Edit inputs reuse the existing `ImageContent` binary content parts.
5
+ * Adapters enforce prompt/content caps with typed errors — they never truncate. */
6
+ import type { ImageContent, ModelCapabilities, ModelConfig, Usage } from "./content.js";
7
+ export interface ImageGenerationRequest {
8
+ readonly model: string;
9
+ readonly prompt: string;
10
+ /** Pixel dimensions, e.g. `1024x1024` (provider-defined vocabulary). */
11
+ readonly size?: string;
12
+ /** Output container, e.g. `png`, `jpeg`, `webp`. */
13
+ readonly format?: string;
14
+ /** Provider-defined quality tier, e.g. `standard` | `hd`. */
15
+ readonly quality?: string;
16
+ /** Number of images to generate (within the provider cap). */
17
+ readonly count?: number;
18
+ readonly signal?: AbortSignal;
19
+ }
20
+ export interface ImageEditRequest {
21
+ readonly model: string;
22
+ readonly prompt: string;
23
+ /** Base image(s) as existing binary content parts (base64 `data` or `url`). */
24
+ readonly images: readonly ImageContent[];
25
+ /** Optional mask as an image content part (transparent areas mark edits). */
26
+ readonly mask?: ImageContent;
27
+ readonly size?: string;
28
+ readonly format?: string;
29
+ readonly count?: number;
30
+ readonly signal?: AbortSignal;
31
+ }
32
+ /** One generated image: bytes plus provenance. `provider`/`model` are preserved
33
+ * end-to-end so hosts can attribute stored output. */
34
+ export interface GeneratedImage {
35
+ readonly bytes: Uint8Array;
36
+ /** e.g. `image/png`. */
37
+ readonly mimeType: string;
38
+ readonly provider: string;
39
+ readonly model: string;
40
+ /** Provider-native URL passthrough, when the provider returns one. */
41
+ readonly url?: string;
42
+ /** Provider-revised prompt, when the provider returns one. */
43
+ readonly revisedPrompt?: string;
44
+ }
45
+ export interface ImageGenerationResult {
46
+ readonly images: readonly GeneratedImage[];
47
+ readonly usage?: Usage;
48
+ }
49
+ export interface ImageGenerationProvider {
50
+ readonly id: string;
51
+ generate(request: ImageGenerationRequest): Promise<ImageGenerationResult>;
52
+ edit(request: ImageEditRequest): Promise<ImageGenerationResult>;
53
+ }
54
+ export type ImageGenerationErrorCode = "empty_input" | "input_too_large" | "unsupported_operation" | "request_failed" | "response_malformed" | "unsupported_model";
55
+ export declare class ImageGenerationError extends Error {
56
+ readonly code: ImageGenerationErrorCode;
57
+ constructor(code: ImageGenerationErrorCode, message: string);
58
+ }
59
+ export declare function modelSupportsImageGeneration(capabilities?: ModelCapabilities): boolean;
60
+ export declare function assertImageGenerationSupported(model: ModelConfig): void;
@@ -0,0 +1,17 @@
1
+ export class ImageGenerationError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = "ImageGenerationError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function modelSupportsImageGeneration(capabilities) {
10
+ return capabilities?.imageGeneration === true;
11
+ }
12
+ export function assertImageGenerationSupported(model) {
13
+ if (!modelSupportsImageGeneration(model.capabilities)) {
14
+ throw new ImageGenerationError("unsupported_model", `Model ${model.provider}/${model.model} does not declare the imageGeneration capability`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=images.js.map
@@ -0,0 +1,46 @@
1
+ /** Provider-neutral moderation classification contract (plan 061 Task 6).
2
+ *
3
+ * Scores and flagged booleans are provider output — core bakes in no policy:
4
+ * thresholds, blocking, and routing stay host-owned (see docs/host-security.md).
5
+ * Category keys use the provider-neutral vocabulary below; raw provider
6
+ * categories that have no neutral mapping pass through untouched.
7
+ */
8
+ import type { JsonObject, ModelCapabilities, ModelConfig } from "./content.js";
9
+ /** Provider-neutral category vocabulary (canonical names; adapters map their raw
10
+ * categories onto these — unknown raw categories pass through as-is). */
11
+ export declare const MODERATION_CATEGORIES: readonly ["harassment", "harassment/threatening", "hate", "hate/threatening", "illicit", "illicit/violent", "self-harm", "self-harm/instructions", "self-harm/intent", "sexual", "sexual/minors", "violence", "violence/graphic"];
12
+ export type ModerationCategory = (typeof MODERATION_CATEGORIES)[number];
13
+ export type ModerationErrorCode = "empty_input" | "input_too_large" | "unsupported_model" | "request_failed" | "response_malformed" | "unsupported_operation";
14
+ export declare class ModerationError extends Error {
15
+ readonly code: ModerationErrorCode;
16
+ constructor(code: ModerationErrorCode, message: string);
17
+ }
18
+ export declare function modelSupportsModeration(capabilities?: ModelCapabilities): boolean;
19
+ export declare function assertModerationSupported(model: ModelConfig): void;
20
+ export interface ModerationRequest {
21
+ /** One input per call, or a batch where the provider allows it (results match
22
+ * input arity and order). */
23
+ readonly input: string | readonly string[];
24
+ readonly model?: string;
25
+ readonly signal?: AbortSignal;
26
+ }
27
+ /** Per-category verdict: provider-reported score in [0,1] plus the provider's own
28
+ * flagged decision — never a locally recomputed threshold. */
29
+ export interface ModerationCategoryResult {
30
+ readonly score: number;
31
+ readonly flagged: boolean;
32
+ }
33
+ export interface ModerationResult {
34
+ /** True when the provider flagged any category for this input. */
35
+ readonly flagged: boolean;
36
+ /** Category verdicts keyed by provider-neutral name (unknown raw categories pass through). */
37
+ readonly categories: Readonly<Record<string, ModerationCategoryResult>>;
38
+ /** Provider-native category/score fields, unmodified, for host-side audits. */
39
+ readonly raw?: JsonObject;
40
+ readonly model?: string;
41
+ readonly id?: string;
42
+ }
43
+ export interface ModerationProvider {
44
+ readonly id: string;
45
+ moderate(request: ModerationRequest): Promise<ModerationResult | readonly ModerationResult[]>;
46
+ }
@@ -0,0 +1,34 @@
1
+ /** Provider-neutral category vocabulary (canonical names; adapters map their raw
2
+ * categories onto these — unknown raw categories pass through as-is). */
3
+ export const MODERATION_CATEGORIES = [
4
+ "harassment",
5
+ "harassment/threatening",
6
+ "hate",
7
+ "hate/threatening",
8
+ "illicit",
9
+ "illicit/violent",
10
+ "self-harm",
11
+ "self-harm/instructions",
12
+ "self-harm/intent",
13
+ "sexual",
14
+ "sexual/minors",
15
+ "violence",
16
+ "violence/graphic",
17
+ ];
18
+ export class ModerationError extends Error {
19
+ code;
20
+ constructor(code, message) {
21
+ super(message);
22
+ this.name = "ModerationError";
23
+ this.code = code;
24
+ }
25
+ }
26
+ export function modelSupportsModeration(capabilities) {
27
+ return capabilities?.moderation === true;
28
+ }
29
+ export function assertModerationSupported(model) {
30
+ if (!modelSupportsModeration(model.capabilities)) {
31
+ throw new ModerationError("unsupported_model", `Model ${model.provider}/${model.model} does not declare the moderation capability`);
32
+ }
33
+ }
34
+ //# sourceMappingURL=moderation.js.map
@@ -0,0 +1,39 @@
1
+ /** Provider-neutral speech synthesis contract (plan 061 Task 3).
2
+ * Text→audio bytes plus a streaming variant whose first chunk resolves as soon as the
3
+ * provider starts responding. Adapters enforce input caps with typed errors — they never
4
+ * silently truncate. Audio bytes use `Uint8Array`/`ReadableStream` (repo convention). */
5
+ import type { ModelCapabilities, ModelConfig } from "./content.js";
6
+ export interface SpeechRequest {
7
+ readonly model: string;
8
+ readonly input: string;
9
+ /** Provider voice id, e.g. `alloy`. Adapter default when omitted. */
10
+ readonly voice?: string;
11
+ /** Audio container, e.g. `mp3`, `wav`, `opus`. Adapter default when omitted. */
12
+ readonly format?: string;
13
+ /** Playback speed multiplier (e.g. 0.25–4.0 on OpenAI). */
14
+ readonly speed?: number;
15
+ readonly signal?: AbortSignal;
16
+ }
17
+ export interface SpeechResult {
18
+ readonly audio: Uint8Array;
19
+ /** Actual audio container of `audio` (request value or provider default). */
20
+ readonly format: string;
21
+ }
22
+ export interface SpeechStreamResult {
23
+ /** Audio chunks in order; the first chunk is available as soon as the provider responds. */
24
+ readonly audio: ReadableStream<Uint8Array>;
25
+ /** Actual audio container of the stream (request value or provider default). */
26
+ readonly format: string;
27
+ }
28
+ export interface SpeechProvider {
29
+ readonly id: string;
30
+ synthesize(request: SpeechRequest): Promise<SpeechResult>;
31
+ synthesizeStream(request: SpeechRequest): Promise<SpeechStreamResult>;
32
+ }
33
+ export type SpeechErrorCode = "empty_input" | "input_too_large" | "request_failed" | "response_malformed" | "unsupported_model";
34
+ export declare class SpeechError extends Error {
35
+ readonly code: SpeechErrorCode;
36
+ constructor(code: SpeechErrorCode, message: string);
37
+ }
38
+ export declare function modelSupportsSpeech(capabilities?: ModelCapabilities): boolean;
39
+ export declare function assertSpeechSupported(model: ModelConfig): void;
@@ -0,0 +1,17 @@
1
+ export class SpeechError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = "SpeechError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function modelSupportsSpeech(capabilities) {
10
+ return capabilities?.speech === true;
11
+ }
12
+ export function assertSpeechSupported(model) {
13
+ if (!modelSupportsSpeech(model.capabilities)) {
14
+ throw new SpeechError("unsupported_model", `Model ${model.provider}/${model.model} does not declare the speech capability`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=speech.js.map
@@ -0,0 +1,48 @@
1
+ /** Provider-neutral transcription contract (plan 061 Task 3).
2
+ * One-shot audio→text plus a streaming variant yielding partials; both share the
3
+ * `TranscriptDelta` event type aligned with `RealtimeEvent.transcript_delta` naming.
4
+ * Adapters enforce audio byte caps with typed errors — they never silently truncate. */
5
+ import type { ModelCapabilities, ModelConfig, Usage } from "./content.js";
6
+ export interface TranscriptionRequest {
7
+ readonly model: string;
8
+ /** Audio bytes to transcribe. */
9
+ readonly audio: Uint8Array;
10
+ /** Audio container hint, e.g. `wav`, `mp3`; the adapter maps it to an upload filename. */
11
+ readonly format?: string;
12
+ /** ISO-639-1 hint, e.g. `en`. */
13
+ readonly language?: string;
14
+ /** Optional spelling/style hint text. */
15
+ readonly prompt?: string;
16
+ readonly signal?: AbortSignal;
17
+ }
18
+ export interface TranscriptionResult {
19
+ readonly text: string;
20
+ /** Provider-reported token usage; absent when the provider does not report it. */
21
+ readonly usage?: Usage;
22
+ }
23
+ /** Partial transcript. Naming mirrors `RealtimeEvent.transcript_delta` (no `role` —
24
+ * one-shot transcription has no speaker turn). */
25
+ export interface TranscriptDelta {
26
+ readonly type: "transcript_delta";
27
+ readonly text: string;
28
+ }
29
+ /** Terminal event: final full text plus optional usage. Exactly one per stream. */
30
+ export interface TranscriptDone {
31
+ readonly type: "done";
32
+ readonly text: string;
33
+ readonly usage?: Usage;
34
+ }
35
+ export type TranscriptEvent = TranscriptDelta | TranscriptDone;
36
+ export interface TranscriptionProvider {
37
+ readonly id: string;
38
+ transcribe(request: TranscriptionRequest): Promise<TranscriptionResult>;
39
+ /** Yields `transcript_delta` partials in order, then exactly one `done`. */
40
+ transcribeStream(request: TranscriptionRequest): AsyncIterable<TranscriptEvent>;
41
+ }
42
+ export type TranscriptionErrorCode = "empty_input" | "audio_too_large" | "request_failed" | "response_malformed" | "unsupported_model";
43
+ export declare class TranscriptionError extends Error {
44
+ readonly code: TranscriptionErrorCode;
45
+ constructor(code: TranscriptionErrorCode, message: string);
46
+ }
47
+ export declare function modelSupportsTranscription(capabilities?: ModelCapabilities): boolean;
48
+ export declare function assertTranscriptionSupported(model: ModelConfig): void;
@@ -0,0 +1,17 @@
1
+ export class TranscriptionError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = "TranscriptionError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function modelSupportsTranscription(capabilities) {
10
+ return capabilities?.transcription === true;
11
+ }
12
+ export function assertTranscriptionSupported(model) {
13
+ if (!modelSupportsTranscription(model.capabilities)) {
14
+ throw new TranscriptionError("unsupported_model", `Model ${model.provider}/${model.model} does not declare the transcription capability`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=transcription.js.map
@@ -0,0 +1,61 @@
1
+ /** Provider-neutral video generation contract (plan 061 Task 5).
2
+ *
3
+ * Minimal submit/status shape — video jobs run minutes, not seconds, so unlike
4
+ * image generation there is no synchronous `generate`. Hosts poll `status`
5
+ * (or a fake transport in conformance runs) and own download/persistence of
6
+ * the resulting video. Input video as a chat content part is the typed
7
+ * `VideoContent` block with the `"video"` input capability (see content.ts).
8
+ */
9
+ import type { ImageContent, ModelCapabilities, ModelConfig, Usage } from "./content.js";
10
+ /** States mirror the DashScope/OpenAI async job lifecycle; terminal states are
11
+ * `succeeded` and `failed`. */
12
+ export type VideoGenerationJobState = "queued" | "running" | "succeeded" | "failed";
13
+ export type VideoGenerationErrorCode = "empty_input" | "input_too_large" | "unsupported_model" | "request_failed" | "response_malformed" | "unsupported_operation";
14
+ export declare class VideoGenerationError extends Error {
15
+ readonly code: VideoGenerationErrorCode;
16
+ constructor(code: VideoGenerationErrorCode, message: string);
17
+ }
18
+ export declare function modelSupportsVideoGeneration(capabilities?: ModelCapabilities): boolean;
19
+ export declare function assertVideoGenerationSupported(model: ModelConfig): void;
20
+ /** Video generation request: text-to-video by default; pass `images` (first
21
+ * entry wins) for image-to-video providers. Provider-defined vocabulary for
22
+ * `size` (e.g. `1280x720`), `durationSeconds`, and `fps`. */
23
+ export interface VideoGenerationRequest {
24
+ readonly model: string;
25
+ readonly prompt: string;
26
+ readonly images?: readonly ImageContent[];
27
+ readonly size?: string;
28
+ readonly durationSeconds?: number;
29
+ readonly fps?: number;
30
+ readonly metadata?: Readonly<Record<string, unknown>>;
31
+ readonly signal?: AbortSignal;
32
+ }
33
+ /** Provider job handle from `submit`; poll with `status(jobId)`. */
34
+ export interface VideoGenerationJobHandle {
35
+ readonly jobId: string;
36
+ }
37
+ /** The generated video. At least one of `bytes` or `url` is present when the
38
+ * job succeeded; provenance (`provider`/`model`) is always preserved. */
39
+ export interface GeneratedVideo {
40
+ readonly bytes?: Uint8Array;
41
+ readonly url?: string;
42
+ readonly mimeType?: string;
43
+ readonly provider: string;
44
+ readonly model: string;
45
+ readonly durationSeconds?: number;
46
+ }
47
+ /** Point-in-time job state; `video` only on `succeeded`, `error` only on `failed`. */
48
+ export interface VideoGenerationJob {
49
+ readonly jobId: string;
50
+ readonly state: VideoGenerationJobState;
51
+ readonly video?: GeneratedVideo;
52
+ readonly error?: string;
53
+ readonly usage?: Usage;
54
+ }
55
+ export interface VideoGenerationProvider {
56
+ readonly id: string;
57
+ /** Submit a job; never blocks on generation. */
58
+ submit(request: VideoGenerationRequest): Promise<VideoGenerationJobHandle>;
59
+ /** Point-in-time status probe — host-owned polling loop. */
60
+ status(jobId: string, signal?: AbortSignal): Promise<VideoGenerationJob>;
61
+ }
@@ -0,0 +1,17 @@
1
+ export class VideoGenerationError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = "VideoGenerationError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function modelSupportsVideoGeneration(capabilities) {
10
+ return capabilities?.videoGeneration === true;
11
+ }
12
+ export function assertVideoGenerationSupported(model) {
13
+ if (!modelSupportsVideoGeneration(model.capabilities)) {
14
+ throw new VideoGenerationError("unsupported_model", `Model ${model.provider}/${model.model} does not declare the videoGeneration capability`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=video.js.map
@@ -3,12 +3,19 @@
3
3
  * of `./contracts-core.js` is unchanged (0.1.4 barrel precedent). */
4
4
  export type { AudioContent, DocumentContent, FileContent } from "./content.js";
5
5
  export * from "./contracts-core/agent.js";
6
+ export * from "./contracts-core/batch.js";
6
7
  export * from "./contracts-core/compaction.js";
7
8
  export * from "./contracts-core/content.js";
9
+ export * from "./contracts-core/embeddings.js";
8
10
  export * from "./contracts-core/extensions.js";
11
+ export * from "./contracts-core/images.js";
9
12
  export * from "./contracts-core/loop.js";
13
+ export * from "./contracts-core/moderation.js";
10
14
  export * from "./contracts-core/persistence.js";
11
15
  export * from "./contracts-core/provider.js";
12
16
  export * from "./contracts-core/resources.js";
13
17
  export * from "./contracts-core/run-limits.js";
14
18
  export * from "./contracts-core/session.js";
19
+ export * from "./contracts-core/speech.js";
20
+ export * from "./contracts-core/transcription.js";
21
+ export * from "./contracts-core/video.js";
@@ -1,11 +1,18 @@
1
1
  export * from "./contracts-core/agent.js";
2
+ export * from "./contracts-core/batch.js";
2
3
  export * from "./contracts-core/compaction.js";
3
4
  export * from "./contracts-core/content.js";
5
+ export * from "./contracts-core/embeddings.js";
4
6
  export * from "./contracts-core/extensions.js";
7
+ export * from "./contracts-core/images.js";
5
8
  export * from "./contracts-core/loop.js";
9
+ export * from "./contracts-core/moderation.js";
6
10
  export * from "./contracts-core/persistence.js";
7
11
  export * from "./contracts-core/provider.js";
8
12
  export * from "./contracts-core/resources.js";
9
13
  export * from "./contracts-core/run-limits.js";
10
14
  export * from "./contracts-core/session.js";
15
+ export * from "./contracts-core/speech.js";
16
+ export * from "./contracts-core/transcription.js";
17
+ export * from "./contracts-core/video.js";
11
18
  //# sourceMappingURL=contracts-core.js.map
package/dist/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export type { ApplyCacheControlOptions, CacheControlledContentBlock, CacheContro
13
13
  export { applyCacheControl, cacheHitRate, cacheSavings, cacheUsageReport, mapCacheRetention, resolveBreakpoint, sanitizeCacheKey, systemCacheControlField, } from "./cache-helpers.js";
14
14
  export type { CacheTelemetry, CacheTelemetryOptions, CacheTelemetryReport, CacheTelemetrySample, } from "./cache-telemetry.js";
15
15
  export { CACHE_TELEMETRY_OVERFLOW_KEY, CacheTelemetryError, createCacheTelemetry, DEFAULT_CACHE_TELEMETRY_CAP, } from "./cache-telemetry.js";
16
+ export type { ProviderCapture, ProviderCaptureEntry, ProviderCaptureOptions, ProviderCapturePolicy } from "./capture.js";
17
+ export { createProviderCapture } from "./capture.js";
16
18
  export type { MemoryCheckpointStoreOptions } from "./checkpoints.js";
17
19
  export { CHECKPOINT_CONFLICT_CODE, CheckpointConflictError, createMemoryCheckpointStore } from "./checkpoints.js";
18
20
  export type { DefaultCompactionStrategyOptions } from "./compaction.js";
@@ -25,7 +27,7 @@ export type { ContextBudget, ContextBudgetMessageGroups, ContextBudgetOmission,
25
27
  export { applyContextBudget, CONTEXT_BUDGET_ERROR_CODE, CONTEXT_BUDGET_REPORT_METADATA_KEY, ContextBudgetError, DEFAULT_MAX_CONTEXT_BUDGET_OMISSIONS, estimateAssemblyTokens, estimateMessageBytes, estimateMessageTokens, estimateTextBytes, estimateTextTokens, getContextBudgetReport, HARD_MAX_CONTEXT_BUDGET_BYTES, HARD_MAX_CONTEXT_BUDGET_OMISSIONS, HARD_MAX_CONTEXT_BUDGET_TOKENS, isContextBudgetError, resolveContextBudget, } from "./context-budget.js";
26
28
  export type * from "./contracts.js";
27
29
  export type { ApprovalOutcome, DecisionScope, NestedRunApproval, NestedRunOutcome, NestedRunRef, PendingDecision, PendingDecisionKind, ProviderResolver, RealtimeCaps, RealtimeEvent, RealtimeSession, RealtimeSessionFactory, RealtimeSessionOptions, ResumeNestedRun, RunDecision, RunLimitCounters, RunLimitName, SecureAgentOptions, StickyDecision, ToolCallAuthority, ToolEffectClassifier, ToolEffectDeclaration, ToolEffectIdempotency, ToolEffectKey, ToolEffectKind, ToolEffectRecord, ToolEffectStatus, ToolEffectStore, ToolEffectTransition, ToolElicitationRequest, } from "./contracts.js";
28
- export { AgentDecisionError, AgentDelegationSuspendedError, AgentLoopStateError, AgentRunError, AgentRunStateError, assertSessionMetadataKey, DEFAULT_MAX_PENDING_DECISIONS, DEFAULT_MAX_PENDING_STEER_BYTES, DEFAULT_MAX_PENDING_STEERS, DEFAULT_MAX_SESSION_SEARCH_CURSOR_BYTES, DEFAULT_MAX_SESSION_SEARCH_FTS_CANDIDATES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_BYTES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_ENTRIES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_SESSIONS, DEFAULT_MAX_SESSION_SEARCH_QUERY_BYTES, DEFAULT_MAX_SESSION_SEARCH_SNIPPET_BYTES, DEFAULT_MAX_STICKY_DECISIONS, DEFAULT_SESSION_SEARCH_LIMIT, HARD_MAX_ACTION_CONSTRAINT_BYTES, HARD_MAX_ACTION_CONSTRAINTS, HARD_MAX_DECISION_REASON_BYTES, HARD_MAX_ELICITATION_BYTES, HARD_MAX_PENDING_DECISIONS, HARD_MAX_PENDING_STEER_BYTES, HARD_MAX_PENDING_STEERS, HARD_MAX_SESSION_SEARCH_CURSOR_BYTES, HARD_MAX_SESSION_SEARCH_FTS_CANDIDATES, HARD_MAX_SESSION_SEARCH_LIMIT, HARD_MAX_SESSION_SEARCH_LINEAR_BYTES, HARD_MAX_SESSION_SEARCH_LINEAR_ENTRIES, HARD_MAX_SESSION_SEARCH_LINEAR_SESSIONS, HARD_MAX_SESSION_SEARCH_QUERY_BYTES, HARD_MAX_SESSION_SEARCH_SNIPPET_BYTES, HARD_MAX_STICKY_DECISIONS, isSessionAppendConflict, isSessionEntryKind, isSessionMetadataConflict, isSessionSearchUnsupported, MAX_ACTION_CONSTRAINT_BYTES, MAX_ACTION_CONSTRAINTS, MAX_ATTRIBUTION_DEPTH, MAX_DECISION_REASON_BYTES, MAX_ELICITATION_BYTES, resolveSessionSearchQuery, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SESSION_METADATA_CONFLICT_CODE, SESSION_SEARCH_UNSUPPORTED_CODE, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SessionAppendConflictError, SessionMetadataConflictError, SessionSearchUnsupportedError, } from "./contracts.js";
30
+ export { AgentDecisionError, AgentDelegationSuspendedError, AgentLoopStateError, AgentRunError, AgentRunStateError, assertBatchJobsSupported, assertEmbeddingsSupported, assertImageGenerationSupported, assertModerationSupported, assertSessionMetadataKey, assertSpeechSupported, assertTranscriptionSupported, assertVideoGenerationSupported, BatchJobsError, DEFAULT_MAX_PENDING_DECISIONS, DEFAULT_MAX_PENDING_STEER_BYTES, DEFAULT_MAX_PENDING_STEERS, DEFAULT_MAX_SESSION_SEARCH_CURSOR_BYTES, DEFAULT_MAX_SESSION_SEARCH_FTS_CANDIDATES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_BYTES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_ENTRIES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_SESSIONS, DEFAULT_MAX_SESSION_SEARCH_QUERY_BYTES, DEFAULT_MAX_SESSION_SEARCH_SNIPPET_BYTES, DEFAULT_MAX_STICKY_DECISIONS, DEFAULT_SESSION_SEARCH_LIMIT, EmbeddingsError, HARD_MAX_ACTION_CONSTRAINT_BYTES, HARD_MAX_ACTION_CONSTRAINTS, HARD_MAX_DECISION_REASON_BYTES, HARD_MAX_ELICITATION_BYTES, HARD_MAX_PENDING_DECISIONS, HARD_MAX_PENDING_STEER_BYTES, HARD_MAX_PENDING_STEERS, HARD_MAX_SESSION_SEARCH_CURSOR_BYTES, HARD_MAX_SESSION_SEARCH_FTS_CANDIDATES, HARD_MAX_SESSION_SEARCH_LIMIT, HARD_MAX_SESSION_SEARCH_LINEAR_BYTES, HARD_MAX_SESSION_SEARCH_LINEAR_ENTRIES, HARD_MAX_SESSION_SEARCH_LINEAR_SESSIONS, HARD_MAX_SESSION_SEARCH_QUERY_BYTES, HARD_MAX_SESSION_SEARCH_SNIPPET_BYTES, HARD_MAX_STICKY_DECISIONS, ImageGenerationError, isBatchJobTerminal, isSessionAppendConflict, isSessionEntryKind, isSessionMetadataConflict, isSessionSearchUnsupported, MAX_ACTION_CONSTRAINT_BYTES, MAX_ACTION_CONSTRAINTS, MAX_ATTRIBUTION_DEPTH, MAX_DECISION_REASON_BYTES, MAX_ELICITATION_BYTES, ModerationError, modelSupportsBatchJobs, modelSupportsEmbeddings, modelSupportsImageGeneration, modelSupportsModeration, modelSupportsSpeech, modelSupportsTranscription, modelSupportsVideoGeneration, pollBatch, resolveSessionSearchQuery, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SESSION_METADATA_CONFLICT_CODE, SESSION_SEARCH_UNSUPPORTED_CODE, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SessionAppendConflictError, SessionMetadataConflictError, SessionSearchUnsupportedError, SpeechError, TranscriptionError, VideoGenerationError, } from "./contracts.js";
29
31
  export { parseAgentFile, parseSkillFile } from "./contribution-parsing.js";
30
32
  export type { ContributionRegistries, ContributionRegistriesOptions, ContributionRegistry, ContributionRegistryOptions, } from "./contributions.js";
31
33
  export { createContributionRegistries, createContributionRegistry, registerDiscoveredContributions } from "./contributions.js";
@@ -104,7 +106,7 @@ export type { ComposeSystemPromptOptions } from "./system-prompts.js";
104
106
  export { composeSystemPrompt, mergeSystemPromptConfig } from "./system-prompts.js";
105
107
  export { assertAgentEventSourceConforms } from "./testing/agent-event-source-conformance.js";
106
108
  export type { ThinkingCompatFamily, ThinkingLevel } from "./thinking.js";
107
- export { applyThinkingLevel, isThinkingLevel, normalizeThinkingLevel, THINKING_LEVELS, thinkingCompatFor, thinkingFamilyForModel, } from "./thinking.js";
109
+ export { applyThinkingLevel, applyThinkingLevelForModel, isSupportedThinkingLevel, isThinkingLevel, normalizeThinkingLevel, parseThinkingLevel, snapThinkingLevel, THINKING_LEVELS, thinkingCompatFor, thinkingFamilyForModel, thinkingLevelsForModel, } from "./thinking.js";
108
110
  export type { ToolEffectErrorCode } from "./tool-effects.js";
109
111
  export { createMemoryToolEffectStore, ToolEffectError } from "./tool-effects.js";
110
112
  export type { FoldToolResultsContext, ResolvedToolResultFoldOptions, ToolResultFoldInput, ToolResultFoldOptions, } from "./tool-result-fold.js";
@@ -117,5 +119,5 @@ export { trimTrailingSlashes } from "./trim-trailing-slashes.js";
117
119
  export type { ResolvedUseCaseModel, ResolveUseCaseModelInput, UseCaseModelBinding, } from "./use-case-model.js";
118
120
  export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
119
121
  export declare const name = "prism";
120
- export declare const version = "0.4.0";
122
+ export declare const version = "0.5.0";
121
123
  export declare const description = "Agent harness for AI providers, agents, sessions, and tools.";
package/dist/index.js CHANGED
@@ -7,12 +7,13 @@ export { createAgent, createAgentSession, resumeAgentRun, resumeAgentRunStream }
7
7
  export { ARTIFACT_BODY_ERROR_CODES, ARTIFACT_CHECKPOINT_NAMESPACE, ArtifactBodyStoreError, ArtifactError, artifactApprovalState, artifactCheckpointKey, } from "./artifacts.js";
8
8
  export { applyCacheControl, cacheHitRate, cacheSavings, cacheUsageReport, mapCacheRetention, resolveBreakpoint, sanitizeCacheKey, systemCacheControlField, } from "./cache-helpers.js";
9
9
  export { CACHE_TELEMETRY_OVERFLOW_KEY, CacheTelemetryError, createCacheTelemetry, DEFAULT_CACHE_TELEMETRY_CAP, } from "./cache-telemetry.js";
10
+ export { createProviderCapture } from "./capture.js";
10
11
  export { CHECKPOINT_CONFLICT_CODE, CheckpointConflictError, createMemoryCheckpointStore } from "./checkpoints.js";
11
12
  export { createDefaultCompactionStrategy, isCompactionEntryData } from "./compaction.js";
12
13
  export { assertJsonObject, isJsonObject, loadConfigLayers, mergeConfigLayers } from "./config.js";
13
14
  export { assertDeclaredMediaTypeMatches, assertMediaBlocksWithinBounds, assertMessagesSupportModelCapabilities, assertModelSupportsContentBlocks, assertSsrfAllowedUrl, collectMessageContentBlocks, contentBlockInputModality, DEFAULT_MAX_AUDIO_DURATION_MS, DEFAULT_MAX_MEDIA_ITEM_BYTES, DEFAULT_MAX_MEDIA_ITEMS_PER_REQUEST, DEFAULT_MAX_MEDIA_REQUEST_BYTES, DEFAULT_MEDIA_FETCH_TIMEOUT_MS, loadBoundedBinaryResource, MediaContentError, MODEL_INPUT_CAPABILITIES, resolveMediaContentBlock, resolveMediaContentBlocks, sniffMediaMimeType, UnsupportedModalityError, } from "./content.js";
14
15
  export { applyContextBudget, CONTEXT_BUDGET_ERROR_CODE, CONTEXT_BUDGET_REPORT_METADATA_KEY, ContextBudgetError, DEFAULT_MAX_CONTEXT_BUDGET_OMISSIONS, estimateAssemblyTokens, estimateMessageBytes, estimateMessageTokens, estimateTextBytes, estimateTextTokens, getContextBudgetReport, HARD_MAX_CONTEXT_BUDGET_BYTES, HARD_MAX_CONTEXT_BUDGET_OMISSIONS, HARD_MAX_CONTEXT_BUDGET_TOKENS, isContextBudgetError, resolveContextBudget, } from "./context-budget.js";
15
- export { AgentDecisionError, AgentDelegationSuspendedError, AgentLoopStateError, AgentRunError, AgentRunStateError, assertSessionMetadataKey, DEFAULT_MAX_PENDING_DECISIONS, DEFAULT_MAX_PENDING_STEER_BYTES, DEFAULT_MAX_PENDING_STEERS, DEFAULT_MAX_SESSION_SEARCH_CURSOR_BYTES, DEFAULT_MAX_SESSION_SEARCH_FTS_CANDIDATES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_BYTES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_ENTRIES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_SESSIONS, DEFAULT_MAX_SESSION_SEARCH_QUERY_BYTES, DEFAULT_MAX_SESSION_SEARCH_SNIPPET_BYTES, DEFAULT_MAX_STICKY_DECISIONS, DEFAULT_SESSION_SEARCH_LIMIT, HARD_MAX_ACTION_CONSTRAINT_BYTES, HARD_MAX_ACTION_CONSTRAINTS, HARD_MAX_DECISION_REASON_BYTES, HARD_MAX_ELICITATION_BYTES, HARD_MAX_PENDING_DECISIONS, HARD_MAX_PENDING_STEER_BYTES, HARD_MAX_PENDING_STEERS, HARD_MAX_SESSION_SEARCH_CURSOR_BYTES, HARD_MAX_SESSION_SEARCH_FTS_CANDIDATES, HARD_MAX_SESSION_SEARCH_LIMIT, HARD_MAX_SESSION_SEARCH_LINEAR_BYTES, HARD_MAX_SESSION_SEARCH_LINEAR_ENTRIES, HARD_MAX_SESSION_SEARCH_LINEAR_SESSIONS, HARD_MAX_SESSION_SEARCH_QUERY_BYTES, HARD_MAX_SESSION_SEARCH_SNIPPET_BYTES, HARD_MAX_STICKY_DECISIONS, isSessionAppendConflict, isSessionEntryKind, isSessionMetadataConflict, isSessionSearchUnsupported, MAX_ACTION_CONSTRAINT_BYTES, MAX_ACTION_CONSTRAINTS, MAX_ATTRIBUTION_DEPTH, MAX_DECISION_REASON_BYTES, MAX_ELICITATION_BYTES, resolveSessionSearchQuery, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SESSION_METADATA_CONFLICT_CODE, SESSION_SEARCH_UNSUPPORTED_CODE, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SessionAppendConflictError, SessionMetadataConflictError, SessionSearchUnsupportedError, } from "./contracts.js";
16
+ export { AgentDecisionError, AgentDelegationSuspendedError, AgentLoopStateError, AgentRunError, AgentRunStateError, assertBatchJobsSupported, assertEmbeddingsSupported, assertImageGenerationSupported, assertModerationSupported, assertSessionMetadataKey, assertSpeechSupported, assertTranscriptionSupported, assertVideoGenerationSupported, BatchJobsError, DEFAULT_MAX_PENDING_DECISIONS, DEFAULT_MAX_PENDING_STEER_BYTES, DEFAULT_MAX_PENDING_STEERS, DEFAULT_MAX_SESSION_SEARCH_CURSOR_BYTES, DEFAULT_MAX_SESSION_SEARCH_FTS_CANDIDATES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_BYTES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_ENTRIES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_SESSIONS, DEFAULT_MAX_SESSION_SEARCH_QUERY_BYTES, DEFAULT_MAX_SESSION_SEARCH_SNIPPET_BYTES, DEFAULT_MAX_STICKY_DECISIONS, DEFAULT_SESSION_SEARCH_LIMIT, EmbeddingsError, HARD_MAX_ACTION_CONSTRAINT_BYTES, HARD_MAX_ACTION_CONSTRAINTS, HARD_MAX_DECISION_REASON_BYTES, HARD_MAX_ELICITATION_BYTES, HARD_MAX_PENDING_DECISIONS, HARD_MAX_PENDING_STEER_BYTES, HARD_MAX_PENDING_STEERS, HARD_MAX_SESSION_SEARCH_CURSOR_BYTES, HARD_MAX_SESSION_SEARCH_FTS_CANDIDATES, HARD_MAX_SESSION_SEARCH_LIMIT, HARD_MAX_SESSION_SEARCH_LINEAR_BYTES, HARD_MAX_SESSION_SEARCH_LINEAR_ENTRIES, HARD_MAX_SESSION_SEARCH_LINEAR_SESSIONS, HARD_MAX_SESSION_SEARCH_QUERY_BYTES, HARD_MAX_SESSION_SEARCH_SNIPPET_BYTES, HARD_MAX_STICKY_DECISIONS, ImageGenerationError, isBatchJobTerminal, isSessionAppendConflict, isSessionEntryKind, isSessionMetadataConflict, isSessionSearchUnsupported, MAX_ACTION_CONSTRAINT_BYTES, MAX_ACTION_CONSTRAINTS, MAX_ATTRIBUTION_DEPTH, MAX_DECISION_REASON_BYTES, MAX_ELICITATION_BYTES, ModerationError, modelSupportsBatchJobs, modelSupportsEmbeddings, modelSupportsImageGeneration, modelSupportsModeration, modelSupportsSpeech, modelSupportsTranscription, modelSupportsVideoGeneration, pollBatch, resolveSessionSearchQuery, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SESSION_METADATA_CONFLICT_CODE, SESSION_SEARCH_UNSUPPORTED_CODE, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SessionAppendConflictError, SessionMetadataConflictError, SessionSearchUnsupportedError, SpeechError, TranscriptionError, VideoGenerationError, } from "./contracts.js";
16
17
  export { parseAgentFile, parseSkillFile } from "./contribution-parsing.js";
17
18
  export { createContributionRegistries, createContributionRegistry, registerDiscoveredContributions } from "./contributions.js";
18
19
  export { CONVERSATION_METADATA_KEY, ConversationError, conversationMarkerMetadata, conversationThreadFromRecord, DEFAULT_MAX_CONVERSATION_CURSOR_BYTES, decodeConversationReplayCursor, encodeConversationReplayCursor, HARD_MAX_CONVERSATION_CURSOR_BYTES, } from "./conversations.js";
@@ -57,7 +58,7 @@ export { createSkillRegistry, resolveActiveSkills } from "./skills.js";
57
58
  export { artifactStructuredOutputRequest, assertStructuredOutputRequestSupported, DEFAULT_MAX_STRUCTURED_OUTPUT_NAME_LENGTH, DEFAULT_MAX_STRUCTURED_OUTPUT_SCHEMA_BYTES, modelSupportsStructuredOutput, resolveRunProviderOptions, StructuredOutputError, validateStructuredOutputOptions, withoutStructuredOutput, } from "./structured-output.js";
58
59
  export { composeSystemPrompt, mergeSystemPromptConfig } from "./system-prompts.js";
59
60
  export { assertAgentEventSourceConforms } from "./testing/agent-event-source-conformance.js";
60
- export { applyThinkingLevel, isThinkingLevel, normalizeThinkingLevel, THINKING_LEVELS, thinkingCompatFor, thinkingFamilyForModel, } from "./thinking.js";
61
+ export { applyThinkingLevel, applyThinkingLevelForModel, isSupportedThinkingLevel, isThinkingLevel, normalizeThinkingLevel, parseThinkingLevel, snapThinkingLevel, THINKING_LEVELS, thinkingCompatFor, thinkingFamilyForModel, thinkingLevelsForModel, } from "./thinking.js";
61
62
  export { createMemoryToolEffectStore, ToolEffectError } from "./tool-effects.js";
62
63
  export { DEFAULT_TOOL_RESULT_FOLD_MAX_SUMMARY_BYTES, DEFAULT_TOOL_RESULT_FOLD_MIN_AGE_TURNS, DEFAULT_TOOL_RESULT_FOLD_MIN_BYTES, foldedToolResultHeader, foldToolResultHistory, foldToolResults, formatFoldedToolResult, HARD_TOOL_RESULT_FOLD_MAX_SUMMARY_BYTES, resolveToolResultFold, TOOL_RESULT_FOLD_TURN_METADATA_KEY, } from "./tool-result-fold.js";
63
64
  export { createActiveToolSet, createSearchToolsTool, createToolSearchIndex, createToolSearchState, DEFAULT_MAX_TOOLS_SEARCH_QUERY_BYTES, DEFAULT_TOOLS_SEARCH_TOP_K, HARD_MAX_TOOLS_INDEX, HARD_MAX_TOOLS_SEARCH_QUERY_BYTES, HARD_MAX_TOOLS_SEARCH_TOP_K, isToolDisclosureError, resolveToolsDisclosure, SEARCH_TOOLS_TOOL_NAME, scoreTools, selectDisclosedTools, TOOL_DISCLOSURE_ERROR_CODE, ToolDisclosureError, } from "./tool-search.js";
@@ -65,6 +66,6 @@ export { createToolParameterValidator, createToolRegistry, dispatchToolCall, fil
65
66
  export { trimTrailingSlashes } from "./trim-trailing-slashes.js";
66
67
  export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
67
68
  export const name = "prism";
68
- export const version = "0.4.0";
69
+ export const version = "0.5.0";
69
70
  export const description = "Agent harness for AI providers, agents, sessions, and tools.";
70
71
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import type { Agent, AgentDefinitionResolutionContext, ContextProvider, DiscoveredContribution, ProviderResolver, ToolDefinition } from "../contracts.js";
1
+ import type { Agent, AgentDefinitionResolutionContext, DiscoveredContribution, ProviderResolver } from "../contracts.js";
2
2
  import type { PermissionPolicy, TrustPolicy } from "../security.js";
3
3
  /** Options for {@link resolveAgentBundle}. */
4
4
  export interface ResolveAgentBundleOptions {
@@ -89,10 +89,3 @@ export declare function discoverAgentBundles(options: DiscoverAgentBundlesOption
89
89
  * most once per call; resolution is one-shot, so no cross-call cache is kept
90
90
  * (ponytail: add memoization only if a host resolves the same bundle repeatedly). */
91
91
  export declare function resolveAgentBundle(bundle: AgentBundle, options: ResolveAgentBundleOptions): Promise<Agent>;
92
- /** Parse a `CONTEXT.md` into a static {@link ContextProvider}. The markdown
93
- * body becomes the context block content; frontmatter `name` overrides the
94
- * directory name. */
95
- export declare function parseContextFile(text: string, path: string): ContextProvider;
96
- /** Parse a `TOOL.md` into a descriptor-only {@link ToolDefinition}. The
97
- * executable behavior is host-owned; calling `execute` throws. */
98
- export declare function parseToolFile(text: string, path: string): ToolDefinition;
@@ -358,38 +358,4 @@ function parentDirName(path) {
358
358
  const parts = path.split(/[/\\]+/).filter(Boolean);
359
359
  return parts.length >= 2 ? parts[parts.length - 2] : (parts[parts.length - 1] ?? "");
360
360
  }
361
- /** Parse a `CONTEXT.md` into a static {@link ContextProvider}. The markdown
362
- * body becomes the context block content; frontmatter `name` overrides the
363
- * directory name. */
364
- export function parseContextFile(text, path) {
365
- const { front, body } = splitFrontmatter(text, path);
366
- const rawName = String(front.get("name") ?? "").trim() || parentDirName(path);
367
- if (!NAME_RE.test(rawName)) {
368
- throw new Error(`Invalid context provider name in ${path}: ${JSON.stringify(rawName)}`);
369
- }
370
- const name = rawName.replace(/\s+/g, "-");
371
- const title = String(front.get("title") ?? name);
372
- return {
373
- name,
374
- resolve: () => [{ title, content: body.replace(/^\n+/, "").trimEnd() }],
375
- };
376
- }
377
- /** Parse a `TOOL.md` into a descriptor-only {@link ToolDefinition}. The
378
- * executable behavior is host-owned; calling `execute` throws. */
379
- export function parseToolFile(text, path) {
380
- const { front, body } = splitFrontmatter(text, path);
381
- const rawName = String(front.get("name") ?? "").trim() || parentDirName(path);
382
- if (!NAME_RE.test(rawName)) {
383
- throw new Error(`Invalid tool name in ${path}: ${JSON.stringify(rawName)}`);
384
- }
385
- const name = rawName.replace(/\s+/g, "-");
386
- const description = String(front.get("description") ?? "").trim() || body.replace(/^\n+/, "").slice(0, 80).trim();
387
- return {
388
- name,
389
- ...(description ? { description } : {}),
390
- execute: () => {
391
- throw new Error(`Discovered tool ${name} requires host execution`);
392
- },
393
- };
394
- }
395
361
  //# sourceMappingURL=agent-definitions.js.map
@@ -2,6 +2,5 @@ import { type ConfigLayer } from "../config.js";
2
2
  import type { SettingsProvider } from "../contracts.js";
3
3
  import { type NodeConfigFile } from "./config.js";
4
4
  export type NodeSettingsFile = NodeConfigFile;
5
- export declare function defaultUserSettingsPath(appName?: string): string;
6
5
  export declare function readSettingsFile(path: string): Promise<ConfigLayer["config"]>;
7
6
  export declare function loadSettingsFiles(files: readonly NodeSettingsFile[]): Promise<SettingsProvider>;
@@ -1,11 +1,6 @@
1
- import { homedir } from "node:os";
2
- import { join } from "node:path";
3
1
  import { mergeConfigLayers } from "../config.js";
4
2
  import { createStaticSettingsProvider } from "../settings.js";
5
3
  import { isNodeErrorCode, readConfigFile } from "./config.js";
6
- export function defaultUserSettingsPath(appName = "prism") {
7
- return join(homedir(), ".config", appName, "settings.json");
8
- }
9
4
  export function readSettingsFile(path) {
10
5
  return readConfigFile(path);
11
6
  }