@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,172 @@
1
+ /**
2
+ * ReAct strategy — iterative Reasoning + Acting loop.
3
+ *
4
+ * Each iteration:
5
+ * 1. THINK — LLM reasons about what to do next
6
+ * 2. ACT — execute the chosen skill
7
+ * 3. OBSERVE — feed output back to LLM
8
+ * 4. Repeat until LLM decides to FINISH
9
+ */
10
+ import { AgentMaxIterationsError } from '../errors.js';
11
+ export class ReActStrategy {
12
+ options;
13
+ constructor(options = {}) {
14
+ this.options = options;
15
+ }
16
+ async execute(skills, input, ctx) {
17
+ const trace = [];
18
+ const startMs = Date.now();
19
+ const maxIter = this.options.maxIterations ?? 10;
20
+ const reflectionInterval = this.options.reflectionInterval ?? 0;
21
+ const history = [];
22
+ const skillMap = new Map(skills.map((s) => [s.meta.name, s]));
23
+ for (let i = 0; i < maxIter; i++) {
24
+ if (ctx.abortSignal.aborted)
25
+ throw new Error(`Agent "${ctx.agentName}" aborted`);
26
+ // ── Periodic reflection ────────────────────────────────────────────
27
+ if (reflectionInterval > 0 && i > 0 && i % reflectionInterval === 0) {
28
+ const reflection = await this.reflect(history, ctx);
29
+ trace.push({
30
+ type: 'reflection',
31
+ content: reflection,
32
+ iteration: i,
33
+ timestamp: new Date().toISOString(),
34
+ });
35
+ ctx.logger.debug(`[react] Reflection at step ${i}: ${reflection.substring(0, 100)}`);
36
+ }
37
+ // ── Think ─────────────────────────────────────────────────────────
38
+ const thought = await this.think(skills, input, history, ctx, i);
39
+ trace.push({
40
+ type: 'thought',
41
+ iteration: i,
42
+ content: thought.thought,
43
+ timestamp: new Date().toISOString(),
44
+ });
45
+ ctx.logger.debug(`[react:${i}] Thought: ${thought.thought.substring(0, 100)}`);
46
+ // ── Check for finish ──────────────────────────────────────────────
47
+ if (thought.action.type === 'finish') {
48
+ trace.push({
49
+ type: 'finish',
50
+ output: thought.action.output,
51
+ iteration: i,
52
+ timestamp: new Date().toISOString(),
53
+ });
54
+ return {
55
+ output: thought.action.output,
56
+ trace,
57
+ tokensUsed: ctx.totalTokens,
58
+ durationMs: Date.now() - startMs,
59
+ };
60
+ }
61
+ // ── Act ───────────────────────────────────────────────────────────
62
+ const skillName = thought.action.skill;
63
+ const skill = skillMap.get(skillName);
64
+ let observation;
65
+ if (!skill) {
66
+ observation = {
67
+ error: `Skill "${skillName}" not found. Available: ${[...skillMap.keys()].join(', ')}`,
68
+ };
69
+ ctx.logger.warn(`[react:${i}] Unknown skill "${skillName}"`);
70
+ }
71
+ else {
72
+ try {
73
+ ctx.logger.debug(`[react:${i}] Calling skill "${skillName}"`);
74
+ observation = await skill.execute(thought.action.input, ctx.toSkillContext());
75
+ trace.push({
76
+ type: 'action',
77
+ skill: skillName,
78
+ input: thought.action.input,
79
+ output: observation,
80
+ iteration: i,
81
+ timestamp: new Date().toISOString(),
82
+ });
83
+ }
84
+ catch (err) {
85
+ observation = {
86
+ error: err instanceof Error ? err.message : String(err),
87
+ };
88
+ ctx.logger.warn(`[react:${i}] Skill "${skillName}" error: ${observation}`);
89
+ }
90
+ }
91
+ trace.push({
92
+ type: 'observation',
93
+ content: observation,
94
+ iteration: i,
95
+ timestamp: new Date().toISOString(),
96
+ });
97
+ history.push({
98
+ thought: thought.thought,
99
+ action: thought.action,
100
+ observation,
101
+ });
102
+ }
103
+ throw new AgentMaxIterationsError(ctx.agentName, maxIter);
104
+ }
105
+ async think(skills, originalInput, history, ctx, iteration) {
106
+ const skillList = skills
107
+ .map((s) => `- ${s.meta.name}: ${s.meta.description}`)
108
+ .join('\n');
109
+ const historyText = history.length === 0
110
+ ? 'No previous steps.'
111
+ : history
112
+ .map((h, i) => `[Step ${i + 1}]\nThought: ${h.thought}\nAction: ${JSON.stringify(h.action)}\nObservation: ${JSON.stringify(h.observation).substring(0, 800)}`)
113
+ .join('\n\n');
114
+ const systemPrompt = `${ctx.agentRole}
115
+ ${this.options.systemPromptSuffix ?? ''}
116
+
117
+ You operate in a Thought → Action → Observation loop.
118
+ After each action you will see the result (observation) and decide what to do next.
119
+ When you have enough information, use { "type": "finish", "output": {...} } to stop.`;
120
+ const userPrompt = `AVAILABLE SKILLS:
121
+ ${skillList}
122
+
123
+ ORIGINAL INPUT:
124
+ ${JSON.stringify(originalInput, null, 2).substring(0, 2000)}
125
+
126
+ HISTORY (${history.length} steps so far):
127
+ ${historyText}
128
+
129
+ Step ${iteration + 1}: What do you do next?
130
+
131
+ Respond with ONLY valid JSON:
132
+ {
133
+ "thought": "your step-by-step reasoning",
134
+ "action": { "type": "use_skill", "skill": "skill-name", "input": {...} }
135
+ }
136
+
137
+ OR to finish:
138
+ {
139
+ "thought": "why I'm done",
140
+ "action": { "type": "finish", "output": {...} }
141
+ }`;
142
+ const response = await ctx.llm.chat([
143
+ { role: 'system', content: systemPrompt },
144
+ { role: 'user', content: userPrompt },
145
+ ], { temperature: 0.2 });
146
+ ctx.addTokens(response.usage.totalTokens);
147
+ try {
148
+ return JSON.parse(response.content);
149
+ }
150
+ catch {
151
+ const match = response.content.match(/\{[\s\S]*\}/);
152
+ if (!match) {
153
+ throw new Error(`ReAct: LLM did not produce valid JSON at step ${iteration}. Got: ${response.content.substring(0, 300)}`);
154
+ }
155
+ return JSON.parse(match[0]);
156
+ }
157
+ }
158
+ async reflect(history, ctx) {
159
+ const summary = history
160
+ .map((h, i) => `Step ${i + 1}: ${h.thought.substring(0, 80)} → ${JSON.stringify(h.action).substring(0, 80)}`)
161
+ .join('\n');
162
+ const response = await ctx.llm.chat([
163
+ {
164
+ role: 'user',
165
+ content: `Review your progress:\n${summary}\n\nAre you on track? Stuck in a loop? Should you change approach? Be brief.`,
166
+ },
167
+ ], { temperature: 0.1 });
168
+ ctx.addTokens(response.usage.totalTokens);
169
+ return response.content;
170
+ }
171
+ }
172
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/strategies/react.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Router strategy — LLM picks ONE skill to handle the input.
3
+ *
4
+ * Useful for triage/classification: incoming request → route to specialist.
5
+ */
6
+ import type { Skill } from '../skill.js';
7
+ import type { Strategy, AgentContext, AgentResult } from './types.js';
8
+ export declare class RouterStrategy implements Strategy {
9
+ execute(skills: Skill[], input: unknown, ctx: AgentContext): Promise<AgentResult>;
10
+ }
11
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/strategies/router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAOvF,qBAAa,cAAe,YAAW,QAAQ;IACvC,OAAO,CACX,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,WAAW,CAAC;CAiFxB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Router strategy — LLM picks ONE skill to handle the input.
3
+ *
4
+ * Useful for triage/classification: incoming request → route to specialist.
5
+ */
6
+ export class RouterStrategy {
7
+ async execute(skills, input, ctx) {
8
+ const trace = [];
9
+ const startMs = Date.now();
10
+ // Build skill catalog
11
+ const skillList = skills
12
+ .map((s, i) => `${i}: ${s.meta.name} — ${s.meta.description}`)
13
+ .join('\n');
14
+ const routingPrompt = `You are a routing agent. Pick the BEST single skill to handle the input.
15
+
16
+ ROLE: ${ctx.agentRole}
17
+
18
+ AVAILABLE SKILLS:
19
+ ${skillList}
20
+
21
+ INPUT:
22
+ ${JSON.stringify(input, null, 2).substring(0, 3000)}
23
+
24
+ Respond with ONLY valid JSON — no markdown, no explanation:
25
+ { "skill_index": <number 0-${skills.length - 1}>, "reasoning": "<brief explanation>" }`;
26
+ ctx.logger.debug(`[router] Routing to best skill among ${skills.length} options`);
27
+ const response = await ctx.llm.chat([{ role: 'user', content: routingPrompt }], { temperature: 0.1, responseFormat: 'json' });
28
+ ctx.addTokens(response.usage.totalTokens);
29
+ let decision;
30
+ try {
31
+ decision = JSON.parse(response.content);
32
+ }
33
+ catch {
34
+ // Fallback: find JSON in response
35
+ const match = response.content.match(/\{[\s\S]*\}/);
36
+ if (!match) {
37
+ throw new Error(`Router failed to produce valid JSON. Got: ${response.content.substring(0, 200)}`);
38
+ }
39
+ decision = JSON.parse(match[0]);
40
+ }
41
+ const chosenSkill = skills[decision.skill_index];
42
+ if (!chosenSkill) {
43
+ throw new Error(`Router chose invalid skill index ${decision.skill_index}. Available: 0-${skills.length - 1}`);
44
+ }
45
+ trace.push({
46
+ type: 'route',
47
+ content: {
48
+ chosen: chosenSkill.meta.name,
49
+ index: decision.skill_index,
50
+ reasoning: decision.reasoning,
51
+ },
52
+ timestamp: new Date().toISOString(),
53
+ });
54
+ ctx.logger.debug(`[router] Chose "${chosenSkill.meta.name}": ${decision.reasoning}`);
55
+ const output = await chosenSkill.execute(input, ctx.toSkillContext());
56
+ trace.push({
57
+ type: 'finish',
58
+ skill: chosenSkill.meta.name,
59
+ output,
60
+ timestamp: new Date().toISOString(),
61
+ });
62
+ return {
63
+ output,
64
+ trace,
65
+ tokensUsed: ctx.totalTokens,
66
+ durationMs: Date.now() - startMs,
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/strategies/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sequential strategy — runs all skills in order, passing output → input.
3
+ *
4
+ * The simplest strategy. No LLM calls at the agent level.
5
+ * Equivalent to a pipeline but wrapped in an agent for observability.
6
+ */
7
+ import type { Skill } from '../skill.js';
8
+ import type { Strategy, AgentContext, AgentResult } from './types.js';
9
+ export declare class SequentialStrategy implements Strategy {
10
+ execute(skills: Skill[], input: unknown, ctx: AgentContext): Promise<AgentResult>;
11
+ }
12
+ //# sourceMappingURL=sequential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequential.d.ts","sourceRoot":"","sources":["../../src/strategies/sequential.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAEvF,qBAAa,kBAAmB,YAAW,QAAQ;IAC3C,OAAO,CACX,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,WAAW,CAAC;CAuCxB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Sequential strategy — runs all skills in order, passing output → input.
3
+ *
4
+ * The simplest strategy. No LLM calls at the agent level.
5
+ * Equivalent to a pipeline but wrapped in an agent for observability.
6
+ */
7
+ export class SequentialStrategy {
8
+ async execute(skills, input, ctx) {
9
+ const trace = [];
10
+ const startMs = Date.now();
11
+ let current = input;
12
+ for (const skill of skills) {
13
+ if (ctx.abortSignal.aborted) {
14
+ throw new Error(`Agent "${ctx.agentName}" aborted`);
15
+ }
16
+ const skillCtx = ctx.toSkillContext();
17
+ ctx.logger.debug(`[sequential] Running skill "${skill.meta.name}"`);
18
+ const t0 = Date.now();
19
+ const output = await skill.execute(current, skillCtx);
20
+ trace.push({
21
+ type: 'action',
22
+ skill: skill.meta.name,
23
+ input: current,
24
+ output,
25
+ timestamp: new Date().toISOString(),
26
+ });
27
+ ctx.logger.debug(`[sequential] Skill "${skill.meta.name}" done in ${Date.now() - t0}ms`);
28
+ current = output;
29
+ }
30
+ trace.push({ type: 'finish', output: current, timestamp: new Date().toISOString() });
31
+ return {
32
+ output: current,
33
+ trace,
34
+ tokensUsed: ctx.totalTokens,
35
+ durationMs: Date.now() - startMs,
36
+ };
37
+ }
38
+ }
39
+ //# sourceMappingURL=sequential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequential.js","sourceRoot":"","sources":["../../src/strategies/sequential.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,OAAO,kBAAkB;IAC7B,KAAK,CAAC,OAAO,CACX,MAAe,EACf,KAAc,EACd,GAAiB;QAEjB,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,SAAS,WAAW,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACpE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEtB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAA8C,EAAE,QAAQ,CAAC,CAAC;YAE7F,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACtB,KAAK,EAAE,OAAO;gBACd,MAAM;gBACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CACvE,CAAC;YACF,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAErF,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK;YACL,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Agent strategy types — shared across all strategy implementations.
3
+ */
4
+ import type { Skill, SkillContext } from '../skill.js';
5
+ import type { LLMProvider } from '../llm-provider.js';
6
+ import type { Logger } from '../logger.js';
7
+ import type { StateStore } from '../state/types.js';
8
+ export type AgentTraceEntryType = 'thought' | 'action' | 'observation' | 'plan' | 'replan' | 'reflection' | 'finish' | 'route' | 'spawn';
9
+ export interface AgentTraceEntry {
10
+ type: AgentTraceEntryType;
11
+ iteration?: number;
12
+ skill?: string;
13
+ input?: unknown;
14
+ output?: unknown;
15
+ content?: unknown;
16
+ timestamp: string;
17
+ }
18
+ export interface AgentResult {
19
+ output: unknown;
20
+ trace: AgentTraceEntry[];
21
+ tokensUsed: number;
22
+ durationMs: number;
23
+ }
24
+ export interface AgentContext {
25
+ agentName: string;
26
+ agentRole: string;
27
+ llm: LLMProvider;
28
+ getLLM: (key: string) => LLMProvider;
29
+ logger: Logger;
30
+ state: StateStore;
31
+ config: Record<string, unknown>;
32
+ abortSignal: AbortSignal;
33
+ runId: string;
34
+ depth: number;
35
+ maxDepth: number;
36
+ totalTokens: number;
37
+ addTokens: (n: number) => void;
38
+ emit: (event: string, data: unknown) => void;
39
+ /** Spawn a sub-agent. */
40
+ spawnAgent: (config: SpawnAgentConfig) => AgentRunner;
41
+ /** Get a SkillContext from this AgentContext. */
42
+ toSkillContext(): SkillContext;
43
+ }
44
+ export interface SpawnAgentConfig {
45
+ name: string;
46
+ role: string;
47
+ skills: Skill[];
48
+ strategy: StrategyName;
49
+ llm?: string;
50
+ maxIterations?: number;
51
+ customStrategy?: CustomStrategyFn;
52
+ }
53
+ export type StrategyName = 'sequential' | 'router' | 'plan-and-execute' | 'react' | 'custom';
54
+ export type CustomStrategyFn = (skills: Skill[], input: unknown, ctx: AgentContext) => Promise<AgentResult>;
55
+ export interface Strategy {
56
+ execute(skills: Skill[], input: unknown, ctx: AgentContext): Promise<AgentResult>;
57
+ }
58
+ /** Minimal agent runner interface (to avoid circular imports). */
59
+ export interface AgentRunner {
60
+ run(input: unknown, ctx: AgentContext): Promise<AgentResult>;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/strategies/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,QAAQ,GACR,aAAa,GACb,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,yBAAyB;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,WAAW,CAAC;IACtD,iDAAiD;IACjD,cAAc,IAAI,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,QAAQ,GACR,kBAAkB,GAClB,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,YAAY,KACd,OAAO,CAAC,WAAW,CAAC,CAAC;AAI1B,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACnF;AAED,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9D"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Agent strategy types — shared across all strategy implementations.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/strategies/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Core shared types used across all flomatai packages.
3
+ */
4
+ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
5
+ export interface Message {
6
+ role: MessageRole;
7
+ content: string;
8
+ name?: string;
9
+ toolCallId?: string;
10
+ }
11
+ export interface LLMOptions {
12
+ /** Sampling temperature (0-2). Lower = more deterministic. */
13
+ temperature?: number;
14
+ /** Maximum tokens to generate. */
15
+ maxTokens?: number;
16
+ /** Force JSON output mode if supported by provider. */
17
+ responseFormat?: 'text' | 'json';
18
+ /** Tool definitions for function calling. */
19
+ tools?: ToolDefinition[];
20
+ /** Stop sequences. */
21
+ stop?: string[];
22
+ /** Timeout in milliseconds. */
23
+ timeout?: number;
24
+ /** Number of retry attempts on failure. */
25
+ retries?: number;
26
+ }
27
+ export interface LLMResponse {
28
+ /** The generated text content. */
29
+ content: string;
30
+ /** Model identifier used. */
31
+ model: string;
32
+ /** Token usage statistics. */
33
+ usage: {
34
+ inputTokens: number;
35
+ outputTokens: number;
36
+ totalTokens: number;
37
+ };
38
+ /** Stop reason from the model. */
39
+ stopReason?: 'stop' | 'max_tokens' | 'tool_use' | string;
40
+ /** Tool calls requested by the model. */
41
+ toolCalls?: ToolCall[];
42
+ }
43
+ export interface LLMChunk {
44
+ content: string;
45
+ done: boolean;
46
+ }
47
+ export interface ToolDefinition {
48
+ name: string;
49
+ description: string;
50
+ parameters: Record<string, unknown>;
51
+ }
52
+ export interface ToolCall {
53
+ id: string;
54
+ name: string;
55
+ arguments: Record<string, unknown>;
56
+ }
57
+ export type RunStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
58
+ export interface PipelineRun {
59
+ id: string;
60
+ pipelineName: string;
61
+ status: RunStatus;
62
+ input: unknown;
63
+ output?: unknown;
64
+ error?: string;
65
+ startedAt: string;
66
+ completedAt?: string;
67
+ durationMs?: number;
68
+ tokensUsed: number;
69
+ steps: StepRecord[];
70
+ }
71
+ export interface StepRecord {
72
+ name: string;
73
+ status: RunStatus;
74
+ input?: unknown;
75
+ output?: unknown;
76
+ error?: string;
77
+ startedAt: string;
78
+ completedAt?: string;
79
+ durationMs?: number;
80
+ tokensUsed: number;
81
+ attempt: number;
82
+ }
83
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IACzD,yCAAyC;IACzC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAID,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core shared types used across all flomatai packages.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@flomatai/core",
3
+ "version": "0.1.0",
4
+ "description": "Core framework: Skills, Agents, Pipeline DSL, Orchestrator",
5
+ "license": "GPL-3.0-or-later",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "dependencies": {
16
+ "zod": "^3.23.8"
17
+ },
18
+ "devDependencies": {
19
+ "typescript": "^5.5.0",
20
+ "@types/node": "^20.0.0"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc -p tsconfig.json",
24
+ "clean": "rm -rf dist",
25
+ "typecheck": "tsc -p tsconfig.json --noEmit",
26
+ "dev": "tsc -p tsconfig.json --watch"
27
+ }
28
+ }