@falai/agent 0.1.3 → 0.1.5

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 (160) hide show
  1. package/README.md +56 -1
  2. package/dist/cjs/constants/index.d.ts +5 -0
  3. package/dist/cjs/constants/index.d.ts.map +1 -0
  4. package/dist/cjs/constants/index.js +8 -0
  5. package/dist/cjs/constants/index.js.map +1 -0
  6. package/dist/cjs/core/Agent.d.ts +110 -0
  7. package/dist/cjs/core/Agent.d.ts.map +1 -0
  8. package/dist/cjs/core/Agent.js +290 -0
  9. package/dist/cjs/core/Agent.js.map +1 -0
  10. package/dist/cjs/core/DomainRegistry.d.ts +26 -0
  11. package/dist/cjs/core/DomainRegistry.d.ts.map +1 -0
  12. package/dist/cjs/core/DomainRegistry.js +47 -0
  13. package/dist/cjs/core/DomainRegistry.js.map +1 -0
  14. package/dist/cjs/core/Events.d.ts +19 -0
  15. package/dist/cjs/core/Events.d.ts.map +1 -0
  16. package/dist/cjs/core/Events.js +84 -0
  17. package/dist/cjs/core/Events.js.map +1 -0
  18. package/dist/cjs/core/Observation.d.ts +24 -0
  19. package/dist/cjs/core/Observation.d.ts.map +1 -0
  20. package/dist/cjs/core/Observation.js +39 -0
  21. package/dist/cjs/core/Observation.js.map +1 -0
  22. package/dist/cjs/core/PromptBuilder.d.ts +125 -0
  23. package/dist/cjs/core/PromptBuilder.d.ts.map +1 -0
  24. package/dist/cjs/core/PromptBuilder.js +374 -0
  25. package/dist/cjs/core/PromptBuilder.js.map +1 -0
  26. package/dist/cjs/core/Route.d.ts +46 -0
  27. package/dist/cjs/core/Route.d.ts.map +1 -0
  28. package/dist/cjs/core/Route.js +111 -0
  29. package/dist/cjs/core/Route.js.map +1 -0
  30. package/dist/cjs/core/State.d.ts +50 -0
  31. package/dist/cjs/core/State.d.ts.map +1 -0
  32. package/dist/cjs/core/State.js +112 -0
  33. package/dist/cjs/core/State.js.map +1 -0
  34. package/dist/cjs/core/Tool.d.ts +32 -0
  35. package/dist/cjs/core/Tool.d.ts.map +1 -0
  36. package/dist/cjs/core/Tool.js +37 -0
  37. package/dist/cjs/core/Tool.js.map +1 -0
  38. package/dist/cjs/core/Transition.d.ts +32 -0
  39. package/dist/cjs/core/Transition.d.ts.map +1 -0
  40. package/dist/cjs/core/Transition.js +59 -0
  41. package/dist/cjs/core/Transition.js.map +1 -0
  42. package/dist/cjs/index.d.ts +35 -0
  43. package/dist/cjs/index.d.ts.map +1 -0
  44. package/dist/cjs/index.js +55 -0
  45. package/dist/cjs/index.js.map +1 -0
  46. package/dist/cjs/package.json +1 -0
  47. package/dist/cjs/providers/GeminiProvider.d.ts +40 -0
  48. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -0
  49. package/dist/cjs/providers/GeminiProvider.js +142 -0
  50. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  51. package/dist/cjs/providers/OpenAIProvider.d.ts +42 -0
  52. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -0
  53. package/dist/cjs/providers/OpenAIProvider.js +242 -0
  54. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  55. package/dist/cjs/providers/OpenRouterProvider.d.ts +46 -0
  56. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -0
  57. package/dist/cjs/providers/OpenRouterProvider.js +249 -0
  58. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  59. package/dist/cjs/types/agent.d.ts +105 -0
  60. package/dist/cjs/types/agent.d.ts.map +1 -0
  61. package/dist/cjs/types/agent.js +21 -0
  62. package/dist/cjs/types/agent.js.map +1 -0
  63. package/dist/cjs/types/ai.d.ts +102 -0
  64. package/dist/cjs/types/ai.d.ts.map +1 -0
  65. package/dist/cjs/types/ai.js +6 -0
  66. package/dist/cjs/types/ai.js.map +1 -0
  67. package/dist/cjs/types/history.d.ts +112 -0
  68. package/dist/cjs/types/history.d.ts.map +1 -0
  69. package/dist/cjs/types/history.js +37 -0
  70. package/dist/cjs/types/history.js.map +1 -0
  71. package/dist/cjs/types/index.d.ts +14 -0
  72. package/dist/cjs/types/index.d.ts.map +1 -0
  73. package/dist/cjs/types/index.js +14 -0
  74. package/dist/cjs/types/index.js.map +1 -0
  75. package/dist/cjs/types/observation.d.ts +27 -0
  76. package/dist/cjs/types/observation.d.ts.map +1 -0
  77. package/dist/cjs/types/observation.js +6 -0
  78. package/dist/cjs/types/observation.js.map +1 -0
  79. package/dist/cjs/types/prompt.d.ts +46 -0
  80. package/dist/cjs/types/prompt.d.ts.map +1 -0
  81. package/dist/cjs/types/prompt.js +19 -0
  82. package/dist/cjs/types/prompt.js.map +1 -0
  83. package/dist/cjs/types/route.d.ts +61 -0
  84. package/dist/cjs/types/route.d.ts.map +1 -0
  85. package/dist/cjs/types/route.js +6 -0
  86. package/dist/cjs/types/route.js.map +1 -0
  87. package/dist/cjs/types/tool.d.ts +46 -0
  88. package/dist/cjs/types/tool.d.ts.map +1 -0
  89. package/dist/cjs/types/tool.js +6 -0
  90. package/dist/cjs/types/tool.js.map +1 -0
  91. package/dist/cjs/utils/id.d.ts +25 -0
  92. package/dist/cjs/utils/id.d.ts.map +1 -0
  93. package/dist/cjs/utils/id.js +71 -0
  94. package/dist/cjs/utils/id.js.map +1 -0
  95. package/dist/cjs/utils/retry.d.ts +13 -0
  96. package/dist/cjs/utils/retry.d.ts.map +1 -0
  97. package/dist/cjs/utils/retry.js +75 -0
  98. package/dist/cjs/utils/retry.js.map +1 -0
  99. package/dist/core/Agent.js +10 -11
  100. package/dist/core/Agent.js.map +1 -1
  101. package/dist/core/DomainRegistry.js +3 -1
  102. package/dist/core/DomainRegistry.js.map +1 -1
  103. package/dist/core/Events.d.ts +2 -2
  104. package/dist/core/Events.d.ts.map +1 -1
  105. package/dist/core/Events.js +4 -4
  106. package/dist/core/Events.js.map +1 -1
  107. package/dist/core/Observation.d.ts.map +1 -1
  108. package/dist/core/Observation.js +4 -5
  109. package/dist/core/Observation.js.map +1 -1
  110. package/dist/core/PromptBuilder.js +2 -3
  111. package/dist/core/PromptBuilder.js.map +1 -1
  112. package/dist/core/Route.d.ts.map +1 -1
  113. package/dist/core/Route.js +4 -10
  114. package/dist/core/Route.js.map +1 -1
  115. package/dist/core/State.d.ts +1 -1
  116. package/dist/core/State.d.ts.map +1 -1
  117. package/dist/core/State.js +6 -8
  118. package/dist/core/State.js.map +1 -1
  119. package/dist/core/Tool.d.ts +1 -0
  120. package/dist/core/Tool.d.ts.map +1 -1
  121. package/dist/core/Tool.js +3 -2
  122. package/dist/core/Tool.js.map +1 -1
  123. package/dist/core/Transition.js +0 -4
  124. package/dist/core/Transition.js.map +1 -1
  125. package/dist/index.d.ts +1 -0
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +2 -0
  128. package/dist/index.js.map +1 -1
  129. package/dist/providers/GeminiProvider.js +1 -6
  130. package/dist/providers/GeminiProvider.js.map +1 -1
  131. package/dist/providers/OpenAIProvider.js +1 -6
  132. package/dist/providers/OpenAIProvider.js.map +1 -1
  133. package/dist/providers/OpenRouterProvider.js +1 -6
  134. package/dist/providers/OpenRouterProvider.js.map +1 -1
  135. package/dist/types/agent.d.ts +2 -2
  136. package/dist/types/agent.d.ts.map +1 -1
  137. package/dist/types/observation.d.ts +2 -0
  138. package/dist/types/observation.d.ts.map +1 -1
  139. package/dist/types/route.d.ts +2 -0
  140. package/dist/types/route.d.ts.map +1 -1
  141. package/dist/utils/id.d.ts +25 -0
  142. package/dist/utils/id.d.ts.map +1 -0
  143. package/dist/utils/id.js +65 -0
  144. package/dist/utils/id.js.map +1 -0
  145. package/docs/API_REFERENCE.md +122 -6
  146. package/docs/CONSTRUCTOR_OPTIONS.md +43 -36
  147. package/docs/GETTING_STARTED.md +2 -0
  148. package/docs/PROVIDERS.md +3 -0
  149. package/examples/declarative-agent.ts +31 -7
  150. package/package.json +15 -5
  151. package/src/core/Events.ts +6 -4
  152. package/src/core/Observation.ts +3 -3
  153. package/src/core/Route.ts +3 -5
  154. package/src/core/State.ts +5 -4
  155. package/src/core/Tool.ts +4 -3
  156. package/src/index.ts +8 -0
  157. package/src/types/agent.ts +4 -2
  158. package/src/types/observation.ts +2 -0
  159. package/src/types/route.ts +2 -0
  160. package/src/utils/id.ts +74 -0
package/src/core/Route.ts CHANGED
@@ -6,8 +6,7 @@ import type { RouteOptions, RouteRef } from "../types/route";
6
6
  import type { Guideline } from "../types/agent";
7
7
 
8
8
  import { State } from "./State";
9
-
10
- let routeIdCounter = 0;
9
+ import { generateRouteId } from "../utils/id";
11
10
 
12
11
  /**
13
12
  * Represents a conversational route/journey
@@ -21,9 +20,8 @@ export class Route<TContext = unknown> {
21
20
  private guidelines: Guideline[] = [];
22
21
 
23
22
  constructor(options: RouteOptions) {
24
- this.id = `route_${++routeIdCounter}_${options.title
25
- .toLowerCase()
26
- .replace(/\s+/g, "_")}`;
23
+ // Use provided ID or generate a deterministic one from the title
24
+ this.id = options.id || generateRouteId(options.title);
27
25
  this.title = options.title;
28
26
  this.description = options.description;
29
27
  this.conditions = options.conditions || [];
package/src/core/State.ts CHANGED
@@ -11,8 +11,7 @@ import type { Guideline } from "../types/agent";
11
11
 
12
12
  import { END_ROUTE } from "../constants";
13
13
  import { Transition } from "./Transition";
14
-
15
- let stateIdCounter = 0;
14
+ import { generateStateId } from "../utils/id";
16
15
 
17
16
  /**
18
17
  * Represents a state within a route
@@ -24,9 +23,11 @@ export class State<TContext = unknown> {
24
23
 
25
24
  constructor(
26
25
  public readonly routeId: string,
27
- public readonly description?: string
26
+ public readonly description?: string,
27
+ customId?: string
28
28
  ) {
29
- this.id = `state_${++stateIdCounter}`;
29
+ // Use provided ID or generate a deterministic one
30
+ this.id = customId || generateStateId(routeId, description);
30
31
  }
31
32
 
32
33
  /**
package/src/core/Tool.ts CHANGED
@@ -8,8 +8,7 @@ import type {
8
8
  ToolRef,
9
9
  ToolResult,
10
10
  } from "../types/tool";
11
-
12
- let toolIdCounter = 0;
11
+ import { generateToolId } from "../utils/id";
13
12
 
14
13
  /**
15
14
  * Define a new tool with type-safe context and arguments
@@ -33,11 +32,13 @@ export function defineTool<TContext, TArgs extends unknown[], TResult>(
33
32
  name: string,
34
33
  handler: ToolHandler<TContext, TArgs, TResult>,
35
34
  options?: {
35
+ id?: string;
36
36
  description?: string;
37
37
  parameters?: unknown;
38
38
  }
39
39
  ): ToolRef<TContext, TArgs, TResult> {
40
- const id = `tool_${++toolIdCounter}_${name}`;
40
+ // Use provided ID or generate a deterministic one from the name
41
+ const id = options?.id || generateToolId(name);
41
42
 
42
43
  return {
43
44
  id,
package/src/index.ts CHANGED
@@ -28,6 +28,14 @@ export type { OpenRouterProviderOptions } from "./providers/OpenRouterProvider";
28
28
  // Constants
29
29
  export { END_ROUTE } from "./constants";
30
30
 
31
+ // Utils
32
+ export {
33
+ generateRouteId,
34
+ generateStateId,
35
+ generateObservationId,
36
+ generateToolId,
37
+ } from "./utils/id";
38
+
31
39
  // Types
32
40
  export type {
33
41
  AgentOptions,
@@ -82,7 +82,8 @@ export interface Guideline {
82
82
  /** Tags for organizing and filtering guidelines */
83
83
  tags?: string[];
84
84
  /** Tools available when following this guideline */
85
- tools?: ToolRef<unknown, unknown[], unknown>[];
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ tools?: ToolRef<any, any[], any>[];
86
87
  /** Additional metadata */
87
88
  metadata?: Record<string, unknown>;
88
89
  }
@@ -98,7 +99,8 @@ export interface Capability {
98
99
  /** Description of what the capability does */
99
100
  description: string;
100
101
  /** Tools used by this capability */
101
- tools?: ToolRef<unknown, unknown[], unknown>[];
102
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
103
+ tools?: ToolRef<any, any[], any>[];
102
104
  }
103
105
 
104
106
  /**
@@ -20,6 +20,8 @@ export interface Observation {
20
20
  * Options for creating an observation
21
21
  */
22
22
  export interface ObservationOptions {
23
+ /** Custom ID for the observation (optional - will generate deterministic ID from description if not provided) */
24
+ id?: string;
23
25
  /** The observation description */
24
26
  description: string;
25
27
  /** Route IDs or titles to disambiguate between (can be set later with disambiguate()) */
@@ -31,6 +31,8 @@ import type { Guideline } from "./agent";
31
31
  * Options for creating a route
32
32
  */
33
33
  export interface RouteOptions {
34
+ /** Custom ID for the route (optional - will generate deterministic ID from title if not provided) */
35
+ id?: string;
34
36
  /** Title of the route */
35
37
  title: string;
36
38
  /** Description of what this route accomplishes */
@@ -0,0 +1,74 @@
1
+ /**
2
+ * ID generation utilities
3
+ * Provides deterministic ID generation to ensure consistency across server restarts
4
+ */
5
+
6
+ /**
7
+ * Generate a deterministic ID from a string by creating a simple hash
8
+ * This ensures the same input always produces the same ID
9
+ */
10
+ function simpleHash(str: string): string {
11
+ let hash = 0;
12
+ for (let i = 0; i < str.length; i++) {
13
+ const char = str.charCodeAt(i);
14
+ hash = (hash << 5) - hash + char;
15
+ hash = hash & hash; // Convert to 32-bit integer
16
+ }
17
+ return Math.abs(hash).toString(36);
18
+ }
19
+
20
+ /**
21
+ * Sanitize a string for use in an ID
22
+ */
23
+ function sanitize(str: string): string {
24
+ return str.toLowerCase().replace(/[^a-z0-9]+/g, "_");
25
+ }
26
+
27
+ /**
28
+ * Generate a deterministic route ID
29
+ * Format: route_{sanitized_title}_{hash}
30
+ */
31
+ export function generateRouteId(title: string): string {
32
+ const sanitized = sanitize(title);
33
+ const hash = simpleHash(title);
34
+ return `route_${sanitized}_${hash}`;
35
+ }
36
+
37
+ /**
38
+ * Generate a deterministic state ID
39
+ * Format: state_{sanitized_description}_{hash} or state_{routeId}_{index}
40
+ */
41
+ export function generateStateId(
42
+ routeId: string,
43
+ description?: string,
44
+ index?: number
45
+ ): string {
46
+ if (description) {
47
+ const sanitized = sanitize(description);
48
+ const hash = simpleHash(`${routeId}_${description}`);
49
+ return `state_${sanitized}_${hash}`;
50
+ }
51
+ // Fallback for states without descriptions
52
+ const suffix = index !== undefined ? index : simpleHash(routeId);
53
+ return `state_${routeId}_${suffix}`;
54
+ }
55
+
56
+ /**
57
+ * Generate a deterministic observation ID
58
+ * Format: observation_{sanitized_description}_{hash}
59
+ */
60
+ export function generateObservationId(description: string): string {
61
+ const sanitized = sanitize(description.substring(0, 50)); // Limit length
62
+ const hash = simpleHash(description);
63
+ return `observation_${sanitized}_${hash}`;
64
+ }
65
+
66
+ /**
67
+ * Generate a deterministic tool ID
68
+ * Format: tool_{sanitized_name}_{hash}
69
+ */
70
+ export function generateToolId(name: string): string {
71
+ const sanitized = sanitize(name);
72
+ const hash = simpleHash(name);
73
+ return `tool_${sanitized}_${hash}`;
74
+ }