@framers/agentos 0.1.121 → 0.1.122
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/dist/emergent/AdaptPersonalityTool.d.ts +158 -0
- package/dist/emergent/AdaptPersonalityTool.d.ts.map +1 -0
- package/dist/emergent/AdaptPersonalityTool.js +190 -0
- package/dist/emergent/AdaptPersonalityTool.js.map +1 -0
- package/dist/emergent/CreateWorkflowTool.d.ts +181 -0
- package/dist/emergent/CreateWorkflowTool.d.ts.map +1 -0
- package/dist/emergent/CreateWorkflowTool.js +307 -0
- package/dist/emergent/CreateWorkflowTool.js.map +1 -0
- package/dist/emergent/ManageSkillsTool.d.ts +154 -0
- package/dist/emergent/ManageSkillsTool.d.ts.map +1 -0
- package/dist/emergent/ManageSkillsTool.js +241 -0
- package/dist/emergent/ManageSkillsTool.js.map +1 -0
- package/dist/emergent/PersonalityMutationStore.d.ts +183 -0
- package/dist/emergent/PersonalityMutationStore.d.ts.map +1 -0
- package/dist/emergent/PersonalityMutationStore.js +222 -0
- package/dist/emergent/PersonalityMutationStore.js.map +1 -0
- package/dist/emergent/SelfEvaluateTool.d.ts +189 -0
- package/dist/emergent/SelfEvaluateTool.d.ts.map +1 -0
- package/dist/emergent/SelfEvaluateTool.js +353 -0
- package/dist/emergent/SelfEvaluateTool.js.map +1 -0
- package/dist/emergent/SelfImprovementConfig.d.ts +166 -0
- package/dist/emergent/SelfImprovementConfig.d.ts.map +1 -0
- package/dist/emergent/SelfImprovementConfig.js +43 -0
- package/dist/emergent/SelfImprovementConfig.js.map +1 -0
- package/dist/emergent/index.d.ts +1 -0
- package/dist/emergent/index.d.ts.map +1 -1
- package/dist/emergent/index.js +1 -0
- package/dist/emergent/index.js.map +1 -1
- package/dist/emergent/types.d.ts +9 -0
- package/dist/emergent/types.d.ts.map +1 -1
- package/dist/emergent/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview AdaptPersonalityTool — ITool implementation that enables agents
|
|
3
|
+
* to mutate their own HEXACO personality traits at runtime with per-session
|
|
4
|
+
* budget enforcement.
|
|
5
|
+
*
|
|
6
|
+
* @module @framers/agentos/emergent/AdaptPersonalityTool
|
|
7
|
+
*
|
|
8
|
+
* Agents call `adapt_personality` to shift a specific trait dimension (e.g.
|
|
9
|
+
* openness, conscientiousness) by a bounded delta. The tool enforces:
|
|
10
|
+
* - Only valid HEXACO trait names are accepted.
|
|
11
|
+
* - Reasoning must be provided for every mutation (audit trail).
|
|
12
|
+
* - Per-session budgets cap the total absolute delta per trait.
|
|
13
|
+
* - Values are always clamped to the [0, 1] range.
|
|
14
|
+
*
|
|
15
|
+
* All mutations are recorded in the injected {@link PersonalityMutationStore}
|
|
16
|
+
* for durability and downstream analysis.
|
|
17
|
+
*/
|
|
18
|
+
import type { ITool, ToolExecutionResult, ToolExecutionContext, JSONSchemaObject } from '../core/tools/ITool.js';
|
|
19
|
+
/**
|
|
20
|
+
* The six HEXACO personality dimensions that agents may self-modify.
|
|
21
|
+
*
|
|
22
|
+
* Each trait is a continuous value in the range [0, 1]:
|
|
23
|
+
* - `openness` — curiosity, creativity, willingness to explore
|
|
24
|
+
* - `conscientiousness` — discipline, thoroughness, reliability
|
|
25
|
+
* - `emotionality` — emotional reactivity, empathy, anxiety
|
|
26
|
+
* - `extraversion` — sociability, energy, assertiveness
|
|
27
|
+
* - `agreeableness` — patience, tolerance, cooperation
|
|
28
|
+
* - `honesty` — sincerity, fairness, modesty
|
|
29
|
+
*/
|
|
30
|
+
export declare const VALID_TRAITS: readonly ["openness", "conscientiousness", "emotionality", "extraversion", "agreeableness", "honesty"];
|
|
31
|
+
/** Union type of valid HEXACO trait names. */
|
|
32
|
+
export type HEXACOTrait = (typeof VALID_TRAITS)[number];
|
|
33
|
+
/**
|
|
34
|
+
* A single personality mutation record persisted for audit and analysis.
|
|
35
|
+
*/
|
|
36
|
+
export interface PersonalityMutation {
|
|
37
|
+
/** The HEXACO trait that was modified. */
|
|
38
|
+
trait: string;
|
|
39
|
+
/** The trait value before the mutation. */
|
|
40
|
+
previousValue: number;
|
|
41
|
+
/** The trait value after the mutation. */
|
|
42
|
+
newValue: number;
|
|
43
|
+
/** The actual delta applied (may differ from requested if clamped). */
|
|
44
|
+
delta: number;
|
|
45
|
+
/** Free-text reasoning provided by the agent for this mutation. */
|
|
46
|
+
reasoning: string;
|
|
47
|
+
/** ISO-8601 timestamp of when the mutation occurred. */
|
|
48
|
+
timestamp: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Durable store interface for recording personality mutations.
|
|
52
|
+
* Implementations may write to SQLite, a JSON file, or in-memory arrays.
|
|
53
|
+
*/
|
|
54
|
+
export interface PersonalityMutationStore {
|
|
55
|
+
/** Persist a single mutation record. */
|
|
56
|
+
record(mutation: PersonalityMutation): void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Input arguments accepted by the `adapt_personality` tool.
|
|
60
|
+
*/
|
|
61
|
+
export interface AdaptPersonalityInput extends Record<string, any> {
|
|
62
|
+
/** The HEXACO trait to modify. */
|
|
63
|
+
trait: string;
|
|
64
|
+
/** The signed delta to apply (positive = increase, negative = decrease). */
|
|
65
|
+
delta: number;
|
|
66
|
+
/** Free-text reasoning explaining why this adaptation is warranted. */
|
|
67
|
+
reasoning: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Result payload returned after a successful personality adaptation.
|
|
71
|
+
*/
|
|
72
|
+
export interface AdaptPersonalityOutput {
|
|
73
|
+
/** The trait that was modified. */
|
|
74
|
+
trait: string;
|
|
75
|
+
/** Value before the mutation. */
|
|
76
|
+
previousValue: number;
|
|
77
|
+
/** Value after the mutation. */
|
|
78
|
+
newValue: number;
|
|
79
|
+
/** The actual delta applied. */
|
|
80
|
+
delta: number;
|
|
81
|
+
/** Whether the delta was clamped due to budget or range limits. */
|
|
82
|
+
clamped: boolean;
|
|
83
|
+
/** Total absolute delta applied to this trait in the current session. */
|
|
84
|
+
sessionTotal: number;
|
|
85
|
+
/** Remaining budget for this trait in the current session. */
|
|
86
|
+
remainingBudget: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Dependencies injected into the {@link AdaptPersonalityTool} constructor.
|
|
90
|
+
*/
|
|
91
|
+
export interface AdaptPersonalityDeps {
|
|
92
|
+
/** Configuration controlling per-session budget limits. */
|
|
93
|
+
config: {
|
|
94
|
+
/** Maximum total |delta| that may be applied to any single trait per session. */
|
|
95
|
+
maxDeltaPerSession: number;
|
|
96
|
+
};
|
|
97
|
+
/** Durable store for recording mutation history. */
|
|
98
|
+
mutationStore: PersonalityMutationStore;
|
|
99
|
+
/** Getter returning the current personality trait map (trait → value in [0, 1]). */
|
|
100
|
+
getPersonality: () => Record<string, number>;
|
|
101
|
+
/** Setter to apply a new value for a specific trait. */
|
|
102
|
+
setPersonality: (trait: string, value: number) => void;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* ITool implementation enabling agents to self-modify their HEXACO personality
|
|
106
|
+
* traits within per-session budgets.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* const tool = new AdaptPersonalityTool({
|
|
111
|
+
* config: { maxDeltaPerSession: 0.3 },
|
|
112
|
+
* mutationStore: myStore,
|
|
113
|
+
* getPersonality: () => agent.personality,
|
|
114
|
+
* setPersonality: (t, v) => { agent.personality[t] = v; },
|
|
115
|
+
* });
|
|
116
|
+
*
|
|
117
|
+
* const result = await tool.execute(
|
|
118
|
+
* { trait: 'openness', delta: 0.1, reasoning: 'User prefers creative responses.' },
|
|
119
|
+
* context,
|
|
120
|
+
* );
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export declare class AdaptPersonalityTool implements ITool<AdaptPersonalityInput, AdaptPersonalityOutput> {
|
|
124
|
+
/** @inheritdoc */
|
|
125
|
+
readonly id = "com.framers.emergent.adapt-personality";
|
|
126
|
+
/** @inheritdoc */
|
|
127
|
+
readonly name = "adapt_personality";
|
|
128
|
+
/** @inheritdoc */
|
|
129
|
+
readonly displayName = "Adapt Personality";
|
|
130
|
+
/** @inheritdoc */
|
|
131
|
+
readonly description: string;
|
|
132
|
+
/** @inheritdoc */
|
|
133
|
+
readonly category = "emergent";
|
|
134
|
+
/** @inheritdoc */
|
|
135
|
+
readonly hasSideEffects = true;
|
|
136
|
+
/** @inheritdoc */
|
|
137
|
+
readonly inputSchema: JSONSchemaObject;
|
|
138
|
+
/** Per-session accumulated |delta| per trait. Reset on tool construction. */
|
|
139
|
+
private readonly sessionDeltas;
|
|
140
|
+
/** Injected dependencies. */
|
|
141
|
+
private readonly deps;
|
|
142
|
+
/**
|
|
143
|
+
* Create a new AdaptPersonalityTool.
|
|
144
|
+
*
|
|
145
|
+
* @param deps - Injected dependencies including config, mutation store,
|
|
146
|
+
* and personality getter/setter.
|
|
147
|
+
*/
|
|
148
|
+
constructor(deps: AdaptPersonalityDeps);
|
|
149
|
+
/**
|
|
150
|
+
* Apply a personality trait mutation within session budget constraints.
|
|
151
|
+
*
|
|
152
|
+
* @param args - The trait, delta, and reasoning for the mutation.
|
|
153
|
+
* @param _context - Tool execution context (unused but required by ITool).
|
|
154
|
+
* @returns A {@link ToolExecutionResult} wrapping the mutation outcome.
|
|
155
|
+
*/
|
|
156
|
+
execute(args: AdaptPersonalityInput, _context: ToolExecutionContext): Promise<ToolExecutionResult<AdaptPersonalityOutput>>;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=AdaptPersonalityTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptPersonalityTool.d.ts","sourceRoot":"","sources":["../../src/emergent/AdaptPersonalityTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview AdaptPersonalityTool — ITool implementation that enables agents
|
|
3
|
+
* to mutate their own HEXACO personality traits at runtime with per-session
|
|
4
|
+
* budget enforcement.
|
|
5
|
+
*
|
|
6
|
+
* @module @framers/agentos/emergent/AdaptPersonalityTool
|
|
7
|
+
*
|
|
8
|
+
* Agents call `adapt_personality` to shift a specific trait dimension (e.g.
|
|
9
|
+
* openness, conscientiousness) by a bounded delta. The tool enforces:
|
|
10
|
+
* - Only valid HEXACO trait names are accepted.
|
|
11
|
+
* - Reasoning must be provided for every mutation (audit trail).
|
|
12
|
+
* - Per-session budgets cap the total absolute delta per trait.
|
|
13
|
+
* - Values are always clamped to the [0, 1] range.
|
|
14
|
+
*
|
|
15
|
+
* All mutations are recorded in the injected {@link PersonalityMutationStore}
|
|
16
|
+
* for durability and downstream analysis.
|
|
17
|
+
*/
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// VALID TRAITS
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* The six HEXACO personality dimensions that agents may self-modify.
|
|
23
|
+
*
|
|
24
|
+
* Each trait is a continuous value in the range [0, 1]:
|
|
25
|
+
* - `openness` — curiosity, creativity, willingness to explore
|
|
26
|
+
* - `conscientiousness` — discipline, thoroughness, reliability
|
|
27
|
+
* - `emotionality` — emotional reactivity, empathy, anxiety
|
|
28
|
+
* - `extraversion` — sociability, energy, assertiveness
|
|
29
|
+
* - `agreeableness` — patience, tolerance, cooperation
|
|
30
|
+
* - `honesty` — sincerity, fairness, modesty
|
|
31
|
+
*/
|
|
32
|
+
export const VALID_TRAITS = [
|
|
33
|
+
'openness',
|
|
34
|
+
'conscientiousness',
|
|
35
|
+
'emotionality',
|
|
36
|
+
'extraversion',
|
|
37
|
+
'agreeableness',
|
|
38
|
+
'honesty',
|
|
39
|
+
];
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// TOOL IMPLEMENTATION
|
|
42
|
+
// ============================================================================
|
|
43
|
+
/**
|
|
44
|
+
* ITool implementation enabling agents to self-modify their HEXACO personality
|
|
45
|
+
* traits within per-session budgets.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const tool = new AdaptPersonalityTool({
|
|
50
|
+
* config: { maxDeltaPerSession: 0.3 },
|
|
51
|
+
* mutationStore: myStore,
|
|
52
|
+
* getPersonality: () => agent.personality,
|
|
53
|
+
* setPersonality: (t, v) => { agent.personality[t] = v; },
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* const result = await tool.execute(
|
|
57
|
+
* { trait: 'openness', delta: 0.1, reasoning: 'User prefers creative responses.' },
|
|
58
|
+
* context,
|
|
59
|
+
* );
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export class AdaptPersonalityTool {
|
|
63
|
+
/**
|
|
64
|
+
* Create a new AdaptPersonalityTool.
|
|
65
|
+
*
|
|
66
|
+
* @param deps - Injected dependencies including config, mutation store,
|
|
67
|
+
* and personality getter/setter.
|
|
68
|
+
*/
|
|
69
|
+
constructor(deps) {
|
|
70
|
+
/** @inheritdoc */
|
|
71
|
+
this.id = 'com.framers.emergent.adapt-personality';
|
|
72
|
+
/** @inheritdoc */
|
|
73
|
+
this.name = 'adapt_personality';
|
|
74
|
+
/** @inheritdoc */
|
|
75
|
+
this.displayName = 'Adapt Personality';
|
|
76
|
+
/** @inheritdoc */
|
|
77
|
+
this.description = 'Adjust a HEXACO personality trait by a bounded delta. Requires reasoning ' +
|
|
78
|
+
'for every mutation. Per-session budgets prevent runaway drift.';
|
|
79
|
+
/** @inheritdoc */
|
|
80
|
+
this.category = 'emergent';
|
|
81
|
+
/** @inheritdoc */
|
|
82
|
+
this.hasSideEffects = true;
|
|
83
|
+
/** @inheritdoc */
|
|
84
|
+
this.inputSchema = {
|
|
85
|
+
type: 'object',
|
|
86
|
+
properties: {
|
|
87
|
+
trait: {
|
|
88
|
+
type: 'string',
|
|
89
|
+
enum: [...VALID_TRAITS],
|
|
90
|
+
description: 'The HEXACO personality trait to modify.',
|
|
91
|
+
},
|
|
92
|
+
delta: {
|
|
93
|
+
type: 'number',
|
|
94
|
+
description: 'Signed delta to apply (positive = increase, negative = decrease).',
|
|
95
|
+
},
|
|
96
|
+
reasoning: {
|
|
97
|
+
type: 'string',
|
|
98
|
+
description: 'Why this personality adaptation is warranted.',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
required: ['trait', 'delta', 'reasoning'],
|
|
102
|
+
};
|
|
103
|
+
/** Per-session accumulated |delta| per trait. Reset on tool construction. */
|
|
104
|
+
this.sessionDeltas = new Map();
|
|
105
|
+
this.deps = deps;
|
|
106
|
+
}
|
|
107
|
+
// --------------------------------------------------------------------------
|
|
108
|
+
// EXECUTE
|
|
109
|
+
// --------------------------------------------------------------------------
|
|
110
|
+
/**
|
|
111
|
+
* Apply a personality trait mutation within session budget constraints.
|
|
112
|
+
*
|
|
113
|
+
* @param args - The trait, delta, and reasoning for the mutation.
|
|
114
|
+
* @param _context - Tool execution context (unused but required by ITool).
|
|
115
|
+
* @returns A {@link ToolExecutionResult} wrapping the mutation outcome.
|
|
116
|
+
*/
|
|
117
|
+
async execute(args, _context) {
|
|
118
|
+
const { trait, delta, reasoning } = args;
|
|
119
|
+
// 1. Validate trait name
|
|
120
|
+
if (!VALID_TRAITS.includes(trait)) {
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
error: `Invalid trait "${trait}". Must be one of: ${VALID_TRAITS.join(', ')}`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// 2. Validate reasoning is non-empty
|
|
127
|
+
if (!reasoning || typeof reasoning !== 'string' || reasoning.trim().length === 0) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: 'reasoning is required and must be a non-empty string',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// 3. Check session budget — track total |delta| per trait
|
|
134
|
+
const { maxDeltaPerSession } = this.deps.config;
|
|
135
|
+
const currentSessionTotal = this.sessionDeltas.get(trait) ?? 0;
|
|
136
|
+
const remainingBudget = maxDeltaPerSession - currentSessionTotal;
|
|
137
|
+
// 4. Clamp delta to remaining budget
|
|
138
|
+
let effectiveDelta = delta;
|
|
139
|
+
let clamped = false;
|
|
140
|
+
if (Math.abs(effectiveDelta) > remainingBudget) {
|
|
141
|
+
effectiveDelta = remainingBudget * Math.sign(effectiveDelta);
|
|
142
|
+
clamped = true;
|
|
143
|
+
}
|
|
144
|
+
// If no budget remains, the effective delta is 0
|
|
145
|
+
if (remainingBudget <= 0) {
|
|
146
|
+
effectiveDelta = 0;
|
|
147
|
+
clamped = true;
|
|
148
|
+
}
|
|
149
|
+
// 5. Get current value, compute new value (clamped 0–1), apply
|
|
150
|
+
const personality = this.deps.getPersonality();
|
|
151
|
+
const previousValue = personality[trait] ?? 0.5;
|
|
152
|
+
let newValue = previousValue + effectiveDelta;
|
|
153
|
+
// Clamp to [0, 1] range — may further reduce the effective delta
|
|
154
|
+
if (newValue < 0) {
|
|
155
|
+
newValue = 0;
|
|
156
|
+
effectiveDelta = newValue - previousValue;
|
|
157
|
+
clamped = true;
|
|
158
|
+
}
|
|
159
|
+
else if (newValue > 1) {
|
|
160
|
+
newValue = 1;
|
|
161
|
+
effectiveDelta = newValue - previousValue;
|
|
162
|
+
clamped = true;
|
|
163
|
+
}
|
|
164
|
+
this.deps.setPersonality(trait, newValue);
|
|
165
|
+
// Update session tracking
|
|
166
|
+
const newSessionTotal = currentSessionTotal + Math.abs(effectiveDelta);
|
|
167
|
+
this.sessionDeltas.set(trait, newSessionTotal);
|
|
168
|
+
// 6. Record in mutation store
|
|
169
|
+
this.deps.mutationStore.record({
|
|
170
|
+
trait,
|
|
171
|
+
previousValue,
|
|
172
|
+
newValue,
|
|
173
|
+
delta: effectiveDelta,
|
|
174
|
+
reasoning,
|
|
175
|
+
timestamp: new Date().toISOString(),
|
|
176
|
+
});
|
|
177
|
+
// 7. Return result
|
|
178
|
+
const output = {
|
|
179
|
+
trait,
|
|
180
|
+
previousValue,
|
|
181
|
+
newValue,
|
|
182
|
+
delta: effectiveDelta,
|
|
183
|
+
clamped,
|
|
184
|
+
sessionTotal: newSessionTotal,
|
|
185
|
+
remainingBudget: maxDeltaPerSession - newSessionTotal,
|
|
186
|
+
};
|
|
187
|
+
return { success: true, output };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=AdaptPersonalityTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptPersonalityTool.js","sourceRoot":"","sources":["../../src/emergent/AdaptPersonalityTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview CreateWorkflowTool — ITool implementation that enables agents
|
|
3
|
+
* to compose multi-step tool workflows at runtime and execute them as a unit.
|
|
4
|
+
*
|
|
5
|
+
* @module @framers/agentos/emergent/CreateWorkflowTool
|
|
6
|
+
*
|
|
7
|
+
* Agents call `create_workflow` to define, run, and list workflows. A workflow
|
|
8
|
+
* is a named sequence of tool invocations with reference resolution:
|
|
9
|
+
* - `$input` — the workflow's input argument
|
|
10
|
+
* - `$prev` — the output of the immediately preceding step
|
|
11
|
+
* - `$steps[N]` — the output of the Nth step (zero-indexed)
|
|
12
|
+
*
|
|
13
|
+
* Constraints:
|
|
14
|
+
* - Maximum step count is enforced via `config.maxSteps`.
|
|
15
|
+
* - Only tools from `config.allowedTools` may be used in steps.
|
|
16
|
+
* - Recursive workflow creation is blocked (`create_workflow` cannot appear in steps).
|
|
17
|
+
* - Each step execution has a 30-second timeout enforced via `Promise.race`.
|
|
18
|
+
*/
|
|
19
|
+
import type { ITool, ToolExecutionResult, ToolExecutionContext, JSONSchemaObject } from '../core/tools/ITool.js';
|
|
20
|
+
/**
|
|
21
|
+
* A single step in a workflow definition.
|
|
22
|
+
*/
|
|
23
|
+
export interface WorkflowStep {
|
|
24
|
+
/** The tool name to invoke for this step. */
|
|
25
|
+
tool: string;
|
|
26
|
+
/** Arguments to pass to the tool (may contain $input, $prev, $steps[N] references). */
|
|
27
|
+
args: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A stored workflow definition with execution metadata.
|
|
31
|
+
*/
|
|
32
|
+
export interface Workflow {
|
|
33
|
+
/** Unique workflow ID. */
|
|
34
|
+
id: string;
|
|
35
|
+
/** Human-readable workflow name. */
|
|
36
|
+
name: string;
|
|
37
|
+
/** Natural language description. */
|
|
38
|
+
description: string;
|
|
39
|
+
/** Ordered list of steps to execute. */
|
|
40
|
+
steps: WorkflowStep[];
|
|
41
|
+
/** ISO-8601 timestamp of creation. */
|
|
42
|
+
createdAt: string;
|
|
43
|
+
/** Number of times this workflow has been run. */
|
|
44
|
+
runCount: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Input arguments accepted by the `create_workflow` tool.
|
|
48
|
+
* Discriminated on the `action` field.
|
|
49
|
+
*/
|
|
50
|
+
export interface CreateWorkflowInput extends Record<string, any> {
|
|
51
|
+
/** The action to perform: create, run, or list. */
|
|
52
|
+
action: 'create' | 'run' | 'list';
|
|
53
|
+
/** Workflow name (required for create). */
|
|
54
|
+
name?: string;
|
|
55
|
+
/** Workflow description (required for create). */
|
|
56
|
+
description?: string;
|
|
57
|
+
/** Workflow steps (required for create). */
|
|
58
|
+
steps?: WorkflowStep[];
|
|
59
|
+
/** Workflow ID (required for run). */
|
|
60
|
+
workflowId?: string;
|
|
61
|
+
/** Input data passed into the workflow when running. */
|
|
62
|
+
input?: unknown;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Dependencies injected into the {@link CreateWorkflowTool} constructor.
|
|
66
|
+
*/
|
|
67
|
+
export interface CreateWorkflowDeps {
|
|
68
|
+
/** Configuration controlling step limits and tool allowlists. */
|
|
69
|
+
config: {
|
|
70
|
+
/** Maximum number of steps allowed in a single workflow. */
|
|
71
|
+
maxSteps: number;
|
|
72
|
+
/** List of tool names that are permitted in workflow steps. */
|
|
73
|
+
allowedTools: string[];
|
|
74
|
+
};
|
|
75
|
+
/** Execute a tool by name with the given arguments. */
|
|
76
|
+
executeTool: (name: string, args: unknown) => Promise<unknown>;
|
|
77
|
+
/** Return the list of all currently available tool names. */
|
|
78
|
+
listTools: () => string[];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* ITool implementation enabling agents to compose, execute, and list
|
|
82
|
+
* multi-step tool workflows at runtime.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* const tool = new CreateWorkflowTool({
|
|
87
|
+
* config: { maxSteps: 10, allowedTools: ['web_search', 'summarize'] },
|
|
88
|
+
* executeTool: (name, args) => orchestrator.execute(name, args),
|
|
89
|
+
* listTools: () => orchestrator.listToolNames(),
|
|
90
|
+
* });
|
|
91
|
+
*
|
|
92
|
+
* // Create a workflow
|
|
93
|
+
* const createResult = await tool.execute({
|
|
94
|
+
* action: 'create',
|
|
95
|
+
* name: 'search-and-summarize',
|
|
96
|
+
* description: 'Search the web and summarize results.',
|
|
97
|
+
* steps: [
|
|
98
|
+
* { tool: 'web_search', args: { query: '$input' } },
|
|
99
|
+
* { tool: 'summarize', args: { text: '$prev' } },
|
|
100
|
+
* ],
|
|
101
|
+
* }, context);
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare class CreateWorkflowTool implements ITool<CreateWorkflowInput> {
|
|
105
|
+
/** @inheritdoc */
|
|
106
|
+
readonly id = "com.framers.emergent.create-workflow";
|
|
107
|
+
/** @inheritdoc */
|
|
108
|
+
readonly name = "create_workflow";
|
|
109
|
+
/** @inheritdoc */
|
|
110
|
+
readonly displayName = "Create Workflow";
|
|
111
|
+
/** @inheritdoc */
|
|
112
|
+
readonly description: string;
|
|
113
|
+
/** @inheritdoc */
|
|
114
|
+
readonly category = "emergent";
|
|
115
|
+
/** @inheritdoc */
|
|
116
|
+
readonly hasSideEffects = true;
|
|
117
|
+
/** @inheritdoc */
|
|
118
|
+
readonly inputSchema: JSONSchemaObject;
|
|
119
|
+
/** Session-scoped workflow storage. */
|
|
120
|
+
private readonly workflows;
|
|
121
|
+
/** Monotonic counter for generating workflow IDs. */
|
|
122
|
+
private nextId;
|
|
123
|
+
/** Injected dependencies. */
|
|
124
|
+
private readonly deps;
|
|
125
|
+
/**
|
|
126
|
+
* Create a new CreateWorkflowTool.
|
|
127
|
+
*
|
|
128
|
+
* @param deps - Injected dependencies including config, tool executor,
|
|
129
|
+
* and tool lister.
|
|
130
|
+
*/
|
|
131
|
+
constructor(deps: CreateWorkflowDeps);
|
|
132
|
+
/**
|
|
133
|
+
* Execute the requested workflow action.
|
|
134
|
+
*
|
|
135
|
+
* @param args - Action type and associated parameters.
|
|
136
|
+
* @param _context - Tool execution context (unused but required by ITool).
|
|
137
|
+
* @returns A {@link ToolExecutionResult} wrapping the action outcome.
|
|
138
|
+
*/
|
|
139
|
+
execute(args: CreateWorkflowInput, _context: ToolExecutionContext): Promise<ToolExecutionResult>;
|
|
140
|
+
/**
|
|
141
|
+
* Create and store a new workflow definition.
|
|
142
|
+
*
|
|
143
|
+
* Validates:
|
|
144
|
+
* - Required fields (name, description, steps) are present
|
|
145
|
+
* - Step count does not exceed maxSteps
|
|
146
|
+
* - No step references `create_workflow` (prevent recursion)
|
|
147
|
+
* - All step tools exist in the available tool list
|
|
148
|
+
*/
|
|
149
|
+
private handleCreate;
|
|
150
|
+
/**
|
|
151
|
+
* Run a stored workflow, executing steps sequentially with reference resolution.
|
|
152
|
+
*
|
|
153
|
+
* Reference resolution:
|
|
154
|
+
* - `$input` — the workflow's input argument
|
|
155
|
+
* - `$prev` — the output of the immediately preceding step
|
|
156
|
+
* - `$steps[N]` — the output of the Nth step (zero-indexed)
|
|
157
|
+
*
|
|
158
|
+
* Each step has a 30-second timeout enforced via Promise.race.
|
|
159
|
+
*/
|
|
160
|
+
private handleRun;
|
|
161
|
+
/**
|
|
162
|
+
* List all stored workflows.
|
|
163
|
+
*/
|
|
164
|
+
private handleList;
|
|
165
|
+
/**
|
|
166
|
+
* Resolve `$input`, `$prev`, and `$steps[N]` references in step arguments.
|
|
167
|
+
*
|
|
168
|
+
* Uses JSON.stringify → string replacement → JSON.parse cycle for simple
|
|
169
|
+
* reference resolution. References appearing as standalone string values
|
|
170
|
+
* are replaced with the actual object; references embedded in larger strings
|
|
171
|
+
* are serialized inline.
|
|
172
|
+
*
|
|
173
|
+
* @param args - The step arguments potentially containing references.
|
|
174
|
+
* @param input - The workflow input value.
|
|
175
|
+
* @param prev - The output of the previous step.
|
|
176
|
+
* @param stepResults - Array of all completed step outputs.
|
|
177
|
+
* @returns Resolved arguments with references replaced by actual values.
|
|
178
|
+
*/
|
|
179
|
+
private resolveReferences;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=CreateWorkflowTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateWorkflowTool.d.ts","sourceRoot":"","sources":["../../src/emergent/CreateWorkflowTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAMhC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC9D,mDAAmD;IACnD,MAAM,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAClC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,MAAM,EAAE;QACN,4DAA4D;QAC5D,QAAQ,EAAE,MAAM,CAAC;QACjB,+DAA+D;QAC/D,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,uDAAuD;IACvD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,6DAA6D;IAC7D,SAAS,EAAE,MAAM,MAAM,EAAE,CAAC;CAC3B;AASD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,kBAAmB,YAAW,KAAK,CAAC,mBAAmB,CAAC;IACnE,kBAAkB;IAClB,QAAQ,CAAC,EAAE,0CAA0C;IAErD,kBAAkB;IAClB,QAAQ,CAAC,IAAI,qBAAqB;IAElC,kBAAkB;IAClB,QAAQ,CAAC,WAAW,qBAAqB;IAEzC,kBAAkB;IAClB,QAAQ,CAAC,WAAW,SAEsC;IAE1D,kBAAkB;IAClB,QAAQ,CAAC,QAAQ,cAAc;IAE/B,kBAAkB;IAClB,QAAQ,CAAC,cAAc,QAAQ;IAE/B,kBAAkB;IAClB,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAqCpC;IAEF,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,qDAAqD;IACrD,OAAO,CAAC,MAAM,CAAK;IAEnB,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAE1C;;;;;OAKG;gBACS,IAAI,EAAE,kBAAkB;IAQpC;;;;;;OAMG;IACG,OAAO,CACX,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IAoB/B;;;;;;;;OAQG;YACW,YAAY;IA4D1B;;;;;;;;;OASG;YACW,SAAS;IAsDvB;;OAEG;YACW,UAAU;IAiBxB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB;CA2B1B"}
|