@flomatai/core 0.1.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 (127) hide show
  1. package/dist/agent.d.ts +92 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +137 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/cli-utils.d.ts +41 -0
  6. package/dist/cli-utils.d.ts.map +1 -0
  7. package/dist/cli-utils.js +64 -0
  8. package/dist/cli-utils.js.map +1 -0
  9. package/dist/errors.d.ts +52 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +105 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/index.d.ts +29 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +35 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/llm-provider.d.ts +29 -0
  18. package/dist/llm-provider.d.ts.map +1 -0
  19. package/dist/llm-provider.js +44 -0
  20. package/dist/llm-provider.js.map +1 -0
  21. package/dist/logger.d.ts +32 -0
  22. package/dist/logger.d.ts.map +1 -0
  23. package/dist/logger.js +75 -0
  24. package/dist/logger.js.map +1 -0
  25. package/dist/mock-llm.d.ts +70 -0
  26. package/dist/mock-llm.d.ts.map +1 -0
  27. package/dist/mock-llm.js +385 -0
  28. package/dist/mock-llm.js.map +1 -0
  29. package/dist/orchestrator-helpers.d.ts +20 -0
  30. package/dist/orchestrator-helpers.d.ts.map +1 -0
  31. package/dist/orchestrator-helpers.js +38 -0
  32. package/dist/orchestrator-helpers.js.map +1 -0
  33. package/dist/orchestrator.d.ts +124 -0
  34. package/dist/orchestrator.d.ts.map +1 -0
  35. package/dist/orchestrator.js +349 -0
  36. package/dist/orchestrator.js.map +1 -0
  37. package/dist/pipeline-registry.d.ts +120 -0
  38. package/dist/pipeline-registry.d.ts.map +1 -0
  39. package/dist/pipeline-registry.js +171 -0
  40. package/dist/pipeline-registry.js.map +1 -0
  41. package/dist/pipeline.d.ts +122 -0
  42. package/dist/pipeline.d.ts.map +1 -0
  43. package/dist/pipeline.js +152 -0
  44. package/dist/pipeline.js.map +1 -0
  45. package/dist/skill.d.ts +112 -0
  46. package/dist/skill.d.ts.map +1 -0
  47. package/dist/skill.js +12 -0
  48. package/dist/skill.js.map +1 -0
  49. package/dist/skills/io-skill.d.ts +49 -0
  50. package/dist/skills/io-skill.d.ts.map +1 -0
  51. package/dist/skills/io-skill.js +103 -0
  52. package/dist/skills/io-skill.js.map +1 -0
  53. package/dist/skills/llm-skill.d.ts +64 -0
  54. package/dist/skills/llm-skill.d.ts.map +1 -0
  55. package/dist/skills/llm-skill.js +112 -0
  56. package/dist/skills/llm-skill.js.map +1 -0
  57. package/dist/skills/transform-skill.d.ts +27 -0
  58. package/dist/skills/transform-skill.d.ts.map +1 -0
  59. package/dist/skills/transform-skill.js +32 -0
  60. package/dist/skills/transform-skill.js.map +1 -0
  61. package/dist/state/file-store.d.ts +25 -0
  62. package/dist/state/file-store.d.ts.map +1 -0
  63. package/dist/state/file-store.js +92 -0
  64. package/dist/state/file-store.js.map +1 -0
  65. package/dist/state/memory-store.d.ts +24 -0
  66. package/dist/state/memory-store.d.ts.map +1 -0
  67. package/dist/state/memory-store.js +65 -0
  68. package/dist/state/memory-store.js.map +1 -0
  69. package/dist/state/types.d.ts +40 -0
  70. package/dist/state/types.d.ts.map +1 -0
  71. package/dist/state/types.js +8 -0
  72. package/dist/state/types.js.map +1 -0
  73. package/dist/strategies/custom.d.ts +12 -0
  74. package/dist/strategies/custom.d.ts.map +1 -0
  75. package/dist/strategies/custom.js +14 -0
  76. package/dist/strategies/custom.js.map +1 -0
  77. package/dist/strategies/plan-and-execute.d.ts +27 -0
  78. package/dist/strategies/plan-and-execute.d.ts.map +1 -0
  79. package/dist/strategies/plan-and-execute.js +195 -0
  80. package/dist/strategies/plan-and-execute.js.map +1 -0
  81. package/dist/strategies/react.d.ts +27 -0
  82. package/dist/strategies/react.d.ts.map +1 -0
  83. package/dist/strategies/react.js +172 -0
  84. package/dist/strategies/react.js.map +1 -0
  85. package/dist/strategies/router.d.ts +11 -0
  86. package/dist/strategies/router.d.ts.map +1 -0
  87. package/dist/strategies/router.js +70 -0
  88. package/dist/strategies/router.js.map +1 -0
  89. package/dist/strategies/sequential.d.ts +12 -0
  90. package/dist/strategies/sequential.d.ts.map +1 -0
  91. package/dist/strategies/sequential.js +39 -0
  92. package/dist/strategies/sequential.js.map +1 -0
  93. package/dist/strategies/types.d.ts +62 -0
  94. package/dist/strategies/types.d.ts.map +1 -0
  95. package/dist/strategies/types.js +5 -0
  96. package/dist/strategies/types.js.map +1 -0
  97. package/dist/types.d.ts +83 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/types.js +5 -0
  100. package/dist/types.js.map +1 -0
  101. package/package.json +28 -0
  102. package/src/agent.ts +243 -0
  103. package/src/cli-utils.ts +73 -0
  104. package/src/errors.ts +146 -0
  105. package/src/index.ts +124 -0
  106. package/src/llm-provider.ts +88 -0
  107. package/src/logger.ts +97 -0
  108. package/src/mock-llm.ts +433 -0
  109. package/src/orchestrator-helpers.ts +40 -0
  110. package/src/orchestrator.ts +522 -0
  111. package/src/pipeline-registry.ts +253 -0
  112. package/src/pipeline.ts +265 -0
  113. package/src/skill.ts +127 -0
  114. package/src/skills/io-skill.ts +133 -0
  115. package/src/skills/llm-skill.ts +207 -0
  116. package/src/skills/transform-skill.ts +61 -0
  117. package/src/state/file-store.ts +119 -0
  118. package/src/state/memory-store.ts +82 -0
  119. package/src/state/types.ts +53 -0
  120. package/src/strategies/custom.ts +24 -0
  121. package/src/strategies/plan-and-execute.ts +268 -0
  122. package/src/strategies/react.ts +239 -0
  123. package/src/strategies/router.ts +101 -0
  124. package/src/strategies/sequential.ts +55 -0
  125. package/src/strategies/types.ts +97 -0
  126. package/src/types.ts +102 -0
  127. package/tsconfig.json +9 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Agent — an intelligent orchestrator that composes Skills via a Strategy.
3
+ *
4
+ * Agents can spawn sub-agents (hierarchical up to configurable depth).
5
+ */
6
+ import type { Skill } from './skill.js';
7
+ import type { LLMRegistry } from './llm-provider.js';
8
+ import type { StateStore } from './state/types.js';
9
+ import type { Logger } from './logger.js';
10
+ import { type PlanAndExecuteOptions } from './strategies/plan-and-execute.js';
11
+ import { type ReActOptions } from './strategies/react.js';
12
+ import type { StrategyName, AgentResult, AgentContext, AgentRunner, CustomStrategyFn } from './strategies/types.js';
13
+ export interface AgentConfig {
14
+ /** Unique name for this agent. */
15
+ name: string;
16
+ /**
17
+ * The agent's role/persona, used as the system prompt for decision-making.
18
+ * Be specific about what this agent does and what constraints it follows.
19
+ */
20
+ role: string;
21
+ /** Skills this agent can use. */
22
+ skills: Skill[];
23
+ /**
24
+ * Which strategy to use for skill orchestration.
25
+ * @default 'sequential'
26
+ */
27
+ strategy?: StrategyName;
28
+ /**
29
+ * The LLM registry key to use for decision-making.
30
+ * @default 'default'
31
+ */
32
+ llm?: string;
33
+ /**
34
+ * Max iterations for 'react' strategy.
35
+ * @default 10
36
+ */
37
+ maxIterations?: number;
38
+ /**
39
+ * Options for 'plan-and-execute' strategy.
40
+ */
41
+ planAndExecuteOptions?: PlanAndExecuteOptions;
42
+ /**
43
+ * Options for 'react' strategy.
44
+ */
45
+ reactOptions?: ReActOptions;
46
+ /**
47
+ * Custom strategy function (used when strategy='custom').
48
+ */
49
+ customStrategy?: CustomStrategyFn;
50
+ /**
51
+ * Maximum depth of sub-agent spawning (default: inherited from orchestrator).
52
+ */
53
+ maxDepth?: number;
54
+ }
55
+ export declare class Agent implements AgentRunner {
56
+ readonly config: AgentConfig;
57
+ private readonly strategy;
58
+ constructor(config: AgentConfig);
59
+ run(input: unknown, ctx: AgentContext): Promise<AgentResult>;
60
+ /** Create an AgentContext for standalone execution (outside a pipeline). */
61
+ createContext(options: {
62
+ llmRegistry: LLMRegistry;
63
+ state: StateStore;
64
+ logger: Logger;
65
+ config?: Record<string, unknown>;
66
+ runId?: string;
67
+ abortController?: AbortController;
68
+ emit?: (event: string, data: unknown) => void;
69
+ depth?: number;
70
+ maxDepth?: number;
71
+ }): AgentContext;
72
+ }
73
+ export declare const createAgent: (config: AgentConfig) => Agent;
74
+ /** Ergonomic namespace: Agent.create(...) */
75
+ export declare namespace AgentFactory {
76
+ const create: (config: AgentConfig) => Agent;
77
+ }
78
+ export declare function buildAgentContext(params: {
79
+ agentName: string;
80
+ agentRole: string;
81
+ llmKey: string;
82
+ llmRegistry: LLMRegistry;
83
+ state: StateStore;
84
+ logger: Logger;
85
+ config: Record<string, unknown>;
86
+ runId: string;
87
+ abortSignal: AbortSignal;
88
+ emit: (event: string, data: unknown) => void;
89
+ depth: number;
90
+ maxDepth: number;
91
+ }): AgentContext;
92
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,KAAM,YAAW,WAAW;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,MAAM,EAAE,WAAW;IAKzB,GAAG,CACP,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,WAAW,CAAC;IASvB,4EAA4E;IAC5E,aAAa,CAAC,OAAO,EAAE;QACrB,WAAW,EAAE,WAAW,CAAC;QACzB,KAAK,EAAE,UAAU,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,YAAY;CAgBjB;AAID,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,KAAG,KAA0B,CAAC;AAE7E,6CAA6C;AAE7C,yBAAiB,YAAY,CAAC;IACrB,MAAM,MAAM,WALe,WAAW,KAAG,KAKf,CAAC;CACnC;AAID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,YAAY,CAqEf"}
package/dist/agent.js ADDED
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Agent — an intelligent orchestrator that composes Skills via a Strategy.
3
+ *
4
+ * Agents can spawn sub-agents (hierarchical up to configurable depth).
5
+ */
6
+ import { SequentialStrategy } from './strategies/sequential.js';
7
+ import { RouterStrategy } from './strategies/router.js';
8
+ import { PlanAndExecuteStrategy } from './strategies/plan-and-execute.js';
9
+ import { ReActStrategy } from './strategies/react.js';
10
+ import { CustomStrategy } from './strategies/custom.js';
11
+ import { AgentMaxDepthError } from './errors.js';
12
+ import { resolveLLM } from './llm-provider.js';
13
+ // ── Agent ─────────────────────────────────────────────────────────────────────
14
+ export class Agent {
15
+ config;
16
+ strategy;
17
+ constructor(config) {
18
+ this.config = config;
19
+ this.strategy = resolveStrategy(config);
20
+ }
21
+ async run(input, ctx) {
22
+ ctx.logger.info(`Agent "${this.config.name}" starting`);
23
+ const result = await this.strategy.execute(this.config.skills, input, ctx);
24
+ ctx.logger.info(`Agent "${this.config.name}" completed in ${result.durationMs}ms (${result.tokensUsed} tokens)`);
25
+ return result;
26
+ }
27
+ /** Create an AgentContext for standalone execution (outside a pipeline). */
28
+ createContext(options) {
29
+ return buildAgentContext({
30
+ agentName: this.config.name,
31
+ agentRole: this.config.role,
32
+ llmKey: this.config.llm ?? 'default',
33
+ llmRegistry: options.llmRegistry,
34
+ state: options.state,
35
+ logger: options.logger.child(this.config.name),
36
+ config: options.config ?? {},
37
+ runId: options.runId ?? `agent-${Date.now()}`,
38
+ abortSignal: options.abortController?.signal ?? new AbortController().signal,
39
+ emit: options.emit ?? (() => { }),
40
+ depth: options.depth ?? 0,
41
+ maxDepth: options.maxDepth ?? 5,
42
+ });
43
+ }
44
+ }
45
+ // ── Factory ───────────────────────────────────────────────────────────────────
46
+ export const createAgent = (config) => new Agent(config);
47
+ /** Ergonomic namespace: Agent.create(...) */
48
+ // eslint-disable-next-line @typescript-eslint/no-namespace
49
+ export var AgentFactory;
50
+ (function (AgentFactory) {
51
+ AgentFactory.create = createAgent;
52
+ })(AgentFactory || (AgentFactory = {}));
53
+ // ── Internal: Context Builder ─────────────────────────────────────────────────
54
+ export function buildAgentContext(params) {
55
+ let totalTokens = 0;
56
+ const ctx = {
57
+ agentName: params.agentName,
58
+ agentRole: params.agentRole,
59
+ llm: resolveLLM(params.llmRegistry, params.llmKey),
60
+ getLLM: (key) => resolveLLM(params.llmRegistry, key),
61
+ logger: params.logger,
62
+ state: params.state,
63
+ config: params.config,
64
+ abortSignal: params.abortSignal,
65
+ runId: params.runId,
66
+ depth: params.depth,
67
+ maxDepth: params.maxDepth,
68
+ get totalTokens() { return totalTokens; },
69
+ addTokens(n) { totalTokens += n; },
70
+ emit: params.emit,
71
+ toSkillContext() {
72
+ return {
73
+ llm: ctx.llm,
74
+ logger: ctx.logger,
75
+ state: ctx.state,
76
+ emit: ctx.emit,
77
+ config: ctx.config,
78
+ abortSignal: ctx.abortSignal,
79
+ runId: ctx.runId,
80
+ getLLM: ctx.getLLM,
81
+ };
82
+ },
83
+ spawnAgent(spawnConfig) {
84
+ if (params.depth >= params.maxDepth) {
85
+ throw new AgentMaxDepthError(spawnConfig.name, params.maxDepth);
86
+ }
87
+ const childAgent = new Agent({
88
+ name: spawnConfig.name,
89
+ role: spawnConfig.role,
90
+ skills: spawnConfig.skills,
91
+ strategy: spawnConfig.strategy,
92
+ llm: spawnConfig.llm ?? params.llmKey,
93
+ maxIterations: spawnConfig.maxIterations,
94
+ customStrategy: spawnConfig.customStrategy,
95
+ });
96
+ const childCtx = buildAgentContext({
97
+ ...params,
98
+ agentName: spawnConfig.name,
99
+ agentRole: spawnConfig.role,
100
+ llmKey: spawnConfig.llm ?? params.llmKey,
101
+ logger: params.logger.child(spawnConfig.name),
102
+ depth: params.depth + 1,
103
+ });
104
+ params.emit('agent:spawn', {
105
+ parent: params.agentName,
106
+ child: spawnConfig.name,
107
+ depth: params.depth + 1,
108
+ });
109
+ return {
110
+ run: (input) => childAgent.run(input, childCtx),
111
+ };
112
+ },
113
+ };
114
+ return ctx;
115
+ }
116
+ // ── Internal: Strategy Resolution ─────────────────────────────────────────────
117
+ function resolveStrategy(config) {
118
+ const strategyName = config.strategy ?? 'sequential';
119
+ switch (strategyName) {
120
+ case 'sequential':
121
+ return new SequentialStrategy();
122
+ case 'router':
123
+ return new RouterStrategy();
124
+ case 'plan-and-execute':
125
+ return new PlanAndExecuteStrategy(config.planAndExecuteOptions);
126
+ case 'react':
127
+ return new ReActStrategy(config.reactOptions);
128
+ case 'custom':
129
+ if (!config.customStrategy) {
130
+ throw new Error(`Agent "${config.name}": strategy='custom' requires customStrategy function`);
131
+ }
132
+ return new CustomStrategy(config.customStrategy);
133
+ default:
134
+ throw new Error(`Unknown agent strategy: "${strategyName}"`);
135
+ }
136
+ }
137
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * cli-utils — lightweight CLI argument and input helpers.
3
+ *
4
+ * Extracted from the repeated boilerplate found in every example's run.ts.
5
+ * Covers the three patterns used across all examples:
6
+ * • Named flag parsing: --flag value
7
+ * • Boolean flag check: --flag
8
+ * • Text input reading: --file path | stdin | env var | fallback string
9
+ */
10
+ /**
11
+ * Parse a named CLI flag and return its value.
12
+ *
13
+ * @example getArg('--topic') // node run.js --topic "foo" → "foo"
14
+ */
15
+ export declare function getArg(flag: string): string | undefined;
16
+ /**
17
+ * Check whether a boolean CLI flag is present.
18
+ *
19
+ * @example hasFlag('--mock') // node run.js --mock → true
20
+ */
21
+ export declare function hasFlag(flag: string): boolean;
22
+ /**
23
+ * Read a text document from the first available source:
24
+ * 1. `--file <path>` CLI flag
25
+ * 2. `envVar` environment variable (if provided)
26
+ * 3. stdin (when not a TTY)
27
+ * 4. `fallback` string (demo/default content)
28
+ *
29
+ * Logs a one-line message indicating which source was used.
30
+ *
31
+ * @param options.envVar Environment variable name to check (e.g. 'DOCS').
32
+ * @param options.fallback Demo text to use when no other source is available.
33
+ * @param options.label Human-readable name for the input (e.g. 'documentation').
34
+ * Used in log messages. Defaults to 'input'.
35
+ */
36
+ export declare function readTextInput(options: {
37
+ envVar?: string;
38
+ fallback?: string;
39
+ label?: string;
40
+ }): Promise<string>;
41
+ //# sourceMappingURL=cli-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../src/cli-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlB"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * cli-utils — lightweight CLI argument and input helpers.
3
+ *
4
+ * Extracted from the repeated boilerplate found in every example's run.ts.
5
+ * Covers the three patterns used across all examples:
6
+ * • Named flag parsing: --flag value
7
+ * • Boolean flag check: --flag
8
+ * • Text input reading: --file path | stdin | env var | fallback string
9
+ */
10
+ /**
11
+ * Parse a named CLI flag and return its value.
12
+ *
13
+ * @example getArg('--topic') // node run.js --topic "foo" → "foo"
14
+ */
15
+ export function getArg(flag) {
16
+ const idx = process.argv.indexOf(flag);
17
+ return idx !== -1 ? process.argv[idx + 1] : undefined;
18
+ }
19
+ /**
20
+ * Check whether a boolean CLI flag is present.
21
+ *
22
+ * @example hasFlag('--mock') // node run.js --mock → true
23
+ */
24
+ export function hasFlag(flag) {
25
+ return process.argv.includes(flag);
26
+ }
27
+ /**
28
+ * Read a text document from the first available source:
29
+ * 1. `--file <path>` CLI flag
30
+ * 2. `envVar` environment variable (if provided)
31
+ * 3. stdin (when not a TTY)
32
+ * 4. `fallback` string (demo/default content)
33
+ *
34
+ * Logs a one-line message indicating which source was used.
35
+ *
36
+ * @param options.envVar Environment variable name to check (e.g. 'DOCS').
37
+ * @param options.fallback Demo text to use when no other source is available.
38
+ * @param options.label Human-readable name for the input (e.g. 'documentation').
39
+ * Used in log messages. Defaults to 'input'.
40
+ */
41
+ export async function readTextInput(options) {
42
+ const { envVar, fallback = '', label = 'input' } = options;
43
+ const filePath = getArg('--file');
44
+ if (filePath) {
45
+ const { readFile } = await import('fs/promises');
46
+ const text = await readFile(filePath, 'utf-8');
47
+ console.log(`Reading ${label} from: ${filePath}`);
48
+ return text;
49
+ }
50
+ if (envVar && process.env[envVar]) {
51
+ console.log(`Reading ${label} from ${envVar} env var`);
52
+ return process.env[envVar];
53
+ }
54
+ if (!process.stdin.isTTY) {
55
+ const chunks = [];
56
+ for await (const chunk of process.stdin)
57
+ chunks.push(chunk);
58
+ console.log(`Reading ${label} from stdin`);
59
+ return Buffer.concat(chunks).toString('utf-8');
60
+ }
61
+ console.log(`Using demo ${label} (pass --file <path> for real ${label})`);
62
+ return fallback;
63
+ }
64
+ //# sourceMappingURL=cli-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../src/cli-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAInC;IACC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC;IAE3D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,UAAU,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,MAAM,UAAU,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,aAAa,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,iCAAiC,KAAK,GAAG,CAAC,CAAC;IAC1E,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * flomatai error hierarchy.
3
+ */
4
+ export declare class FlomatAIError extends Error {
5
+ readonly code: string;
6
+ readonly details?: unknown;
7
+ constructor(message: string, code: string, details?: unknown);
8
+ }
9
+ export declare class SkillError extends FlomatAIError {
10
+ readonly skillName: string;
11
+ constructor(skillName: string, message: string, details?: unknown);
12
+ }
13
+ export declare class SkillValidationError extends FlomatAIError {
14
+ readonly skillName: string;
15
+ readonly field: 'input' | 'output';
16
+ constructor(skillName: string, field: 'input' | 'output', message: string, details?: unknown);
17
+ }
18
+ export declare class SkillTimeoutError extends SkillError {
19
+ readonly timeoutMs: number;
20
+ constructor(skillName: string, timeoutMs: number);
21
+ }
22
+ export declare class PipelineError extends FlomatAIError {
23
+ readonly pipelineName: string;
24
+ readonly stepName?: string;
25
+ constructor(pipelineName: string, message: string, stepName?: string, details?: unknown);
26
+ }
27
+ export declare class StepMaxRetriesError extends PipelineError {
28
+ constructor(pipelineName: string, stepName: string, attempts: number, cause: Error);
29
+ }
30
+ export declare class AgentError extends FlomatAIError {
31
+ readonly agentName: string;
32
+ constructor(agentName: string, message: string, details?: unknown);
33
+ }
34
+ export declare class AgentMaxIterationsError extends AgentError {
35
+ constructor(agentName: string, maxIterations: number);
36
+ }
37
+ export declare class AgentMaxDepthError extends AgentError {
38
+ constructor(agentName: string, maxDepth: number);
39
+ }
40
+ export declare class LLMError extends FlomatAIError {
41
+ readonly providerName: string;
42
+ readonly statusCode?: number;
43
+ constructor(providerName: string, message: string, statusCode?: number, details?: unknown);
44
+ }
45
+ export declare class LLMRateLimitError extends LLMError {
46
+ readonly retryAfterMs?: number;
47
+ constructor(providerName: string, retryAfterMs?: number);
48
+ }
49
+ export declare class StateError extends FlomatAIError {
50
+ constructor(message: string, details?: unknown);
51
+ }
52
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAM7D;AAID,qBAAa,UAAW,SAAQ,aAAa;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAKlE;AAED,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;gBAGjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GAAG,QAAQ,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO;CAOpB;AAED,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAKjD;AAID,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEf,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAMxF;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CASnF;AAID,qBAAa,UAAW,SAAQ,aAAa;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAKlE;AAED,qBAAa,uBAAwB,SAAQ,UAAU;gBACzC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;CAOrD;AAED,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAIhD;AAID,qBAAa,QAAS,SAAQ,aAAa;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEjB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAM1F;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEnB,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CASxD;AAID,qBAAa,UAAW,SAAQ,aAAa;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAI/C"}
package/dist/errors.js ADDED
@@ -0,0 +1,105 @@
1
+ /**
2
+ * flomatai error hierarchy.
3
+ */
4
+ export class FlomatAIError extends Error {
5
+ code;
6
+ details;
7
+ constructor(message, code, details) {
8
+ super(message);
9
+ this.name = 'FlomatAIError';
10
+ this.code = code;
11
+ this.details = details;
12
+ }
13
+ }
14
+ // ── Skill Errors ─────────────────────────────────────────────────────────────
15
+ export class SkillError extends FlomatAIError {
16
+ skillName;
17
+ constructor(skillName, message, details) {
18
+ super(message, 'SKILL_ERROR', details);
19
+ this.name = 'SkillError';
20
+ this.skillName = skillName;
21
+ }
22
+ }
23
+ export class SkillValidationError extends FlomatAIError {
24
+ skillName;
25
+ field;
26
+ constructor(skillName, field, message, details) {
27
+ super(message, 'SKILL_VALIDATION_ERROR', details);
28
+ this.name = 'SkillValidationError';
29
+ this.skillName = skillName;
30
+ this.field = field;
31
+ }
32
+ }
33
+ export class SkillTimeoutError extends SkillError {
34
+ timeoutMs;
35
+ constructor(skillName, timeoutMs) {
36
+ super(skillName, `Skill "${skillName}" timed out after ${timeoutMs}ms`);
37
+ this.name = 'SkillTimeoutError';
38
+ this.timeoutMs = timeoutMs;
39
+ }
40
+ }
41
+ // ── Pipeline Errors ──────────────────────────────────────────────────────────
42
+ export class PipelineError extends FlomatAIError {
43
+ pipelineName;
44
+ stepName;
45
+ constructor(pipelineName, message, stepName, details) {
46
+ super(message, 'PIPELINE_ERROR', details);
47
+ this.name = 'PipelineError';
48
+ this.pipelineName = pipelineName;
49
+ this.stepName = stepName;
50
+ }
51
+ }
52
+ export class StepMaxRetriesError extends PipelineError {
53
+ constructor(pipelineName, stepName, attempts, cause) {
54
+ super(pipelineName, `Step "${stepName}" failed after ${attempts} attempts: ${cause.message}`, stepName, { cause });
55
+ this.name = 'StepMaxRetriesError';
56
+ }
57
+ }
58
+ // ── Agent Errors ─────────────────────────────────────────────────────────────
59
+ export class AgentError extends FlomatAIError {
60
+ agentName;
61
+ constructor(agentName, message, details) {
62
+ super(message, 'AGENT_ERROR', details);
63
+ this.name = 'AgentError';
64
+ this.agentName = agentName;
65
+ }
66
+ }
67
+ export class AgentMaxIterationsError extends AgentError {
68
+ constructor(agentName, maxIterations) {
69
+ super(agentName, `Agent "${agentName}" hit max iterations (${maxIterations}) without finishing`);
70
+ this.name = 'AgentMaxIterationsError';
71
+ }
72
+ }
73
+ export class AgentMaxDepthError extends AgentError {
74
+ constructor(agentName, maxDepth) {
75
+ super(agentName, `Agent hierarchy exceeded max depth (${maxDepth})`);
76
+ this.name = 'AgentMaxDepthError';
77
+ }
78
+ }
79
+ // ── LLM Errors ───────────────────────────────────────────────────────────────
80
+ export class LLMError extends FlomatAIError {
81
+ providerName;
82
+ statusCode;
83
+ constructor(providerName, message, statusCode, details) {
84
+ super(message, 'LLM_ERROR', details);
85
+ this.name = 'LLMError';
86
+ this.providerName = providerName;
87
+ this.statusCode = statusCode;
88
+ }
89
+ }
90
+ export class LLMRateLimitError extends LLMError {
91
+ retryAfterMs;
92
+ constructor(providerName, retryAfterMs) {
93
+ super(providerName, `Rate limit exceeded for provider "${providerName}"${retryAfterMs ? `. Retry after ${retryAfterMs}ms` : ''}`, 429);
94
+ this.name = 'LLMRateLimitError';
95
+ this.retryAfterMs = retryAfterMs;
96
+ }
97
+ }
98
+ // ── State Errors ─────────────────────────────────────────────────────────────
99
+ export class StateError extends FlomatAIError {
100
+ constructor(message, details) {
101
+ super(message, 'STATE_ERROR', details);
102
+ this.name = 'StateError';
103
+ }
104
+ }
105
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @flomatai/core — public API
3
+ */
4
+ export type { Message, MessageRole, LLMOptions, LLMResponse, LLMChunk, ToolDefinition, ToolCall, PipelineRun, StepRecord, RunStatus, } from './types.js';
5
+ export { FlomatAIError, SkillError, SkillValidationError, SkillTimeoutError, PipelineError, StepMaxRetriesError, AgentError, AgentMaxIterationsError, AgentMaxDepthError, LLMError, LLMRateLimitError, StateError, } from './errors.js';
6
+ export { Logger, logger, type LogLevel, type LogEntry, type LogTransport } from './logger.js';
7
+ export type { LLMProvider, LLMRegistry } from './llm-provider.js';
8
+ export { resolveLLM, withRetry, withTimeout } from './llm-provider.js';
9
+ export type { Skill, SkillMeta, SkillContext, SkillResult, MCPClientLike } from './skill.js';
10
+ export { LLMSkill, createLLMSkill, type LLMSkillConfig } from './skills/llm-skill.js';
11
+ export { TransformSkill, createTransformSkill, type TransformSkillConfig } from './skills/transform-skill.js';
12
+ export { IOSkill, createHttpGetSkill, createHttpPostSkill, createReadFileSkill, createWriteFileSkill, } from './skills/io-skill.js';
13
+ export { Pipeline, PipelineBuilder, resolvePath, type BuiltPipeline, type PipelineStep, type StepInputContext, type StepKind, } from './pipeline.js';
14
+ export { PipelineRegistry, loadPipeline, createRegistryFromConfig, type PipelineSource, type RegisteredPipeline, type PipelinePackageMeta, type PipelinePackageExports, } from './pipeline-registry.js';
15
+ export type { StateStore, RunFilter } from './state/types.js';
16
+ export { MemoryStore } from './state/memory-store.js';
17
+ export { FileStore } from './state/file-store.js';
18
+ export { Agent, createAgent, type AgentConfig } from './agent.js';
19
+ export type { AgentContext, AgentResult, AgentTraceEntry, AgentRunner, SpawnAgentConfig, StrategyName, CustomStrategyFn, Strategy, } from './strategies/types.js';
20
+ export { SequentialStrategy } from './strategies/sequential.js';
21
+ export { RouterStrategy } from './strategies/router.js';
22
+ export { PlanAndExecuteStrategy, type PlanAndExecuteOptions } from './strategies/plan-and-execute.js';
23
+ export { ReActStrategy, type ReActOptions } from './strategies/react.js';
24
+ export { CustomStrategy } from './strategies/custom.js';
25
+ export { Orchestrator, type OrchestratorConfig, type OrchestratorHooks, type RunOptions, } from './orchestrator.js';
26
+ export { createConsoleHooks } from './orchestrator-helpers.js';
27
+ export { getArg, hasFlag, readTextInput } from './cli-utils.js';
28
+ export { MockLLMProvider, createTestLLM, createMockLLMRegistry, createTestOrchestrator, type MockResponse, } from './mock-llm.js';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,OAAO,EACP,WAAW,EACX,UAAU,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAG9F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGvE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG7F,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9G,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,QAAQ,EACR,eAAe,EACf,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,wBAAwB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,YAAY,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @flomatai/core — public API
3
+ */
4
+ // ── Errors ────────────────────────────────────────────────────────────────────
5
+ export { FlomatAIError, SkillError, SkillValidationError, SkillTimeoutError, PipelineError, StepMaxRetriesError, AgentError, AgentMaxIterationsError, AgentMaxDepthError, LLMError, LLMRateLimitError, StateError, } from './errors.js';
6
+ // ── Logger ────────────────────────────────────────────────────────────────────
7
+ export { Logger, logger } from './logger.js';
8
+ export { resolveLLM, withRetry, withTimeout } from './llm-provider.js';
9
+ // ── Skill Builders ────────────────────────────────────────────────────────────
10
+ export { LLMSkill, createLLMSkill } from './skills/llm-skill.js';
11
+ export { TransformSkill, createTransformSkill } from './skills/transform-skill.js';
12
+ export { IOSkill, createHttpGetSkill, createHttpPostSkill, createReadFileSkill, createWriteFileSkill, } from './skills/io-skill.js';
13
+ // ── Pipeline ──────────────────────────────────────────────────────────────────
14
+ export { Pipeline, PipelineBuilder, resolvePath, } from './pipeline.js';
15
+ // ── Pipeline Registry ─────────────────────────────────────────────────────────
16
+ export { PipelineRegistry, loadPipeline, createRegistryFromConfig, } from './pipeline-registry.js';
17
+ export { MemoryStore } from './state/memory-store.js';
18
+ export { FileStore } from './state/file-store.js';
19
+ // ── Agent ─────────────────────────────────────────────────────────────────────
20
+ export { Agent, createAgent } from './agent.js';
21
+ // Strategy classes (for custom usage)
22
+ export { SequentialStrategy } from './strategies/sequential.js';
23
+ export { RouterStrategy } from './strategies/router.js';
24
+ export { PlanAndExecuteStrategy } from './strategies/plan-and-execute.js';
25
+ export { ReActStrategy } from './strategies/react.js';
26
+ export { CustomStrategy } from './strategies/custom.js';
27
+ // ── Orchestrator ──────────────────────────────────────────────────────────────
28
+ export { Orchestrator, } from './orchestrator.js';
29
+ // ── Orchestrator helpers ──────────────────────────────────────────────────────
30
+ export { createConsoleHooks } from './orchestrator-helpers.js';
31
+ // ── CLI utilities ─────────────────────────────────────────────────────────────
32
+ export { getArg, hasFlag, readTextInput } from './cli-utils.js';
33
+ // ── Testing / Mock ────────────────────────────────────────────────────────────
34
+ export { MockLLMProvider, createTestLLM, createMockLLMRegistry, createTestOrchestrator, } from './mock-llm.js';
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,iFAAiF;AACjF,OAAO,EACL,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,iFAAiF;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAmD,MAAM,aAAa,CAAC;AAI9F,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKvE,iFAAiF;AACjF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAA6B,MAAM,6BAA6B,CAAC;AAC9G,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,iFAAiF;AACjF,OAAO,EACL,QAAQ,EACR,eAAe,EACf,WAAW,GAKZ,MAAM,eAAe,CAAC;AAEvB,iFAAiF;AACjF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,wBAAwB,GAKzB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,iFAAiF;AACjF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAYlE,sCAAsC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAA8B,MAAM,kCAAkC,CAAC;AACtG,OAAO,EAAE,aAAa,EAAqB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,iFAAiF;AACjF,OAAO,EACL,YAAY,GAIb,MAAM,mBAAmB,CAAC;AAE3B,iFAAiF;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,iFAAiF;AACjF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEhE,iFAAiF;AACjF,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * LLMProvider abstraction — the universal interface for all AI model providers.
3
+ *
4
+ * Implementations live in @flomatai/provider-* packages.
5
+ */
6
+ import type { Message, LLMOptions, LLMResponse, LLMChunk } from './types.js';
7
+ export interface LLMProvider {
8
+ /** Identifier for this provider (e.g. 'anthropic', 'openai', 'ollama'). */
9
+ readonly name: string;
10
+ /** The model being used (e.g. 'claude-3-5-sonnet-20241022'). */
11
+ readonly model: string;
12
+ /**
13
+ * Send a chat completion request and await the full response.
14
+ */
15
+ chat(messages: Message[], options?: LLMOptions): Promise<LLMResponse>;
16
+ /**
17
+ * Stream a chat completion. Yields chunks as they arrive.
18
+ */
19
+ stream(messages: Message[], options?: LLMOptions): AsyncIterable<LLMChunk>;
20
+ }
21
+ /**
22
+ * A named registry of LLM providers.
23
+ * The 'default' key is used when no specific provider is requested.
24
+ */
25
+ export type LLMRegistry = Record<string, LLMProvider>;
26
+ export declare function resolveLLM(registry: LLMRegistry, key?: string): LLMProvider;
27
+ export declare function withRetry<T>(fn: () => Promise<T>, retries: number, onRetry?: (attempt: number, error: Error) => void): Promise<T>;
28
+ export declare function withTimeout<T>(fn: () => Promise<T>, timeoutMs: number, label: string): Promise<T>;
29
+ //# sourceMappingURL=llm-provider.d.ts.map