@nextclaw/shared 0.4.28 → 0.4.30

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/dist/index.d.ts CHANGED
@@ -225,6 +225,7 @@ type UpdateSnapshot = {
225
225
  channel: "stable" | "beta";
226
226
  hostVersion: string | null;
227
227
  currentVersion: string | null;
228
+ targetVersion?: string | null;
228
229
  availableVersion: string | null;
229
230
  downloadedVersion: string | null;
230
231
  minimumHostVersion: string | null;
@@ -392,6 +393,14 @@ type ExtensionRuntimeReadyIngressPayload = {
392
393
  generation: string;
393
394
  pid: number;
394
395
  };
396
+ type ExtensionDesktopHostInvokeIngressPayload = {
397
+ method: string;
398
+ payload?: Record<string, unknown>;
399
+ caller?: {
400
+ sessionId?: string;
401
+ agentRunId?: string;
402
+ };
403
+ };
395
404
  type ExtensionObservationEventIngressPayload = {
396
405
  subscriptionId: string;
397
406
  event: {
@@ -465,6 +474,7 @@ declare const ingressKeys: {
465
474
  readonly runtimeReady: TypedKey<ExtensionRuntimeReadyIngressPayload>;
466
475
  readonly response: TypedKey<ExtensionResponseIngressPayload>;
467
476
  readonly observationEvent: TypedKey<ExtensionObservationEventIngressPayload>;
477
+ readonly desktopHostInvoke: TypedKey<ExtensionDesktopHostInvokeIngressPayload>;
468
478
  };
469
479
  readonly agentRun: {
470
480
  readonly send: TypedKey<AgentRunSendIngressPayload>;
@@ -642,6 +652,10 @@ declare const PANEL_APP_SCROLL_RESTORATION_CONTRACT: {
642
652
  readonly version: 1;
643
653
  };
644
654
  //#endregion
655
+ //#region src/configs/app-install-command.config.d.ts
656
+ /** The sole user-facing command grammar for installing a Marketplace App. */
657
+ declare function formatNextClawAppInstallCommand(appId: string): string;
658
+ //#endregion
645
659
  //#region src/utils/inline-content-height.utils.d.ts
646
660
  type InlineContentElement = {
647
661
  readonly clientHeight: number;
@@ -682,5 +696,5 @@ declare function readUiContentParams(value: unknown): UiContentParams | undefine
682
696
  declare function createUiContentParamsWindowName(params: UiContentParams | undefined): string | undefined;
683
697
  declare function appendUiContentParamsBootstrapQuery(url: string, params: UiContentParams | undefined): string;
684
698
  //#endregion
685
- export { type AgentRunContinueIngressPayload, type AgentRunEditMessageIngressPayload, type AgentRunSendIngressPayload, type AgentRunSessionMaterializationMetadata, type AgentRunSessionMessageRequestPayload, type AppEvent, type AppEventEmitOptions, type AppEventEnvelope, type AppEventHandler, type AppEventKey, type AppEventSource, CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY, CHAT_CONVERSATION_EXCERPT_TOKEN_KIND, CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_SYSTEM_OBJECT_TOKEN_KIND, CHAT_UI_RESOURCE_TOKEN_KIND, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_EXCERPT_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, type ChatConversationExcerptInlineTokenMetadata, type ChatInlineTokenMetadata, type ChatInlineTokensMetadata, type ChatProjectInlineTokenMetadata, type ChatSkillInlineTokenMetadata, type ChatSkillSource, type ChatSystemObjectInlineTokenMetadata, type ChatUiResourceInlineTokenMetadata, type ChatUiResourceReference, type ChatWorkspaceExcerptInlineTokenMetadata, type ChatWorkspaceInlineTokenMetadata, type Cleanup, Contribution, DIAGNOSTIC_CORRELATION_METADATA_KEY, type DiagnosticErrorClassification, type DiagnosticFactValue, type DiagnosticOutcome, type Disposable, DisposableOwner, DisposableStore, type Disposer, EffectScope, type EffectSetup, EventBus, type EventBusOptions, type EventEmitOptions, type EventEnvelope, type EventHandler, type EventKey, type EventSource, type ExtensionChannelCommandExecuteIngressPayload, type ExtensionChannelCommandExecuteResponse, type ExtensionChannelCommandListIngressPayload, type ExtensionChannelCommandListResponse, type ExtensionChannelCommandOption, type ExtensionChannelCommandOptionType, type ExtensionChannelCommandSpec, type ExtensionChannelConfigGetIngressPayload, type ExtensionChannelFileContent, type ExtensionChannelImageContent, type ExtensionChannelMessageContent, type ExtensionChannelMessageSubmitIngressPayload, type ExtensionChannelSubmittedAttachment, type ExtensionChannelTextContent, type ExtensionDiagnosticIngressPayload, type ExtensionObservationEventIngressPayload, type ExtensionResponseIngressPayload, type ExtensionRuntimeReadyIngressPayload, type IContribution, type InboxDelivery, type InboxDeliveryChangedEventPayload, type InboxDeliveryContentType, type InboxDeliveryListView, type InboxDeliverySource, type InboxDeliveryStateAction, type InboxDeliveryStateUpdate, Ingress, type IngressContext, type IngressEnvelope, type IngressHandler, type InstallationKind, type Key, type NcpRunTriggerInput, PANEL_APP_INLINE_HOST_CONTRACT, PANEL_APP_SCROLL_RESTORATION_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, type RuntimeModelSelectionMode, SILENT_REPLY_TOKEN, SYSTEM_OBJECT_REFERENCE_DEFAULT_LIMIT, SYSTEM_OBJECT_REFERENCE_MAX_LIMIT, SYSTEM_OBJECT_REFERENCE_URI_HOST, SYSTEM_OBJECT_REFERENCE_URI_SCHEME, SYSTEM_OBJECT_TYPE_CRON_JOB, SYSTEM_OBJECT_TYPE_INBOX_DELIVERY, type SystemObjectReferenceDisplayText, type SystemObjectReferenceGroupDescriptor, type SystemObjectReferenceGroupIcon, type SystemObjectReferenceGroupView, type SystemObjectReferenceItem, type SystemObjectReferenceListView, type SystemObjectReferenceResolveRequest, type SystemObjectResolvedReference, type TypedKey, UI_CONTENT_PARAMS_HOST_CONTRACT, type UiContentParamValue, type UiContentParams, UiContentParamsError, type UiShowContentEventPayload, type UiShowContentFileViewer, type UiShowContentPlacement, type UiShowContentPurpose, type UiShowContentTarget, type Unsubscribe, type UpdateBlockReason, type UpdateFailureStage, type UpdateProgress, type UpdateSnapshot, type UpdateStatus, appendUiContentParamsBootstrapQuery, classifyDiagnosticError, containsSilentReplyMarker, createAppEventKey, createEventKey, createSystemObjectReferenceUri, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, isSilentReplyNcpMessage, normalizeRuntimeModelSelectionMode, parseSystemObjectReferenceUri, readChatUiResourceReference, readInlineContentHeight, readSystemObjectResolvedReference, readUiContentParams, toDisposable };
699
+ export { type AgentRunContinueIngressPayload, type AgentRunEditMessageIngressPayload, type AgentRunSendIngressPayload, type AgentRunSessionMaterializationMetadata, type AgentRunSessionMessageRequestPayload, type AppEvent, type AppEventEmitOptions, type AppEventEnvelope, type AppEventHandler, type AppEventKey, type AppEventSource, CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY, CHAT_CONVERSATION_EXCERPT_TOKEN_KIND, CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_SYSTEM_OBJECT_TOKEN_KIND, CHAT_UI_RESOURCE_TOKEN_KIND, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_EXCERPT_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, type ChatConversationExcerptInlineTokenMetadata, type ChatInlineTokenMetadata, type ChatInlineTokensMetadata, type ChatProjectInlineTokenMetadata, type ChatSkillInlineTokenMetadata, type ChatSkillSource, type ChatSystemObjectInlineTokenMetadata, type ChatUiResourceInlineTokenMetadata, type ChatUiResourceReference, type ChatWorkspaceExcerptInlineTokenMetadata, type ChatWorkspaceInlineTokenMetadata, type Cleanup, Contribution, DIAGNOSTIC_CORRELATION_METADATA_KEY, type DiagnosticErrorClassification, type DiagnosticFactValue, type DiagnosticOutcome, type Disposable, DisposableOwner, DisposableStore, type Disposer, EffectScope, type EffectSetup, EventBus, type EventBusOptions, type EventEmitOptions, type EventEnvelope, type EventHandler, type EventKey, type EventSource, type ExtensionChannelCommandExecuteIngressPayload, type ExtensionChannelCommandExecuteResponse, type ExtensionChannelCommandListIngressPayload, type ExtensionChannelCommandListResponse, type ExtensionChannelCommandOption, type ExtensionChannelCommandOptionType, type ExtensionChannelCommandSpec, type ExtensionChannelConfigGetIngressPayload, type ExtensionChannelFileContent, type ExtensionChannelImageContent, type ExtensionChannelMessageContent, type ExtensionChannelMessageSubmitIngressPayload, type ExtensionChannelSubmittedAttachment, type ExtensionChannelTextContent, type ExtensionDesktopHostInvokeIngressPayload, type ExtensionDiagnosticIngressPayload, type ExtensionObservationEventIngressPayload, type ExtensionResponseIngressPayload, type ExtensionRuntimeReadyIngressPayload, type IContribution, type InboxDelivery, type InboxDeliveryChangedEventPayload, type InboxDeliveryContentType, type InboxDeliveryListView, type InboxDeliverySource, type InboxDeliveryStateAction, type InboxDeliveryStateUpdate, Ingress, type IngressContext, type IngressEnvelope, type IngressHandler, type InstallationKind, type Key, type NcpRunTriggerInput, PANEL_APP_INLINE_HOST_CONTRACT, PANEL_APP_SCROLL_RESTORATION_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, type RuntimeModelSelectionMode, SILENT_REPLY_TOKEN, SYSTEM_OBJECT_REFERENCE_DEFAULT_LIMIT, SYSTEM_OBJECT_REFERENCE_MAX_LIMIT, SYSTEM_OBJECT_REFERENCE_URI_HOST, SYSTEM_OBJECT_REFERENCE_URI_SCHEME, SYSTEM_OBJECT_TYPE_CRON_JOB, SYSTEM_OBJECT_TYPE_INBOX_DELIVERY, type SystemObjectReferenceDisplayText, type SystemObjectReferenceGroupDescriptor, type SystemObjectReferenceGroupIcon, type SystemObjectReferenceGroupView, type SystemObjectReferenceItem, type SystemObjectReferenceListView, type SystemObjectReferenceResolveRequest, type SystemObjectResolvedReference, type TypedKey, UI_CONTENT_PARAMS_HOST_CONTRACT, type UiContentParamValue, type UiContentParams, UiContentParamsError, type UiShowContentEventPayload, type UiShowContentFileViewer, type UiShowContentPlacement, type UiShowContentPurpose, type UiShowContentTarget, type Unsubscribe, type UpdateBlockReason, type UpdateFailureStage, type UpdateProgress, type UpdateSnapshot, type UpdateStatus, appendUiContentParamsBootstrapQuery, classifyDiagnosticError, containsSilentReplyMarker, createAppEventKey, createEventKey, createSystemObjectReferenceUri, createTypedKey, createUiContentParamsWindowName, eventKeys, formatNextClawAppInstallCommand, getKeyId, ingressKeys, isRuntimeDefaultModelValue, isSilentReplyNcpMessage, normalizeRuntimeModelSelectionMode, parseSystemObjectReferenceUri, readChatUiResourceReference, readInlineContentHeight, readSystemObjectResolvedReference, readUiContentParams, toDisposable };
686
700
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/typed-key.types.ts","../src/types/event-bus.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/features/lifecycle/types/lifecycle.types.ts","../src/features/lifecycle/managers/contribution.manager.ts","../src/features/lifecycle/managers/effect-scope.manager.ts","../src/services/disposable.service.ts","../src/types/ui-show-content.types.ts","../src/types/inbox-delivery.types.ts","../src/types/update.types.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-ui-resource-reference.config.ts","../src/configs/chat-composer-token.config.ts","../src/configs/system-object-reference.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/configs/panel-app-scroll-restoration.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/diagnostic-error.utils.ts","../src/utils/silent-reply.utils.ts","../src/utils/ui-content-params.utils.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/typed-key.types.ts","../src/types/event-bus.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/features/lifecycle/types/lifecycle.types.ts","../src/features/lifecycle/managers/contribution.manager.ts","../src/features/lifecycle/managers/effect-scope.manager.ts","../src/services/disposable.service.ts","../src/types/ui-show-content.types.ts","../src/types/inbox-delivery.types.ts","../src/types/update.types.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-ui-resource-reference.config.ts","../src/configs/chat-composer-token.config.ts","../src/configs/system-object-reference.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/configs/panel-app-scroll-restoration.config.ts","../src/configs/app-install-command.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/diagnostic-error.utils.ts","../src/utils/silent-reply.utils.ts","../src/utils/ui-content-params.utils.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -365,7 +365,8 @@ const ingressKeys = {
365
365
  channelCommandExecute: createTypedKey("extension.channel.command.execute"),
366
366
  runtimeReady: createTypedKey("extension.runtime.ready"),
367
367
  response: createTypedKey("extension.response"),
368
- observationEvent: createTypedKey("extension.observation.event")
368
+ observationEvent: createTypedKey("extension.observation.event"),
369
+ desktopHostInvoke: createTypedKey("extension.host.desktop.invoke")
369
370
  },
370
371
  agentRun: {
371
372
  send: createTypedKey("agent-run.send"),
@@ -564,6 +565,14 @@ const PANEL_APP_SCROLL_RESTORATION_CONTRACT = {
564
565
  version: 1
565
566
  };
566
567
  //#endregion
568
+ //#region src/configs/app-install-command.config.ts
569
+ /** The sole user-facing command grammar for installing a Marketplace App. */
570
+ function formatNextClawAppInstallCommand(appId) {
571
+ const normalizedAppId = appId.trim();
572
+ if (!normalizedAppId) throw new Error("App id is required to format an install command.");
573
+ return `nextclaw app install ${normalizedAppId}`;
574
+ }
575
+ //#endregion
567
576
  //#region src/utils/inline-content-height.utils.ts
568
577
  function readInlineContentHeight(body, documentElement) {
569
578
  return Math.ceil(Math.max(body?.clientHeight ?? 0, body?.offsetHeight ?? 0, body?.scrollHeight ?? 0, documentElement.offsetHeight));
@@ -699,6 +708,6 @@ function isSilentReplyNcpMessage(message) {
699
708
  return message.role === "assistant" && message.parts.some((part) => (part.type === "text" || part.type === "rich-text") && containsSilentReplyMarker(part.text));
700
709
  }
701
710
  //#endregion
702
- export { CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY, CHAT_CONVERSATION_EXCERPT_TOKEN_KIND, CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_SYSTEM_OBJECT_TOKEN_KIND, CHAT_UI_RESOURCE_TOKEN_KIND, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_EXCERPT_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, Contribution, DIAGNOSTIC_CORRELATION_METADATA_KEY, DisposableOwner, DisposableStore, EffectScope, EventBus, Ingress, PANEL_APP_INLINE_HOST_CONTRACT, PANEL_APP_SCROLL_RESTORATION_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, SILENT_REPLY_TOKEN, SYSTEM_OBJECT_REFERENCE_DEFAULT_LIMIT, SYSTEM_OBJECT_REFERENCE_MAX_LIMIT, SYSTEM_OBJECT_REFERENCE_URI_HOST, SYSTEM_OBJECT_REFERENCE_URI_SCHEME, SYSTEM_OBJECT_TYPE_CRON_JOB, SYSTEM_OBJECT_TYPE_INBOX_DELIVERY, UI_CONTENT_PARAMS_HOST_CONTRACT, UiContentParamsError, appendUiContentParamsBootstrapQuery, classifyDiagnosticError, containsSilentReplyMarker, createAppEventKey, createEventKey, createSystemObjectReferenceUri, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, isSilentReplyNcpMessage, normalizeRuntimeModelSelectionMode, parseSystemObjectReferenceUri, readChatUiResourceReference, readInlineContentHeight, readSystemObjectResolvedReference, readUiContentParams, toDisposable };
711
+ export { CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY, CHAT_CONVERSATION_EXCERPT_TOKEN_KIND, CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_SYSTEM_OBJECT_TOKEN_KIND, CHAT_UI_RESOURCE_TOKEN_KIND, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_EXCERPT_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, Contribution, DIAGNOSTIC_CORRELATION_METADATA_KEY, DisposableOwner, DisposableStore, EffectScope, EventBus, Ingress, PANEL_APP_INLINE_HOST_CONTRACT, PANEL_APP_SCROLL_RESTORATION_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, SILENT_REPLY_TOKEN, SYSTEM_OBJECT_REFERENCE_DEFAULT_LIMIT, SYSTEM_OBJECT_REFERENCE_MAX_LIMIT, SYSTEM_OBJECT_REFERENCE_URI_HOST, SYSTEM_OBJECT_REFERENCE_URI_SCHEME, SYSTEM_OBJECT_TYPE_CRON_JOB, SYSTEM_OBJECT_TYPE_INBOX_DELIVERY, UI_CONTENT_PARAMS_HOST_CONTRACT, UiContentParamsError, appendUiContentParamsBootstrapQuery, classifyDiagnosticError, containsSilentReplyMarker, createAppEventKey, createEventKey, createSystemObjectReferenceUri, createTypedKey, createUiContentParamsWindowName, eventKeys, formatNextClawAppInstallCommand, getKeyId, ingressKeys, isRuntimeDefaultModelValue, isSilentReplyNcpMessage, normalizeRuntimeModelSelectionMode, parseSystemObjectReferenceUri, readChatUiResourceReference, readInlineContentHeight, readSystemObjectResolvedReference, readUiContentParams, toDisposable };
703
712
 
704
713
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isRecord"],"sources":["../src/types/typed-key.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/features/lifecycle/managers/effect-scope.manager.ts","../src/features/lifecycle/managers/contribution.manager.ts","../src/services/disposable.service.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-composer-token.config.ts","../src/utils/ui-content-params.utils.ts","../src/configs/chat-ui-resource-reference.config.ts","../src/configs/system-object-reference.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/configs/panel-app-scroll-restoration.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/diagnostic-error.utils.ts","../src/utils/silent-reply.utils.ts"],"sourcesContent":["export type TypedKey<T = unknown> = {\n readonly id: string;\n readonly _type?: T;\n};\n\nexport type Key<T = unknown> = TypedKey<T> | string;\n\nexport function createTypedKey<T>(id: string): TypedKey<T> {\n const normalizedId = id.trim();\n if (!normalizedId) {\n throw new Error(\"typed key id is required\");\n }\n return { id: normalizedId };\n}\n\nexport function getKeyId(key: Key<unknown>): string {\n return typeof key === \"string\" ? key.trim() : key.id;\n}\n","import type {\n AppEventEmitOptions,\n AppEventEnvelope,\n AppEventHandler,\n AppEventKey,\n EventBusOptions,\n Unsubscribe,\n} from \"../types/event-bus.types.js\";\nimport { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport class EventBus {\n private readonly listeners = new Map<string, Set<AppEventHandler<unknown>>>();\n private readonly globalListeners = new Set<(event: AppEventEnvelope) => void>();\n private listenerCount = 0;\n private readonly onFirstSubscriber?: EventBusOptions[\"onFirstSubscriber\"];\n private readonly onListenerError?: EventBusOptions[\"onListenerError\"];\n private readonly onNoSubscribers?: EventBusOptions[\"onNoSubscribers\"];\n\n constructor(options: EventBusOptions = {}) {\n this.onFirstSubscriber = options.onFirstSubscriber;\n this.onListenerError = options.onListenerError;\n this.onNoSubscribers = options.onNoSubscribers;\n }\n\n emit = <T>(\n key: Key<T>,\n payload: T,\n options: AppEventEmitOptions = {},\n ): void => {\n const envelope: AppEventEnvelope<T> = {\n type: getKeyId(key),\n payload,\n ...(options.emittedAt ? { emittedAt: options.emittedAt } : {}),\n ...(options.source ? { source: options.source } : {}),\n };\n this.emitEnvelope(envelope);\n };\n\n emitEnvelope = <T>(event: AppEventEnvelope<T>): void => {\n const listeners = this.listeners.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n this.safeInvokeListener(event, listener as AppEventHandler<T>);\n }\n }\n if (this.globalListeners.size === 0) {\n return;\n }\n for (const listener of this.globalListeners) {\n this.safeInvokeGlobalListener(event, listener);\n }\n };\n\n on = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId) ?? new Set<AppEventHandler<unknown>>();\n const typedHandler = handler as AppEventHandler<unknown>;\n const added = !listeners.has(typedHandler);\n listeners.add(typedHandler);\n this.listeners.set(keyId, listeners);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n this.off(key, handler);\n };\n };\n\n off = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): void => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId);\n if (!listeners) {\n return;\n }\n const deleted = listeners.delete(handler as AppEventHandler<unknown>);\n if (listeners.size === 0) {\n this.listeners.delete(keyId);\n }\n if (deleted) {\n this.unregisterSubscriber();\n }\n };\n\n once = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const wrappedHandler: AppEventHandler<T> = (payload, envelope) => {\n unsubscribe();\n handler(payload, envelope);\n };\n const unsubscribe = this.on(key, wrappedHandler);\n return unsubscribe;\n };\n\n subscribeAll = (handler: (event: AppEventEnvelope) => void): Unsubscribe => {\n const added = !this.globalListeners.has(handler);\n this.globalListeners.add(handler);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n if (this.globalListeners.delete(handler)) {\n this.unregisterSubscriber();\n }\n };\n };\n\n private registerSubscriber = (): void => {\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.onFirstSubscriber?.();\n }\n };\n\n private unregisterSubscriber = (): void => {\n this.listenerCount = Math.max(0, this.listenerCount - 1);\n if (this.listenerCount === 0) {\n this.onNoSubscribers?.();\n }\n };\n\n private safeInvokeListener = <T>(\n event: AppEventEnvelope<T>,\n listener: AppEventHandler<T>,\n ): void => {\n try {\n listener(event.payload, event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n\n private safeInvokeGlobalListener = (\n event: AppEventEnvelope,\n listener: (event: AppEventEnvelope) => void,\n ): void => {\n try {\n listener(event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n}\n","import { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport type IngressEnvelope<TPayload = unknown> = {\n type: Key<TPayload>;\n extensionId?: string;\n generation?: string;\n payload?: TPayload;\n source?: string;\n};\n\nexport type IngressContext = {\n source: string;\n token?: string | null;\n};\n\nexport type IngressHandler<TPayload = unknown, TResult = unknown> = (\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n) => Promise<TResult> | TResult;\n\nexport class Ingress {\n private readonly handlers = new Map<string, IngressHandler<unknown, unknown>>();\n\n readonly addHandler = <TPayload = unknown, TResult = unknown>(\n type: Key<TPayload>,\n handler: IngressHandler<TPayload, TResult>,\n ): (() => void) => {\n const normalizedType = getKeyId(type);\n if (!normalizedType) {\n throw new Error(\"ingress type is required\");\n }\n this.handlers.set(normalizedType, handler as IngressHandler<unknown, unknown>);\n return () => {\n if (this.handlers.get(normalizedType) === handler) {\n this.handlers.delete(normalizedType);\n }\n };\n };\n\n readonly handle = async <TPayload = unknown, TResult = unknown>(\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n ): Promise<TResult> => {\n const normalizedType = getKeyId(envelope.type);\n const handler = this.handlers.get(normalizedType);\n if (!handler) {\n throw new Error(`Unsupported ingress type: ${normalizedType}`);\n }\n return await (handler as IngressHandler<TPayload, TResult>)(envelope, context);\n };\n}\n","import type {\n Disposer,\n EffectSetup,\n} from \"../types/lifecycle.types.js\";\n\ntype EffectRecord = {\n readonly setup: EffectSetup;\n cleanup?: Disposer;\n released: boolean;\n};\n\ntype EffectScopeState = \"idle\" | \"starting\" | \"started\" | \"disposed\";\n\nasync function disposeRecords(records: readonly EffectRecord[]): Promise<void> {\n const errors: unknown[] = [];\n for (const record of [...records].reverse()) {\n if (record.released) {\n continue;\n }\n record.released = true;\n try {\n await record.cleanup?.();\n } catch (error) {\n errors.push(error);\n } finally {\n record.cleanup = undefined;\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Multiple effects failed to dispose.\");\n }\n}\n\nexport class EffectScope {\n private readonly records: EffectRecord[] = [];\n private state: EffectScopeState = \"idle\";\n private startPromise: Promise<void> | undefined;\n\n register = (setup: EffectSetup): Disposer => {\n if (this.state !== \"idle\") {\n throw new Error(\"Effects can only be registered before the scope starts.\");\n }\n const record: EffectRecord = { setup, released: false };\n this.records.push(record);\n return async () => {\n if (record.released) {\n return;\n }\n record.released = true;\n const cleanup = record.cleanup;\n record.cleanup = undefined;\n await cleanup?.();\n };\n };\n\n start = async (): Promise<void> => {\n if (this.state === \"disposed\") {\n throw new Error(\"Effect scope has been disposed.\");\n }\n if (this.state === \"started\") {\n return;\n }\n if (this.startPromise) {\n return await this.startPromise;\n }\n this.startPromise = this.startInternal();\n try {\n await this.startPromise;\n } finally {\n this.startPromise = undefined;\n }\n };\n\n dispose = async (): Promise<void> => {\n if (this.state === \"disposed\") {\n return;\n }\n if (this.startPromise) {\n try {\n await this.startPromise;\n } catch {\n // startInternal already rolled back every active effect.\n }\n }\n this.state = \"disposed\";\n const records = this.records.splice(0);\n await disposeRecords(records);\n };\n\n private startInternal = async (): Promise<void> => {\n this.state = \"starting\";\n const activated: EffectRecord[] = [];\n try {\n for (const record of this.records) {\n if (record.released) {\n continue;\n }\n const cleanup = await record.setup();\n if (record.released) {\n await cleanup?.();\n continue;\n }\n record.cleanup = cleanup || undefined;\n activated.push(record);\n }\n this.state = \"started\";\n } catch (error) {\n this.state = \"disposed\";\n this.records.splice(0);\n try {\n await disposeRecords(activated);\n } catch {\n // Preserve the setup failure; rollback remains best effort.\n }\n throw error;\n }\n };\n}\n","import { EffectScope } from \"./effect-scope.manager.js\";\nimport type {\n Disposer,\n EffectSetup,\n IContribution,\n} from \"../types/lifecycle.types.js\";\n\ntype ContributionState = \"idle\" | \"setting-up\" | \"started\";\n\nexport abstract class Contribution implements IContribution {\n private effectScope = new EffectScope();\n private state: ContributionState = \"idle\";\n private startPromise: Promise<void> | undefined;\n\n protected abstract setup(): Promise<void> | void;\n\n protected readonly effect = (setup: EffectSetup): Disposer => {\n if (this.state !== \"setting-up\") {\n throw new Error(\"Effects can only be declared from setup().\");\n }\n return this.effectScope.register(setup);\n };\n\n start = async (): Promise<void> => {\n if (this.state === \"started\") {\n return;\n }\n if (this.startPromise) {\n return await this.startPromise;\n }\n this.startPromise = this.startInternal();\n try {\n await this.startPromise;\n } finally {\n this.startPromise = undefined;\n }\n };\n\n dispose = async (): Promise<void> => {\n if (this.state === \"idle\" && !this.startPromise) {\n return;\n }\n if (this.startPromise) {\n try {\n await this.startPromise;\n } catch {\n // startInternal already returned this contribution to an idle scope.\n }\n }\n try {\n await this.effectScope.dispose();\n } finally {\n this.effectScope = new EffectScope();\n this.state = \"idle\";\n }\n };\n\n private startInternal = async (): Promise<void> => {\n this.state = \"setting-up\";\n try {\n await this.setup();\n await this.effectScope.start();\n this.state = \"started\";\n } catch (error) {\n try {\n await this.effectScope.dispose();\n } finally {\n this.effectScope = new EffectScope();\n this.state = \"idle\";\n }\n throw error;\n }\n };\n}\n","export type Cleanup = () => void;\n\nexport type Disposable = {\n dispose: () => void;\n};\n\nconst once = (cleanup: Cleanup): Cleanup => {\n let disposed = false;\n return () => {\n if (disposed) {\n return;\n }\n disposed = true;\n cleanup();\n };\n};\n\nconst runCleanups = (cleanups: Cleanup[]): void => {\n const errors: unknown[] = [];\n for (const cleanup of cleanups) {\n try {\n cleanup();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Failed to run cleanups.\");\n }\n};\n\nexport const toDisposable = (dispose: Cleanup): Disposable => ({\n dispose: once(dispose),\n});\n\nexport abstract class DisposableOwner implements Disposable {\n protected readonly cleanups: Cleanup[] = [];\n private disposed = false;\n\n protected get isDisposed(): boolean {\n return this.disposed;\n }\n\n protected addCleanup = (cleanup: Cleanup): Cleanup => {\n const disposableCleanup = once(cleanup);\n if (this.disposed) {\n disposableCleanup();\n return disposableCleanup;\n }\n this.cleanups.push(disposableCleanup);\n return disposableCleanup;\n };\n\n protected addDisposable = <T extends Disposable>(disposable: T): T => {\n this.addCleanup(() => {\n disposable.dispose();\n });\n return disposable;\n };\n\n dispose = (): void => {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n const current = this.cleanups.splice(0);\n runCleanups(current.reverse());\n };\n}\n\nexport class DisposableStore implements Disposable {\n private readonly disposables = new Set<Disposable>();\n\n private isDisposed = false;\n\n add = <T extends Disposable>(disposable: T): T => {\n if (this.isDisposed) {\n disposable.dispose();\n return disposable;\n }\n this.disposables.add(disposable);\n return disposable;\n };\n\n clear = (): void => {\n const current = [...this.disposables];\n this.disposables.clear();\n for (const disposable of current.reverse()) {\n disposable.dispose();\n }\n };\n\n dispose = (): void => {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.clear();\n };\n}\n","import type { NcpEndpointEvent, NcpSessionSummary } from \"@nextclaw/ncp\";\nimport type { AppEventKey, EventKey } from \"../types/event-bus.types.js\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\nimport type { UiShowContentEventPayload } from \"../types/ui-show-content.types.js\";\nimport type { InboxDeliveryChangedEventPayload } from \"../types/inbox-delivery.types.js\";\nimport type { UpdateSnapshot } from \"../types/update.types.js\";\n\nexport function createEventKey<T>(id: string): EventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport function createAppEventKey<T>(id: string): AppEventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport const eventKeys = {\n configUpdated: createAppEventKey<{ path: string }>(\"config.updated\"),\n channelConfigApplyStatus: createAppEventKey<{\n channel: string;\n status: \"started\" | \"succeeded\" | \"failed\";\n message?: string;\n }>(\"channel.config.apply-status\"),\n sessionUpdated: createAppEventKey<{ sessionKey: string }>(\"session.updated\"),\n sessionRunStatus: createAppEventKey<{\n sessionKey: string;\n status: \"running\" | \"idle\";\n }>(\"session.run-status\"),\n sessionRunQueueUpdated: createAppEventKey<{ sessionKey: string }>(\n \"session.run-queue.updated\",\n ),\n sessionMetadataChanged: createAppEventKey<{\n metadata: Record<string, unknown>;\n mode: \"set\" | \"update\";\n sessionKey: string;\n }>(\"session.metadata.changed\"),\n ncpEvent: createAppEventKey<NcpEndpointEvent>(\"ncp.event\"),\n sessionSummaryUpsert: createAppEventKey<{ summary: NcpSessionSummary }>(\n \"session.summary.upsert\",\n ),\n sessionSummaryDelete: createAppEventKey<{ sessionKey: string }>(\n \"session.summary.delete\",\n ),\n uiShowContent: createAppEventKey<UiShowContentEventPayload>(\"ui.show-content\"),\n serverPathChanged: createAppEventKey<{ directoryPath: string }>(\n \"server-path.changed\",\n ),\n inboxDeliveryChanged: createAppEventKey<InboxDeliveryChangedEventPayload>(\n \"inbox.delivery.changed\",\n ),\n configReloadStarted: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.started\",\n ),\n configReloadFinished: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.finished\",\n ),\n error: createAppEventKey<{ message: string; code?: string }>(\"error\"),\n connectionOpen: createAppEventKey<Record<string, never> | undefined>(\n \"connection.open\",\n ),\n connectionClose: createAppEventKey<Record<string, never> | undefined>(\n \"connection.close\",\n ),\n connectionError: createAppEventKey<{ message?: string } | undefined>(\n \"connection.error\",\n ),\n runtimeUpdateSnapshot: createAppEventKey<UpdateSnapshot>(\n \"runtime.update.snapshot\",\n ),\n} as const;\n","import type {\n NcpAgentSendEnvelope,\n NcpMessage,\n NcpMessageAbortPayload,\n NcpMessagePart,\n NcpRunTriggerInput,\n} from \"@nextclaw/ncp\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\n\nexport const DIAGNOSTIC_CORRELATION_METADATA_KEY =\n \"nextclaw_diagnostic_correlation_id\";\n\nexport type ExtensionChannelTextContent = {\n type: \"text\";\n text: string;\n};\n\ntype ExtensionChannelResourceRef = {\n url?: string;\n assetUri?: string;\n mimeType?: string;\n name?: string;\n};\n\nexport type ExtensionChannelImageContent = ExtensionChannelResourceRef & {\n type: \"image\";\n};\n\nexport type ExtensionChannelFileContent = ExtensionChannelResourceRef & {\n type: \"file\";\n};\n\nexport type ExtensionChannelMessageContent =\n | ExtensionChannelTextContent\n | ExtensionChannelImageContent\n | ExtensionChannelFileContent;\n\nexport type ExtensionChannelSubmittedAttachment =\n ExtensionChannelResourceRef & {\n id?: string;\n path?: string;\n size?: number;\n source?: string;\n status?: \"ready\" | \"remote-only\";\n errorCode?:\n | \"too_large\"\n | \"download_failed\"\n | \"http_error\"\n | \"invalid_payload\";\n };\n\nexport type ExtensionChannelConfigGetIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelMessageSubmitIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n content: ExtensionChannelMessageContent;\n attachments?: ExtensionChannelSubmittedAttachment[];\n metadata?: Record<string, unknown>;\n};\n\nexport type DiagnosticOutcome =\n | \"observed\"\n | \"started\"\n | \"accepted\"\n | \"succeeded\"\n | \"rejected\"\n | \"cancelled\"\n | \"failed\"\n | \"unavailable\"\n | \"suppressed\";\n\nexport type DiagnosticFactValue = string | number | boolean | null;\n\nexport type ExtensionDiagnosticIngressPayload = {\n domain: string;\n event: string;\n component: string;\n outcome: DiagnosticOutcome;\n correlationId?: string;\n parentCorrelationId?: string;\n reasonCode?: string;\n providerCode?: string;\n durationMs?: number;\n attempt?: number;\n facts?: Record<string, DiagnosticFactValue>;\n};\n\nexport type ExtensionChannelCommandOptionType = \"string\" | \"boolean\" | \"number\";\n\nexport type ExtensionChannelCommandOption = {\n name: string;\n description: string;\n type: ExtensionChannelCommandOptionType;\n required?: boolean;\n};\n\nexport type ExtensionChannelCommandSpec = {\n name: string;\n description: string;\n options?: ExtensionChannelCommandOption[];\n};\n\nexport type ExtensionChannelCommandListIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelCommandListResponse = {\n commands: ExtensionChannelCommandSpec[];\n};\n\nexport type ExtensionChannelCommandExecuteIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n commandName?: string;\n rawText?: string;\n args?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\nexport type ExtensionChannelCommandExecuteResponse = {\n content: string;\n ephemeral?: boolean;\n};\n\nexport type ExtensionResponseIngressPayload =\n | {\n requestId: string;\n ok: true;\n data?: unknown;\n }\n | {\n requestId: string;\n ok: false;\n error: {\n message: string;\n };\n };\n\nexport type ExtensionRuntimeReadyIngressPayload = {\n generation: string;\n pid: number;\n};\n\nexport type ExtensionObservationEventIngressPayload = {\n subscriptionId: string;\n event: {\n eventId: string;\n eventType: string;\n occurredAt: string;\n observedAt?: string;\n cursor?: string;\n dedupeKey?: string;\n payload: unknown;\n sourceRefs?: string[];\n causationId?: string;\n correlationId?: string;\n };\n};\n\nexport type AgentRunSessionMessageRequestPayload = {\n message: NcpMessage;\n requestId: string;\n sessionId: string;\n trigger: NcpRunTriggerInput;\n};\n\nexport const CHAT_SESSION_MATERIALIZATION_METADATA_KEY =\n \"session_materialization\";\nexport const CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY =\n \"chat_continuation_target_message_id\";\n\nexport type AgentRunSessionMaterializationMetadata = {\n kind: \"child\";\n parentSessionId: string;\n inheritContext: true;\n};\n\nexport type AgentRunEditMessageIngressPayload = {\n correlationId?: string;\n message: NcpMessage;\n messageId: string;\n sessionId: string;\n};\n\nexport type AgentRunContinueIngressPayload = {\n correlationId?: string;\n sessionId: string;\n};\n\nexport type AgentRunSendIngressMetadata = Record<string, unknown> & {\n agentRuntimeId?: string;\n agentId?: string;\n projectRoot?: string;\n channel?: string;\n model?: string;\n maxTokens?: number;\n thinkingEffort?: string | null;\n chatId?: string;\n accountId?: string;\n senderId?: string;\n sessionKey?: string;\n label?: string;\n [CHAT_SESSION_MATERIALIZATION_METADATA_KEY]?: AgentRunSessionMaterializationMetadata;\n};\n\nexport type AgentRunSendIngressPayload =\n | (Omit<NcpAgentSendEnvelope, \"metadata\"> & {\n content?: never;\n metadata?: AgentRunSendIngressMetadata;\n peerId?: string;\n })\n | (Omit<NcpAgentSendEnvelope, \"message\" | \"metadata\"> & {\n content: NcpMessagePart[];\n metadata?: AgentRunSendIngressMetadata;\n message?: never;\n peerId?: string;\n });\n\nexport const ingressKeys = {\n extension: {\n channelConfigGet: createTypedKey<ExtensionChannelConfigGetIngressPayload>(\n \"extension.channel.config.get\",\n ),\n channelMessageSubmit:\n createTypedKey<ExtensionChannelMessageSubmitIngressPayload>(\n \"extension.channel.message.submit\",\n ),\n diagnosticEmit: createTypedKey<ExtensionDiagnosticIngressPayload>(\n \"extension.diagnostic.emit\",\n ),\n channelCommandList:\n createTypedKey<ExtensionChannelCommandListIngressPayload>(\n \"extension.channel.command.list\",\n ),\n channelCommandExecute:\n createTypedKey<ExtensionChannelCommandExecuteIngressPayload>(\n \"extension.channel.command.execute\",\n ),\n runtimeReady: createTypedKey<ExtensionRuntimeReadyIngressPayload>(\n \"extension.runtime.ready\",\n ),\n response:\n createTypedKey<ExtensionResponseIngressPayload>(\"extension.response\"),\n observationEvent: createTypedKey<ExtensionObservationEventIngressPayload>(\n \"extension.observation.event\",\n ),\n },\n agentRun: {\n send: createTypedKey<AgentRunSendIngressPayload>(\"agent-run.send\"),\n abort: createTypedKey<NcpMessageAbortPayload>(\"agent-run.abort\"),\n editMessage: createTypedKey<AgentRunEditMessageIngressPayload>(\n \"agent-run.edit-message\",\n ),\n continue:\n createTypedKey<AgentRunContinueIngressPayload>(\"agent-run.continue\"),\n sessionMessageRequest: createTypedKey<AgentRunSessionMessageRequestPayload>(\n \"agent-run.session-message.request\",\n ),\n },\n} as const;\n","export const RUNTIME_DEFAULT_MODEL_VALUE = \"__nextclaw_runtime_default__\";\n\nexport type RuntimeModelSelectionMode =\n | \"nextclaw\"\n | \"optional\"\n | \"runtime-default\";\n\nexport function isRuntimeDefaultModelValue(value: unknown): boolean {\n return value === RUNTIME_DEFAULT_MODEL_VALUE;\n}\n\nexport function normalizeRuntimeModelSelectionMode(\n value: unknown,\n): RuntimeModelSelectionMode {\n if (value === \"optional\" || value === \"runtime-default\") {\n return value;\n }\n return \"nextclaw\";\n}\n","import type {\n CHAT_UI_RESOURCE_TOKEN_KIND,\n ChatUiResourceReference,\n} from \"./chat-ui-resource-reference.config.js\";\n\nexport const CHAT_INLINE_TOKENS_METADATA_KEY = \"ui_inline_tokens\";\nexport const CHAT_INLINE_TOKENS_SCHEMA_VERSION = 2;\nexport const CHAT_PROJECT_TOKEN_KIND = \"project\";\nexport const CHAT_CONVERSATION_EXCERPT_TOKEN_KIND = \"conversation_excerpt\";\nexport const CHAT_WORKSPACE_FILE_TOKEN_KIND = \"workspace_file\";\nexport const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = \"workspace_directory\";\nexport const CHAT_WORKSPACE_EXCERPT_TOKEN_KIND = \"workspace_excerpt\";\nexport const CHAT_SYSTEM_OBJECT_TOKEN_KIND = \"system_object\";\n\nexport type ChatSkillSource = \"builtin\" | \"global\" | \"project\" | \"workspace\";\n\nexport type ChatSkillInlineTokenMetadata = {\n kind: \"skill\";\n ref: string;\n name: string;\n source: ChatSkillSource;\n path: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatWorkspaceInlineTokenMetadata = {\n kind:\n | typeof CHAT_WORKSPACE_FILE_TOKEN_KIND\n | typeof CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatWorkspaceExcerptInlineTokenMetadata = {\n kind: typeof CHAT_WORKSPACE_EXCERPT_TOKEN_KIND;\n key: string;\n path: string;\n label: string;\n excerpt: string;\n startLine: number | null;\n endLine: number | null;\n rawText: string;\n};\n\nexport type ChatConversationExcerptInlineTokenMetadata = {\n kind: typeof CHAT_CONVERSATION_EXCERPT_TOKEN_KIND;\n key: string;\n messageId: string;\n role: \"assistant\" | \"user\";\n label: string;\n excerpt: string;\n rawText: string;\n};\n\nexport type ChatProjectInlineTokenMetadata = {\n kind: typeof CHAT_PROJECT_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatSystemObjectInlineTokenMetadata = {\n kind: typeof CHAT_SYSTEM_OBJECT_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n reference: {\n uri: string;\n objectType: string;\n objectId: string;\n label: string;\n description: string | null;\n updatedAt: string;\n version: string;\n assetUri: string;\n fileName: string;\n mimeType: string;\n sizeBytes: number;\n };\n};\n\nexport type ChatUiResourceInlineTokenMetadata = {\n kind: typeof CHAT_UI_RESOURCE_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n reference: ChatUiResourceReference;\n};\n\nexport type ChatInlineTokenMetadata =\n | ChatSkillInlineTokenMetadata\n | ChatProjectInlineTokenMetadata\n | ChatWorkspaceInlineTokenMetadata\n | ChatWorkspaceExcerptInlineTokenMetadata\n | ChatConversationExcerptInlineTokenMetadata\n | ChatUiResourceInlineTokenMetadata\n | ChatSystemObjectInlineTokenMetadata;\n\nexport type ChatInlineTokensMetadata = {\n schemaVersion: typeof CHAT_INLINE_TOKENS_SCHEMA_VERSION;\n items: ChatInlineTokenMetadata[];\n};\n","import type {\n UiContentParams,\n UiContentParamValue,\n} from \"../types/ui-show-content.types.js\";\n\nexport const UI_CONTENT_PARAMS_HOST_CONTRACT = {\n bootstrapQueryParam: \"nextclawContentParams\",\n bootstrapQueryValue: \"1\",\n maxDepth: 32,\n maxSerializedBytes: 64 * 1024,\n windowNamePrefix: \"nextclaw:content-params:v1:\",\n} as const;\n\nexport class UiContentParamsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UiContentParamsError\";\n }\n}\n\nfunction assertJsonValue(\n value: unknown,\n depth: number,\n ancestors: readonly object[],\n): asserts value is UiContentParamValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new UiContentParamsError(\n \"params must contain only finite numbers.\",\n );\n }\n return;\n }\n if (typeof value !== \"object\") {\n throw new UiContentParamsError(\"params must contain only JSON values.\");\n }\n if (depth >= UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth) {\n throw new UiContentParamsError(\n `params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth} nested levels.`,\n );\n }\n if (ancestors.includes(value)) {\n throw new UiContentParamsError(\n \"params must not contain circular references.\",\n );\n }\n const nextAncestors = [...ancestors, value];\n if (Array.isArray(value)) {\n for (const item of value) {\n assertJsonValue(item, depth + 1, nextAncestors);\n }\n return;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new UiContentParamsError(\"params must contain only plain objects.\");\n }\n for (const item of Object.values(value)) {\n assertJsonValue(item, depth + 1, nextAncestors);\n }\n}\n\nexport function readUiContentParams(\n value: unknown,\n): UiContentParams | undefined {\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new UiContentParamsError(\"params must be a JSON object.\");\n }\n assertJsonValue(value, 0, []);\n const serialized = JSON.stringify(value);\n const byteLength = new TextEncoder().encode(serialized).byteLength;\n if (byteLength > UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes) {\n throw new UiContentParamsError(\n `params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes} serialized bytes.`,\n );\n }\n return value as UiContentParams;\n}\n\nexport function createUiContentParamsWindowName(\n params: UiContentParams | undefined,\n): string | undefined {\n const normalized = readUiContentParams(params);\n return normalized\n ? `${UI_CONTENT_PARAMS_HOST_CONTRACT.windowNamePrefix}${JSON.stringify(normalized)}`\n : undefined;\n}\n\nexport function appendUiContentParamsBootstrapQuery(\n url: string,\n params: UiContentParams | undefined,\n): string {\n if (!readUiContentParams(params)) {\n return url;\n }\n const [withoutHash, hash] = url.split(\"#\", 2);\n const queryStart = withoutHash.indexOf(\"?\");\n const pathname =\n queryStart >= 0 ? withoutHash.slice(0, queryStart) : withoutHash;\n const query = new URLSearchParams(\n queryStart >= 0 ? withoutHash.slice(queryStart + 1) : \"\",\n );\n query.set(\n UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryParam,\n UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryValue,\n );\n return `${pathname}?${query.toString()}${\n typeof hash === \"string\" ? `#${hash}` : \"\"\n }`;\n}\n","import type { UiContentParams } from \"../types/ui-show-content.types.js\";\nimport { readUiContentParams } from \"../utils/ui-content-params.utils.js\";\n\nexport const CHAT_UI_RESOURCE_TOKEN_KIND = \"ui_resource\";\n\nconst UI_RESOURCE_KIND_MAX_LENGTH = 80;\nconst UI_RESOURCE_TITLE_MAX_LENGTH = 512;\nconst UI_RESOURCE_URI_MAX_LENGTH = 8_192;\n\nexport type ChatUiResourceReference = {\n uri: string;\n resourceKind: string;\n title: string;\n currentUrl: string;\n contentParams?: UiContentParams;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readBoundedString(value: unknown, maxLength: number): string | null {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim();\n return normalized && normalized.length <= maxLength ? normalized : null;\n}\n\nexport function readChatUiResourceReference(\n value: unknown,\n): ChatUiResourceReference | null {\n if (!isRecord(value)) return null;\n const uri = readBoundedString(value.uri, UI_RESOURCE_URI_MAX_LENGTH);\n const resourceKind = readBoundedString(\n value.resourceKind,\n UI_RESOURCE_KIND_MAX_LENGTH,\n );\n const title = readBoundedString(value.title, UI_RESOURCE_TITLE_MAX_LENGTH);\n const currentUrl = readBoundedString(\n value.currentUrl,\n UI_RESOURCE_URI_MAX_LENGTH,\n );\n if (!uri || !resourceKind || !title || !currentUrl) return null;\n try {\n const contentParams = readUiContentParams(value.contentParams);\n return {\n uri,\n resourceKind,\n title,\n currentUrl,\n ...(contentParams ? { contentParams: structuredClone(contentParams) } : {}),\n };\n } catch {\n return null;\n }\n}\n","export const SYSTEM_OBJECT_REFERENCE_URI_SCHEME = \"nextclaw:\";\nexport const SYSTEM_OBJECT_REFERENCE_URI_HOST = \"objects\";\nexport const SYSTEM_OBJECT_TYPE_INBOX_DELIVERY = \"inbox-delivery\";\nexport const SYSTEM_OBJECT_TYPE_CRON_JOB = \"cron-job\";\nexport const SYSTEM_OBJECT_REFERENCE_DEFAULT_LIMIT = 20;\nexport const SYSTEM_OBJECT_REFERENCE_MAX_LIMIT = 50;\n\nexport type SystemObjectReferenceDisplayText = {\n default: string;\n translations?: Record<string, string>;\n};\n\nexport type SystemObjectReferenceGroupIcon = \"calendar-clock\" | \"file\" | \"inbox\";\n\nexport type SystemObjectReferenceGroupDescriptor = {\n objectType: string;\n label: SystemObjectReferenceDisplayText;\n description: SystemObjectReferenceDisplayText;\n icon: SystemObjectReferenceGroupIcon;\n order: number;\n};\n\nexport type SystemObjectReferenceItem = {\n uri: string;\n objectType: string;\n objectId: string;\n label: string;\n description: string | null;\n updatedAt: string;\n};\n\nexport type SystemObjectReferenceGroupView = SystemObjectReferenceGroupDescriptor & {\n items: SystemObjectReferenceItem[];\n total: number;\n};\n\nexport type SystemObjectReferenceListView = {\n groups: SystemObjectReferenceGroupView[];\n total: number;\n};\n\nexport type SystemObjectResolvedReference = SystemObjectReferenceItem & {\n version: string;\n assetUri: string;\n fileName: string;\n mimeType: string;\n sizeBytes: number;\n};\n\nexport type SystemObjectReferenceResolveRequest = {\n uri: string;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nexport function createSystemObjectReferenceUri(\n objectType: string,\n objectId: string,\n): string {\n const normalizedType = objectType.trim();\n const normalizedId = objectId.trim();\n if (!normalizedType || !normalizedId) {\n throw new Error(\"System object type and id must be non-empty.\");\n }\n return `nextclaw://${SYSTEM_OBJECT_REFERENCE_URI_HOST}/${encodeURIComponent(normalizedType)}/${encodeURIComponent(normalizedId)}`;\n}\n\nexport function parseSystemObjectReferenceUri(\n uri: string,\n): { objectType: string; objectId: string } | null {\n try {\n const parsed = new URL(uri.trim());\n if (\n parsed.protocol !== SYSTEM_OBJECT_REFERENCE_URI_SCHEME ||\n parsed.host !== SYSTEM_OBJECT_REFERENCE_URI_HOST ||\n parsed.search ||\n parsed.hash\n ) {\n return null;\n }\n const segments = parsed.pathname.split(\"/\").filter(Boolean);\n if (segments.length !== 2) {\n return null;\n }\n const objectType = decodeURIComponent(segments[0] ?? \"\").trim();\n const objectId = decodeURIComponent(segments[1] ?? \"\").trim();\n return objectType && objectId ? { objectType, objectId } : null;\n } catch {\n return null;\n }\n}\n\nexport function readSystemObjectResolvedReference(\n value: unknown,\n): SystemObjectResolvedReference | null {\n if (!isRecord(value)) return null;\n const uri = readString(value.uri);\n const objectType = readString(value.objectType);\n const objectId = readString(value.objectId);\n const label = readString(value.label);\n const updatedAt = readString(value.updatedAt);\n const version = readString(value.version);\n const assetUri = readString(value.assetUri);\n const fileName = readString(value.fileName);\n const mimeType = readString(value.mimeType);\n const { sizeBytes } = value;\n const parsed = uri ? parseSystemObjectReferenceUri(uri) : null;\n if (\n !uri || !objectType || !objectId || !parsed ||\n parsed.objectType !== objectType || parsed.objectId !== objectId ||\n !label || !updatedAt || !version || !assetUri || !fileName || !mimeType ||\n typeof sizeBytes !== \"number\" || !Number.isSafeInteger(sizeBytes) || sizeBytes < 0\n ) {\n return null;\n }\n return {\n uri,\n objectType,\n objectId,\n label,\n description: readString(value.description),\n updatedAt,\n version,\n assetUri,\n fileName,\n mimeType,\n sizeBytes,\n };\n}\n","export const PANEL_APP_INLINE_HOST_CONTRACT = {\n contentHeightMessageType: \"nextclaw:panel-app-content-height\",\n displayMode: \"card\",\n displayModeSearchParam: \"nextclawDisplayMode\",\n placement: \"inline\",\n placementSearchParam: \"nextclawPlacement\",\n} as const;\n","export const PANEL_APP_SCROLL_RESTORATION_CONTRACT = {\n restoreScrollMessageType: 'nextclaw:panel-app-restore-scroll',\n scrollMessageType: 'nextclaw:panel-app-scroll',\n version: 1,\n} as const;\n","type InlineContentElement = {\n readonly clientHeight: number;\n readonly offsetHeight: number;\n readonly scrollHeight: number;\n};\n\nexport function readInlineContentHeight(\n body: InlineContentElement | null | undefined,\n documentElement: InlineContentElement,\n): number {\n return Math.ceil(\n Math.max(\n body?.clientHeight ?? 0,\n body?.offsetHeight ?? 0,\n body?.scrollHeight ?? 0,\n documentElement.offsetHeight,\n ),\n );\n}\n","import type {\n DiagnosticFactValue,\n DiagnosticOutcome,\n} from \"../configs/ingress-keys.config.js\";\n\nexport type DiagnosticErrorClassification = {\n outcome: Extract<DiagnosticOutcome, \"cancelled\" | \"failed\">;\n reasonCode: string;\n providerCode?: string;\n facts?: Record<string, DiagnosticFactValue>;\n};\n\ntype AbortSignalLike = {\n aborted?: boolean;\n};\n\nconst CANCEL_NAMES = new Set([\"aborterror\", \"cancelederror\", \"cancellederror\"]);\nconst CANCEL_CODES = new Set([\"abort_err\", \"err_canceled\", \"err_cancelled\"]);\nconst TIMEOUT_CODES = new Set([\n \"etimedout\",\n \"err_socket_timeout\",\n \"und_err_connect_timeout\",\n \"und_err_headers_timeout\",\n \"und_err_body_timeout\",\n]);\nconst DNS_CODES = new Set([\"enotfound\", \"eai_again\"]);\nconst CONNECTION_REFUSED_CODES = new Set([\"econnrefused\"]);\nconst CONNECTION_RESET_CODES = new Set([\"econnreset\", \"epipe\"]);\nconst NETWORK_UNREACHABLE_CODES = new Set([\"enetunreach\", \"ehostunreach\"]);\n\nfunction readErrorField(error: unknown, key: string): unknown {\n if (!error || typeof error !== \"object\") {\n return undefined;\n }\n return (error as Record<string, unknown>)[key];\n}\n\nfunction readNormalizedString(error: unknown, key: string): string | undefined {\n let current = error;\n const seen = new Set<unknown>();\n for (let depth = 0; depth < 3 && current && !seen.has(current); depth += 1) {\n seen.add(current);\n const value = readErrorField(current, key);\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized) {\n return normalized;\n }\n }\n current = readErrorField(current, \"cause\");\n }\n return undefined;\n}\n\nfunction readHttpStatus(error: unknown, depth = 0): number | undefined {\n if (depth > 2) {\n return undefined;\n }\n for (const key of [\"status\", \"statusCode\"]) {\n const value = readErrorField(error, key);\n if (typeof value === \"number\" && Number.isInteger(value) && value >= 100 && value <= 599) {\n return value;\n }\n }\n const response = readErrorField(error, \"response\");\n if (response && response !== error) {\n const responseStatus = readHttpStatus(response, depth + 1);\n if (responseStatus !== undefined) {\n return responseStatus;\n }\n }\n const cause = readErrorField(error, \"cause\");\n return cause === error ? undefined : readHttpStatus(cause, depth + 1);\n}\n\nfunction isTlsCode(code: string | undefined): boolean {\n return Boolean(code && (\n code.startsWith(\"err_tls_\")\n || code.startsWith(\"cert_\")\n || code.includes(\"certificate\")\n ));\n}\n\nfunction classifyHttpStatus(status: number): string {\n if (status === 401) return \"http_unauthenticated\";\n if (status === 403) return \"http_forbidden\";\n if (status === 404) return \"http_not_found\";\n if (status === 408 || status === 504) return \"network_timeout\";\n if (status === 409) return \"http_conflict\";\n if (status === 429) return \"http_rate_limited\";\n if (status >= 500) return \"http_remote_unavailable\";\n if (status >= 400) return \"http_request_rejected\";\n return \"http_unexpected_status\";\n}\n\nexport function classifyDiagnosticError(\n error: unknown,\n signal?: AbortSignalLike,\n): DiagnosticErrorClassification {\n const name = readNormalizedString(error, \"name\");\n const code = readNormalizedString(error, \"code\");\n const providerCode = code && /^[a-z0-9][a-z0-9._-]{0,95}$/.test(code)\n ? code\n : undefined;\n\n if (signal?.aborted || CANCEL_NAMES.has(name ?? \"\") || CANCEL_CODES.has(code ?? \"\")) {\n return {\n outcome: \"cancelled\",\n reasonCode: \"operation_cancelled\",\n ...(providerCode ? { providerCode } : {}),\n };\n }\n if (TIMEOUT_CODES.has(code ?? \"\") || name === \"timeouterror\") {\n return { outcome: \"failed\", reasonCode: \"network_timeout\", ...(providerCode ? { providerCode } : {}) };\n }\n if (DNS_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_dns_failure\", ...(providerCode ? { providerCode } : {}) };\n }\n if (CONNECTION_REFUSED_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_connection_refused\", ...(providerCode ? { providerCode } : {}) };\n }\n if (CONNECTION_RESET_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_connection_reset\", ...(providerCode ? { providerCode } : {}) };\n }\n if (NETWORK_UNREACHABLE_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_unreachable\", ...(providerCode ? { providerCode } : {}) };\n }\n if (isTlsCode(code)) {\n return { outcome: \"failed\", reasonCode: \"network_tls_failure\", ...(providerCode ? { providerCode } : {}) };\n }\n\n const httpStatus = readHttpStatus(error);\n if (httpStatus !== undefined) {\n return {\n outcome: \"failed\",\n reasonCode: classifyHttpStatus(httpStatus),\n ...(providerCode ? { providerCode } : {}),\n facts: { httpStatus },\n };\n }\n\n return {\n outcome: \"failed\",\n reasonCode: error instanceof Error ? \"unexpected_error\" : \"non_error_thrown\",\n ...(providerCode ? { providerCode } : {}),\n };\n}\n","import type { NcpMessage } from \"@nextclaw/ncp\";\n\nexport const SILENT_REPLY_TOKEN = \"<noreply/>\";\n\nconst SILENT_REPLY_MARKER_PATTERN = /<\\s*noreply\\s*\\/\\s*>/i;\n\nexport function containsSilentReplyMarker(text: string | null | undefined): boolean {\n return Boolean(text && SILENT_REPLY_MARKER_PATTERN.test(text));\n}\n\nexport function isSilentReplyNcpMessage(message: NcpMessage): boolean {\n return message.role === \"assistant\" && message.parts.some(\n (part) => (part.type === \"text\" || part.type === \"rich-text\") && containsSilentReplyMarker(part.text),\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["isRecord"],"sources":["../src/types/typed-key.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/features/lifecycle/managers/effect-scope.manager.ts","../src/features/lifecycle/managers/contribution.manager.ts","../src/services/disposable.service.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-composer-token.config.ts","../src/utils/ui-content-params.utils.ts","../src/configs/chat-ui-resource-reference.config.ts","../src/configs/system-object-reference.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/configs/panel-app-scroll-restoration.config.ts","../src/configs/app-install-command.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/diagnostic-error.utils.ts","../src/utils/silent-reply.utils.ts"],"sourcesContent":["export type TypedKey<T = unknown> = {\n readonly id: string;\n readonly _type?: T;\n};\n\nexport type Key<T = unknown> = TypedKey<T> | string;\n\nexport function createTypedKey<T>(id: string): TypedKey<T> {\n const normalizedId = id.trim();\n if (!normalizedId) {\n throw new Error(\"typed key id is required\");\n }\n return { id: normalizedId };\n}\n\nexport function getKeyId(key: Key<unknown>): string {\n return typeof key === \"string\" ? key.trim() : key.id;\n}\n","import type {\n AppEventEmitOptions,\n AppEventEnvelope,\n AppEventHandler,\n AppEventKey,\n EventBusOptions,\n Unsubscribe,\n} from \"../types/event-bus.types.js\";\nimport { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport class EventBus {\n private readonly listeners = new Map<string, Set<AppEventHandler<unknown>>>();\n private readonly globalListeners = new Set<(event: AppEventEnvelope) => void>();\n private listenerCount = 0;\n private readonly onFirstSubscriber?: EventBusOptions[\"onFirstSubscriber\"];\n private readonly onListenerError?: EventBusOptions[\"onListenerError\"];\n private readonly onNoSubscribers?: EventBusOptions[\"onNoSubscribers\"];\n\n constructor(options: EventBusOptions = {}) {\n this.onFirstSubscriber = options.onFirstSubscriber;\n this.onListenerError = options.onListenerError;\n this.onNoSubscribers = options.onNoSubscribers;\n }\n\n emit = <T>(\n key: Key<T>,\n payload: T,\n options: AppEventEmitOptions = {},\n ): void => {\n const envelope: AppEventEnvelope<T> = {\n type: getKeyId(key),\n payload,\n ...(options.emittedAt ? { emittedAt: options.emittedAt } : {}),\n ...(options.source ? { source: options.source } : {}),\n };\n this.emitEnvelope(envelope);\n };\n\n emitEnvelope = <T>(event: AppEventEnvelope<T>): void => {\n const listeners = this.listeners.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n this.safeInvokeListener(event, listener as AppEventHandler<T>);\n }\n }\n if (this.globalListeners.size === 0) {\n return;\n }\n for (const listener of this.globalListeners) {\n this.safeInvokeGlobalListener(event, listener);\n }\n };\n\n on = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId) ?? new Set<AppEventHandler<unknown>>();\n const typedHandler = handler as AppEventHandler<unknown>;\n const added = !listeners.has(typedHandler);\n listeners.add(typedHandler);\n this.listeners.set(keyId, listeners);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n this.off(key, handler);\n };\n };\n\n off = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): void => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId);\n if (!listeners) {\n return;\n }\n const deleted = listeners.delete(handler as AppEventHandler<unknown>);\n if (listeners.size === 0) {\n this.listeners.delete(keyId);\n }\n if (deleted) {\n this.unregisterSubscriber();\n }\n };\n\n once = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const wrappedHandler: AppEventHandler<T> = (payload, envelope) => {\n unsubscribe();\n handler(payload, envelope);\n };\n const unsubscribe = this.on(key, wrappedHandler);\n return unsubscribe;\n };\n\n subscribeAll = (handler: (event: AppEventEnvelope) => void): Unsubscribe => {\n const added = !this.globalListeners.has(handler);\n this.globalListeners.add(handler);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n if (this.globalListeners.delete(handler)) {\n this.unregisterSubscriber();\n }\n };\n };\n\n private registerSubscriber = (): void => {\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.onFirstSubscriber?.();\n }\n };\n\n private unregisterSubscriber = (): void => {\n this.listenerCount = Math.max(0, this.listenerCount - 1);\n if (this.listenerCount === 0) {\n this.onNoSubscribers?.();\n }\n };\n\n private safeInvokeListener = <T>(\n event: AppEventEnvelope<T>,\n listener: AppEventHandler<T>,\n ): void => {\n try {\n listener(event.payload, event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n\n private safeInvokeGlobalListener = (\n event: AppEventEnvelope,\n listener: (event: AppEventEnvelope) => void,\n ): void => {\n try {\n listener(event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n}\n","import { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport type IngressEnvelope<TPayload = unknown> = {\n type: Key<TPayload>;\n extensionId?: string;\n generation?: string;\n payload?: TPayload;\n source?: string;\n};\n\nexport type IngressContext = {\n source: string;\n token?: string | null;\n};\n\nexport type IngressHandler<TPayload = unknown, TResult = unknown> = (\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n) => Promise<TResult> | TResult;\n\nexport class Ingress {\n private readonly handlers = new Map<string, IngressHandler<unknown, unknown>>();\n\n readonly addHandler = <TPayload = unknown, TResult = unknown>(\n type: Key<TPayload>,\n handler: IngressHandler<TPayload, TResult>,\n ): (() => void) => {\n const normalizedType = getKeyId(type);\n if (!normalizedType) {\n throw new Error(\"ingress type is required\");\n }\n this.handlers.set(normalizedType, handler as IngressHandler<unknown, unknown>);\n return () => {\n if (this.handlers.get(normalizedType) === handler) {\n this.handlers.delete(normalizedType);\n }\n };\n };\n\n readonly handle = async <TPayload = unknown, TResult = unknown>(\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n ): Promise<TResult> => {\n const normalizedType = getKeyId(envelope.type);\n const handler = this.handlers.get(normalizedType);\n if (!handler) {\n throw new Error(`Unsupported ingress type: ${normalizedType}`);\n }\n return await (handler as IngressHandler<TPayload, TResult>)(envelope, context);\n };\n}\n","import type {\n Disposer,\n EffectSetup,\n} from \"../types/lifecycle.types.js\";\n\ntype EffectRecord = {\n readonly setup: EffectSetup;\n cleanup?: Disposer;\n released: boolean;\n};\n\ntype EffectScopeState = \"idle\" | \"starting\" | \"started\" | \"disposed\";\n\nasync function disposeRecords(records: readonly EffectRecord[]): Promise<void> {\n const errors: unknown[] = [];\n for (const record of [...records].reverse()) {\n if (record.released) {\n continue;\n }\n record.released = true;\n try {\n await record.cleanup?.();\n } catch (error) {\n errors.push(error);\n } finally {\n record.cleanup = undefined;\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Multiple effects failed to dispose.\");\n }\n}\n\nexport class EffectScope {\n private readonly records: EffectRecord[] = [];\n private state: EffectScopeState = \"idle\";\n private startPromise: Promise<void> | undefined;\n\n register = (setup: EffectSetup): Disposer => {\n if (this.state !== \"idle\") {\n throw new Error(\"Effects can only be registered before the scope starts.\");\n }\n const record: EffectRecord = { setup, released: false };\n this.records.push(record);\n return async () => {\n if (record.released) {\n return;\n }\n record.released = true;\n const cleanup = record.cleanup;\n record.cleanup = undefined;\n await cleanup?.();\n };\n };\n\n start = async (): Promise<void> => {\n if (this.state === \"disposed\") {\n throw new Error(\"Effect scope has been disposed.\");\n }\n if (this.state === \"started\") {\n return;\n }\n if (this.startPromise) {\n return await this.startPromise;\n }\n this.startPromise = this.startInternal();\n try {\n await this.startPromise;\n } finally {\n this.startPromise = undefined;\n }\n };\n\n dispose = async (): Promise<void> => {\n if (this.state === \"disposed\") {\n return;\n }\n if (this.startPromise) {\n try {\n await this.startPromise;\n } catch {\n // startInternal already rolled back every active effect.\n }\n }\n this.state = \"disposed\";\n const records = this.records.splice(0);\n await disposeRecords(records);\n };\n\n private startInternal = async (): Promise<void> => {\n this.state = \"starting\";\n const activated: EffectRecord[] = [];\n try {\n for (const record of this.records) {\n if (record.released) {\n continue;\n }\n const cleanup = await record.setup();\n if (record.released) {\n await cleanup?.();\n continue;\n }\n record.cleanup = cleanup || undefined;\n activated.push(record);\n }\n this.state = \"started\";\n } catch (error) {\n this.state = \"disposed\";\n this.records.splice(0);\n try {\n await disposeRecords(activated);\n } catch {\n // Preserve the setup failure; rollback remains best effort.\n }\n throw error;\n }\n };\n}\n","import { EffectScope } from \"./effect-scope.manager.js\";\nimport type {\n Disposer,\n EffectSetup,\n IContribution,\n} from \"../types/lifecycle.types.js\";\n\ntype ContributionState = \"idle\" | \"setting-up\" | \"started\";\n\nexport abstract class Contribution implements IContribution {\n private effectScope = new EffectScope();\n private state: ContributionState = \"idle\";\n private startPromise: Promise<void> | undefined;\n\n protected abstract setup(): Promise<void> | void;\n\n protected readonly effect = (setup: EffectSetup): Disposer => {\n if (this.state !== \"setting-up\") {\n throw new Error(\"Effects can only be declared from setup().\");\n }\n return this.effectScope.register(setup);\n };\n\n start = async (): Promise<void> => {\n if (this.state === \"started\") {\n return;\n }\n if (this.startPromise) {\n return await this.startPromise;\n }\n this.startPromise = this.startInternal();\n try {\n await this.startPromise;\n } finally {\n this.startPromise = undefined;\n }\n };\n\n dispose = async (): Promise<void> => {\n if (this.state === \"idle\" && !this.startPromise) {\n return;\n }\n if (this.startPromise) {\n try {\n await this.startPromise;\n } catch {\n // startInternal already returned this contribution to an idle scope.\n }\n }\n try {\n await this.effectScope.dispose();\n } finally {\n this.effectScope = new EffectScope();\n this.state = \"idle\";\n }\n };\n\n private startInternal = async (): Promise<void> => {\n this.state = \"setting-up\";\n try {\n await this.setup();\n await this.effectScope.start();\n this.state = \"started\";\n } catch (error) {\n try {\n await this.effectScope.dispose();\n } finally {\n this.effectScope = new EffectScope();\n this.state = \"idle\";\n }\n throw error;\n }\n };\n}\n","export type Cleanup = () => void;\n\nexport type Disposable = {\n dispose: () => void;\n};\n\nconst once = (cleanup: Cleanup): Cleanup => {\n let disposed = false;\n return () => {\n if (disposed) {\n return;\n }\n disposed = true;\n cleanup();\n };\n};\n\nconst runCleanups = (cleanups: Cleanup[]): void => {\n const errors: unknown[] = [];\n for (const cleanup of cleanups) {\n try {\n cleanup();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Failed to run cleanups.\");\n }\n};\n\nexport const toDisposable = (dispose: Cleanup): Disposable => ({\n dispose: once(dispose),\n});\n\nexport abstract class DisposableOwner implements Disposable {\n protected readonly cleanups: Cleanup[] = [];\n private disposed = false;\n\n protected get isDisposed(): boolean {\n return this.disposed;\n }\n\n protected addCleanup = (cleanup: Cleanup): Cleanup => {\n const disposableCleanup = once(cleanup);\n if (this.disposed) {\n disposableCleanup();\n return disposableCleanup;\n }\n this.cleanups.push(disposableCleanup);\n return disposableCleanup;\n };\n\n protected addDisposable = <T extends Disposable>(disposable: T): T => {\n this.addCleanup(() => {\n disposable.dispose();\n });\n return disposable;\n };\n\n dispose = (): void => {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n const current = this.cleanups.splice(0);\n runCleanups(current.reverse());\n };\n}\n\nexport class DisposableStore implements Disposable {\n private readonly disposables = new Set<Disposable>();\n\n private isDisposed = false;\n\n add = <T extends Disposable>(disposable: T): T => {\n if (this.isDisposed) {\n disposable.dispose();\n return disposable;\n }\n this.disposables.add(disposable);\n return disposable;\n };\n\n clear = (): void => {\n const current = [...this.disposables];\n this.disposables.clear();\n for (const disposable of current.reverse()) {\n disposable.dispose();\n }\n };\n\n dispose = (): void => {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.clear();\n };\n}\n","import type { NcpEndpointEvent, NcpSessionSummary } from \"@nextclaw/ncp\";\nimport type { AppEventKey, EventKey } from \"../types/event-bus.types.js\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\nimport type { UiShowContentEventPayload } from \"../types/ui-show-content.types.js\";\nimport type { InboxDeliveryChangedEventPayload } from \"../types/inbox-delivery.types.js\";\nimport type { UpdateSnapshot } from \"../types/update.types.js\";\n\nexport function createEventKey<T>(id: string): EventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport function createAppEventKey<T>(id: string): AppEventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport const eventKeys = {\n configUpdated: createAppEventKey<{ path: string }>(\"config.updated\"),\n channelConfigApplyStatus: createAppEventKey<{\n channel: string;\n status: \"started\" | \"succeeded\" | \"failed\";\n message?: string;\n }>(\"channel.config.apply-status\"),\n sessionUpdated: createAppEventKey<{ sessionKey: string }>(\"session.updated\"),\n sessionRunStatus: createAppEventKey<{\n sessionKey: string;\n status: \"running\" | \"idle\";\n }>(\"session.run-status\"),\n sessionRunQueueUpdated: createAppEventKey<{ sessionKey: string }>(\n \"session.run-queue.updated\",\n ),\n sessionMetadataChanged: createAppEventKey<{\n metadata: Record<string, unknown>;\n mode: \"set\" | \"update\";\n sessionKey: string;\n }>(\"session.metadata.changed\"),\n ncpEvent: createAppEventKey<NcpEndpointEvent>(\"ncp.event\"),\n sessionSummaryUpsert: createAppEventKey<{ summary: NcpSessionSummary }>(\n \"session.summary.upsert\",\n ),\n sessionSummaryDelete: createAppEventKey<{ sessionKey: string }>(\n \"session.summary.delete\",\n ),\n uiShowContent: createAppEventKey<UiShowContentEventPayload>(\"ui.show-content\"),\n serverPathChanged: createAppEventKey<{ directoryPath: string }>(\n \"server-path.changed\",\n ),\n inboxDeliveryChanged: createAppEventKey<InboxDeliveryChangedEventPayload>(\n \"inbox.delivery.changed\",\n ),\n configReloadStarted: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.started\",\n ),\n configReloadFinished: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.finished\",\n ),\n error: createAppEventKey<{ message: string; code?: string }>(\"error\"),\n connectionOpen: createAppEventKey<Record<string, never> | undefined>(\n \"connection.open\",\n ),\n connectionClose: createAppEventKey<Record<string, never> | undefined>(\n \"connection.close\",\n ),\n connectionError: createAppEventKey<{ message?: string } | undefined>(\n \"connection.error\",\n ),\n runtimeUpdateSnapshot: createAppEventKey<UpdateSnapshot>(\n \"runtime.update.snapshot\",\n ),\n} as const;\n","import type {\n NcpAgentSendEnvelope,\n NcpMessage,\n NcpMessageAbortPayload,\n NcpMessagePart,\n NcpRunTriggerInput,\n} from \"@nextclaw/ncp\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\n\nexport const DIAGNOSTIC_CORRELATION_METADATA_KEY =\n \"nextclaw_diagnostic_correlation_id\";\n\nexport type ExtensionChannelTextContent = {\n type: \"text\";\n text: string;\n};\n\ntype ExtensionChannelResourceRef = {\n url?: string;\n assetUri?: string;\n mimeType?: string;\n name?: string;\n};\n\nexport type ExtensionChannelImageContent = ExtensionChannelResourceRef & {\n type: \"image\";\n};\n\nexport type ExtensionChannelFileContent = ExtensionChannelResourceRef & {\n type: \"file\";\n};\n\nexport type ExtensionChannelMessageContent =\n | ExtensionChannelTextContent\n | ExtensionChannelImageContent\n | ExtensionChannelFileContent;\n\nexport type ExtensionChannelSubmittedAttachment =\n ExtensionChannelResourceRef & {\n id?: string;\n path?: string;\n size?: number;\n source?: string;\n status?: \"ready\" | \"remote-only\";\n errorCode?:\n | \"too_large\"\n | \"download_failed\"\n | \"http_error\"\n | \"invalid_payload\";\n };\n\nexport type ExtensionChannelConfigGetIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelMessageSubmitIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n content: ExtensionChannelMessageContent;\n attachments?: ExtensionChannelSubmittedAttachment[];\n metadata?: Record<string, unknown>;\n};\n\nexport type DiagnosticOutcome =\n | \"observed\"\n | \"started\"\n | \"accepted\"\n | \"succeeded\"\n | \"rejected\"\n | \"cancelled\"\n | \"failed\"\n | \"unavailable\"\n | \"suppressed\";\n\nexport type DiagnosticFactValue = string | number | boolean | null;\n\nexport type ExtensionDiagnosticIngressPayload = {\n domain: string;\n event: string;\n component: string;\n outcome: DiagnosticOutcome;\n correlationId?: string;\n parentCorrelationId?: string;\n reasonCode?: string;\n providerCode?: string;\n durationMs?: number;\n attempt?: number;\n facts?: Record<string, DiagnosticFactValue>;\n};\n\nexport type ExtensionChannelCommandOptionType = \"string\" | \"boolean\" | \"number\";\n\nexport type ExtensionChannelCommandOption = {\n name: string;\n description: string;\n type: ExtensionChannelCommandOptionType;\n required?: boolean;\n};\n\nexport type ExtensionChannelCommandSpec = {\n name: string;\n description: string;\n options?: ExtensionChannelCommandOption[];\n};\n\nexport type ExtensionChannelCommandListIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelCommandListResponse = {\n commands: ExtensionChannelCommandSpec[];\n};\n\nexport type ExtensionChannelCommandExecuteIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n commandName?: string;\n rawText?: string;\n args?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\nexport type ExtensionChannelCommandExecuteResponse = {\n content: string;\n ephemeral?: boolean;\n};\n\nexport type ExtensionResponseIngressPayload =\n | {\n requestId: string;\n ok: true;\n data?: unknown;\n }\n | {\n requestId: string;\n ok: false;\n error: {\n message: string;\n };\n };\n\nexport type ExtensionRuntimeReadyIngressPayload = {\n generation: string;\n pid: number;\n};\n\nexport type ExtensionDesktopHostInvokeIngressPayload = {\n method: string;\n payload?: Record<string, unknown>;\n caller?: {\n sessionId?: string;\n agentRunId?: string;\n };\n};\n\nexport type ExtensionObservationEventIngressPayload = {\n subscriptionId: string;\n event: {\n eventId: string;\n eventType: string;\n occurredAt: string;\n observedAt?: string;\n cursor?: string;\n dedupeKey?: string;\n payload: unknown;\n sourceRefs?: string[];\n causationId?: string;\n correlationId?: string;\n };\n};\n\nexport type AgentRunSessionMessageRequestPayload = {\n message: NcpMessage;\n requestId: string;\n sessionId: string;\n trigger: NcpRunTriggerInput;\n};\n\nexport const CHAT_SESSION_MATERIALIZATION_METADATA_KEY =\n \"session_materialization\";\nexport const CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY =\n \"chat_continuation_target_message_id\";\n\nexport type AgentRunSessionMaterializationMetadata = {\n kind: \"child\";\n parentSessionId: string;\n inheritContext: true;\n};\n\nexport type AgentRunEditMessageIngressPayload = {\n correlationId?: string;\n message: NcpMessage;\n messageId: string;\n sessionId: string;\n};\n\nexport type AgentRunContinueIngressPayload = {\n correlationId?: string;\n sessionId: string;\n};\n\nexport type AgentRunSendIngressMetadata = Record<string, unknown> & {\n agentRuntimeId?: string;\n agentId?: string;\n projectRoot?: string;\n channel?: string;\n model?: string;\n maxTokens?: number;\n thinkingEffort?: string | null;\n chatId?: string;\n accountId?: string;\n senderId?: string;\n sessionKey?: string;\n label?: string;\n [CHAT_SESSION_MATERIALIZATION_METADATA_KEY]?: AgentRunSessionMaterializationMetadata;\n};\n\nexport type AgentRunSendIngressPayload =\n | (Omit<NcpAgentSendEnvelope, \"metadata\"> & {\n content?: never;\n metadata?: AgentRunSendIngressMetadata;\n peerId?: string;\n })\n | (Omit<NcpAgentSendEnvelope, \"message\" | \"metadata\"> & {\n content: NcpMessagePart[];\n metadata?: AgentRunSendIngressMetadata;\n message?: never;\n peerId?: string;\n });\n\nexport const ingressKeys = {\n extension: {\n channelConfigGet: createTypedKey<ExtensionChannelConfigGetIngressPayload>(\n \"extension.channel.config.get\",\n ),\n channelMessageSubmit:\n createTypedKey<ExtensionChannelMessageSubmitIngressPayload>(\n \"extension.channel.message.submit\",\n ),\n diagnosticEmit: createTypedKey<ExtensionDiagnosticIngressPayload>(\n \"extension.diagnostic.emit\",\n ),\n channelCommandList:\n createTypedKey<ExtensionChannelCommandListIngressPayload>(\n \"extension.channel.command.list\",\n ),\n channelCommandExecute:\n createTypedKey<ExtensionChannelCommandExecuteIngressPayload>(\n \"extension.channel.command.execute\",\n ),\n runtimeReady: createTypedKey<ExtensionRuntimeReadyIngressPayload>(\n \"extension.runtime.ready\",\n ),\n response:\n createTypedKey<ExtensionResponseIngressPayload>(\"extension.response\"),\n observationEvent: createTypedKey<ExtensionObservationEventIngressPayload>(\n \"extension.observation.event\",\n ),\n desktopHostInvoke: createTypedKey<ExtensionDesktopHostInvokeIngressPayload>(\n \"extension.host.desktop.invoke\",\n ),\n },\n agentRun: {\n send: createTypedKey<AgentRunSendIngressPayload>(\"agent-run.send\"),\n abort: createTypedKey<NcpMessageAbortPayload>(\"agent-run.abort\"),\n editMessage: createTypedKey<AgentRunEditMessageIngressPayload>(\n \"agent-run.edit-message\",\n ),\n continue:\n createTypedKey<AgentRunContinueIngressPayload>(\"agent-run.continue\"),\n sessionMessageRequest: createTypedKey<AgentRunSessionMessageRequestPayload>(\n \"agent-run.session-message.request\",\n ),\n },\n} as const;\n","export const RUNTIME_DEFAULT_MODEL_VALUE = \"__nextclaw_runtime_default__\";\n\nexport type RuntimeModelSelectionMode =\n | \"nextclaw\"\n | \"optional\"\n | \"runtime-default\";\n\nexport function isRuntimeDefaultModelValue(value: unknown): boolean {\n return value === RUNTIME_DEFAULT_MODEL_VALUE;\n}\n\nexport function normalizeRuntimeModelSelectionMode(\n value: unknown,\n): RuntimeModelSelectionMode {\n if (value === \"optional\" || value === \"runtime-default\") {\n return value;\n }\n return \"nextclaw\";\n}\n","import type {\n CHAT_UI_RESOURCE_TOKEN_KIND,\n ChatUiResourceReference,\n} from \"./chat-ui-resource-reference.config.js\";\n\nexport const CHAT_INLINE_TOKENS_METADATA_KEY = \"ui_inline_tokens\";\nexport const CHAT_INLINE_TOKENS_SCHEMA_VERSION = 2;\nexport const CHAT_PROJECT_TOKEN_KIND = \"project\";\nexport const CHAT_CONVERSATION_EXCERPT_TOKEN_KIND = \"conversation_excerpt\";\nexport const CHAT_WORKSPACE_FILE_TOKEN_KIND = \"workspace_file\";\nexport const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = \"workspace_directory\";\nexport const CHAT_WORKSPACE_EXCERPT_TOKEN_KIND = \"workspace_excerpt\";\nexport const CHAT_SYSTEM_OBJECT_TOKEN_KIND = \"system_object\";\n\nexport type ChatSkillSource = \"builtin\" | \"global\" | \"project\" | \"workspace\";\n\nexport type ChatSkillInlineTokenMetadata = {\n kind: \"skill\";\n ref: string;\n name: string;\n source: ChatSkillSource;\n path: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatWorkspaceInlineTokenMetadata = {\n kind:\n | typeof CHAT_WORKSPACE_FILE_TOKEN_KIND\n | typeof CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatWorkspaceExcerptInlineTokenMetadata = {\n kind: typeof CHAT_WORKSPACE_EXCERPT_TOKEN_KIND;\n key: string;\n path: string;\n label: string;\n excerpt: string;\n startLine: number | null;\n endLine: number | null;\n rawText: string;\n};\n\nexport type ChatConversationExcerptInlineTokenMetadata = {\n kind: typeof CHAT_CONVERSATION_EXCERPT_TOKEN_KIND;\n key: string;\n messageId: string;\n role: \"assistant\" | \"user\";\n label: string;\n excerpt: string;\n rawText: string;\n};\n\nexport type ChatProjectInlineTokenMetadata = {\n kind: typeof CHAT_PROJECT_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatSystemObjectInlineTokenMetadata = {\n kind: typeof CHAT_SYSTEM_OBJECT_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n reference: {\n uri: string;\n objectType: string;\n objectId: string;\n label: string;\n description: string | null;\n updatedAt: string;\n version: string;\n assetUri: string;\n fileName: string;\n mimeType: string;\n sizeBytes: number;\n };\n};\n\nexport type ChatUiResourceInlineTokenMetadata = {\n kind: typeof CHAT_UI_RESOURCE_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n reference: ChatUiResourceReference;\n};\n\nexport type ChatInlineTokenMetadata =\n | ChatSkillInlineTokenMetadata\n | ChatProjectInlineTokenMetadata\n | ChatWorkspaceInlineTokenMetadata\n | ChatWorkspaceExcerptInlineTokenMetadata\n | ChatConversationExcerptInlineTokenMetadata\n | ChatUiResourceInlineTokenMetadata\n | ChatSystemObjectInlineTokenMetadata;\n\nexport type ChatInlineTokensMetadata = {\n schemaVersion: typeof CHAT_INLINE_TOKENS_SCHEMA_VERSION;\n items: ChatInlineTokenMetadata[];\n};\n","import type {\n UiContentParams,\n UiContentParamValue,\n} from \"../types/ui-show-content.types.js\";\n\nexport const UI_CONTENT_PARAMS_HOST_CONTRACT = {\n bootstrapQueryParam: \"nextclawContentParams\",\n bootstrapQueryValue: \"1\",\n maxDepth: 32,\n maxSerializedBytes: 64 * 1024,\n windowNamePrefix: \"nextclaw:content-params:v1:\",\n} as const;\n\nexport class UiContentParamsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UiContentParamsError\";\n }\n}\n\nfunction assertJsonValue(\n value: unknown,\n depth: number,\n ancestors: readonly object[],\n): asserts value is UiContentParamValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new UiContentParamsError(\n \"params must contain only finite numbers.\",\n );\n }\n return;\n }\n if (typeof value !== \"object\") {\n throw new UiContentParamsError(\"params must contain only JSON values.\");\n }\n if (depth >= UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth) {\n throw new UiContentParamsError(\n `params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth} nested levels.`,\n );\n }\n if (ancestors.includes(value)) {\n throw new UiContentParamsError(\n \"params must not contain circular references.\",\n );\n }\n const nextAncestors = [...ancestors, value];\n if (Array.isArray(value)) {\n for (const item of value) {\n assertJsonValue(item, depth + 1, nextAncestors);\n }\n return;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new UiContentParamsError(\"params must contain only plain objects.\");\n }\n for (const item of Object.values(value)) {\n assertJsonValue(item, depth + 1, nextAncestors);\n }\n}\n\nexport function readUiContentParams(\n value: unknown,\n): UiContentParams | undefined {\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new UiContentParamsError(\"params must be a JSON object.\");\n }\n assertJsonValue(value, 0, []);\n const serialized = JSON.stringify(value);\n const byteLength = new TextEncoder().encode(serialized).byteLength;\n if (byteLength > UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes) {\n throw new UiContentParamsError(\n `params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes} serialized bytes.`,\n );\n }\n return value as UiContentParams;\n}\n\nexport function createUiContentParamsWindowName(\n params: UiContentParams | undefined,\n): string | undefined {\n const normalized = readUiContentParams(params);\n return normalized\n ? `${UI_CONTENT_PARAMS_HOST_CONTRACT.windowNamePrefix}${JSON.stringify(normalized)}`\n : undefined;\n}\n\nexport function appendUiContentParamsBootstrapQuery(\n url: string,\n params: UiContentParams | undefined,\n): string {\n if (!readUiContentParams(params)) {\n return url;\n }\n const [withoutHash, hash] = url.split(\"#\", 2);\n const queryStart = withoutHash.indexOf(\"?\");\n const pathname =\n queryStart >= 0 ? withoutHash.slice(0, queryStart) : withoutHash;\n const query = new URLSearchParams(\n queryStart >= 0 ? withoutHash.slice(queryStart + 1) : \"\",\n );\n query.set(\n UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryParam,\n UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryValue,\n );\n return `${pathname}?${query.toString()}${\n typeof hash === \"string\" ? `#${hash}` : \"\"\n }`;\n}\n","import type { UiContentParams } from \"../types/ui-show-content.types.js\";\nimport { readUiContentParams } from \"../utils/ui-content-params.utils.js\";\n\nexport const CHAT_UI_RESOURCE_TOKEN_KIND = \"ui_resource\";\n\nconst UI_RESOURCE_KIND_MAX_LENGTH = 80;\nconst UI_RESOURCE_TITLE_MAX_LENGTH = 512;\nconst UI_RESOURCE_URI_MAX_LENGTH = 8_192;\n\nexport type ChatUiResourceReference = {\n uri: string;\n resourceKind: string;\n title: string;\n currentUrl: string;\n contentParams?: UiContentParams;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readBoundedString(value: unknown, maxLength: number): string | null {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim();\n return normalized && normalized.length <= maxLength ? normalized : null;\n}\n\nexport function readChatUiResourceReference(\n value: unknown,\n): ChatUiResourceReference | null {\n if (!isRecord(value)) return null;\n const uri = readBoundedString(value.uri, UI_RESOURCE_URI_MAX_LENGTH);\n const resourceKind = readBoundedString(\n value.resourceKind,\n UI_RESOURCE_KIND_MAX_LENGTH,\n );\n const title = readBoundedString(value.title, UI_RESOURCE_TITLE_MAX_LENGTH);\n const currentUrl = readBoundedString(\n value.currentUrl,\n UI_RESOURCE_URI_MAX_LENGTH,\n );\n if (!uri || !resourceKind || !title || !currentUrl) return null;\n try {\n const contentParams = readUiContentParams(value.contentParams);\n return {\n uri,\n resourceKind,\n title,\n currentUrl,\n ...(contentParams ? { contentParams: structuredClone(contentParams) } : {}),\n };\n } catch {\n return null;\n }\n}\n","export const SYSTEM_OBJECT_REFERENCE_URI_SCHEME = \"nextclaw:\";\nexport const SYSTEM_OBJECT_REFERENCE_URI_HOST = \"objects\";\nexport const SYSTEM_OBJECT_TYPE_INBOX_DELIVERY = \"inbox-delivery\";\nexport const SYSTEM_OBJECT_TYPE_CRON_JOB = \"cron-job\";\nexport const SYSTEM_OBJECT_REFERENCE_DEFAULT_LIMIT = 20;\nexport const SYSTEM_OBJECT_REFERENCE_MAX_LIMIT = 50;\n\nexport type SystemObjectReferenceDisplayText = {\n default: string;\n translations?: Record<string, string>;\n};\n\nexport type SystemObjectReferenceGroupIcon = \"calendar-clock\" | \"file\" | \"inbox\";\n\nexport type SystemObjectReferenceGroupDescriptor = {\n objectType: string;\n label: SystemObjectReferenceDisplayText;\n description: SystemObjectReferenceDisplayText;\n icon: SystemObjectReferenceGroupIcon;\n order: number;\n};\n\nexport type SystemObjectReferenceItem = {\n uri: string;\n objectType: string;\n objectId: string;\n label: string;\n description: string | null;\n updatedAt: string;\n};\n\nexport type SystemObjectReferenceGroupView = SystemObjectReferenceGroupDescriptor & {\n items: SystemObjectReferenceItem[];\n total: number;\n};\n\nexport type SystemObjectReferenceListView = {\n groups: SystemObjectReferenceGroupView[];\n total: number;\n};\n\nexport type SystemObjectResolvedReference = SystemObjectReferenceItem & {\n version: string;\n assetUri: string;\n fileName: string;\n mimeType: string;\n sizeBytes: number;\n};\n\nexport type SystemObjectReferenceResolveRequest = {\n uri: string;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nexport function createSystemObjectReferenceUri(\n objectType: string,\n objectId: string,\n): string {\n const normalizedType = objectType.trim();\n const normalizedId = objectId.trim();\n if (!normalizedType || !normalizedId) {\n throw new Error(\"System object type and id must be non-empty.\");\n }\n return `nextclaw://${SYSTEM_OBJECT_REFERENCE_URI_HOST}/${encodeURIComponent(normalizedType)}/${encodeURIComponent(normalizedId)}`;\n}\n\nexport function parseSystemObjectReferenceUri(\n uri: string,\n): { objectType: string; objectId: string } | null {\n try {\n const parsed = new URL(uri.trim());\n if (\n parsed.protocol !== SYSTEM_OBJECT_REFERENCE_URI_SCHEME ||\n parsed.host !== SYSTEM_OBJECT_REFERENCE_URI_HOST ||\n parsed.search ||\n parsed.hash\n ) {\n return null;\n }\n const segments = parsed.pathname.split(\"/\").filter(Boolean);\n if (segments.length !== 2) {\n return null;\n }\n const objectType = decodeURIComponent(segments[0] ?? \"\").trim();\n const objectId = decodeURIComponent(segments[1] ?? \"\").trim();\n return objectType && objectId ? { objectType, objectId } : null;\n } catch {\n return null;\n }\n}\n\nexport function readSystemObjectResolvedReference(\n value: unknown,\n): SystemObjectResolvedReference | null {\n if (!isRecord(value)) return null;\n const uri = readString(value.uri);\n const objectType = readString(value.objectType);\n const objectId = readString(value.objectId);\n const label = readString(value.label);\n const updatedAt = readString(value.updatedAt);\n const version = readString(value.version);\n const assetUri = readString(value.assetUri);\n const fileName = readString(value.fileName);\n const mimeType = readString(value.mimeType);\n const { sizeBytes } = value;\n const parsed = uri ? parseSystemObjectReferenceUri(uri) : null;\n if (\n !uri || !objectType || !objectId || !parsed ||\n parsed.objectType !== objectType || parsed.objectId !== objectId ||\n !label || !updatedAt || !version || !assetUri || !fileName || !mimeType ||\n typeof sizeBytes !== \"number\" || !Number.isSafeInteger(sizeBytes) || sizeBytes < 0\n ) {\n return null;\n }\n return {\n uri,\n objectType,\n objectId,\n label,\n description: readString(value.description),\n updatedAt,\n version,\n assetUri,\n fileName,\n mimeType,\n sizeBytes,\n };\n}\n","export const PANEL_APP_INLINE_HOST_CONTRACT = {\n contentHeightMessageType: \"nextclaw:panel-app-content-height\",\n displayMode: \"card\",\n displayModeSearchParam: \"nextclawDisplayMode\",\n placement: \"inline\",\n placementSearchParam: \"nextclawPlacement\",\n} as const;\n","export const PANEL_APP_SCROLL_RESTORATION_CONTRACT = {\n restoreScrollMessageType: 'nextclaw:panel-app-restore-scroll',\n scrollMessageType: 'nextclaw:panel-app-scroll',\n version: 1,\n} as const;\n","/** The sole user-facing command grammar for installing a Marketplace App. */\nexport function formatNextClawAppInstallCommand(appId: string): string {\n const normalizedAppId = appId.trim();\n if (!normalizedAppId) throw new Error(\"App id is required to format an install command.\");\n return `nextclaw app install ${normalizedAppId}`;\n}\n","type InlineContentElement = {\n readonly clientHeight: number;\n readonly offsetHeight: number;\n readonly scrollHeight: number;\n};\n\nexport function readInlineContentHeight(\n body: InlineContentElement | null | undefined,\n documentElement: InlineContentElement,\n): number {\n return Math.ceil(\n Math.max(\n body?.clientHeight ?? 0,\n body?.offsetHeight ?? 0,\n body?.scrollHeight ?? 0,\n documentElement.offsetHeight,\n ),\n );\n}\n","import type {\n DiagnosticFactValue,\n DiagnosticOutcome,\n} from \"../configs/ingress-keys.config.js\";\n\nexport type DiagnosticErrorClassification = {\n outcome: Extract<DiagnosticOutcome, \"cancelled\" | \"failed\">;\n reasonCode: string;\n providerCode?: string;\n facts?: Record<string, DiagnosticFactValue>;\n};\n\ntype AbortSignalLike = {\n aborted?: boolean;\n};\n\nconst CANCEL_NAMES = new Set([\"aborterror\", \"cancelederror\", \"cancellederror\"]);\nconst CANCEL_CODES = new Set([\"abort_err\", \"err_canceled\", \"err_cancelled\"]);\nconst TIMEOUT_CODES = new Set([\n \"etimedout\",\n \"err_socket_timeout\",\n \"und_err_connect_timeout\",\n \"und_err_headers_timeout\",\n \"und_err_body_timeout\",\n]);\nconst DNS_CODES = new Set([\"enotfound\", \"eai_again\"]);\nconst CONNECTION_REFUSED_CODES = new Set([\"econnrefused\"]);\nconst CONNECTION_RESET_CODES = new Set([\"econnreset\", \"epipe\"]);\nconst NETWORK_UNREACHABLE_CODES = new Set([\"enetunreach\", \"ehostunreach\"]);\n\nfunction readErrorField(error: unknown, key: string): unknown {\n if (!error || typeof error !== \"object\") {\n return undefined;\n }\n return (error as Record<string, unknown>)[key];\n}\n\nfunction readNormalizedString(error: unknown, key: string): string | undefined {\n let current = error;\n const seen = new Set<unknown>();\n for (let depth = 0; depth < 3 && current && !seen.has(current); depth += 1) {\n seen.add(current);\n const value = readErrorField(current, key);\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized) {\n return normalized;\n }\n }\n current = readErrorField(current, \"cause\");\n }\n return undefined;\n}\n\nfunction readHttpStatus(error: unknown, depth = 0): number | undefined {\n if (depth > 2) {\n return undefined;\n }\n for (const key of [\"status\", \"statusCode\"]) {\n const value = readErrorField(error, key);\n if (typeof value === \"number\" && Number.isInteger(value) && value >= 100 && value <= 599) {\n return value;\n }\n }\n const response = readErrorField(error, \"response\");\n if (response && response !== error) {\n const responseStatus = readHttpStatus(response, depth + 1);\n if (responseStatus !== undefined) {\n return responseStatus;\n }\n }\n const cause = readErrorField(error, \"cause\");\n return cause === error ? undefined : readHttpStatus(cause, depth + 1);\n}\n\nfunction isTlsCode(code: string | undefined): boolean {\n return Boolean(code && (\n code.startsWith(\"err_tls_\")\n || code.startsWith(\"cert_\")\n || code.includes(\"certificate\")\n ));\n}\n\nfunction classifyHttpStatus(status: number): string {\n if (status === 401) return \"http_unauthenticated\";\n if (status === 403) return \"http_forbidden\";\n if (status === 404) return \"http_not_found\";\n if (status === 408 || status === 504) return \"network_timeout\";\n if (status === 409) return \"http_conflict\";\n if (status === 429) return \"http_rate_limited\";\n if (status >= 500) return \"http_remote_unavailable\";\n if (status >= 400) return \"http_request_rejected\";\n return \"http_unexpected_status\";\n}\n\nexport function classifyDiagnosticError(\n error: unknown,\n signal?: AbortSignalLike,\n): DiagnosticErrorClassification {\n const name = readNormalizedString(error, \"name\");\n const code = readNormalizedString(error, \"code\");\n const providerCode = code && /^[a-z0-9][a-z0-9._-]{0,95}$/.test(code)\n ? code\n : undefined;\n\n if (signal?.aborted || CANCEL_NAMES.has(name ?? \"\") || CANCEL_CODES.has(code ?? \"\")) {\n return {\n outcome: \"cancelled\",\n reasonCode: \"operation_cancelled\",\n ...(providerCode ? { providerCode } : {}),\n };\n }\n if (TIMEOUT_CODES.has(code ?? \"\") || name === \"timeouterror\") {\n return { outcome: \"failed\", reasonCode: \"network_timeout\", ...(providerCode ? { providerCode } : {}) };\n }\n if (DNS_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_dns_failure\", ...(providerCode ? { providerCode } : {}) };\n }\n if (CONNECTION_REFUSED_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_connection_refused\", ...(providerCode ? { providerCode } : {}) };\n }\n if (CONNECTION_RESET_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_connection_reset\", ...(providerCode ? { providerCode } : {}) };\n }\n if (NETWORK_UNREACHABLE_CODES.has(code ?? \"\")) {\n return { outcome: \"failed\", reasonCode: \"network_unreachable\", ...(providerCode ? { providerCode } : {}) };\n }\n if (isTlsCode(code)) {\n return { outcome: \"failed\", reasonCode: \"network_tls_failure\", ...(providerCode ? { providerCode } : {}) };\n }\n\n const httpStatus = readHttpStatus(error);\n if (httpStatus !== undefined) {\n return {\n outcome: \"failed\",\n reasonCode: classifyHttpStatus(httpStatus),\n ...(providerCode ? { providerCode } : {}),\n facts: { httpStatus },\n };\n }\n\n return {\n outcome: \"failed\",\n reasonCode: error instanceof Error ? \"unexpected_error\" : \"non_error_thrown\",\n ...(providerCode ? { providerCode } : {}),\n };\n}\n","import type { NcpMessage } from \"@nextclaw/ncp\";\n\nexport const SILENT_REPLY_TOKEN = \"<noreply/>\";\n\nconst SILENT_REPLY_MARKER_PATTERN = /<\\s*noreply\\s*\\/\\s*>/i;\n\nexport function containsSilentReplyMarker(text: string | null | undefined): boolean {\n return Boolean(text && SILENT_REPLY_MARKER_PATTERN.test(text));\n}\n\nexport function isSilentReplyNcpMessage(message: NcpMessage): boolean {\n return message.role === \"assistant\" && message.parts.some(\n (part) => (part.type === \"text\" || part.type === \"rich-text\") && containsSilentReplyMarker(part.text),\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/shared",
3
- "version": "0.4.28",
3
+ "version": "0.4.30",
4
4
  "private": false,
5
5
  "description": "Shared lightweight primitives and contracts for NextClaw packages.",
6
6
  "type": "module",