@standardagents/builder 0.27.2 → 0.27.4

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.
@@ -262,6 +262,7 @@ interface ThreadInstance {
262
262
  hooks(): HookRegistry;
263
263
  getValue<T = unknown>(key: string): Promise<T | null>;
264
264
  setValue(key: string, value: unknown): Promise<void>;
265
+ emitThreadEvent?(threadId: string, event: string, data: unknown): void | Promise<void>;
265
266
  callClientTool?(request: ClientToolRequest): Promise<ClientToolResponse>;
266
267
  registerCodeExecutionBridge?(runId: string, bridge: {
267
268
  call(functionId: string, encodedArgs: unknown[]): Promise<unknown>;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ModelDefinition, AgentDefinition } from './runtime.js';
2
2
  export { AgentBuilderEnv, AuthContext, AuthUser, BroadcastOptions, CodeExecutionBridge, DurableAgentBuilder, DurableThread, FlowStateSdk, FlowStateWithSdk, ImageContextConfig, InjectMessageOptions, LLMProviderInterface, NamespaceResolutionError, PromptContent, PromptDefinition, PromptIncludePart, PromptPart, PromptToolConfig, Provider, ProviderContentPart, ProviderFilePart, ProviderImagePart, ProviderRegistry, ProviderTextPart, SessionToolBinding, SessionToolConfig, SideConfig, SubagentToolConfig, SubpromptConfig, ThreadRegistryEntry, ThreadWatchdog, ThreadWatchdogState, ToolConfig, UpdateThreadParams, User, WatchdogCheckin, WatchdogProbeResult, authenticate, buildImageDescription, cat, createNamespaceContext, emitThreadEvent, enhanceFlowState, exists, find, forceTurn, generateImageDescription, getFileStats, getMessages, getMessagesToSummarize, getShortName, getThumbnail, getUnsummarizedImageAttachments, getVisibleAgentNames, getVisibleModelNames, getVisiblePromptNames, getVisibleToolNames, grep, hasImageAttachments, head, injectMessage, isQualifiedName, linkFile, mkdir, move, optimizeImageContext, parseQualifiedName, qualifyName, queueTool, readFile, readdir, reloadHistory, rename, replaceImagesWithDescriptions, requireAdmin, requireAuth, resolveAgent, resolveHook, resolveModel, resolvePrompt, resolveTool, rmdir, stat, tail, unlink, updateThread, writeFile, writeImage } from './runtime.js';
3
3
  export { AgentPluginOptions, agentbuilder, builder } from './plugin.js';
4
- export { A as Agent, m as AttachmentRef, f as BuilderThreadEndpointHandler, B as Controller, a as ControllerContext, E as Env, l as FileRecord, n as FileStats, j as FlowResult, F as FlowState, G as GrepResult, p as ImageContentPart, I as ImageMetadata, L as LLMResponse, M as Message, r as MessageContent, q as MultimodalContent, R as RequestContext, S as StorageBackend, k as TelemetryEvent, o as TextContentPart, b as ThreadEndpointContext, e as ThreadEnv, g as ThreadInstance, h as ThreadMetadata, T as ToolCall, i as ToolResult, c as createThreadEndpointHandler, d as defineController } from './index-DJ7B8CTp.js';
4
+ export { A as Agent, m as AttachmentRef, f as BuilderThreadEndpointHandler, B as Controller, a as ControllerContext, E as Env, l as FileRecord, n as FileStats, j as FlowResult, F as FlowState, G as GrepResult, p as ImageContentPart, I as ImageMetadata, L as LLMResponse, M as Message, r as MessageContent, q as MultimodalContent, R as RequestContext, S as StorageBackend, k as TelemetryEvent, o as TextContentPart, b as ThreadEndpointContext, e as ThreadEnv, g as ThreadInstance, h as ThreadMetadata, T as ToolCall, i as ToolResult, c as createThreadEndpointHandler, d as defineController } from './index-DReIS8eP.js';
5
5
  export { AgentType, DefinitionLoader, GlobalNamespaceContext, HookSignatures, ImageContent, ModelCapabilities, ModelProvider, NamespaceContext, PackageSignature, PackedExports, PackedMeta, PackedMetadata, PackedNamespaceContext, PromptInput, PromptTextPart, ProviderAssistantMessage, ProviderConfigSlot, ProviderConfigSlots, ProviderConfigValueSource, ProviderDefinition, ProviderError, ProviderErrorCode, ProviderFactory, ProviderFactoryConfig, ProviderFinishReason, ProviderGeneratedImage, ProviderMessage, ProviderMessageContent, ProviderMethodOverrides, ModelCapabilities as ProviderModelCapabilities, ProviderOverride, ProviderOverrideContext, ProviderReasoningDetail, ProviderRequest, ProviderResponse, ProviderStreamChunk, ProviderSyncOverride, ProviderSystemMessage, ProviderTool, ProviderToolCallPart, ProviderToolMessage, ProviderToolResultContent, ProviderUsage, ProviderUserMessage, ReasoningConfig, StructuredPrompt, TextContent, Tool, ToolArgs, ToolArgsNode, ToolArgsRawShape, ToolContent, belongsToPackage, defineAgent, defineHook, defineModel, definePrompt, defineProvider, defineTool, isPacked, isVisibleInNamespace, mapReasoningLevel, providerConst, providerEnv, providerValue } from '@standardagents/spec';
6
6
  export { C as ConstituentItem, D as DiscoveredPackage, N as NamespacedRegistry, P as PackingAnalysis, a as PackingOptions, b as PackingResult, c as UnpackOptions, d as UnpackResult } from './types-Bpe7IANZ.js';
7
7
  export { D as DiscoveryConfig, P as PackageDiscoveryService, d as discoverPackages } from './discovery-DiMJWisl.js';
package/dist/index.js CHANGED
@@ -12703,6 +12703,7 @@ var init_ThreadStateImpl = __esm({
12703
12703
  _executionState = null;
12704
12704
  _childrenCache = [];
12705
12705
  _terminatedCache = null;
12706
+ _pendingEventDeliveries = /* @__PURE__ */ new Set();
12706
12707
  constructor(flowState, threadInstance, metadata, runtimeContext = {}) {
12707
12708
  this._flowState = flowState;
12708
12709
  this._threadInstance = threadInstance;
@@ -13154,6 +13155,22 @@ var init_ThreadStateImpl = __esm({
13154
13155
  emit(event, data) {
13155
13156
  if (this._flowState?.emitEvent) {
13156
13157
  this._flowState.emitEvent(event, data);
13158
+ return;
13159
+ }
13160
+ if (this._threadInstance.emitThreadEvent) {
13161
+ const delivery = this._threadInstance.emitThreadEvent(this.threadId, event, data);
13162
+ if (delivery && typeof delivery.then === "function") {
13163
+ const pending = Promise.resolve(delivery).catch((error) => {
13164
+ console.error(`[ThreadState] Custom event "${event}" delivery failed:`, error);
13165
+ }).finally(() => this._pendingEventDeliveries.delete(pending));
13166
+ this._pendingEventDeliveries.add(pending);
13167
+ }
13168
+ }
13169
+ }
13170
+ /** Runtime-only drain used by thread endpoint wrappers before responding. */
13171
+ async flushPendingEventDeliveries() {
13172
+ while (this._pendingEventDeliveries.size > 0) {
13173
+ await Promise.all([...this._pendingEventDeliveries]);
13157
13174
  }
13158
13175
  }
13159
13176
  // ─────────────────────────────────────────────────────────────────────────
@@ -21399,7 +21416,11 @@ ${packedThreadRouteCode}
21399
21416
  authContext = authResult;
21400
21417
 
21401
21418
  if (routePath.startsWith('/api/threads/')) {
21402
- const threadId = routeMatch.params?.id || routeMatch.params?.threadId;
21419
+ // Packed and user thread endpoints reserve threadId for the owning
21420
+ // thread while nested endpoint parameters may also be named id.
21421
+ // Prefer the explicit thread parameter so /pending/:id and similar
21422
+ // routes authorize against the thread instead of the nested resource.
21423
+ const threadId = routeMatch.params?.threadId || routeMatch.params?.id;
21403
21424
  if (threadId) {
21404
21425
  const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');
21405
21426
  const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId);
@@ -22230,7 +22251,9 @@ function createThreadEndpointHandler(handler) {
22230
22251
  }
22231
22252
  endpointParams[key === "_" ? "*" : key] = value;
22232
22253
  }
22233
- return await handler(req, threadState, endpointParams);
22254
+ const response = await handler(req, threadState, endpointParams);
22255
+ await threadState.flushPendingEventDeliveries();
22256
+ return response;
22234
22257
  } catch (error) {
22235
22258
  console.error(`Error in thread endpoint for ${threadId}:`, error);
22236
22259
  return Response.json(
@@ -28341,6 +28364,9 @@ ${resultContent}${attachmentSummary}`;
28341
28364
  * Broadcast a custom event to all connected message WebSocket clients
28342
28365
  * Used by tools via emitThreadEvent() to send user-defined events
28343
28366
  */
28367
+ emitThreadEvent(_threadId, type, data) {
28368
+ this.broadcastEvent(type, data);
28369
+ }
28344
28370
  broadcastEvent(type, data) {
28345
28371
  const payload = JSON.stringify({
28346
28372
  type: "event",