@deepagents/context 4.2.1 → 4.3.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.
Files changed (66) hide show
  1. package/README.md +7 -7
  2. package/dist/browser.d.ts +2 -0
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +29 -26
  5. package/dist/browser.js.map +4 -4
  6. package/dist/index.d.ts +1 -9
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +4263 -4249
  9. package/dist/index.js.map +4 -4
  10. package/dist/lib/agent.d.ts +13 -7
  11. package/dist/lib/agent.d.ts.map +1 -1
  12. package/dist/lib/engine.d.ts +1 -1
  13. package/dist/lib/engine.d.ts.map +1 -1
  14. package/dist/lib/fragments/message/user.d.ts +2 -213
  15. package/dist/lib/fragments/message/user.d.ts.map +1 -1
  16. package/dist/lib/fragments/reminders/index.d.ts +3 -0
  17. package/dist/lib/fragments/reminders/index.d.ts.map +1 -0
  18. package/dist/lib/{save/reminder-eval.d.ts → fragments/reminders/src/evaluate.d.ts} +2 -2
  19. package/dist/lib/fragments/reminders/src/evaluate.d.ts.map +1 -0
  20. package/dist/lib/fragments/reminders/src/index.d.ts +5 -0
  21. package/dist/lib/fragments/reminders/src/index.d.ts.map +1 -0
  22. package/dist/lib/fragments/reminders/src/predicates/classifier.d.ts.map +1 -0
  23. package/dist/lib/fragments/reminders/{combinators.d.ts → src/predicates/combinators.d.ts} +1 -1
  24. package/dist/lib/fragments/reminders/src/predicates/combinators.d.ts.map +1 -0
  25. package/dist/lib/fragments/reminders/{content-predicates.d.ts → src/predicates/content.d.ts} +2 -2
  26. package/dist/lib/fragments/reminders/src/predicates/content.d.ts.map +1 -0
  27. package/dist/lib/fragments/reminders/src/predicates/index.d.ts +9 -0
  28. package/dist/lib/fragments/reminders/src/predicates/index.d.ts.map +1 -0
  29. package/dist/lib/fragments/reminders/{message-predicates.d.ts → src/predicates/message.d.ts} +3 -7
  30. package/dist/lib/fragments/reminders/src/predicates/message.d.ts.map +1 -0
  31. package/dist/lib/fragments/reminders/{once.d.ts → src/predicates/once.d.ts} +1 -1
  32. package/dist/lib/fragments/reminders/src/predicates/once.d.ts.map +1 -0
  33. package/dist/lib/fragments/reminders/{tool-predicates.d.ts → src/predicates/tool.d.ts} +2 -3
  34. package/dist/lib/fragments/reminders/src/predicates/tool.d.ts.map +1 -0
  35. package/dist/lib/fragments/reminders/{turn-predicates.d.ts → src/predicates/turn.d.ts} +2 -2
  36. package/dist/lib/fragments/reminders/src/predicates/turn.d.ts.map +1 -0
  37. package/dist/lib/fragments/reminders/src/predicates/usage.d.ts +3 -0
  38. package/dist/lib/fragments/reminders/src/predicates/usage.d.ts.map +1 -0
  39. package/dist/lib/fragments/reminders/src/reminders.d.ts +114 -0
  40. package/dist/lib/fragments/reminders/src/reminders.d.ts.map +1 -0
  41. package/dist/lib/fragments/reminders/src/types.d.ts +114 -0
  42. package/dist/lib/fragments/reminders/src/types.d.ts.map +1 -0
  43. package/dist/lib/fragments/reminders/temporal/elapsed.d.ts +1 -1
  44. package/dist/lib/fragments/reminders/temporal/elapsed.d.ts.map +1 -1
  45. package/dist/lib/fragments/reminders/temporal/predicates.d.ts +1 -1
  46. package/dist/lib/fragments/reminders/temporal/predicates.d.ts.map +1 -1
  47. package/dist/lib/fragments/reminders/temporal/reminder.d.ts.map +1 -1
  48. package/dist/lib/skills/skill-reminder.d.ts +1 -1
  49. package/dist/lib/skills/skill-reminder.d.ts.map +1 -1
  50. package/dist/lib/title.d.ts.map +1 -1
  51. package/dist/spec/test/global-setup.d.ts +4 -0
  52. package/dist/spec/test/global-setup.d.ts.map +1 -0
  53. package/dist/spec/test/helpers/sqlite-container.d.ts +19 -0
  54. package/dist/spec/test/helpers/sqlite-container.d.ts.map +1 -0
  55. package/package.json +2 -2
  56. package/dist/lib/fragments/reminders/classifier.d.ts.map +0 -1
  57. package/dist/lib/fragments/reminders/combinators.d.ts.map +0 -1
  58. package/dist/lib/fragments/reminders/content-predicates.d.ts.map +0 -1
  59. package/dist/lib/fragments/reminders/message-predicates.d.ts.map +0 -1
  60. package/dist/lib/fragments/reminders/once.d.ts.map +0 -1
  61. package/dist/lib/fragments/reminders/tool-predicates.d.ts.map +0 -1
  62. package/dist/lib/fragments/reminders/turn-predicates.d.ts.map +0 -1
  63. package/dist/lib/fragments/reminders/usage-predicates.d.ts +0 -3
  64. package/dist/lib/fragments/reminders/usage-predicates.d.ts.map +0 -1
  65. package/dist/lib/save/reminder-eval.d.ts.map +0 -1
  66. /package/dist/lib/fragments/reminders/{classifier.d.ts → src/predicates/classifier.d.ts} +0 -0
package/README.md CHANGED
@@ -300,15 +300,16 @@ const ranges = getReminderRanges(message.metadata).filter(
300
300
  (range) => range.partIndex === partIndex,
301
301
  );
302
302
  const visibleText = stripTextByRanges(message.parts[partIndex].text, ranges);
303
+ const firedOnceIds = getReminderOnceIds(message);
303
304
  const messageWithoutReminders = stripReminders(message);
304
305
  ```
305
306
 
306
307
  - `getReminderRanges(metadata)` returns `metadata.reminders` as offset ranges (or `[]` when missing).
308
+ - `getReminderOnceIds(message)` returns durable `once(id)` latch ids stored on a user message.
307
309
 
308
310
  Conditional reminders are registered on the engine, not inside `user(...)`.
309
311
  They can react to turn cadence, classifier matches, tool activity, assistant
310
- history, token usage, idle time, live tool output, and mid-loop streamed step
311
- boundaries:
312
+ history, token usage, idle time, live tool output, and mid-loop steer points:
312
313
 
313
314
  For `target: 'tool-output'`, gate on `ctx.executingTool` to inspect the live
314
315
  tool call being wrapped. Assistant-history predicates such as `toolCalled(...)`
@@ -317,10 +318,10 @@ only describe already persisted calls.
317
318
  ```ts
318
319
  import {
319
320
  anyToolCalled,
321
+ elapsedExceeds,
320
322
  everyOfLastN,
321
323
  not,
322
324
  reminder,
323
- streamStepsExceed,
324
325
  toolCalled,
325
326
  usageExceeds,
326
327
  user,
@@ -337,8 +338,8 @@ engine.set(
337
338
  reminder('Pause and summarize if the thread is getting expensive', {
338
339
  when: usageExceeds(20_000),
339
340
  }),
340
- reminder('Checkpoint before taking another streamed tool step', {
341
- when: streamStepsExceed(2),
341
+ reminder('Checkpoint before a long-running streamed turn continues', {
342
+ when: elapsedExceeds(40 * 60_000),
342
343
  target: 'steer',
343
344
  }),
344
345
  reminder('If no tools were needed for three turns, keep the answer brief', {
@@ -350,8 +351,7 @@ engine.set(
350
351
 
351
352
  Other exported helpers include `toolCallCount(...)`,
352
353
  `lastAssistantLength(...)`, `withinLastN(...)`, `everyOfLastN(...)`, and
353
- `elapsedExceeds(...)`. Streamed-turn helpers include `streamStepsExceed(...)`,
354
- `streamToolCallsExceed(...)`, and `streamUsageExceeds(...)`. See the
354
+ `elapsedExceeds(...)`. See the
355
355
  [Predicates](https://januarylabs.github.io/deepagents/docs/context/predicates)
356
356
  page for the full catalog.
357
357
 
package/dist/browser.d.ts CHANGED
@@ -10,6 +10,8 @@ export * from './lib/estimate.ts';
10
10
  export * from './lib/fragments.ts';
11
11
  export * from './lib/fragments/domain.ts';
12
12
  export * from './lib/fragments/message/user.ts';
13
+ export * from './lib/fragments/reminders/src/reminders.ts';
14
+ export type { BaseWhenCtx, ConditionalReminder, CountSpec, ReminderContext, ReminderFragment, ReminderOptions, ReminderRange, ReminderResolution, ReminderTarget, ReminderText, SyncReminderText, SyntheticSteerMetadata, UserReminderMetadata, WhenContext, WhenPredicate, } from './lib/fragments/reminders/src/types.ts';
13
15
  export * from './lib/fragments/user.ts';
14
16
  export * from './lib/guardrail.ts';
15
17
  export * from './lib/models.generated.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sCAAsC,CAAC;AACrD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4CAA4C,CAAC;AAC3D,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,aAAa,GACd,MAAM,wCAAwC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sCAAsC,CAAC;AACrD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
package/dist/browser.js CHANGED
@@ -912,8 +912,32 @@ async function estimate(modelId, renderer, ...fragments) {
912
912
  }
913
913
 
914
914
  // packages/context/src/lib/fragments/message/user.ts
915
+ import { generateId as generateId2 } from "ai";
916
+ function user(content) {
917
+ const message2 = typeof content === "string" ? {
918
+ id: generateId2(),
919
+ role: "user",
920
+ parts: [{ type: "text", text: content }]
921
+ } : { ...content, role: "user", parts: [...content.parts] };
922
+ return {
923
+ id: message2.id,
924
+ name: "user",
925
+ type: "message",
926
+ persist: true,
927
+ codec: {
928
+ decode() {
929
+ return message2;
930
+ },
931
+ encode() {
932
+ return message2;
933
+ }
934
+ }
935
+ };
936
+ }
937
+
938
+ // packages/context/src/lib/fragments/reminders/src/reminders.ts
915
939
  import {
916
- generateId as generateId2,
940
+ generateId as generateId3,
917
941
  isStaticToolUIPart
918
942
  } from "ai";
919
943
 
@@ -1802,7 +1826,7 @@ function extractPlainText(message2) {
1802
1826
  return getTextParts(message2).join(" ");
1803
1827
  }
1804
1828
 
1805
- // packages/context/src/lib/fragments/message/user.ts
1829
+ // packages/context/src/lib/fragments/reminders/src/reminders.ts
1806
1830
  function isConditionalReminder(fragment2) {
1807
1831
  return fragment2.name === "reminder" && !!fragment2.metadata?.reminder;
1808
1832
  }
@@ -1953,7 +1977,7 @@ function applyInlineReminder(message2, value) {
1953
1977
  const updatedText = `${textPart.text}${reminderText}`;
1954
1978
  message2.parts[partIndex] = { ...textPart, text: updatedText };
1955
1979
  return {
1956
- id: generateId2(),
1980
+ id: generateId3(),
1957
1981
  text: value,
1958
1982
  target: "user",
1959
1983
  partIndex,
@@ -1968,7 +1992,7 @@ function applyPartReminder(message2, value) {
1968
1992
  message2.parts.push(part);
1969
1993
  const partIndex = message2.parts.length - 1;
1970
1994
  return {
1971
- id: generateId2(),
1995
+ id: generateId3(),
1972
1996
  text: value,
1973
1997
  target: "user",
1974
1998
  partIndex,
@@ -2071,27 +2095,6 @@ function reminder(textOrFragment, options) {
2071
2095
  }
2072
2096
  };
2073
2097
  }
2074
- function user(content) {
2075
- const message2 = typeof content === "string" ? {
2076
- id: generateId2(),
2077
- role: "user",
2078
- parts: [{ type: "text", text: content }]
2079
- } : { ...content, role: "user", parts: [...content.parts] };
2080
- return {
2081
- id: message2.id,
2082
- name: "user",
2083
- type: "message",
2084
- persist: true,
2085
- codec: {
2086
- decode() {
2087
- return message2;
2088
- },
2089
- encode() {
2090
- return message2;
2091
- }
2092
- }
2093
- };
2094
- }
2095
2098
  function applyUserRemindersToMessage(message2, reminders) {
2096
2099
  if (reminders.length === 0) return;
2097
2100
  const plainText = extractPlainText(message2);
@@ -2106,7 +2109,7 @@ function synthesizeSteerUserMessage(text, firedAt, onceIds = []) {
2106
2109
  const texts = Array.isArray(text) ? text : [text];
2107
2110
  for (const value of texts) assertReminderText(value);
2108
2111
  return {
2109
- id: generateId2(),
2112
+ id: generateId3(),
2110
2113
  role: "user",
2111
2114
  parts: texts.map((value) => ({
2112
2115
  type: "text",