@soulcraft/sdk 1.7.0 → 2.0.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.
- package/dist/client/create-client-sdk.d.ts +16 -2
- package/dist/client/create-client-sdk.d.ts.map +1 -1
- package/dist/client/create-client-sdk.js +2 -7
- package/dist/client/create-client-sdk.js.map +1 -1
- package/dist/client/index.d.ts +44 -37
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +59 -44
- package/dist/client/index.js.map +1 -1
- package/dist/client/namespace-proxy.d.ts +108 -0
- package/dist/client/namespace-proxy.d.ts.map +1 -0
- package/dist/client/namespace-proxy.js +151 -0
- package/dist/client/namespace-proxy.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/modules/app-context/index.d.ts +15 -15
- package/dist/modules/app-context/index.d.ts.map +1 -1
- package/dist/modules/app-context/index.js +17 -17
- package/dist/modules/app-context/index.js.map +1 -1
- package/dist/namespaces.d.ts +2942 -0
- package/dist/namespaces.d.ts.map +1 -0
- package/dist/namespaces.js +37 -0
- package/dist/namespaces.js.map +1 -0
- package/dist/rpc.d.ts +156 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +26 -0
- package/dist/rpc.js.map +1 -0
- package/dist/server/create-sdk.d.ts.map +1 -1
- package/dist/server/create-sdk.js +3 -13
- package/dist/server/create-sdk.js.map +1 -1
- package/dist/server/handlers/annotations.d.ts +52 -0
- package/dist/server/handlers/annotations.d.ts.map +1 -0
- package/dist/server/handlers/annotations.js +204 -0
- package/dist/server/handlers/annotations.js.map +1 -0
- package/dist/server/handlers/auth.d.ts +53 -0
- package/dist/server/handlers/auth.d.ts.map +1 -0
- package/dist/server/handlers/auth.js +66 -0
- package/dist/server/handlers/auth.js.map +1 -0
- package/dist/server/handlers/certification.d.ts +32 -0
- package/dist/server/handlers/certification.d.ts.map +1 -0
- package/dist/server/handlers/certification.js +253 -0
- package/dist/server/handlers/certification.js.map +1 -0
- package/dist/server/handlers/chat/conversations.d.ts +91 -0
- package/dist/server/handlers/chat/conversations.d.ts.map +1 -0
- package/dist/server/handlers/chat/conversations.js +314 -0
- package/dist/server/handlers/chat/conversations.js.map +1 -0
- package/dist/server/handlers/chat/delegator.d.ts +144 -0
- package/dist/server/handlers/chat/delegator.d.ts.map +1 -0
- package/dist/server/handlers/chat/delegator.js +431 -0
- package/dist/server/handlers/chat/delegator.js.map +1 -0
- package/dist/server/handlers/chat/engine.d.ts +81 -0
- package/dist/server/handlers/chat/engine.d.ts.map +1 -0
- package/dist/server/handlers/chat/engine.js +442 -0
- package/dist/server/handlers/chat/engine.js.map +1 -0
- package/dist/server/handlers/chat/executor.d.ts +65 -0
- package/dist/server/handlers/chat/executor.d.ts.map +1 -0
- package/dist/server/handlers/chat/executor.js +375 -0
- package/dist/server/handlers/chat/executor.js.map +1 -0
- package/dist/server/handlers/chat/index.d.ts +62 -0
- package/dist/server/handlers/chat/index.d.ts.map +1 -0
- package/dist/server/handlers/chat/index.js +182 -0
- package/dist/server/handlers/chat/index.js.map +1 -0
- package/dist/server/handlers/chat/memory.d.ts +91 -0
- package/dist/server/handlers/chat/memory.d.ts.map +1 -0
- package/dist/server/handlers/chat/memory.js +293 -0
- package/dist/server/handlers/chat/memory.js.map +1 -0
- package/dist/server/handlers/chat/models.d.ts +180 -0
- package/dist/server/handlers/chat/models.d.ts.map +1 -0
- package/dist/server/handlers/chat/models.js +304 -0
- package/dist/server/handlers/chat/models.js.map +1 -0
- package/dist/server/handlers/chat/planner.d.ts +116 -0
- package/dist/server/handlers/chat/planner.d.ts.map +1 -0
- package/dist/server/handlers/chat/planner.js +344 -0
- package/dist/server/handlers/chat/planner.js.map +1 -0
- package/dist/server/handlers/chat/types.d.ts +500 -0
- package/dist/server/handlers/chat/types.d.ts.map +1 -0
- package/dist/server/handlers/chat/types.js +11 -0
- package/dist/server/handlers/chat/types.js.map +1 -0
- package/dist/server/handlers/collections.d.ts +67 -0
- package/dist/server/handlers/collections.d.ts.map +1 -0
- package/dist/server/handlers/collections.js +484 -0
- package/dist/server/handlers/collections.js.map +1 -0
- package/dist/server/handlers/commerce.d.ts +106 -0
- package/dist/server/handlers/commerce.d.ts.map +1 -0
- package/dist/server/handlers/commerce.js +62 -0
- package/dist/server/handlers/commerce.js.map +1 -0
- package/dist/server/handlers/config.d.ts +112 -0
- package/dist/server/handlers/config.d.ts.map +1 -0
- package/dist/server/handlers/config.js +122 -0
- package/dist/server/handlers/config.js.map +1 -0
- package/dist/server/handlers/export.d.ts +72 -0
- package/dist/server/handlers/export.d.ts.map +1 -0
- package/dist/server/handlers/export.js +175 -0
- package/dist/server/handlers/export.js.map +1 -0
- package/dist/server/handlers/formats.d.ts +77 -0
- package/dist/server/handlers/formats.d.ts.map +1 -0
- package/dist/server/handlers/formats.js +65 -0
- package/dist/server/handlers/formats.js.map +1 -0
- package/dist/server/handlers/graph.d.ts +31 -0
- package/dist/server/handlers/graph.d.ts.map +1 -0
- package/dist/server/handlers/graph.js +490 -0
- package/dist/server/handlers/graph.js.map +1 -0
- package/dist/server/handlers/import.d.ts +96 -0
- package/dist/server/handlers/import.d.ts.map +1 -0
- package/dist/server/handlers/import.js +108 -0
- package/dist/server/handlers/import.js.map +1 -0
- package/dist/server/handlers/index.d.ts +68 -0
- package/dist/server/handlers/index.d.ts.map +1 -0
- package/dist/server/handlers/index.js +71 -0
- package/dist/server/handlers/index.js.map +1 -0
- package/dist/server/handlers/media.d.ts +76 -0
- package/dist/server/handlers/media.d.ts.map +1 -0
- package/dist/server/handlers/media.js +53 -0
- package/dist/server/handlers/media.js.map +1 -0
- package/dist/server/handlers/project.d.ts +45 -0
- package/dist/server/handlers/project.d.ts.map +1 -0
- package/dist/server/handlers/project.js +181 -0
- package/dist/server/handlers/project.js.map +1 -0
- package/dist/server/handlers/publish.d.ts +102 -0
- package/dist/server/handlers/publish.d.ts.map +1 -0
- package/dist/server/handlers/publish.js +130 -0
- package/dist/server/handlers/publish.js.map +1 -0
- package/dist/server/handlers/pulse.d.ts +39 -0
- package/dist/server/handlers/pulse.d.ts.map +1 -0
- package/dist/server/handlers/pulse.js +78 -0
- package/dist/server/handlers/pulse.js.map +1 -0
- package/dist/server/handlers/realtime.d.ts +55 -0
- package/dist/server/handlers/realtime.d.ts.map +1 -0
- package/dist/server/handlers/realtime.js +49 -0
- package/dist/server/handlers/realtime.js.map +1 -0
- package/dist/server/handlers/search.d.ts +21 -0
- package/dist/server/handlers/search.d.ts.map +1 -0
- package/dist/server/handlers/search.js +237 -0
- package/dist/server/handlers/search.js.map +1 -0
- package/dist/server/handlers/session.d.ts +47 -0
- package/dist/server/handlers/session.d.ts.map +1 -0
- package/dist/server/handlers/session.js +286 -0
- package/dist/server/handlers/session.js.map +1 -0
- package/dist/server/handlers/settings.d.ts +97 -0
- package/dist/server/handlers/settings.d.ts.map +1 -0
- package/dist/server/handlers/settings.js +131 -0
- package/dist/server/handlers/settings.js.map +1 -0
- package/dist/server/handlers/workspace.d.ts +78 -0
- package/dist/server/handlers/workspace.d.ts.map +1 -0
- package/dist/server/handlers/workspace.js +270 -0
- package/dist/server/handlers/workspace.js.map +1 -0
- package/dist/server/hono-router.d.ts +66 -0
- package/dist/server/hono-router.d.ts.map +1 -0
- package/dist/server/hono-router.js +203 -0
- package/dist/server/hono-router.js.map +1 -0
- package/dist/server/index.d.ts +27 -19
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +30 -18
- package/dist/server/index.js.map +1 -1
- package/dist/server/namespace-router.d.ts +204 -0
- package/dist/server/namespace-router.d.ts.map +1 -0
- package/dist/server/namespace-router.js +262 -0
- package/dist/server/namespace-router.js.map +1 -0
- package/dist/transports/http-namespace.d.ts +210 -0
- package/dist/transports/http-namespace.d.ts.map +1 -0
- package/dist/transports/http-namespace.js +514 -0
- package/dist/transports/http-namespace.js.map +1 -0
- package/dist/types.d.ts +59 -65
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -3
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/handlers/chat/executor
|
|
3
|
+
* @description Plan step execution with dependency resolution and auto-escalation.
|
|
4
|
+
*
|
|
5
|
+
* The executor runs approved plans step-by-step:
|
|
6
|
+
* 1. Topologically sorts steps by dependencies
|
|
7
|
+
* 2. Executes each step using the executor model (Haiku)
|
|
8
|
+
* 3. Auto-escalates to the fallback model (Sonnet) on step failure
|
|
9
|
+
* 4. Skips steps whose dependencies failed
|
|
10
|
+
* 5. Tracks cost and reports progress via callbacks
|
|
11
|
+
*
|
|
12
|
+
* Each step is sent to Claude with its description, the plan's goal, and
|
|
13
|
+
* completed step context. Claude uses the product's tool set to execute.
|
|
14
|
+
*/
|
|
15
|
+
import { DEFAULT_MODEL_TIERS, getModelPricing, getModelShortName } from './models.js';
|
|
16
|
+
import { updatePlan, loadPlan } from './planner.js';
|
|
17
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
18
|
+
// Step Execution Prompt
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
const STEP_EXECUTION_PROMPT = `You are an AI assistant executing a specific step in a larger plan.
|
|
21
|
+
|
|
22
|
+
Your task is to execute ONLY the following step:
|
|
23
|
+
{step_description}
|
|
24
|
+
|
|
25
|
+
Context from the plan:
|
|
26
|
+
- Overall goal: {plan_goal}
|
|
27
|
+
- Previous steps completed: {completed_steps}
|
|
28
|
+
|
|
29
|
+
Available tools: {available_tools}
|
|
30
|
+
|
|
31
|
+
Execute this step by using the appropriate tools. Be focused and efficient.
|
|
32
|
+
Only do what this step requires — nothing more, nothing less.
|
|
33
|
+
|
|
34
|
+
After completing the step, briefly summarize what was done.`;
|
|
35
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
// Plan Execution
|
|
37
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Execute an approved plan step-by-step.
|
|
40
|
+
*
|
|
41
|
+
* Steps are topologically sorted by dependencies. Each step is executed with
|
|
42
|
+
* the executor model; on failure, auto-escalates to the fallback model.
|
|
43
|
+
* Steps whose dependencies failed are skipped.
|
|
44
|
+
*
|
|
45
|
+
* @param options - Plan execution configuration.
|
|
46
|
+
* @returns Execution result with per-step details and total cost.
|
|
47
|
+
*/
|
|
48
|
+
export async function executePlan(options) {
|
|
49
|
+
const { plan, planId, brain, aiClient, tools, toolExecutor, toolContext, onProgress, executeModel = DEFAULT_MODEL_TIERS.executor, fallbackModel = DEFAULT_MODEL_TIERS.fallback, } = options;
|
|
50
|
+
if (plan.status !== 'approved') {
|
|
51
|
+
throw new Error(`Plan must be approved before execution. Current status: ${plan.status}`);
|
|
52
|
+
}
|
|
53
|
+
// Mark plan as executing
|
|
54
|
+
await updatePlan(brain, planId, {
|
|
55
|
+
status: 'executing',
|
|
56
|
+
startedAt: new Date().toISOString(),
|
|
57
|
+
});
|
|
58
|
+
const stepResults = [];
|
|
59
|
+
let totalInputTokens = 0;
|
|
60
|
+
let totalOutputTokens = 0;
|
|
61
|
+
let escalationCount = 0;
|
|
62
|
+
const executionOrder = topologicalSort(plan.steps);
|
|
63
|
+
for (let i = 0; i < executionOrder.length; i++) {
|
|
64
|
+
const step = executionOrder[i];
|
|
65
|
+
// Check dependency satisfaction
|
|
66
|
+
const depsFailed = step.dependencies.some(depId => {
|
|
67
|
+
const depResult = stepResults.find(r => r.stepId === depId);
|
|
68
|
+
return !depResult || depResult.status === 'failed';
|
|
69
|
+
});
|
|
70
|
+
if (depsFailed) {
|
|
71
|
+
const skipResult = {
|
|
72
|
+
stepId: step.id,
|
|
73
|
+
status: 'skipped',
|
|
74
|
+
error: 'Dependencies not satisfied',
|
|
75
|
+
model: executeModel,
|
|
76
|
+
tokens: { input: 0, output: 0 },
|
|
77
|
+
escalated: false,
|
|
78
|
+
};
|
|
79
|
+
stepResults.push(skipResult);
|
|
80
|
+
await updateStepStatus(brain, planId, step.id, 'skipped');
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// Progress notification
|
|
84
|
+
if (onProgress) {
|
|
85
|
+
await onProgress({
|
|
86
|
+
type: 'step_start',
|
|
87
|
+
stepId: step.id,
|
|
88
|
+
stepIndex: i,
|
|
89
|
+
totalSteps: executionOrder.length,
|
|
90
|
+
description: step.activeDescription,
|
|
91
|
+
model: getModelShortName(executeModel),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// Execute step
|
|
95
|
+
let result = await executeStep({
|
|
96
|
+
step, plan, aiClient, tools, toolExecutor, toolContext,
|
|
97
|
+
completedSteps: stepResults.filter(r => r.status === 'completed'),
|
|
98
|
+
model: executeModel,
|
|
99
|
+
});
|
|
100
|
+
// Auto-escalate on failure
|
|
101
|
+
if (result.status === 'failed' && fallbackModel !== executeModel) {
|
|
102
|
+
escalationCount++;
|
|
103
|
+
if (onProgress) {
|
|
104
|
+
await onProgress({
|
|
105
|
+
type: 'escalating',
|
|
106
|
+
stepId: step.id,
|
|
107
|
+
stepIndex: i,
|
|
108
|
+
totalSteps: executionOrder.length,
|
|
109
|
+
description: `Retrying with ${getModelShortName(fallbackModel)}`,
|
|
110
|
+
model: getModelShortName(fallbackModel),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
result = await executeStep({
|
|
114
|
+
step, plan, aiClient, tools, toolExecutor, toolContext,
|
|
115
|
+
completedSteps: stepResults.filter(r => r.status === 'completed'),
|
|
116
|
+
model: fallbackModel,
|
|
117
|
+
});
|
|
118
|
+
result.escalated = true;
|
|
119
|
+
}
|
|
120
|
+
stepResults.push(result);
|
|
121
|
+
totalInputTokens += result.tokens.input;
|
|
122
|
+
totalOutputTokens += result.tokens.output;
|
|
123
|
+
// Update step in the stored plan
|
|
124
|
+
await updateStepInPlan(brain, planId, step.id, result);
|
|
125
|
+
// Progress notification
|
|
126
|
+
if (onProgress) {
|
|
127
|
+
await onProgress({
|
|
128
|
+
type: result.status === 'failed' ? 'step_error' : 'step_complete',
|
|
129
|
+
stepId: step.id,
|
|
130
|
+
stepIndex: i,
|
|
131
|
+
totalSteps: executionOrder.length,
|
|
132
|
+
description: step.description,
|
|
133
|
+
...(result.result != null ? { result: result.result } : {}),
|
|
134
|
+
...(result.error != null ? { error: result.error } : {}),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Calculate final status and cost
|
|
139
|
+
const anyError = stepResults.some(r => r.status === 'failed');
|
|
140
|
+
const finalStatus = anyError ? 'failed' : 'completed';
|
|
141
|
+
const actualCost = calculateActualCost(stepResults);
|
|
142
|
+
const planCost = calculatePlanCost(plan);
|
|
143
|
+
await updatePlan(brain, planId, {
|
|
144
|
+
status: finalStatus,
|
|
145
|
+
completedAt: new Date().toISOString(),
|
|
146
|
+
actualCost: {
|
|
147
|
+
inputTokens: totalInputTokens,
|
|
148
|
+
outputTokens: totalOutputTokens,
|
|
149
|
+
totalUSD: actualCost + planCost,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
success: !anyError,
|
|
154
|
+
stepResults: stepResults.map(r => ({
|
|
155
|
+
stepId: r.stepId,
|
|
156
|
+
status: r.status,
|
|
157
|
+
...(r.result != null ? { result: r.result } : {}),
|
|
158
|
+
...(r.error != null ? { error: r.error } : {}),
|
|
159
|
+
model: r.model,
|
|
160
|
+
tokens: r.tokens,
|
|
161
|
+
escalated: r.escalated,
|
|
162
|
+
})),
|
|
163
|
+
totalTokens: { input: totalInputTokens, output: totalOutputTokens },
|
|
164
|
+
actualCost: actualCost + planCost,
|
|
165
|
+
escalationCount,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Resume execution of a partially completed plan.
|
|
170
|
+
*
|
|
171
|
+
* Finds pending/failed steps and re-executes them.
|
|
172
|
+
*
|
|
173
|
+
* @param options - Execution options (without plan — loaded from Brainy).
|
|
174
|
+
* @param planId - Brainy entity ID of the plan.
|
|
175
|
+
* @returns Execution result for the remaining steps.
|
|
176
|
+
*/
|
|
177
|
+
export async function resumePlanExecution(options, planId) {
|
|
178
|
+
const { brain } = options;
|
|
179
|
+
const plan = await loadPlan(brain, planId);
|
|
180
|
+
if (!plan)
|
|
181
|
+
throw new Error(`Plan not found: ${planId}`);
|
|
182
|
+
const pendingSteps = plan.steps.filter(s => s.status === 'pending' || s.status === 'failed');
|
|
183
|
+
if (pendingSteps.length === 0) {
|
|
184
|
+
return {
|
|
185
|
+
success: true,
|
|
186
|
+
stepResults: [],
|
|
187
|
+
totalTokens: { input: 0, output: 0 },
|
|
188
|
+
actualCost: 0,
|
|
189
|
+
escalationCount: 0,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
await updatePlan(brain, planId, { status: 'executing' });
|
|
193
|
+
const modifiedPlan = {
|
|
194
|
+
...plan,
|
|
195
|
+
status: 'approved',
|
|
196
|
+
steps: pendingSteps.map(s => ({ ...s, status: 'pending' })),
|
|
197
|
+
};
|
|
198
|
+
return executePlan({ ...options, plan: modifiedPlan, planId });
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Execute a single plan step using a specific model.
|
|
202
|
+
*
|
|
203
|
+
* @param options - Step execution options.
|
|
204
|
+
* @returns Step result.
|
|
205
|
+
*/
|
|
206
|
+
async function executeStep(options) {
|
|
207
|
+
const { step, plan, aiClient, tools, toolExecutor, toolContext, completedSteps, model } = options;
|
|
208
|
+
const completedSummary = completedSteps.length > 0
|
|
209
|
+
? completedSteps.map(s => `- ${s.stepId}: ${s.result ? 'Completed' : 'Error'}`).join('\n')
|
|
210
|
+
: 'None yet';
|
|
211
|
+
const availableTools = step.tools.length > 0
|
|
212
|
+
? step.tools.join(', ')
|
|
213
|
+
: 'All available tools';
|
|
214
|
+
const prompt = STEP_EXECUTION_PROMPT
|
|
215
|
+
.replace('{step_description}', step.description)
|
|
216
|
+
.replace('{plan_goal}', plan.userMessage)
|
|
217
|
+
.replace('{completed_steps}', completedSummary)
|
|
218
|
+
.replace('{available_tools}', availableTools);
|
|
219
|
+
try {
|
|
220
|
+
const response = await aiClient.create({
|
|
221
|
+
model,
|
|
222
|
+
maxTokens: 8192,
|
|
223
|
+
system: prompt,
|
|
224
|
+
messages: [{ role: 'user', content: `Execute step: ${step.description}` }],
|
|
225
|
+
tools,
|
|
226
|
+
});
|
|
227
|
+
let result = null;
|
|
228
|
+
let textResponse = '';
|
|
229
|
+
const inputTokens = response.usage?.input_tokens || 0;
|
|
230
|
+
const outputTokens = response.usage?.output_tokens || 0;
|
|
231
|
+
for (const block of response.content) {
|
|
232
|
+
if (block.type === 'text' && block.text) {
|
|
233
|
+
textResponse += block.text;
|
|
234
|
+
}
|
|
235
|
+
else if (block.type === 'tool_use' && block.name) {
|
|
236
|
+
try {
|
|
237
|
+
result = await toolExecutor.execute(block.name, (block.input || {}), toolContext);
|
|
238
|
+
}
|
|
239
|
+
catch (toolError) {
|
|
240
|
+
const message = toolError instanceof Error ? toolError.message : String(toolError);
|
|
241
|
+
return {
|
|
242
|
+
stepId: step.id,
|
|
243
|
+
status: 'failed',
|
|
244
|
+
error: `Tool error: ${message}`,
|
|
245
|
+
model,
|
|
246
|
+
tokens: { input: inputTokens, output: outputTokens },
|
|
247
|
+
escalated: false,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
stepId: step.id,
|
|
254
|
+
status: 'completed',
|
|
255
|
+
result: result ?? textResponse,
|
|
256
|
+
model,
|
|
257
|
+
tokens: { input: inputTokens, output: outputTokens },
|
|
258
|
+
escalated: false,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
263
|
+
return {
|
|
264
|
+
stepId: step.id,
|
|
265
|
+
status: 'failed',
|
|
266
|
+
error: message,
|
|
267
|
+
model,
|
|
268
|
+
tokens: { input: 0, output: 0 },
|
|
269
|
+
escalated: false,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
274
|
+
// Internal: Helpers
|
|
275
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
276
|
+
/**
|
|
277
|
+
* Topological sort of plan steps based on dependency edges.
|
|
278
|
+
*
|
|
279
|
+
* Detects circular dependencies and throws.
|
|
280
|
+
*
|
|
281
|
+
* @param steps - Plan steps with dependency references.
|
|
282
|
+
* @returns Steps in execution order.
|
|
283
|
+
*/
|
|
284
|
+
function topologicalSort(steps) {
|
|
285
|
+
const sorted = [];
|
|
286
|
+
const visited = new Set();
|
|
287
|
+
const visiting = new Set();
|
|
288
|
+
function visit(step) {
|
|
289
|
+
if (visited.has(step.id))
|
|
290
|
+
return;
|
|
291
|
+
if (visiting.has(step.id)) {
|
|
292
|
+
throw new Error(`Circular dependency detected at step ${step.id}`);
|
|
293
|
+
}
|
|
294
|
+
visiting.add(step.id);
|
|
295
|
+
for (const depId of step.dependencies) {
|
|
296
|
+
const depStep = steps.find(s => s.id === depId);
|
|
297
|
+
if (depStep)
|
|
298
|
+
visit(depStep);
|
|
299
|
+
}
|
|
300
|
+
visiting.delete(step.id);
|
|
301
|
+
visited.add(step.id);
|
|
302
|
+
sorted.push(step);
|
|
303
|
+
}
|
|
304
|
+
for (const step of steps) {
|
|
305
|
+
visit(step);
|
|
306
|
+
}
|
|
307
|
+
return sorted;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Update a step's status in the stored plan.
|
|
311
|
+
*
|
|
312
|
+
* @param brain - Brainy instance.
|
|
313
|
+
* @param planId - Plan entity ID.
|
|
314
|
+
* @param stepId - Step to update.
|
|
315
|
+
* @param status - New status.
|
|
316
|
+
*/
|
|
317
|
+
async function updateStepStatus(brain, planId, stepId, status) {
|
|
318
|
+
const plan = await loadPlan(brain, planId);
|
|
319
|
+
if (!plan)
|
|
320
|
+
return;
|
|
321
|
+
const updatedSteps = plan.steps.map(s => s.id === stepId
|
|
322
|
+
? { ...s, status: status, ...(status === 'running' ? { startedAt: new Date().toISOString() } : {}) }
|
|
323
|
+
: s);
|
|
324
|
+
await updatePlan(brain, planId, { steps: updatedSteps });
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Update a step with its execution result.
|
|
328
|
+
*
|
|
329
|
+
* @param brain - Brainy instance.
|
|
330
|
+
* @param planId - Plan entity ID.
|
|
331
|
+
* @param stepId - Step to update.
|
|
332
|
+
* @param result - Step execution result.
|
|
333
|
+
*/
|
|
334
|
+
async function updateStepInPlan(brain, planId, stepId, result) {
|
|
335
|
+
const plan = await loadPlan(brain, planId);
|
|
336
|
+
if (!plan)
|
|
337
|
+
return;
|
|
338
|
+
const updatedSteps = plan.steps.map(s => s.id === stepId
|
|
339
|
+
? {
|
|
340
|
+
...s,
|
|
341
|
+
status: result.status,
|
|
342
|
+
...(result.result != null ? { result: result.result } : {}),
|
|
343
|
+
...(result.error != null ? { error: result.error } : {}),
|
|
344
|
+
completedAt: new Date().toISOString(),
|
|
345
|
+
}
|
|
346
|
+
: s);
|
|
347
|
+
await updatePlan(brain, planId, { steps: updatedSteps });
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Calculate actual execution cost from step results.
|
|
351
|
+
*
|
|
352
|
+
* @param stepResults - Completed step results.
|
|
353
|
+
* @returns Total cost in USD.
|
|
354
|
+
*/
|
|
355
|
+
function calculateActualCost(stepResults) {
|
|
356
|
+
let cost = 0;
|
|
357
|
+
for (const result of stepResults) {
|
|
358
|
+
const pricing = getModelPricing(result.model);
|
|
359
|
+
cost += (result.tokens.input / 1_000_000) * pricing.input;
|
|
360
|
+
cost += (result.tokens.output / 1_000_000) * pricing.output;
|
|
361
|
+
}
|
|
362
|
+
return cost;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Calculate the planning phase cost from the plan's estimated token usage.
|
|
366
|
+
*
|
|
367
|
+
* @param plan - The executed plan.
|
|
368
|
+
* @returns Planning phase cost in USD.
|
|
369
|
+
*/
|
|
370
|
+
function calculatePlanCost(plan) {
|
|
371
|
+
const pricing = getModelPricing(plan.planModel);
|
|
372
|
+
// estimatedCost.planTokens is the sum of input + output
|
|
373
|
+
return (plan.estimatedCost.planTokens / 1_000_000) * pricing.input;
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../src/server/handlers/chat/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/handlers/chat
|
|
3
|
+
* @description Chat namespace handler factory and barrel exports.
|
|
4
|
+
*
|
|
5
|
+
* Creates the `chat` namespace handler that implements {@link ChatNamespace}
|
|
6
|
+
* from `namespaces.ts`. The handler provides:
|
|
7
|
+
*
|
|
8
|
+
* - **`send`** — Non-streaming message with full response
|
|
9
|
+
* - **`sendStreaming`** — Streaming message with agentic tool-use loop
|
|
10
|
+
* - **`listConversations`** — List all conversations for the current user
|
|
11
|
+
* - **`getConversation`** — Get full conversation with message history
|
|
12
|
+
* - **`createConversation`** — Create a new conversation
|
|
13
|
+
* - **`deleteConversation`** — Soft-delete a conversation
|
|
14
|
+
* - **`renameConversation`** — Rename a conversation
|
|
15
|
+
* - **`getExpertise`** — Get the user's AI-learned expertise profile
|
|
16
|
+
* - **`getContext`** — Get the chat engine's context for the current message
|
|
17
|
+
*
|
|
18
|
+
* Products inject their dependencies via {@link ChatHandlerOptions}:
|
|
19
|
+
* - **Required**: `aiClient`, `tools`, `toolExecutor`
|
|
20
|
+
* - **Optional**: `systemPromptBuilder`, `modelSelector`, `billing`, `events`
|
|
21
|
+
*
|
|
22
|
+
* @example Workshop setup
|
|
23
|
+
* ```typescript
|
|
24
|
+
* import { createChatHandler } from '@soulcraft/sdk/server'
|
|
25
|
+
*
|
|
26
|
+
* const chatHandler = createChatHandler({
|
|
27
|
+
* aiClient: workshopAIClient,
|
|
28
|
+
* tools: workshopToolDefinitions,
|
|
29
|
+
* toolExecutor: workshopToolExecutor,
|
|
30
|
+
* systemPromptBuilder: workshopPromptBuilder,
|
|
31
|
+
* billing: workshopBilling,
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
import type { NamespaceProvider } from '../../namespace-router.js';
|
|
36
|
+
import type { ChatHandlerOptions } from './types.js';
|
|
37
|
+
/**
|
|
38
|
+
* Creates the `chat` namespace handler.
|
|
39
|
+
*
|
|
40
|
+
* The returned provider implements all methods defined in {@link ChatNamespace}.
|
|
41
|
+
* The handler is stateless — all state lives in Brainy entities (conversations,
|
|
42
|
+
* messages, expertise profiles, insights).
|
|
43
|
+
*
|
|
44
|
+
* @param options - Chat handler dependencies. `aiClient`, `tools`, and
|
|
45
|
+
* `toolExecutor` are required. All others have sensible defaults.
|
|
46
|
+
* @returns A {@link NamespaceProvider} implementing {@link ChatNamespace}.
|
|
47
|
+
*/
|
|
48
|
+
export declare function createChatHandler(options: ChatHandlerOptions): NamespaceProvider;
|
|
49
|
+
export type { ChatHandlerOptions, ChatAIClient, AnthropicStreamEvent, ToolDefinition, ToolExecutor, ToolExecutionContext, SystemPromptBuilder, SystemPromptContext, ChatBillingCheck, ChatEventEmitter, ModelSelector, TieredRouting, RetrievedMemory, UserExpertiseProfile, RoutingDecisionType, RoutingDecision, DelegatedTask, TriageResult, TaskExecutionResult, DelegationResult, AIPlan, PlanStep, StepProgress, PlanExecutionResult, } from './types.js';
|
|
50
|
+
export { analyzeComplexity, calculateComplexityScore, selectTieredRouting, createDefaultModelSelector, estimateCost, formatCost, getModelPricing, getModelShortName, DEFAULT_MODELS, DEFAULT_MODEL_TIERS, } from './models.js';
|
|
51
|
+
export type { ModelConfig, ComplexitySignals, CostEstimate } from './models.js';
|
|
52
|
+
export { triageMessage, executeTask, synthesizeResults, delegateAndExecute } from './delegator.js';
|
|
53
|
+
export type { TriageOptions, ExecuteTaskOptions, SynthesizeOptions, DelegateOptions } from './delegator.js';
|
|
54
|
+
export { generatePlan, storePlan, loadPlan, updatePlan, approvePlan, cancelPlan, getPendingPlans, addPlanStep, removePlanStep } from './planner.js';
|
|
55
|
+
export type { GeneratePlanOptions } from './planner.js';
|
|
56
|
+
export { executePlan, resumePlanExecution } from './executor.js';
|
|
57
|
+
export type { ExecutePlanOptions, ProgressCallback } from './executor.js';
|
|
58
|
+
export { createConversation, listConversations, getConversation, deleteConversation, renameConversation, storeMessage, loadConversationHistory, autoTitleConversation } from './conversations.js';
|
|
59
|
+
export { retrieveRelevantMemory, learnFromConversation, loadUserExpertiseProfile, updateUserExpertiseProfile, generateExpertisePromptAdditions } from './memory.js';
|
|
60
|
+
export { streamMessage, sendMessage } from './engine.js';
|
|
61
|
+
export type { StreamMessageOptions } from './engine.js';
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/chat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,YAAY,CAAA;AAmBnB;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA6KhF;AAOD,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,YAAY,EACZ,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,mBAAmB,GACpB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAClG,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG3G,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACnJ,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAChE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGzE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAGjM,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAA;AAGnK,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/handlers/chat
|
|
3
|
+
* @description Chat namespace handler factory and barrel exports.
|
|
4
|
+
*
|
|
5
|
+
* Creates the `chat` namespace handler that implements {@link ChatNamespace}
|
|
6
|
+
* from `namespaces.ts`. The handler provides:
|
|
7
|
+
*
|
|
8
|
+
* - **`send`** — Non-streaming message with full response
|
|
9
|
+
* - **`sendStreaming`** — Streaming message with agentic tool-use loop
|
|
10
|
+
* - **`listConversations`** — List all conversations for the current user
|
|
11
|
+
* - **`getConversation`** — Get full conversation with message history
|
|
12
|
+
* - **`createConversation`** — Create a new conversation
|
|
13
|
+
* - **`deleteConversation`** — Soft-delete a conversation
|
|
14
|
+
* - **`renameConversation`** — Rename a conversation
|
|
15
|
+
* - **`getExpertise`** — Get the user's AI-learned expertise profile
|
|
16
|
+
* - **`getContext`** — Get the chat engine's context for the current message
|
|
17
|
+
*
|
|
18
|
+
* Products inject their dependencies via {@link ChatHandlerOptions}:
|
|
19
|
+
* - **Required**: `aiClient`, `tools`, `toolExecutor`
|
|
20
|
+
* - **Optional**: `systemPromptBuilder`, `modelSelector`, `billing`, `events`
|
|
21
|
+
*
|
|
22
|
+
* @example Workshop setup
|
|
23
|
+
* ```typescript
|
|
24
|
+
* import { createChatHandler } from '@soulcraft/sdk/server'
|
|
25
|
+
*
|
|
26
|
+
* const chatHandler = createChatHandler({
|
|
27
|
+
* aiClient: workshopAIClient,
|
|
28
|
+
* tools: workshopToolDefinitions,
|
|
29
|
+
* toolExecutor: workshopToolExecutor,
|
|
30
|
+
* systemPromptBuilder: workshopPromptBuilder,
|
|
31
|
+
* billing: workshopBilling,
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
import { streamMessage, sendMessage } from './engine.js';
|
|
36
|
+
import { createConversation as createConv, listConversations as listConvs, getConversation as getConv, deleteConversation as deleteConv, renameConversation as renameConv, } from './conversations.js';
|
|
37
|
+
import { retrieveRelevantMemory, loadUserExpertiseProfile, } from './memory.js';
|
|
38
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
39
|
+
// Handler Factory
|
|
40
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Creates the `chat` namespace handler.
|
|
43
|
+
*
|
|
44
|
+
* The returned provider implements all methods defined in {@link ChatNamespace}.
|
|
45
|
+
* The handler is stateless — all state lives in Brainy entities (conversations,
|
|
46
|
+
* messages, expertise profiles, insights).
|
|
47
|
+
*
|
|
48
|
+
* @param options - Chat handler dependencies. `aiClient`, `tools`, and
|
|
49
|
+
* `toolExecutor` are required. All others have sensible defaults.
|
|
50
|
+
* @returns A {@link NamespaceProvider} implementing {@link ChatNamespace}.
|
|
51
|
+
*/
|
|
52
|
+
export function createChatHandler(options) {
|
|
53
|
+
return {
|
|
54
|
+
/**
|
|
55
|
+
* Send a message and receive the full response (non-streaming).
|
|
56
|
+
*
|
|
57
|
+
* @param message - The user's message text.
|
|
58
|
+
* @param sendOptions - Conversation and model options.
|
|
59
|
+
* @param ctx - Handler context with brain, user, workspace.
|
|
60
|
+
* @returns Response text, conversation ID, and token usage.
|
|
61
|
+
*/
|
|
62
|
+
async send(message, sendOptions, ctx) {
|
|
63
|
+
return sendMessage({
|
|
64
|
+
message,
|
|
65
|
+
...(sendOptions?.conversationId != null ? { conversationId: sendOptions.conversationId } : {}),
|
|
66
|
+
...(sendOptions?.model != null ? { model: sendOptions.model } : {}),
|
|
67
|
+
...(sendOptions != null ? { productContext: sendOptions } : {}),
|
|
68
|
+
}, ctx, options);
|
|
69
|
+
},
|
|
70
|
+
/**
|
|
71
|
+
* Send a message and stream the response as chunks.
|
|
72
|
+
*
|
|
73
|
+
* Returns an AsyncIterable that the transport layer delivers as SSE,
|
|
74
|
+
* WebSocket frames, or PostMessage events.
|
|
75
|
+
*
|
|
76
|
+
* @param message - The user's message text.
|
|
77
|
+
* @param streamOptions - Conversation and model options.
|
|
78
|
+
* @param ctx - Handler context.
|
|
79
|
+
* @returns AsyncIterable of ChatStreamChunk frames.
|
|
80
|
+
*/
|
|
81
|
+
sendStreaming(message, streamOptions, ctx) {
|
|
82
|
+
return streamMessage({
|
|
83
|
+
message,
|
|
84
|
+
...(streamOptions?.conversationId != null ? { conversationId: streamOptions.conversationId } : {}),
|
|
85
|
+
...(streamOptions?.model != null ? { model: streamOptions.model } : {}),
|
|
86
|
+
...(streamOptions?.planModeEnabled != null ? { planModeEnabled: streamOptions.planModeEnabled } : {}),
|
|
87
|
+
...(streamOptions != null ? { productContext: streamOptions } : {}),
|
|
88
|
+
}, ctx, options);
|
|
89
|
+
},
|
|
90
|
+
/**
|
|
91
|
+
* List all conversations for the current user.
|
|
92
|
+
*
|
|
93
|
+
* @param ctx - Handler context.
|
|
94
|
+
* @returns Array of conversation summaries.
|
|
95
|
+
*/
|
|
96
|
+
async listConversations(ctx) {
|
|
97
|
+
const userId = ctx.user?.id ?? 'anonymous';
|
|
98
|
+
return listConvs(ctx.brain, userId);
|
|
99
|
+
},
|
|
100
|
+
/**
|
|
101
|
+
* Get a conversation with its full message history.
|
|
102
|
+
*
|
|
103
|
+
* @param conversationId - Conversation ID.
|
|
104
|
+
* @param ctx - Handler context.
|
|
105
|
+
* @returns Full conversation or null.
|
|
106
|
+
*/
|
|
107
|
+
async getConversation(conversationId, ctx) {
|
|
108
|
+
return getConv(ctx.brain, conversationId);
|
|
109
|
+
},
|
|
110
|
+
/**
|
|
111
|
+
* Create a new conversation.
|
|
112
|
+
*
|
|
113
|
+
* @param createOptions - Optional title.
|
|
114
|
+
* @param ctx - Handler context.
|
|
115
|
+
* @returns The new conversation's ID.
|
|
116
|
+
*/
|
|
117
|
+
async createConversation(createOptions, ctx) {
|
|
118
|
+
const userId = ctx.user?.id ?? 'anonymous';
|
|
119
|
+
return createConv(ctx.brain, userId, createOptions?.title);
|
|
120
|
+
},
|
|
121
|
+
/**
|
|
122
|
+
* Soft-delete a conversation.
|
|
123
|
+
*
|
|
124
|
+
* @param conversationId - Conversation to delete.
|
|
125
|
+
* @param ctx - Handler context.
|
|
126
|
+
*/
|
|
127
|
+
async deleteConversation(conversationId, ctx) {
|
|
128
|
+
await deleteConv(ctx.brain, conversationId);
|
|
129
|
+
},
|
|
130
|
+
/**
|
|
131
|
+
* Rename a conversation.
|
|
132
|
+
*
|
|
133
|
+
* @param conversationId - Conversation to rename.
|
|
134
|
+
* @param title - New title.
|
|
135
|
+
* @param ctx - Handler context.
|
|
136
|
+
*/
|
|
137
|
+
async renameConversation(conversationId, title, ctx) {
|
|
138
|
+
await renameConv(ctx.brain, conversationId, title);
|
|
139
|
+
},
|
|
140
|
+
/**
|
|
141
|
+
* Get the user's AI-learned expertise profile.
|
|
142
|
+
*
|
|
143
|
+
* @param ctx - Handler context.
|
|
144
|
+
* @returns The expertise profile.
|
|
145
|
+
*/
|
|
146
|
+
async getExpertise(ctx) {
|
|
147
|
+
return loadUserExpertiseProfile(ctx.brain);
|
|
148
|
+
},
|
|
149
|
+
/**
|
|
150
|
+
* Get the chat engine's current context for a message.
|
|
151
|
+
*
|
|
152
|
+
* Returns the retrieved memory and expertise profile that would be used
|
|
153
|
+
* to build the system prompt. Useful for transparency UIs (Glass Box).
|
|
154
|
+
*
|
|
155
|
+
* @param message - The message to analyze context for.
|
|
156
|
+
* @param ctx - Handler context.
|
|
157
|
+
* @returns Memory and expertise context.
|
|
158
|
+
*/
|
|
159
|
+
async getContext(message, ctx) {
|
|
160
|
+
const [memory, expertise] = await Promise.all([
|
|
161
|
+
retrieveRelevantMemory(ctx.brain, message),
|
|
162
|
+
loadUserExpertiseProfile(ctx.brain),
|
|
163
|
+
]);
|
|
164
|
+
return { memory, expertise };
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// Model routing
|
|
169
|
+
export { analyzeComplexity, calculateComplexityScore, selectTieredRouting, createDefaultModelSelector, estimateCost, formatCost, getModelPricing, getModelShortName, DEFAULT_MODELS, DEFAULT_MODEL_TIERS, } from './models.js';
|
|
170
|
+
// Delegator
|
|
171
|
+
export { triageMessage, executeTask, synthesizeResults, delegateAndExecute } from './delegator.js';
|
|
172
|
+
// Planner
|
|
173
|
+
export { generatePlan, storePlan, loadPlan, updatePlan, approvePlan, cancelPlan, getPendingPlans, addPlanStep, removePlanStep } from './planner.js';
|
|
174
|
+
// Executor
|
|
175
|
+
export { executePlan, resumePlanExecution } from './executor.js';
|
|
176
|
+
// Conversations
|
|
177
|
+
export { createConversation, listConversations, getConversation, deleteConversation, renameConversation, storeMessage, loadConversationHistory, autoTitleConversation } from './conversations.js';
|
|
178
|
+
// Memory
|
|
179
|
+
export { retrieveRelevantMemory, learnFromConversation, loadUserExpertiseProfile, updateUserExpertiseProfile, generateExpertisePromptAdditions } from './memory.js';
|
|
180
|
+
// Engine
|
|
181
|
+
export { streamMessage, sendMessage } from './engine.js';
|
|
182
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/handlers/chat/index.ts"],"names":[],"mappings":"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"}
|