@vinkius-core/mcp-fusion 1.9.0 → 1.10.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/CHANGELOG.md CHANGED
@@ -5,6 +5,30 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.10.0] - 2026-02-23
9
+
10
+ ### Hydration Timeout Sandbox — Graceful Degradation for Prompt Hydration
11
+
12
+ **MCP Fusion** now protects prompt handlers from slow/failing external data sources via the **Hydration Timeout Sandbox**. When a handler fetches data from Jira, Stripe, databases, or any external source and the call hangs, the framework enforces a strict deadline, unblocks the UI immediately, and returns a structured SYSTEM ALERT.
13
+
14
+ ### Added
15
+
16
+ - **`HydrationSandbox` module** (`src/prompt/HydrationSandbox.ts`): Core timeout mechanism using `Promise.race`. Wraps handler execution with a strict deadline and catches both timeouts and handler errors, converting them to graceful `<hydration_alert>` XML-structured messages.
17
+ - **`hydrationTimeout` config** on `definePrompt()`: Per-prompt deadline in milliseconds. Example: `definePrompt('briefing', { hydrationTimeout: 3000, handler: ... })`.
18
+ - **`setDefaultHydrationTimeout(ms)`** on `PromptRegistry`: Global safety net for ALL prompts. Individual prompt timeouts override the registry default.
19
+ - **Three-scenario coverage**: Handler completes → normal result. Handler exceeds deadline → TIMEOUT alert. Handler throws → ERROR alert. The UI ALWAYS unblocks.
20
+ - **Timer cleanup**: `clearTimeout` via `finally` block — no resource leaks, no dangling timers keeping Node.js alive.
21
+ - **Zero overhead**: When no timeout is configured, no timer is created, no `Promise.race` wrapping — the handler runs directly.
22
+ - **Interceptor composition**: Prompt Interceptors still execute after a timeout, ensuring compliance headers and tenant context are always injected.
23
+ - **`getHydrationTimeout()`** on `PromptBuilder` interface: Read the configured timeout for introspection and testing.
24
+ - **17 new tests**: Unit tests covering timeout, early completion, error-as-degradation, timer cleanup, non-Error throws, plus integration tests for per-prompt config, registry defaults, override precedence, backward compatibility, and interceptor composition after timeout.
25
+
26
+ ### Design Influences
27
+
28
+ - Go's `context.WithDeadline` (structured cancellation)
29
+ - gRPC deadline propagation (strict, per-RPC)
30
+ - Resilience4j TimeLimiter (JVM circuit breaker pattern)
31
+
8
32
  ## [1.9.0] - 2026-02-23
9
33
 
10
34
  ### Intent Mutex (Anti-Race Condition)
@@ -0,0 +1,55 @@
1
+ /**
2
+ * HydrationSandbox — Structured Deadline for Prompt Server-Side Hydration
3
+ *
4
+ * When a user invokes `/morning_briefing`, the prompt handler performs
5
+ * server-side hydration: fetching Jira tickets, Stripe invoices, database
6
+ * queries. If any external source hangs (15s Jira timeout, API 500),
7
+ * the user stares at a frozen UI.
8
+ *
9
+ * This sandbox wraps the handler in a strict `Promise.race` deadline:
10
+ *
11
+ * ┌─────────────────────────────────────────────────┐
12
+ * │ Promise.race([ │
13
+ * │ handler(ctx, args), ← the real work │
14
+ * │ deadlinePromise(3s), ← the safety net │
15
+ * │ ]) │
16
+ * │ │
17
+ * │ Winner: │
18
+ * │ handler → return result (happy path) │
19
+ * │ deadline → return SYSTEM ALERT (graceful) │
20
+ * │ handler throws → return ERROR ALERT (catch) │
21
+ * └─────────────────────────────────────────────────┘
22
+ *
23
+ * Three guarantees:
24
+ * 1. The UI unblocks within `deadlineMs` — always.
25
+ * 2. Handler errors become graceful alerts, not -32603 crashes.
26
+ * 3. Timers are cleaned via `finally` — no resource leaks.
27
+ *
28
+ * Design influenced by:
29
+ * - Go's `context.WithDeadline` (structured cancellation)
30
+ * - gRPC deadline propagation (strict, per-call)
31
+ * - Resilience4j's TimeLimiter (JVM circuit breaker pattern)
32
+ *
33
+ * @module
34
+ * @internal
35
+ */
36
+ import { type PromptResult } from './types.js';
37
+ /**
38
+ * Execute a prompt hydration function within a strict deadline.
39
+ *
40
+ * Uses `Promise.race` between the handler and a timeout promise.
41
+ * Three scenarios:
42
+ *
43
+ * 1. **Handler wins** (completes before deadline) → returns result
44
+ * 2. **Deadline wins** (handler too slow) → returns TIMEOUT alert
45
+ * 3. **Handler throws** (API error, crash) → returns ERROR alert
46
+ *
47
+ * In ALL cases, the caller receives a valid `PromptResult`.
48
+ * The UI never freezes. The user never sees `-32603`.
49
+ *
50
+ * @param fn - The prompt hydration function to execute
51
+ * @param deadlineMs - Maximum time in milliseconds (must be > 0)
52
+ * @returns Always returns a valid PromptResult
53
+ */
54
+ export declare function runWithHydrationDeadline(fn: () => Promise<PromptResult>, deadlineMs: number): Promise<PromptResult>;
55
+ //# sourceMappingURL=HydrationSandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydrationSandbox.d.ts","sourceRoot":"","sources":["../../src/prompt/HydrationSandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAmE/C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,wBAAwB,CAC1C,EAAE,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EAC/B,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAwBvB"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * HydrationSandbox — Structured Deadline for Prompt Server-Side Hydration
3
+ *
4
+ * When a user invokes `/morning_briefing`, the prompt handler performs
5
+ * server-side hydration: fetching Jira tickets, Stripe invoices, database
6
+ * queries. If any external source hangs (15s Jira timeout, API 500),
7
+ * the user stares at a frozen UI.
8
+ *
9
+ * This sandbox wraps the handler in a strict `Promise.race` deadline:
10
+ *
11
+ * ┌─────────────────────────────────────────────────┐
12
+ * │ Promise.race([ │
13
+ * │ handler(ctx, args), ← the real work │
14
+ * │ deadlinePromise(3s), ← the safety net │
15
+ * │ ]) │
16
+ * │ │
17
+ * │ Winner: │
18
+ * │ handler → return result (happy path) │
19
+ * │ deadline → return SYSTEM ALERT (graceful) │
20
+ * │ handler throws → return ERROR ALERT (catch) │
21
+ * └─────────────────────────────────────────────────┘
22
+ *
23
+ * Three guarantees:
24
+ * 1. The UI unblocks within `deadlineMs` — always.
25
+ * 2. Handler errors become graceful alerts, not -32603 crashes.
26
+ * 3. Timers are cleaned via `finally` — no resource leaks.
27
+ *
28
+ * Design influenced by:
29
+ * - Go's `context.WithDeadline` (structured cancellation)
30
+ * - gRPC deadline propagation (strict, per-call)
31
+ * - Resilience4j's TimeLimiter (JVM circuit breaker pattern)
32
+ *
33
+ * @module
34
+ * @internal
35
+ */
36
+ import {} from './types.js';
37
+ // ── Alert Formatters ─────────────────────────────────────
38
+ /**
39
+ * Build an XML-structured SYSTEM ALERT for the LLM.
40
+ *
41
+ * Uses XML semantic boundaries so the LLM can parse the
42
+ * alert deterministically — same pattern as our self-healing
43
+ * tool errors (`<tool_error>`, `<validation_error>`).
44
+ */
45
+ function formatHydrationAlert(status, deadlineMs, errorMessage) {
46
+ const parts = ['<hydration_alert>'];
47
+ parts.push(` <status>${status}</status>`);
48
+ parts.push(` <deadline_ms>${deadlineMs}</deadline_ms>`);
49
+ if (status === 'TIMEOUT') {
50
+ parts.push(` <message>Prompt hydration did not complete within ${(deadlineMs / 1000).toFixed(1)}s. ` +
51
+ `External data sources (APIs, databases) did not respond within the deadline.</message>`);
52
+ }
53
+ else {
54
+ parts.push(` <message>Prompt hydration failed: ${errorMessage ?? 'Unknown error'}.</message>`);
55
+ }
56
+ parts.push(' <guidance>Proceed with the conversation using available context. ' +
57
+ 'The user\'s request is still valid — answer with your general knowledge ' +
58
+ 'and inform the user that live data could not be fetched at this time. ' +
59
+ 'Do NOT retry the same prompt automatically.</guidance>');
60
+ parts.push('</hydration_alert>');
61
+ return parts.join('\n');
62
+ }
63
+ /**
64
+ * Wrap a hydration alert as a valid `PromptResult`.
65
+ *
66
+ * Returns a single `user` message with the XML alert.
67
+ * MCP `PromptMessage` only supports `user`|`assistant` roles.
68
+ */
69
+ function alertAsPromptResult(status, deadlineMs, errorMessage) {
70
+ return {
71
+ messages: [{
72
+ role: 'user',
73
+ content: {
74
+ type: 'text',
75
+ text: formatHydrationAlert(status, deadlineMs, errorMessage),
76
+ },
77
+ }],
78
+ };
79
+ }
80
+ // ── Sandbox Execution ────────────────────────────────────
81
+ /**
82
+ * Execute a prompt hydration function within a strict deadline.
83
+ *
84
+ * Uses `Promise.race` between the handler and a timeout promise.
85
+ * Three scenarios:
86
+ *
87
+ * 1. **Handler wins** (completes before deadline) → returns result
88
+ * 2. **Deadline wins** (handler too slow) → returns TIMEOUT alert
89
+ * 3. **Handler throws** (API error, crash) → returns ERROR alert
90
+ *
91
+ * In ALL cases, the caller receives a valid `PromptResult`.
92
+ * The UI never freezes. The user never sees `-32603`.
93
+ *
94
+ * @param fn - The prompt hydration function to execute
95
+ * @param deadlineMs - Maximum time in milliseconds (must be > 0)
96
+ * @returns Always returns a valid PromptResult
97
+ */
98
+ export async function runWithHydrationDeadline(fn, deadlineMs) {
99
+ let timer;
100
+ // Deadline promise: resolves with TIMEOUT alert after deadline
101
+ const deadlinePromise = new Promise((resolve) => {
102
+ timer = setTimeout(() => {
103
+ resolve(alertAsPromptResult('TIMEOUT', deadlineMs));
104
+ }, deadlineMs);
105
+ });
106
+ // Handler promise: wraps fn() to catch errors → ERROR alert
107
+ const handlerPromise = fn().catch((err) => {
108
+ const message = err instanceof Error ? err.message : String(err);
109
+ return alertAsPromptResult('ERROR', deadlineMs, message);
110
+ });
111
+ try {
112
+ // First to finish wins. UI unblocks immediately.
113
+ return await Promise.race([handlerPromise, deadlinePromise]);
114
+ }
115
+ finally {
116
+ // Always clean up the timer — prevents resource leaks
117
+ // and keeps Node.js from staying alive unnecessarily.
118
+ if (timer !== undefined)
119
+ clearTimeout(timer);
120
+ }
121
+ }
122
+ //# sourceMappingURL=HydrationSandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydrationSandbox.js","sourceRoot":"","sources":["../../src/prompt/HydrationSandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAqB,MAAM,YAAY,CAAC;AAE/C,4DAA4D;AAE5D;;;;;;GAMG;AACH,SAAS,oBAAoB,CACzB,MAA2B,EAC3B,UAAkB,EAClB,YAAqB;IAErB,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;IAE9C,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,WAAW,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,gBAAgB,CAAC,CAAC;IAEzD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CACN,uDAAuD,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC1F,wFAAwF,CAC3F,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CACN,uCAAuC,YAAY,IAAI,eAAe,aAAa,CACtF,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CACN,qEAAqE;QACrE,0EAA0E;QAC1E,wEAAwE;QACxE,wDAAwD,CAC3D,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CACxB,MAA2B,EAC3B,UAAkB,EAClB,YAAqB;IAErB,OAAO;QACH,QAAQ,EAAE,CAAC;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC;iBAC/D;aACJ,CAAC;KACL,CAAC;AACN,CAAC;AAED,4DAA4D;AAE5D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,EAA+B,EAC/B,UAAkB;IAElB,IAAI,KAAgD,CAAC;IAErD,+DAA+D;IAC/D,MAAM,eAAe,GAAG,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,EAAE;QAC1D,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACpB,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QACxD,CAAC,EAAE,UAAU,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,MAAM,cAAc,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAgB,EAAE;QACpD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACD,iDAAiD;QACjD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;IACjE,CAAC;YAAS,CAAC;QACP,sDAAsD;QACtD,sDAAsD;QACtD,IAAI,KAAK,KAAK,SAAS;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;AACL,CAAC"}
@@ -63,6 +63,26 @@ export declare class PromptRegistry<TContext = void> {
63
63
  private readonly _interceptors;
64
64
  private _notificationSink?;
65
65
  private _notifyDebounceTimer;
66
+ private _defaultHydrationTimeout;
67
+ /**
68
+ * Set a global hydration timeout for ALL prompts in this registry.
69
+ *
70
+ * Individual prompts can override with their own `hydrationTimeout`.
71
+ * If neither is set, no timeout is applied (backward compatible).
72
+ *
73
+ * **Enterprise use case**: The platform team sets a 5s global deadline.
74
+ * Critical prompts like `morning_briefing` set their own 3s deadline.
75
+ * Simple prompts (no external I/O) inherit the 5s safety net.
76
+ *
77
+ * @param ms - Maximum hydration time in milliseconds (must be > 0)
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const promptRegistry = new PromptRegistry<AppContext>();
82
+ * promptRegistry.setDefaultHydrationTimeout(5000); // 5s global safety net
83
+ * ```
84
+ */
85
+ setDefaultHydrationTimeout(ms: number): void;
66
86
  /**
67
87
  * Register a single prompt builder.
68
88
  *
@@ -1 +1 @@
1
- {"version":3,"file":"PromptRegistry.d.ts","sourceRoot":"","sources":["../../src/prompt/PromptRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAG3B,MAAM,YAAY,CAAC;AAIpB,iDAAiD;AACjD,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;CACN;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IACzB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAID;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC;AAkBhD,qBAAa,cAAc,CAAC,QAAQ,GAAG,IAAI;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,iBAAiB,CAAC,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAA4C;IAExE;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI;IAShD;;OAEG;IACH,WAAW,CAAC,GAAG,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI;IAMzD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,cAAc,CAAC,WAAW,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAIhE;;;;OAIG;IACH,aAAa,IAAI,YAAY,EAAE;IAQ/B;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE;IAkChD;;;;;;;;;;OAUG;IACG,QAAQ,CACV,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,YAAY,CAAC;IA0ExB;;;;;;;OAOG;IACH,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI;IAIvD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,aAAa,IAAI,IAAI;IAerB,2DAA2D;IAC3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAE1B,qCAAqC;IACrC,KAAK,IAAI,IAAI;IAEb,oCAAoC;IACpC,IAAI,IAAI,IAAI,MAAM,CAAgC;CACrD"}
1
+ {"version":3,"file":"PromptRegistry.d.ts","sourceRoot":"","sources":["../../src/prompt/PromptRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAG3B,MAAM,YAAY,CAAC;AAKpB,iDAAiD;AACjD,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;CACN;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IACzB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAID;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC;AAkBhD,qBAAa,cAAc,CAAC,QAAQ,GAAG,IAAI;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,iBAAiB,CAAC,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,wBAAwB,CAAqB;IAErD;;;;;;;;;;;;;;;;;OAiBG;IACH,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5C;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI;IAShD;;OAEG;IACH,WAAW,CAAC,GAAG,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI;IAMzD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,cAAc,CAAC,WAAW,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAIhE;;;;OAIG;IACH,aAAa,IAAI,YAAY,EAAE;IAQ/B;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE;IAkChD;;;;;;;;;;OAUG;IACG,QAAQ,CACV,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,YAAY,CAAC;IAoFxB;;;;;;;OAOG;IACH,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI;IAIvD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,aAAa,IAAI,IAAI;IAerB,2DAA2D;IAC3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAE1B,qCAAqC;IACrC,KAAK,IAAI,IAAI;IAEb,oCAAoC;IACpC,IAAI,IAAI,IAAI,MAAM,CAAgC;CACrD"}
@@ -34,6 +34,7 @@
34
34
  * @module
35
35
  */
36
36
  import {} from './types.js';
37
+ import { runWithHydrationDeadline } from './HydrationSandbox.js';
37
38
  // ── MX Helpers ───────────────────────────────────────────
38
39
  /**
39
40
  * Format key-value data into an XML semantic block.
@@ -52,6 +53,28 @@ export class PromptRegistry {
52
53
  _interceptors = [];
53
54
  _notificationSink;
54
55
  _notifyDebounceTimer;
56
+ _defaultHydrationTimeout;
57
+ /**
58
+ * Set a global hydration timeout for ALL prompts in this registry.
59
+ *
60
+ * Individual prompts can override with their own `hydrationTimeout`.
61
+ * If neither is set, no timeout is applied (backward compatible).
62
+ *
63
+ * **Enterprise use case**: The platform team sets a 5s global deadline.
64
+ * Critical prompts like `morning_briefing` set their own 3s deadline.
65
+ * Simple prompts (no external I/O) inherit the 5s safety net.
66
+ *
67
+ * @param ms - Maximum hydration time in milliseconds (must be > 0)
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const promptRegistry = new PromptRegistry<AppContext>();
72
+ * promptRegistry.setDefaultHydrationTimeout(5000); // 5s global safety net
73
+ * ```
74
+ */
75
+ setDefaultHydrationTimeout(ms) {
76
+ this._defaultHydrationTimeout = ms;
77
+ }
55
78
  /**
56
79
  * Register a single prompt builder.
57
80
  *
@@ -174,7 +197,13 @@ export class PromptRegistry {
174
197
  }],
175
198
  };
176
199
  }
177
- const result = await builder.execute(ctx, args);
200
+ // ── Hydration Deadline ───────────────────────────
201
+ // Per-prompt timeout overrides registry default.
202
+ // Zero overhead when no timeout configured.
203
+ const effectiveTimeout = builder.getHydrationTimeout() ?? this._defaultHydrationTimeout;
204
+ const result = effectiveTimeout && effectiveTimeout > 0
205
+ ? await runWithHydrationDeadline(() => builder.execute(ctx, args), effectiveTimeout)
206
+ : await builder.execute(ctx, args);
178
207
  // ── Prompt Interceptors ──────────────────────────
179
208
  // Zero overhead when no interceptors registered.
180
209
  if (this._interceptors.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"PromptRegistry.js","sourceRoot":"","sources":["../../src/prompt/PromptRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PromptRegistry.js","sourceRoot":"","sources":["../../src/prompt/PromptRegistry.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ export declare class PromptBuilderImpl<TContext = void> implements PromptBuilder
26
26
  private readonly _middlewares;
27
27
  private readonly _schema;
28
28
  private readonly _handler;
29
+ private readonly _hydrationTimeout;
29
30
  constructor(name: string, config: {
30
31
  title?: string;
31
32
  description?: string;
@@ -37,11 +38,13 @@ export declare class PromptBuilderImpl<TContext = void> implements PromptBuilder
37
38
  middleware?: MiddlewareFn<TContext>[];
38
39
  schema?: ZodObject<ZodRawShape>;
39
40
  handler: (ctx: TContext & LoopbackContext, args: Record<string, unknown>) => Promise<PromptResult>;
41
+ hydrationTimeout?: number;
40
42
  });
41
43
  getName(): string;
42
44
  getDescription(): string | undefined;
43
45
  getTags(): string[];
44
46
  hasMiddleware(): boolean;
47
+ getHydrationTimeout(): number | undefined;
45
48
  buildPromptDefinition(): {
46
49
  name: string;
47
50
  title?: string;
@@ -67,6 +70,7 @@ interface PromptConfigBase<TContext> {
67
70
  };
68
71
  tags?: string[];
69
72
  middleware?: MiddlewareFn<TContext>[];
73
+ hydrationTimeout?: number;
70
74
  }
71
75
  /**
72
76
  * Overload 1: Zod schema — full type inference via `z.infer<>`
@@ -1 +1 @@
1
- {"version":3,"file":"definePrompt.d.ts","sourceRoot":"","sources":["../../src/prompt/definePrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definePrompt.d.ts","sourceRoot":"","sources":["../../src/prompt/definePrompt.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,7 @@ export class PromptBuilderImpl {
54
54
  _middlewares;
55
55
  _schema;
56
56
  _handler;
57
+ _hydrationTimeout;
57
58
  constructor(name, config) {
58
59
  this._name = name;
59
60
  this._title = config.title;
@@ -63,6 +64,7 @@ export class PromptBuilderImpl {
63
64
  this._middlewares = config.middleware ?? [];
64
65
  this._schema = config.schema;
65
66
  this._handler = config.handler;
67
+ this._hydrationTimeout = config.hydrationTimeout;
66
68
  }
67
69
  getName() {
68
70
  return this._name;
@@ -76,6 +78,9 @@ export class PromptBuilderImpl {
76
78
  hasMiddleware() {
77
79
  return this._middlewares.length > 0;
78
80
  }
81
+ getHydrationTimeout() {
82
+ return this._hydrationTimeout;
83
+ }
79
84
  buildPromptDefinition() {
80
85
  const def = { name: this._name };
81
86
  if (this._title) {
@@ -118,6 +123,7 @@ export function definePrompt(name, config) {
118
123
  middleware: config.middleware,
119
124
  schema,
120
125
  handler: config.handler,
126
+ hydrationTimeout: config.hydrationTimeout,
121
127
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
122
128
  });
123
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"definePrompt.js","sourceRoot":"","sources":["../../src/prompt/definePrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definePrompt.js","sourceRoot":"","sources":["../../src/prompt/definePrompt.ts"],"names":[],"mappings":"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"}
@@ -347,6 +347,16 @@ export interface PromptBuilder<TContext = void> {
347
347
  * @returns The hydrated prompt result with messages
348
348
  */
349
349
  execute(ctx: TContext, args: Record<string, string>): Promise<PromptResult>;
350
+ /**
351
+ * Get the configured hydration timeout (in milliseconds).
352
+ *
353
+ * When set, the handler is wrapped in a strict deadline.
354
+ * If the handler doesn't complete within this time, a
355
+ * SYSTEM ALERT is returned instead of freezing the UI.
356
+ *
357
+ * @returns Timeout in ms, or `undefined` if no deadline is configured
358
+ */
359
+ getHydrationTimeout(): number | undefined;
350
360
  }
351
361
  /**
352
362
  * Configuration for `definePrompt()`.
@@ -379,6 +389,27 @@ export interface PromptConfig<TContext, TArgs extends Record<string, unknown> =
379
389
  tags?: string[];
380
390
  /** Middleware chain (same signature as tool middleware) */
381
391
  middleware?: MiddlewareFn<TContext>[];
392
+ /**
393
+ * Maximum hydration time in milliseconds.
394
+ *
395
+ * When set, the handler is wrapped in a strict deadline. If external
396
+ * data sources (APIs, databases) don't respond within this time,
397
+ * the framework cuts the Promise and returns a graceful SYSTEM ALERT.
398
+ * The UI unblocks immediately — the user never sees a frozen screen.
399
+ *
400
+ * @example
401
+ * ```typescript
402
+ * definePrompt('morning_briefing', {
403
+ * hydrationTimeout: 3000, // 3 seconds strict
404
+ * handler: async (ctx, args) => {
405
+ * // If Jira takes 15s, the framework cuts at 3s
406
+ * const tickets = await ctx.invokeTool('jira.get_assigned');
407
+ * return { messages: [...] };
408
+ * },
409
+ * });
410
+ * ```
411
+ */
412
+ hydrationTimeout?: number;
382
413
  /**
383
414
  * The hydration handler.
384
415
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompt/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompt/types.ts"],"names":[],"mappings":"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"}
package/llms.txt CHANGED
@@ -411,6 +411,29 @@ const SummarizePrompt = definePrompt<AppContext>('summarize', {
411
411
  });
412
412
  ```
413
413
 
414
+ ## Hydration Timeout Sandbox
415
+
416
+ Prompt handlers fetch data from external sources (APIs, databases). If any source hangs, the UI freezes. The Hydration Timeout Sandbox wraps the handler in a strict `Promise.race` deadline. Three guarantees: (1) handler completes → normal result, (2) handler exceeds deadline → `<hydration_alert><status>TIMEOUT</status>` alert, (3) handler throws → `<hydration_alert><status>ERROR</status>` alert. The UI ALWAYS unblocks.
417
+
418
+ ```typescript
419
+ // Per-prompt deadline
420
+ const Briefing = definePrompt<AppContext>('morning_briefing', {
421
+ hydrationTimeout: 3000, // 3 seconds strict
422
+ handler: async (ctx, args) => {
423
+ // If Jira takes 15s, framework cuts at 3s → returns SYSTEM ALERT
424
+ const tickets = await ctx.invokeTool('jira.get_assigned');
425
+ return { messages: [PromptMessage.user(tickets.text)] };
426
+ },
427
+ });
428
+
429
+ // Registry-level default (global safety net)
430
+ const prompts = new PromptRegistry<AppContext>();
431
+ prompts.setDefaultHydrationTimeout(5000); // 5s for all prompts
432
+ prompts.register(Briefing); // overrides with 3s
433
+ ```
434
+
435
+ Zero overhead when no timeout configured. Timer cleanup via `finally` — no resource leaks. Interceptors still run after timeout.
436
+
414
437
  ## MVA-Driven Prompts — fromView()
415
438
 
416
439
  Bridge your Presenter layer into Prompts with zero duplication. `PromptMessage.fromView()` decomposes a `ResponseBuilder` into XML-tagged prompt messages (`<domain_rules>`, `<dataset>`, `<visual_context>`, `<system_guidance>`) optimized for frontier LLMs. Domain rules, UI blocks, and action suggestions from the Presenter are automatically extracted — single source of truth.
@@ -502,7 +525,7 @@ const AuditPrompt = definePrompt<AppContext>('audit', {
502
525
  - `PromptMessage.audio(role, data, mimeType)` → PromptMessagePayload
503
526
  - `PromptMessage.resource(role, uri, options?)` → PromptMessagePayload
504
527
  - `PromptMessage.fromView(builder)` → PromptMessagePayload[] — decomposes ResponseBuilder into XML-tagged messages (<domain_rules>, <dataset>, <visual_context>, <system_guidance>)
505
- - `PromptRegistry<TContext>` — .register(), .registerAll(), .getAllPrompts(), .getPrompts(filter), .routeGet(), .notifyChanged(), .has(), .clear(), .size
528
+ - `PromptRegistry<TContext>` — .register(), .registerAll(), .getAllPrompts(), .getPrompts(filter), .routeGet(), .setDefaultHydrationTimeout(), .notifyChanged(), .has(), .clear(), .size
506
529
 
507
530
  ### Result Monad
508
531
  - `succeed<T>(value)` → Success<T>
@@ -549,7 +572,7 @@ const AuditPrompt = definePrompt<AppContext>('audit', {
549
572
  - `PromptMessagePayload` — { role: 'user' | 'assistant', content: PromptContentBlock }
550
573
  - `PromptContentBlock` — PromptTextContent | PromptImageContent | PromptAudioContent | PromptResourceContent
551
574
  - `PromptBuilder<TContext>` — DIP interface: .name, .getDefinition(), .handleGet(), .tags
552
- - `PromptConfig<TContext>` — { title?, description?, args?, tags?, middleware?, handler }
575
+ - `PromptConfig<TContext>` — { title?, description?, args?, tags?, middleware?, hydrationTimeout?, handler }
553
576
 
554
577
  ### Domain Models
555
578
  - `BaseModel` — abstract base (name, title, description, meta, icons)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vinkius-core/mcp-fusion",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "MVA (Model-View-Agent) framework for the Model Context Protocol. Structured perception packages with Presenters, cognitive guardrails, self-healing errors, action consolidation, and tRPC-style type safety — so AI agents perceive and act on your data deterministically.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",