@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.
- package/README.md +56 -1
- package/dist/cjs/constants/index.d.ts +5 -0
- package/dist/cjs/constants/index.d.ts.map +1 -0
- package/dist/cjs/constants/index.js +8 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/core/Agent.d.ts +110 -0
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/core/Agent.js +290 -0
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/DomainRegistry.d.ts +26 -0
- package/dist/cjs/core/DomainRegistry.d.ts.map +1 -0
- package/dist/cjs/core/DomainRegistry.js +47 -0
- package/dist/cjs/core/DomainRegistry.js.map +1 -0
- package/dist/cjs/core/Events.d.ts +19 -0
- package/dist/cjs/core/Events.d.ts.map +1 -0
- package/dist/cjs/core/Events.js +84 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/Observation.d.ts +24 -0
- package/dist/cjs/core/Observation.d.ts.map +1 -0
- package/dist/cjs/core/Observation.js +39 -0
- package/dist/cjs/core/Observation.js.map +1 -0
- package/dist/cjs/core/PromptBuilder.d.ts +125 -0
- package/dist/cjs/core/PromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/PromptBuilder.js +374 -0
- package/dist/cjs/core/PromptBuilder.js.map +1 -0
- package/dist/cjs/core/Route.d.ts +46 -0
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/core/Route.js +111 -0
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/core/State.d.ts +50 -0
- package/dist/cjs/core/State.d.ts.map +1 -0
- package/dist/cjs/core/State.js +112 -0
- package/dist/cjs/core/State.js.map +1 -0
- package/dist/cjs/core/Tool.d.ts +32 -0
- package/dist/cjs/core/Tool.d.ts.map +1 -0
- package/dist/cjs/core/Tool.js +37 -0
- package/dist/cjs/core/Tool.js.map +1 -0
- package/dist/cjs/core/Transition.d.ts +32 -0
- package/dist/cjs/core/Transition.d.ts.map +1 -0
- package/dist/cjs/core/Transition.js +59 -0
- package/dist/cjs/core/Transition.js.map +1 -0
- package/dist/cjs/index.d.ts +35 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +55 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/providers/GeminiProvider.d.ts +40 -0
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/providers/GeminiProvider.js +142 -0
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/providers/OpenAIProvider.d.ts +42 -0
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/providers/OpenAIProvider.js +242 -0
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/providers/OpenRouterProvider.d.ts +46 -0
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/providers/OpenRouterProvider.js +249 -0
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/types/agent.d.ts +105 -0
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js +21 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/cjs/types/ai.d.ts +102 -0
- package/dist/cjs/types/ai.d.ts.map +1 -0
- package/dist/cjs/types/ai.js +6 -0
- package/dist/cjs/types/ai.js.map +1 -0
- package/dist/cjs/types/history.d.ts +112 -0
- package/dist/cjs/types/history.d.ts.map +1 -0
- package/dist/cjs/types/history.js +37 -0
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/types/index.d.ts +14 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +14 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/observation.d.ts +27 -0
- package/dist/cjs/types/observation.d.ts.map +1 -0
- package/dist/cjs/types/observation.js +6 -0
- package/dist/cjs/types/observation.js.map +1 -0
- package/dist/cjs/types/prompt.d.ts +46 -0
- package/dist/cjs/types/prompt.d.ts.map +1 -0
- package/dist/cjs/types/prompt.js +19 -0
- package/dist/cjs/types/prompt.js.map +1 -0
- package/dist/cjs/types/route.d.ts +61 -0
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/types/route.js +6 -0
- package/dist/cjs/types/route.js.map +1 -0
- package/dist/cjs/types/tool.d.ts +46 -0
- package/dist/cjs/types/tool.d.ts.map +1 -0
- package/dist/cjs/types/tool.js +6 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/id.d.ts +25 -0
- package/dist/cjs/utils/id.d.ts.map +1 -0
- package/dist/cjs/utils/id.js +71 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/utils/retry.d.ts +13 -0
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/utils/retry.js +75 -0
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/core/Agent.js +10 -11
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/DomainRegistry.js +3 -1
- package/dist/core/DomainRegistry.js.map +1 -1
- package/dist/core/Events.d.ts +2 -2
- package/dist/core/Events.d.ts.map +1 -1
- package/dist/core/Events.js +4 -4
- package/dist/core/Events.js.map +1 -1
- package/dist/core/Observation.d.ts.map +1 -1
- package/dist/core/Observation.js +4 -5
- package/dist/core/Observation.js.map +1 -1
- package/dist/core/PromptBuilder.js +2 -3
- package/dist/core/PromptBuilder.js.map +1 -1
- package/dist/core/Route.d.ts.map +1 -1
- package/dist/core/Route.js +4 -10
- package/dist/core/Route.js.map +1 -1
- package/dist/core/State.d.ts +1 -1
- package/dist/core/State.d.ts.map +1 -1
- package/dist/core/State.js +6 -8
- package/dist/core/State.js.map +1 -1
- package/dist/core/Tool.d.ts +1 -0
- package/dist/core/Tool.d.ts.map +1 -1
- package/dist/core/Tool.js +3 -2
- package/dist/core/Tool.js.map +1 -1
- package/dist/core/Transition.js +0 -4
- package/dist/core/Transition.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/GeminiProvider.js +1 -6
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.js +1 -6
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.js +1 -6
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/types/agent.d.ts +2 -2
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/observation.d.ts +2 -0
- package/dist/types/observation.d.ts.map +1 -1
- package/dist/types/route.d.ts +2 -0
- package/dist/types/route.d.ts.map +1 -1
- package/dist/utils/id.d.ts +25 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +65 -0
- package/dist/utils/id.js.map +1 -0
- package/docs/API_REFERENCE.md +122 -6
- package/docs/CONSTRUCTOR_OPTIONS.md +43 -36
- package/docs/GETTING_STARTED.md +2 -0
- package/docs/PROVIDERS.md +3 -0
- package/examples/declarative-agent.ts +31 -7
- package/package.json +15 -5
- package/src/core/Events.ts +6 -4
- package/src/core/Observation.ts +3 -3
- package/src/core/Route.ts +3 -5
- package/src/core/State.ts +5 -4
- package/src/core/Tool.ts +4 -3
- package/src/index.ts +8 -0
- package/src/types/agent.ts +4 -2
- package/src/types/observation.ts +2 -0
- package/src/types/route.ts +2 -0
- 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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
package/src/types/agent.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
102
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
103
|
+
tools?: ToolRef<any, any[], any>[];
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
/**
|
package/src/types/observation.ts
CHANGED
|
@@ -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()) */
|
package/src/types/route.ts
CHANGED
|
@@ -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 */
|
package/src/utils/id.ts
ADDED
|
@@ -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
|
+
}
|