@tleblancureta/proto 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.
- package/core-web/src/ProtoApp.tsx +163 -0
- package/core-web/src/components/Shell.tsx +276 -0
- package/core-web/src/components/shell/EmptyState.tsx +33 -0
- package/core-web/src/components/shell/FocusView.tsx +55 -0
- package/core-web/src/components/shell/Toolbar.tsx +233 -0
- package/core-web/src/components/shell/persistence.ts +20 -0
- package/core-web/src/components/shell/types.ts +14 -0
- package/core-web/src/components/ui/avatar.tsx +18 -0
- package/core-web/src/components/ui/badge.tsx +28 -0
- package/core-web/src/components/ui/button.tsx +40 -0
- package/core-web/src/components/ui/card.tsx +32 -0
- package/core-web/src/components/ui/inline-edit.tsx +120 -0
- package/core-web/src/components/ui/input.tsx +18 -0
- package/core-web/src/components/ui/scroll-area.tsx +12 -0
- package/core-web/src/components/ui/separator.tsx +23 -0
- package/core-web/src/components/ui/shell-dialog.tsx +79 -0
- package/core-web/src/components/ui/skeleton.tsx +9 -0
- package/core-web/src/components/ui/textarea.tsx +17 -0
- package/core-web/src/components/widgets/agent/Generative.tsx +74 -0
- package/core-web/src/components/widgets/agent/Primitives.tsx +225 -0
- package/core-web/src/components/widgets/agent/actions.ts +52 -0
- package/core-web/src/hooks/useAuth.ts +80 -0
- package/core-web/src/hooks/useData.ts +44 -0
- package/core-web/src/hooks/useMountEffect.ts +10 -0
- package/core-web/src/hooks/useTheme.ts +37 -0
- package/core-web/src/index.ts +52 -0
- package/core-web/src/lib/api.ts +231 -0
- package/core-web/src/lib/config.ts +14 -0
- package/core-web/src/lib/define-widget.ts +71 -0
- package/core-web/src/lib/drag.ts +45 -0
- package/core-web/src/lib/supabase.ts +6 -0
- package/core-web/src/lib/utils.ts +6 -0
- package/core-web/src/lib/widgetCache.ts +29 -0
- package/core-web/src/vite-env.d.ts +1 -0
- package/dist/core-mcp/src/app.d.ts +40 -0
- package/dist/core-mcp/src/app.d.ts.map +1 -0
- package/dist/core-mcp/src/app.js +141 -0
- package/dist/core-mcp/src/app.js.map +1 -0
- package/dist/core-mcp/src/define-tool.d.ts +70 -0
- package/dist/core-mcp/src/define-tool.d.ts.map +1 -0
- package/dist/core-mcp/src/define-tool.js +38 -0
- package/dist/core-mcp/src/define-tool.js.map +1 -0
- package/dist/core-mcp/src/entity-tools.d.ts +27 -0
- package/dist/core-mcp/src/entity-tools.d.ts.map +1 -0
- package/dist/core-mcp/src/entity-tools.js +99 -0
- package/dist/core-mcp/src/entity-tools.js.map +1 -0
- package/dist/core-mcp/src/index.d.ts +36 -0
- package/dist/core-mcp/src/index.d.ts.map +1 -0
- package/dist/core-mcp/src/index.js +116 -0
- package/dist/core-mcp/src/index.js.map +1 -0
- package/dist/core-mcp/src/supabase.d.ts +7 -0
- package/dist/core-mcp/src/supabase.d.ts.map +1 -0
- package/dist/core-mcp/src/supabase.js +18 -0
- package/dist/core-mcp/src/supabase.js.map +1 -0
- package/dist/core-mcp/src/tools/_helpers.d.ts +44 -0
- package/dist/core-mcp/src/tools/_helpers.d.ts.map +1 -0
- package/dist/core-mcp/src/tools/_helpers.js +23 -0
- package/dist/core-mcp/src/tools/_helpers.js.map +1 -0
- package/dist/core-mcp/src/tools/ui.d.ts +9 -0
- package/dist/core-mcp/src/tools/ui.d.ts.map +1 -0
- package/dist/core-mcp/src/tools/ui.js +100 -0
- package/dist/core-mcp/src/tools/ui.js.map +1 -0
- package/dist/core-mcp/src/workflow-tools.d.ts +41 -0
- package/dist/core-mcp/src/workflow-tools.d.ts.map +1 -0
- package/dist/core-mcp/src/workflow-tools.js +382 -0
- package/dist/core-mcp/src/workflow-tools.js.map +1 -0
- package/dist/core-shared/src/define-entity.d.ts +73 -0
- package/dist/core-shared/src/define-entity.d.ts.map +1 -0
- package/dist/core-shared/src/define-entity.js +47 -0
- package/dist/core-shared/src/define-entity.js.map +1 -0
- package/dist/core-shared/src/define-workflow.d.ts +111 -0
- package/dist/core-shared/src/define-workflow.d.ts.map +1 -0
- package/dist/core-shared/src/define-workflow.js +92 -0
- package/dist/core-shared/src/define-workflow.js.map +1 -0
- package/dist/core-shared/src/index.d.ts +5 -0
- package/dist/core-shared/src/index.d.ts.map +1 -0
- package/dist/core-shared/src/index.js +7 -0
- package/dist/core-shared/src/index.js.map +1 -0
- package/dist/core-shared/src/scheduling.d.ts +69 -0
- package/dist/core-shared/src/scheduling.d.ts.map +1 -0
- package/dist/core-shared/src/scheduling.js +39 -0
- package/dist/core-shared/src/scheduling.js.map +1 -0
- package/dist/core-shared/src/schemas.d.ts +51 -0
- package/dist/core-shared/src/schemas.d.ts.map +1 -0
- package/dist/core-shared/src/schemas.js +18 -0
- package/dist/core-shared/src/schemas.js.map +1 -0
- package/dist/core-web/src/ProtoApp.d.ts +19 -0
- package/dist/core-web/src/ProtoApp.d.ts.map +1 -0
- package/dist/core-web/src/ProtoApp.js +92 -0
- package/dist/core-web/src/ProtoApp.js.map +1 -0
- package/dist/core-web/src/components/Shell.d.ts +46 -0
- package/dist/core-web/src/components/Shell.d.ts.map +1 -0
- package/dist/core-web/src/components/Shell.js +104 -0
- package/dist/core-web/src/components/Shell.js.map +1 -0
- package/dist/core-web/src/components/shell/EmptyState.d.ts +13 -0
- package/dist/core-web/src/components/shell/EmptyState.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/EmptyState.js +7 -0
- package/dist/core-web/src/components/shell/EmptyState.js.map +1 -0
- package/dist/core-web/src/components/shell/FocusView.d.ts +16 -0
- package/dist/core-web/src/components/shell/FocusView.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/FocusView.js +12 -0
- package/dist/core-web/src/components/shell/FocusView.js.map +1 -0
- package/dist/core-web/src/components/shell/Toolbar.d.ts +35 -0
- package/dist/core-web/src/components/shell/Toolbar.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/Toolbar.js +42 -0
- package/dist/core-web/src/components/shell/Toolbar.js.map +1 -0
- package/dist/core-web/src/components/shell/persistence.d.ts +8 -0
- package/dist/core-web/src/components/shell/persistence.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/persistence.js +20 -0
- package/dist/core-web/src/components/shell/persistence.js.map +1 -0
- package/dist/core-web/src/components/shell/types.d.ts +13 -0
- package/dist/core-web/src/components/shell/types.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/types.js +2 -0
- package/dist/core-web/src/components/shell/types.js.map +1 -0
- package/dist/core-web/src/components/ui/avatar.d.ts +5 -0
- package/dist/core-web/src/components/ui/avatar.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/avatar.js +9 -0
- package/dist/core-web/src/components/ui/avatar.js.map +1 -0
- package/dist/core-web/src/components/ui/badge.d.ts +13 -0
- package/dist/core-web/src/components/ui/badge.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/badge.js +13 -0
- package/dist/core-web/src/components/ui/badge.js.map +1 -0
- package/dist/core-web/src/components/ui/button.d.ts +22 -0
- package/dist/core-web/src/components/ui/button.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/button.js +21 -0
- package/dist/core-web/src/components/ui/button.js.map +1 -0
- package/dist/core-web/src/components/ui/card.d.ts +7 -0
- package/dist/core-web/src/components/ui/card.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/card.js +13 -0
- package/dist/core-web/src/components/ui/card.js.map +1 -0
- package/dist/core-web/src/components/ui/inline-edit.d.ts +20 -0
- package/dist/core-web/src/components/ui/inline-edit.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/inline-edit.js +63 -0
- package/dist/core-web/src/components/ui/inline-edit.js.map +1 -0
- package/dist/core-web/src/components/ui/input.d.ts +4 -0
- package/dist/core-web/src/components/ui/input.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/input.js +7 -0
- package/dist/core-web/src/components/ui/input.js.map +1 -0
- package/dist/core-web/src/components/ui/scroll-area.d.ts +4 -0
- package/dist/core-web/src/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/scroll-area.js +7 -0
- package/dist/core-web/src/components/ui/scroll-area.js.map +1 -0
- package/dist/core-web/src/components/ui/separator.d.ts +7 -0
- package/dist/core-web/src/components/ui/separator.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/separator.js +7 -0
- package/dist/core-web/src/components/ui/separator.js.map +1 -0
- package/dist/core-web/src/components/ui/shell-dialog.d.ts +16 -0
- package/dist/core-web/src/components/ui/shell-dialog.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/shell-dialog.js +36 -0
- package/dist/core-web/src/components/ui/shell-dialog.js.map +1 -0
- package/dist/core-web/src/components/ui/skeleton.d.ts +3 -0
- package/dist/core-web/src/components/ui/skeleton.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/skeleton.js +7 -0
- package/dist/core-web/src/components/ui/skeleton.js.map +1 -0
- package/dist/core-web/src/components/ui/textarea.d.ts +4 -0
- package/dist/core-web/src/components/ui/textarea.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/textarea.js +7 -0
- package/dist/core-web/src/components/ui/textarea.js.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Generative.d.ts +13 -0
- package/dist/core-web/src/components/widgets/agent/Generative.d.ts.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Generative.js +42 -0
- package/dist/core-web/src/components/widgets/agent/Generative.js.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.d.ts +79 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.d.ts.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.js +116 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.js.map +1 -0
- package/dist/core-web/src/components/widgets/agent/actions.d.ts +3 -0
- package/dist/core-web/src/components/widgets/agent/actions.d.ts.map +1 -0
- package/dist/core-web/src/components/widgets/agent/actions.js +33 -0
- package/dist/core-web/src/components/widgets/agent/actions.js.map +1 -0
- package/dist/core-web/src/hooks/useAuth.d.ts +25 -0
- package/dist/core-web/src/hooks/useAuth.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useAuth.js +53 -0
- package/dist/core-web/src/hooks/useAuth.js.map +1 -0
- package/dist/core-web/src/hooks/useData.d.ts +10 -0
- package/dist/core-web/src/hooks/useData.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useData.js +37 -0
- package/dist/core-web/src/hooks/useData.js.map +1 -0
- package/dist/core-web/src/hooks/useMountEffect.d.ts +6 -0
- package/dist/core-web/src/hooks/useMountEffect.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useMountEffect.js +10 -0
- package/dist/core-web/src/hooks/useMountEffect.js.map +1 -0
- package/dist/core-web/src/hooks/useTheme.d.ts +6 -0
- package/dist/core-web/src/hooks/useTheme.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useTheme.js +31 -0
- package/dist/core-web/src/hooks/useTheme.js.map +1 -0
- package/dist/core-web/src/index.d.ts +33 -0
- package/dist/core-web/src/index.d.ts.map +1 -0
- package/dist/core-web/src/index.js +38 -0
- package/dist/core-web/src/index.js.map +1 -0
- package/dist/core-web/src/lib/api.d.ts +60 -0
- package/dist/core-web/src/lib/api.d.ts.map +1 -0
- package/dist/core-web/src/lib/api.js +204 -0
- package/dist/core-web/src/lib/api.js.map +1 -0
- package/dist/core-web/src/lib/config.d.ts +10 -0
- package/dist/core-web/src/lib/config.d.ts.map +1 -0
- package/dist/core-web/src/lib/config.js +10 -0
- package/dist/core-web/src/lib/config.js.map +1 -0
- package/dist/core-web/src/lib/define-widget.d.ts +52 -0
- package/dist/core-web/src/lib/define-widget.d.ts.map +1 -0
- package/dist/core-web/src/lib/define-widget.js +14 -0
- package/dist/core-web/src/lib/define-widget.js.map +1 -0
- package/dist/core-web/src/lib/drag.d.ts +20 -0
- package/dist/core-web/src/lib/drag.d.ts.map +1 -0
- package/dist/core-web/src/lib/drag.js +33 -0
- package/dist/core-web/src/lib/drag.js.map +1 -0
- package/dist/core-web/src/lib/supabase.d.ts +2 -0
- package/dist/core-web/src/lib/supabase.d.ts.map +1 -0
- package/dist/core-web/src/lib/supabase.js +5 -0
- package/dist/core-web/src/lib/supabase.js.map +1 -0
- package/dist/core-web/src/lib/utils.d.ts +3 -0
- package/dist/core-web/src/lib/utils.d.ts.map +1 -0
- package/dist/core-web/src/lib/utils.js +6 -0
- package/dist/core-web/src/lib/utils.js.map +1 -0
- package/dist/core-web/src/lib/widgetCache.d.ts +18 -0
- package/dist/core-web/src/lib/widgetCache.d.ts.map +1 -0
- package/dist/core-web/src/lib/widgetCache.js +28 -0
- package/dist/core-web/src/lib/widgetCache.js.map +1 -0
- package/dist/mcp.d.ts +2 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +2 -0
- package/dist/mcp.js.map +1 -0
- package/dist/shared.d.ts +2 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +2 -0
- package/dist/shared.js.map +1 -0
- package/dist/web.d.ts +2 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +2 -0
- package/dist/web.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* buildWorkflowTools — generates MCP tools from a WorkflowDefinition.
|
|
3
|
+
*
|
|
4
|
+
* Emits 9 tools per workflow (names are configurable via `toolNames`):
|
|
5
|
+
*
|
|
6
|
+
* get_item_state, list_items_by_phase, advance_step,
|
|
7
|
+
* block_item, unblock_item, hold_item, resume_item, cancel_item,
|
|
8
|
+
* request_human_approval
|
|
9
|
+
*
|
|
10
|
+
* Defaults keep the tool names stable so existing skills keep working. If an
|
|
11
|
+
* app has multiple workflows, set `toolNames` on each to avoid collisions.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { workflowPhaseNames, workflowPhaseSteps, workflowPhaseIndex, workflowIsValidStep, workflowRequiresHumanApproval, workflowExecution, } from '../../core-shared/src/index.js';
|
|
15
|
+
import { defineTool, registerTools } from './define-tool.js';
|
|
16
|
+
import { getSupabase } from './supabase.js';
|
|
17
|
+
import { agent, agentErr } from './tools/_helpers.js';
|
|
18
|
+
const DEFAULT_COLS = {
|
|
19
|
+
phase: 'current_phase',
|
|
20
|
+
step: 'current_step',
|
|
21
|
+
onHold: 'on_hold',
|
|
22
|
+
blocked: 'blocked_reason',
|
|
23
|
+
cancelled: 'cancelled',
|
|
24
|
+
company: 'company_id',
|
|
25
|
+
updatedAt: 'updated_at',
|
|
26
|
+
};
|
|
27
|
+
const DEFAULT_NAMES = {
|
|
28
|
+
getState: 'get_item_state',
|
|
29
|
+
listByPhase: 'list_items_by_phase',
|
|
30
|
+
advanceStep: 'advance_step',
|
|
31
|
+
blockItem: 'block_item',
|
|
32
|
+
unblockItem: 'unblock_item',
|
|
33
|
+
holdItem: 'hold_item',
|
|
34
|
+
resumeItem: 'resume_item',
|
|
35
|
+
cancelItem: 'cancel_item',
|
|
36
|
+
requestHumanApproval: 'request_human_approval',
|
|
37
|
+
};
|
|
38
|
+
function resolveCols(wf) {
|
|
39
|
+
return { ...DEFAULT_COLS, ...(wf.columns || {}) };
|
|
40
|
+
}
|
|
41
|
+
function resolveNames(wf) {
|
|
42
|
+
return { ...DEFAULT_NAMES, ...(wf.toolNames || {}) };
|
|
43
|
+
}
|
|
44
|
+
function flagsSummary(item, cols) {
|
|
45
|
+
const flags = [];
|
|
46
|
+
if (item[cols.onHold])
|
|
47
|
+
flags.push('ON HOLD');
|
|
48
|
+
if (item[cols.blocked])
|
|
49
|
+
flags.push(`BLOCKED: ${item[cols.blocked]}`);
|
|
50
|
+
if (item[cols.cancelled])
|
|
51
|
+
flags.push('CANCELLED');
|
|
52
|
+
return flags.length ? ` [${flags.join(', ')}]` : '';
|
|
53
|
+
}
|
|
54
|
+
function buildStepHint(wf, phase, step) {
|
|
55
|
+
const key = `${phase}.${step}`;
|
|
56
|
+
if (wf.stepHints?.[key])
|
|
57
|
+
return wf.stepHints[key];
|
|
58
|
+
if (workflowRequiresHumanApproval(wf, phase, step)) {
|
|
59
|
+
return 'Este step requiere aprobacion humana. Llama request_human_approval con el packet de datos.';
|
|
60
|
+
}
|
|
61
|
+
const steps = workflowPhaseSteps(wf, phase);
|
|
62
|
+
const idx = steps.indexOf(step);
|
|
63
|
+
if (idx === -1)
|
|
64
|
+
return undefined;
|
|
65
|
+
if (idx < steps.length - 1) {
|
|
66
|
+
return `Proximo step en ${phase}: "${steps[idx + 1]}"`;
|
|
67
|
+
}
|
|
68
|
+
const phaseIdx = workflowPhaseIndex(wf, phase);
|
|
69
|
+
if (phaseIdx < wf.phases.length - 1) {
|
|
70
|
+
const nextPhase = wf.phases[phaseIdx + 1];
|
|
71
|
+
return `Ultimo step de ${phase}. Proxima fase: "${nextPhase.name}" (primer step: "${workflowPhaseSteps(wf, nextPhase.name)[0]}")`;
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
export function buildWorkflowTools(wf) {
|
|
76
|
+
const cols = resolveCols(wf);
|
|
77
|
+
const names = resolveNames(wf);
|
|
78
|
+
const phaseNames = workflowPhaseNames(wf);
|
|
79
|
+
const executions = workflowExecution(wf);
|
|
80
|
+
// Zod enum needs a non-empty tuple; cast fits.
|
|
81
|
+
const phaseEnum = z.enum(phaseNames);
|
|
82
|
+
return [
|
|
83
|
+
defineTool({
|
|
84
|
+
name: names.getState,
|
|
85
|
+
description: `Snapshot del state machine para un item del workflow ${wf.name}: fase, sub-paso, flags, y si requiere aprobacion humana.`,
|
|
86
|
+
schema: { item_id: z.string() },
|
|
87
|
+
handler: async ({ item_id }) => {
|
|
88
|
+
const db = getSupabase();
|
|
89
|
+
const selectCols = [
|
|
90
|
+
'id', 'order_id',
|
|
91
|
+
cols.phase, cols.step, cols.onHold, cols.blocked, cols.cancelled,
|
|
92
|
+
].join(', ');
|
|
93
|
+
const { data: item, error } = await db
|
|
94
|
+
.from(wf.entityTable)
|
|
95
|
+
.select(selectCols)
|
|
96
|
+
.eq('id', item_id)
|
|
97
|
+
.single();
|
|
98
|
+
if (error || !item)
|
|
99
|
+
return agentErr(error?.message ?? 'Item no encontrado');
|
|
100
|
+
const phase = item[cols.phase];
|
|
101
|
+
const step = item[cols.step];
|
|
102
|
+
const stepsForPhase = workflowPhaseSteps(wf, phase);
|
|
103
|
+
const stepIdx = stepsForPhase.indexOf(step);
|
|
104
|
+
return agent({
|
|
105
|
+
summary: `Item ${item_id}: ${phase}.${step}${flagsSummary(item, cols)}`,
|
|
106
|
+
data: {
|
|
107
|
+
item_id: item.id,
|
|
108
|
+
order_id: item.order_id,
|
|
109
|
+
phase,
|
|
110
|
+
step,
|
|
111
|
+
on_hold: item[cols.onHold],
|
|
112
|
+
blocked_reason: item[cols.blocked],
|
|
113
|
+
cancelled: item[cols.cancelled],
|
|
114
|
+
steps_in_phase: stepsForPhase,
|
|
115
|
+
step_index: stepIdx,
|
|
116
|
+
is_last_step: stepIdx === stepsForPhase.length - 1,
|
|
117
|
+
requires_human_approval: workflowRequiresHumanApproval(wf, phase, step),
|
|
118
|
+
execution_context: executions[phase] ?? null,
|
|
119
|
+
},
|
|
120
|
+
hint: buildStepHint(wf, phase, step),
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
}),
|
|
124
|
+
defineTool({
|
|
125
|
+
name: names.listByPhase,
|
|
126
|
+
description: `Lista items de una empresa en el workflow ${wf.name}, opcionalmente filtrando por fase.`,
|
|
127
|
+
schema: {
|
|
128
|
+
company_id: z.string(),
|
|
129
|
+
phase: phaseEnum.optional(),
|
|
130
|
+
include_cancelled: z.boolean().default(false),
|
|
131
|
+
},
|
|
132
|
+
handler: async ({ company_id, phase, include_cancelled }) => {
|
|
133
|
+
const db = getSupabase();
|
|
134
|
+
const selectCols = [
|
|
135
|
+
'id', 'order_id', 'description',
|
|
136
|
+
cols.phase, cols.step, cols.onHold, cols.blocked,
|
|
137
|
+
].join(', ');
|
|
138
|
+
let q = db.from(wf.entityTable).select(selectCols).eq(cols.company, company_id);
|
|
139
|
+
if (phase)
|
|
140
|
+
q = q.eq(cols.phase, phase);
|
|
141
|
+
if (!include_cancelled)
|
|
142
|
+
q = q.eq(cols.cancelled, false);
|
|
143
|
+
const { data, error } = await q.order(cols.updatedAt, { ascending: false });
|
|
144
|
+
if (error)
|
|
145
|
+
return agentErr(`Error listando items: ${error.message}`);
|
|
146
|
+
const items = (data || []).map((i) => ({
|
|
147
|
+
id: i.id,
|
|
148
|
+
order_id: i.order_id,
|
|
149
|
+
description: i.description,
|
|
150
|
+
phase: i[cols.phase],
|
|
151
|
+
step: i[cols.step],
|
|
152
|
+
on_hold: i[cols.onHold],
|
|
153
|
+
blocked: !!i[cols.blocked],
|
|
154
|
+
}));
|
|
155
|
+
return agent({
|
|
156
|
+
summary: `${items.length} item(s)${phase ? ` en ${phase}` : ''} para empresa ${company_id}`,
|
|
157
|
+
data: { items },
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
}),
|
|
161
|
+
defineTool({
|
|
162
|
+
name: names.advanceStep,
|
|
163
|
+
description: `Avanza un item al siguiente sub-paso o a una nueva fase dentro del workflow ${wf.name}. Valida transicion legal.`,
|
|
164
|
+
schema: {
|
|
165
|
+
item_id: z.string(),
|
|
166
|
+
to_phase: phaseEnum,
|
|
167
|
+
to_step: z.string(),
|
|
168
|
+
actor: z.string().describe('agent | user'),
|
|
169
|
+
reason: z.string().optional(),
|
|
170
|
+
evidence: z.record(z.string(), z.any()).optional(),
|
|
171
|
+
},
|
|
172
|
+
handler: async ({ item_id, to_phase, to_step, actor, reason, evidence }) => {
|
|
173
|
+
const db = getSupabase();
|
|
174
|
+
const selectCols = [
|
|
175
|
+
'id', 'order_id', cols.company,
|
|
176
|
+
cols.phase, cols.step, cols.onHold, cols.blocked, cols.cancelled,
|
|
177
|
+
].join(', ');
|
|
178
|
+
const { data: item, error: e1 } = await db
|
|
179
|
+
.from(wf.entityTable)
|
|
180
|
+
.select(selectCols)
|
|
181
|
+
.eq('id', item_id)
|
|
182
|
+
.single();
|
|
183
|
+
if (e1 || !item)
|
|
184
|
+
return agentErr(e1?.message ?? 'Item no encontrado');
|
|
185
|
+
const row = item;
|
|
186
|
+
if (row[cols.cancelled])
|
|
187
|
+
return agentErr('Item cancelado, no se puede avanzar');
|
|
188
|
+
if (row[cols.onHold])
|
|
189
|
+
return agentErr('Item en hold. Llama resume_item primero.');
|
|
190
|
+
if (row[cols.blocked])
|
|
191
|
+
return agentErr(`Item bloqueado: ${row[cols.blocked]}. Llama unblock_item primero.`);
|
|
192
|
+
if (!workflowIsValidStep(wf, to_phase, to_step)) {
|
|
193
|
+
return agentErr(`Step "${to_step}" no existe en fase "${to_phase}"`, {
|
|
194
|
+
valid_steps: workflowPhaseSteps(wf, to_phase),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
const fromIdx = workflowPhaseIndex(wf, row[cols.phase]);
|
|
198
|
+
const toIdx = workflowPhaseIndex(wf, to_phase);
|
|
199
|
+
if (toIdx < fromIdx)
|
|
200
|
+
return agentErr('No se puede retroceder de fase');
|
|
201
|
+
if (toIdx > fromIdx + 1)
|
|
202
|
+
return agentErr('Solo se puede avanzar 1 fase a la vez');
|
|
203
|
+
if (workflowRequiresHumanApproval(wf, to_phase, to_step) && actor !== 'user') {
|
|
204
|
+
return agentErr(`Step "${to_phase}.${to_step}" requiere aprobacion humana. Llama request_human_approval.`);
|
|
205
|
+
}
|
|
206
|
+
const { error: e2 } = await db
|
|
207
|
+
.from(wf.entityTable)
|
|
208
|
+
.update({
|
|
209
|
+
[cols.phase]: to_phase,
|
|
210
|
+
[cols.step]: to_step,
|
|
211
|
+
[cols.updatedAt]: new Date().toISOString(),
|
|
212
|
+
})
|
|
213
|
+
.eq('id', item_id);
|
|
214
|
+
if (e2)
|
|
215
|
+
return agentErr(`Error avanzando: ${e2.message}`);
|
|
216
|
+
await db.from(wf.transitionsTable).insert({
|
|
217
|
+
item_id,
|
|
218
|
+
company_id: row[cols.company],
|
|
219
|
+
from_phase: row[cols.phase],
|
|
220
|
+
to_phase,
|
|
221
|
+
from_step: row[cols.step],
|
|
222
|
+
to_step,
|
|
223
|
+
actor,
|
|
224
|
+
reason,
|
|
225
|
+
evidence: evidence ?? {},
|
|
226
|
+
});
|
|
227
|
+
return agent({
|
|
228
|
+
summary: `Item ${item_id} avanzado a ${to_phase}.${to_step}`,
|
|
229
|
+
data: { item_id, phase: to_phase, step: to_step },
|
|
230
|
+
hint: buildStepHint(wf, to_phase, to_step),
|
|
231
|
+
});
|
|
232
|
+
},
|
|
233
|
+
}),
|
|
234
|
+
defineTool({
|
|
235
|
+
name: names.blockItem,
|
|
236
|
+
description: 'Marca un item como bloqueado con razon.',
|
|
237
|
+
schema: { item_id: z.string(), reason: z.string() },
|
|
238
|
+
handler: async ({ item_id, reason }) => {
|
|
239
|
+
const db = getSupabase();
|
|
240
|
+
const { error } = await db.from(wf.entityTable)
|
|
241
|
+
.update({ [cols.blocked]: reason, [cols.updatedAt]: new Date().toISOString() })
|
|
242
|
+
.eq('id', item_id);
|
|
243
|
+
if (error)
|
|
244
|
+
return agentErr(`Error bloqueando: ${error.message}`);
|
|
245
|
+
return agent({
|
|
246
|
+
summary: `Item ${item_id} bloqueado: ${reason}`,
|
|
247
|
+
data: { item_id, blocked_reason: reason },
|
|
248
|
+
});
|
|
249
|
+
},
|
|
250
|
+
}),
|
|
251
|
+
defineTool({
|
|
252
|
+
name: names.unblockItem,
|
|
253
|
+
description: 'Quita el bloqueo de un item.',
|
|
254
|
+
schema: { item_id: z.string() },
|
|
255
|
+
handler: async ({ item_id }) => {
|
|
256
|
+
const db = getSupabase();
|
|
257
|
+
const { error } = await db.from(wf.entityTable)
|
|
258
|
+
.update({ [cols.blocked]: null, [cols.updatedAt]: new Date().toISOString() })
|
|
259
|
+
.eq('id', item_id);
|
|
260
|
+
if (error)
|
|
261
|
+
return agentErr(`Error desbloqueando: ${error.message}`);
|
|
262
|
+
return agent({
|
|
263
|
+
summary: `Item ${item_id} desbloqueado.`,
|
|
264
|
+
data: { item_id },
|
|
265
|
+
hint: 'Item puede avanzar. Revisa get_item_state para ver posicion actual.',
|
|
266
|
+
});
|
|
267
|
+
},
|
|
268
|
+
}),
|
|
269
|
+
defineTool({
|
|
270
|
+
name: names.holdItem,
|
|
271
|
+
description: 'Pausa un item (on_hold=true).',
|
|
272
|
+
schema: { item_id: z.string() },
|
|
273
|
+
handler: async ({ item_id }) => {
|
|
274
|
+
const db = getSupabase();
|
|
275
|
+
const { error } = await db.from(wf.entityTable)
|
|
276
|
+
.update({ [cols.onHold]: true, [cols.updatedAt]: new Date().toISOString() })
|
|
277
|
+
.eq('id', item_id);
|
|
278
|
+
if (error)
|
|
279
|
+
return agentErr(`Error pausando: ${error.message}`);
|
|
280
|
+
return agent({
|
|
281
|
+
summary: `Item ${item_id} pausado.`,
|
|
282
|
+
data: { item_id, on_hold: true },
|
|
283
|
+
});
|
|
284
|
+
},
|
|
285
|
+
}),
|
|
286
|
+
defineTool({
|
|
287
|
+
name: names.resumeItem,
|
|
288
|
+
description: 'Reanuda un item pausado.',
|
|
289
|
+
schema: { item_id: z.string() },
|
|
290
|
+
handler: async ({ item_id }) => {
|
|
291
|
+
const db = getSupabase();
|
|
292
|
+
const { error } = await db.from(wf.entityTable)
|
|
293
|
+
.update({ [cols.onHold]: false, [cols.updatedAt]: new Date().toISOString() })
|
|
294
|
+
.eq('id', item_id);
|
|
295
|
+
if (error)
|
|
296
|
+
return agentErr(`Error reanudando: ${error.message}`);
|
|
297
|
+
return agent({
|
|
298
|
+
summary: `Item ${item_id} reanudado.`,
|
|
299
|
+
data: { item_id, on_hold: false },
|
|
300
|
+
hint: 'Item puede avanzar. Revisa get_item_state para ver posicion actual.',
|
|
301
|
+
});
|
|
302
|
+
},
|
|
303
|
+
}),
|
|
304
|
+
defineTool({
|
|
305
|
+
name: names.cancelItem,
|
|
306
|
+
description: 'Cancela un item (terminal).',
|
|
307
|
+
schema: { item_id: z.string(), reason: z.string().optional() },
|
|
308
|
+
handler: async ({ item_id, reason }) => {
|
|
309
|
+
const db = getSupabase();
|
|
310
|
+
const selectCols = [cols.company, cols.phase, cols.step].join(', ');
|
|
311
|
+
const { data: item } = await db.from(wf.entityTable)
|
|
312
|
+
.select(selectCols)
|
|
313
|
+
.eq('id', item_id)
|
|
314
|
+
.single();
|
|
315
|
+
const { error } = await db.from(wf.entityTable)
|
|
316
|
+
.update({ [cols.cancelled]: true, [cols.updatedAt]: new Date().toISOString() })
|
|
317
|
+
.eq('id', item_id);
|
|
318
|
+
if (error)
|
|
319
|
+
return agentErr(`Error cancelando: ${error.message}`);
|
|
320
|
+
if (item) {
|
|
321
|
+
const row = item;
|
|
322
|
+
await db.from(wf.transitionsTable).insert({
|
|
323
|
+
item_id,
|
|
324
|
+
company_id: row[cols.company],
|
|
325
|
+
from_phase: row[cols.phase],
|
|
326
|
+
to_phase: row[cols.phase],
|
|
327
|
+
from_step: row[cols.step],
|
|
328
|
+
to_step: 'cancelled',
|
|
329
|
+
actor: 'agent',
|
|
330
|
+
reason,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
return agent({
|
|
334
|
+
summary: `Item ${item_id} cancelado.`,
|
|
335
|
+
data: { item_id, cancelled: true },
|
|
336
|
+
});
|
|
337
|
+
},
|
|
338
|
+
}),
|
|
339
|
+
defineTool({
|
|
340
|
+
name: names.requestHumanApproval,
|
|
341
|
+
description: 'Marca un item como esperando aprobacion humana. La UI debe llamar advance_step con actor=user para confirmar.',
|
|
342
|
+
schema: {
|
|
343
|
+
item_id: z.string(),
|
|
344
|
+
packet: z.record(z.string(), z.any()).describe('Datos a presentar al humano (resumen de costos, docs, etc.)'),
|
|
345
|
+
},
|
|
346
|
+
handler: async ({ item_id, packet }) => {
|
|
347
|
+
const db = getSupabase();
|
|
348
|
+
const selectCols = [cols.company, cols.phase, cols.step].join(', ');
|
|
349
|
+
const { data: item } = await db.from(wf.entityTable)
|
|
350
|
+
.select(selectCols)
|
|
351
|
+
.eq('id', item_id)
|
|
352
|
+
.single();
|
|
353
|
+
if (!item)
|
|
354
|
+
return agentErr('Item no encontrado');
|
|
355
|
+
const row = item;
|
|
356
|
+
if (!workflowRequiresHumanApproval(wf, row[cols.phase], row[cols.step])) {
|
|
357
|
+
return agentErr('Este step no es un gate de aprobacion humana');
|
|
358
|
+
}
|
|
359
|
+
await db.from(wf.transitionsTable).insert({
|
|
360
|
+
item_id,
|
|
361
|
+
company_id: row[cols.company],
|
|
362
|
+
from_phase: row[cols.phase],
|
|
363
|
+
to_phase: row[cols.phase],
|
|
364
|
+
from_step: row[cols.step],
|
|
365
|
+
to_step: row[cols.step],
|
|
366
|
+
actor: 'agent',
|
|
367
|
+
reason: 'awaiting_human_approval',
|
|
368
|
+
evidence: packet,
|
|
369
|
+
});
|
|
370
|
+
return agent({
|
|
371
|
+
summary: `Aprobacion humana solicitada para item ${item_id} en ${row[cols.phase]}.${row[cols.step]}`,
|
|
372
|
+
data: { item_id, phase: row[cols.phase], step: row[cols.step] },
|
|
373
|
+
hint: 'NO llames advance_step. El usuario aprobara via UI, que llama advance_step con actor="user".',
|
|
374
|
+
});
|
|
375
|
+
},
|
|
376
|
+
}),
|
|
377
|
+
];
|
|
378
|
+
}
|
|
379
|
+
export function registerWorkflowTools(server, wf) {
|
|
380
|
+
registerTools(server, buildWorkflowTools(wf));
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=workflow-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-tools.js","sourceRoot":"","sources":["../../../core-mcp/src/workflow-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* defineEntity — declarative activatable entity.
|
|
3
|
+
*
|
|
4
|
+
* An entity is a first-class object in the app that can be "focused" by the
|
|
5
|
+
* agent or the user. Activating it triggers:
|
|
6
|
+
* - The MCP side: `activate_<name>`, `deactivate_<name>`, `get_active_<name>`
|
|
7
|
+
* tools generated from this definition (see @proto/core-mcp → registerEntityTools).
|
|
8
|
+
* - The web side: Shell switches to cockpit mode using `cockpit` layouts + widgets.
|
|
9
|
+
* - The chat side: `snapshotBuilder` runs and injects the markdown into the
|
|
10
|
+
* agent's context so the next turn has fresh data without tool calls.
|
|
11
|
+
*
|
|
12
|
+
* The definition is pure data (plus an optional async function). It loads from
|
|
13
|
+
* both Node (MCP) and the browser (Shell + chat) without React imports.
|
|
14
|
+
*
|
|
15
|
+
* Example:
|
|
16
|
+
*
|
|
17
|
+
* export default defineEntity({
|
|
18
|
+
* name: 'order',
|
|
19
|
+
* displayName: 'pedido',
|
|
20
|
+
* table: 'orders',
|
|
21
|
+
* labelField: 'supplier_name',
|
|
22
|
+
* cockpit: {
|
|
23
|
+
* widgets: [
|
|
24
|
+
* { id: 'cockpit-header', type: 'order-header', title: 'Pedido' },
|
|
25
|
+
* ...
|
|
26
|
+
* ],
|
|
27
|
+
* layouts: { lg: [...], md: [...], sm: [...] },
|
|
28
|
+
* },
|
|
29
|
+
* snapshotBuilder: async (entity, { supabase }) => {
|
|
30
|
+
* // query related data, return markdown string
|
|
31
|
+
* },
|
|
32
|
+
* })
|
|
33
|
+
*/
|
|
34
|
+
export interface EntityCockpitWidget {
|
|
35
|
+
id: string;
|
|
36
|
+
type: string;
|
|
37
|
+
title: string;
|
|
38
|
+
props?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
export interface EntityCockpit {
|
|
41
|
+
widgets: EntityCockpitWidget[];
|
|
42
|
+
/** react-grid-layout Layouts — opaque at this layer. */
|
|
43
|
+
layouts: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
export interface EntityDefinition<T = Record<string, unknown>> {
|
|
46
|
+
/** Unique id used as activeEntity.type and as the tool suffix. */
|
|
47
|
+
name: string;
|
|
48
|
+
/** Human-readable singular noun used in generated tool descriptions. */
|
|
49
|
+
displayName: string;
|
|
50
|
+
/** Supabase table the entity lives in. */
|
|
51
|
+
table: string;
|
|
52
|
+
/** Column to use as the default label when surfacing this entity. */
|
|
53
|
+
labelField: string;
|
|
54
|
+
/** Shell cockpit layout shown when this entity is active. */
|
|
55
|
+
cockpit?: EntityCockpit;
|
|
56
|
+
/**
|
|
57
|
+
* Builds a markdown snapshot of the entity + related data. Called from the
|
|
58
|
+
* browser before each chat turn so the agent has fresh context without
|
|
59
|
+
* burning tool calls on reads. Return null to skip injection.
|
|
60
|
+
*/
|
|
61
|
+
snapshotBuilder?: (entity: T, ctx: {
|
|
62
|
+
supabase: unknown;
|
|
63
|
+
}) => Promise<string | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Optional override for the agent-facing description of the generated
|
|
66
|
+
* `activate_<name>` tool. If omitted, a generic template is used.
|
|
67
|
+
*/
|
|
68
|
+
activateDescription?: string;
|
|
69
|
+
}
|
|
70
|
+
export declare function defineEntity<T = Record<string, unknown>>(def: EntityDefinition<T>): EntityDefinition<T>;
|
|
71
|
+
export type EntityRegistry = Map<string, EntityDefinition>;
|
|
72
|
+
export declare function buildEntityRegistry(defs: readonly EntityDefinition[]): EntityRegistry;
|
|
73
|
+
//# sourceMappingURL=define-entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-entity.d.ts","sourceRoot":"","sources":["../../../core-shared/src/define-entity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAA;IACnB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,CAAC,EACT,GAAG,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,KACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC3B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,wBAAgB,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACvB,gBAAgB,CAAC,CAAC,CAAC,CAErB;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAE1D,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAChC,cAAc,CAShB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* defineEntity — declarative activatable entity.
|
|
3
|
+
*
|
|
4
|
+
* An entity is a first-class object in the app that can be "focused" by the
|
|
5
|
+
* agent or the user. Activating it triggers:
|
|
6
|
+
* - The MCP side: `activate_<name>`, `deactivate_<name>`, `get_active_<name>`
|
|
7
|
+
* tools generated from this definition (see @proto/core-mcp → registerEntityTools).
|
|
8
|
+
* - The web side: Shell switches to cockpit mode using `cockpit` layouts + widgets.
|
|
9
|
+
* - The chat side: `snapshotBuilder` runs and injects the markdown into the
|
|
10
|
+
* agent's context so the next turn has fresh data without tool calls.
|
|
11
|
+
*
|
|
12
|
+
* The definition is pure data (plus an optional async function). It loads from
|
|
13
|
+
* both Node (MCP) and the browser (Shell + chat) without React imports.
|
|
14
|
+
*
|
|
15
|
+
* Example:
|
|
16
|
+
*
|
|
17
|
+
* export default defineEntity({
|
|
18
|
+
* name: 'order',
|
|
19
|
+
* displayName: 'pedido',
|
|
20
|
+
* table: 'orders',
|
|
21
|
+
* labelField: 'supplier_name',
|
|
22
|
+
* cockpit: {
|
|
23
|
+
* widgets: [
|
|
24
|
+
* { id: 'cockpit-header', type: 'order-header', title: 'Pedido' },
|
|
25
|
+
* ...
|
|
26
|
+
* ],
|
|
27
|
+
* layouts: { lg: [...], md: [...], sm: [...] },
|
|
28
|
+
* },
|
|
29
|
+
* snapshotBuilder: async (entity, { supabase }) => {
|
|
30
|
+
* // query related data, return markdown string
|
|
31
|
+
* },
|
|
32
|
+
* })
|
|
33
|
+
*/
|
|
34
|
+
export function defineEntity(def) {
|
|
35
|
+
return def;
|
|
36
|
+
}
|
|
37
|
+
export function buildEntityRegistry(defs) {
|
|
38
|
+
const map = new Map();
|
|
39
|
+
for (const def of defs) {
|
|
40
|
+
if (map.has(def.name)) {
|
|
41
|
+
console.warn(`[defineEntity] duplicate entity name: ${def.name}`);
|
|
42
|
+
}
|
|
43
|
+
map.set(def.name, def);
|
|
44
|
+
}
|
|
45
|
+
return map;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=define-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-entity.js","sourceRoot":"","sources":["../../../core-shared/src/define-entity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AA0CH,MAAM,UAAU,YAAY,CAC1B,GAAwB;IAExB,OAAO,GAAG,CAAA;AACZ,CAAC;AAID,MAAM,UAAU,mBAAmB,CACjC,IAAiC;IAEjC,MAAM,GAAG,GAAmB,IAAI,GAAG,EAAE,CAAA;IACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* defineWorkflow — declarative state machine over a Supabase table.
|
|
3
|
+
*
|
|
4
|
+
* A workflow describes a sequence of phases, each with sub-steps. Items
|
|
5
|
+
* (rows in `entityTable`) carry `phase_column` + `step_column` values and
|
|
6
|
+
* advance through the phases under agent or user control. Transitions are
|
|
7
|
+
* recorded into `transitionsTable`.
|
|
8
|
+
*
|
|
9
|
+
* The definition is pure data. `@proto/core-mcp` has `buildWorkflowTools()`
|
|
10
|
+
* that consumes a WorkflowDefinition and emits 9 MCP tools:
|
|
11
|
+
*
|
|
12
|
+
* get_item_state, list_items_by_phase, advance_step,
|
|
13
|
+
* block_item, unblock_item, hold_item, resume_item, cancel_item,
|
|
14
|
+
* request_human_approval
|
|
15
|
+
*
|
|
16
|
+
* Tool names can be customized via `toolNames` when multiple workflows
|
|
17
|
+
* coexist in one app; otherwise the defaults keep skills compatible.
|
|
18
|
+
*
|
|
19
|
+
* Example:
|
|
20
|
+
*
|
|
21
|
+
* export default defineWorkflow({
|
|
22
|
+
* name: 'import',
|
|
23
|
+
* entityTable: 'order_items',
|
|
24
|
+
* transitionsTable: 'phase_transitions',
|
|
25
|
+
* phases: [
|
|
26
|
+
* {
|
|
27
|
+
* name: 'sourcing',
|
|
28
|
+
* label: 'Sourcing',
|
|
29
|
+
* steps: ['identify_need', 'search_suppliers', 'shortlist'],
|
|
30
|
+
* execution: { skills: ['products'], fork: true },
|
|
31
|
+
* },
|
|
32
|
+
* {
|
|
33
|
+
* name: 'final_costing',
|
|
34
|
+
* steps: [
|
|
35
|
+
* 'compute_final_landed',
|
|
36
|
+
* { name: 'awaiting_client_approval', requires_human_approval: true },
|
|
37
|
+
* 'approved',
|
|
38
|
+
* ],
|
|
39
|
+
* },
|
|
40
|
+
* ],
|
|
41
|
+
* })
|
|
42
|
+
*/
|
|
43
|
+
export interface WorkflowStepConfig {
|
|
44
|
+
name: string;
|
|
45
|
+
requires_human_approval?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export type WorkflowStep = string | WorkflowStepConfig;
|
|
48
|
+
export interface PhaseExecution {
|
|
49
|
+
skills?: string[];
|
|
50
|
+
subagent?: string;
|
|
51
|
+
fork?: boolean;
|
|
52
|
+
rationale?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface WorkflowPhase {
|
|
55
|
+
name: string;
|
|
56
|
+
label?: string;
|
|
57
|
+
steps: WorkflowStep[];
|
|
58
|
+
execution?: PhaseExecution;
|
|
59
|
+
}
|
|
60
|
+
export interface WorkflowToolNames {
|
|
61
|
+
getState?: string;
|
|
62
|
+
listByPhase?: string;
|
|
63
|
+
advanceStep?: string;
|
|
64
|
+
blockItem?: string;
|
|
65
|
+
unblockItem?: string;
|
|
66
|
+
holdItem?: string;
|
|
67
|
+
resumeItem?: string;
|
|
68
|
+
cancelItem?: string;
|
|
69
|
+
requestHumanApproval?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface WorkflowColumns {
|
|
72
|
+
phase?: string;
|
|
73
|
+
step?: string;
|
|
74
|
+
onHold?: string;
|
|
75
|
+
blocked?: string;
|
|
76
|
+
cancelled?: string;
|
|
77
|
+
company?: string;
|
|
78
|
+
updatedAt?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface WorkflowDefinition {
|
|
81
|
+
/** Unique workflow id (e.g. 'import'). */
|
|
82
|
+
name: string;
|
|
83
|
+
/** Human-readable singular (e.g. 'importacion'). */
|
|
84
|
+
displayName?: string;
|
|
85
|
+
/** Table holding the stateful items (e.g. 'order_items'). */
|
|
86
|
+
entityTable: string;
|
|
87
|
+
/** Table for transition history (e.g. 'phase_transitions'). */
|
|
88
|
+
transitionsTable: string;
|
|
89
|
+
/** Column name overrides. Sensible defaults for Hermes-style schemas. */
|
|
90
|
+
columns?: WorkflowColumns;
|
|
91
|
+
/** Phase list in forward order. */
|
|
92
|
+
phases: WorkflowPhase[];
|
|
93
|
+
/** Extra per-step hints keyed by `${phase}.${step}`. */
|
|
94
|
+
stepHints?: Record<string, string>;
|
|
95
|
+
/** Tool name overrides for multi-workflow apps. */
|
|
96
|
+
toolNames?: WorkflowToolNames;
|
|
97
|
+
}
|
|
98
|
+
export declare function defineWorkflow(def: WorkflowDefinition): WorkflowDefinition;
|
|
99
|
+
export declare function workflowPhaseNames(wf: WorkflowDefinition): string[];
|
|
100
|
+
export declare function workflowPhaseIndex(wf: WorkflowDefinition, phase: string): number;
|
|
101
|
+
export declare function workflowPhaseLabels(wf: WorkflowDefinition): Record<string, string>;
|
|
102
|
+
export declare function workflowPhaseSteps(wf: WorkflowDefinition, phase: string): string[];
|
|
103
|
+
export declare function workflowAllPhaseSteps(wf: WorkflowDefinition): Record<string, string[]>;
|
|
104
|
+
export declare function workflowIsValidStep(wf: WorkflowDefinition, phase: string, step: string): boolean;
|
|
105
|
+
export declare function workflowRequiresHumanApproval(wf: WorkflowDefinition, phase: string, step: string): boolean;
|
|
106
|
+
export declare function workflowHumanApprovalGates(wf: WorkflowDefinition): Array<{
|
|
107
|
+
phase: string;
|
|
108
|
+
step: string;
|
|
109
|
+
}>;
|
|
110
|
+
export declare function workflowExecution(wf: WorkflowDefinition): Record<string, PhaseExecution>;
|
|
111
|
+
//# sourceMappingURL=define-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-workflow.d.ts","sourceRoot":"","sources":["../../../core-shared/src/define-workflow.ts"],"names":[],"mappings":"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"}
|