theorum 0.1.4 → 0.1.6

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 (191) hide show
  1. package/docs/AGENT_PROFILE_CONTRACT.md +2 -2
  2. package/esm/_dnt.polyfills.d.ts +110 -0
  3. package/esm/_dnt.polyfills.js +144 -0
  4. package/esm/_dnt.shims.d.ts +5 -0
  5. package/esm/_dnt.shims.js +61 -0
  6. package/{mod.ts → esm/mod.d.ts} +17 -57
  7. package/esm/mod.js +50 -0
  8. package/esm/package.json +3 -0
  9. package/esm/src/cli/commands/profile.d.ts +2 -0
  10. package/esm/src/cli/commands/profile.js +53 -0
  11. package/esm/src/cli/commands/run.d.ts +10 -0
  12. package/esm/src/cli/commands/run.js +55 -0
  13. package/esm/src/cli/commands/test.d.ts +15 -0
  14. package/esm/src/cli/commands/test.js +140 -0
  15. package/esm/src/cli/index.d.ts +4 -0
  16. package/esm/src/cli/index.js +148 -0
  17. package/esm/src/cli/matrix/fixtures.d.ts +13 -0
  18. package/esm/src/cli/matrix/fixtures.js +77 -0
  19. package/esm/src/cli/matrix/synthesizer.d.ts +29 -0
  20. package/esm/src/cli/matrix/synthesizer.js +187 -0
  21. package/esm/src/guardrails/error.d.ts +45 -0
  22. package/esm/src/guardrails/error.js +149 -0
  23. package/esm/src/guardrails/injection.d.ts +12 -0
  24. package/esm/src/guardrails/injection.js +220 -0
  25. package/esm/src/guardrails/mod.d.ts +16 -0
  26. package/esm/src/guardrails/mod.js +15 -0
  27. package/esm/src/guardrails/quota.d.ts +10 -0
  28. package/esm/src/guardrails/quota.js +64 -0
  29. package/esm/src/guardrails/sanitize.d.ts +22 -0
  30. package/esm/src/guardrails/sanitize.js +133 -0
  31. package/esm/src/guardrails/sensitive.d.ts +12 -0
  32. package/esm/src/guardrails/sensitive.js +88 -0
  33. package/esm/src/host/mint-trace.d.ts +27 -0
  34. package/esm/src/host/mint-trace.js +33 -0
  35. package/esm/src/host/mod.d.ts +13 -0
  36. package/{src/host/mod.ts → esm/src/host/mod.js} +3 -11
  37. package/esm/src/host/reply.d.ts +14 -0
  38. package/esm/src/host/reply.js +27 -0
  39. package/esm/src/kernel/engine/boundary.d.ts +10 -0
  40. package/esm/src/kernel/engine/boundary.js +55 -0
  41. package/esm/src/kernel/engine/delta.d.ts +8 -0
  42. package/esm/src/kernel/engine/delta.js +389 -0
  43. package/esm/src/kernel/engine/hash.d.ts +1 -0
  44. package/esm/src/kernel/engine/hash.js +9 -0
  45. package/esm/src/kernel/engine/record.d.ts +2 -0
  46. package/esm/src/kernel/engine/record.js +7 -0
  47. package/esm/src/kernel/engine/repair.d.ts +7 -0
  48. package/esm/src/kernel/engine/repair.js +38 -0
  49. package/esm/src/kernel/engine/runner/gates.d.ts +4 -0
  50. package/esm/src/kernel/engine/runner/gates.js +208 -0
  51. package/esm/src/kernel/engine/runner/mod.d.ts +14 -0
  52. package/esm/src/kernel/engine/runner/mod.js +103 -0
  53. package/esm/src/kernel/engine/runner/schema-validation.d.ts +22 -0
  54. package/esm/src/kernel/engine/runner/schema-validation.js +113 -0
  55. package/esm/src/kernel/engine/runner/state.d.ts +16 -0
  56. package/esm/src/kernel/engine/runner/state.js +8 -0
  57. package/esm/src/kernel/engine/runner/steps.d.ts +15 -0
  58. package/esm/src/kernel/engine/runner/steps.js +127 -0
  59. package/esm/src/kernel/engine/runner/stream.d.ts +11 -0
  60. package/esm/src/kernel/engine/runner/stream.js +70 -0
  61. package/esm/src/kernel/engine/runner/tokens.d.ts +3 -0
  62. package/esm/src/kernel/engine/runner/tokens.js +38 -0
  63. package/esm/src/kernel/engine/runner/tools.d.ts +13 -0
  64. package/esm/src/kernel/engine/runner/tools.js +192 -0
  65. package/{src/kernel/engine/runner.ts → esm/src/kernel/engine/runner.d.ts} +1 -2
  66. package/esm/src/kernel/engine/runner.js +6 -0
  67. package/esm/src/kernel/engine/tree.d.ts +2 -0
  68. package/esm/src/kernel/engine/tree.js +17 -0
  69. package/esm/src/kernel/mod.d.ts +18 -0
  70. package/esm/src/kernel/mod.js +16 -0
  71. package/esm/src/kernel/registry/attachments.d.ts +16 -0
  72. package/esm/src/kernel/registry/attachments.js +156 -0
  73. package/esm/src/kernel/registry/catalog.d.ts +31 -0
  74. package/esm/src/kernel/registry/catalog.js +135 -0
  75. package/esm/src/kernel/registry/ingress.d.ts +13 -0
  76. package/esm/src/kernel/registry/ingress.js +163 -0
  77. package/esm/src/kernel/registry/profiles.d.ts +34 -0
  78. package/esm/src/kernel/registry/profiles.js +120 -0
  79. package/esm/src/kernel/registry/provider-request.d.ts +4 -0
  80. package/esm/src/kernel/registry/provider-request.js +25 -0
  81. package/esm/src/kernel/registry/resolve.d.ts +19 -0
  82. package/esm/src/kernel/registry/resolve.js +217 -0
  83. package/esm/src/kernel/registry/schemas.d.ts +14 -0
  84. package/esm/src/kernel/registry/schemas.js +23 -0
  85. package/esm/src/kernel/registry/tools.d.ts +12 -0
  86. package/esm/src/kernel/registry/tools.js +36 -0
  87. package/{src/kernel/registry/vault.ts → esm/src/kernel/registry/vault.d.ts} +2 -17
  88. package/esm/src/kernel/registry/vault.js +18 -0
  89. package/esm/src/kernel/types.d.ts +528 -0
  90. package/esm/src/kernel/types.js +10 -0
  91. package/esm/src/observability/mod.d.ts +12 -0
  92. package/{src/observability/mod.ts → esm/src/observability/mod.js} +2 -11
  93. package/esm/src/observability/spans.d.ts +16 -0
  94. package/esm/src/observability/spans.js +56 -0
  95. package/esm/src/observability/trace-attach.d.ts +16 -0
  96. package/esm/src/observability/trace-attach.js +67 -0
  97. package/esm/src/observability/trace-record.d.ts +113 -0
  98. package/esm/src/observability/trace-record.js +143 -0
  99. package/esm/src/observability/trace-usage.d.ts +3 -0
  100. package/esm/src/observability/trace-usage.js +32 -0
  101. package/esm/src/observability/trace.d.ts +23 -0
  102. package/esm/src/observability/trace.js +121 -0
  103. package/esm/src/presets/google.d.ts +50 -0
  104. package/esm/src/presets/google.js +96 -0
  105. package/esm/src/presets/mod.d.ts +11 -0
  106. package/esm/src/presets/mod.js +10 -0
  107. package/esm/src/providers/create-provider.d.ts +29 -0
  108. package/esm/src/providers/create-provider.js +38 -0
  109. package/esm/src/providers/gemini-tape.d.ts +2 -0
  110. package/esm/src/providers/gemini-tape.js +46 -0
  111. package/esm/src/providers/google-tap.d.ts +3 -0
  112. package/esm/src/providers/google-tap.js +48 -0
  113. package/esm/src/providers/interactions.d.ts +5 -0
  114. package/esm/src/providers/interactions.js +153 -0
  115. package/esm/src/providers/keys.d.ts +19 -0
  116. package/esm/src/providers/keys.js +129 -0
  117. package/esm/src/providers/mod.d.ts +12 -0
  118. package/{src/providers/mod.ts → esm/src/providers/mod.js} +2 -4
  119. package/esm/src/providers/openrouter-mod.d.ts +13 -0
  120. package/{src/providers/openrouter-mod.ts → esm/src/providers/openrouter-mod.js} +3 -7
  121. package/esm/src/providers/openrouter-payload.d.ts +32 -0
  122. package/esm/src/providers/openrouter-payload.js +179 -0
  123. package/esm/src/providers/openrouter.d.ts +15 -0
  124. package/esm/src/providers/openrouter.js +589 -0
  125. package/esm/src/providers/pcm.d.ts +7 -0
  126. package/esm/src/providers/pcm.js +35 -0
  127. package/esm/src/providers/provider.d.ts +15 -0
  128. package/esm/src/providers/provider.js +160 -0
  129. package/esm/src/providers/speech.d.ts +23 -0
  130. package/esm/src/providers/speech.js +125 -0
  131. package/esm/src/providers/sse.d.ts +7 -0
  132. package/esm/src/providers/sse.js +53 -0
  133. package/package.json +45 -36
  134. package/deno.json +0 -57
  135. package/deno.lock +0 -469
  136. package/src/cli/commands/profile.ts +0 -57
  137. package/src/cli/commands/run.ts +0 -66
  138. package/src/cli/commands/test.ts +0 -195
  139. package/src/cli/index.ts +0 -161
  140. package/src/cli/matrix/fixtures.ts +0 -96
  141. package/src/cli/matrix/synthesizer.ts +0 -240
  142. package/src/guardrails/error.ts +0 -142
  143. package/src/guardrails/injection.ts +0 -254
  144. package/src/guardrails/mod.ts +0 -40
  145. package/src/guardrails/quota.ts +0 -87
  146. package/src/guardrails/sanitize.ts +0 -165
  147. package/src/guardrails/sensitive.ts +0 -96
  148. package/src/host/mint-trace.ts +0 -54
  149. package/src/host/reply.ts +0 -32
  150. package/src/kernel/engine/assert.ts +0 -29
  151. package/src/kernel/engine/boundary.ts +0 -75
  152. package/src/kernel/engine/delta.ts +0 -440
  153. package/src/kernel/engine/hash.ts +0 -11
  154. package/src/kernel/engine/record.ts +0 -8
  155. package/src/kernel/engine/repair.ts +0 -56
  156. package/src/kernel/engine/runner/gates.ts +0 -338
  157. package/src/kernel/engine/runner/mod.ts +0 -135
  158. package/src/kernel/engine/runner/state.ts +0 -31
  159. package/src/kernel/engine/runner/steps.ts +0 -183
  160. package/src/kernel/engine/runner/stream.ts +0 -83
  161. package/src/kernel/engine/runner/tokens.ts +0 -47
  162. package/src/kernel/engine/runner/tools.ts +0 -266
  163. package/src/kernel/engine/tree.ts +0 -18
  164. package/src/kernel/mod.ts +0 -39
  165. package/src/kernel/registry/attachments.ts +0 -195
  166. package/src/kernel/registry/catalog.ts +0 -181
  167. package/src/kernel/registry/ingress.ts +0 -223
  168. package/src/kernel/registry/profiles.ts +0 -165
  169. package/src/kernel/registry/provider-request.ts +0 -31
  170. package/src/kernel/registry/resolve.ts +0 -290
  171. package/src/kernel/registry/schemas.ts +0 -29
  172. package/src/kernel/registry/tools.ts +0 -45
  173. package/src/kernel/types.ts +0 -576
  174. package/src/observability/spans.ts +0 -70
  175. package/src/observability/trace-attach.ts +0 -96
  176. package/src/observability/trace-record.ts +0 -254
  177. package/src/observability/trace-usage.ts +0 -36
  178. package/src/observability/trace.ts +0 -143
  179. package/src/presets/google.ts +0 -147
  180. package/src/presets/mod.ts +0 -24
  181. package/src/providers/create-provider.ts +0 -64
  182. package/src/providers/gemini-tape.ts +0 -59
  183. package/src/providers/google-tap.ts +0 -57
  184. package/src/providers/interactions.ts +0 -182
  185. package/src/providers/keys.ts +0 -182
  186. package/src/providers/openrouter-payload.ts +0 -232
  187. package/src/providers/openrouter.ts +0 -758
  188. package/src/providers/pcm.ts +0 -37
  189. package/src/providers/provider.ts +0 -206
  190. package/src/providers/speech.ts +0 -180
  191. package/src/providers/sse.ts +0 -59
@@ -0,0 +1,179 @@
1
+ /**
2
+ * OpenRouter payload builder.
3
+ *
4
+ * Converts THEORUM provider requests into OpenAI-compatible chat completion
5
+ * payloads for OpenRouter and compatible gateways.
6
+ *
7
+ * @module
8
+ */
9
+ import { getTool } from '../kernel/registry/catalog.js';
10
+ import { getStructured } from '../kernel/registry/schemas.js';
11
+ /**
12
+ * Resolve a THEORUM model id to an OpenRouter model string.
13
+ * Prefer `openRouterId` / `apiId` from the profile model spec on the request.
14
+ */
15
+ function resolveOpenRouterModel(modelId, customMap, wire) {
16
+ if (customMap?.[modelId]) {
17
+ return customMap[modelId];
18
+ }
19
+ if (wire?.openRouterId) {
20
+ return wire.openRouterId;
21
+ }
22
+ if (wire?.apiId?.includes('/')) {
23
+ return wire.apiId;
24
+ }
25
+ if (wire?.apiId) {
26
+ return `google/${wire.apiId}`;
27
+ }
28
+ if (String(modelId).includes('/')) {
29
+ return String(modelId);
30
+ }
31
+ return String(modelId);
32
+ }
33
+ /** Map THEORUM thinking level to OpenRouter/OpenAI `reasoning.effort`. */
34
+ function mapThinkingEffort(thinking) {
35
+ return thinking;
36
+ }
37
+ function wireAudioPart(part) {
38
+ let format = 'mp3';
39
+ if (part.mimeType.includes('wav')) {
40
+ format = 'wav';
41
+ }
42
+ return {
43
+ type: 'input_audio',
44
+ input_audio: {
45
+ data: part.data,
46
+ format,
47
+ },
48
+ };
49
+ }
50
+ function wireMessageContent(parts) {
51
+ const isAllText = parts.every((p) => p.type === 'text');
52
+ if (isAllText) {
53
+ return parts
54
+ .map((p) => {
55
+ if (p.type === 'text') {
56
+ return p.text;
57
+ }
58
+ return '';
59
+ })
60
+ .join('\n');
61
+ }
62
+ return parts.map((part) => {
63
+ if (part.type === 'text') {
64
+ return { type: 'text', text: part.text };
65
+ }
66
+ if (part.type === 'image') {
67
+ return {
68
+ type: 'image_url',
69
+ image_url: { url: `data:${part.mimeType};base64,${part.data}` },
70
+ };
71
+ }
72
+ if (part.type === 'audio') {
73
+ return wireAudioPart(part);
74
+ }
75
+ return { type: 'text', text: '' };
76
+ });
77
+ }
78
+ function wireHistoryMessage(msg) {
79
+ let content = msg.content ?? '';
80
+ if (msg.parts && msg.parts.length > 0) {
81
+ content = wireMessageContent(msg.parts);
82
+ }
83
+ const wired = {
84
+ role: msg.role,
85
+ content,
86
+ };
87
+ if (msg.tool_calls && msg.tool_calls.length > 0) {
88
+ wired.tool_calls = msg.tool_calls;
89
+ }
90
+ if (msg.tool_call_id) {
91
+ wired.tool_call_id = msg.tool_call_id;
92
+ }
93
+ if (msg.name) {
94
+ wired.name = msg.name;
95
+ }
96
+ return wired;
97
+ }
98
+ function wireTools(dynamicTools) {
99
+ if (!dynamicTools || dynamicTools.length === 0) {
100
+ return [];
101
+ }
102
+ return dynamicTools.map((t) => ({
103
+ type: 'function',
104
+ function: {
105
+ name: t.name,
106
+ description: t.description ?? '',
107
+ parameters: t.parameters ?? { type: 'object', properties: {} },
108
+ },
109
+ }));
110
+ }
111
+ function buildMessages(req) {
112
+ const messages = [];
113
+ if (req.system) {
114
+ messages.push({ role: 'system', content: req.system });
115
+ }
116
+ if (req.history && req.history.length > 0) {
117
+ for (const h of req.history) {
118
+ messages.push(wireHistoryMessage(h));
119
+ }
120
+ }
121
+ if (req.input.length > 0) {
122
+ messages.push({
123
+ role: 'user',
124
+ content: wireMessageContent(req.input),
125
+ });
126
+ }
127
+ return messages;
128
+ }
129
+ function resolveResponseFormat(structured) {
130
+ if (!structured) {
131
+ return undefined;
132
+ }
133
+ const spec = getStructured(structured);
134
+ if (!spec.jsonSchema) {
135
+ return undefined;
136
+ }
137
+ return {
138
+ type: 'json_schema',
139
+ json_schema: {
140
+ name: String(structured),
141
+ strict: true,
142
+ schema: spec.jsonSchema,
143
+ },
144
+ };
145
+ }
146
+ /** Convert a provider-neutral request into an OpenRouter chat completion payload. */
147
+ function toOpenRouterPayload(req, config) {
148
+ const model = resolveOpenRouterModel(req.model, config.modelMap, {
149
+ apiId: req.apiId,
150
+ openRouterId: req.openRouterId,
151
+ });
152
+ const messages = buildMessages(req);
153
+ const payload = {
154
+ model,
155
+ stream: true,
156
+ messages,
157
+ temperature: req.temperature,
158
+ max_tokens: req.maxOutputTokens,
159
+ };
160
+ const effort = mapThinkingEffort(req.thinking);
161
+ payload.reasoning = { effort };
162
+ const responseFormat = resolveResponseFormat(req.structured);
163
+ if (responseFormat) {
164
+ payload.response_format = responseFormat;
165
+ }
166
+ const tools = wireTools(req.dynamicTools);
167
+ if (tools.length > 0) {
168
+ payload.tools = tools;
169
+ }
170
+ const plugins = req.builtins
171
+ .map((id) => getTool(id)?.openRouterPlugin)
172
+ .filter((id) => Boolean(id))
173
+ .map((id) => ({ id }));
174
+ if (plugins.length > 0) {
175
+ payload.plugins = plugins;
176
+ }
177
+ return payload;
178
+ }
179
+ export { resolveOpenRouterModel, toOpenRouterPayload };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * OpenRouter provider adapter powered by Vercel AI SDK Core.
3
+ *
4
+ * THEORUM keeps the public `ModelProvider` and `TurnEvent` contract; AI SDK
5
+ * owns the OpenRouter call, stream parsing, provider compatibility, and tool
6
+ * call normalization.
7
+ *
8
+ * @module
9
+ */
10
+ import type { ModelProvider } from '../kernel/types.js';
11
+ import { type OpenRouterConfig, resolveOpenRouterModel, toOpenRouterPayload } from './openrouter-payload.js';
12
+ /** Create a `ModelProvider` backed by OpenRouter through AI SDK Core. */
13
+ declare function createOpenRouterProvider(config?: OpenRouterConfig): ModelProvider;
14
+ export type { OpenRouterConfig };
15
+ export { createOpenRouterProvider, resolveOpenRouterModel, toOpenRouterPayload };