veryfront 0.1.630 → 0.1.632

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 (119) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/agent/ag-ui/handler.d.ts.map +1 -1
  3. package/esm/src/agent/ag-ui/handler.js +36 -3
  4. package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.d.ts.map +1 -1
  5. package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.js +9 -1
  6. package/esm/src/agent/hosted/child-fork-execution-runner.d.ts.map +1 -1
  7. package/esm/src/agent/hosted/child-fork-execution-runner.js +1 -0
  8. package/esm/src/agent/hosted/child-fork-step-message-preparation.d.ts.map +1 -1
  9. package/esm/src/agent/hosted/child-requested-tools.d.ts +1 -0
  10. package/esm/src/agent/hosted/child-requested-tools.d.ts.map +1 -1
  11. package/esm/src/agent/hosted/child-requested-tools.js +15 -5
  12. package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts.map +1 -1
  13. package/esm/src/agent/hosted/veryfront-cloud-agent-service.js +16 -3
  14. package/esm/src/agent/react/use-chat/streaming/handler.d.ts.map +1 -1
  15. package/esm/src/agent/react/use-chat/streaming/handler.js +32 -3
  16. package/esm/src/agent/react/use-chat/streaming/parts-builder.d.ts +2 -2
  17. package/esm/src/agent/react/use-chat/streaming/parts-builder.d.ts.map +1 -1
  18. package/esm/src/agent/react/use-chat/streaming/parts-builder.js +8 -1
  19. package/esm/src/agent/react/use-chat/streaming/types.d.ts +4 -0
  20. package/esm/src/agent/react/use-chat/streaming/types.d.ts.map +1 -1
  21. package/esm/src/agent/react/use-chat/types.d.ts +2 -2
  22. package/esm/src/agent/react/use-chat/types.d.ts.map +1 -1
  23. package/esm/src/agent/runtime/chat-stream-handler.d.ts +2 -0
  24. package/esm/src/agent/runtime/chat-stream-handler.d.ts.map +1 -1
  25. package/esm/src/agent/runtime/chat-stream-handler.js +151 -15
  26. package/esm/src/agent/runtime/index.d.ts +15 -0
  27. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  28. package/esm/src/agent/runtime/index.js +55 -1
  29. package/esm/src/agent/runtime/provider-native-tool-inventory.d.ts +1 -1
  30. package/esm/src/agent/runtime/provider-native-tool-inventory.d.ts.map +1 -1
  31. package/esm/src/agent/runtime/provider-native-tool-inventory.js +2 -7
  32. package/esm/src/agent/runtime/runtime-tool-types.d.ts +11 -0
  33. package/esm/src/agent/runtime/runtime-tool-types.d.ts.map +1 -1
  34. package/esm/src/agent/streaming/fork-runtime-stream.d.ts +1 -0
  35. package/esm/src/agent/streaming/fork-runtime-stream.d.ts.map +1 -1
  36. package/esm/src/agent/streaming/fork-runtime-stream.js +7 -5
  37. package/esm/src/agent/streaming/tool-execution-data-event-bridge.d.ts.map +1 -1
  38. package/esm/src/agent/streaming/tool-execution-data-event-bridge.js +4 -0
  39. package/esm/src/cache/registry.d.ts +13 -2
  40. package/esm/src/cache/registry.d.ts.map +1 -1
  41. package/esm/src/channels/control-plane.d.ts +9 -7
  42. package/esm/src/channels/control-plane.d.ts.map +1 -1
  43. package/esm/src/channels/control-plane.js +3 -1
  44. package/esm/src/channels/invoke.d.ts +2 -2
  45. package/esm/src/chat/protocol.d.ts +6 -1
  46. package/esm/src/chat/protocol.d.ts.map +1 -1
  47. package/esm/src/discovery/import-rewriter.d.ts.map +1 -1
  48. package/esm/src/discovery/import-rewriter.js +8 -1
  49. package/esm/src/embedding/veryfront-cloud/rag-store.d.ts.map +1 -1
  50. package/esm/src/embedding/veryfront-cloud/rag-store.js +4 -1
  51. package/esm/src/errors/error-registry.d.ts +4 -0
  52. package/esm/src/errors/error-registry.d.ts.map +1 -1
  53. package/esm/src/errors/error-registry.js +16 -0
  54. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts.map +1 -1
  55. package/esm/src/html/hydration-script-builder/hydration-data-generator.js +5 -1
  56. package/esm/src/html/utils.d.ts.map +1 -1
  57. package/esm/src/html/utils.js +11 -1
  58. package/esm/src/internal-agents/control-plane-auth.d.ts +3 -2
  59. package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
  60. package/esm/src/internal-agents/control-plane-auth.js +1 -1
  61. package/esm/src/mcp/server.d.ts.map +1 -1
  62. package/esm/src/mcp/server.js +8 -2
  63. package/esm/src/modules/react-loader/ssr-module-loader/cache/memory.d.ts.map +1 -1
  64. package/esm/src/modules/react-loader/ssr-module-loader/cache/memory.js +1 -0
  65. package/esm/src/platform/adapters/fs/veryfront/proxy-manager.d.ts.map +1 -1
  66. package/esm/src/platform/adapters/fs/veryfront/proxy-manager.js +2 -1
  67. package/esm/src/platform/compat/fs.d.ts.map +1 -1
  68. package/esm/src/platform/compat/fs.js +27 -27
  69. package/esm/src/provider/local/local-embedding-engine.d.ts.map +1 -1
  70. package/esm/src/provider/local/local-embedding-engine.js +18 -32
  71. package/esm/src/provider/local/local-engine.d.ts.map +1 -1
  72. package/esm/src/provider/local/local-engine.js +14 -26
  73. package/esm/src/provider/local/pipeline-cache.d.ts +27 -0
  74. package/esm/src/provider/local/pipeline-cache.d.ts.map +1 -0
  75. package/esm/src/provider/local/pipeline-cache.js +61 -0
  76. package/esm/src/proxy/handler.d.ts.map +1 -1
  77. package/esm/src/proxy/handler.js +21 -1
  78. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts +1 -1
  79. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts.map +1 -1
  80. package/esm/src/react/components/chat/chat/composition/chat-composer.js +1 -1
  81. package/esm/src/react/components/chat/markdown.d.ts.map +1 -1
  82. package/esm/src/react/components/chat/markdown.js +0 -9
  83. package/esm/src/runs/index.d.ts +1 -1
  84. package/esm/src/runs/index.d.ts.map +1 -1
  85. package/esm/src/runs/schemas.d.ts +221 -0
  86. package/esm/src/runs/schemas.d.ts.map +1 -1
  87. package/esm/src/runs/schemas.js +29 -0
  88. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  89. package/esm/src/server/handlers/dev/framework-candidates.generated.js +76 -5
  90. package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -1
  91. package/esm/src/server/handlers/request/internal-agents-list.handler.js +1 -0
  92. package/esm/src/server/runtime-handler/index.js +2 -2
  93. package/esm/src/server/runtime-handler/local-project-discovery.d.ts +0 -10
  94. package/esm/src/server/runtime-handler/local-project-discovery.d.ts.map +1 -1
  95. package/esm/src/server/runtime-handler/local-project-discovery.js +0 -10
  96. package/esm/src/server/runtime-handler/projects-handler.js +3 -3
  97. package/esm/src/server/services/rsc/endpoints/endpoint-router.d.ts.map +1 -1
  98. package/esm/src/server/services/rsc/endpoints/endpoint-router.js +5 -1
  99. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.d.ts.map +1 -1
  100. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +2 -2
  101. package/esm/src/transforms/esm/http-cache-types.d.ts +24 -0
  102. package/esm/src/transforms/esm/http-cache-types.d.ts.map +1 -1
  103. package/esm/src/transforms/esm/http-cache-types.js +30 -1
  104. package/esm/src/transforms/esm/http-cache-wrapper.d.ts +1 -1
  105. package/esm/src/transforms/esm/http-cache-wrapper.d.ts.map +1 -1
  106. package/esm/src/transforms/esm/http-cache-wrapper.js +14 -13
  107. package/esm/src/transforms/mdx/esm-module-loader/module-writer.d.ts.map +1 -1
  108. package/esm/src/transforms/mdx/esm-module-loader/module-writer.js +8 -2
  109. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/transform.d.ts.map +1 -1
  110. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/transform.js +8 -1
  111. package/esm/src/utils/circuit-breaker.d.ts +9 -1
  112. package/esm/src/utils/circuit-breaker.d.ts.map +1 -1
  113. package/esm/src/utils/circuit-breaker.js +18 -2
  114. package/esm/src/utils/semaphore.d.ts +9 -1
  115. package/esm/src/utils/semaphore.d.ts.map +1 -1
  116. package/esm/src/utils/semaphore.js +18 -2
  117. package/esm/src/utils/version-constant.d.ts +1 -1
  118. package/esm/src/utils/version-constant.js +1 -1
  119. package/package.json +1 -1
@@ -10,43 +10,29 @@
10
10
  import { serverLogger } from "../../utils/index.js";
11
11
  import { resolveLocalEmbeddingModel } from "./model-catalog.js";
12
12
  import { getTransformers } from "./local-engine.js";
13
+ import { createPipelineCache } from "./pipeline-cache.js";
13
14
  const logger = serverLogger.component("local-embedding");
14
- /** Cached pipeline instances keyed by HuggingFace model ID */
15
- const pipelineCache = new Map();
16
- /** Whether a model is currently being loaded (prevents concurrent loads) */
17
- const loadingLocks = new Map();
15
+ /**
16
+ * Bounded, dedup-aware cache of feature-extraction pipelines keyed by
17
+ * HuggingFace model id. Only loads a model on a cold cache miss; concurrent
18
+ * loads of the same model share a single promise.
19
+ */
20
+ const embeddingPipelines = createPipelineCache(async (modelInfo) => {
21
+ const transformers = await getTransformers();
22
+ logger.info(`Loading local embedding model: ${modelInfo.hfId} (${modelInfo.dtype}, ~${modelInfo.sizeMB}MB)...`);
23
+ const pipe = (await transformers.pipeline("feature-extraction", modelInfo.hfId, {
24
+ dtype: modelInfo.dtype,
25
+ device: "cpu",
26
+ }));
27
+ logger.info(`Embedding model loaded: ${modelInfo.hfId}`);
28
+ return pipe;
29
+ });
18
30
  /**
19
31
  * Load a feature-extraction pipeline for the given model.
20
32
  * Returns a cached pipeline if already loaded.
21
33
  */
22
- async function loadPipeline(modelInfo) {
23
- const cacheKey = modelInfo.hfId;
24
- const cached = pipelineCache.get(cacheKey);
25
- if (cached)
26
- return cached;
27
- const existingLock = loadingLocks.get(cacheKey);
28
- if (existingLock)
29
- return existingLock;
30
- const loadPromise = (async () => {
31
- const transformers = await getTransformers();
32
- logger.info(`Loading local embedding model: ${modelInfo.hfId} (${modelInfo.dtype}, ~${modelInfo.sizeMB}MB)...`);
33
- const pipe = (await transformers.pipeline("feature-extraction", modelInfo.hfId, {
34
- dtype: modelInfo.dtype,
35
- device: "cpu",
36
- }));
37
- logger.info(`Embedding model loaded: ${modelInfo.hfId}`);
38
- pipelineCache.set(cacheKey, pipe);
39
- loadingLocks.delete(cacheKey);
40
- return pipe;
41
- })();
42
- loadingLocks.set(cacheKey, loadPromise);
43
- try {
44
- return await loadPromise;
45
- }
46
- catch (error) {
47
- loadingLocks.delete(cacheKey);
48
- throw error;
49
- }
34
+ function loadPipeline(modelInfo) {
35
+ return embeddingPipelines.load(modelInfo.hfId, modelInfo);
50
36
  }
51
37
  /**
52
38
  * Generate embeddings for an array of texts using a local model.
@@ -1 +1 @@
1
- {"version":3,"file":"local-engine.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/local/local-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,gGAAgG;AAChG,UAAU,wBAAwB;IAChC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;CACzD;AAED,UAAU,4BAA6B,SAAQ,wBAAwB;IACrE,IAAI,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAC;CACjD;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,eAAe,CAAC;IACrB,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KACvC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,YAAY,EAAE,KACZ,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE;QACP,WAAW,EAAE,OAAO,CAAC;QACrB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C,KACE,OAAO,CAAC;IAIb,gBAAgB,EAAE,UAAU,wBAAwB,CAAC;IACrD,oBAAoB,EAAE,UAAU,4BAA4B,CAAC;CAC9D;AAED,yEAAyE;AACzE,UAAU,iBAAiB;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;CAClC;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;CAClD;AAiDD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,sBAAsB,CAAC,EACnF,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,OAAO,GAChB,WAAW,CA2Bb;AAkBD;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CA8BnE;AAuED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED;;;;GAIG;AACH,wBAAuB,cAAc,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CA2DzC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGtD"}
1
+ {"version":3,"file":"local-engine.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/local/local-engine.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ import { createError, toError } from "../../errors/veryfront-error.js";
15
15
  import { importTransformers } from "../../platform/compat/opaque-deps.js";
16
16
  import { DEFAULT_LOCAL_MODEL, resolveLocalModel } from "./model-catalog.js";
17
17
  import { throwIfLocalAIDisabled } from "./env.js";
18
+ import { createPipelineCache } from "./pipeline-cache.js";
18
19
  const logger = serverLogger.component("local-llm");
19
20
  /** Default maximum new tokens for local model generation */
20
21
  const DEFAULT_MAX_NEW_TOKENS = 512;
@@ -82,10 +83,6 @@ export function buildPipeOptions(options, transformers, tokenizer, streamer) {
82
83
  }
83
84
  return pipeOptions;
84
85
  }
85
- /** Cached pipeline instances keyed by HuggingFace model ID */
86
- const pipelineCache = new Map();
87
- /** Whether a model is currently being loaded (prevents concurrent loads) */
88
- const loadingLocks = new Map();
89
86
  let transformersModule = null;
90
87
  /**
91
88
  * Lazily import @huggingface/transformers.
@@ -117,21 +114,12 @@ export async function getTransformers() {
117
114
  return mod;
118
115
  }
119
116
  /**
120
- * Load a text-generation pipeline for the given model.
121
- * Returns a cached pipeline if already loaded.
117
+ * Bounded, dedup-aware cache of text-generation pipelines keyed by HuggingFace
118
+ * model id. Only loads a model on a cold cache miss; concurrent loads of the
119
+ * same model share a single promise.
122
120
  */
123
- async function loadPipeline(modelInfo) {
124
- const cacheKey = modelInfo.hfId;
125
- // Return cached pipeline
126
- const cached = pipelineCache.get(cacheKey);
127
- if (cached)
128
- return cached;
129
- // Wait for existing load if in progress
130
- const existingLock = loadingLocks.get(cacheKey);
131
- if (existingLock)
132
- return existingLock;
133
- // Start loading
134
- const loadPromise = (async () => {
121
+ const textGenerationPipelines = createPipelineCache(async (modelInfo) => {
122
+ try {
135
123
  const transformers = await getTransformers();
136
124
  logger.info(`Loading local model: ${modelInfo.hfId} (${modelInfo.dtype}, ~${modelInfo.sizeMB}MB)...`);
137
125
  const pipe = (await transformers.pipeline("text-generation", modelInfo.hfId, {
@@ -139,16 +127,9 @@ async function loadPipeline(modelInfo) {
139
127
  device: "cpu",
140
128
  }));
141
129
  logger.info(`Model loaded: ${modelInfo.hfId}`);
142
- pipelineCache.set(cacheKey, pipe);
143
- loadingLocks.delete(cacheKey);
144
130
  return pipe;
145
- })();
146
- loadingLocks.set(cacheKey, loadPromise);
147
- try {
148
- return await loadPromise;
149
131
  }
150
132
  catch (error) {
151
- loadingLocks.delete(cacheKey);
152
133
  // Convert ONNX / native-addon errors to no_ai_available so they propagate
153
134
  // correctly through the chat handler (503) instead of being swallowed as
154
135
  // in-band SSE errors inside a 200 response stream.
@@ -166,6 +147,13 @@ async function loadPipeline(modelInfo) {
166
147
  }
167
148
  throw error;
168
149
  }
150
+ });
151
+ /**
152
+ * Load a text-generation pipeline for the given model.
153
+ * Returns a cached pipeline if already loaded.
154
+ */
155
+ function loadPipeline(modelInfo) {
156
+ return textGenerationPipelines.load(modelInfo.hfId, modelInfo);
169
157
  }
170
158
  /**
171
159
  * Eagerly verify that the local AI runtime (@huggingface/transformers + ONNX)
@@ -262,5 +250,5 @@ export async function preloadModel(modelId) {
262
250
  */
263
251
  export function isModelLoaded(modelId) {
264
252
  const modelInfo = resolveLocalModel(modelId);
265
- return pipelineCache.has(modelInfo.hfId);
253
+ return textGenerationPipelines.has(modelInfo.hfId);
266
254
  }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Shared pipeline cache for local Transformers.js engines.
3
+ *
4
+ * Both the text-generation engine (`local-engine.ts`) and the embedding engine
5
+ * (`local-embedding-engine.ts`) need to lazily load a pipeline per HuggingFace
6
+ * model id, cache it, and deduplicate concurrent loads of the same model. This
7
+ * helper captures that shared behavior and bounds the cache with an LRU so a
8
+ * long-running process that touches many models cannot grow memory without
9
+ * limit (loaded models are large).
10
+ *
11
+ * @module provider/local
12
+ */
13
+ /** A loaded pipeline cache with concurrency-safe, deduplicated loading. */
14
+ export interface PipelineCache<P, M> {
15
+ /** Load (or return cached) pipeline for the given model id. */
16
+ load(cacheKey: string, modelInfo: M): Promise<P>;
17
+ /** Whether a pipeline for the given model id is currently loaded. */
18
+ has(cacheKey: string): boolean;
19
+ }
20
+ /**
21
+ * Create a bounded, dedup-aware pipeline cache.
22
+ *
23
+ * @param loadFn Loads the underlying pipeline for a model. Only invoked on a
24
+ * cold cache miss; concurrent loads of the same key share a single promise.
25
+ */
26
+ export declare function createPipelineCache<P, M>(loadFn: (modelInfo: M) => Promise<P>): PipelineCache<P, M>;
27
+ //# sourceMappingURL=pipeline-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/local/pipeline-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,2EAA2E;AAC3E,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,+DAA+D;IAC/D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,qEAAqE;IACrE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EACtC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACnC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAwCrB"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Shared pipeline cache for local Transformers.js engines.
3
+ *
4
+ * Both the text-generation engine (`local-engine.ts`) and the embedding engine
5
+ * (`local-embedding-engine.ts`) need to lazily load a pipeline per HuggingFace
6
+ * model id, cache it, and deduplicate concurrent loads of the same model. This
7
+ * helper captures that shared behavior and bounds the cache with an LRU so a
8
+ * long-running process that touches many models cannot grow memory without
9
+ * limit (loaded models are large).
10
+ *
11
+ * @module provider/local
12
+ */
13
+ import { LRUCache } from "../../utils/lru-wrapper.js";
14
+ /**
15
+ * Maximum number of loaded pipelines kept in memory at once. Loaded models are
16
+ * large (hundreds of MB each), so the cap is intentionally small.
17
+ */
18
+ const PIPELINE_CACHE_MAX_ENTRIES = 4;
19
+ /**
20
+ * Create a bounded, dedup-aware pipeline cache.
21
+ *
22
+ * @param loadFn Loads the underlying pipeline for a model. Only invoked on a
23
+ * cold cache miss; concurrent loads of the same key share a single promise.
24
+ */
25
+ export function createPipelineCache(loadFn) {
26
+ const pipelineCache = new LRUCache({
27
+ maxEntries: PIPELINE_CACHE_MAX_ENTRIES,
28
+ });
29
+ // Whether a model is currently being loaded (prevents concurrent loads).
30
+ const loadingLocks = new Map();
31
+ return {
32
+ async load(cacheKey, modelInfo) {
33
+ // Return cached pipeline.
34
+ const cached = pipelineCache.get(cacheKey);
35
+ if (cached)
36
+ return cached;
37
+ // Wait for existing load if in progress.
38
+ const existingLock = loadingLocks.get(cacheKey);
39
+ if (existingLock)
40
+ return existingLock;
41
+ // Start loading.
42
+ const loadPromise = (async () => {
43
+ const pipe = await loadFn(modelInfo);
44
+ pipelineCache.set(cacheKey, pipe);
45
+ loadingLocks.delete(cacheKey);
46
+ return pipe;
47
+ })();
48
+ loadingLocks.set(cacheKey, loadPromise);
49
+ try {
50
+ return await loadPromise;
51
+ }
52
+ catch (error) {
53
+ loadingLocks.delete(cacheKey);
54
+ throw error;
55
+ }
56
+ },
57
+ has(cacheKey) {
58
+ return pipelineCache.has(cacheKey);
59
+ },
60
+ };
61
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAuCnD;;;;;GAKG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAqHX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAgGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;0BAkR1B,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC;0BAmQ/B,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BA1d7C,MAAM,EAAE;;EAsfpC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAwB7E"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAoDnD;;;;;GAKG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAqHX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAgGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;0BA2R1B,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC;0BAmQ/B,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BA1d7C,MAAM,EAAE;;EAsfpC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAwB7E"}
@@ -6,6 +6,18 @@ import { join } from "../platform/compat/path/index.js";
6
6
  import { injectContext, ProxySpanNames, withSpan } from "./tracing.js";
7
7
  import { computeContentSourceId } from "../cache/keys.js";
8
8
  import { resolve as resolveContract } from "../extensions/contracts.js";
9
+ import { LRUCache } from "../utils/lru-wrapper.js";
10
+ import { registerLRUCache } from "../cache/index.js";
11
+ /**
12
+ * Bounded cache for project paths discovered dynamically at request time
13
+ * (slug → absolute path). Previously these were written into the per-handler
14
+ * `localProjects` config map, which grew without bound. Using a registered
15
+ * LRU keeps the working set capped and exposes it to cache monitoring, while
16
+ * the static `config.localProjects` map continues to reflect *configured*
17
+ * projects for the public `ProxyHandler.localProjects` surface.
18
+ */
19
+ const discoveredLocalProjects = new LRUCache({ maxEntries: 100 });
20
+ registerLRUCache("proxy-discovered-local-projects", discoveredLocalProjects);
9
21
  /**
10
22
  * Cache the resolved AuthProvider at module scope so the proxy does not pay
11
23
  * the registry lookup on every request. The cache is cleared implicitly when
@@ -216,6 +228,14 @@ export function createProxyHandler(options) {
216
228
  return mapped;
217
229
  const projectDirs = ["projects", "data/projects", "examples"];
218
230
  const basePath = cwd();
231
+ // Key the discovery cache by the filesystem root as well as the slug: the
232
+ // cache is process-wide, so the same slug can resolve to different paths
233
+ // across handlers/workspaces or after a cwd change. Keying by basePath
234
+ // prevents a stale entry from one root being proxied for another.
235
+ const cacheKey = `${basePath}${slug}`;
236
+ const cached = discoveredLocalProjects.get(cacheKey);
237
+ if (cached)
238
+ return cached;
219
239
  const candidatePaths = projectDirs.map((dir) => join(basePath, dir, slug));
220
240
  const existingPaths = await Promise.all(candidatePaths.map(async (projectPath) => {
221
241
  try {
@@ -237,7 +257,7 @@ export function createProxyHandler(options) {
237
257
  ]);
238
258
  if (!hasApp && !hasPages && !hasComponents)
239
259
  continue;
240
- localProjects[slug] = projectPath;
260
+ discoveredLocalProjects.set(cacheKey, projectPath);
241
261
  logger?.debug("Dynamically discovered local project", { slug, projectPath });
242
262
  return projectPath;
243
263
  }
@@ -12,7 +12,7 @@ import type { ChatMessage } from "../../../../../agent/react/index.js";
12
12
  export interface ChatComposerProps {
13
13
  input: string;
14
14
  onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
15
- onSubmit?: (e: React.FormEvent) => void;
15
+ onSubmit?: (e?: React.FormEvent) => void;
16
16
  isLoading?: boolean;
17
17
  placeholder?: string;
18
18
  theme?: ChatTheme;
@@ -1 +1 @@
1
- {"version":3,"file":"chat-composer.d.ts","sourceRoot":"","sources":["../../../../../../../src/src/react/components/chat/chat/composition/chat-composer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,MAAM,kCAAkC,CAAC;AAI1D,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,IAAI,CAAC;IACjF,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAGlB,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,4BAA4B;AAC5B,eAAO,MAAM,YAAY,0FAwMxB,CAAC"}
1
+ {"version":3,"file":"chat-composer.d.ts","sourceRoot":"","sources":["../../../../../../../src/src/react/components/chat/chat/composition/chat-composer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,MAAM,kCAAkC,CAAC;AAI1D,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,IAAI,CAAC;IACjF,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAGlB,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,4BAA4B;AAC5B,eAAO,MAAM,YAAY,0FAyMxB,CAAC"}
@@ -57,7 +57,7 @@ export const ChatComposer = React.forwardRef(function ChatComposer({ input, onCh
57
57
  setAttachmentMenuOpen(false);
58
58
  onSelectAttachment();
59
59
  } }, "Select document")))))),
60
- React.createElement(InputBox, { value: isListening ? transcript || input : input, onChange: onChange, placeholder: isListening ? "Listening..." : placeholder, disabled: isLoading || isListening, multiline: true, className: cn("min-h-9 flex-1 py-2", theme?.input) }),
60
+ React.createElement(InputBox, { value: isListening ? transcript || input : input, onChange: onChange, onSubmit: () => onSubmit?.(), placeholder: isListening ? "Listening..." : placeholder, disabled: isLoading || isListening, multiline: true, className: cn("min-h-9 flex-1 py-2", theme?.input) }),
61
61
  React.createElement("div", { className: "flex items-center gap-2" },
62
62
  models && models.length > 0 && onModelChange && (React.createElement(ModelSelector, { models: models, value: model, onChange: onModelChange, disabled: isLoading })),
63
63
  showExport && messages && messages.length > 0 && (React.createElement("button", { type: "button", onClick: () => downloadMarkdown(messages), className: "size-9 flex items-center justify-center rounded-full text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--foreground)]/5 transition-colors shrink-0", "aria-label": "Export conversation", title: "Export as Markdown" },
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../../src/src/react/components/chat/markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC;AAMpD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAkKD,uBAAuB;AACvB,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,aAAoB,EACpB,eAAe,GAChB,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CA+FpC"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../../src/src/react/components/chat/markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC;AAMpD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+LD,uBAAuB;AACvB,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,aAAoB,EACpB,eAAe,GAChB,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CA2FpC"}
@@ -10,15 +10,10 @@ const ESM_MERMAID = "https://esm.sh/mermaid@11.4.1?pin=v135";
10
10
  async function importFromUrl(url) {
11
11
  return await import(/* @vite-ignore */ url);
12
12
  }
13
- // deno-lint-ignore no-explicit-any
14
13
  let ReactMarkdown = null;
15
- // deno-lint-ignore no-explicit-any
16
14
  let remarkGfm = null;
17
- // deno-lint-ignore no-explicit-any
18
15
  let rehypeHighlight = null;
19
- // deno-lint-ignore no-explicit-any
20
16
  let mermaidPromise = null;
21
- // deno-lint-ignore no-explicit-any
22
17
  let mermaidModule = null;
23
18
  async function loadMermaid() {
24
19
  if (!isBrowserEnvironment())
@@ -126,7 +121,6 @@ export function Markdown({ children, className, enableMermaid = true, renderCode
126
121
  }
127
122
  return (React.createElement("div", { className: cn("prose prose-sm max-w-none", className) },
128
123
  React.createElement(ReactMarkdown, { remarkPlugins: remarkGfm ? [remarkGfm] : [], rehypePlugins: rehypeHighlight ? [rehypeHighlight] : [], components: {
129
- // deno-lint-ignore no-explicit-any
130
124
  code(props) {
131
125
  const { className: codeClassName, children: codeChildren, node } = props;
132
126
  const match = /language-(\w+)/.exec(codeClassName || "");
@@ -135,16 +129,13 @@ export function Markdown({ children, className, enableMermaid = true, renderCode
135
129
  const isInline = !node?.position?.start?.line;
136
130
  return (React.createElement(CodeBlock, { language: language, code: code, inline: isInline, enableMermaid: enableMermaid, renderCodeBlock: renderCodeBlock }));
137
131
  },
138
- // deno-lint-ignore no-explicit-any
139
132
  table(props) {
140
133
  return (React.createElement("div", { className: "my-4 overflow-auto" },
141
134
  React.createElement("table", { className: "min-w-full divide-y divide-[var(--border)]" }, props.children)));
142
135
  },
143
- // deno-lint-ignore no-explicit-any
144
136
  a(props) {
145
137
  return (React.createElement("a", { href: props.href, className: "text-blue-600 hover:underline", target: "_blank", rel: "noopener noreferrer" }, props.children));
146
138
  },
147
- // deno-lint-ignore no-explicit-any
148
139
  blockquote(props) {
149
140
  return (React.createElement("blockquote", { className: "border-l-4 border-[var(--border)] pl-4 my-4 text-[var(--card-foreground)] italic" }, props.children));
150
141
  },
@@ -23,5 +23,5 @@
23
23
  */
24
24
  import "../../_dnt.polyfills.js";
25
25
  export { createRunsClient, type CreateTaskRunInput, type CreateWorkflowRunInput, type KnowledgeIngestByUploadIdsInput, type KnowledgeIngestByUploadPathsInput, type KnowledgeIngestByUploadPrefixInput, type ListRunEventsOptions, type ListRunsOptions, type ProjectScopedOptions, type RunRuntimeTargetKind, type RunRuntimeTargetOptions, VeryfrontRunsClient, type VeryfrontRunsClientConfig, } from "./runs-client.js";
26
- export { type CancelRunResponse, CancelRunResponseSchema, type CreateRunResponse, CreateRunResponseSchema, type Run, type RunEvent, RunEventListSchema, RunEventSchema, type RunKind, type RunList, RunListSchema, type RunOwner, RunSchema, type RunStatus, } from "./schemas.js";
26
+ export { type CancelRunResponse, CancelRunResponseSchema, type CreateRunResponse, CreateRunResponseSchema, type Run, type RunEvent, RunEventListSchema, RunEventSchema, type RunExecutionError, type RunKind, type RunList, RunListSchema, type RunOwner, RunSchema, type RunStatus, type RunTriggerKind, } from "./schemas.js";
27
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/runs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EACL,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACtC,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,mBAAmB,EACnB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,KAAK,GAAG,EACR,KAAK,QAAQ,EACb,kBAAkB,EAClB,cAAc,EACd,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,aAAa,EACb,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,SAAS,GACf,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/runs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EACL,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACtC,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,mBAAmB,EACnB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,KAAK,GAAG,EACR,KAAK,QAAQ,EACb,kBAAkB,EAClB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,aAAa,EACb,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC"}