@theokit/sdk 1.9.0 → 2.0.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +32 -1
  2. package/dist/a2a/index.cjs +154 -148
  3. package/dist/a2a/index.cjs.map +1 -1
  4. package/dist/a2a/index.js +154 -148
  5. package/dist/a2a/index.js.map +1 -1
  6. package/dist/{cron-Ci_NUkUj.d.ts → cron-Bj8-Aq1O.d.ts} +1 -1
  7. package/dist/{cron-Bse1MbaE.d.cts → cron-DFG9-W17.d.cts} +1 -1
  8. package/dist/cron.cjs +135 -128
  9. package/dist/cron.cjs.map +1 -1
  10. package/dist/cron.d.cts +1 -1
  11. package/dist/cron.d.ts +1 -1
  12. package/dist/cron.js +138 -131
  13. package/dist/cron.js.map +1 -1
  14. package/dist/eval.cjs +134 -124
  15. package/dist/eval.cjs.map +1 -1
  16. package/dist/eval.d.cts +1 -0
  17. package/dist/eval.d.ts +1 -0
  18. package/dist/eval.js +137 -127
  19. package/dist/eval.js.map +1 -1
  20. package/dist/index.cjs +113 -106
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +2 -2
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.js +113 -106
  25. package/dist/index.js.map +1 -1
  26. package/dist/internal/runtime/{fork-agent.d.ts → lifecycle/fork-agent.d.ts} +1 -1
  27. package/dist/internal/runtime/{run-until.d.ts → lifecycle/run-until.d.ts} +3 -3
  28. package/dist/internal/runtime/local-agent/local-agent-bootstrap.d.ts +1 -1
  29. package/dist/internal/runtime/registry/agent-factory-registry.d.ts +12 -9
  30. package/dist/internal/scorers/llm-judge.d.ts +4 -4
  31. package/dist/internal/security/index.d.cts +1 -1
  32. package/dist/internal/security/index.d.ts +1 -1
  33. package/dist/types/fork.d.ts +1 -1
  34. package/dist/workflow.cjs +2 -2
  35. package/dist/workflow.cjs.map +1 -1
  36. package/dist/workflow.js +2 -2
  37. package/dist/workflow.js.map +1 -1
  38. package/package.json +6 -12
  39. package/dist/rag/index.cjs +0 -136
  40. package/dist/rag/index.cjs.map +0 -1
  41. package/dist/rag/index.d.cts +0 -11
  42. package/dist/rag/index.d.ts +0 -11
  43. package/dist/rag/index.js +0 -129
  44. package/dist/rag/index.js.map +0 -1
  45. package/dist/rag/reranker.d.cts +0 -26
  46. package/dist/rag/reranker.d.ts +0 -26
  47. package/dist/rag/retriever.d.cts +0 -25
  48. package/dist/rag/retriever.d.ts +0 -25
  49. package/dist/rag/text-splitter.d.cts +0 -12
  50. package/dist/rag/text-splitter.d.ts +0 -12
  51. package/dist/rag/types.d.cts +0 -37
  52. package/dist/rag/types.d.ts +0 -37
  53. package/dist/voice/index.d.ts +0 -7
  54. package/dist/voice/openai-realtime.d.ts +0 -21
  55. package/dist/voice/types.d.ts +0 -35
  56. /package/dist/internal/{errors/mappers → error-mappers}/anthropic.d.ts +0 -0
  57. /package/dist/internal/{errors/mappers → error-mappers}/bedrock.d.ts +0 -0
  58. /package/dist/internal/{errors/mappers → error-mappers}/ollama.d.ts +0 -0
  59. /package/dist/internal/{errors/mappers → error-mappers}/openai-compatible.d.ts +0 -0
  60. /package/dist/internal/{errors/mappers → error-mappers}/shared.d.ts +0 -0
  61. /package/dist/internal/{errors/mappers → error-mappers}/vertex.d.ts +0 -0
  62. /package/dist/internal/runtime/{abort-utils.d.ts → concurrency/abort-utils.d.ts} +0 -0
  63. /package/dist/internal/runtime/{async-local-storage.d.ts → concurrency/async-local-storage.d.ts} +0 -0
  64. /package/dist/internal/runtime/{async-semaphore.d.ts → concurrency/async-semaphore.d.ts} +0 -0
  65. /package/dist/internal/runtime/{default-model.d.ts → config/default-model.d.ts} +0 -0
  66. /package/dist/internal/runtime/{providers-manager.d.ts → config/providers-manager.d.ts} +0 -0
  67. /package/dist/internal/runtime/{workspace-dir.d.ts → config/workspace-dir.d.ts} +0 -0
  68. /package/dist/internal/runtime/{yaml-frontmatter.d.ts → context/yaml-frontmatter.d.ts} +0 -0
  69. /package/dist/internal/runtime/{post-run-lifecycle.d.ts → lifecycle/post-run-lifecycle.d.ts} +0 -0
  70. /package/dist/internal/runtime/{spawn-collect.d.ts → lifecycle/spawn-collect.d.ts} +0 -0
  71. /package/dist/internal/runtime/{system-prompt.d.ts → system-prompt/system-prompt.d.ts} +0 -0
  72. /package/dist/internal/runtime/{shell-tool.d.ts → tools/shell-tool.d.ts} +0 -0
  73. /package/dist/internal/runtime/{validate-agent-options.d.ts → validation/validate-agent-options.d.ts} +0 -0
  74. /package/dist/internal/runtime/{validate-response.d.ts → validation/validate-response.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theokit/sdk",
3
- "version": "1.9.0",
3
+ "version": "2.0.1",
4
4
  "description": "TypeScript SDK for the Theo agent harness — same surface, local or cloud.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/usetheo/theokit-sdk#readme",
@@ -158,16 +158,6 @@
158
158
  "default": "./dist/internal/security/index.cjs"
159
159
  }
160
160
  },
161
- "./rag": {
162
- "import": {
163
- "types": "./dist/rag/index.d.ts",
164
- "default": "./dist/rag/index.js"
165
- },
166
- "require": {
167
- "types": "./dist/rag/index.d.cts",
168
- "default": "./dist/rag/index.cjs"
169
- }
170
- },
171
161
  "./a2a": {
172
162
  "import": {
173
163
  "types": "./dist/a2a/index.d.ts",
@@ -213,7 +203,11 @@
213
203
  "theokit-migrate-config": "./bin/theokit-migrate-config.mjs",
214
204
  "theokit-migrate-memory": "./bin/theokit-migrate-memory.mjs"
215
205
  },
216
- "sideEffects": false,
206
+ "sideEffects": [
207
+ "**/agent.ts",
208
+ "**/agent.js",
209
+ "**/agent.cjs"
210
+ ],
217
211
  "peerDependencies": {
218
212
  "@lancedb/lancedb": "^0.30.0",
219
213
  "@types/ws": ">=8.0.0",
@@ -1,136 +0,0 @@
1
- 'use strict';
2
-
3
- // src/rag/reranker.ts
4
- var NoopReranker = class {
5
- async rerank(_query, chunks) {
6
- return chunks.map((c, i) => ({
7
- text: c.text,
8
- score: c.score,
9
- originalIndex: i,
10
- metadata: c.metadata
11
- }));
12
- }
13
- };
14
- var CohereReranker = class {
15
- _apiKey;
16
- _model;
17
- _mockRerank;
18
- constructor(opts) {
19
- this._apiKey = opts.apiKey;
20
- this._model = opts.model ?? "rerank-v3.5";
21
- this._mockRerank = opts._mockRerank;
22
- }
23
- async rerank(query, chunks) {
24
- if (chunks.length === 0) return [];
25
- if (this._mockRerank) {
26
- return this._mockRerank(query, chunks);
27
- }
28
- const response = await fetch("https://api.cohere.com/v2/rerank", {
29
- method: "POST",
30
- headers: {
31
- Authorization: `Bearer ${this._apiKey}`,
32
- "Content-Type": "application/json"
33
- },
34
- body: JSON.stringify({
35
- model: this._model,
36
- query,
37
- documents: chunks.map((c) => c.text),
38
- top_n: chunks.length
39
- })
40
- });
41
- if (!response.ok) {
42
- throw new Error(`Cohere rerank failed: ${response.status} ${response.statusText}`);
43
- }
44
- const data = await response.json();
45
- return data.results.map((r) => {
46
- const chunk = chunks[r.index];
47
- return {
48
- text: chunk?.text ?? "",
49
- score: r.relevance_score,
50
- originalIndex: r.index,
51
- metadata: chunk?.metadata
52
- };
53
- });
54
- }
55
- };
56
-
57
- // src/rag/retriever.ts
58
- var VectorRetriever = class {
59
- _index;
60
- _defaultTopK;
61
- constructor(opts) {
62
- this._index = opts.index;
63
- this._defaultTopK = opts.topK ?? 5;
64
- }
65
- async retrieve(query, options) {
66
- const topK = options?.topK ?? this._defaultTopK;
67
- return this._index.search(query, topK);
68
- }
69
- };
70
-
71
- // src/rag/text-splitter.ts
72
- function makeChunks(texts) {
73
- return texts.filter((t) => t.length > 0).map((text, index) => ({ text, index }));
74
- }
75
- function splitByCharacter(text, opts) {
76
- if (text.length === 0) return [];
77
- const { chunkSize, overlap = 0 } = opts;
78
- const step = Math.max(1, chunkSize - overlap);
79
- const parts = [];
80
- for (let i = 0; i < text.length; i += step) {
81
- parts.push(text.slice(i, i + chunkSize));
82
- }
83
- return makeChunks(parts);
84
- }
85
- var SENTENCE_RE = /(?<=[.!?])\s+/;
86
- function splitBySentence(text, opts) {
87
- if (text.length === 0) return [];
88
- const { chunkSize } = opts;
89
- const sentences = text.split(SENTENCE_RE);
90
- const parts = [];
91
- let current = "";
92
- for (const sentence of sentences) {
93
- if (current.length + sentence.length + 1 > chunkSize && current.length > 0) {
94
- parts.push(current.trim());
95
- current = sentence;
96
- } else {
97
- current = current.length > 0 ? `${current} ${sentence}` : sentence;
98
- }
99
- }
100
- if (current.length > 0) parts.push(current.trim());
101
- return makeChunks(parts);
102
- }
103
- var PARAGRAPH_RE = /\n\n+/;
104
- function splitRecursive(text, opts) {
105
- if (text.length === 0) return [];
106
- const { chunkSize, overlap = 0 } = opts;
107
- const paragraphs = text.split(PARAGRAPH_RE).filter((p) => p.length > 0);
108
- const result = [];
109
- for (const para of paragraphs) {
110
- if (para.length <= chunkSize) {
111
- result.push(para);
112
- } else {
113
- const sentenceChunks = splitBySentence(para, { chunkSize});
114
- for (const sc of sentenceChunks) {
115
- if (sc.text.length <= chunkSize) {
116
- result.push(sc.text);
117
- } else {
118
- const charChunks = splitByCharacter(sc.text, { chunkSize, overlap });
119
- for (const cc of charChunks) {
120
- result.push(cc.text);
121
- }
122
- }
123
- }
124
- }
125
- }
126
- return makeChunks(result);
127
- }
128
-
129
- exports.CohereReranker = CohereReranker;
130
- exports.NoopReranker = NoopReranker;
131
- exports.VectorRetriever = VectorRetriever;
132
- exports.splitByCharacter = splitByCharacter;
133
- exports.splitBySentence = splitBySentence;
134
- exports.splitRecursive = splitRecursive;
135
- //# sourceMappingURL=index.cjs.map
136
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/rag/reranker.ts","../../src/rag/retriever.ts","../../src/rag/text-splitter.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Reranker implementations for RAG pipelines (T11.1, ADR D448).\n *\n * NoopReranker: passes through results unchanged (baseline).\n * CohereReranker: calls the Cohere Rerank API (optional peer dep).\n *\n * @public\n */\n\nimport type { RankedChunk, Reranker, RetrievalResult } from \"./types.js\";\n\nexport class NoopReranker implements Reranker {\n async rerank(_query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]> {\n return chunks.map((c, i) => ({\n text: c.text,\n score: c.score,\n originalIndex: i,\n metadata: c.metadata,\n }));\n }\n}\n\ntype MockRerankFn = (query: string, docs: RetrievalResult[]) => Promise<RankedChunk[]>;\n\nexport interface CohereRerankerOptions {\n apiKey: string;\n model?: string;\n _mockRerank?: MockRerankFn;\n}\n\nexport class CohereReranker implements Reranker {\n private readonly _apiKey: string;\n private readonly _model: string;\n private readonly _mockRerank?: MockRerankFn;\n\n constructor(opts: CohereRerankerOptions) {\n this._apiKey = opts.apiKey;\n this._model = opts.model ?? \"rerank-v3.5\";\n this._mockRerank = opts._mockRerank;\n }\n\n async rerank(query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]> {\n if (chunks.length === 0) return [];\n\n if (this._mockRerank) {\n return this._mockRerank(query, chunks);\n }\n\n const response = await fetch(\"https://api.cohere.com/v2/rerank\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this._apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n model: this._model,\n query,\n documents: chunks.map((c) => c.text),\n top_n: chunks.length,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Cohere rerank failed: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as {\n results: Array<{ index: number; relevance_score: number }>;\n };\n\n return data.results.map((r) => {\n const chunk = chunks[r.index];\n return {\n text: chunk?.text ?? \"\",\n score: r.relevance_score,\n originalIndex: r.index,\n metadata: chunk?.metadata,\n };\n });\n }\n}\n","/**\n * Retriever implementations for RAG pipelines (T11.1, ADR D448).\n *\n * VectorRetriever wraps any index that implements `search(query, topK)`.\n * The Retriever interface is the contract — consumers depend on the interface,\n * implementations depend on the index adapter (DIP per architecture.md § 2).\n *\n * @public\n */\n\nimport type { RetrievalResult, Retriever } from \"./types.js\";\n\nexport interface VectorIndex {\n search(query: string, topK: number): Promise<RetrievalResult[]>;\n}\n\nexport interface VectorRetrieverOptions {\n index: VectorIndex;\n topK?: number;\n}\n\nexport class VectorRetriever implements Retriever {\n private readonly _index: VectorIndex;\n private readonly _defaultTopK: number;\n\n constructor(opts: VectorRetrieverOptions) {\n this._index = opts.index;\n this._defaultTopK = opts.topK ?? 5;\n }\n\n async retrieve(query: string, options?: { topK?: number }): Promise<RetrievalResult[]> {\n const topK = options?.topK ?? this._defaultTopK;\n return this._index.search(query, topK);\n }\n}\n","/**\n * Text splitting strategies for RAG pipelines (T11.1, ADR D448).\n *\n * Three strategies: character, sentence, recursive (paragraph→sentence→char).\n * All return Chunk[] with text + index. Empty input → empty array (EC-5).\n *\n * @public\n */\n\nimport type { Chunk, SplitOptions } from \"./types.js\";\n\nfunction makeChunks(texts: string[]): Chunk[] {\n return texts.filter((t) => t.length > 0).map((text, index) => ({ text, index }));\n}\n\nexport function splitByCharacter(text: string, opts: SplitOptions): Chunk[] {\n if (text.length === 0) return [];\n const { chunkSize, overlap = 0 } = opts;\n const step = Math.max(1, chunkSize - overlap);\n const parts: string[] = [];\n for (let i = 0; i < text.length; i += step) {\n parts.push(text.slice(i, i + chunkSize));\n }\n return makeChunks(parts);\n}\n\nconst SENTENCE_RE = /(?<=[.!?])\\s+/;\n\nexport function splitBySentence(text: string, opts: SplitOptions): Chunk[] {\n if (text.length === 0) return [];\n const { chunkSize } = opts;\n const sentences = text.split(SENTENCE_RE);\n const parts: string[] = [];\n let current = \"\";\n for (const sentence of sentences) {\n if (current.length + sentence.length + 1 > chunkSize && current.length > 0) {\n parts.push(current.trim());\n current = sentence;\n } else {\n current = current.length > 0 ? `${current} ${sentence}` : sentence;\n }\n }\n if (current.length > 0) parts.push(current.trim());\n return makeChunks(parts);\n}\n\nconst PARAGRAPH_RE = /\\n\\n+/;\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: recursive splitter inherently cascades through 3 levels (paragraph→sentence→char)\nexport function splitRecursive(text: string, opts: SplitOptions): Chunk[] {\n if (text.length === 0) return [];\n const { chunkSize, overlap = 0 } = opts;\n\n // Level 1: split by paragraph\n const paragraphs = text.split(PARAGRAPH_RE).filter((p) => p.length > 0);\n const result: string[] = [];\n\n for (const para of paragraphs) {\n if (para.length <= chunkSize) {\n result.push(para);\n } else {\n // Level 2: split by sentence\n const sentenceChunks = splitBySentence(para, { chunkSize, overlap });\n for (const sc of sentenceChunks) {\n if (sc.text.length <= chunkSize) {\n result.push(sc.text);\n } else {\n // Level 3: split by character\n const charChunks = splitByCharacter(sc.text, { chunkSize, overlap });\n for (const cc of charChunks) {\n result.push(cc.text);\n }\n }\n }\n }\n }\n\n return makeChunks(result);\n}\n"]}
@@ -1,11 +0,0 @@
1
- /**
2
- * RAG (Retrieval-Augmented Generation) sub-path barrel (T11.1, ADR D448).
3
- *
4
- * Exported via `@theokit/sdk/rag`.
5
- *
6
- * @public
7
- */
8
- export { CohereReranker, type CohereRerankerOptions, NoopReranker } from "./reranker.js";
9
- export { type VectorIndex, VectorRetriever, type VectorRetrieverOptions } from "./retriever.js";
10
- export { splitByCharacter, splitBySentence, splitRecursive } from "./text-splitter.js";
11
- export type { Chunk, Document, RankedChunk, Reranker, RetrievalResult, Retriever, SplitOptions, } from "./types.js";
@@ -1,11 +0,0 @@
1
- /**
2
- * RAG (Retrieval-Augmented Generation) sub-path barrel (T11.1, ADR D448).
3
- *
4
- * Exported via `@theokit/sdk/rag`.
5
- *
6
- * @public
7
- */
8
- export { CohereReranker, type CohereRerankerOptions, NoopReranker } from "./reranker.js";
9
- export { type VectorIndex, VectorRetriever, type VectorRetrieverOptions } from "./retriever.js";
10
- export { splitByCharacter, splitBySentence, splitRecursive } from "./text-splitter.js";
11
- export type { Chunk, Document, RankedChunk, Reranker, RetrievalResult, Retriever, SplitOptions, } from "./types.js";
package/dist/rag/index.js DELETED
@@ -1,129 +0,0 @@
1
- // src/rag/reranker.ts
2
- var NoopReranker = class {
3
- async rerank(_query, chunks) {
4
- return chunks.map((c, i) => ({
5
- text: c.text,
6
- score: c.score,
7
- originalIndex: i,
8
- metadata: c.metadata
9
- }));
10
- }
11
- };
12
- var CohereReranker = class {
13
- _apiKey;
14
- _model;
15
- _mockRerank;
16
- constructor(opts) {
17
- this._apiKey = opts.apiKey;
18
- this._model = opts.model ?? "rerank-v3.5";
19
- this._mockRerank = opts._mockRerank;
20
- }
21
- async rerank(query, chunks) {
22
- if (chunks.length === 0) return [];
23
- if (this._mockRerank) {
24
- return this._mockRerank(query, chunks);
25
- }
26
- const response = await fetch("https://api.cohere.com/v2/rerank", {
27
- method: "POST",
28
- headers: {
29
- Authorization: `Bearer ${this._apiKey}`,
30
- "Content-Type": "application/json"
31
- },
32
- body: JSON.stringify({
33
- model: this._model,
34
- query,
35
- documents: chunks.map((c) => c.text),
36
- top_n: chunks.length
37
- })
38
- });
39
- if (!response.ok) {
40
- throw new Error(`Cohere rerank failed: ${response.status} ${response.statusText}`);
41
- }
42
- const data = await response.json();
43
- return data.results.map((r) => {
44
- const chunk = chunks[r.index];
45
- return {
46
- text: chunk?.text ?? "",
47
- score: r.relevance_score,
48
- originalIndex: r.index,
49
- metadata: chunk?.metadata
50
- };
51
- });
52
- }
53
- };
54
-
55
- // src/rag/retriever.ts
56
- var VectorRetriever = class {
57
- _index;
58
- _defaultTopK;
59
- constructor(opts) {
60
- this._index = opts.index;
61
- this._defaultTopK = opts.topK ?? 5;
62
- }
63
- async retrieve(query, options) {
64
- const topK = options?.topK ?? this._defaultTopK;
65
- return this._index.search(query, topK);
66
- }
67
- };
68
-
69
- // src/rag/text-splitter.ts
70
- function makeChunks(texts) {
71
- return texts.filter((t) => t.length > 0).map((text, index) => ({ text, index }));
72
- }
73
- function splitByCharacter(text, opts) {
74
- if (text.length === 0) return [];
75
- const { chunkSize, overlap = 0 } = opts;
76
- const step = Math.max(1, chunkSize - overlap);
77
- const parts = [];
78
- for (let i = 0; i < text.length; i += step) {
79
- parts.push(text.slice(i, i + chunkSize));
80
- }
81
- return makeChunks(parts);
82
- }
83
- var SENTENCE_RE = /(?<=[.!?])\s+/;
84
- function splitBySentence(text, opts) {
85
- if (text.length === 0) return [];
86
- const { chunkSize } = opts;
87
- const sentences = text.split(SENTENCE_RE);
88
- const parts = [];
89
- let current = "";
90
- for (const sentence of sentences) {
91
- if (current.length + sentence.length + 1 > chunkSize && current.length > 0) {
92
- parts.push(current.trim());
93
- current = sentence;
94
- } else {
95
- current = current.length > 0 ? `${current} ${sentence}` : sentence;
96
- }
97
- }
98
- if (current.length > 0) parts.push(current.trim());
99
- return makeChunks(parts);
100
- }
101
- var PARAGRAPH_RE = /\n\n+/;
102
- function splitRecursive(text, opts) {
103
- if (text.length === 0) return [];
104
- const { chunkSize, overlap = 0 } = opts;
105
- const paragraphs = text.split(PARAGRAPH_RE).filter((p) => p.length > 0);
106
- const result = [];
107
- for (const para of paragraphs) {
108
- if (para.length <= chunkSize) {
109
- result.push(para);
110
- } else {
111
- const sentenceChunks = splitBySentence(para, { chunkSize});
112
- for (const sc of sentenceChunks) {
113
- if (sc.text.length <= chunkSize) {
114
- result.push(sc.text);
115
- } else {
116
- const charChunks = splitByCharacter(sc.text, { chunkSize, overlap });
117
- for (const cc of charChunks) {
118
- result.push(cc.text);
119
- }
120
- }
121
- }
122
- }
123
- }
124
- return makeChunks(result);
125
- }
126
-
127
- export { CohereReranker, NoopReranker, VectorRetriever, splitByCharacter, splitBySentence, splitRecursive };
128
- //# sourceMappingURL=index.js.map
129
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/rag/reranker.ts","../../src/rag/retriever.ts","../../src/rag/text-splitter.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Reranker implementations for RAG pipelines (T11.1, ADR D448).\n *\n * NoopReranker: passes through results unchanged (baseline).\n * CohereReranker: calls the Cohere Rerank API (optional peer dep).\n *\n * @public\n */\n\nimport type { RankedChunk, Reranker, RetrievalResult } from \"./types.js\";\n\nexport class NoopReranker implements Reranker {\n async rerank(_query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]> {\n return chunks.map((c, i) => ({\n text: c.text,\n score: c.score,\n originalIndex: i,\n metadata: c.metadata,\n }));\n }\n}\n\ntype MockRerankFn = (query: string, docs: RetrievalResult[]) => Promise<RankedChunk[]>;\n\nexport interface CohereRerankerOptions {\n apiKey: string;\n model?: string;\n _mockRerank?: MockRerankFn;\n}\n\nexport class CohereReranker implements Reranker {\n private readonly _apiKey: string;\n private readonly _model: string;\n private readonly _mockRerank?: MockRerankFn;\n\n constructor(opts: CohereRerankerOptions) {\n this._apiKey = opts.apiKey;\n this._model = opts.model ?? \"rerank-v3.5\";\n this._mockRerank = opts._mockRerank;\n }\n\n async rerank(query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]> {\n if (chunks.length === 0) return [];\n\n if (this._mockRerank) {\n return this._mockRerank(query, chunks);\n }\n\n const response = await fetch(\"https://api.cohere.com/v2/rerank\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this._apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n model: this._model,\n query,\n documents: chunks.map((c) => c.text),\n top_n: chunks.length,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Cohere rerank failed: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as {\n results: Array<{ index: number; relevance_score: number }>;\n };\n\n return data.results.map((r) => {\n const chunk = chunks[r.index];\n return {\n text: chunk?.text ?? \"\",\n score: r.relevance_score,\n originalIndex: r.index,\n metadata: chunk?.metadata,\n };\n });\n }\n}\n","/**\n * Retriever implementations for RAG pipelines (T11.1, ADR D448).\n *\n * VectorRetriever wraps any index that implements `search(query, topK)`.\n * The Retriever interface is the contract — consumers depend on the interface,\n * implementations depend on the index adapter (DIP per architecture.md § 2).\n *\n * @public\n */\n\nimport type { RetrievalResult, Retriever } from \"./types.js\";\n\nexport interface VectorIndex {\n search(query: string, topK: number): Promise<RetrievalResult[]>;\n}\n\nexport interface VectorRetrieverOptions {\n index: VectorIndex;\n topK?: number;\n}\n\nexport class VectorRetriever implements Retriever {\n private readonly _index: VectorIndex;\n private readonly _defaultTopK: number;\n\n constructor(opts: VectorRetrieverOptions) {\n this._index = opts.index;\n this._defaultTopK = opts.topK ?? 5;\n }\n\n async retrieve(query: string, options?: { topK?: number }): Promise<RetrievalResult[]> {\n const topK = options?.topK ?? this._defaultTopK;\n return this._index.search(query, topK);\n }\n}\n","/**\n * Text splitting strategies for RAG pipelines (T11.1, ADR D448).\n *\n * Three strategies: character, sentence, recursive (paragraph→sentence→char).\n * All return Chunk[] with text + index. Empty input → empty array (EC-5).\n *\n * @public\n */\n\nimport type { Chunk, SplitOptions } from \"./types.js\";\n\nfunction makeChunks(texts: string[]): Chunk[] {\n return texts.filter((t) => t.length > 0).map((text, index) => ({ text, index }));\n}\n\nexport function splitByCharacter(text: string, opts: SplitOptions): Chunk[] {\n if (text.length === 0) return [];\n const { chunkSize, overlap = 0 } = opts;\n const step = Math.max(1, chunkSize - overlap);\n const parts: string[] = [];\n for (let i = 0; i < text.length; i += step) {\n parts.push(text.slice(i, i + chunkSize));\n }\n return makeChunks(parts);\n}\n\nconst SENTENCE_RE = /(?<=[.!?])\\s+/;\n\nexport function splitBySentence(text: string, opts: SplitOptions): Chunk[] {\n if (text.length === 0) return [];\n const { chunkSize } = opts;\n const sentences = text.split(SENTENCE_RE);\n const parts: string[] = [];\n let current = \"\";\n for (const sentence of sentences) {\n if (current.length + sentence.length + 1 > chunkSize && current.length > 0) {\n parts.push(current.trim());\n current = sentence;\n } else {\n current = current.length > 0 ? `${current} ${sentence}` : sentence;\n }\n }\n if (current.length > 0) parts.push(current.trim());\n return makeChunks(parts);\n}\n\nconst PARAGRAPH_RE = /\\n\\n+/;\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: recursive splitter inherently cascades through 3 levels (paragraph→sentence→char)\nexport function splitRecursive(text: string, opts: SplitOptions): Chunk[] {\n if (text.length === 0) return [];\n const { chunkSize, overlap = 0 } = opts;\n\n // Level 1: split by paragraph\n const paragraphs = text.split(PARAGRAPH_RE).filter((p) => p.length > 0);\n const result: string[] = [];\n\n for (const para of paragraphs) {\n if (para.length <= chunkSize) {\n result.push(para);\n } else {\n // Level 2: split by sentence\n const sentenceChunks = splitBySentence(para, { chunkSize, overlap });\n for (const sc of sentenceChunks) {\n if (sc.text.length <= chunkSize) {\n result.push(sc.text);\n } else {\n // Level 3: split by character\n const charChunks = splitByCharacter(sc.text, { chunkSize, overlap });\n for (const cc of charChunks) {\n result.push(cc.text);\n }\n }\n }\n }\n }\n\n return makeChunks(result);\n}\n"]}
@@ -1,26 +0,0 @@
1
- /**
2
- * Reranker implementations for RAG pipelines (T11.1, ADR D448).
3
- *
4
- * NoopReranker: passes through results unchanged (baseline).
5
- * CohereReranker: calls the Cohere Rerank API (optional peer dep).
6
- *
7
- * @public
8
- */
9
- import type { RankedChunk, Reranker, RetrievalResult } from "./types.js";
10
- export declare class NoopReranker implements Reranker {
11
- rerank(_query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]>;
12
- }
13
- type MockRerankFn = (query: string, docs: RetrievalResult[]) => Promise<RankedChunk[]>;
14
- export interface CohereRerankerOptions {
15
- apiKey: string;
16
- model?: string;
17
- _mockRerank?: MockRerankFn;
18
- }
19
- export declare class CohereReranker implements Reranker {
20
- private readonly _apiKey;
21
- private readonly _model;
22
- private readonly _mockRerank?;
23
- constructor(opts: CohereRerankerOptions);
24
- rerank(query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]>;
25
- }
26
- export {};
@@ -1,26 +0,0 @@
1
- /**
2
- * Reranker implementations for RAG pipelines (T11.1, ADR D448).
3
- *
4
- * NoopReranker: passes through results unchanged (baseline).
5
- * CohereReranker: calls the Cohere Rerank API (optional peer dep).
6
- *
7
- * @public
8
- */
9
- import type { RankedChunk, Reranker, RetrievalResult } from "./types.js";
10
- export declare class NoopReranker implements Reranker {
11
- rerank(_query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]>;
12
- }
13
- type MockRerankFn = (query: string, docs: RetrievalResult[]) => Promise<RankedChunk[]>;
14
- export interface CohereRerankerOptions {
15
- apiKey: string;
16
- model?: string;
17
- _mockRerank?: MockRerankFn;
18
- }
19
- export declare class CohereReranker implements Reranker {
20
- private readonly _apiKey;
21
- private readonly _model;
22
- private readonly _mockRerank?;
23
- constructor(opts: CohereRerankerOptions);
24
- rerank(query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]>;
25
- }
26
- export {};
@@ -1,25 +0,0 @@
1
- /**
2
- * Retriever implementations for RAG pipelines (T11.1, ADR D448).
3
- *
4
- * VectorRetriever wraps any index that implements `search(query, topK)`.
5
- * The Retriever interface is the contract — consumers depend on the interface,
6
- * implementations depend on the index adapter (DIP per architecture.md § 2).
7
- *
8
- * @public
9
- */
10
- import type { RetrievalResult, Retriever } from "./types.js";
11
- export interface VectorIndex {
12
- search(query: string, topK: number): Promise<RetrievalResult[]>;
13
- }
14
- export interface VectorRetrieverOptions {
15
- index: VectorIndex;
16
- topK?: number;
17
- }
18
- export declare class VectorRetriever implements Retriever {
19
- private readonly _index;
20
- private readonly _defaultTopK;
21
- constructor(opts: VectorRetrieverOptions);
22
- retrieve(query: string, options?: {
23
- topK?: number;
24
- }): Promise<RetrievalResult[]>;
25
- }
@@ -1,25 +0,0 @@
1
- /**
2
- * Retriever implementations for RAG pipelines (T11.1, ADR D448).
3
- *
4
- * VectorRetriever wraps any index that implements `search(query, topK)`.
5
- * The Retriever interface is the contract — consumers depend on the interface,
6
- * implementations depend on the index adapter (DIP per architecture.md § 2).
7
- *
8
- * @public
9
- */
10
- import type { RetrievalResult, Retriever } from "./types.js";
11
- export interface VectorIndex {
12
- search(query: string, topK: number): Promise<RetrievalResult[]>;
13
- }
14
- export interface VectorRetrieverOptions {
15
- index: VectorIndex;
16
- topK?: number;
17
- }
18
- export declare class VectorRetriever implements Retriever {
19
- private readonly _index;
20
- private readonly _defaultTopK;
21
- constructor(opts: VectorRetrieverOptions);
22
- retrieve(query: string, options?: {
23
- topK?: number;
24
- }): Promise<RetrievalResult[]>;
25
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Text splitting strategies for RAG pipelines (T11.1, ADR D448).
3
- *
4
- * Three strategies: character, sentence, recursive (paragraph→sentence→char).
5
- * All return Chunk[] with text + index. Empty input → empty array (EC-5).
6
- *
7
- * @public
8
- */
9
- import type { Chunk, SplitOptions } from "./types.js";
10
- export declare function splitByCharacter(text: string, opts: SplitOptions): Chunk[];
11
- export declare function splitBySentence(text: string, opts: SplitOptions): Chunk[];
12
- export declare function splitRecursive(text: string, opts: SplitOptions): Chunk[];
@@ -1,12 +0,0 @@
1
- /**
2
- * Text splitting strategies for RAG pipelines (T11.1, ADR D448).
3
- *
4
- * Three strategies: character, sentence, recursive (paragraph→sentence→char).
5
- * All return Chunk[] with text + index. Empty input → empty array (EC-5).
6
- *
7
- * @public
8
- */
9
- import type { Chunk, SplitOptions } from "./types.js";
10
- export declare function splitByCharacter(text: string, opts: SplitOptions): Chunk[];
11
- export declare function splitBySentence(text: string, opts: SplitOptions): Chunk[];
12
- export declare function splitRecursive(text: string, opts: SplitOptions): Chunk[];
@@ -1,37 +0,0 @@
1
- /**
2
- * RAG types — Document, Chunk, RetrievalResult (T11.1, ADR D448).
3
- * @public
4
- */
5
- export interface Document {
6
- id: string;
7
- text: string;
8
- metadata?: Record<string, unknown>;
9
- }
10
- export interface Chunk {
11
- text: string;
12
- index: number;
13
- metadata?: Record<string, unknown>;
14
- }
15
- export interface RetrievalResult {
16
- text: string;
17
- score: number;
18
- metadata?: Record<string, unknown>;
19
- }
20
- export interface RankedChunk {
21
- text: string;
22
- score: number;
23
- originalIndex: number;
24
- metadata?: Record<string, unknown>;
25
- }
26
- export interface SplitOptions {
27
- chunkSize: number;
28
- overlap?: number;
29
- }
30
- export interface Retriever {
31
- retrieve(query: string, options?: {
32
- topK?: number;
33
- }): Promise<RetrievalResult[]>;
34
- }
35
- export interface Reranker {
36
- rerank(query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]>;
37
- }
@@ -1,37 +0,0 @@
1
- /**
2
- * RAG types — Document, Chunk, RetrievalResult (T11.1, ADR D448).
3
- * @public
4
- */
5
- export interface Document {
6
- id: string;
7
- text: string;
8
- metadata?: Record<string, unknown>;
9
- }
10
- export interface Chunk {
11
- text: string;
12
- index: number;
13
- metadata?: Record<string, unknown>;
14
- }
15
- export interface RetrievalResult {
16
- text: string;
17
- score: number;
18
- metadata?: Record<string, unknown>;
19
- }
20
- export interface RankedChunk {
21
- text: string;
22
- score: number;
23
- originalIndex: number;
24
- metadata?: Record<string, unknown>;
25
- }
26
- export interface SplitOptions {
27
- chunkSize: number;
28
- overlap?: number;
29
- }
30
- export interface Retriever {
31
- retrieve(query: string, options?: {
32
- topK?: number;
33
- }): Promise<RetrievalResult[]>;
34
- }
35
- export interface Reranker {
36
- rerank(query: string, chunks: RetrievalResult[]): Promise<RankedChunk[]>;
37
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * Voice sub-path barrel (T12.3).
3
- * Exported via `@theokit/sdk/voice`.
4
- * @public @experimental
5
- */
6
- export { OpenAIRealtimeVoiceProvider } from "./openai-realtime.js";
7
- export type { STTOptions, STTResult, TTSOptions, TTSResult, VoiceProvider } from "./types.js";
@@ -1,21 +0,0 @@
1
- /**
2
- * OpenAI Realtime voice provider — TTS via OpenAI Audio API (T12.3).
3
- *
4
- * Optional peer dep: none (uses native fetch).
5
- *
6
- * @public @experimental
7
- */
8
- import type { STTOptions, STTResult, TTSOptions, TTSResult, VoiceProvider } from "./types.js";
9
- interface OpenAIRealtimeVoiceProviderOptions {
10
- apiKey: string;
11
- baseUrl?: string;
12
- }
13
- export declare class OpenAIRealtimeVoiceProvider implements VoiceProvider {
14
- readonly name = "openai-realtime";
15
- private readonly _apiKey;
16
- private readonly _baseUrl;
17
- constructor(opts: OpenAIRealtimeVoiceProviderOptions);
18
- textToSpeech(text: string, opts?: TTSOptions): Promise<TTSResult>;
19
- speechToText(audio: Buffer | Uint8Array, opts?: STTOptions): Promise<STTResult>;
20
- }
21
- export {};
@@ -1,35 +0,0 @@
1
- /**
2
- * VoiceProvider interface — foundation for TTS/STT adapters (T12.3).
3
- * @public @experimental
4
- */
5
- export interface TTSOptions {
6
- model?: string;
7
- voice?: string;
8
- speed?: number;
9
- format?: "mp3" | "opus" | "aac" | "flac" | "wav" | "pcm";
10
- }
11
- export interface STTOptions {
12
- model?: string;
13
- language?: string;
14
- prompt?: string;
15
- }
16
- export interface TTSResult {
17
- audio: Buffer | Uint8Array;
18
- format: string;
19
- durationMs?: number;
20
- }
21
- export interface STTResult {
22
- text: string;
23
- language?: string;
24
- durationMs?: number;
25
- segments?: Array<{
26
- start: number;
27
- end: number;
28
- text: string;
29
- }>;
30
- }
31
- export interface VoiceProvider {
32
- readonly name: string;
33
- textToSpeech(text: string, opts?: TTSOptions): Promise<TTSResult>;
34
- speechToText(audio: Buffer | Uint8Array, opts?: STTOptions): Promise<STTResult>;
35
- }