@recombine-ai/engine 0.5.0 → 0.7.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.
@@ -1,15 +1,18 @@
1
- import { AIEngine } from '../ai';
1
+ import { Message } from '../ai';
2
2
  import { Logger, Scheduler } from '../interfaces';
3
3
  import { SendAction } from './action';
4
4
  import { Context } from './context';
5
+ import { Tracer } from './tracer';
6
+ import { StepTracer } from './stepTracer';
5
7
  /**
6
- * Bosun is a UI for testing Recombine AI agents. It enables testing complex agent interactions with multiple steps, error handling, and state management.
8
+ * Bosun is a UI for testing Recombine AI agents. It enables testing complex agent interactions with
9
+ * multiple steps, error handling, and state management.
7
10
  *
8
11
  * @example
9
12
  * ```typescript
10
13
  * // In workflows.ts
11
14
  * const agents = {
12
- * "testbot": createTestAgentFactory((props) => {
15
+ * "testBot": createTestAgentFactory((props) => {
13
16
  * return {
14
17
  * start: async () => { ... },
15
18
  * reactOnMessage: async () => { ... },
@@ -21,26 +24,33 @@ import { Context } from './context';
21
24
  * export agents;
22
25
  * ```
23
26
  */
24
- export declare namespace Bosun {
25
- type DefaultContext = Record<string, any>;
26
- export interface TesAgentFactoryProps<CTX extends DefaultContext = DefaultContext> {
27
- logger: Logger;
28
- scheduler: Scheduler.Scheduler;
29
- ai: AIEngine.AIEngine;
30
- getMessages: () => AIEngine.Message[];
31
- sendMessage: (message: string) => Promise<void>;
32
- sendAction: SendAction;
33
- ctx: Context<CTX>;
34
- }
35
- export interface TestAgent {
36
- start: () => Promise<unknown>;
37
- reactOnMessage: () => Promise<unknown>;
38
- respondToMessage: () => Promise<unknown>;
39
- isAssigned: () => Promise<boolean>;
40
- onFatalError: (error: Error) => Promise<unknown>;
41
- }
42
- export type TestAgentFactory<T extends DefaultContext = DefaultContext> = (props: TesAgentFactoryProps<T>) => TestAgent;
43
- export function createTestAgentFactory<T extends DefaultContext>(creator: TestAgentFactory<T>): TestAgentFactory<T>;
44
- export {};
27
+ type DefaultContext = Record<string, any>;
28
+ export interface TestAgentFactoryProps<CTX extends DefaultContext = DefaultContext> {
29
+ tracer: Tracer;
30
+ stepTracer: StepTracer;
31
+ logger: Logger;
32
+ scheduler: Scheduler;
33
+ getMessages: () => Message[];
34
+ sendMessage: (message: string | Message) => Promise<void>;
35
+ sendAction: SendAction;
36
+ ctx: Context<CTX>;
45
37
  }
38
+ export interface TestTextAgent {
39
+ start: () => Promise<unknown>;
40
+ reactOnMessage: () => Promise<unknown>;
41
+ respondToMessage: () => Promise<unknown>;
42
+ isAssigned: () => Promise<boolean>;
43
+ onFatalError: (error: Error) => Promise<unknown>;
44
+ }
45
+ export interface TestVoiceAgent {
46
+ streamResponse: () => Promise<unknown>;
47
+ onCallEnd: () => Promise<unknown>;
48
+ onCallStart: () => Promise<unknown>;
49
+ onFatalError: (error: Error) => Promise<unknown>;
50
+ resetContext: () => Promise<unknown>;
51
+ }
52
+ export type TestAgent = TestTextAgent | TestVoiceAgent;
53
+ export type TestAgentFactory<T extends DefaultContext = DefaultContext> = (props: TestAgentFactoryProps<T>) => Promise<TestAgent>;
54
+ export declare function createTestAgentFactory<T extends DefaultContext>(creator: TestAgentFactory<T>): TestAgentFactory<T>;
55
+ export {};
46
56
  //# 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,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;;;;;;;;;;;;;;;;GAkBG;AACH,yBAAiB,KAAK,CAAA;IAClB,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzC,MAAM,WAAW,oBAAoB,CAAC,GAAG,SAAS,cAAc,GAAG,cAAc;QAC7E,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,SAAS,CAAC,SAAS,CAAA;QAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAA;QACrB,WAAW,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAA;QACrC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QAC/C,UAAU,EAAE,UAAU,CAAA;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;KACpB;IAED,MAAM,WAAW,SAAS;QACtB,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QAC7B,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACxC,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QAClC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KACnD;IAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,CACtE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAC7B,SAAS,CAAA;IAEd,MAAM,UAAU,sBAAsB,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,uBAE5F;;CAEJ"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACzC,MAAM,WAAW,qBAAqB,CAAC,GAAG,SAAS,cAAc,GAAG,cAAc;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd,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,UAAU,EAAE,UAAU,CAAA;IACtB,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,29 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Bosun = void 0;
4
- /**
5
- * Bosun is a UI for testing Recombine AI agents. It enables testing complex agent interactions with multiple steps, error handling, and state management.
6
- *
7
- * @example
8
- * ```typescript
9
- * // In workflows.ts
10
- * const agents = {
11
- * "testbot": createTestAgentFactory((props) => {
12
- * return {
13
- * start: async () => { ... },
14
- * reactOnMessage: async () => { ... },
15
- * respondToMessage: async () => { ... }
16
- * }
17
- * })
18
- * }
19
- *
20
- * export agents;
21
- * ```
22
- */
23
- var Bosun;
24
- (function (Bosun) {
25
- function createTestAgentFactory(creator) {
26
- return creator;
27
- }
28
- Bosun.createTestAgentFactory = createTestAgentFactory;
29
- })(Bosun || (exports.Bosun = Bosun = {}));
3
+ exports.createTestAgentFactory = createTestAgentFactory;
4
+ function createTestAgentFactory(creator) {
5
+ return creator;
6
+ }
@@ -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;;gBAGX,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;IAmBxB,GAAG;IAIH,gCAAgC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;IAIlB,SAAS,aAAc,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,mBAG1C;CACJ;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;;gBAGX,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,aAAc,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,mBAG1C;CACJ;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"}
@@ -5,12 +5,9 @@ class Context {
5
5
  #listeners = new Set();
6
6
  #context;
7
7
  constructor(context) {
8
- this.#context = context;
8
+ this.#context = context || {};
9
9
  }
10
10
  set(pathOrContext, value) {
11
- if (!this.#context) {
12
- return;
13
- }
14
11
  if (!Array.isArray(pathOrContext)) {
15
12
  this.#context = pathOrContext;
16
13
  }
@@ -2,4 +2,6 @@ export * from './action';
2
2
  export * from './context';
3
3
  export * from './agent';
4
4
  export * from './mock';
5
+ export { PromptString, StepTraceDef, Tracer } from './tracer';
6
+ export * from './stepTracer';
5
7
  //# 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"}
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,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC7D,cAAc,cAAc,CAAA"}
@@ -18,3 +18,4 @@ __exportStar(require("./action"), exports);
18
18
  __exportStar(require("./context"), exports);
19
19
  __exportStar(require("./agent"), exports);
20
20
  __exportStar(require("./mock"), exports);
21
+ __exportStar(require("./stepTracer"), exports);
@@ -0,0 +1,14 @@
1
+ import { ZodSchema } from 'zod';
2
+ export type StepTrace = {
3
+ name: string;
4
+ renderedPrompt?: string;
5
+ receivedContext?: Record<string, unknown>;
6
+ receivedPrompt?: string | File;
7
+ stringifiedConversation?: string;
8
+ schema?: ZodSchema;
9
+ model?: string;
10
+ };
11
+ export interface StepTracer {
12
+ addStepTrace(stepTrace: StepTrace): void;
13
+ }
14
+ //# sourceMappingURL=stepTracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepTracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/stepTracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAG/B,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,UAAU;IACvB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;CAC3C"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,19 @@
1
+ import { ZodSchema } from 'zod';
2
+ import { PromptFile } from '../prompt-fs';
3
+ import { Logger } from '../interfaces';
4
+ export interface PromptString {
5
+ type: 'string';
6
+ content: () => Promise<string>;
7
+ }
8
+ export interface StepTraceDef {
9
+ name: string;
10
+ type: 'streaming-response' | 'streaming-detect' | 'text';
11
+ prompt: PromptFile | PromptString;
12
+ schema?: ZodSchema;
13
+ }
14
+ export interface Tracer {
15
+ addStep(def: StepTraceDef): void;
16
+ }
17
+ export declare function createConsoleTracer(logger: Logger): Tracer;
18
+ export declare function stdPrompt(prompt: PromptFile | string): PromptFile | PromptString;
19
+ //# sourceMappingURL=tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../../src/lib/bosun/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAC/B,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,YAAY;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,GAAG,MAAM,CAAA;IACxD,MAAM,EAAE,UAAU,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,EAAE,SAAS,CAAA;CACrB;AACD,MAAM,WAAW,MAAM;IACnB,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAA;CACnC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,6BAQpD"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createConsoleTracer = createConsoleTracer;
4
+ exports.stdPrompt = stdPrompt;
5
+ function createConsoleTracer(logger) {
6
+ return {
7
+ addStep(def) {
8
+ logger.debug('Tracer, step added:', def);
9
+ },
10
+ };
11
+ }
12
+ function stdPrompt(prompt) {
13
+ if (typeof prompt === 'string') {
14
+ return {
15
+ type: 'string',
16
+ content: async () => prompt,
17
+ };
18
+ }
19
+ return prompt;
20
+ }
@@ -3,26 +3,24 @@ export interface Logger {
3
3
  debug: (...args: any[]) => void;
4
4
  error: (...args: any[]) => void;
5
5
  }
6
- export declare namespace Scheduler {
6
+ /**
7
+ * A function that schedules an action to be executed in the future
8
+ * @param delay – a date when the action should be executed use {@link delayFactory} to create a
9
+ * date
10
+ * @param phone – user's phone
11
+ */
12
+ export type ScheduleAction = (delay: Date, phone: string) => Promise<void>;
13
+ export interface Scheduler {
7
14
  /**
8
- * A function that schedules an action to be executed in the future
9
- * @param delay – a date when the action should be executed use {@link delayFactory} to create a
10
- * date
11
- * @param phone user's phone
15
+ * Register a delayed action handler.
16
+ * @param actionName – a unique (inside one use-case) name for the action
17
+ * @param action – a function that will be called when the action is triggered
18
+ * @returns a function to schedule the action
12
19
  */
13
- type ScheduleAction = (delay: Date, phone: string) => Promise<void>;
14
- interface Scheduler {
15
- /**
16
- * Register a delayed action handler.
17
- * @param actionName – a unique (inside one use-case) name for the action
18
- * @param action – a function that will be called when the action is triggered
19
- * @returns a function to schedule the action
20
- */
21
- registerAction: (actionName: string, action: (phone: string) => Promise<unknown>) => ScheduleAction;
22
- /**
23
- * Removes all actions for the given phone that were not executed yet.
24
- */
25
- clearAllPendingActions: (phone: string) => Promise<unknown>;
26
- }
20
+ registerAction: (actionName: string, action: (phone: string) => Promise<unknown>) => ScheduleAction;
21
+ /**
22
+ * Removes all actions for the given phone that were not executed yet.
23
+ */
24
+ clearAllPendingActions: (phone: string) => Promise<unknown>;
27
25
  }
28
26
  //# sourceMappingURL=interfaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACnB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC7B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC/B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CAClC;AAED,yBAAiB,SAAS,CAAC;IACvB;;;;;OAKG;IACH,KAAY,cAAc,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,UAAiB,SAAS;QACtB;;;;;WAKG;QACH,cAAc,EAAE,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KAC1C,cAAc,CAAA;QAEnB;;WAEG;QACH,sBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAC9D;CACJ"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACnB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC7B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC/B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CAClC;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAC1E,MAAM,WAAW,SAAS;IACtB;;;;;OAKG;IACH,cAAc,EAAE,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KAC1C,cAAc,CAAA;IAEnB;;OAEG;IACH,sBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D"}
@@ -0,0 +1,17 @@
1
+ import { Logger } from './interfaces';
2
+ export interface FsConfig {
3
+ logger?: Logger;
4
+ basePath: string;
5
+ }
6
+ export interface PromptFS {
7
+ loadFile(path: string): PromptFile;
8
+ }
9
+ export declare function createLocalFS(cfg: FsConfig): {
10
+ loadFile(path: string): PromptFile;
11
+ };
12
+ export interface PromptFile {
13
+ type: 'file';
14
+ content: () => Promise<string>;
15
+ path: string;
16
+ }
17
+ //# sourceMappingURL=prompt-fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-fs.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-fs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,MAAM,WAAW,QAAQ;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;CACrC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ;mBAGpB,MAAM,GAAG,UAAU;EAWzC;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;CACf"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createLocalFS = createLocalFS;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = require("path");
9
+ function createLocalFS(cfg) {
10
+ const logger = cfg.logger ?? console;
11
+ return {
12
+ loadFile(path) {
13
+ return {
14
+ type: 'file',
15
+ content: async () => {
16
+ logger.debug('AI Engine: loading prompt:', path);
17
+ return fs_1.default.promises.readFile((0, path_1.join)(cfg.basePath, path), 'utf-8');
18
+ },
19
+ path,
20
+ };
21
+ },
22
+ };
23
+ }
@@ -0,0 +1,17 @@
1
+ import { Logger } from '@recombine-ai/engine';
2
+ export interface FsConfig {
3
+ logger: Logger;
4
+ basePath: string;
5
+ }
6
+ export interface RcFS {
7
+ loadFile(path: string): PromptFile;
8
+ }
9
+ export declare function createLocalFS(cfg: FsConfig): {
10
+ loadFile(path: string): PromptFile;
11
+ };
12
+ export interface PromptFile {
13
+ type: 'file';
14
+ content: () => Promise<string>;
15
+ path: string;
16
+ }
17
+ //# sourceMappingURL=rc-fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rc-fs.d.ts","sourceRoot":"","sources":["../../src/lib/rc-fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAI7C,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,IAAI;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;CACrC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ;mBAEpB,MAAM,GAAG,UAAU;EAWzC;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;CACf"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createLocalFS = createLocalFS;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = require("path");
9
+ function createLocalFS(cfg) {
10
+ return {
11
+ loadFile(path) {
12
+ return {
13
+ type: 'file',
14
+ content: async () => {
15
+ cfg.logger.debug('AI Engine: loading prompt:', path);
16
+ return fs_1.default.promises.readFile((0, path_1.join)(cfg.basePath, path), 'utf-8');
17
+ },
18
+ path,
19
+ };
20
+ },
21
+ };
22
+ }
package/changelog.md CHANGED
@@ -1,11 +1,40 @@
1
1
  # Changelog
2
2
 
3
+ ### 0.6.0 → 0.7.0 (unstable)
4
+
5
+ Breaking changes:
6
+
7
+ - namespaces removed
8
+ - `TestAgentFactory` now returns a promise
9
+ - `TesAgentFactoryProps` now requires `Tracer` and doesn't require `AIEngine`
10
+ - `loadFile` method was removed in favor of `PromptFS`
11
+ - `workflow.run` now returns a string instead object as a response
12
+
13
+ Other changes
14
+
15
+ - interface `TestVoiceAgent` added
16
+ - interface `Tracer` added
17
+ - interface `PromptFS` and function `createLocalFS` were added
18
+ - added `StepTracer` interface
19
+ - Engine config now accepts `tracer` and `stepTracer`
20
+
21
+ ### 0.5.0 → 0.6.0 (unstable)
22
+
23
+ Breaking changes:
24
+
25
+ - `addDirective` is removed. Use `addMessage` with role: 'system' instead.
26
+ - `ignoreDirectives` → `ignoreAddedMessages`
27
+
28
+ Other changes:
29
+
30
+ - `AIEngine.sendMessage` now accepts `Message` rather than a string
31
+
3
32
  ### 0.4.0 → 0.5.0 (unstable)
4
33
 
5
34
  Breaking changes:
6
35
 
7
36
  - `schema` property replaced with `json` which can be boolean,
8
- - `setDirectiveFormatter`
37
+ - `setDirectiveFormatter` removed
9
38
 
10
39
  Other changes:
11
40
 
@@ -0,0 +1,52 @@
1
+ import eslint from '@eslint/js'
2
+ import tseslint from 'typescript-eslint'
3
+
4
+ export default tseslint.config(
5
+ eslint.configs.recommended,
6
+ tseslint.configs.recommendedTypeChecked,
7
+ {
8
+ rules: {
9
+ '@typescript-eslint/no-floating-promises': 'error',
10
+ '@typescript-eslint/no-unsafe-assignment': 'warn',
11
+ '@typescript-eslint/no-unused-vars': [
12
+ 'warn',
13
+ {
14
+ argsIgnorePattern: '^_',
15
+ varsIgnorePattern: '^_',
16
+ caughtErrorsIgnorePattern: '^_',
17
+ destructuredArrayIgnorePattern: '^_',
18
+ },
19
+ ],
20
+ '@typescript-eslint/no-unsafe-call': 'warn',
21
+ '@typescript-eslint/no-unsafe-member-access': 'warn',
22
+ '@typescript-eslint/require-await': 'off',
23
+ '@typescript-eslint/no-unsafe-return': 'warn',
24
+ '@typescript-eslint/no-explicit-any': 'warn',
25
+ 'prefer-const': 'warn',
26
+ '@typescript-eslint/no-redundant-type-constituents': 'warn',
27
+ '@typescript-eslint/ban-ts-comment': 'warn',
28
+ '@typescript-eslint/no-unsafe-argument': 'warn',
29
+ '@typescript-eslint/no-empty-object-type': 'warn',
30
+ },
31
+ },
32
+ {
33
+ ignores: [
34
+ 'dist/**/*.ts',
35
+ 'dist/**',
36
+ '**/*.mjs',
37
+ 'eslint.config.mjs',
38
+ '**/*.js',
39
+ 'vitest.config.ts',
40
+ 'deploy/cdk.out/**',
41
+ 'drafts/**',
42
+ ],
43
+ },
44
+ {
45
+ languageOptions: {
46
+ parserOptions: {
47
+ projectService: true,
48
+ project: './tsconfig.json',
49
+ },
50
+ },
51
+ },
52
+ )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recombine-ai/engine",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Recombine AI engine for creating conversational AI agents",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -12,19 +12,26 @@
12
12
  "build": "tsc",
13
13
  "prepublishOnly": "npm run build",
14
14
  "test": "vitest",
15
- "docs": "cd docusaurus && yarn build --out-dir ../docs && cd .."
15
+ "docs": "cd docusaurus && yarn build --out-dir ../docs && cd ..",
16
+ "lint": "eslint",
17
+ "lint:fix": "eslint --fix",
18
+ "format": "prettier --write ."
16
19
  },
17
20
  "devDependencies": {
21
+ "@eslint/js": "^9.26.0",
18
22
  "@types/node": "^22.8.1",
19
23
  "@types/nunjucks": "^3.2.6",
24
+ "@typescript-eslint/eslint-plugin": "^8.32.0",
25
+ "eslint": "^9.26.0",
20
26
  "prettier": "^3.3.3",
21
- "typescript": "^5.7.3",
27
+ "typescript": "^5.8.3",
28
+ "typescript-eslint": "^8.32.0",
22
29
  "vitest": "^3.0.6"
23
30
  },
24
31
  "dependencies": {
25
32
  "nunjucks": "^3.2.4",
26
33
  "openai": "^4.68.4",
27
34
  "zod": "3.23.8",
28
- "zod-to-json-schema": "^3.23.5"
35
+ "zod-to-json-schema": "^3.24.6"
29
36
  }
30
37
  }