@recombine-ai/engine 0.6.0 → 0.7.1

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 | AIEngine.Message) => 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,GAAG,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QAClE,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,22 +1,44 @@
1
1
  # Changelog
2
2
 
3
+ ### 0.6.0 → 0.7.1 (unstable)
4
+
5
+ - fixed multiple runs on static workflows
6
+
7
+ ### 0.6.0 → 0.7.0 (unstable)
8
+
9
+ Breaking changes:
10
+
11
+ - namespaces removed
12
+ - `TestAgentFactory` now returns a promise
13
+ - `TesAgentFactoryProps` now requires `Tracer` and doesn't require `AIEngine`
14
+ - `loadFile` method was removed in favor of `PromptFS`
15
+ - `workflow.run` now returns a string instead object as a response
16
+
17
+ Other changes
18
+
19
+ - interface `TestVoiceAgent` added
20
+ - interface `Tracer` added
21
+ - interface `PromptFS` and function `createLocalFS` were added
22
+ - added `StepTracer` interface
23
+ - Engine config now accepts `tracer` and `stepTracer`
24
+
3
25
  ### 0.5.0 → 0.6.0 (unstable)
4
26
 
5
27
  Breaking changes:
6
28
 
7
- - addDirective is removed. Use addMessage with role: 'system' instead.
8
- - ignoreDirectives → ignoreAddedMessages
29
+ - `addDirective` is removed. Use `addMessage` with role: 'system' instead.
30
+ - `ignoreDirectives``ignoreAddedMessages`
9
31
 
10
32
  Other changes:
11
33
 
12
- - AIEngine.sendMessage now accepts "Message" rather than a string
34
+ - `AIEngine.sendMessage` now accepts `Message` rather than a string
13
35
 
14
36
  ### 0.4.0 → 0.5.0 (unstable)
15
37
 
16
38
  Breaking changes:
17
39
 
18
40
  - `schema` property replaced with `json` which can be boolean,
19
- - `setDirectiveFormatter`
41
+ - `setDirectiveFormatter` removed
20
42
 
21
43
  Other changes:
22
44
 
@@ -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.6.0",
3
+ "version": "0.7.1",
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,13 +12,20 @@
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
27
  "typescript": "^5.8.3",
28
+ "typescript-eslint": "^8.32.0",
22
29
  "vitest": "^3.0.6"
23
30
  },
24
31
  "dependencies": {