@theoremjs/react 0.0.0-stage → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +772 -2
- package/client/attachment-hover-preview.d.ts +11 -0
- package/client/attachment-hover-preview.js +36 -0
- package/client/audio-level.d.ts +5 -0
- package/client/audio-level.js +24 -0
- package/client/composer-attachments.d.ts +30 -0
- package/client/composer-attachments.js +33 -0
- package/client/composer-drawer.d.ts +19 -0
- package/client/composer-drawer.js +15 -0
- package/client/composer-hints.d.ts +25 -0
- package/client/composer-hints.js +20 -0
- package/client/composer-primary.d.ts +16 -0
- package/client/composer-primary.js +25 -0
- package/client/decision-images.d.ts +76 -0
- package/client/decision-images.js +139 -0
- package/client/decision-transport.d.ts +70 -0
- package/client/decision-transport.js +175 -0
- package/client/decode-composer-draft.d.ts +11 -0
- package/client/decode-composer-draft.js +12 -0
- package/client/embedding-input.d.ts +84 -0
- package/client/embedding-input.js +194 -0
- package/client/embedding-space.d.ts +82 -0
- package/client/embedding-space.js +389 -0
- package/client/embedding-transport.d.ts +40 -0
- package/client/embedding-transport.js +71 -0
- package/client/encode-composer-draft.d.ts +9 -0
- package/client/encode-composer-draft.js +34 -0
- package/client/encode-files.d.ts +18 -0
- package/client/encode-files.js +54 -0
- package/client/failure.d.ts +29 -0
- package/client/failure.js +34 -0
- package/client/generation-selection.d.ts +15 -0
- package/client/generation-selection.js +24 -0
- package/client/host-call.d.ts +51 -0
- package/client/host-call.js +47 -0
- package/client/host-transport.d.ts +70 -0
- package/client/host-transport.js +75 -0
- package/client/image-output.d.ts +6 -0
- package/client/image-output.js +13 -0
- package/client/index.d.ts +28 -0
- package/client/index.js +22 -0
- package/client/ink-waveform.d.ts +17 -0
- package/client/ink-waveform.js +68 -0
- package/client/live/apply-live-turn-tool-event.d.ts +14 -0
- package/client/live/apply-live-turn-tool-event.js +39 -0
- package/client/live/live-captions.d.ts +53 -0
- package/client/live/live-captions.js +174 -0
- package/client/live/live-mic-forward.d.ts +30 -0
- package/client/live/live-mic-forward.js +46 -0
- package/client/live/live-page-tool.d.ts +34 -0
- package/client/live/live-page-tool.js +11 -0
- package/client/live/live-state.d.ts +13 -0
- package/client/live/live-state.js +22 -0
- package/client/live/live-tool.d.ts +11 -0
- package/client/live/live-tool.js +1 -0
- package/client/live/live-video.d.ts +10 -0
- package/client/live/live-video.js +71 -0
- package/client/live/run-live-tool-call.d.ts +22 -0
- package/client/live/run-live-tool-call.js +70 -0
- package/client/live/use-live-caption-log.d.ts +17 -0
- package/client/live/use-live-caption-log.js +51 -0
- package/client/live-client.d.ts +189 -0
- package/client/live-client.js +829 -0
- package/client/live-errors.d.ts +2 -0
- package/client/live-errors.js +9 -0
- package/client/live-messages.d.ts +148 -0
- package/client/live-messages.js +100 -0
- package/client/mic-capture.d.ts +4 -0
- package/client/mic-capture.js +6 -0
- package/client/oauth-popup.d.ts +26 -0
- package/client/oauth-popup.js +30 -0
- package/client/page-dispatch.d.ts +15 -0
- package/client/page-dispatch.js +63 -0
- package/client/pcm-downsample.d.ts +4 -0
- package/client/pcm-downsample.js +45 -0
- package/client/run-commit.d.ts +34 -0
- package/client/run-commit.js +49 -0
- package/client/run-session.d.ts +79 -0
- package/client/run-session.js +207 -0
- package/client/schema-fields.d.ts +63 -0
- package/client/schema-fields.js +199 -0
- package/client/shaped-data.d.ts +118 -0
- package/client/shaped-data.js +343 -0
- package/client/source-citations.d.ts +13 -0
- package/client/source-citations.js +56 -0
- package/client/space-geometry.d.ts +39 -0
- package/client/space-geometry.js +183 -0
- package/client/state-fields.d.ts +16 -0
- package/client/state-fields.js +44 -0
- package/client/tool-result.d.ts +78 -0
- package/client/tool-result.js +293 -0
- package/client/tool-resume.d.ts +50 -0
- package/client/tool-resume.js +14 -0
- package/client/trace-feed.d.ts +13 -0
- package/client/trace-feed.js +18 -0
- package/client/trace-story.d.ts +163 -0
- package/client/trace-story.js +440 -0
- package/client/trace-view.d.ts +130 -0
- package/client/trace-view.js +333 -0
- package/client/transcript-groups.d.ts +140 -0
- package/client/transcript-groups.js +217 -0
- package/client/transcript-schema.d.ts +10 -0
- package/client/transcript-schema.js +120 -0
- package/client/transcript-scroll.d.ts +7 -0
- package/client/transcript-scroll.js +6 -0
- package/client/transport.d.ts +264 -0
- package/client/transport.js +330 -0
- package/client/turn-client.d.ts +44 -0
- package/client/turn-client.js +88 -0
- package/client/voice-label.d.ts +2 -0
- package/client/voice-label.js +15 -0
- package/client/voice-recorder.d.ts +27 -0
- package/client/voice-recorder.js +162 -0
- package/client/wire-line.d.ts +56 -0
- package/client/wire-line.js +90 -0
- package/client/worklets/mic-capture.js +16 -0
- package/components/InkWaveform.d.ts +21 -0
- package/components/InkWaveform.js +131 -0
- package/components/live/use-live-runner-controls.d.ts +47 -0
- package/components/live/use-live-runner-controls.js +96 -0
- package/components/live/use-live-runner-model.d.ts +49 -0
- package/components/live/use-live-runner-model.js +190 -0
- package/components/live/use-live-runner-ui.d.ts +67 -0
- package/components/live/use-live-runner-ui.js +167 -0
- package/components/live/use-live-session-client.d.ts +41 -0
- package/components/live/use-live-session-client.js +126 -0
- package/components/use-composer-voice.d.ts +28 -0
- package/components/use-composer-voice.js +90 -0
- package/components/use-editor-selection.d.ts +3 -0
- package/components/use-editor-selection.js +19 -0
- package/components/use-voice-playback.d.ts +17 -0
- package/components/use-voice-playback.js +68 -0
- package/hooks/use-described.d.ts +12 -0
- package/hooks/use-described.js +25 -0
- package/hooks/use-embedding-index.d.ts +27 -0
- package/hooks/use-embedding-index.js +43 -0
- package/hooks/use-one-call.d.ts +31 -0
- package/hooks/use-one-call.js +76 -0
- package/hooks/use-page-tool-warnings.d.ts +6 -0
- package/hooks/use-page-tool-warnings.js +25 -0
- package/hooks/use-second-ticker.d.ts +2 -0
- package/hooks/use-second-ticker.js +13 -0
- package/hooks/use-theorem-chat-actions.d.ts +79 -0
- package/hooks/use-theorem-chat-actions.js +287 -0
- package/hooks/use-theorem-chat-state.d.ts +66 -0
- package/hooks/use-theorem-chat-state.js +122 -0
- package/hooks/use-theorem-chat.d.ts +97 -0
- package/hooks/use-theorem-chat.js +528 -0
- package/hooks/use-theorem-decision.d.ts +18 -0
- package/hooks/use-theorem-decision.js +12 -0
- package/hooks/use-theorem-embedding.d.ts +18 -0
- package/hooks/use-theorem-embedding.js +12 -0
- package/hooks/use-theorem-host.d.ts +45 -0
- package/hooks/use-theorem-host.js +135 -0
- package/hooks/use-theorem-interface.d.ts +22 -0
- package/hooks/use-theorem-interface.js +15 -0
- package/hooks/use-trace-records.d.ts +4 -0
- package/hooks/use-trace-records.js +7 -0
- package/index.d.ts +17 -0
- package/index.js +17 -0
- package/live.d.ts +9 -0
- package/live.js +10 -0
- package/package.json +74 -4
- package/server/checkpoint-ownership.d.ts +6 -0
- package/server/checkpoint-ownership.js +42 -0
- package/server/conversation-store.d.ts +92 -0
- package/server/conversation-store.js +131 -0
- package/server/conversation.d.ts +193 -0
- package/server/conversation.js +552 -0
- package/server/credential-store.d.ts +24 -0
- package/server/credential-store.js +14 -0
- package/server/decision-handler.d.ts +42 -0
- package/server/decision-handler.js +46 -0
- package/server/embedding-handler.d.ts +33 -0
- package/server/embedding-handler.js +45 -0
- package/server/handler.d.ts +152 -0
- package/server/handler.js +771 -0
- package/server/json-response.d.ts +2 -0
- package/server/json-response.js +7 -0
- package/server/mod.d.ts +25 -0
- package/server/mod.js +23 -0
- package/server/page-dispatch.d.ts +22 -0
- package/server/page-dispatch.js +127 -0
- package/server/request-body.d.ts +2 -0
- package/server/request-body.js +42 -0
- package/server/request-check.d.ts +21 -0
- package/server/request-check.js +49 -0
- package/server/session-authority.d.ts +8 -0
- package/server/session-authority.js +78 -0
- package/server/session-boundary.d.ts +26 -0
- package/server/session-boundary.js +64 -0
- package/server/session-identity.d.ts +16 -0
- package/server/session-identity.js +41 -0
- package/server/session-limits.d.ts +12 -0
- package/server/session-limits.js +59 -0
- package/server/session-store.d.ts +123 -0
- package/server/session-store.js +264 -0
- package/server/single-action.d.ts +21 -0
- package/server/single-action.js +30 -0
- package/server/steer-inbox.d.ts +35 -0
- package/server/steer-inbox.js +52 -0
- package/server/tool-operations.d.ts +6 -0
- package/server/tool-operations.js +132 -0
- package/server/turn-input.d.ts +10 -0
- package/server/turn-input.js +29 -0
- package/styles/ink-controls.css +134 -0
- package/ui/CardWall.d.ts +10 -0
- package/ui/CardWall.js +61 -0
- package/ui/ChatComposerBar.d.ts +62 -0
- package/ui/ChatComposerBar.js +306 -0
- package/ui/ChatTranscript.d.ts +43 -0
- package/ui/ChatTranscript.js +527 -0
- package/ui/ConsoleFrame.d.ts +104 -0
- package/ui/ConsoleFrame.js +146 -0
- package/ui/DecisionAnswers.d.ts +53 -0
- package/ui/DecisionAnswers.js +233 -0
- package/ui/DecisionImages.d.ts +16 -0
- package/ui/DecisionImages.js +46 -0
- package/ui/EmbeddingDocuments.d.ts +78 -0
- package/ui/EmbeddingDocuments.js +278 -0
- package/ui/EmbeddingQuery.d.ts +27 -0
- package/ui/EmbeddingQuery.js +95 -0
- package/ui/EmbeddingResults.d.ts +41 -0
- package/ui/EmbeddingResults.js +165 -0
- package/ui/EmbeddingSpace.d.ts +26 -0
- package/ui/EmbeddingSpace.js +106 -0
- package/ui/LiveCaptionsPanel.d.ts +22 -0
- package/ui/LiveCaptionsPanel.js +27 -0
- package/ui/LiveRunner.d.ts +30 -0
- package/ui/LiveRunner.js +180 -0
- package/ui/PaneState.d.ts +33 -0
- package/ui/PaneState.js +50 -0
- package/ui/SchemaFields.d.ts +10 -0
- package/ui/SchemaFields.js +150 -0
- package/ui/ShapedData.d.ts +11 -0
- package/ui/ShapedData.js +196 -0
- package/ui/SidePanel.d.ts +126 -0
- package/ui/SidePanel.js +123 -0
- package/ui/StateFields.d.ts +44 -0
- package/ui/StateFields.js +139 -0
- package/ui/TheoremChat.d.ts +122 -0
- package/ui/TheoremChat.js +134 -0
- package/ui/TheoremDecision.d.ts +30 -0
- package/ui/TheoremDecision.js +130 -0
- package/ui/TheoremEmbedding.d.ts +27 -0
- package/ui/TheoremEmbedding.js +122 -0
- package/ui/TheoremHost.d.ts +55 -0
- package/ui/TheoremHost.js +240 -0
- package/ui/ToolGateCard.d.ts +32 -0
- package/ui/ToolGateCard.js +107 -0
- package/ui/ToolResult.d.ts +10 -0
- package/ui/ToolResult.js +62 -0
- package/ui/ToolResultCharts.d.ts +5 -0
- package/ui/ToolResultCharts.js +103 -0
- package/ui/TraceCharts.d.ts +13 -0
- package/ui/TraceCharts.js +266 -0
- package/ui/TraceGuardrails.d.ts +11 -0
- package/ui/TraceGuardrails.js +74 -0
- package/ui/TraceInspector.d.ts +16 -0
- package/ui/TraceInspector.js +206 -0
- package/ui/TraceInspectorPanel.d.ts +46 -0
- package/ui/TraceInspectorPanel.js +95 -0
- package/ui/TraceOverview.d.ts +38 -0
- package/ui/TraceOverview.js +126 -0
- package/ui/TraceSpanDetail.d.ts +10 -0
- package/ui/TraceSpanDetail.js +190 -0
- package/ui/TraceStory.d.ts +20 -0
- package/ui/TraceStory.js +108 -0
- package/ui/TraceValues.d.ts +36 -0
- package/ui/TraceValues.js +123 -0
- package/ui/TraceWaterfall.d.ts +13 -0
- package/ui/TraceWaterfall.js +135 -0
- package/ui/VoiceNote.d.ts +12 -0
- package/ui/VoiceNote.js +28 -0
- package/ui/approval-heading.d.ts +4 -0
- package/ui/approval-heading.js +9 -0
- package/ui/arrive.d.ts +18 -0
- package/ui/arrive.js +46 -0
- package/ui/built/theme.css +792 -0
- package/ui/built/theme.css.d.ts +9 -0
- package/ui/built/theorem.d.ts +13 -0
- package/ui/built/theorem.js +660 -0
- package/ui/built/theorem.variants.d.ts +22 -0
- package/ui/code-language.d.ts +12 -0
- package/ui/code-language.js +50 -0
- package/ui/disclosure-motion.d.ts +6 -0
- package/ui/disclosure-motion.js +207 -0
- package/ui/embedding-space-gl.d.ts +37 -0
- package/ui/embedding-space-gl.js +663 -0
- package/ui/embedding-space-view.d.ts +8 -0
- package/ui/embedding-space-view.js +8 -0
- package/ui/glide.d.ts +7 -0
- package/ui/glide.js +44 -0
- package/ui/icons.d.ts +4 -0
- package/ui/icons.js +38 -0
- package/ui/index.d.ts +36 -0
- package/ui/index.js +39 -0
- package/ui/labels-provider.d.ts +16 -0
- package/ui/labels-provider.js +64 -0
- package/ui/labels.d.ts +1442 -0
- package/ui/labels.js +1443 -0
- package/ui/markdown-plugins.d.ts +9 -0
- package/ui/markdown-plugins.js +13 -0
- package/ui/mcp-icon.d.ts +6 -0
- package/ui/mcp-icon.js +8 -0
- package/ui/row-keys.d.ts +19 -0
- package/ui/row-keys.js +33 -0
- package/ui/theme.d.ts +10 -0
- package/ui/theme.js +13 -0
- package/ui/theorem-theme.d.ts +10 -0
- package/ui/theorem-theme.js +105 -0
- package/ui/trace-palette.d.ts +10 -0
- package/ui/trace-palette.js +10 -0
- package/ui/trace-patterns.d.ts +40 -0
- package/ui/trace-patterns.js +57 -0
- package/ui/transcript-copy-text.d.ts +4 -0
- package/ui/transcript-copy-text.js +40 -0
- package/ui/wall-columns.d.ts +8 -0
- package/ui/wall-columns.js +19 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type EmbeddingInput, type EmbeddingProfile, type EmbeddingProfileDefinition, type KeyVault, type ProviderHostOptions, type TraceSink, z } from '@theoremjs/agents';
|
|
2
|
+
import type { ClientTurnOptions } from '@theoremjs/agents/host';
|
|
3
|
+
export type TheoremEmbeddingHandlerOptions = {
|
|
4
|
+
profile: EmbeddingProfile | EmbeddingProfileDefinition;
|
|
5
|
+
vault?: KeyVault;
|
|
6
|
+
fetch?: typeof globalThis.fetch;
|
|
7
|
+
provider?: ProviderHostOptions | ((ctx: {
|
|
8
|
+
request: Request;
|
|
9
|
+
model?: string;
|
|
10
|
+
}) => ProviderHostOptions | Promise<ProviderHostOptions>);
|
|
11
|
+
sink?: TraceSink;
|
|
12
|
+
metadata?: (request: Request) => Record<string, unknown> | undefined;
|
|
13
|
+
clientEvents?: ClientTurnOptions;
|
|
14
|
+
onError?: (err: unknown, ctx: {
|
|
15
|
+
request: Request;
|
|
16
|
+
}) => void;
|
|
17
|
+
};
|
|
18
|
+
/** The body an embedding request posts: the input, and optionally the model and the task. */
|
|
19
|
+
export declare const embedBodySchema: z.ZodObject<{
|
|
20
|
+
input: z.ZodUnknown;
|
|
21
|
+
model: z.ZodOptional<z.ZodString>;
|
|
22
|
+
task: z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
document: "document";
|
|
24
|
+
query: "query";
|
|
25
|
+
}>>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
/** The body as the embedding request `runEmbedding` takes, less its profile. */
|
|
28
|
+
export declare function embedRequest(body: z.infer<typeof embedBodySchema>): {
|
|
29
|
+
task?: "document" | "query" | undefined;
|
|
30
|
+
model?: string | undefined;
|
|
31
|
+
input: EmbeddingInput | readonly EmbeddingInput[];
|
|
32
|
+
};
|
|
33
|
+
export declare function createTheoremEmbeddingHandler(options: TheoremEmbeddingHandlerOptions): (request: Request) => Promise<Response>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { defineProfile, registerProfile, runEmbedding, z, } from '@theoremjs/agents';
|
|
2
|
+
import { embeddingInterface } from "../client/embedding-transport.js";
|
|
3
|
+
import { readBody } from "./handler.js";
|
|
4
|
+
import { singleActionHandler } from "./single-action.js";
|
|
5
|
+
/** The body an embedding request posts: the input, and optionally the model and the task. */
|
|
6
|
+
export const embedBodySchema = z.object({
|
|
7
|
+
input: z.unknown(),
|
|
8
|
+
model: z.string().min(1).optional(),
|
|
9
|
+
task: z.enum(['query', 'document']).optional(),
|
|
10
|
+
});
|
|
11
|
+
/** The body as the embedding request `runEmbedding` takes, less its profile. */
|
|
12
|
+
export function embedRequest(body) {
|
|
13
|
+
return {
|
|
14
|
+
input: body.input,
|
|
15
|
+
...(body.model === undefined ? {} : { model: body.model }),
|
|
16
|
+
...(body.task === undefined ? {} : { task: body.task }),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function createTheoremEmbeddingHandler(options) {
|
|
20
|
+
const profile = defineProfile(options.profile);
|
|
21
|
+
if (profile.type !== 'embedding') {
|
|
22
|
+
throw new Error(`createTheoremEmbeddingHandler serves type 'embedding'; got type '${profile.type}'.`);
|
|
23
|
+
}
|
|
24
|
+
registerProfile(profile);
|
|
25
|
+
return singleActionHandler({
|
|
26
|
+
action: 'embed',
|
|
27
|
+
iface: embeddingInterface(profile),
|
|
28
|
+
labels: profile.labels,
|
|
29
|
+
clientEvents: options.clientEvents,
|
|
30
|
+
onError: options.onError,
|
|
31
|
+
}, async (request) => {
|
|
32
|
+
const body = await readBody(request, embedBodySchema);
|
|
33
|
+
const provider = typeof options.provider === 'function'
|
|
34
|
+
? await options.provider({ request, model: body.model })
|
|
35
|
+
: options.provider;
|
|
36
|
+
return runEmbedding({
|
|
37
|
+
profile: profile.id,
|
|
38
|
+
...embedRequest(body),
|
|
39
|
+
signal: request.signal,
|
|
40
|
+
metadata: options.metadata?.(request),
|
|
41
|
+
}, provider
|
|
42
|
+
? { ...provider, ...(options.sink ? { sink: options.sink } : {}) }
|
|
43
|
+
: { vault: options.vault, fetch: options.fetch, sink: options.sink });
|
|
44
|
+
});
|
|
45
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { type PageToolBroker } from './page-dispatch.ts';
|
|
2
|
+
/**
|
|
3
|
+
* One Web-standard handler that serves a Theorem chat UI for a single profile.
|
|
4
|
+
*
|
|
5
|
+
* Mount it on any framework that speaks `Request` → `Response` (Deno.serve,
|
|
6
|
+
* Hono, Next route handlers, SvelteKit, Workers) under a catch-all route:
|
|
7
|
+
*
|
|
8
|
+
* - `GET <base>` → `{ interface }` client-safe profile interface
|
|
9
|
+
* - `POST <base>/turn` → NDJSON turn events; a message sent while the reply
|
|
10
|
+
* waits on gates walks away from them first (`abandon`)
|
|
11
|
+
* - `POST <base>/invoke` → NDJSON events for the user's answer to a paused tool call
|
|
12
|
+
* - `POST <base>/steer` → inject messages into a running turn
|
|
13
|
+
* - `POST <base>/conversation` → the transcript and the paused reply, to draw
|
|
14
|
+
* - `POST <base>/rewind` → `{ conversation, view }` the conversation cut after one block, and its new ref
|
|
15
|
+
*
|
|
16
|
+
* `createTheoremHostHandler` serves a host profile the same way, with no model:
|
|
17
|
+
*
|
|
18
|
+
* - `GET <base>` → `{ interface }` the tools the page may call, with their schemas
|
|
19
|
+
* - `POST <base>/call` → NDJSON events for one call of one of those tools
|
|
20
|
+
* - `POST <base>/invoke` → NDJSON events for the user's answer to a paused call
|
|
21
|
+
* - `POST <base>/page-result` → grant-correlated browser result receipt
|
|
22
|
+
*
|
|
23
|
+
* Trust boundary: the host owns the conversation and every decision that grants
|
|
24
|
+
* authority. Two stores keep them. The `conversationStore` owns the transcript,
|
|
25
|
+
* the history the model reads and the paused reply; the browser sends only what
|
|
26
|
+
* the person did now, with the opaque ref the store issued. The session store
|
|
27
|
+
* owns which paused calls may run (and with what input) and the tool
|
|
28
|
+
* permissions — request bodies can't grant any of them. A profile whose `providerContinuation.history` is
|
|
29
|
+
* `'stateless'` keeps no conversation, and takes no store.
|
|
30
|
+
* Tool credentials are held on the server too: a key the user types at a gate
|
|
31
|
+
* is sent once and saved, and no credential is ever sent back to the browser.
|
|
32
|
+
*
|
|
33
|
+
* @module
|
|
34
|
+
*/
|
|
35
|
+
import { type Profile, type ProfileDefinition, type ProviderHostOptions, type ToolGate, type z } from '@theoremjs/agents';
|
|
36
|
+
import { type ClientTurnOptions } from '@theoremjs/agents/host';
|
|
37
|
+
import { type TheoremConversationStore } from './conversation-store.ts';
|
|
38
|
+
import { type TheoremCredentialStore } from './credential-store.ts';
|
|
39
|
+
export { theoremSession, theoremSessionId } from './session-identity.ts';
|
|
40
|
+
import { type TheoremSessionLimits } from './session-limits.ts';
|
|
41
|
+
import { type SessionToolOperation, type TheoremSessionStore } from './session-store.ts';
|
|
42
|
+
import { type SteerInbox } from './steer-inbox.ts';
|
|
43
|
+
export type TheoremRequestContext = {
|
|
44
|
+
request: Request;
|
|
45
|
+
/** Selected model id, when the client picked one. */
|
|
46
|
+
model?: string;
|
|
47
|
+
};
|
|
48
|
+
export type TheoremHandlerOptions = {
|
|
49
|
+
/** Profile to serve. Registered with the kernel when the handler is created. */
|
|
50
|
+
profile: Profile | ProfileDefinition;
|
|
51
|
+
/**
|
|
52
|
+
* Host options for registered providers, or a factory for hosts that
|
|
53
|
+
* pick keys per request (BYOK, tenant vaults). Tools are registered by the host.
|
|
54
|
+
*/
|
|
55
|
+
provider: ProviderHostOptions | ((ctx: TheoremRequestContext) => ProviderHostOptions | Promise<ProviderHostOptions>);
|
|
56
|
+
/**
|
|
57
|
+
* Opaque app context for tool handlers (`ctx.host`) — e.g. the signed-in user. A promise is
|
|
58
|
+
* awaited before the run starts, so the tools read what it settles to.
|
|
59
|
+
*/
|
|
60
|
+
host?: (request: Request) => unknown;
|
|
61
|
+
/**
|
|
62
|
+
* What the host wants the agent to know on each turn: any JSON. The profile's
|
|
63
|
+
* `inputs.context.from` must list `server`. The page's own context arrives in the
|
|
64
|
+
* request and is read as untrusted; this one is the host's.
|
|
65
|
+
*/
|
|
66
|
+
context?: (request: Request) => unknown;
|
|
67
|
+
/**
|
|
68
|
+
* Resolve the caller's session id — e.g. `${userId}:${conversationId}` from your
|
|
69
|
+
* auth. Return `undefined` to refuse the request (401). Default: an opaque id
|
|
70
|
+
* in an HttpOnly, SameSite=Lax cookie the handler issues on first contact.
|
|
71
|
+
*/
|
|
72
|
+
session?: (request: Request) => string | undefined | Promise<string | undefined>;
|
|
73
|
+
/** Default: in-process memory. Use a shared store when requests can reach different instances. */
|
|
74
|
+
sessionStore?: TheoremSessionStore;
|
|
75
|
+
/**
|
|
76
|
+
* Where the chat's conversation lives: the transcript, the history the model
|
|
77
|
+
* reads and a reply paused on gates. Required unless the profile's
|
|
78
|
+
* `providerContinuation.history` is `'stateless'`, which keeps none and takes
|
|
79
|
+
* no store. `createMemoryConversationStore` for one instance,
|
|
80
|
+
* `createSealedConversationStore` to keep nothing on the server, or your
|
|
81
|
+
* own database.
|
|
82
|
+
*/
|
|
83
|
+
conversationStore?: TheoremConversationStore;
|
|
84
|
+
/**
|
|
85
|
+
* How long a gate (permission, confirmation, sign-in) waits for its answer, in
|
|
86
|
+
* milliseconds. An answer after that is refused with `session.gate_expired`.
|
|
87
|
+
* Default: 30 minutes.
|
|
88
|
+
*/
|
|
89
|
+
gateTtlMs?: number;
|
|
90
|
+
/** Retain settled tool results in milliseconds. Default: 24 hours. */
|
|
91
|
+
operationRetentionMs?: number;
|
|
92
|
+
/** Finite per-session bounds. Unresolved authority is never evicted to satisfy them. */
|
|
93
|
+
sessionLimits?: Partial<TheoremSessionLimits>;
|
|
94
|
+
/** Maximum UTF-8 request body bytes before JSON parsing. Default: 16 MiB. */
|
|
95
|
+
maxRequestBytes?: number;
|
|
96
|
+
pageToolBroker?: PageToolBroker;
|
|
97
|
+
/** Check current resource access before disclosing a saved tool result. This callback must be read-only. */
|
|
98
|
+
authorizeToolReplay?: (context: {
|
|
99
|
+
request: Request;
|
|
100
|
+
operation: Extract<SessionToolOperation, {
|
|
101
|
+
status: 'settled';
|
|
102
|
+
}>;
|
|
103
|
+
}) => boolean | Promise<boolean>;
|
|
104
|
+
/**
|
|
105
|
+
* Tool credentials by session. Your OAuth callback route saves the token here
|
|
106
|
+
* under the same session id; every turn reads from here. Default: in-process
|
|
107
|
+
* memory — pass the same instance to your callback route.
|
|
108
|
+
*/
|
|
109
|
+
credentialStore?: TheoremCredentialStore;
|
|
110
|
+
/**
|
|
111
|
+
* The sign-in URL for an OAuth gate: begin the flow with `createOAuthPkceFlow`,
|
|
112
|
+
* binding it to `sessionId`, and return its `authorizationUrl`. Without it an
|
|
113
|
+
* OAuth gate carries no sign-in URL.
|
|
114
|
+
*/
|
|
115
|
+
authorizationUrl?: (challenge: Extract<ToolGate, {
|
|
116
|
+
kind: 'auth';
|
|
117
|
+
}>['authChallenge'], ctx: {
|
|
118
|
+
request: Request;
|
|
119
|
+
sessionId: string;
|
|
120
|
+
}) => string | Promise<string>;
|
|
121
|
+
/** Default: in-process memory. Use a shared store when turns and steers can land on different instances. */
|
|
122
|
+
steerInbox?: SteerInbox;
|
|
123
|
+
/**
|
|
124
|
+
* Who reads this host's replies, and what an event keeps for them: forwarded to `forClient`
|
|
125
|
+
* for each event and to `clientError` for a failure the handler catches.
|
|
126
|
+
*/
|
|
127
|
+
clientEvents?: ClientTurnOptions;
|
|
128
|
+
/**
|
|
129
|
+
* Called with any error the handler catches, for reporting. Users read the
|
|
130
|
+
* profile's labels wording for the error's kind, never the error itself.
|
|
131
|
+
*/
|
|
132
|
+
onError?: (err: unknown, ctx: {
|
|
133
|
+
request: Request;
|
|
134
|
+
}) => void;
|
|
135
|
+
};
|
|
136
|
+
/** A host profile runs no model, and takes no turns to steer. */
|
|
137
|
+
export type TheoremHostHandlerOptions = Omit<TheoremHandlerOptions, 'profile' | 'provider' | 'steerInbox' | 'conversationStore'> & {
|
|
138
|
+
/** Host profile to serve. Registered with the kernel when the handler is created. */
|
|
139
|
+
profile: Extract<Profile, {
|
|
140
|
+
type: 'host';
|
|
141
|
+
}> | Extract<ProfileDefinition, {
|
|
142
|
+
type: 'host';
|
|
143
|
+
}>;
|
|
144
|
+
};
|
|
145
|
+
/** A JSON body checked against `schema`; a missing or malformed field is a `request` error (400). */
|
|
146
|
+
export declare function readBody<T>(request: Request, schema: z.ZodType<T>, maxBytes?: number): Promise<T>;
|
|
147
|
+
export declare function createTheoremHandler(options: TheoremHandlerOptions): (request: Request) => Promise<Response>;
|
|
148
|
+
/**
|
|
149
|
+
* Serves a host profile to `<TheoremHost />`: the page calls the profile's tools
|
|
150
|
+
* directly, and every call runs through the kernel's gates and guardrails.
|
|
151
|
+
*/
|
|
152
|
+
export declare function createTheoremHostHandler(options: TheoremHostHandlerOptions): (request: Request) => Promise<Response>;
|