@pellux/goodvibes-sdk 0.33.38 → 0.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/dist/contracts/artifacts/operator-contract.json +1383 -4
  2. package/dist/events/workflows.d.ts +4 -0
  3. package/dist/events/workflows.d.ts.map +1 -1
  4. package/dist/platform/agents/message-bus-core.d.ts +11 -0
  5. package/dist/platform/agents/message-bus-core.d.ts.map +1 -1
  6. package/dist/platform/agents/message-bus-core.js +28 -21
  7. package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
  8. package/dist/platform/agents/orchestrator-runner.js +6 -4
  9. package/dist/platform/agents/wrfc-config.d.ts.map +1 -1
  10. package/dist/platform/agents/wrfc-config.js +16 -10
  11. package/dist/platform/agents/wrfc-controller.d.ts +26 -0
  12. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  13. package/dist/platform/agents/wrfc-controller.js +134 -138
  14. package/dist/platform/agents/wrfc-runtime-events.d.ts +1 -0
  15. package/dist/platform/agents/wrfc-runtime-events.d.ts.map +1 -1
  16. package/dist/platform/agents/wrfc-runtime-events.js +4 -1
  17. package/dist/platform/automation/delivery-manager.d.ts.map +1 -1
  18. package/dist/platform/automation/delivery-manager.js +1 -6
  19. package/dist/platform/batch/manager.d.ts.map +1 -1
  20. package/dist/platform/batch/manager.js +1 -3
  21. package/dist/platform/channels/policy-manager.d.ts.map +1 -1
  22. package/dist/platform/channels/policy-manager.js +1 -3
  23. package/dist/platform/channels/reply-pipeline.d.ts.map +1 -1
  24. package/dist/platform/channels/reply-pipeline.js +4 -0
  25. package/dist/platform/config/schema-domain-core.d.ts +1 -1
  26. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  27. package/dist/platform/config/schema-domain-core.js +12 -12
  28. package/dist/platform/config/schema-domain-runtime.d.ts +1 -1
  29. package/dist/platform/config/schema-domain-runtime.d.ts.map +1 -1
  30. package/dist/platform/config/schema-domain-runtime.js +19 -18
  31. package/dist/platform/config/schema-domain-surfaces.d.ts +1 -1
  32. package/dist/platform/config/schema-domain-surfaces.d.ts.map +1 -1
  33. package/dist/platform/config/schema-domain-surfaces.js +4 -3
  34. package/dist/platform/config/schema-shared.d.ts +6 -0
  35. package/dist/platform/config/schema-shared.d.ts.map +1 -1
  36. package/dist/platform/config/schema-shared.js +21 -1
  37. package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
  38. package/dist/platform/control-plane/approval-broker.js +1 -3
  39. package/dist/platform/control-plane/method-catalog-calendar.d.ts +9 -0
  40. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -0
  41. package/dist/platform/control-plane/method-catalog-calendar.js +117 -0
  42. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  43. package/dist/platform/control-plane/method-catalog-channels.js +174 -0
  44. package/dist/platform/control-plane/method-catalog-email.d.ts +9 -0
  45. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -0
  46. package/dist/platform/control-plane/method-catalog-email.js +101 -0
  47. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  48. package/dist/platform/control-plane/method-catalog.js +4 -0
  49. package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
  50. package/dist/platform/control-plane/session-broker-state.js +1 -3
  51. package/dist/platform/core/compaction-sections.d.ts +5 -1
  52. package/dist/platform/core/compaction-sections.d.ts.map +1 -1
  53. package/dist/platform/core/compaction-sections.js +73 -66
  54. package/dist/platform/core/context-compaction.d.ts.map +1 -1
  55. package/dist/platform/core/context-compaction.js +9 -16
  56. package/dist/platform/core/orchestrator-context-runtime.d.ts +2 -2
  57. package/dist/platform/core/orchestrator-context-runtime.d.ts.map +1 -1
  58. package/dist/platform/core/orchestrator-context-runtime.js +24 -21
  59. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  60. package/dist/platform/core/orchestrator-tool-runtime.js +2 -1
  61. package/dist/platform/core/session-lineage.d.ts +2 -5
  62. package/dist/platform/core/session-lineage.d.ts.map +1 -1
  63. package/dist/platform/core/session-lineage.js +4 -16
  64. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  65. package/dist/platform/core/wrfc-routing.js +1 -3
  66. package/dist/platform/daemon/http/mcp-routes.d.ts.map +1 -1
  67. package/dist/platform/daemon/http/mcp-routes.js +1 -3
  68. package/dist/platform/daemon/http/openai-compatible-routes.d.ts.map +1 -1
  69. package/dist/platform/daemon/http/openai-compatible-routes.js +1 -3
  70. package/dist/platform/daemon/http/runtime-routes.d.ts.map +1 -1
  71. package/dist/platform/daemon/http/runtime-routes.js +1 -3
  72. package/dist/platform/hooks/runners/http.d.ts.map +1 -1
  73. package/dist/platform/hooks/runners/http.js +9 -19
  74. package/dist/platform/integrations/webhooks.js +2 -11
  75. package/dist/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
  76. package/dist/platform/knowledge/semantic/self-improvement.js +2 -21
  77. package/dist/platform/mcp/client.d.ts.map +1 -1
  78. package/dist/platform/mcp/client.js +1 -3
  79. package/dist/platform/mcp/config.d.ts.map +1 -1
  80. package/dist/platform/mcp/config.js +1 -3
  81. package/dist/platform/media/builtin-generation-providers.d.ts.map +1 -1
  82. package/dist/platform/media/builtin-generation-providers.js +1 -6
  83. package/dist/platform/providers/anthropic-compat.d.ts.map +1 -1
  84. package/dist/platform/providers/anthropic-compat.js +11 -131
  85. package/dist/platform/providers/anthropic-sdk-provider.d.ts.map +1 -1
  86. package/dist/platform/providers/anthropic-sdk-provider.js +8 -42
  87. package/dist/platform/providers/anthropic-sse-assembler.d.ts +80 -0
  88. package/dist/platform/providers/anthropic-sse-assembler.d.ts.map +1 -0
  89. package/dist/platform/providers/anthropic-sse-assembler.js +146 -0
  90. package/dist/platform/providers/anthropic-stream.d.ts +30 -0
  91. package/dist/platform/providers/anthropic-stream.d.ts.map +1 -0
  92. package/dist/platform/providers/anthropic-stream.js +44 -0
  93. package/dist/platform/providers/anthropic-vertex.d.ts.map +1 -1
  94. package/dist/platform/providers/anthropic-vertex.js +1 -3
  95. package/dist/platform/providers/anthropic.d.ts.map +1 -1
  96. package/dist/platform/providers/anthropic.js +15 -151
  97. package/dist/platform/providers/capabilities.d.ts.map +1 -1
  98. package/dist/platform/providers/capabilities.js +11 -7
  99. package/dist/platform/providers/context-discovery.d.ts.map +1 -1
  100. package/dist/platform/providers/context-discovery.js +9 -16
  101. package/dist/platform/providers/context-window-fallback.d.ts +24 -0
  102. package/dist/platform/providers/context-window-fallback.d.ts.map +1 -0
  103. package/dist/platform/providers/context-window-fallback.js +48 -0
  104. package/dist/platform/providers/gemini.d.ts.map +1 -1
  105. package/dist/platform/providers/gemini.js +3 -6
  106. package/dist/platform/providers/json-ttl-cache.d.ts +35 -0
  107. package/dist/platform/providers/json-ttl-cache.d.ts.map +1 -0
  108. package/dist/platform/providers/json-ttl-cache.js +52 -0
  109. package/dist/platform/providers/llama-cpp.d.ts.map +1 -1
  110. package/dist/platform/providers/llama-cpp.js +2 -23
  111. package/dist/platform/providers/lm-studio-helpers.d.ts +1 -1
  112. package/dist/platform/providers/lm-studio-helpers.d.ts.map +1 -1
  113. package/dist/platform/providers/lm-studio-helpers.js +5 -25
  114. package/dist/platform/providers/model-benchmarks.d.ts.map +1 -1
  115. package/dist/platform/providers/model-benchmarks.js +11 -34
  116. package/dist/platform/providers/model-catalog-cache.d.ts.map +1 -1
  117. package/dist/platform/providers/model-catalog-cache.js +15 -38
  118. package/dist/platform/providers/model-catalog-synthetic.d.ts.map +1 -1
  119. package/dist/platform/providers/model-catalog-synthetic.js +3 -2
  120. package/dist/platform/providers/model-catalog.d.ts.map +1 -1
  121. package/dist/platform/providers/model-catalog.js +3 -2
  122. package/dist/platform/providers/model-limits.d.ts.map +1 -1
  123. package/dist/platform/providers/model-limits.js +18 -42
  124. package/dist/platform/providers/ollama.d.ts.map +1 -1
  125. package/dist/platform/providers/ollama.js +3 -24
  126. package/dist/platform/providers/openai-codex.d.ts.map +1 -1
  127. package/dist/platform/providers/openai-codex.js +8 -9
  128. package/dist/platform/providers/openai-compat.d.ts.map +1 -1
  129. package/dist/platform/providers/openai-compat.js +13 -40
  130. package/dist/platform/providers/openai-stream-helpers.d.ts +62 -0
  131. package/dist/platform/providers/openai-stream-helpers.d.ts.map +1 -0
  132. package/dist/platform/providers/openai-stream-helpers.js +73 -0
  133. package/dist/platform/providers/openai.d.ts.map +1 -1
  134. package/dist/platform/providers/openai.js +13 -41
  135. package/dist/platform/providers/provider-error.d.ts +17 -0
  136. package/dist/platform/providers/provider-error.d.ts.map +1 -0
  137. package/dist/platform/providers/provider-error.js +33 -0
  138. package/dist/platform/providers/provider-stop-reason.d.ts +15 -0
  139. package/dist/platform/providers/provider-stop-reason.d.ts.map +1 -0
  140. package/dist/platform/providers/provider-stop-reason.js +15 -0
  141. package/dist/platform/providers/sse-line-buffer.d.ts +13 -0
  142. package/dist/platform/providers/sse-line-buffer.d.ts.map +1 -0
  143. package/dist/platform/providers/sse-line-buffer.js +23 -0
  144. package/dist/platform/providers/tool-formats.d.ts +5 -0
  145. package/dist/platform/providers/tool-formats.d.ts.map +1 -1
  146. package/dist/platform/providers/tool-formats.js +14 -0
  147. package/dist/platform/runtime/bootstrap-runtime-events.d.ts.map +1 -1
  148. package/dist/platform/runtime/bootstrap-runtime-events.js +6 -0
  149. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  150. package/dist/platform/runtime/bootstrap-services.js +4 -5
  151. package/dist/platform/runtime/emitters/workflows.d.ts +4 -0
  152. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  153. package/dist/platform/runtime/emitters/workflows.js +3 -0
  154. package/dist/platform/runtime/remote/distributed-runtime-store.d.ts.map +1 -1
  155. package/dist/platform/runtime/remote/distributed-runtime-store.js +1 -3
  156. package/dist/platform/runtime/retention/pruner.js +2 -5
  157. package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
  158. package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +15 -14
  159. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts +6 -0
  160. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts.map +1 -1
  161. package/dist/platform/runtime/store/helpers/reducers/shared.js +8 -1
  162. package/dist/platform/runtime/telemetry/exporters/queue.d.ts.map +1 -1
  163. package/dist/platform/runtime/telemetry/exporters/queue.js +1 -7
  164. package/dist/platform/runtime/transports/http-helpers.d.ts +0 -1
  165. package/dist/platform/runtime/transports/http-helpers.d.ts.map +1 -1
  166. package/dist/platform/runtime/transports/http-helpers.js +1 -3
  167. package/dist/platform/runtime/ui-read-model-helpers.d.ts +2 -0
  168. package/dist/platform/runtime/ui-read-model-helpers.d.ts.map +1 -1
  169. package/dist/platform/runtime/ui-read-model-helpers.js +8 -0
  170. package/dist/platform/runtime/ui-read-models-core.d.ts.map +1 -1
  171. package/dist/platform/runtime/ui-read-models-core.js +3 -5
  172. package/dist/platform/runtime/ui-read-models-observability-remote.d.ts.map +1 -1
  173. package/dist/platform/runtime/ui-read-models-observability-remote.js +2 -4
  174. package/dist/platform/runtime/ui-read-models-operations.d.ts.map +1 -1
  175. package/dist/platform/runtime/ui-read-models-operations.js +8 -26
  176. package/dist/platform/scheduler/scheduler.d.ts.map +1 -1
  177. package/dist/platform/scheduler/scheduler.js +1 -3
  178. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  179. package/dist/platform/tools/exec/runtime.js +1 -7
  180. package/dist/platform/tools/fetch/runtime.d.ts.map +1 -1
  181. package/dist/platform/tools/fetch/runtime.js +9 -20
  182. package/dist/platform/tools/shared/process-manager.d.ts.map +1 -1
  183. package/dist/platform/tools/shared/process-manager.js +1 -6
  184. package/dist/platform/utils/concurrency.d.ts +1 -0
  185. package/dist/platform/utils/concurrency.d.ts.map +1 -1
  186. package/dist/platform/utils/concurrency.js +1 -0
  187. package/dist/platform/utils/error-display.d.ts +9 -0
  188. package/dist/platform/utils/error-display.d.ts.map +1 -1
  189. package/dist/platform/utils/error-display.js +11 -0
  190. package/dist/platform/utils/fetch-with-timeout.d.ts +22 -2
  191. package/dist/platform/utils/fetch-with-timeout.d.ts.map +1 -1
  192. package/dist/platform/utils/fetch-with-timeout.js +33 -15
  193. package/dist/platform/utils/record-coerce.d.ts +5 -0
  194. package/dist/platform/utils/record-coerce.d.ts.map +1 -1
  195. package/dist/platform/utils/record-coerce.js +7 -0
  196. package/dist/platform/utils/retry.d.ts.map +1 -1
  197. package/dist/platform/utils/retry.js +2 -4
  198. package/dist/platform/version.js +1 -1
  199. package/package.json +9 -9
@@ -177,6 +177,17 @@ function extractErrorMessage(error) {
177
177
  }
178
178
  return String(error);
179
179
  }
180
+ /**
181
+ * redactedErrorMessage — extracts and redacts a human-readable message from any thrown value.
182
+ *
183
+ * Use for user-facing error output where the raw message should never leak
184
+ * bearer tokens, API keys, or other sensitive data. Do NOT use for logger
185
+ * fields, structured result/error fields, or diagnostic context — use
186
+ * `summarizeError` or the structured `normalizeError` for those.
187
+ */
188
+ export function redactedErrorMessage(error) {
189
+ return redactSensitiveData(extractErrorMessage(error));
190
+ }
180
191
  export function normalizeError(error, options = {}) {
181
192
  // Redact Bearer tokens and API keys before any further processing.
182
193
  const rawMessage = redactSensitiveData(extractErrorMessage(error));
@@ -15,7 +15,25 @@ export declare function sanitizeUrlForLog(url: string | URL | Request): string;
15
15
  */
16
16
  export declare function instrumentedFetch(url: string | URL | Request, init?: RequestInit): Promise<Response>;
17
17
  /**
18
- * fetchWithTimeoutwraps the global fetch with an AbortController timeout.
18
+ * createTimeoutControllercreates an AbortController that fires after `timeoutMs`.
19
+ *
20
+ * When `parentSignal` is provided the returned signal is merged with it via
21
+ * AbortSignal.any so whichever fires first wins.
22
+ *
23
+ * Uses the faster `AbortSignal.timeout` fast-path when available and no parent
24
+ * signal needs to be merged.
25
+ *
26
+ * @param timeoutMs - Milliseconds before aborting.
27
+ * @param parentSignal - Optional caller signal to merge with the timeout.
28
+ * @returns `{ signal, dispose }` — call `dispose()` in a `finally` block to
29
+ * clear the underlying timer and avoid keeping the event loop alive.
30
+ */
31
+ export declare function createTimeoutController(timeoutMs: number, parentSignal?: AbortSignal): {
32
+ readonly signal: AbortSignal;
33
+ dispose(): void;
34
+ };
35
+ /**
36
+ * fetchWithTimeout — wraps a fetch implementation with an AbortController timeout.
19
37
  *
20
38
  * If the caller passes a signal that is already aborted, the request is
21
39
  * rejected immediately. When both a caller signal and the internal timeout
@@ -29,6 +47,8 @@ export declare function instrumentedFetch(url: string | URL | Request, init?: Re
29
47
  * @param url - The URL or Request to fetch.
30
48
  * @param init - Standard RequestInit (optional).
31
49
  * @param timeoutMs - Milliseconds before aborting. Default: 30 000.
50
+ * @param fetchImpl - Fetch implementation to use. Defaults to global `fetch`.
51
+ * Pass `instrumentedFetch` to include OUTBOUND_HTTP logging.
32
52
  */
33
- export declare function fetchWithTimeout(url: string | URL | Request, init?: RequestInit, timeoutMs?: number): Promise<Response>;
53
+ export declare function fetchWithTimeout(url: string | URL | Request, init?: RequestInit, timeoutMs?: number, fetchImpl?: (url: string | URL | Request, init?: RequestInit) => Promise<Response>): Promise<Response>;
34
54
  //# sourceMappingURL=fetch-with-timeout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-with-timeout.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/fetch-with-timeout.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,CAarE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC3B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAkBnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC3B,IAAI,CAAC,EAAE,WAAW,EAClB,SAAS,SAAS,GACjB,OAAO,CAAC,QAAQ,CAAC,CAmBnB"}
1
+ {"version":3,"file":"fetch-with-timeout.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/fetch-with-timeout.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,CAarE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC3B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAkBnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,WAAW,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,IAAI,IAAI,CAAA;CAAE,CAcnD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC3B,IAAI,CAAC,EAAE,WAAW,EAClB,SAAS,SAAS,EAClB,SAAS,GAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAS,GACxF,OAAO,CAAC,QAAQ,CAAC,CAQnB"}
@@ -57,7 +57,33 @@ export async function instrumentedFetch(url, init) {
57
57
  }
58
58
  }
59
59
  /**
60
- * fetchWithTimeoutwraps the global fetch with an AbortController timeout.
60
+ * createTimeoutControllercreates an AbortController that fires after `timeoutMs`.
61
+ *
62
+ * When `parentSignal` is provided the returned signal is merged with it via
63
+ * AbortSignal.any so whichever fires first wins.
64
+ *
65
+ * Uses the faster `AbortSignal.timeout` fast-path when available and no parent
66
+ * signal needs to be merged.
67
+ *
68
+ * @param timeoutMs - Milliseconds before aborting.
69
+ * @param parentSignal - Optional caller signal to merge with the timeout.
70
+ * @returns `{ signal, dispose }` — call `dispose()` in a `finally` block to
71
+ * clear the underlying timer and avoid keeping the event loop alive.
72
+ */
73
+ export function createTimeoutController(timeoutMs, parentSignal) {
74
+ if (typeof AbortSignal.timeout === 'function' && !parentSignal) {
75
+ return { signal: AbortSignal.timeout(timeoutMs), dispose: () => { } };
76
+ }
77
+ const controller = new AbortController();
78
+ const timer = setTimeout(() => controller.abort(new DOMException('Request timed out', 'TimeoutError')), timeoutMs);
79
+ timer.unref?.();
80
+ const signal = parentSignal
81
+ ? AbortSignal.any([parentSignal, controller.signal])
82
+ : controller.signal;
83
+ return { signal, dispose: () => clearTimeout(timer) };
84
+ }
85
+ /**
86
+ * fetchWithTimeout — wraps a fetch implementation with an AbortController timeout.
61
87
  *
62
88
  * If the caller passes a signal that is already aborted, the request is
63
89
  * rejected immediately. When both a caller signal and the internal timeout
@@ -71,24 +97,16 @@ export async function instrumentedFetch(url, init) {
71
97
  * @param url - The URL or Request to fetch.
72
98
  * @param init - Standard RequestInit (optional).
73
99
  * @param timeoutMs - Milliseconds before aborting. Default: 30 000.
100
+ * @param fetchImpl - Fetch implementation to use. Defaults to global `fetch`.
101
+ * Pass `instrumentedFetch` to include OUTBOUND_HTTP logging.
74
102
  */
75
- export async function fetchWithTimeout(url, init, timeoutMs = 30_000) {
76
- const controller = new AbortController();
77
- const timer = setTimeout(() => controller.abort(new DOMException('Request timed out', 'TimeoutError')), timeoutMs);
78
- timer.unref?.();
79
- let signal;
103
+ export async function fetchWithTimeout(url, init, timeoutMs = 30_000, fetchImpl = fetch) {
80
104
  const callerSignal = init?.signal;
81
- if (callerSignal) {
82
- // Merge caller signal + our timeout: first one to fire wins
83
- signal = AbortSignal.any([callerSignal, controller.signal]);
84
- }
85
- else {
86
- signal = controller.signal;
87
- }
105
+ const { signal, dispose } = createTimeoutController(timeoutMs, callerSignal);
88
106
  try {
89
- return await fetch(url, { ...init, signal });
107
+ return await fetchImpl(url, { ...init, signal });
90
108
  }
91
109
  finally {
92
- clearTimeout(timer);
110
+ dispose();
93
111
  }
94
112
  }
@@ -8,4 +8,9 @@
8
8
  * satisfy TypeScript's type system at the generic-dispatch boundary.
9
9
  */
10
10
  export declare function toRecord(value: unknown): Record<string, unknown>;
11
+ /**
12
+ * Type guard: returns true iff `value` is a plain object (non-null, non-array).
13
+ * Use this in place of the commonly hand-rolled `typeof x === 'object' && x !== null && !Array.isArray(x)`.
14
+ */
15
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
11
16
  //# sourceMappingURL=record-coerce.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-coerce.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/record-coerce.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE"}
1
+ {"version":3,"file":"record-coerce.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/record-coerce.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
@@ -10,3 +10,10 @@
10
10
  export function toRecord(value) {
11
11
  return value;
12
12
  }
13
+ /**
14
+ * Type guard: returns true iff `value` is a plain object (non-null, non-array).
15
+ * Use this in place of the commonly hand-rolled `typeof x === 'object' && x !== null && !Array.isArray(x)`.
16
+ */
17
+ export function isRecord(value) {
18
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
19
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/retry.ts"],"names":[],"mappings":"AAIA,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAOzE;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAOjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAaxD;AASD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACjE,OAAO,CAAC,CAAC,CAAC,CA4BZ"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/retry.ts"],"names":[],"mappings":"AAKA,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAOzE;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAOjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAaxD;AASD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACjE,OAAO,CAAC,CAAC,CAAC,CAyBZ"}
@@ -1,6 +1,7 @@
1
1
  import { randomInt } from 'node:crypto';
2
2
  import { AppError, RETRYABLE_STATUS_CODES } from '../types/errors.js';
3
3
  import { summarizeError } from './error-display.js';
4
+ import { sleep } from './concurrency.js';
4
5
  const DEFAULT_CONFIG = {
5
6
  maxRetries: 3,
6
7
  initialDelayMs: 1000,
@@ -70,10 +71,7 @@ export async function withRetry(fn, config, onRetry) {
70
71
  }
71
72
  const delayMs = computeDelay(attempt, cfg.initialDelayMs, cfg.maxDelayMs);
72
73
  onRetry?.(attempt + 1, lastError, delayMs);
73
- await new Promise((resolve) => {
74
- const timer = setTimeout(resolve, delayMs);
75
- timer.unref?.();
76
- });
74
+ await sleep(delayMs);
77
75
  }
78
76
  }
79
77
  throw lastError;
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.33.38';
3
+ let version = '0.34.1';
4
4
  try {
5
5
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
6
6
  version = pkg.version ?? version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-sdk",
3
- "version": "0.33.38",
3
+ "version": "0.34.1",
4
4
  "description": "TypeScript SDK for building GoodVibes operator, peer, web, mobile, and daemon-connected apps with typed contracts, auth, realtime events, and transport layers.",
5
5
  "keywords": [
6
6
  "goodvibes",
@@ -453,14 +453,14 @@
453
453
  "sideEffects": false,
454
454
  "type": "module",
455
455
  "dependencies": {
456
- "@pellux/goodvibes-contracts": "0.33.38",
457
- "@pellux/goodvibes-daemon-sdk": "0.33.38",
458
- "@pellux/goodvibes-errors": "0.33.38",
459
- "@pellux/goodvibes-operator-sdk": "0.33.38",
460
- "@pellux/goodvibes-peer-sdk": "0.33.38",
461
- "@pellux/goodvibes-transport-core": "0.33.38",
462
- "@pellux/goodvibes-transport-http": "0.33.38",
463
- "@pellux/goodvibes-transport-realtime": "0.33.38"
456
+ "@pellux/goodvibes-contracts": "0.34.1",
457
+ "@pellux/goodvibes-daemon-sdk": "0.34.1",
458
+ "@pellux/goodvibes-errors": "0.34.1",
459
+ "@pellux/goodvibes-operator-sdk": "0.34.1",
460
+ "@pellux/goodvibes-peer-sdk": "0.34.1",
461
+ "@pellux/goodvibes-transport-core": "0.34.1",
462
+ "@pellux/goodvibes-transport-http": "0.34.1",
463
+ "@pellux/goodvibes-transport-realtime": "0.34.1"
464
464
  },
465
465
  "optionalDependencies": {
466
466
  "@agentclientprotocol/sdk": "^0.21.0",