@nextclaw/shared 0.4.17 → 0.4.19

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
@@ -350,11 +350,22 @@ type AgentRunSessionMessageRequestPayload = {
350
350
  sessionId: string;
351
351
  };
352
352
  declare const CHAT_SESSION_MATERIALIZATION_METADATA_KEY = "session_materialization";
353
+ declare const CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY = "chat_continuation_target_message_id";
353
354
  type AgentRunSessionMaterializationMetadata = {
354
355
  kind: "child";
355
356
  parentSessionId: string;
356
357
  inheritContext: true;
357
358
  };
359
+ type AgentRunEditMessageIngressPayload = {
360
+ correlationId?: string;
361
+ message: NcpMessage;
362
+ messageId: string;
363
+ sessionId: string;
364
+ };
365
+ type AgentRunContinueIngressPayload = {
366
+ correlationId?: string;
367
+ sessionId: string;
368
+ };
358
369
  type AgentRunSendIngressMetadata = Record<string, unknown> & {
359
370
  agentRuntimeId?: string;
360
371
  agentId?: string;
@@ -391,6 +402,8 @@ declare const ingressKeys: {
391
402
  readonly agentRun: {
392
403
  readonly send: TypedKey<AgentRunSendIngressPayload>;
393
404
  readonly abort: TypedKey<NcpMessageAbortPayload>;
405
+ readonly editMessage: TypedKey<AgentRunEditMessageIngressPayload>;
406
+ readonly continue: TypedKey<AgentRunContinueIngressPayload>;
394
407
  readonly sessionMessageRequest: TypedKey<AgentRunSessionMessageRequestPayload>;
395
408
  };
396
409
  };
@@ -407,6 +420,7 @@ declare const CHAT_INLINE_TOKENS_SCHEMA_VERSION = 2;
407
420
  declare const CHAT_PROJECT_TOKEN_KIND = "project";
408
421
  declare const CHAT_WORKSPACE_FILE_TOKEN_KIND = "workspace_file";
409
422
  declare const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = "workspace_directory";
423
+ declare const CHAT_WORKSPACE_EXCERPT_TOKEN_KIND = "workspace_excerpt";
410
424
  type ChatSkillSource = "builtin" | "global" | "project" | "workspace";
411
425
  type ChatSkillInlineTokenMetadata = {
412
426
  kind: "skill";
@@ -423,13 +437,23 @@ type ChatWorkspaceInlineTokenMetadata = {
423
437
  label: string;
424
438
  rawText: string;
425
439
  };
440
+ type ChatWorkspaceExcerptInlineTokenMetadata = {
441
+ kind: typeof CHAT_WORKSPACE_EXCERPT_TOKEN_KIND;
442
+ key: string;
443
+ path: string;
444
+ label: string;
445
+ excerpt: string;
446
+ startLine: number | null;
447
+ endLine: number | null;
448
+ rawText: string;
449
+ };
426
450
  type ChatProjectInlineTokenMetadata = {
427
451
  kind: typeof CHAT_PROJECT_TOKEN_KIND;
428
452
  key: string;
429
453
  label: string;
430
454
  rawText: string;
431
455
  };
432
- type ChatInlineTokenMetadata = ChatSkillInlineTokenMetadata | ChatProjectInlineTokenMetadata | ChatWorkspaceInlineTokenMetadata;
456
+ type ChatInlineTokenMetadata = ChatSkillInlineTokenMetadata | ChatProjectInlineTokenMetadata | ChatWorkspaceInlineTokenMetadata | ChatWorkspaceExcerptInlineTokenMetadata;
433
457
  type ChatInlineTokensMetadata = {
434
458
  schemaVersion: typeof CHAT_INLINE_TOKENS_SCHEMA_VERSION;
435
459
  items: ChatInlineTokenMetadata[];
@@ -444,6 +468,13 @@ declare const PANEL_APP_INLINE_HOST_CONTRACT: {
444
468
  readonly placementSearchParam: "nextclawPlacement";
445
469
  };
446
470
  //#endregion
471
+ //#region src/configs/panel-app-scroll-restoration.config.d.ts
472
+ declare const PANEL_APP_SCROLL_RESTORATION_CONTRACT: {
473
+ readonly restoreScrollMessageType: "nextclaw:panel-app-restore-scroll";
474
+ readonly scrollMessageType: "nextclaw:panel-app-scroll";
475
+ readonly version: 1;
476
+ };
477
+ //#endregion
447
478
  //#region src/utils/inline-content-height.utils.d.ts
448
479
  type InlineContentElement = {
449
480
  readonly clientHeight: number;
@@ -452,6 +483,11 @@ type InlineContentElement = {
452
483
  };
453
484
  declare function readInlineContentHeight(body: InlineContentElement | null | undefined, documentElement: InlineContentElement): number;
454
485
  //#endregion
486
+ //#region src/utils/silent-reply.utils.d.ts
487
+ declare const SILENT_REPLY_TOKEN = "<noreply/>";
488
+ declare function containsSilentReplyMarker(text: string | null | undefined): boolean;
489
+ declare function isSilentReplyNcpMessage(message: NcpMessage): boolean;
490
+ //#endregion
455
491
  //#region src/utils/ui-content-params.utils.d.ts
456
492
  declare const UI_CONTENT_PARAMS_HOST_CONTRACT: {
457
493
  readonly bootstrapQueryParam: "nextclawContentParams";
@@ -467,5 +503,5 @@ declare function readUiContentParams(value: unknown): UiContentParams | undefine
467
503
  declare function createUiContentParamsWindowName(params: UiContentParams | undefined): string | undefined;
468
504
  declare function appendUiContentParamsBootstrapQuery(url: string, params: UiContentParams | undefined): string;
469
505
  //#endregion
470
- export { type AgentRunSendIngressPayload, type AgentRunSessionMaterializationMetadata, type AgentRunSessionMessageRequestPayload, type AppEvent, type AppEventEmitOptions, type AppEventEnvelope, type AppEventHandler, type AppEventKey, type AppEventSource, CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, type ChatInlineTokenMetadata, type ChatInlineTokensMetadata, type ChatProjectInlineTokenMetadata, type ChatSkillInlineTokenMetadata, type ChatSkillSource, type ChatWorkspaceInlineTokenMetadata, type Cleanup, type Disposable, DisposableOwner, DisposableStore, 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 ExtensionResponseIngressPayload, INBOX_DELIVERY_SESSION_METADATA_KEY, type InboxDelivery, type InboxDeliveryChangedEventPayload, type InboxDeliveryContentType, type InboxDeliveryContinueResult, type InboxDeliveryListView, type InboxDeliverySource, type InboxDeliveryStateAction, type InboxDeliveryStateUpdate, Ingress, type IngressContext, type IngressEnvelope, type IngressHandler, type InstallationKind, type Key, PANEL_APP_INLINE_HOST_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, type RuntimeModelSelectionMode, 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, createAppEventKey, createEventKey, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, normalizeRuntimeModelSelectionMode, readInlineContentHeight, readUiContentParams, toDisposable };
506
+ 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_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_EXCERPT_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, type ChatInlineTokenMetadata, type ChatInlineTokensMetadata, type ChatProjectInlineTokenMetadata, type ChatSkillInlineTokenMetadata, type ChatSkillSource, type ChatWorkspaceExcerptInlineTokenMetadata, type ChatWorkspaceInlineTokenMetadata, type Cleanup, type Disposable, DisposableOwner, DisposableStore, 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 ExtensionResponseIngressPayload, INBOX_DELIVERY_SESSION_METADATA_KEY, type InboxDelivery, type InboxDeliveryChangedEventPayload, type InboxDeliveryContentType, type InboxDeliveryContinueResult, type InboxDeliveryListView, type InboxDeliverySource, type InboxDeliveryStateAction, type InboxDeliveryStateUpdate, Ingress, type IngressContext, type IngressEnvelope, type IngressHandler, type InstallationKind, type Key, PANEL_APP_INLINE_HOST_CONTRACT, PANEL_APP_SCROLL_RESTORATION_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, type RuntimeModelSelectionMode, SILENT_REPLY_TOKEN, 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, containsSilentReplyMarker, createAppEventKey, createEventKey, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, isSilentReplyNcpMessage, normalizeRuntimeModelSelectionMode, readInlineContentHeight, readUiContentParams, toDisposable };
471
507
  //# 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/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-composer-token.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/utils/inline-content-height.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/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-composer-token.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/silent-reply.utils.ts","../src/utils/ui-content-params.utils.ts"],"mappings":";;;KAAY,QAAA;EAAA,SACD,EAAA;EAAA,SACA,KAAA,GAAQ,CAAA;AAAA;AAAA,KAGP,GAAA,gBAAmB,QAAA,CAAS,CAAA;AAAA,iBAExB,cAAA,GAAA,CAAkB,EAAA,WAAa,QAAA,CAAS,CAAA;AAAA,iBAQxC,QAAA,CAAS,GAAA,EAAK,GAAA;;;KCblB,QAAA,MAAc,QAAA,CAAS,CAAA;AAAA,KAEvB,WAAA;AAAA,KAEA,aAAA;EACV,IAAA;EACA,OAAA,EAAS,CAAA;EACT,SAAA;EACA,MAAA,GAAS,WAAA;AAAA;AAAA,KAGC,gBAAA;EACV,SAAA;EACA,MAAA,GAAS,WAAA;AAAA;AAAA,KAGC,YAAA,OAAmB,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,aAAA,CAAc,CAAA;AAAA,KAEvD,WAAA;AAAA,KAEA,eAAA;EACV,iBAAA;EACA,eAAA,IAAmB,MAAA;IACjB,IAAA;IACA,OAAA;IACA,KAAA;EAAA;EAEF,eAAA;AAAA;AAAA,KAGU,WAAA,MAAiB,GAAA,CAAI,CAAA;AAAA,KACrB,cAAA,GAAiB,WAAA;AAAA,KACjB,gBAAA,gBAAgC,aAAA,CAAc,CAAA;AAAA,KAC9C,mBAAA,GAAsB,gBAAA;AAAA,KACtB,eAAA,MAAqB,YAAA,CAAa,CAAA;AAAA,KAClC,QAAA,GAAW,gBAAA;;;cC3BV,QAAA;EAAA,iBACM,SAAA;EAAA,iBACA,eAAA;EAAA,QACT,aAAA;EAAA,iBACS,iBAAA;EAAA,iBACA,eAAA;EAAA,iBACA,eAAA;cAEL,OAAA,GAAS,eAAA;EAMrB,IAAA,MACE,GAAA,EAAK,GAAA,CAAI,CAAA,GACT,OAAA,EAAS,CAAA,EACT,OAAA,GAAS,mBAAA;EAWX,YAAA,MAAmB,KAAA,EAAO,gBAAA,CAAiB,CAAA;EAe3C,EAAA,MAAS,GAAA,EAAK,WAAA,CAAY,CAAA,GAAI,OAAA,EAAS,eAAA,CAAgB,CAAA,MAAK,WAAA;EAe5D,GAAA,MAAU,GAAA,EAAK,WAAA,CAAY,CAAA,GAAI,OAAA,EAAS,eAAA,CAAgB,CAAA;EAexD,IAAA,MAAW,GAAA,EAAK,WAAA,CAAY,CAAA,GAAI,OAAA,EAAS,eAAA,CAAgB,CAAA,MAAK,WAAA;EAS9D,YAAA,GAAgB,OAAA,GAAU,KAAA,EAAO,gBAAA,cAA4B,WAAA;EAAA,QAarD,kBAAA;EAAA,QAOA,oBAAA;EAAA,QAOA,kBAAA;EAAA,QAeA,wBAAA;AAAA;;;KCpIE,eAAA;EACV,IAAA,EAAM,GAAA,CAAI,QAAA;EACV,WAAA;EACA,OAAA,GAAU,QAAA;EACV,MAAA;AAAA;AAAA,KAGU,cAAA;EACV,MAAA;EACA,KAAA;AAAA;AAAA,KAGU,cAAA,2CACV,QAAA,EAAU,eAAA,CAAgB,QAAA,GAC1B,OAAA,EAAS,cAAA,KACN,OAAA,CAAQ,OAAA,IAAW,OAAA;AAAA,cAEX,OAAA;EAAA,iBACM,QAAA;EAAA,SAER,UAAA,0CACP,IAAA,EAAM,GAAA,CAAI,QAAA,GACV,OAAA,EAAS,cAAA,CAAe,QAAA,EAAU,OAAA;EAAA,SAc3B,MAAA,0CACP,QAAA,EAAU,eAAA,CAAgB,QAAA,GAC1B,OAAA,EAAS,cAAA,KACR,OAAA,CAAQ,OAAA;AAAA;;;KCzCD,OAAA;AAAA,KAEA,UAAA;EACV,OAAA;AAAA;AAAA,cA+BW,YAAA,GAAgB,OAAA,EAAS,OAAA,KAAU,UAAA;AAAA,uBAI1B,eAAA,YAA2B,UAAA;EAAA,mBAC5B,QAAA,EAAU,OAAA;EAAA,QACrB,QAAA;EAAA,cAEM,UAAA,CAAA;EAAA,UAIJ,UAAA,GAAc,OAAA,EAAS,OAAA,KAAU,OAAA;EAAA,UAUjC,aAAA,aAA2B,UAAA,EAAY,UAAA,EAAY,CAAA,KAAI,CAAA;EAOjE,OAAA;AAAA;AAAA,cAUW,eAAA,YAA2B,UAAA;EAAA,iBACrB,WAAA;EAAA,QAET,UAAA;EAER,GAAA,aAAiB,UAAA,EAAY,UAAA,EAAY,CAAA,KAAI,CAAA;EAS7C,KAAA;EAQA,OAAA;AAAA;;;KC/FU,oBAAA;AAAA,KACA,sBAAA;AAAA,KACA,uBAAA;AAAA,KACA,mBAAA,sCAKR,mBAAA;EAAA,CACG,GAAA,WAAc,mBAAA;AAAA;AAAA,KACT,eAAA,GAAkB,MAAA,SAAe,mBAAA;AAAA,KAEjC,mBAAA;EAEN,IAAA;EACA,OAAA;IACE,IAAA;IACA,IAAA;IACA,MAAA;IACA,MAAA,EAAQ,uBAAA;IACR,MAAA,GAAS,eAAA;EAAA;AAAA;EAIX,IAAA;EACA,OAAA;IACE,GAAA;EAAA;AAAA;EAIF,IAAA;EACA,OAAA;IACE,KAAA;IACA,IAAA;IACA,MAAA,GAAS,eAAA;EAAA;AAAA;AAAA,KAIL,yBAAA;EACV,EAAA;EACA,UAAA;EACA,MAAA,EAAQ,mBAAA;EACR,KAAA;EACA,OAAA,EAAS,oBAAA;EACT,SAAA,EAAW,sBAAA;AAAA;;;cC5CA,mCAAA;AAAA,KAED,wBAAA;AAAA,KAEA,mBAAA;EACV,IAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;AAAA;AAAA,KAGU,aAAA;EACV,EAAA;EACA,KAAA;EACA,OAAA;EACA,OAAA;EACA,WAAA,EAAa,wBAAA;EACb,MAAA,EAAQ,mBAAA;EACR,SAAA;EACA,SAAA;EACA,WAAA;EACA,MAAA;EACA,UAAA;EACA,qBAAA;AAAA;AAAA,KAGU,qBAAA;EACV,UAAA,EAAY,aAAA;EACZ,KAAA;EACA,WAAA;EACA,gBAAA;AAAA;AAAA,KAGU,wBAAA;AAAA,KAOA,wBAAA;EACV,MAAA,EAAQ,wBAAA;AAAA;AAAA,KAGE,2BAAA;EACV,QAAA,EAAU,aAAA;EACV,SAAA;EACA,OAAA;AAAA;AAAA,KAGU,gCAAA;EACV,UAAA;EACA,SAAA;AAAA;;;KCrDU,YAAA;AAAA,KAYA,gBAAA;AAAA,KAMA,iBAAA;AAAA,KAKA,kBAAA;AAAA,KAEA,cAAA;EACV,eAAA;EACA,UAAA;EACA,OAAA;AAAA;AAAA,KAGU,cAAA;EACV,MAAA,EAAQ,YAAA;EACR,gBAAA,EAAkB,gBAAA;EAClB,OAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,aAAA;EACA,QAAA,EAAU,cAAA;EACV,aAAA;EACA,eAAA;EACA,WAAA,EAAa,iBAAA;EACb,eAAA;EACA,YAAA;EACA,YAAA,GAAe,kBAAA;EACf,iBAAA;AAAA;;;iBC1Cc,cAAA,GAAA,CAAkB,EAAA,WAAa,QAAA,CAAS,CAAA;AAAA,iBAIxC,iBAAA,GAAA,CAAqB,EAAA,WAAa,WAAA,CAAY,CAAA;AAAA,cAIjD,SAAA;EAAA;;;;;;;;;;;;;;;;;;;cAgBC,MAAA;;;;;;aAKuC,iBAAA;EAAA;EAAA;;;;;;;;;;;;;;;;;;;;KC5BzC,2BAAA;EACV,IAAA;EACA,IAAA;AAAA;AAAA,KAGG,2BAAA;EACH,GAAA;EACA,QAAA;EACA,QAAA;EACA,IAAA;AAAA;AAAA,KAGU,4BAAA,GAA+B,2BAAA;EAAgC,IAAA;AAAA;AAAA,KAE/D,2BAAA,GAA8B,2BAAA;EAAgC,IAAA;AAAA;AAAA,KAE9D,8BAAA,GACR,2BAAA,GACA,4BAAA,GACA,2BAAA;AAAA,KAEQ,mCAAA,GAAsC,2BAAA;EAChD,EAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;EACA,MAAA;EACA,SAAA;AAAA;AAAA,KAGU,uCAAA;EACV,SAAA;AAAA;AAAA,KAGU,2CAAA;EACV,SAAA;EACA,cAAA;EACA,QAAA;EACA,OAAA,EAAS,8BAAA;EACT,WAAA,GAAc,mCAAA;EACd,QAAA,GAAW,MAAA;AAAA;AAAA,KAGD,iCAAA;AAAA,KAEA,6BAAA;EACV,IAAA;EACA,WAAA;EACA,IAAA,EAAM,iCAAA;EACN,QAAA;AAAA;AAAA,KAGU,2BAAA;EACV,IAAA;EACA,WAAA;EACA,OAAA,GAAU,6BAAA;AAAA;AAAA,KAGA,yCAAA;EACV,SAAA;AAAA;AAAA,KAGU,mCAAA;EACV,QAAA,EAAU,2BAAA;AAAA;AAAA,KAGA,4CAAA;EACV,SAAA;EACA,cAAA;EACA,QAAA;EACA,WAAA;EACA,OAAA;EACA,IAAA,GAAO,MAAA;EACP,QAAA,GAAW,MAAA;AAAA;AAAA,KAGD,sCAAA;EACV,OAAA;EACA,SAAA;AAAA;AAAA,KAGU,+BAAA;EAEN,SAAA;EACA,EAAA;EACA,IAAA;AAAA;EAGA,SAAA;EACA,EAAA;EACA,KAAA;IACE,OAAA;EAAA;AAAA;AAAA,KAII,oCAAA;EACV,OAAA,EAAS,UAAA;EACT,SAAA;EACA,SAAA;AAAA;AAAA,cAGW,yCAAA;AAAA,cACA,6CAAA;AAAA,KAGD,sCAAA;EACV,IAAA;EACA,eAAA;EACA,cAAA;AAAA;AAAA,KAGU,iCAAA;EACV,aAAA;EACA,OAAA,EAAS,UAAA;EACT,SAAA;EACA,SAAA;AAAA;AAAA,KAGU,8BAAA;EACV,aAAA;EACA,SAAA;AAAA;AAAA,KAGU,2BAAA,GAA8B,MAAA;EACxC,cAAA;EACA,OAAA;EACA,WAAA;EACA,OAAA;EACA,KAAA;EACA,SAAA;EACA,cAAA;EACA,MAAA;EACA,SAAA;EACA,QAAA;EACA,UAAA;EACA,KAAA;EAAA,CACC,yCAAA,IAA6C,sCAAA;AAAA;AAAA,KAGpC,0BAAA,IACP,IAAA,CAAK,oBAAA;EACJ,OAAA;EACA,QAAA,GAAW,2BAAA;EACX,MAAA;AAAA,MAED,IAAA,CAAK,oBAAA;EACJ,OAAA,EAAS,cAAA;EACT,QAAA,GAAW,2BAAA;EACX,OAAA;EACA,MAAA;AAAA;AAAA,cAGO,WAAA;EAAA;;;;;;;;;;;;;;;;;cChKA,2BAAA;AAAA,KAED,yBAAA;AAAA,iBAKI,0BAAA,CAA2B,KAAA;AAAA,iBAI3B,kCAAA,CACd,KAAA,YACC,yBAAA;;;cCbU,+BAAA;AAAA,cACA,iCAAA;AAAA,cACA,uBAAA;AAAA,cACA,8BAAA;AAAA,cACA,mCAAA;AAAA,cACA,iCAAA;AAAA,KAED,eAAA;AAAA,KAEA,4BAAA;EACV,IAAA;EACA,GAAA;EACA,IAAA;EACA,MAAA,EAAQ,eAAA;EACR,IAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,KAGU,gCAAA;EACV,IAAA,SACW,8BAAA,UACA,mCAAA;EACX,GAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,KAGU,uCAAA;EACV,IAAA,SAAa,iCAAA;EACb,GAAA;EACA,IAAA;EACA,KAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;EACA,OAAA;AAAA;AAAA,KAGU,8BAAA;EACV,IAAA,SAAa,uBAAA;EACb,GAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,KAGU,uBAAA,GACR,4BAAA,GACA,8BAAA,GACA,gCAAA,GACA,uCAAA;AAAA,KAEQ,wBAAA;EACV,aAAA,SAAsB,iCAAA;EACtB,KAAA,EAAO,uBAAA;AAAA;;;cCtDI,8BAAA;EAAA;;;;;;;;cCAA,qCAAA;EAAA;;;;;;KCAR,oBAAA;EAAA,SACM,YAAA;EAAA,SACA,YAAA;EAAA,SACA,YAAA;AAAA;AAAA,iBAGK,uBAAA,CACd,IAAA,EAAM,oBAAA,qBACN,eAAA,EAAiB,oBAAA;;;cCNN,kBAAA;AAAA,iBAIG,yBAAA,CAA0B,IAAA;AAAA,iBAI1B,uBAAA,CAAwB,OAAA,EAAS,UAAA;;;cCLpC,+BAAA;EAAA;;;;;;cAQA,oBAAA,SAA6B,KAAA;cAC5B,OAAA;AAAA;AAAA,iBAuDE,mBAAA,CACd,KAAA,YACC,eAAA;AAAA,iBAkBa,+BAAA,CACd,MAAA,EAAQ,eAAA;AAAA,iBAQM,mCAAA,CACd,GAAA,UACA,MAAA,EAAQ,eAAA"}
package/dist/index.js CHANGED
@@ -226,6 +226,7 @@ const eventKeys = {
226
226
  //#endregion
227
227
  //#region src/configs/ingress-keys.config.ts
228
228
  const CHAT_SESSION_MATERIALIZATION_METADATA_KEY = "session_materialization";
229
+ const CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY = "chat_continuation_target_message_id";
229
230
  const ingressKeys = {
230
231
  extension: {
231
232
  channelConfigGet: createTypedKey("extension.channel.config.get"),
@@ -237,6 +238,8 @@ const ingressKeys = {
237
238
  agentRun: {
238
239
  send: createTypedKey("agent-run.send"),
239
240
  abort: createTypedKey("agent-run.abort"),
241
+ editMessage: createTypedKey("agent-run.edit-message"),
242
+ continue: createTypedKey("agent-run.continue"),
240
243
  sessionMessageRequest: createTypedKey("agent-run.session-message.request")
241
244
  }
242
245
  };
@@ -257,6 +260,7 @@ const CHAT_INLINE_TOKENS_SCHEMA_VERSION = 2;
257
260
  const CHAT_PROJECT_TOKEN_KIND = "project";
258
261
  const CHAT_WORKSPACE_FILE_TOKEN_KIND = "workspace_file";
259
262
  const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = "workspace_directory";
263
+ const CHAT_WORKSPACE_EXCERPT_TOKEN_KIND = "workspace_excerpt";
260
264
  //#endregion
261
265
  //#region src/configs/panel-app-inline-host.config.ts
262
266
  const PANEL_APP_INLINE_HOST_CONTRACT = {
@@ -267,11 +271,28 @@ const PANEL_APP_INLINE_HOST_CONTRACT = {
267
271
  placementSearchParam: "nextclawPlacement"
268
272
  };
269
273
  //#endregion
274
+ //#region src/configs/panel-app-scroll-restoration.config.ts
275
+ const PANEL_APP_SCROLL_RESTORATION_CONTRACT = {
276
+ restoreScrollMessageType: "nextclaw:panel-app-restore-scroll",
277
+ scrollMessageType: "nextclaw:panel-app-scroll",
278
+ version: 1
279
+ };
280
+ //#endregion
270
281
  //#region src/utils/inline-content-height.utils.ts
271
282
  function readInlineContentHeight(body, documentElement) {
272
283
  return Math.ceil(Math.max(body?.clientHeight ?? 0, body?.offsetHeight ?? 0, body?.scrollHeight ?? 0, documentElement.offsetHeight));
273
284
  }
274
285
  //#endregion
286
+ //#region src/utils/silent-reply.utils.ts
287
+ const SILENT_REPLY_TOKEN = "<noreply/>";
288
+ const SILENT_REPLY_MARKER_PATTERN = /<\s*noreply\s*\/\s*>/i;
289
+ function containsSilentReplyMarker(text) {
290
+ return Boolean(text && SILENT_REPLY_MARKER_PATTERN.test(text));
291
+ }
292
+ function isSilentReplyNcpMessage(message) {
293
+ return message.role === "assistant" && message.parts.some((part) => (part.type === "text" || part.type === "rich-text") && containsSilentReplyMarker(part.text));
294
+ }
295
+ //#endregion
275
296
  //#region src/utils/ui-content-params.utils.ts
276
297
  const UI_CONTENT_PARAMS_HOST_CONTRACT = {
277
298
  bootstrapQueryParam: "nextclawContentParams",
@@ -326,6 +347,6 @@ function appendUiContentParamsBootstrapQuery(url, params) {
326
347
  return `${pathname}?${query.toString()}${typeof hash === "string" ? `#${hash}` : ""}`;
327
348
  }
328
349
  //#endregion
329
- export { CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, DisposableOwner, DisposableStore, EventBus, INBOX_DELIVERY_SESSION_METADATA_KEY, Ingress, PANEL_APP_INLINE_HOST_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, UI_CONTENT_PARAMS_HOST_CONTRACT, UiContentParamsError, appendUiContentParamsBootstrapQuery, createAppEventKey, createEventKey, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, normalizeRuntimeModelSelectionMode, readInlineContentHeight, readUiContentParams, toDisposable };
350
+ export { CHAT_CONTINUATION_TARGET_MESSAGE_METADATA_KEY, CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_PROJECT_TOKEN_KIND, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_EXCERPT_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, DisposableOwner, DisposableStore, EventBus, INBOX_DELIVERY_SESSION_METADATA_KEY, Ingress, PANEL_APP_INLINE_HOST_CONTRACT, PANEL_APP_SCROLL_RESTORATION_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, SILENT_REPLY_TOKEN, UI_CONTENT_PARAMS_HOST_CONTRACT, UiContentParamsError, appendUiContentParamsBootstrapQuery, containsSilentReplyMarker, createAppEventKey, createEventKey, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, isSilentReplyNcpMessage, normalizeRuntimeModelSelectionMode, readInlineContentHeight, readUiContentParams, toDisposable };
330
351
 
331
352
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/types/typed-key.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/services/disposable.service.ts","../src/types/inbox-delivery.types.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/configs/panel-app-inline-host.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/ui-content-params.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 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","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","export const INBOX_DELIVERY_SESSION_METADATA_KEY = \"inbox_delivery_id\";\n\nexport type InboxDeliveryContentType = \"markdown\" | \"html\";\n\nexport type InboxDeliverySource = {\n kind: \"agent\";\n agentId: string | null;\n sessionId: string | null;\n toolCallId: string | null;\n filePath: string | null;\n};\n\nexport type InboxDelivery = {\n id: string;\n title: string;\n summary: string | null;\n content: string;\n contentType: InboxDeliveryContentType;\n source: InboxDeliverySource;\n createdAt: string;\n updatedAt: string;\n presentedAt: string | null;\n readAt: string | null;\n archivedAt: string | null;\n conversationSessionId: string | null;\n};\n\nexport type InboxDeliveryListView = {\n deliveries: InboxDelivery[];\n total: number;\n unreadCount: number;\n unpresentedCount: number;\n};\n\nexport type InboxDeliveryStateAction =\n | \"present\"\n | \"read\"\n | \"mark_unread\"\n | \"archive\"\n | \"restore\";\n\nexport type InboxDeliveryStateUpdate = {\n action: InboxDeliveryStateAction;\n};\n\nexport type InboxDeliveryContinueResult = {\n delivery: InboxDelivery;\n sessionId: string;\n created: boolean;\n};\n\nexport type InboxDeliveryChangedEventPayload = {\n deliveryId: string;\n operation: \"upsert\" | \"delete\";\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 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} from \"@nextclaw/ncp\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\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 & { type: \"image\" };\n\nexport type ExtensionChannelFileContent = ExtensionChannelResourceRef & { type: \"file\" };\n\nexport type ExtensionChannelMessageContent =\n | ExtensionChannelTextContent\n | ExtensionChannelImageContent\n | ExtensionChannelFileContent;\n\nexport type ExtensionChannelSubmittedAttachment = ExtensionChannelResourceRef & {\n id?: string;\n path?: string;\n size?: number;\n source?: string;\n status?: \"ready\" | \"remote-only\";\n errorCode?: \"too_large\" | \"download_failed\" | \"http_error\" | \"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 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 AgentRunSessionMessageRequestPayload = {\n message: NcpMessage;\n requestId: string;\n sessionId: string;\n};\n\nexport const CHAT_SESSION_MATERIALIZATION_METADATA_KEY = \"session_materialization\";\n\nexport type AgentRunSessionMaterializationMetadata = {\n kind: \"child\";\n parentSessionId: string;\n inheritContext: true;\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 channelCommandList: createTypedKey<ExtensionChannelCommandListIngressPayload>(\n \"extension.channel.command.list\",\n ),\n channelCommandExecute:\n createTypedKey<ExtensionChannelCommandExecuteIngressPayload>(\n \"extension.channel.command.execute\",\n ),\n response: createTypedKey<ExtensionResponseIngressPayload>(\"extension.response\"),\n },\n agentRun: {\n send: createTypedKey<AgentRunSendIngressPayload>(\"agent-run.send\"),\n abort: createTypedKey<NcpMessageAbortPayload>(\"agent-run.abort\"),\n sessionMessageRequest:\n 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","export 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_WORKSPACE_FILE_TOKEN_KIND = \"workspace_file\";\nexport const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = \"workspace_directory\";\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 ChatProjectInlineTokenMetadata = {\n kind: typeof CHAT_PROJECT_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatInlineTokenMetadata =\n | ChatSkillInlineTokenMetadata\n | ChatProjectInlineTokenMetadata\n | ChatWorkspaceInlineTokenMetadata;\n\nexport type ChatInlineTokensMetadata = {\n schemaVersion: typeof CHAT_INLINE_TOKENS_SCHEMA_VERSION;\n items: ChatInlineTokenMetadata[];\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","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 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"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/types/typed-key.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/services/disposable.service.ts","../src/types/inbox-delivery.types.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/configs/panel-app-inline-host.config.ts","../src/configs/panel-app-scroll-restoration.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/silent-reply.utils.ts","../src/utils/ui-content-params.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 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","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","export const INBOX_DELIVERY_SESSION_METADATA_KEY = \"inbox_delivery_id\";\n\nexport type InboxDeliveryContentType = \"markdown\" | \"html\";\n\nexport type InboxDeliverySource = {\n kind: \"agent\";\n agentId: string | null;\n sessionId: string | null;\n toolCallId: string | null;\n filePath: string | null;\n};\n\nexport type InboxDelivery = {\n id: string;\n title: string;\n summary: string | null;\n content: string;\n contentType: InboxDeliveryContentType;\n source: InboxDeliverySource;\n createdAt: string;\n updatedAt: string;\n presentedAt: string | null;\n readAt: string | null;\n archivedAt: string | null;\n conversationSessionId: string | null;\n};\n\nexport type InboxDeliveryListView = {\n deliveries: InboxDelivery[];\n total: number;\n unreadCount: number;\n unpresentedCount: number;\n};\n\nexport type InboxDeliveryStateAction =\n | \"present\"\n | \"read\"\n | \"mark_unread\"\n | \"archive\"\n | \"restore\";\n\nexport type InboxDeliveryStateUpdate = {\n action: InboxDeliveryStateAction;\n};\n\nexport type InboxDeliveryContinueResult = {\n delivery: InboxDelivery;\n sessionId: string;\n created: boolean;\n};\n\nexport type InboxDeliveryChangedEventPayload = {\n deliveryId: string;\n operation: \"upsert\" | \"delete\";\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 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} from \"@nextclaw/ncp\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\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 & { type: \"image\" };\n\nexport type ExtensionChannelFileContent = ExtensionChannelResourceRef & { type: \"file\" };\n\nexport type ExtensionChannelMessageContent =\n | ExtensionChannelTextContent\n | ExtensionChannelImageContent\n | ExtensionChannelFileContent;\n\nexport type ExtensionChannelSubmittedAttachment = ExtensionChannelResourceRef & {\n id?: string;\n path?: string;\n size?: number;\n source?: string;\n status?: \"ready\" | \"remote-only\";\n errorCode?: \"too_large\" | \"download_failed\" | \"http_error\" | \"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 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 AgentRunSessionMessageRequestPayload = {\n message: NcpMessage;\n requestId: string;\n sessionId: string;\n};\n\nexport const CHAT_SESSION_MATERIALIZATION_METADATA_KEY = \"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 channelCommandList: createTypedKey<ExtensionChannelCommandListIngressPayload>(\n \"extension.channel.command.list\",\n ),\n channelCommandExecute:\n createTypedKey<ExtensionChannelCommandExecuteIngressPayload>(\n \"extension.channel.command.execute\",\n ),\n response: createTypedKey<ExtensionResponseIngressPayload>(\"extension.response\"),\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: createTypedKey<AgentRunContinueIngressPayload>(\n \"agent-run.continue\",\n ),\n sessionMessageRequest:\n 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","export 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_WORKSPACE_FILE_TOKEN_KIND = \"workspace_file\";\nexport const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = \"workspace_directory\";\nexport const CHAT_WORKSPACE_EXCERPT_TOKEN_KIND = \"workspace_excerpt\";\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 ChatProjectInlineTokenMetadata = {\n kind: typeof CHAT_PROJECT_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatInlineTokenMetadata =\n | ChatSkillInlineTokenMetadata\n | ChatProjectInlineTokenMetadata\n | ChatWorkspaceInlineTokenMetadata\n | ChatWorkspaceExcerptInlineTokenMetadata;\n\nexport type ChatInlineTokensMetadata = {\n schemaVersion: typeof CHAT_INLINE_TOKENS_SCHEMA_VERSION;\n items: ChatInlineTokenMetadata[];\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 { 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","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"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/shared",
3
- "version": "0.4.17",
3
+ "version": "0.4.19",
4
4
  "private": false,
5
5
  "description": "Shared lightweight primitives and contracts for NextClaw packages.",
6
6
  "type": "module",
@@ -15,7 +15,7 @@
15
15
  "dist"
16
16
  ],
17
17
  "dependencies": {
18
- "@nextclaw/ncp": "0.7.15"
18
+ "@nextclaw/ncp": "0.7.16"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@types/node": "^20.17.6",