@deepagents/context 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/browser.d.ts +22 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1663 -0
- package/dist/browser.js.map +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +141 -107
- package/dist/index.js.map +4 -4
- package/dist/lib/fragments/message/user.d.ts +54 -0
- package/dist/lib/fragments/message/user.d.ts.map +1 -0
- package/dist/lib/fragments.d.ts +0 -41
- package/dist/lib/fragments.d.ts.map +1 -1
- package/package.json +7 -2
package/dist/index.js
CHANGED
|
@@ -29,113 +29,6 @@ function fragment(name, ...children) {
|
|
|
29
29
|
data: children
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
var SYSTEM_REMINDER_OPEN_TAG = "<system-reminder>";
|
|
33
|
-
var SYSTEM_REMINDER_CLOSE_TAG = "</system-reminder>";
|
|
34
|
-
function isRecord(value) {
|
|
35
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
36
|
-
}
|
|
37
|
-
function assertReminderText(text) {
|
|
38
|
-
if (text.trim().length === 0) {
|
|
39
|
-
throw new Error("Reminder text must not be empty");
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function formatTaggedReminder(text) {
|
|
43
|
-
return `${SYSTEM_REMINDER_OPEN_TAG}${text}${SYSTEM_REMINDER_CLOSE_TAG}`;
|
|
44
|
-
}
|
|
45
|
-
function findLastTextPartIndex(message2) {
|
|
46
|
-
for (let i = message2.parts.length - 1; i >= 0; i--) {
|
|
47
|
-
if (message2.parts[i].type === "text") {
|
|
48
|
-
return i;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return void 0;
|
|
52
|
-
}
|
|
53
|
-
function ensureTextPart(message2) {
|
|
54
|
-
const existingIndex = findLastTextPartIndex(message2);
|
|
55
|
-
if (existingIndex !== void 0) {
|
|
56
|
-
return existingIndex;
|
|
57
|
-
}
|
|
58
|
-
const reminderPart = {
|
|
59
|
-
type: "text",
|
|
60
|
-
text: ""
|
|
61
|
-
};
|
|
62
|
-
message2.parts.push(reminderPart);
|
|
63
|
-
return message2.parts.length - 1;
|
|
64
|
-
}
|
|
65
|
-
function applyInlineReminder(message2, value) {
|
|
66
|
-
const partIndex = ensureTextPart(message2);
|
|
67
|
-
const textPart = message2.parts[partIndex];
|
|
68
|
-
if (textPart.type !== "text") {
|
|
69
|
-
throw new Error("Failed to resolve text part for inline reminder");
|
|
70
|
-
}
|
|
71
|
-
const reminderText = formatTaggedReminder(value);
|
|
72
|
-
const start = textPart.text.length;
|
|
73
|
-
const updatedText = `${textPart.text}${reminderText}`;
|
|
74
|
-
message2.parts[partIndex] = { ...textPart, text: updatedText };
|
|
75
|
-
return {
|
|
76
|
-
id: generateId(),
|
|
77
|
-
text: value,
|
|
78
|
-
partIndex,
|
|
79
|
-
start,
|
|
80
|
-
end: start + reminderText.length,
|
|
81
|
-
mode: "inline"
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function applyPartReminder(message2, value) {
|
|
85
|
-
const part = { type: "text", text: value };
|
|
86
|
-
message2.parts.push(part);
|
|
87
|
-
const partIndex = message2.parts.length - 1;
|
|
88
|
-
return {
|
|
89
|
-
id: generateId(),
|
|
90
|
-
text: value,
|
|
91
|
-
partIndex,
|
|
92
|
-
start: 0,
|
|
93
|
-
end: value.length,
|
|
94
|
-
mode: "part"
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
function reminder(text, options) {
|
|
98
|
-
assertReminderText(text);
|
|
99
|
-
return {
|
|
100
|
-
text,
|
|
101
|
-
asPart: options?.asPart ?? false
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function user(content, ...reminders) {
|
|
105
|
-
const message2 = typeof content === "string" ? {
|
|
106
|
-
id: generateId(),
|
|
107
|
-
role: "user",
|
|
108
|
-
parts: [{ type: "text", text: content }]
|
|
109
|
-
} : { ...content, role: "user", parts: [...content.parts] };
|
|
110
|
-
if (reminders.length > 0) {
|
|
111
|
-
const addedReminders = [];
|
|
112
|
-
for (const item of reminders) {
|
|
113
|
-
assertReminderText(item.text);
|
|
114
|
-
addedReminders.push(
|
|
115
|
-
item.asPart ? applyPartReminder(message2, item.text) : applyInlineReminder(message2, item.text)
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
const metadata = isRecord(message2.metadata) ? { ...message2.metadata } : {};
|
|
119
|
-
const existingReminders = Array.isArray(metadata.reminders) ? metadata.reminders : [];
|
|
120
|
-
metadata.reminders = [...existingReminders, ...addedReminders];
|
|
121
|
-
message2.metadata = metadata;
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
id: message2.id,
|
|
125
|
-
name: "user",
|
|
126
|
-
data: "content",
|
|
127
|
-
type: "message",
|
|
128
|
-
persist: true,
|
|
129
|
-
codec: {
|
|
130
|
-
decode() {
|
|
131
|
-
return message2;
|
|
132
|
-
},
|
|
133
|
-
encode() {
|
|
134
|
-
return message2;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
32
|
function assistant(message2) {
|
|
140
33
|
return {
|
|
141
34
|
id: message2.id,
|
|
@@ -2362,6 +2255,145 @@ function policy(input) {
|
|
|
2362
2255
|
};
|
|
2363
2256
|
}
|
|
2364
2257
|
|
|
2258
|
+
// packages/context/src/lib/fragments/message/user.ts
|
|
2259
|
+
import { generateId as generateId3 } from "ai";
|
|
2260
|
+
var SYSTEM_REMINDER_OPEN_TAG = "<system-reminder>";
|
|
2261
|
+
var SYSTEM_REMINDER_CLOSE_TAG = "</system-reminder>";
|
|
2262
|
+
function getReminderRanges(metadata) {
|
|
2263
|
+
return metadata?.reminders ?? [];
|
|
2264
|
+
}
|
|
2265
|
+
function stripTextByRanges(text, ranges) {
|
|
2266
|
+
if (ranges.length === 0) {
|
|
2267
|
+
return text;
|
|
2268
|
+
}
|
|
2269
|
+
const normalized = ranges.map((range) => ({
|
|
2270
|
+
start: Math.max(0, Math.min(text.length, range.start)),
|
|
2271
|
+
end: Math.max(0, Math.min(text.length, range.end))
|
|
2272
|
+
})).filter((range) => range.end > range.start).sort((a, b) => a.start - b.start);
|
|
2273
|
+
if (normalized.length === 0) {
|
|
2274
|
+
return text;
|
|
2275
|
+
}
|
|
2276
|
+
let cursor = 0;
|
|
2277
|
+
let output = "";
|
|
2278
|
+
for (const range of normalized) {
|
|
2279
|
+
if (range.start < cursor) {
|
|
2280
|
+
if (range.end > cursor) {
|
|
2281
|
+
cursor = range.end;
|
|
2282
|
+
}
|
|
2283
|
+
continue;
|
|
2284
|
+
}
|
|
2285
|
+
output += text.slice(cursor, range.start);
|
|
2286
|
+
cursor = range.end;
|
|
2287
|
+
}
|
|
2288
|
+
output += text.slice(cursor);
|
|
2289
|
+
return output.trimEnd();
|
|
2290
|
+
}
|
|
2291
|
+
function isRecord(value) {
|
|
2292
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2293
|
+
}
|
|
2294
|
+
function assertReminderText(text) {
|
|
2295
|
+
if (text.trim().length === 0) {
|
|
2296
|
+
throw new Error("Reminder text must not be empty");
|
|
2297
|
+
}
|
|
2298
|
+
}
|
|
2299
|
+
function formatTaggedReminder(text) {
|
|
2300
|
+
return `${SYSTEM_REMINDER_OPEN_TAG}${text}${SYSTEM_REMINDER_CLOSE_TAG}`;
|
|
2301
|
+
}
|
|
2302
|
+
function findLastTextPartIndex(message2) {
|
|
2303
|
+
for (let i = message2.parts.length - 1; i >= 0; i--) {
|
|
2304
|
+
if (message2.parts[i].type === "text") {
|
|
2305
|
+
return i;
|
|
2306
|
+
}
|
|
2307
|
+
}
|
|
2308
|
+
return void 0;
|
|
2309
|
+
}
|
|
2310
|
+
function ensureTextPart(message2) {
|
|
2311
|
+
const existingIndex = findLastTextPartIndex(message2);
|
|
2312
|
+
if (existingIndex !== void 0) {
|
|
2313
|
+
return existingIndex;
|
|
2314
|
+
}
|
|
2315
|
+
const reminderPart = {
|
|
2316
|
+
type: "text",
|
|
2317
|
+
text: ""
|
|
2318
|
+
};
|
|
2319
|
+
message2.parts.push(reminderPart);
|
|
2320
|
+
return message2.parts.length - 1;
|
|
2321
|
+
}
|
|
2322
|
+
function applyInlineReminder(message2, value) {
|
|
2323
|
+
const partIndex = ensureTextPart(message2);
|
|
2324
|
+
const textPart = message2.parts[partIndex];
|
|
2325
|
+
if (textPart.type !== "text") {
|
|
2326
|
+
throw new Error("Failed to resolve text part for inline reminder");
|
|
2327
|
+
}
|
|
2328
|
+
const reminderText = formatTaggedReminder(value);
|
|
2329
|
+
const start = textPart.text.length;
|
|
2330
|
+
const updatedText = `${textPart.text}${reminderText}`;
|
|
2331
|
+
message2.parts[partIndex] = { ...textPart, text: updatedText };
|
|
2332
|
+
return {
|
|
2333
|
+
id: generateId3(),
|
|
2334
|
+
text: value,
|
|
2335
|
+
partIndex,
|
|
2336
|
+
start,
|
|
2337
|
+
end: start + reminderText.length,
|
|
2338
|
+
mode: "inline"
|
|
2339
|
+
};
|
|
2340
|
+
}
|
|
2341
|
+
function applyPartReminder(message2, value) {
|
|
2342
|
+
const part = { type: "text", text: value };
|
|
2343
|
+
message2.parts.push(part);
|
|
2344
|
+
const partIndex = message2.parts.length - 1;
|
|
2345
|
+
return {
|
|
2346
|
+
id: generateId3(),
|
|
2347
|
+
text: value,
|
|
2348
|
+
partIndex,
|
|
2349
|
+
start: 0,
|
|
2350
|
+
end: value.length,
|
|
2351
|
+
mode: "part"
|
|
2352
|
+
};
|
|
2353
|
+
}
|
|
2354
|
+
function reminder(text, options) {
|
|
2355
|
+
assertReminderText(text);
|
|
2356
|
+
return {
|
|
2357
|
+
text,
|
|
2358
|
+
asPart: options?.asPart ?? false
|
|
2359
|
+
};
|
|
2360
|
+
}
|
|
2361
|
+
function user(content, ...reminders) {
|
|
2362
|
+
const message2 = typeof content === "string" ? {
|
|
2363
|
+
id: generateId3(),
|
|
2364
|
+
role: "user",
|
|
2365
|
+
parts: [{ type: "text", text: content }]
|
|
2366
|
+
} : { ...content, role: "user", parts: [...content.parts] };
|
|
2367
|
+
if (reminders.length > 0) {
|
|
2368
|
+
const addedReminders = [];
|
|
2369
|
+
for (const item of reminders) {
|
|
2370
|
+
assertReminderText(item.text);
|
|
2371
|
+
addedReminders.push(
|
|
2372
|
+
item.asPart ? applyPartReminder(message2, item.text) : applyInlineReminder(message2, item.text)
|
|
2373
|
+
);
|
|
2374
|
+
}
|
|
2375
|
+
const metadata = isRecord(message2.metadata) ? { ...message2.metadata } : {};
|
|
2376
|
+
const existingReminders = Array.isArray(metadata.reminders) ? metadata.reminders : [];
|
|
2377
|
+
metadata.reminders = [...existingReminders, ...addedReminders];
|
|
2378
|
+
message2.metadata = metadata;
|
|
2379
|
+
}
|
|
2380
|
+
return {
|
|
2381
|
+
id: message2.id,
|
|
2382
|
+
name: "user",
|
|
2383
|
+
data: "content",
|
|
2384
|
+
type: "message",
|
|
2385
|
+
persist: true,
|
|
2386
|
+
codec: {
|
|
2387
|
+
decode() {
|
|
2388
|
+
return message2;
|
|
2389
|
+
},
|
|
2390
|
+
encode() {
|
|
2391
|
+
return message2;
|
|
2392
|
+
}
|
|
2393
|
+
}
|
|
2394
|
+
};
|
|
2395
|
+
}
|
|
2396
|
+
|
|
2365
2397
|
// packages/context/src/lib/fragments/user.ts
|
|
2366
2398
|
function identity(input) {
|
|
2367
2399
|
return {
|
|
@@ -6322,6 +6354,7 @@ export {
|
|
|
6322
6354
|
fail,
|
|
6323
6355
|
fragment,
|
|
6324
6356
|
getModelsRegistry,
|
|
6357
|
+
getReminderRanges,
|
|
6325
6358
|
glossary,
|
|
6326
6359
|
guardrail,
|
|
6327
6360
|
hint,
|
|
@@ -6354,6 +6387,7 @@ export {
|
|
|
6354
6387
|
skills,
|
|
6355
6388
|
soul,
|
|
6356
6389
|
stop,
|
|
6390
|
+
stripTextByRanges,
|
|
6357
6391
|
structuredOutput,
|
|
6358
6392
|
styleGuide,
|
|
6359
6393
|
term,
|