@fastpaca/cria 1.0.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +54 -44
  2. package/dist/ai-sdk/index.d.ts +29 -4
  3. package/dist/ai-sdk/index.d.ts.map +1 -1
  4. package/dist/ai-sdk/index.js +97 -25
  5. package/dist/ai-sdk/index.js.map +1 -1
  6. package/dist/anthropic/index.d.ts +31 -3
  7. package/dist/anthropic/index.d.ts.map +1 -1
  8. package/dist/anthropic/index.js +44 -1
  9. package/dist/anthropic/index.js.map +1 -1
  10. package/dist/components/index.d.ts +8 -9
  11. package/dist/components/index.d.ts.map +1 -1
  12. package/dist/components/index.js +7 -10
  13. package/dist/components/index.js.map +1 -1
  14. package/dist/components/summary.d.ts +2 -3
  15. package/dist/components/summary.d.ts.map +1 -1
  16. package/dist/components/summary.js +2 -2
  17. package/dist/components/summary.js.map +1 -1
  18. package/dist/components/vector-search.js +2 -2
  19. package/dist/components/vector-search.js.map +1 -1
  20. package/dist/dsl.d.ts +201 -0
  21. package/dist/dsl.d.ts.map +1 -0
  22. package/dist/dsl.js +320 -0
  23. package/dist/dsl.js.map +1 -0
  24. package/dist/index.d.ts +10 -16
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +11 -16
  27. package/dist/index.js.map +1 -1
  28. package/dist/jsx/index.d.ts +6 -0
  29. package/dist/jsx/index.d.ts.map +1 -0
  30. package/dist/jsx/index.js +7 -0
  31. package/dist/jsx/index.js.map +1 -0
  32. package/dist/jsx/jsx-dev-runtime.d.ts.map +1 -0
  33. package/dist/jsx/jsx-dev-runtime.js +3 -0
  34. package/dist/jsx/jsx-dev-runtime.js.map +1 -0
  35. package/dist/{jsx-runtime.d.ts → jsx/jsx-runtime.d.ts} +1 -1
  36. package/dist/jsx/jsx-runtime.d.ts.map +1 -0
  37. package/dist/{jsx-runtime.js → jsx/jsx-runtime.js} +2 -5
  38. package/dist/jsx/jsx-runtime.js.map +1 -0
  39. package/dist/memory/postgres.d.ts.map +1 -1
  40. package/dist/memory/postgres.js +16 -1
  41. package/dist/memory/postgres.js.map +1 -1
  42. package/dist/memory/redis.d.ts.map +1 -1
  43. package/dist/memory/redis.js +30 -3
  44. package/dist/memory/redis.js.map +1 -1
  45. package/dist/openai/index.d.ts +30 -3
  46. package/dist/openai/index.d.ts.map +1 -1
  47. package/dist/openai/index.js +47 -1
  48. package/dist/openai/index.js.map +1 -1
  49. package/dist/render.js +16 -4
  50. package/dist/render.js.map +1 -1
  51. package/dist/snapshot.d.ts.map +1 -1
  52. package/dist/snapshot.js +9 -5
  53. package/dist/snapshot.js.map +1 -1
  54. package/dist/types.d.ts +10 -2
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/types.js +7 -2
  57. package/dist/types.js.map +1 -1
  58. package/package.json +27 -6
  59. package/dist/ai-sdk/index.test.d.ts +0 -2
  60. package/dist/ai-sdk/index.test.d.ts.map +0 -1
  61. package/dist/ai-sdk/index.test.js +0 -101
  62. package/dist/ai-sdk/index.test.js.map +0 -1
  63. package/dist/anthropic/index.test.d.ts +0 -2
  64. package/dist/anthropic/index.test.d.ts.map +0 -1
  65. package/dist/anthropic/index.test.js +0 -115
  66. package/dist/anthropic/index.test.js.map +0 -1
  67. package/dist/components/additional.test.d.ts +0 -2
  68. package/dist/components/additional.test.d.ts.map +0 -1
  69. package/dist/components/additional.test.js +0 -31
  70. package/dist/components/additional.test.js.map +0 -1
  71. package/dist/components/summary.test.d.ts +0 -2
  72. package/dist/components/summary.test.d.ts.map +0 -1
  73. package/dist/components/summary.test.js +0 -101
  74. package/dist/components/summary.test.js.map +0 -1
  75. package/dist/components/vector-search.test.d.ts +0 -2
  76. package/dist/components/vector-search.test.d.ts.map +0 -1
  77. package/dist/components/vector-search.test.js +0 -113
  78. package/dist/components/vector-search.test.js.map +0 -1
  79. package/dist/instrumentation/otel.test.d.ts +0 -2
  80. package/dist/instrumentation/otel.test.d.ts.map +0 -1
  81. package/dist/instrumentation/otel.test.js +0 -116
  82. package/dist/instrumentation/otel.test.js.map +0 -1
  83. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  84. package/dist/jsx-dev-runtime.js +0 -2
  85. package/dist/jsx-dev-runtime.js.map +0 -1
  86. package/dist/jsx-runtime.d.ts.map +0 -1
  87. package/dist/jsx-runtime.js.map +0 -1
  88. package/dist/openai/index.test.d.ts +0 -2
  89. package/dist/openai/index.test.d.ts.map +0 -1
  90. package/dist/openai/index.test.js +0 -204
  91. package/dist/openai/index.test.js.map +0 -1
  92. package/dist/providers/index.d.ts +0 -2
  93. package/dist/providers/index.d.ts.map +0 -1
  94. package/dist/providers/index.js +0 -2
  95. package/dist/providers/index.js.map +0 -1
  96. package/dist/providers/types.d.ts +0 -2
  97. package/dist/providers/types.d.ts.map +0 -1
  98. package/dist/providers/types.js +0 -2
  99. package/dist/providers/types.js.map +0 -1
  100. package/dist/render.test.d.ts +0 -2
  101. package/dist/render.test.d.ts.map +0 -1
  102. package/dist/render.test.js +0 -167
  103. package/dist/render.test.js.map +0 -1
  104. package/dist/snapshot.test.d.ts +0 -2
  105. package/dist/snapshot.test.d.ts.map +0 -1
  106. package/dist/snapshot.test.js +0 -68
  107. package/dist/snapshot.test.js.map +0 -1
  108. /package/dist/{jsx-dev-runtime.d.ts → jsx/jsx-dev-runtime.d.ts} +0 -0
package/dist/dsl.js ADDED
@@ -0,0 +1,320 @@
1
+ /**
2
+ * Fluent DSL for building prompts without JSX.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { cria } from "@fastpaca/cria";
7
+ *
8
+ * const prompt = await cria
9
+ * .prompt()
10
+ * .system("You are a helpful assistant.")
11
+ * .user("What is the capital of France?")
12
+ * .render({tokenizer, budget: 4000, renderer});
13
+ * ```
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ import { Examples, Message, Omit, Region, Summary, Truncate, VectorSearch, } from "./components";
18
+ import { render as renderPrompt } from "./render";
19
+ /**
20
+ * Fluent builder for constructing prompt trees without JSX.
21
+ *
22
+ * Every method returns a new immutable builder instance.
23
+ * Call `.build()` to get the final `PromptElement`.
24
+ */
25
+ export class PromptBuilder {
26
+ children;
27
+ context;
28
+ constructor(children = [], context = undefined) {
29
+ this.children = children;
30
+ this.context = context;
31
+ }
32
+ /**
33
+ * Create a new empty prompt builder.
34
+ */
35
+ static create() {
36
+ return new PromptBuilder();
37
+ }
38
+ /**
39
+ * Add a system message.
40
+ */
41
+ system(text, opts) {
42
+ const priority = opts?.priority;
43
+ return this.addChild(Message({
44
+ messageRole: "system",
45
+ children: [text],
46
+ ...(priority !== undefined ? { priority } : {}),
47
+ ...(opts?.id ? { id: opts.id } : {}),
48
+ }));
49
+ }
50
+ /**
51
+ * Add a user message.
52
+ */
53
+ user(text, opts) {
54
+ const priority = opts?.priority;
55
+ return this.addChild(Message({
56
+ messageRole: "user",
57
+ children: [text],
58
+ ...(priority !== undefined ? { priority } : {}),
59
+ ...(opts?.id ? { id: opts.id } : {}),
60
+ }));
61
+ }
62
+ /**
63
+ * Add an assistant message.
64
+ */
65
+ assistant(text, opts) {
66
+ const priority = opts?.priority;
67
+ return this.addChild(Message({
68
+ messageRole: "assistant",
69
+ children: [text],
70
+ ...(priority !== undefined ? { priority } : {}),
71
+ ...(opts?.id ? { id: opts.id } : {}),
72
+ }));
73
+ }
74
+ /**
75
+ * Add a message with a custom role.
76
+ */
77
+ message(role, text, opts) {
78
+ const priority = opts?.priority;
79
+ return this.addChild(Message({
80
+ messageRole: role,
81
+ children: [text],
82
+ ...(priority !== undefined ? { priority } : {}),
83
+ ...(opts?.id ? { id: opts.id } : {}),
84
+ }));
85
+ }
86
+ /**
87
+ * Add content that will be truncated when over budget.
88
+ */
89
+ truncate(content, opts) {
90
+ const node = (async () => {
91
+ const children = await normalizeChild(content);
92
+ const props = {
93
+ children,
94
+ budget: opts.budget,
95
+ ...(opts.from ? { from: opts.from } : {}),
96
+ ...(opts.priority !== undefined ? { priority: opts.priority } : {}),
97
+ ...(opts.id ? { id: opts.id } : {}),
98
+ };
99
+ return Truncate({
100
+ ...props,
101
+ });
102
+ })();
103
+ return this.addChild(node);
104
+ }
105
+ /**
106
+ * Add content that will be entirely removed when over budget.
107
+ */
108
+ omit(content, opts) {
109
+ const node = (async () => {
110
+ const children = await normalizeChild(content);
111
+ const props = {
112
+ children,
113
+ ...(opts?.priority !== undefined ? { priority: opts.priority } : {}),
114
+ ...(opts?.id ? { id: opts.id } : {}),
115
+ };
116
+ return Omit(props);
117
+ })();
118
+ return this.addChild(node);
119
+ }
120
+ region(nameOrFn, maybeFn) {
121
+ if (typeof nameOrFn === "string") {
122
+ if (!maybeFn) {
123
+ throw new Error("region() requires a callback function");
124
+ }
125
+ return this.section(nameOrFn, maybeFn);
126
+ }
127
+ return this.section(nameOrFn);
128
+ }
129
+ section(nameOrFn, maybeFn) {
130
+ const name = typeof nameOrFn === "string" ? nameOrFn : undefined;
131
+ const fn = typeof nameOrFn === "string" ? maybeFn : nameOrFn;
132
+ if (!fn) {
133
+ const received = typeof nameOrFn === "string" ? typeof maybeFn : typeof nameOrFn;
134
+ throw new Error(`section() requires a callback function (e.g. cria.prompt().section("name", (s) => ...)). Received: ${received}`);
135
+ }
136
+ const inner = fn(new PromptBuilder([], this.context));
137
+ const element = (async () => {
138
+ const built = await inner.build();
139
+ return {
140
+ ...built,
141
+ ...(name ? { id: name } : {}),
142
+ };
143
+ })();
144
+ return this.addChild(element);
145
+ }
146
+ /**
147
+ * Merge another builder's contents into this one (zod-like merge).
148
+ * Contexts must be compatible (either identical or undefined).
149
+ */
150
+ merge(...builders) {
151
+ const sources = [this, ...builders];
152
+ let nextContext = this.context;
153
+ const totalChildren = sources.reduce((sum, builder) => sum + builder.children.length, 0);
154
+ const mergedChildren = new Array(totalChildren);
155
+ let writeIndex = 0;
156
+ for (const builder of sources) {
157
+ if (builder.context && nextContext && builder.context !== nextContext) {
158
+ throw new Error("Cannot merge builders with different contexts/providers");
159
+ }
160
+ if (!nextContext) {
161
+ nextContext = builder.context;
162
+ }
163
+ for (const child of builder.children) {
164
+ mergedChildren[writeIndex] = child;
165
+ writeIndex += 1;
166
+ }
167
+ }
168
+ mergedChildren.length = writeIndex;
169
+ return new PromptBuilder(mergedChildren, nextContext);
170
+ }
171
+ /**
172
+ * Create a provider scope for AI-powered operations like Summary.
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * import { Provider } from "@fastpaca/cria/ai-sdk";
177
+ *
178
+ * const provider = new Provider(openai("gpt-4o"));
179
+ * .provider(provider, (p) =>
180
+ * p.summary(content, { id: "conv", store })
181
+ * )
182
+ * ```
183
+ */
184
+ provider(modelProvider, fn) {
185
+ const context = { provider: modelProvider };
186
+ const inner = fn(new PromptBuilder([], context));
187
+ const element = (async () => {
188
+ const built = await inner.build();
189
+ return {
190
+ priority: 0,
191
+ children: built.children,
192
+ context,
193
+ };
194
+ })();
195
+ return this.addChild(element);
196
+ }
197
+ /**
198
+ * Add vector search results (async, resolved at render time).
199
+ */
200
+ vectorSearch(opts) {
201
+ const props = {
202
+ store: opts.store,
203
+ query: opts.query,
204
+ ...(opts.limit !== undefined ? { limit: opts.limit } : {}),
205
+ ...(opts.threshold !== undefined ? { threshold: opts.threshold } : {}),
206
+ ...(opts.formatter ? { formatResults: opts.formatter } : {}),
207
+ ...(opts.priority !== undefined ? { priority: opts.priority } : {}),
208
+ ...(opts.id !== undefined ? { id: opts.id } : {}),
209
+ };
210
+ const asyncElement = VectorSearch(props);
211
+ return this.addChild(asyncElement);
212
+ }
213
+ /**
214
+ * Add content that will be summarized when over budget.
215
+ */
216
+ summary(content, opts) {
217
+ const element = (async () => {
218
+ const children = await normalizeChild(content);
219
+ const props = {
220
+ id: opts.id,
221
+ store: opts.store,
222
+ children,
223
+ ...(opts.summarize ? { summarize: opts.summarize } : {}),
224
+ ...(opts.priority !== undefined ? { priority: opts.priority } : {}),
225
+ };
226
+ return Summary(props);
227
+ })();
228
+ return this.addChild(element);
229
+ }
230
+ /**
231
+ * Add a formatted list of examples.
232
+ */
233
+ examples(title, items, opts) {
234
+ return this.addChild(Examples({
235
+ title,
236
+ children: items,
237
+ ...(opts?.priority !== undefined ? { priority: opts.priority } : {}),
238
+ ...(opts?.id ? { id: opts.id } : {}),
239
+ }));
240
+ }
241
+ /**
242
+ * Add a raw PromptElement (escape hatch for advanced usage).
243
+ */
244
+ raw(element) {
245
+ return this.addChild(element);
246
+ }
247
+ /**
248
+ * Build the final PromptElement tree.
249
+ */
250
+ async build() {
251
+ return Region({
252
+ priority: 0,
253
+ children: await normalizeChildren(this.children),
254
+ ...(this.context && { context: this.context }),
255
+ });
256
+ }
257
+ /**
258
+ * Render the prompt directly using the provided options.
259
+ * Equivalent to `render(await builder.build(), options)`.
260
+ */
261
+ async render(options) {
262
+ const element = await this.build();
263
+ return (await renderPrompt(element, options));
264
+ }
265
+ addChild(child) {
266
+ return new PromptBuilder([...this.children, child], this.context);
267
+ }
268
+ }
269
+ /**
270
+ * Namespace for building prompts without JSX.
271
+ *
272
+ * @example
273
+ * ```typescript
274
+ * import { cria } from "@fastpaca/cria";
275
+ *
276
+ * const prompt = cria
277
+ * .prompt()
278
+ * .system("You are helpful.")
279
+ * .user("Hello!")
280
+ * .build();
281
+ * ```
282
+ */
283
+ export const cria = {
284
+ prompt: () => PromptBuilder.create(),
285
+ merge: (...builders) => {
286
+ const [first, ...rest] = builders;
287
+ if (!first) {
288
+ return PromptBuilder.create();
289
+ }
290
+ return first.merge(...rest);
291
+ },
292
+ };
293
+ /**
294
+ * Standalone function to create a new prompt builder.
295
+ */
296
+ export const prompt = () => PromptBuilder.create();
297
+ /**
298
+ * Merge multiple builders into one (zod-like merge).
299
+ */
300
+ export const merge = (...builders) => cria.merge(...builders);
301
+ // Utility to recursively build and expand / resolve children
302
+ async function normalizeChild(child) {
303
+ if (typeof child === "string") {
304
+ return [child];
305
+ }
306
+ if (child instanceof Promise) {
307
+ const resolved = await child;
308
+ return [resolved];
309
+ }
310
+ if (child instanceof PromptBuilder) {
311
+ const built = await child.build();
312
+ return [built];
313
+ }
314
+ return [child];
315
+ }
316
+ async function normalizeChildren(children) {
317
+ const normalized = await Promise.all(children.map((child) => normalizeChild(child)));
318
+ return normalized.flat();
319
+ }
320
+ //# sourceMappingURL=dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../src/dsl.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,29 +1,23 @@
1
1
  /**
2
- * Cria - JSX-based prompt renderer with automatic token budget fitting.
2
+ * Cria - fluent DSL for prompt composition.
3
3
  *
4
4
  * @example
5
- * ```tsx
6
- * import { render, Region, Truncate, Omit } from "@fastpaca/cria";
5
+ * ```ts
6
+ * import { cria } from "@fastpaca/cria";
7
7
  *
8
- * const prompt = (
9
- * <Region priority={0}>
10
- * You are a helpful assistant.
11
- * <Truncate budget={20000} from="start" priority={2}>
12
- * {conversationHistory}
13
- * </Truncate>
14
- * <Omit priority={3}>
15
- * {optionalContext}
16
- * </Omit>
17
- * </Region>
18
- * );
19
- *
20
- * const result = await render(prompt, { tokenizer, budget: 128000 });
8
+ * const result = await cria
9
+ * .prompt()
10
+ * .system("You are a helpful assistant.")
11
+ * .truncate(conversationHistory, { budget: 20000, from: "start", priority: 2 })
12
+ * .omit(optionalContext, { priority: 3 })
13
+ * .render({ tokenizer, budget: 128000 });
21
14
  * ```
22
15
  *
23
16
  * @packageDocumentation
24
17
  */
25
18
  export type { ResultFormatter, StoredSummary, Summarizer, SummarizerContext, } from "./components";
26
19
  export { CodeBlock, Examples, Last, Message, Omit, Reasoning, Region, Separator, Summary, ToolCall, ToolResult, Truncate, VectorSearch, } from "./components";
20
+ export { cria, merge, PromptBuilder, prompt } from "./dsl";
27
21
  export { createOtelRenderHooks } from "./instrumentation/otel";
28
22
  export type { KVMemory, MemoryEntry, VectorMemory, VectorSearchOptions, VectorSearchResult, } from "./memory";
29
23
  export { InMemoryStore } from "./memory";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,YAAY,EACV,eAAe,EACf,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,QAAQ,EACR,aAAa,EACb,cAAc,EACd,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,YAAY,EACV,eAAe,EACf,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,QAAQ,EACR,aAAa,EACb,cAAc,EACd,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,28 +1,23 @@
1
1
  /**
2
- * Cria - JSX-based prompt renderer with automatic token budget fitting.
2
+ * Cria - fluent DSL for prompt composition.
3
3
  *
4
4
  * @example
5
- * ```tsx
6
- * import { render, Region, Truncate, Omit } from "@fastpaca/cria";
5
+ * ```ts
6
+ * import { cria } from "@fastpaca/cria";
7
7
  *
8
- * const prompt = (
9
- * <Region priority={0}>
10
- * You are a helpful assistant.
11
- * <Truncate budget={20000} from="start" priority={2}>
12
- * {conversationHistory}
13
- * </Truncate>
14
- * <Omit priority={3}>
15
- * {optionalContext}
16
- * </Omit>
17
- * </Region>
18
- * );
19
- *
20
- * const result = await render(prompt, { tokenizer, budget: 128000 });
8
+ * const result = await cria
9
+ * .prompt()
10
+ * .system("You are a helpful assistant.")
11
+ * .truncate(conversationHistory, { budget: 20000, from: "start", priority: 2 })
12
+ * .omit(optionalContext, { priority: 3 })
13
+ * .render({ tokenizer, budget: 128000 });
21
14
  * ```
22
15
  *
23
16
  * @packageDocumentation
24
17
  */
25
18
  export { CodeBlock, Examples, Last, Message, Omit, Reasoning, Region, Separator, Summary, ToolCall, ToolResult, Truncate, VectorSearch, } from "./components";
19
+ // DSL
20
+ export { cria, merge, PromptBuilder, prompt } from "./dsl";
26
21
  export { createOtelRenderHooks } from "./instrumentation/otel";
27
22
  // LLM Memory
28
23
  export { InMemoryStore } from "./memory";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAQ/D,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAUzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,GAKd,MAAM,YAAY,CAAC;AAqBpB,OAAO,EACL,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,MAAM;AACN,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAQ/D,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAUzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,GAKd,MAAM,YAAY,CAAC;AAqBpB,OAAO,EACL,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Optional JSX surface. Prefer the fluent DSL from `@fastpaca/cria` as the default.
3
+ */
4
+ export * from "../components";
5
+ export { Fragment, jsx, jsxs } from "./jsx-runtime";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jsx/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Optional JSX surface. Prefer the fluent DSL from `@fastpaca/cria` as the default.
3
+ */
4
+ // biome-ignore lint/performance/noBarrelFile: JSX entrypoint intentionally re-exports components
5
+ export * from "../components";
6
+ export { Fragment, jsx, jsxs } from "./jsx-runtime";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jsx/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,iGAAiG;AACjG,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-dev-runtime.d.ts","sourceRoot":"","sources":["../../src/jsx/jsx-dev-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ // biome-ignore lint/performance/noBarrelFile: JSX dev runtime re-export
2
+ export { Fragment, jsx, jsx as jsxDEV, jsxs } from "./jsx-runtime";
3
+ //# sourceMappingURL=jsx-dev-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-dev-runtime.js","sourceRoot":"","sources":["../../src/jsx/jsx-dev-runtime.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,EAAE,QAAQ,EAAY,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { MaybePromise, PromptChildren, PromptElement } from "./types";
1
+ import type { MaybePromise, PromptChildren, PromptElement } from "../types";
2
2
  type ComponentFn = (props: Props) => MaybePromise<PromptElement>;
3
3
  /**
4
4
  * JSX child input type (pre-normalization).
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../../src/jsx/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5E,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,YAAY,CAAC,aAAa,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,KAAK,GACb,aAAa,GACb,OAAO,CAAC,aAAa,CAAC,GACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,KAAK,EAAE,CAAC;AAErB,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAmC5D,eAAO,MAAM,QAAQ,eAA8B,CAAC;AAGpD,wBAAsB,GAAG,CACvB,IAAI,EAAE,WAAW,GAAG,OAAO,QAAQ,EACnC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,aAAa,CAAC,CASxB;AAGD,wBAAsB,IAAI,CACxB,IAAI,EAAE,WAAW,GAAG,OAAO,QAAQ,EACnC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,aAAa,CAAC,CAExB;AAGD,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,KAAK,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAE3C,KAAK,wBAAwB,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS;QAC/C,QAAQ,CAAC,EAAE,cAAc,CAAC;KAC3B,GACG,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;KAAE,GAC1C,CAAC,CAAC;IACN,UAAU,iBAAiB;QACzB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;KACtB;IACD,UAAU,wBAAwB;QAChC,QAAQ,EAAE,OAAO,CAAC;KACnB;CACF"}
@@ -13,11 +13,8 @@ async function normalizeChildren(children) {
13
13
  return [String(children)];
14
14
  }
15
15
  if (isChildrenArray(children)) {
16
- const result = [];
17
- for (const child of children) {
18
- result.push(...(await normalizeChildren(child)));
19
- }
20
- return result;
16
+ const normalized = await Promise.all(children.map((child) => normalizeChildren(child)));
17
+ return normalized.flat();
21
18
  }
22
19
  // It's a PromptElement (or a promise for one)
23
20
  return [await children];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../../src/jsx/jsx-runtime.ts"],"names":[],"mappings":"AA+BA,gFAAgF;AAChF,KAAK,UAAU,iBAAiB,CAC9B,QAA2B;IAE3B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAClD,CAAC;QACF,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,KAAY;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,IAAmC,EACnC,KAAY;IAEZ,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEzD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,8DAA8D;QAC9D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,IAAmC,EACnC,KAAY;IAEZ,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAErC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,oBAAyB;YAQhC,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAsBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAyBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAG3B;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAErC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwBzD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,oBAAyB;YAShC,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAsBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAyBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAG3B;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -1,4 +1,18 @@
1
1
  import { Pool } from "pg";
2
+ const IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
3
+ const sanitizeIdentifier = (identifier) => {
4
+ const parts = identifier.split(".");
5
+ if (parts.length === 0) {
6
+ throw new Error("Table name must not be empty");
7
+ }
8
+ const sanitized = parts.map((part) => {
9
+ if (!IDENTIFIER_PATTERN.test(part)) {
10
+ throw new Error("Invalid table name: use letters, numbers, and underscores (optionally schema.table)");
11
+ }
12
+ return `"${part}"`;
13
+ });
14
+ return sanitized.join(".");
15
+ };
2
16
  /**
3
17
  * Postgres-backed implementation of KVMemory.
4
18
  *
@@ -41,8 +55,9 @@ export class PostgresStore {
41
55
  tableCreated = false;
42
56
  constructor(options = {}) {
43
57
  const { tableName, autoCreateTable, ...poolConfig } = options;
58
+ const sanitizedTableName = sanitizeIdentifier(tableName ?? "cria_kv_store");
59
+ this.tableName = sanitizedTableName;
44
60
  this.pool = new Pool(poolConfig);
45
- this.tableName = tableName ?? "cria_kv_store";
46
61
  this.autoCreateTable = autoCreateTable ?? true;
47
62
  }
48
63
  async ensureTable() {
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAgC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAO;IACX,SAAS,CAAS;IAClB,eAAe,CAAU;IAClC,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,UAAgC,EAAE;QAC5C,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;QAE9D,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,eAAe,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;mCACS,IAAI,CAAC,SAAS;;;;;;;KAO5C,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,2DAA2D,IAAI,CAAC,SAAS,iBAAiB,EAC1F,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAS;YACnB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;YAC7C,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;YAC7C,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,IAAO,EACP,QAAkC;QAElC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,oDAAoD;QACpD,0DAA0D;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;oBACc,IAAI,CAAC,SAAS;;;;;;OAM3B,EACD;YACE,GAAG;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB,GAAG;YACH,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;SAC3C,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,eAAe,IAAI,CAAC,SAAS,iBAAiB,EAC9C,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,OAAO,GAAE,iBAAsB;IAW3C,OAAO,CAAC,WAAW;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAiBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA6BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,OAAO,GAAE,iBAAsB;IAW3C,OAAO,CAAC,WAAW;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA6BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -1,4 +1,30 @@
1
1
  import Redis from "ioredis";
2
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
+ const parseStoredEntry = (raw, key) => {
4
+ let parsed;
5
+ try {
6
+ parsed = JSON.parse(raw);
7
+ }
8
+ catch (error) {
9
+ throw new Error(`RedisStore: invalid JSON stored for key "${key}": ${String(error)}`);
10
+ }
11
+ if (!isRecord(parsed)) {
12
+ throw new Error(`RedisStore: stored value for key "${key}" is not an object`);
13
+ }
14
+ const { data, createdAt, updatedAt, metadata } = parsed;
15
+ if (typeof createdAt !== "number" || typeof updatedAt !== "number") {
16
+ throw new Error(`RedisStore: stored value for key "${key}" is missing createdAt/updatedAt timestamps`);
17
+ }
18
+ if (metadata !== undefined && !isRecord(metadata)) {
19
+ throw new Error(`RedisStore: stored metadata for key "${key}" must be an object if present`);
20
+ }
21
+ return {
22
+ data: data,
23
+ createdAt,
24
+ updatedAt,
25
+ ...(metadata ? { metadata } : {}),
26
+ };
27
+ };
2
28
  /**
3
29
  * Redis-backed implementation of KVMemory.
4
30
  *
@@ -49,11 +75,12 @@ export class RedisStore {
49
75
  return `${this.prefix}${key}`;
50
76
  }
51
77
  async get(key) {
52
- const raw = await this.client.get(this.prefixedKey(key));
78
+ const prefixedKey = this.prefixedKey(key);
79
+ const raw = await this.client.get(prefixedKey);
53
80
  if (raw === null) {
54
81
  return null;
55
82
  }
56
- const stored = JSON.parse(raw);
83
+ const stored = parseStoredEntry(raw, prefixedKey);
57
84
  return {
58
85
  data: stored.data,
59
86
  createdAt: stored.createdAt,
@@ -68,7 +95,7 @@ export class RedisStore {
68
95
  const existingRaw = await this.client.get(prefixedKey);
69
96
  let createdAt = now;
70
97
  if (existingRaw !== null) {
71
- const existing = JSON.parse(existingRaw);
98
+ const existing = parseStoredEntry(existingRaw, prefixedKey);
72
99
  createdAt = existing.createdAt;
73
100
  }
74
101
  const entry = {
@@ -1 +1 @@
1
- {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"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"}