@recombine-ai/engine 1.0.0-beta-3 → 1.0.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 (47) hide show
  1. package/build/lib/bosun/action.d.ts +12 -0
  2. package/build/lib/bosun/action.d.ts.map +1 -1
  3. package/build/lib/bosun/action.js +6 -0
  4. package/build/lib/bosun/agent.d.ts +19 -1
  5. package/build/lib/bosun/agent.d.ts.map +1 -1
  6. package/build/lib/bosun/agent.js +3 -0
  7. package/build/lib/bosun/api-call-tracer.d.ts +9 -0
  8. package/build/lib/bosun/api-call-tracer.d.ts.map +1 -1
  9. package/build/lib/bosun/api-call-tracer.js +3 -0
  10. package/build/lib/bosun/context.d.ts +6 -0
  11. package/build/lib/bosun/context.d.ts.map +1 -1
  12. package/build/lib/bosun/context.js +3 -0
  13. package/build/lib/bosun/conversational-tracer.d.ts +9 -0
  14. package/build/lib/bosun/conversational-tracer.d.ts.map +1 -1
  15. package/build/lib/bosun/conversational-tracer.js +3 -0
  16. package/build/lib/bosun/index.d.ts +25 -1
  17. package/build/lib/bosun/index.d.ts.map +1 -1
  18. package/build/lib/bosun/index.js +21 -0
  19. package/build/lib/bosun/mock.d.ts +3 -0
  20. package/build/lib/bosun/mock.d.ts.map +1 -1
  21. package/build/lib/bosun/mock.js +3 -0
  22. package/build/lib/bosun/step-tracer.d.ts +13 -2
  23. package/build/lib/bosun/step-tracer.d.ts.map +1 -1
  24. package/build/lib/bosun/step-tracer.js +3 -0
  25. package/build/lib/engine.js +1 -1
  26. package/build/lib/interfaces/stream.d.ts +2 -16
  27. package/build/lib/interfaces/stream.d.ts.map +1 -1
  28. package/build/lib/{bosun/step-registry.d.ts → step-registry.d.ts} +2 -2
  29. package/build/lib/step-registry.d.ts.map +1 -0
  30. package/build/lib/stream/engine.d.ts +1 -1
  31. package/build/lib/stream/engine.d.ts.map +1 -1
  32. package/build/lib/stream/engine.js +73 -129
  33. package/build/lib/stream/index.d.ts +1 -1
  34. package/build/lib/stream/index.d.ts.map +1 -1
  35. package/build/lib/stream/token-transformers.d.ts +6 -0
  36. package/build/lib/stream/token-transformers.d.ts.map +1 -0
  37. package/build/lib/stream/token-transformers.js +62 -0
  38. package/changelog.md +1 -0
  39. package/package.json +1 -1
  40. package/build/lib/bosun/step-registry.d.ts.map +0 -1
  41. package/build/lib/interfaces/ai.d.ts +0 -1
  42. package/build/lib/interfaces/ai.d.ts.map +0 -1
  43. package/build/lib/interfaces/ai.js +0 -1
  44. package/build/lib/stream/filter.d.ts +0 -6
  45. package/build/lib/stream/filter.d.ts.map +0 -1
  46. package/build/lib/stream/filter.js +0 -20
  47. /package/build/lib/{bosun/step-registry.js → step-registry.js} +0 -0
@@ -1,10 +1,22 @@
1
+ /**
2
+ * @deprecated unused
3
+ */
1
4
  export interface Action {
2
5
  id: string;
3
6
  type: string;
4
7
  state: 'started' | 'completed' | 'failed';
5
8
  message: string;
6
9
  }
10
+ /**
11
+ * @deprecated unused
12
+ */
7
13
  export type SendAction = (action: Action) => Promise<void>;
14
+ /**
15
+ * @deprecated unused
16
+ */
8
17
  export declare function makeActionWrapper(sendAction: SendAction): (message: string, type: string, action: () => Promise<unknown>) => Promise<void>;
18
+ /**
19
+ * @deprecated unused
20
+ */
9
21
  export declare function makeAction(sendAction: SendAction | undefined, type: string, message: string): (state?: Action["state"]) => Promise<void>;
10
22
  //# sourceMappingURL=action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/action.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;IACzC,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAE1D,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,IAEhD,SAAS,MAAM,EACf,MAAM,MAAM,EACZ,QAAQ,MAAM,OAAO,CAAC,OAAO,CAAC,mBAiBrC;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAM1D,MAAM,CAAC,OAAO,CAAC,mBAQhD"}
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/action.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;IACzC,OAAO,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAE1D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,IAEhD,SAAS,MAAM,EACf,MAAM,MAAM,EACZ,QAAQ,MAAM,OAAO,CAAC,OAAO,CAAC,mBAiBrC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAM1D,MAAM,CAAC,OAAO,CAAC,mBAQhD"}
@@ -3,6 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.makeActionWrapper = makeActionWrapper;
5
5
  exports.makeAction = makeAction;
6
+ /**
7
+ * @deprecated unused
8
+ */
6
9
  function makeActionWrapper(sendAction) {
7
10
  return async function wrapAction(message, type, action) {
8
11
  const id = Math.random().toString();
@@ -21,6 +24,9 @@ function makeActionWrapper(sendAction) {
21
24
  });
22
25
  };
23
26
  }
27
+ /**
28
+ * @deprecated unused
29
+ */
24
30
  function makeAction(sendAction, type, message) {
25
31
  if (!sendAction) {
26
32
  // noop
@@ -1,6 +1,6 @@
1
1
  import { Logger, Message, Scheduler } from '../interfaces';
2
2
  import { Context } from './context';
3
- import { StepRegistry } from './step-registry';
3
+ import { StepRegistry } from '../step-registry';
4
4
  import { StepTracer } from './step-tracer';
5
5
  import { ApiCallTracer } from './api-call-tracer';
6
6
  import { ConversationalTracer } from './conversational-tracer';
@@ -25,6 +25,9 @@ import { ConversationalTracer } from './conversational-tracer';
25
25
  * ```
26
26
  */
27
27
  type DefaultContext = Record<string, any>;
28
+ /**
29
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
30
+ */
28
31
  export interface TestAgentFactoryProps<CTX extends DefaultContext = DefaultContext> {
29
32
  stepRegistry: StepRegistry;
30
33
  /**
@@ -46,6 +49,9 @@ export interface TestAgentFactoryProps<CTX extends DefaultContext = DefaultConte
46
49
  sendMessage: (message: string | Message) => Promise<void>;
47
50
  ctx: Context<CTX>;
48
51
  }
52
+ /**
53
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
54
+ */
49
55
  export interface TestTextAgent {
50
56
  start: () => Promise<unknown>;
51
57
  reactOnMessage: () => Promise<unknown>;
@@ -53,6 +59,9 @@ export interface TestTextAgent {
53
59
  isAssigned: () => Promise<boolean>;
54
60
  onFatalError: (error: Error) => Promise<unknown>;
55
61
  }
62
+ /**
63
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
64
+ */
56
65
  export interface TestVoiceAgent {
57
66
  streamResponse: () => Promise<unknown>;
58
67
  onCallEnd: () => Promise<unknown>;
@@ -60,8 +69,17 @@ export interface TestVoiceAgent {
60
69
  onFatalError: (error: Error) => Promise<unknown>;
61
70
  resetContext: () => Promise<unknown>;
62
71
  }
72
+ /**
73
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
74
+ */
63
75
  export type TestAgent = TestTextAgent | TestVoiceAgent;
76
+ /**
77
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
78
+ */
64
79
  export type TestAgentFactory<T extends DefaultContext = DefaultContext> = (props: TestAgentFactoryProps<T>) => Promise<TestAgent>;
80
+ /**
81
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
82
+ */
65
83
  export declare function createTestAgentFactory<T extends DefaultContext>(creator: TestAgentFactory<T>): TestAgentFactory<T>;
66
84
  export {};
67
85
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACzC,MAAM,WAAW,qBAAqB,CAAC,GAAG,SAAS,cAAc,GAAG,cAAc;IAC9E,YAAY,EAAE,YAAY,CAAA;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,WAAW,EAAE,MAAM,OAAO,EAAE,CAAA;IAC5B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACnD;AACD,MAAM,WAAW,cAAc;IAC3B,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACjC,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAEhD,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACvC;AAED,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,cAAc,CAAA;AAEtD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,CACtE,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAC9B,OAAO,CAAC,SAAS,CAAC,CAAA;AAEvB,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,uBAE5F"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACzC;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,GAAG,SAAS,cAAc,GAAG,cAAc;IAC9E,YAAY,EAAE,YAAY,CAAA;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,WAAW,EAAE,MAAM,OAAO,EAAE,CAAA;IAC5B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACnD;AACD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACjC,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAEhD,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACvC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,cAAc,CAAA;AAEtD;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,CACtE,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAC9B,OAAO,CAAC,SAAS,CAAC,CAAA;AAEvB;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,uBAE5F"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createTestAgentFactory = createTestAgentFactory;
4
+ /**
5
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
6
+ */
4
7
  function createTestAgentFactory(creator) {
5
8
  return creator;
6
9
  }
@@ -6,6 +6,9 @@ import { Logger } from '../interfaces';
6
6
  * your domain "call"/"conversation" identifier. To get a per-call UI timeline, scope your tracer in the app
7
7
  * layer by injecting `conversationId` onto every `ApiCallTrace` before passing it to the SDK.
8
8
  */
9
+ /**
10
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
11
+ */
9
12
  export type ApiCallTrace = {
10
13
  /** Unique ID for the trace */
11
14
  traceId?: string;
@@ -29,10 +32,16 @@ export type ApiCallTrace = {
29
32
  /** Timestamp in milliseconds */
30
33
  createdAt: number;
31
34
  };
35
+ /**
36
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
37
+ */
32
38
  export interface ApiCallTracer {
33
39
  addApiCallTrace(trace: ApiCallTrace): void;
34
40
  flush(): Promise<void>;
35
41
  }
42
+ /**
43
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
44
+ */
36
45
  export declare function createStubApiCallTracer(logger: Logger): {
37
46
  addApiCallTrace(trace: ApiCallTrace): void;
38
47
  flush(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"api-call-tracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/api-call-tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACvB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IAEZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,aAAa;IAC1B,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM;2BAEvB,YAAY;;EAQ1C"}
1
+ {"version":3,"file":"api-call-tracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/api-call-tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC;;;;;;GAMG;AACH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACvB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IAEZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM;2BAEvB,YAAY;;EAQ1C"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createStubApiCallTracer = createStubApiCallTracer;
4
+ /**
5
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
6
+ */
4
7
  function createStubApiCallTracer(logger) {
5
8
  return {
6
9
  addApiCallTrace(trace) {
@@ -15,10 +15,16 @@ declare class Context<T extends Ctx> {
15
15
  setPromptContextMapper(promptMapper: (ctx: T) => object): void;
16
16
  getPromptContextMapper(): (ctx: T) => object;
17
17
  }
18
+ /**
19
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
20
+ */
18
21
  export declare function createContext<T extends Ctx>(context: T): Context<T>;
19
22
  type Public<T> = {
20
23
  [P in keyof T]: T[P];
21
24
  };
22
25
  type PublicContext<T extends Ctx> = Public<Context<T>>;
26
+ /**
27
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
28
+ */
23
29
  export type { PublicContext as Context };
24
30
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/context.ts"],"names":[],"mappings":"AAAA,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAC9B,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC1B;KACK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAC,MAAM,CAAC,CAAC,GACV,KAAK,CAAA;AAEX,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,GACrE,KAAK,SAAS,MAAM,CAAC,GACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GACpB,CAAC,CAAC,KAAK,CAAC,GACR,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAC7B,KAAK,GACT,KAAK,CAAA;AAEX,cAAM,OAAO,CAAC,CAAC,SAAS,GAAG;;gBAIX,OAAO,EAAE,CAAC;IAItB,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IACxF,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI;IAgBxB,GAAG;IAIH,gCAAgC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;IAIlB,SAAS,GAAI,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,mBAG1C;IAED,sBAAsB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM;IAIvD,sBAAsB,UAxCD,CAAC,KAAK,MAAM;CA2CpC;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,CAAC,cAEtD;AAED,KAAK,MAAM,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAEzC,KAAK,aAAa,CAAC,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAEtD,YAAY,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/context.ts"],"names":[],"mappings":"AAAA,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAC9B,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC1B;KACK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAC,MAAM,CAAC,CAAC,GACV,KAAK,CAAA;AAEX,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,GACrE,KAAK,SAAS,MAAM,CAAC,GACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GACpB,CAAC,CAAC,KAAK,CAAC,GACR,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAC7B,KAAK,GACT,KAAK,CAAA;AAEX,cAAM,OAAO,CAAC,CAAC,SAAS,GAAG;;gBAIX,OAAO,EAAE,CAAC;IAItB,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IACxF,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI;IAgBxB,GAAG;IAIH,gCAAgC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;IAIlB,SAAS,GAAI,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,mBAG1C;IAED,sBAAsB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM;IAIvD,sBAAsB,UAxCD,CAAC,KAAK,MAAM;CA2CpC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,CAAC,cAEtD;AAED,KAAK,MAAM,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAEzC,KAAK,aAAa,CAAC,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAEtD;;GAEG;AACH,YAAY,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA"}
@@ -41,6 +41,9 @@ class Context {
41
41
  return this.#promptMapper;
42
42
  }
43
43
  }
44
+ /**
45
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
46
+ */
44
47
  function createContext(context) {
45
48
  return new Context(context);
46
49
  }
@@ -4,6 +4,9 @@ import { Logger } from '../interfaces';
4
4
  * message received/sent, streaming finished, handler invoked) that UIs may want to show on the same
5
5
  * per-conversation timeline.
6
6
  */
7
+ /**
8
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
9
+ */
7
10
  export type ConversationalTrace = {
8
11
  /** Unique ID for the trace */
9
12
  traceId?: string;
@@ -23,10 +26,16 @@ export type ConversationalTrace = {
23
26
  createdAt: number;
24
27
  error?: unknown;
25
28
  };
29
+ /**
30
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
31
+ */
26
32
  export interface ConversationalTracer {
27
33
  addConversationalTrace(trace: ConversationalTrace): void;
28
34
  flush(): Promise<void>;
29
35
  }
36
+ /**
37
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
38
+ */
30
39
  export declare function createStubConversationalTracer(logger: Logger): {
31
40
  addConversationalTrace(trace: ConversationalTrace): void;
32
41
  flush(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"conversational-tracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/conversational-tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,wCAAwC;IACxC,SAAS,EACH,8BAA8B,GAC9B,8BAA8B,GAC9B,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,kBAAkB,CAAA;IAExB,sDAAsD;IACtD,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;IAEjD,qDAAqD;IACrD,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;IAE5C,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;IAEf,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IAEjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,oBAAoB;IACjC,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM;kCAEvB,mBAAmB;;EAKxD"}
1
+ {"version":3,"file":"conversational-tracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/conversational-tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC;;;;GAIG;AACH;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,wCAAwC;IACxC,SAAS,EACH,8BAA8B,GAC9B,8BAA8B,GAC9B,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,kBAAkB,CAAA;IAExB,sDAAsD;IACtD,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;IAEjD,qDAAqD;IACrD,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;IAE5C,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;IAEf,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IAEjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM;kCAEvB,mBAAmB;;EAKxD"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createStubConversationalTracer = createStubConversationalTracer;
4
+ /**
5
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
6
+ */
4
7
  function createStubConversationalTracer(logger) {
5
8
  return {
6
9
  addConversationalTrace(trace) {
@@ -1,9 +1,33 @@
1
+ /**
2
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
3
+ */
1
4
  export * from './action';
5
+ /**
6
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
7
+ */
2
8
  export * from './context';
9
+ /**
10
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
11
+ */
3
12
  export * from './agent';
13
+ /**
14
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
15
+ */
4
16
  export * from './mock';
5
- export { PromptString, StepDef, StepRegistry } from './step-registry';
17
+ /**
18
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
19
+ */
20
+ export { PromptString, StepDef, StepRegistry } from '../step-registry';
21
+ /**
22
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
23
+ */
6
24
  export * from './step-tracer';
25
+ /**
26
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
27
+ */
7
28
  export * from './api-call-tracer';
29
+ /**
30
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
31
+ */
8
32
  export * from './conversational-tracer';
9
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACrE,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,UAAU,CAAA;AACxB;;GAEG;AACH,cAAc,WAAW,CAAA;AACzB;;GAEG;AACH,cAAc,SAAS,CAAA;AACvB;;GAEG;AACH,cAAc,QAAQ,CAAA;AACtB;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACtE;;GAEG;AACH,cAAc,eAAe,CAAA;AAC7B;;GAEG;AACH,cAAc,mBAAmB,CAAA;AACjC;;GAEG;AACH,cAAc,yBAAyB,CAAA"}
@@ -14,10 +14,31 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
19
+ */
17
20
  __exportStar(require("./action"), exports);
21
+ /**
22
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
23
+ */
18
24
  __exportStar(require("./context"), exports);
25
+ /**
26
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
27
+ */
19
28
  __exportStar(require("./agent"), exports);
29
+ /**
30
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
31
+ */
20
32
  __exportStar(require("./mock"), exports);
33
+ /**
34
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
35
+ */
21
36
  __exportStar(require("./step-tracer"), exports);
37
+ /**
38
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
39
+ */
22
40
  __exportStar(require("./api-call-tracer"), exports);
41
+ /**
42
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
43
+ */
23
44
  __exportStar(require("./conversational-tracer"), exports);
@@ -1,6 +1,9 @@
1
1
  import { Logger } from '../interfaces';
2
2
  type ConstructorType<T> = new (...args: any[]) => T;
3
3
  type InstanceType<T extends ConstructorType<any>> = T extends new (...args: any[]) => infer R ? R : never;
4
+ /**
5
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
6
+ */
4
7
  export declare function createMock<T extends ConstructorType<any>>(logger: Logger, constructor: T, overrides?: Partial<InstanceType<T>>): InstanceType<T>;
5
8
  export {};
6
9
  //# sourceMappingURL=mock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,KAAK,eAAe,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AACnD,KAAK,YAAY,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GACvF,CAAC,GACD,KAAK,CAAA;AAEX,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,CAAC,EACrD,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,CAAC,EACd,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACrC,YAAY,CAAC,CAAC,CAAC,CAuBjB"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,KAAK,eAAe,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AACnD,KAAK,YAAY,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GACvF,CAAC,GACD,KAAK,CAAA;AAEX;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,CAAC,EACrD,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,CAAC,EACd,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACrC,YAAY,CAAC,CAAC,CAAC,CAuBjB"}
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createMock = createMock;
4
4
  const node_util_1 = require("node:util");
5
+ /**
6
+ * @deprecated Use the analog from @recombine-ai/bosun-lib instead.
7
+ */
5
8
  function createMock(logger, constructor, overrides) {
6
9
  const mock = Object.create(constructor.prototype);
7
10
  const properties = Object.getOwnPropertyDescriptors(constructor.prototype);
@@ -1,12 +1,17 @@
1
1
  import { type ZodType } from 'zod';
2
- import { PromptFile } from '../prompt-fs';
3
2
  import { Logger } from '../interfaces';
3
+ /**
4
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
5
+ */
4
6
  export type LlmUsage = {
5
7
  promptTokens?: number;
6
8
  completionTokens?: number;
7
9
  totalTokens?: number;
8
10
  cachedPromptTokens?: number;
9
11
  };
12
+ /**
13
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
14
+ */
10
15
  export type StepTrace = {
11
16
  /** Unique ID for the trace */
12
17
  traceId?: string;
@@ -20,7 +25,7 @@ export type StepTrace = {
20
25
  name: string;
21
26
  renderedPrompt?: string;
22
27
  receivedContext?: Record<string, unknown> | unknown;
23
- receivedPrompt?: string | PromptFile | File;
28
+ receivedPrompt?: string;
24
29
  stringifiedConversation?: string;
25
30
  schema?: ZodType;
26
31
  model?: string;
@@ -31,6 +36,9 @@ export type StepTrace = {
31
36
  createdAt: number;
32
37
  error?: Error;
33
38
  };
39
+ /**
40
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
41
+ */
34
42
  export interface StepTracer {
35
43
  /**
36
44
  * Add a step trace
@@ -42,6 +50,9 @@ export interface StepTracer {
42
50
  */
43
51
  flush(): Promise<void>;
44
52
  }
53
+ /**
54
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
55
+ */
45
56
  export declare function createStubStepTracer(logger: Logger): {
46
57
  addStepTrace(trace: StepTrace): void;
47
58
  flush(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"step-tracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/step-tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAgB,MAAM,KAAK,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,MAAM,MAAM,QAAQ,GAAG;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAA;IAErB,IAAI,EAAE,MAAM,CAAA;IAEZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IACnD,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;IAE3C,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAEnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IAEjB,KAAK,CAAC,EAAE,KAAK,CAAA;CAChB,CAAA;AAED,MAAM,WAAW,UAAU;IACvB;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAEpC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM;wBAEvB,SAAS;;EA2BpC"}
1
+ {"version":3,"file":"step-tracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/step-tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAgB,MAAM,KAAK,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAA;IAErB,IAAI,EAAE,MAAM,CAAA;IAEZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IACnD,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAEnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IAEjB,KAAK,CAAC,EAAE,KAAK,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAEpC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM;wBAEvB,SAAS;;EA2BpC"}
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createStubStepTracer = createStubStepTracer;
4
4
  const zod_1 = require("zod");
5
+ /**
6
+ * @deprecated Use the analog from @recombine-ai/telescope instead.
7
+ */
5
8
  function createStubStepTracer(logger) {
6
9
  return {
7
10
  addStepTrace(trace) {
@@ -44,7 +44,7 @@ const crypto_1 = require("crypto");
44
44
  const nunjucks_1 = __importDefault(require("nunjucks"));
45
45
  const Zod = __importStar(require("zod"));
46
46
  const step_tracer_1 = require("./bosun/step-tracer");
47
- const step_registry_1 = require("./bosun/step-registry");
47
+ const step_registry_1 = require("./step-registry");
48
48
  /**
49
49
  * Creates an AI Engine with the given configuration.
50
50
  *
@@ -30,15 +30,13 @@ export interface StreamWorkflowConfig<CTX> {
30
30
  /** LLM model with streaming support */
31
31
  model: LlmStreamAdapter;
32
32
  onError: (error: Error | string, ctx: CTX) => Promise<void>;
33
- /** filter out some tokens on the fly */
34
- filter?: ProgrammaticFilter;
33
+ /** transform LLM-tokens on the fly */
34
+ tokenTransformers?: (() => TransformStream<string, string>)[];
35
35
  }
36
36
  export interface Transcript {
37
37
  responseChunks: ResponseChunk[];
38
38
  messages: Message[];
39
39
  readonly currentResponse: string;
40
- readonly mainResponseFinished: boolean;
41
- markMainResponseFinished(): void;
42
40
  toString(ignoreDirectives?: boolean): string;
43
41
  getConversation(): Message[];
44
42
  }
@@ -52,18 +50,6 @@ export interface LlmStreamAdapter {
52
50
  /** Returns adapter's configuration/options for tracing */
53
51
  getOptions: () => unknown;
54
52
  }
55
- export interface ProgrammaticFilter {
56
- shouldStartFiltering: (state: Transcript, newToken: string) => boolean;
57
- onNewToken: (state: Transcript, filteredTokens: string[]) => {
58
- action: 'CONTINUE_FILTERING';
59
- } | {
60
- action: 'RELEASE_TOKENS';
61
- tokens: string[];
62
- };
63
- onStreamEnd: (state: Transcript, filteredTokens: string[]) => {
64
- tokensToRelease: string[];
65
- };
66
- }
67
53
  export interface ResponseChunk {
68
54
  role: 'agent' | 'system';
69
55
  delta: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC,MAAM,WAAW,cAAc,CAAC,GAAG,SAAS,EAAE;IAC1C,iCAAiC;IACjC,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK;QACnD;;;;;WAKG;QACH,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAA;KACjF,CAAA;CACJ;AAED,MAAM,WAAW,qBAAqB;IAClC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,iGAAiG;IACjG,UAAU,CAAC,EAAE,UAAU,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB,CAAC,GAAG;IACrC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB;IACpB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IAC3B,uCAAuC;IACvC,KAAK,EAAE,gBAAgB,CAAA;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,wCAAwC;IACxC,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC9B;AAED,MAAM,WAAW,UAAU;IACvB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;IACtC,wBAAwB,IAAI,IAAI,CAAA;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5C,eAAe,IAAI,OAAO,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC7B;;;;OAIG;IACH,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3F,0DAA0D;IAC1D,UAAU,EAAE,MAAM,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAC/B,oBAAoB,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;IACtE,UAAU,EAAE,CACR,KAAK,EAAE,UAAU,EACjB,cAAc,EAAE,MAAM,EAAE,KACvB;QAAE,MAAM,EAAE,oBAAoB,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACtF,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK;QAAE,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAC9F;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CAChB"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC,MAAM,WAAW,cAAc,CAAC,GAAG,SAAS,EAAE;IAC1C,iCAAiC;IACjC,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK;QACnD;;;;;WAKG;QACH,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAA;KACjF,CAAA;CACJ;AAED,MAAM,WAAW,qBAAqB;IAClC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,iGAAiG;IACjG,UAAU,CAAC,EAAE,UAAU,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB,CAAC,GAAG;IACrC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB;IACpB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IAC3B,uCAAuC;IACvC,KAAK,EAAE,gBAAgB,CAAA;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,CAAC,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAA;CAChE;AAED,MAAM,WAAW,UAAU;IACvB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5C,eAAe,IAAI,OAAO,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC7B;;;;OAIG;IACH,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3F,0DAA0D;IAC1D,UAAU,EAAE,MAAM,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CAChB"}
@@ -1,6 +1,6 @@
1
1
  import { type ZodType } from 'zod';
2
- import { PromptFile } from '../prompt-fs';
3
- import { Logger } from '../interfaces';
2
+ import { PromptFile } from './prompt-fs';
3
+ import { Logger } from './interfaces';
4
4
  export interface PromptString {
5
5
  type: 'string';
6
6
  content: () => Promise<string>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-registry.d.ts","sourceRoot":"","sources":["../../src/lib/step-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,GAAG,MAAM,CAAA;IACxD,MAAM,EAAE,UAAU,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;CAC9B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAM/D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,6BAQpD"}
@@ -1,3 +1,3 @@
1
- import { AIStreamEngine, StreamingEngineConfig } from '../interfaces/stream';
1
+ import { AIStreamEngine, StreamingEngineConfig } from '../interfaces';
2
2
  export declare function createAIStreamEngine<CTX extends {}>(cfg: StreamingEngineConfig): AIStreamEngine<CTX>;
3
3
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/lib/stream/engine.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,cAAc,EAGd,qBAAqB,EAGxB,MAAM,sBAAsB,CAAA;AAI7B,wBAAgB,oBAAoB,CAAC,GAAG,SAAS,EAAE,EAC/C,GAAG,EAAE,qBAAqB,GAC3B,cAAc,CAAC,GAAG,CAAC,CAuMrB"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/lib/stream/engine.ts"],"names":[],"mappings":"AAKA,OAAO,EAGH,cAAc,EAEd,qBAAqB,EAGxB,MAAM,eAAe,CAAA;AAItB,wBAAgB,oBAAoB,CAAC,GAAG,SAAS,EAAE,EAC/C,GAAG,EAAE,qBAAqB,GAC3B,cAAc,CAAC,GAAG,CAAC,CAwIrB"}
@@ -7,10 +7,10 @@ exports.createAIStreamEngine = createAIStreamEngine;
7
7
  // cspell:words TTFT lstrip
8
8
  const nunjucks_1 = __importDefault(require("nunjucks"));
9
9
  const bosun_1 = require("../bosun");
10
- const filter_1 = require("./filter");
11
- const step_registry_1 = require("../bosun/step-registry");
10
+ const step_registry_1 = require("../step-registry");
11
+ const token_transformers_1 = require("./token-transformers");
12
12
  function createAIStreamEngine(cfg) {
13
- function createWorkflow({ name, prompt, model, filter = filter_1.defaultFilter, onError, }) {
13
+ function createWorkflow({ name, prompt, model, tokenTransformers = [token_transformers_1.agentFilter], onError, }) {
14
14
  const logger = cfg.logger || console;
15
15
  logger.debug('streamAiEngine.createWorkflow');
16
16
  const stepTracer = cfg.stepTracer || (0, bosun_1.createStubStepTracer)(logger);
@@ -20,151 +20,103 @@ function createAIStreamEngine(cfg) {
20
20
  prompt: (0, step_registry_1.stdPrompt)(prompt),
21
21
  });
22
22
  async function run(messages, ctx) {
23
- let streamCancelled = false;
24
- return new ReadableStream({
25
- cancel: (reason) => {
26
- logger.debug(`streamingWorkflow.run cancelled: ${reason}`);
27
- streamCancelled = true;
28
- },
29
- start: async (controller) => {
30
- try {
31
- const stream = await generateResponseStream(messages, ctx);
32
- for await (const chunk of stream) {
33
- if (streamCancelled)
34
- return;
35
- controller.enqueue(chunk);
36
- }
37
- if (streamCancelled)
38
- return;
39
- controller.close();
40
- }
41
- catch (e) {
42
- if (streamCancelled) {
43
- logger.debug('streamingWorkflow.run will not propagate error due to stream cancellation', e);
44
- return;
45
- }
46
- controller.error(e);
47
- await onError(e, ctx);
48
- }
49
- },
50
- });
51
- }
52
- async function generateResponseStream(messages, ctx) {
53
23
  const runId = crypto.randomUUID();
54
24
  logger.debug(`streamingWorkflow.run runId: ${runId}`);
55
25
  const startTime = performance.now();
56
26
  const transcript = createTranscript(logger, messages);
57
- let currentFilter = null;
58
- let filteredTokens = [];
27
+ const initiatedTransformers = tokenTransformers.map((init) => init());
28
+ const template = typeof prompt === 'string' ? prompt : await prompt.content();
29
+ nunjucks_1.default.configure({
30
+ autoescape: true,
31
+ trimBlocks: true,
32
+ lstripBlocks: true,
33
+ });
34
+ const renderedPrompt = nunjucks_1.default.renderString(template, ctx || {});
35
+ const stringifiedConversation = transcript.toString();
59
36
  // Create step trace for telescope
60
37
  const mainStepTrace = {
61
38
  workflowId: name,
62
39
  workflowRunId: runId,
63
40
  name: name,
64
- model: String(model.getOptions()),
41
+ model: JSON.stringify(model.getOptions()),
65
42
  createdAt: Date.now(),
66
43
  response: '',
44
+ receivedContext: ctx,
45
+ receivedPrompt: template,
46
+ renderedPrompt: renderedPrompt,
47
+ stringifiedConversation: stringifiedConversation,
67
48
  };
68
- const renderedPrompt = await renderPrompt(prompt, ctx);
69
- const stringifiedConversation = transcript.toString();
70
- mainStepTrace.renderedPrompt = renderedPrompt;
71
- mainStepTrace.stringifiedConversation = stringifiedConversation;
72
49
  let mainStepStream;
73
50
  try {
74
51
  mainStepStream = await model.generateStream(renderedPrompt, stringifiedConversation);
75
52
  }
76
53
  catch (error) {
77
54
  logger.error('AI Engine Stream: LLM error', { error });
78
- if (mainStepTrace) {
79
- mainStepTrace.error = error instanceof Error ? error : new Error(String(error));
80
- cfg.stepTracer?.addStepTrace(mainStepTrace);
81
- await cfg.stepTracer?.flush();
82
- }
83
- throw error;
55
+ mainStepTrace.error = error instanceof Error ? error : new Error(String(error));
56
+ stepTracer.addStepTrace(mainStepTrace);
57
+ await stepTracer.flush();
58
+ await onError(error, ctx);
59
+ return new ReadableStream({
60
+ start(controller) {
61
+ controller.error(error);
62
+ },
63
+ });
84
64
  }
85
- logger.debug(`[MARK] stream created: ${(performance.now() - startTime).toFixed(2)}ms`);
65
+ return mainStepStream
66
+ .pipeThrough(metrics(startTime))
67
+ .pipeThrough((0, token_transformers_1.composeTokenTransformers)(initiatedTransformers))
68
+ .pipeThrough(packageAsResponseChunk())
69
+ .pipeThrough(pushToTranscript(transcript))
70
+ .pipeThrough(flushTrace(mainStepTrace, transcript));
71
+ }
72
+ function metrics(startTime) {
86
73
  let measureTtft = true;
87
- let streamCancelled = false;
88
- return new ReadableStream({
89
- cancel: (reason) => {
90
- logger.debug(`streamingWorkflow.generateResponseStream cancelled: ${reason}`);
91
- streamCancelled = true;
74
+ return new TransformStream({
75
+ start() {
76
+ logger.debug(`[MARK] LLM stream created: ${(performance.now() - startTime).toFixed(2)}ms`);
92
77
  },
93
- async start(controller) {
94
- logger.debug('streamingWorkflow.run: starting main stream');
95
- for await (const chunk of mainStepStream) {
96
- if (measureTtft) {
97
- logger.debug(`[MARK] TTFT: ${(performance.now() - startTime).toFixed(2)}ms`);
98
- measureTtft = false;
99
- }
100
- const delta = chunk;
101
- if (!delta) {
102
- continue;
103
- }
104
- let tokensToRelease = [];
105
- if (currentFilter) {
106
- filteredTokens.push(delta);
107
- const filterResult = currentFilter.onNewToken(transcript, filteredTokens);
108
- if (filterResult.action === 'RELEASE_TOKENS') {
109
- logger.debug('streamingWorkflow.run: programmatic filter releasing tokens: ', JSON.stringify(filterResult.tokens));
110
- tokensToRelease = filterResult.tokens;
111
- currentFilter = null;
112
- filteredTokens = [];
113
- }
114
- }
115
- else if (filter?.shouldStartFiltering(transcript, delta)) {
116
- filteredTokens = [delta];
117
- currentFilter = filter;
118
- logger.debug('streamingWorkflow.run: programmatic filter is applied on token: ', delta);
119
- }
120
- else {
121
- tokensToRelease = [delta];
122
- }
123
- releaseMainStreamTokens(tokensToRelease);
124
- }
125
- if (currentFilter) {
126
- // stream has ended, but the filter still has some tokens to release
127
- releaseMainStreamTokens(currentFilter.onStreamEnd(transcript, filteredTokens).tokensToRelease);
128
- currentFilter = null;
129
- filteredTokens = [];
78
+ transform(chunk, controller) {
79
+ if (measureTtft) {
80
+ logger.debug(`[MARK] TTFT: ${(performance.now() - startTime).toFixed(2)}ms`);
81
+ measureTtft = false;
130
82
  }
131
- function releaseMainStreamTokens(tokens) {
132
- for (const token of tokens) {
133
- if (streamCancelled) {
134
- break;
135
- }
136
- transcript.responseChunks.push({ role: 'agent', delta: token });
137
- controller.enqueue({ role: 'agent', delta: token });
138
- }
139
- }
140
- logger.debug('streamingWorkflow.run: markMainResponseFinished', {
141
- elapsedMs: (performance.now() - startTime).toFixed(2),
142
- });
143
- transcript.markMainResponseFinished();
83
+ controller.enqueue(chunk);
84
+ },
85
+ flush() {
86
+ logger.debug(`[MARK] LLM stream finished: ${(performance.now() - startTime).toFixed(2)}`);
87
+ },
88
+ });
89
+ }
90
+ function packageAsResponseChunk() {
91
+ return new TransformStream({
92
+ transform(chunk, controller) {
93
+ controller.enqueue({ role: 'agent', delta: chunk });
94
+ },
95
+ });
96
+ }
97
+ function pushToTranscript(transcript) {
98
+ return new TransformStream({
99
+ transform(chunk, controller) {
100
+ transcript.responseChunks.push(chunk);
101
+ controller.enqueue(chunk);
102
+ },
103
+ });
104
+ }
105
+ function flushTrace(mainStepTrace, transcript) {
106
+ return new TransformStream({
107
+ async flush() {
144
108
  // Add step trace and flush to telescope
145
- cfg.stepTracer?.addStepTrace(mainStepTrace);
146
- await cfg.stepTracer?.flush();
147
- if (!streamCancelled) {
148
- controller.close();
109
+ mainStepTrace.response = transcript.currentResponse;
110
+ stepTracer.addStepTrace(mainStepTrace);
111
+ try {
112
+ await stepTracer.flush();
113
+ }
114
+ catch (e) {
115
+ logger.error('stepTracer.flush failed', { error: e });
149
116
  }
150
- await stepTracer.flush();
151
117
  },
152
118
  });
153
119
  }
154
- async function renderPrompt(prompt, context) {
155
- logger.debug('Streaming AI, CONTEXT:', context);
156
- const template = typeof prompt === 'string' ? prompt : await prompt.content();
157
- if (context) {
158
- logger.debug('Loaded context: ', context);
159
- nunjucks_1.default.configure({
160
- autoescape: true,
161
- trimBlocks: true,
162
- lstripBlocks: true,
163
- });
164
- return nunjucks_1.default.renderString(template, context);
165
- }
166
- return template;
167
- }
168
120
  return {
169
121
  run,
170
122
  };
@@ -174,7 +126,6 @@ function createAIStreamEngine(cfg) {
174
126
  };
175
127
  }
176
128
  function createTranscript(logger, initialMessages) {
177
- let finished = false;
178
129
  const messages = [...initialMessages];
179
130
  const directivesFormatter = (msg) => `${msg.sender}: ${msg.text}`;
180
131
  const currentResponseFormatter = (partial) => `Current response: ${partial}`;
@@ -192,16 +143,9 @@ function createTranscript(logger, initialMessages) {
192
143
  .map((token) => token?.delta)
193
144
  .join('');
194
145
  },
195
- get mainResponseFinished() {
196
- return finished;
197
- },
198
146
  get messages() {
199
147
  return initialMessages;
200
148
  },
201
- markMainResponseFinished() {
202
- logger.debug('Conversation, markMainResponseFinished');
203
- finished = true;
204
- },
205
149
  toString(ignoreDirectives = false) {
206
150
  const serializedMessages = messages
207
151
  .map((msg) => {
@@ -1,4 +1,4 @@
1
1
  export { createAIStreamEngine } from './engine';
2
- export { AIStreamEngine, ProgrammaticFilter, LlmStreamAdapter, ResponseChunk, Transcript, StreamingEngineConfig, StreamWorkflowConfig as StreamingWorkflowConfig, } from '../interfaces/stream';
2
+ export { AIStreamEngine, LlmStreamAdapter, ResponseChunk, Transcript, StreamingEngineConfig, StreamWorkflowConfig as StreamingWorkflowConfig, } from '../interfaces/stream';
3
3
  export { getAzureClient, getOpenAiClient } from './get-client';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/stream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAE/C,OAAO,EACH,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,oBAAoB,IAAI,uBAAuB,GAClD,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/stream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAE/C,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,oBAAoB,IAAI,uBAAuB,GAClD,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare class MessageStartFilter extends TransformStream<string, string> {
2
+ constructor(toRemove: string);
3
+ }
4
+ export declare function agentFilter(): MessageStartFilter;
5
+ export declare function composeTokenTransformers(transformers: TransformStream<string, string>[]): TransformStream<string, string>;
6
+ //# sourceMappingURL=token-transformers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-transformers.d.ts","sourceRoot":"","sources":["../../../src/lib/stream/token-transformers.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAmB,SAAQ,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;gBACvD,QAAQ,EAAE,MAAM;CA2C/B;AAED,wBAAgB,WAAW,uBAE1B;AAED,wBAAgB,wBAAwB,CACpC,YAAY,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAChD,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAYjC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageStartFilter = void 0;
4
+ exports.agentFilter = agentFilter;
5
+ exports.composeTokenTransformers = composeTokenTransformers;
6
+ class MessageStartFilter extends TransformStream {
7
+ constructor(toRemove) {
8
+ const prefix = toRemove.toLowerCase();
9
+ let buffer = '';
10
+ let done = false;
11
+ const releaseChunks = (controller) => {
12
+ done = true;
13
+ const out = buffer.toLowerCase().startsWith(prefix)
14
+ ? buffer.slice(toRemove.length)
15
+ : buffer;
16
+ if (out) {
17
+ controller.enqueue(out);
18
+ }
19
+ };
20
+ super({
21
+ transform(chunk, controller) {
22
+ if (done) {
23
+ // just pass through
24
+ controller.enqueue(chunk);
25
+ return;
26
+ }
27
+ buffer += chunk;
28
+ if (buffer.length >= prefix.length) {
29
+ // Seen enough to know for certain.
30
+ releaseChunks(controller);
31
+ }
32
+ else if (!prefix.startsWith(buffer.toLowerCase())) {
33
+ // Still short, but already diverged — no point waiting for more.
34
+ releaseChunks(controller);
35
+ }
36
+ // else: still a viable partial prefix → keep buffering
37
+ },
38
+ flush(controller) {
39
+ // Stream ended before we ever reached a decision.
40
+ if (!done && buffer) {
41
+ releaseChunks(controller);
42
+ }
43
+ },
44
+ });
45
+ }
46
+ }
47
+ exports.MessageStartFilter = MessageStartFilter;
48
+ function agentFilter() {
49
+ return new MessageStartFilter('agent:');
50
+ }
51
+ function composeTokenTransformers(transformers) {
52
+ if (transformers.length === 0) {
53
+ // Empty pipeline = pass strings through unchanged.
54
+ return new TransformStream();
55
+ }
56
+ const writable = transformers[0].writable;
57
+ let readable = transformers[0].readable;
58
+ for (let i = 1; i < transformers.length; i++) {
59
+ readable = readable.pipeThrough(transformers[i]);
60
+ }
61
+ return { writable, readable };
62
+ }
package/changelog.md CHANGED
@@ -13,6 +13,7 @@
13
13
  - Added `createOpenAIStreamAdapter` to `llm-adapters`
14
14
  - Added `createMockAdapter` to `llm-adapters` for testing without OpenAI keys
15
15
  - Added streaming engine (`createAIStreamEngine`) with filter support
16
+ - Deprecated everything related to Bosun and Telescope in favor of `@recombine/bosun-lib` and `@recombine-ai/telescope`
16
17
 
17
18
  ### 0.11.3 → 0.11.4 (unstable)
18
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recombine-ai/engine",
3
- "version": "1.0.0-beta-3",
3
+ "version": "1.0.0",
4
4
  "description": "Recombine AI engine for creating conversational AI agents",
5
5
  "repository": {
6
6
  "url": "git+https://github.com/recombine-ai/engine.git"
@@ -1 +0,0 @@
1
- {"version":3,"file":"step-registry.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/step-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,GAAG,MAAM,CAAA;IACxD,MAAM,EAAE,UAAU,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;CAC9B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAM/D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,6BAQpD"}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=ai.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/ai.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- "use strict";
@@ -1,6 +0,0 @@
1
- import { ProgrammaticFilter } from '../interfaces/stream';
2
- /**
3
- * filter out 'Agent:' at the beginning of the llm response
4
- */
5
- export declare const defaultFilter: ProgrammaticFilter;
6
- //# sourceMappingURL=filter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/lib/stream/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,kBAc3B,CAAA"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultFilter = void 0;
4
- /**
5
- * filter out 'Agent:' at the beginning of the llm response
6
- */
7
- exports.defaultFilter = {
8
- shouldStartFiltering(state, newToken) {
9
- return state.currentResponse.trim().length === 0 && newToken.toLowerCase() === 'agent';
10
- },
11
- onNewToken(_state, filteredTokens) {
12
- if (filteredTokens.length >= 2 && filteredTokens[1] === ':') {
13
- return { action: 'RELEASE_TOKENS', tokens: filteredTokens.slice(2) };
14
- }
15
- return { action: 'RELEASE_TOKENS', tokens: filteredTokens };
16
- },
17
- onStreamEnd(_state, filteredTokens) {
18
- return { tokensToRelease: filteredTokens };
19
- },
20
- };