@nextclaw/ncp 0.5.16 → 0.5.18-beta.0

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
@@ -340,6 +340,9 @@ interface NcpLLMApi {
340
340
  * The same content can be sent as a single full event (e.g. message.incoming or message.completed)
341
341
  * instead; endpoints or upper layers choose as needed.
342
342
  */
343
+ type NcpCorrelationPayload = {
344
+ correlationId?: string;
345
+ };
343
346
  type NcpRequestEnvelope = {
344
347
  sessionId: string;
345
348
  message: NcpMessage;
@@ -366,30 +369,27 @@ type NcpResponseEnvelope = {
366
369
  sessionId: string;
367
370
  message: NcpMessage;
368
371
  metadata?: Record<string, unknown>;
369
- };
372
+ } & NcpCorrelationPayload;
370
373
  type NcpCompletedEnvelope = {
371
374
  sessionId: string;
372
375
  message: NcpMessage;
373
- correlationId?: string;
374
376
  metadata?: Record<string, unknown>;
375
- };
377
+ } & NcpCorrelationPayload;
376
378
  type NcpFailedEnvelope = {
377
379
  sessionId: string;
378
380
  messageId?: string;
379
381
  error: NcpError;
380
- correlationId?: string;
381
382
  metadata?: Record<string, unknown>;
382
- };
383
+ } & NcpCorrelationPayload;
383
384
  type NcpMessageAcceptedPayload = {
384
385
  messageId: string;
385
- correlationId?: string;
386
386
  transportId?: string;
387
- };
387
+ } & NcpCorrelationPayload;
388
388
  /** Payload for message.abort: identifies which session's active execution to cancel. */
389
389
  type NcpMessageAbortPayload = {
390
390
  sessionId: string;
391
391
  messageId?: string;
392
- };
392
+ } & NcpCorrelationPayload;
393
393
  /**
394
394
  * Payload for message.stream-request: attach to the live event stream of a session.
395
395
  * Used when reconnecting during an active response or attaching another live reader.
@@ -405,9 +405,8 @@ type NcpStreamRequestPayload = {
405
405
  type NcpMessageSentPayload = {
406
406
  sessionId: string;
407
407
  message: NcpMessage;
408
- correlationId?: string;
409
408
  metadata?: Record<string, unknown>;
410
- };
409
+ } & NcpCorrelationPayload;
411
410
  type NcpTypingStartPayload = {
412
411
  sessionId: string; /** Participant who is typing (human user or bot/assistant). */
413
412
  userId?: string;
@@ -447,26 +446,26 @@ type NcpRunStartedPayload = {
447
446
  messageId?: string;
448
447
  threadId?: string;
449
448
  runId?: string;
450
- };
449
+ } & NcpCorrelationPayload;
451
450
  type NcpRunFinishedPayload = {
452
451
  sessionId?: string;
453
452
  messageId?: string;
454
453
  threadId?: string;
455
454
  runId?: string;
456
- };
455
+ } & NcpCorrelationPayload;
457
456
  type NcpRunErrorPayload = {
458
457
  sessionId?: string;
459
458
  messageId?: string;
460
459
  error?: string;
461
460
  threadId?: string;
462
461
  runId?: string;
463
- };
462
+ } & NcpCorrelationPayload;
464
463
  type NcpRunMetadataPayload = {
465
464
  sessionId?: string;
466
465
  messageId?: string;
467
466
  runId?: string;
468
467
  metadata: Record<string, unknown>;
469
- };
468
+ } & NcpCorrelationPayload;
470
469
  type NcpContextWindowUpdatedPayload = {
471
470
  sessionId: string;
472
471
  contextWindow: Record<string, unknown>;
@@ -474,56 +473,56 @@ type NcpContextWindowUpdatedPayload = {
474
473
  type NcpTextStartPayload = {
475
474
  sessionId: string;
476
475
  messageId: string;
477
- };
476
+ } & NcpCorrelationPayload;
478
477
  type NcpTextDeltaPayload = {
479
478
  sessionId: string;
480
479
  messageId: string;
481
480
  delta: string;
482
- };
481
+ } & NcpCorrelationPayload;
483
482
  type NcpTextEndPayload = {
484
483
  sessionId: string;
485
484
  messageId: string;
486
- };
485
+ } & NcpCorrelationPayload;
487
486
  type NcpReasoningStartPayload = {
488
487
  sessionId: string;
489
488
  messageId: string;
490
- };
489
+ } & NcpCorrelationPayload;
491
490
  type NcpReasoningDeltaPayload = {
492
491
  sessionId: string;
493
492
  messageId: string;
494
493
  delta: string;
495
- };
494
+ } & NcpCorrelationPayload;
496
495
  type NcpReasoningEndPayload = {
497
496
  sessionId: string;
498
497
  messageId: string;
499
- };
498
+ } & NcpCorrelationPayload;
500
499
  type NcpToolCallStartPayload = {
501
500
  sessionId: string;
502
501
  messageId?: string;
503
502
  toolCallId: string;
504
503
  toolName: string;
505
- };
504
+ } & NcpCorrelationPayload;
506
505
  type NcpToolCallArgsPayload = {
507
506
  sessionId: string;
508
507
  toolCallId: string;
509
508
  args: string;
510
- };
509
+ } & NcpCorrelationPayload;
511
510
  type NcpToolCallArgsDeltaPayload = {
512
511
  sessionId: string;
513
512
  messageId?: string;
514
513
  toolCallId: string;
515
514
  delta: string;
516
- };
515
+ } & NcpCorrelationPayload;
517
516
  type NcpToolCallEndPayload = {
518
517
  sessionId: string;
519
518
  toolCallId: string;
520
- };
519
+ } & NcpCorrelationPayload;
521
520
  type NcpToolCallResultPayload = {
522
521
  sessionId: string;
523
522
  toolCallId: string;
524
523
  content: unknown;
525
524
  contentItems?: NcpToolOutputContentItem[];
526
- };
525
+ } & NcpCorrelationPayload;
527
526
  declare enum NcpEventType {
528
527
  EndpointReady = "endpoint.ready",
529
528
  EndpointError = "endpoint.error",
@@ -1026,5 +1025,5 @@ declare function normalizeAssistantText(text: string, mode: NcpAssistantReasonin
1026
1025
  declare function createNcpRunHandle(envelope: NcpRequestEnvelope): NcpRunHandle;
1027
1026
  declare function consumeNcpRunHandle(events: AsyncIterable<NcpEndpointEvent>, fallback: NcpRunHandle): Promise<NcpRunHandle>;
1028
1027
  //#endregion
1029
- export { ListMessagesOptions, ListSessionsOptions, NCP_INTERNAL_VISIBILITY_METADATA_KEY, NcpActionPart, NcpAgentClientEndpoint, NcpAgentConversationHydrationParams, NcpAgentConversationSnapshot, NcpAgentConversationStateManager, NcpAgentRunApi, NcpAgentRunInput, NcpAgentRunOptions, NcpAgentRunSendOptions, NcpAgentRunStreamOptions, NcpAgentRuntime, NcpAgentSendEnvelope, NcpAgentServerEndpoint, NcpAgentStreamProvider, NcpAssistantReasoningNormalizationMode, NcpAssistantReasoningSegment, NcpAssistantTextStreamNormalizer, NcpCardPart, NcpCompletedEnvelope, NcpContextBuilder, NcpContextPrepareOptions, NcpContextWindowUpdatedPayload, NcpConversationSnapshot, NcpConversationStateManager, NcpEncodeContext, NcpEndpoint, NcpEndpointEvent, NcpEndpointKind, NcpEndpointLatency, NcpEndpointManifest, NcpEndpointSubscriber, NcpError, NcpErrorCode, NcpEventType, NcpExtensionPart, NcpFailedEnvelope, NcpFilePart, NcpInvalidToolArgumentsResult, NcpLLMApi, NcpLLMApiInput, NcpLLMApiOptions, NcpMessage, NcpMessageAbortPayload, NcpMessageAcceptedPayload, NcpMessageDeliveredPayload, NcpMessagePart, NcpMessageReactionPayload, NcpMessageReadPayload, NcpMessageRecalledPayload, NcpMessageRole, NcpMessageSentPayload, NcpMessageStatus, NcpOutboundMessageDraft, NcpPendingToolCall, NcpPresenceUpdatedPayload, NcpProviderRuntimeRoute, NcpReasoningDeltaPayload, NcpReasoningEndPayload, NcpReasoningPart, NcpReasoningStartPayload, NcpReplyTagParseResult, NcpRequestEnvelope, NcpResponseEnvelope, NcpRichTextPart, NcpRoundBuffer, NcpRunContext, NcpRunErrorPayload, NcpRunFinalMetadata, NcpRunFinishedPayload, NcpRunHandle, NcpRunMetadataPayload, NcpRunReadyMetadata, NcpRunStartedPayload, NcpSessionApi, NcpSessionPatch, NcpSessionStatus, NcpSessionSummary, NcpSourcePart, NcpStepStartPart, NcpStreamEncoder, NcpStreamRequestPayload, NcpTextDeltaPayload, NcpTextEndPayload, NcpTextPart, NcpTextStartPayload, NcpTool, NcpToolCallArgsDeltaPayload, NcpToolCallArgsPayload, NcpToolCallEndPayload, NcpToolCallResult, NcpToolCallResultPayload, NcpToolCallStartPayload, NcpToolDefinition, NcpToolInvocationPart, NcpToolOutputContentItem, NcpToolOutputImageItem, NcpToolOutputTextItem, NcpToolRegistry, NcpTypingEndPayload, NcpTypingStartPayload, OpenAIChatChunk, OpenAIChatMessage, OpenAIContentPart, OpenAITool, OpenAIToolCall, OpenAIToolCallDelta, consumeNcpRunHandle, createNcpRunHandle, isHiddenNcpMessage, normalizeAssistantText, readAssistantReasoningNormalizationMode, readAssistantReasoningNormalizationModeFromMetadata, sanitizeAssistantReplyTags, stripReplyTagsFromText, writeAssistantReasoningNormalizationModeToMetadata };
1028
+ export { ListMessagesOptions, ListSessionsOptions, NCP_INTERNAL_VISIBILITY_METADATA_KEY, NcpActionPart, NcpAgentClientEndpoint, NcpAgentConversationHydrationParams, NcpAgentConversationSnapshot, NcpAgentConversationStateManager, NcpAgentRunApi, NcpAgentRunInput, NcpAgentRunOptions, NcpAgentRunSendOptions, NcpAgentRunStreamOptions, NcpAgentRuntime, NcpAgentSendEnvelope, NcpAgentServerEndpoint, NcpAgentStreamProvider, NcpAssistantReasoningNormalizationMode, NcpAssistantReasoningSegment, NcpAssistantTextStreamNormalizer, NcpCardPart, NcpCompletedEnvelope, NcpContextBuilder, NcpContextPrepareOptions, NcpContextWindowUpdatedPayload, NcpConversationSnapshot, NcpConversationStateManager, NcpCorrelationPayload, NcpEncodeContext, NcpEndpoint, NcpEndpointEvent, NcpEndpointKind, NcpEndpointLatency, NcpEndpointManifest, NcpEndpointSubscriber, NcpError, NcpErrorCode, NcpEventType, NcpExtensionPart, NcpFailedEnvelope, NcpFilePart, NcpInvalidToolArgumentsResult, NcpLLMApi, NcpLLMApiInput, NcpLLMApiOptions, NcpMessage, NcpMessageAbortPayload, NcpMessageAcceptedPayload, NcpMessageDeliveredPayload, NcpMessagePart, NcpMessageReactionPayload, NcpMessageReadPayload, NcpMessageRecalledPayload, NcpMessageRole, NcpMessageSentPayload, NcpMessageStatus, NcpOutboundMessageDraft, NcpPendingToolCall, NcpPresenceUpdatedPayload, NcpProviderRuntimeRoute, NcpReasoningDeltaPayload, NcpReasoningEndPayload, NcpReasoningPart, NcpReasoningStartPayload, NcpReplyTagParseResult, NcpRequestEnvelope, NcpResponseEnvelope, NcpRichTextPart, NcpRoundBuffer, NcpRunContext, NcpRunErrorPayload, NcpRunFinalMetadata, NcpRunFinishedPayload, NcpRunHandle, NcpRunMetadataPayload, NcpRunReadyMetadata, NcpRunStartedPayload, NcpSessionApi, NcpSessionPatch, NcpSessionStatus, NcpSessionSummary, NcpSourcePart, NcpStepStartPart, NcpStreamEncoder, NcpStreamRequestPayload, NcpTextDeltaPayload, NcpTextEndPayload, NcpTextPart, NcpTextStartPayload, NcpTool, NcpToolCallArgsDeltaPayload, NcpToolCallArgsPayload, NcpToolCallEndPayload, NcpToolCallResult, NcpToolCallResultPayload, NcpToolCallStartPayload, NcpToolDefinition, NcpToolInvocationPart, NcpToolOutputContentItem, NcpToolOutputImageItem, NcpToolOutputTextItem, NcpToolRegistry, NcpTypingEndPayload, NcpTypingStartPayload, OpenAIChatChunk, OpenAIChatMessage, OpenAIContentPart, OpenAITool, OpenAIToolCall, OpenAIToolCallDelta, consumeNcpRunHandle, createNcpRunHandle, isHiddenNcpMessage, normalizeAssistantText, readAssistantReasoningNormalizationMode, readAssistantReasoningNormalizationModeFromMetadata, sanitizeAssistantReplyTags, stripReplyTagsFromText, writeAssistantReasoningNormalizationModeToMetadata };
1030
1029
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/message.ts","../src/types/manifest.ts","../src/types/errors.ts","../src/types/session.ts","../src/agent-runtime/llm-api.ts","../src/types/events.ts","../src/types/run.ts","../src/types/endpoint.ts","../src/endpoint/agent-client-endpoint.ts","../src/endpoint/agent-server-endpoint.ts","../src/agent-runtime/runtime.ts","../src/agent-runtime/context-builder.ts","../src/agent-runtime/tool.ts","../src/agent-runtime/stream-encoder.ts","../src/agent-runtime/round-buffer.ts","../src/agent-backend/controller.ts","../src/toolkit/conversation-state.ts","../src/toolkit/agent/agent-conversation-state-manager.ts","../src/toolkit/reply-tags.ts","../src/toolkit/reasoning-normalization.ts","../src/toolkit/run-handle.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/message.ts","../src/types/manifest.ts","../src/types/errors.ts","../src/types/session.ts","../src/agent-runtime/llm-api.ts","../src/types/events.ts","../src/types/run.ts","../src/types/endpoint.ts","../src/endpoint/agent-client-endpoint.ts","../src/endpoint/agent-server-endpoint.ts","../src/agent-runtime/runtime.ts","../src/agent-runtime/context-builder.ts","../src/agent-runtime/tool.ts","../src/agent-runtime/stream-encoder.ts","../src/agent-runtime/round-buffer.ts","../src/agent-backend/controller.ts","../src/toolkit/conversation-state.ts","../src/toolkit/agent/agent-conversation-state-manager.ts","../src/toolkit/reply-tags.ts","../src/toolkit/reasoning-normalization.ts","../src/toolkit/run-handle.ts"],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/types/message.ts","../src/types/events.ts","../src/toolkit/reply-tags.ts","../src/toolkit/reasoning-normalization.ts","../src/toolkit/run-handle.ts"],"sourcesContent":["/**\n * Participants in an NCP conversation.\n *\n * - `user` — A human end-user interacting with the system.\n * - `assistant` — An AI model generating responses.\n * - `system` — Configuration or instruction injected before the conversation.\n * - `tool` — The result returned by a tool invocation.\n * - `service` — A platform-side notification or event (e.g. a bot posting a card),\n * distinct from an AI assistant response.\n */\nexport type NcpMessageRole = \"user\" | \"assistant\" | \"system\" | \"tool\" | \"service\";\n\nexport const NCP_INTERNAL_VISIBILITY_METADATA_KEY = \"ncp_internal_visibility\";\n\nexport function isHiddenNcpMessage(message: Pick<NcpMessage, \"metadata\"> | null | undefined): boolean {\n return message?.metadata?.[NCP_INTERNAL_VISIBILITY_METADATA_KEY] === \"hidden\";\n}\n\n/**\n * Lifecycle state of a message.\n *\n * Applies to both streaming and non-streaming endpoints:\n * - `pending` — Created but not yet sent or received.\n * - `streaming` — Actively receiving incremental deltas.\n * - `final` — Fully received; no further updates expected.\n * - `error` — Terminated with an error; `parts` may be incomplete.\n */\nexport type NcpMessageStatus = \"pending\" | \"streaming\" | \"final\" | \"error\";\n\n// ---------------------------------------------------------------------------\n// Core portable parts\n// ---------------------------------------------------------------------------\n\n/** Plain text content. The most common part type. */\nexport type NcpTextPart = {\n type: \"text\";\n text: string;\n};\n\n/**\n * A file attachment, delivered either as a URL or inline Base64 content.\n *\n * `url` and `contentBase64` are mutually exclusive — populate exactly one.\n */\nexport type NcpFilePart = {\n type: \"file\";\n name?: string;\n mimeType?: string;\n /** Stable logical asset reference managed by the hosting app. */\n assetUri?: string;\n /** Remote URL pointing to the file. Mutually exclusive with `contentBase64`. */\n url?: string;\n /** Inline file content encoded as Base64. Mutually exclusive with `url`. */\n contentBase64?: string;\n sizeBytes?: number;\n};\n\n/** A cited source or reference, typically surfaced alongside AI-generated content. */\nexport type NcpSourcePart = {\n type: \"source\";\n title?: string;\n url?: string;\n /** Short excerpt from the source relevant to the message. */\n snippet?: string;\n};\n\n/**\n * Marks the beginning of a logical reasoning step in a multi-step response.\n * Used by chain-of-thought or agentic flows to delimit discrete steps.\n */\nexport type NcpStepStartPart = {\n type: \"step-start\";\n stepId?: string;\n /** Human-readable label for the step (e.g. \"Searching the web\"). */\n title?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Agent-oriented parts\n// ---------------------------------------------------------------------------\n\n/** Internal reasoning text produced by the model before its final response. */\nexport type NcpReasoningPart = {\n type: \"reasoning\";\n text: string;\n};\n\nexport type NcpToolOutputTextItem = {\n type: \"input_text\";\n text: string;\n};\n\nexport type NcpToolOutputImageItem = {\n type: \"input_image\";\n imageUrl: string;\n mimeType?: string;\n detail?: \"low\" | \"high\" | \"auto\" | \"original\";\n originalDataChars?: number;\n dataOmitted?: boolean;\n};\n\nexport type NcpToolOutputContentItem =\n | NcpToolOutputTextItem\n | NcpToolOutputImageItem;\n\n/**\n * Represents a tool call and its lifecycle.\n *\n * State semantics (aligned with the Vercel AI SDK convention):\n * - `\"call\"` — The model has emitted a complete tool call; `args` is populated.\n * - `\"partial-call\"` — Arguments are still being streamed; `args` may be incomplete.\n * - `\"result\"` — The tool has returned; `result` is populated.\n * - `\"cancelled\"` — The tool was interrupted before a result was delivered.\n */\nexport type NcpToolInvocationPart = {\n type: \"tool-invocation\";\n toolName: string;\n toolCallId?: string;\n state?: \"call\" | \"partial-call\" | \"result\" | \"cancelled\";\n /** Tool input arguments. May be partial when `state === \"partial-call\"`. */\n args?: unknown;\n /** Tool output. Populated when `state === \"result\"`. */\n result?: unknown;\n /** Model-visible structured output items. Text is bounded; images remain image items. */\n resultContentItems?: NcpToolOutputContentItem[];\n};\n\n// ---------------------------------------------------------------------------\n// Collaboration-platform parts\n// ---------------------------------------------------------------------------\n\n/**\n * A rich card with arbitrary structured data.\n * Rendering is delegated to the platform (e.g. Slack block kit, Teams card).\n */\nexport type NcpCardPart = {\n type: \"card\";\n payload: Record<string, unknown>;\n};\n\n/** Formatted text with an explicit markup format hint. */\nexport type NcpRichTextPart = {\n type: \"rich-text\";\n format: \"markdown\" | \"html\" | \"plain\";\n text: string;\n};\n\n/**\n * An interactive action button or trigger exposed to the user.\n * The platform is responsible for rendering and routing the action.\n */\nexport type NcpActionPart = {\n type: \"action\";\n actionId: string;\n /** Display label shown to the user. */\n label: string;\n /** Arbitrary data forwarded to the action handler. */\n payload?: unknown;\n};\n\n// ---------------------------------------------------------------------------\n// Open extension slot\n// ---------------------------------------------------------------------------\n\n/**\n * Escape hatch for custom or future part types not yet in the NCP spec.\n *\n * Use this to avoid forking the protocol during early iterations.\n * Once a part type stabilizes, promote it to a first-class `NcpXxxPart`.\n */\nexport type NcpExtensionPart = {\n type: \"extension\";\n /** Namespaced identifier for the custom part (e.g. `\"myapp.highlight\"`). */\n extensionType: string;\n data: unknown;\n};\n\n// ---------------------------------------------------------------------------\n// Unified part union\n// ---------------------------------------------------------------------------\n\n/** Union of all recognized NCP message part types. */\nexport type NcpMessagePart =\n | NcpTextPart\n | NcpFilePart\n | NcpSourcePart\n | NcpStepStartPart\n | NcpReasoningPart\n | NcpToolInvocationPart\n | NcpCardPart\n | NcpRichTextPart\n | NcpActionPart\n | NcpExtensionPart;\n\n// ---------------------------------------------------------------------------\n// Message envelope\n// ---------------------------------------------------------------------------\n\n/**\n * Canonical message envelope exchanged and persisted in NCP.\n *\n * A message is composed of an ordered list of typed `parts`, allowing\n * heterogeneous content (text, files, tool calls, etc.) in a single message.\n */\nexport type NcpMessage = {\n /** Globally unique message identifier. */\n id: string;\n /** The session this message belongs to. */\n sessionId: string;\n role: NcpMessageRole;\n status: NcpMessageStatus;\n parts: NcpMessagePart[];\n /** ISO 8601 timestamp (e.g. `\"2024-01-15T10:30:00.000Z\"`). */\n timestamp: string;\n /** Arbitrary transport- or application-level metadata. */\n metadata?: Record<string, unknown>;\n};\n","import type { OpenAITool } from \"../agent-runtime/llm-api.js\";\nimport type { NcpError } from \"./errors.js\";\nimport type { NcpMessage, NcpToolOutputContentItem } from \"./message.js\";\n\n/**\n * NCP event and payload definitions.\n *\n * Streaming content (text, reasoning, tool args) uses start → delta sequence → end.\n * The same content can be sent as a single full event (e.g. message.incoming or message.completed)\n * instead; endpoints or upper layers choose as needed.\n */\n\n// ---------------------------------------------------------------------------\n// Message envelopes (used by request/incoming/completed/failed)\n// ---------------------------------------------------------------------------\n\nexport type NcpRequestEnvelope = {\n sessionId: string;\n message: NcpMessage;\n correlationId?: string;\n metadata?: Record<string, unknown>;\n providerRoute?: NcpProviderRuntimeRoute;\n tools?: ReadonlyArray<OpenAITool>;\n};\n\nexport type NcpOutboundMessageDraft = Omit<NcpMessage, \"sessionId\"> & {\n sessionId?: string;\n};\n\nexport type NcpAgentSendEnvelope = Omit<NcpRequestEnvelope, \"sessionId\" | \"message\"> & {\n sessionId?: string;\n message: NcpMessage | NcpOutboundMessageDraft;\n};\n\nexport type NcpProviderRuntimeRoute = {\n model: string;\n apiKey?: string | null;\n apiBase?: string | null;\n headers: Record<string, string>;\n};\n\n/** Payload for message.incoming: message content from the other peer (partial or full). */\nexport type NcpResponseEnvelope = {\n sessionId: string;\n message: NcpMessage;\n metadata?: Record<string, unknown>;\n};\n\nexport type NcpCompletedEnvelope = {\n sessionId: string;\n message: NcpMessage;\n correlationId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type NcpFailedEnvelope = {\n sessionId: string;\n messageId?: string;\n error: NcpError;\n correlationId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type NcpMessageAcceptedPayload = {\n messageId: string;\n correlationId?: string;\n transportId?: string;\n};\n\n/** Payload for message.abort: identifies which session's active execution to cancel. */\nexport type NcpMessageAbortPayload = {\n sessionId: string;\n messageId?: string;\n};\n\n/**\n * Payload for message.stream-request: attach to the live event stream of a session.\n * Used when reconnecting during an active response or attaching another live reader.\n */\nexport type NcpStreamRequestPayload = {\n sessionId: string;\n metadata?: Record<string, unknown>;\n};\n\n/**\n * Payload for message.sent: the local peer has sent a message (outbound).\n * Typically non-streaming; add the message to the local conversation state.\n */\nexport type NcpMessageSentPayload = {\n sessionId: string;\n message: NcpMessage;\n correlationId?: string;\n metadata?: Record<string, unknown>;\n};\n\n// ---------------------------------------------------------------------------\n// IM: typing indicator (user or bot)\n// ---------------------------------------------------------------------------\n\nexport type NcpTypingStartPayload = {\n sessionId: string;\n /** Participant who is typing (human user or bot/assistant). */\n userId?: string;\n};\n\nexport type NcpTypingEndPayload = {\n sessionId: string;\n /** Participant who stopped typing (human user or bot/assistant). */\n userId?: string;\n};\n\n// ---------------------------------------------------------------------------\n// IM: presence (online/offline/away)\n// ---------------------------------------------------------------------------\n\nexport type NcpPresenceUpdatedPayload = {\n sessionId: string;\n /** Participant this presence applies to (human user or bot/assistant). */\n userId?: string;\n status: \"online\" | \"offline\" | \"away\";\n};\n\n// ---------------------------------------------------------------------------\n// IM: read receipt, delivery receipt, recall, reaction\n// ---------------------------------------------------------------------------\n\nexport type NcpMessageReadPayload = {\n sessionId: string;\n messageId: string;\n readAt?: string;\n readerId?: string;\n};\n\nexport type NcpMessageDeliveredPayload = {\n sessionId: string;\n messageId: string;\n};\n\nexport type NcpMessageRecalledPayload = {\n sessionId: string;\n messageId: string;\n};\n\nexport type NcpMessageReactionPayload = {\n sessionId: string;\n messageId: string;\n reaction: string;\n added: boolean;\n /** Participant who added or removed the reaction (human user or bot/assistant). */\n userId?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Run lifecycle (aligned with agent-chat RUN_*)\n// ---------------------------------------------------------------------------\n\nexport type NcpRunStartedPayload = {\n sessionId?: string;\n messageId?: string;\n threadId?: string;\n runId?: string;\n};\n\nexport type NcpRunFinishedPayload = {\n sessionId?: string;\n messageId?: string;\n threadId?: string;\n runId?: string;\n};\n\nexport type NcpRunErrorPayload = {\n sessionId?: string;\n messageId?: string;\n error?: string;\n threadId?: string;\n runId?: string;\n};\n\nexport type NcpRunMetadataPayload = {\n sessionId?: string;\n messageId?: string;\n runId?: string;\n metadata: Record<string, unknown>;\n};\n\nexport type NcpContextWindowUpdatedPayload = {\n sessionId: string;\n contextWindow: Record<string, unknown>;\n};\n\n// ---------------------------------------------------------------------------\n// Text stream (aligned with agent-chat TEXT_*)\n// Streaming: text-start → text-delta sequence → text-end. Alternative: message.incoming / message.completed with full NcpMessage.\n// ---------------------------------------------------------------------------\n\nexport type NcpTextStartPayload = {\n sessionId: string;\n messageId: string;\n};\n\nexport type NcpTextDeltaPayload = {\n sessionId: string;\n messageId: string;\n delta: string;\n};\n\nexport type NcpTextEndPayload = {\n sessionId: string;\n messageId: string;\n};\n\n// ---------------------------------------------------------------------------\n// Reasoning stream (aligned with agent-chat REASONING_*)\n// Streaming: reasoning-start → reasoning-delta sequence → reasoning-end. Alternative: message.incoming / message.completed with full NcpMessage.\n// ---------------------------------------------------------------------------\n\nexport type NcpReasoningStartPayload = {\n sessionId: string;\n messageId: string;\n};\n\nexport type NcpReasoningDeltaPayload = {\n sessionId: string;\n messageId: string;\n delta: string;\n};\n\nexport type NcpReasoningEndPayload = {\n sessionId: string;\n messageId: string;\n};\n\n// ---------------------------------------------------------------------------\n// Tool call stream (aligned with agent-chat TOOL_CALL_*)\n// Streaming: tool-call-start → tool-call-args or tool-call-args-delta sequence → tool-call-end; then tool-call-result. Alternative: message.incoming / message.completed with full NcpMessage.\n// ---------------------------------------------------------------------------\n\nexport type NcpToolCallStartPayload = {\n sessionId: string;\n messageId?: string;\n toolCallId: string;\n toolName: string;\n};\n\nexport type NcpToolCallArgsPayload = {\n sessionId: string;\n toolCallId: string;\n args: string;\n};\n\nexport type NcpToolCallArgsDeltaPayload = {\n sessionId: string;\n messageId?: string;\n toolCallId: string;\n delta: string;\n};\n\nexport type NcpToolCallEndPayload = {\n sessionId: string;\n toolCallId: string;\n};\n\nexport type NcpToolCallResultPayload = {\n sessionId: string;\n toolCallId: string;\n content: unknown;\n contentItems?: NcpToolOutputContentItem[];\n};\n\n// ---------------------------------------------------------------------------\n// Event type enum\n// ---------------------------------------------------------------------------\n\nexport enum NcpEventType {\n EndpointReady = \"endpoint.ready\",\n EndpointError = \"endpoint.error\",\n MessageRequest = \"message.request\",\n MessageStreamRequest = \"message.stream-request\",\n MessageSent = \"message.sent\",\n MessageAccepted = \"message.accepted\",\n MessageIncoming = \"message.incoming\",\n MessageCompleted = \"message.completed\",\n MessageFailed = \"message.failed\",\n MessageAbort = \"message.abort\",\n MessageTextStart = \"message.text-start\",\n MessageTextDelta = \"message.text-delta\",\n MessageTextEnd = \"message.text-end\",\n MessageReasoningStart = \"message.reasoning-start\",\n MessageReasoningDelta = \"message.reasoning-delta\",\n MessageReasoningEnd = \"message.reasoning-end\",\n MessageToolCallStart = \"message.tool-call-start\",\n MessageToolCallArgs = \"message.tool-call-args\",\n MessageToolCallArgsDelta = \"message.tool-call-args-delta\",\n MessageToolCallEnd = \"message.tool-call-end\",\n MessageToolCallResult = \"message.tool-call-result\",\n MessageRead = \"message.read\",\n MessageDelivered = \"message.delivered\",\n MessageRecalled = \"message.recalled\",\n MessageReaction = \"message.reaction\",\n RunStarted = \"run.started\",\n RunFinished = \"run.finished\",\n RunError = \"run.error\",\n RunMetadata = \"run.metadata\",\n ContextWindowUpdated = \"context-window.updated\",\n TypingStart = \"typing.start\",\n TypingEnd = \"typing.end\",\n PresenceUpdated = \"presence.updated\",\n}\n\n// ---------------------------------------------------------------------------\n// Event union (aligned with agent-chat EventType + endpoint lifecycle)\n// ---------------------------------------------------------------------------\n\nexport type NcpEndpointEvent =\n | { type: NcpEventType.EndpointReady }\n | { type: NcpEventType.MessageRequest; payload: NcpAgentSendEnvelope }\n | { type: NcpEventType.MessageStreamRequest; payload: NcpStreamRequestPayload }\n | { type: NcpEventType.MessageSent; payload: NcpMessageSentPayload }\n | { type: NcpEventType.MessageAccepted; payload: NcpMessageAcceptedPayload }\n | { type: NcpEventType.MessageIncoming; payload: NcpResponseEnvelope }\n | { type: NcpEventType.MessageCompleted; payload: NcpCompletedEnvelope }\n | { type: NcpEventType.MessageFailed; payload: NcpFailedEnvelope }\n | { type: NcpEventType.MessageAbort; payload: NcpMessageAbortPayload }\n | { type: NcpEventType.EndpointError; payload: NcpError }\n | { type: NcpEventType.RunStarted; payload: NcpRunStartedPayload }\n | { type: NcpEventType.RunFinished; payload: NcpRunFinishedPayload }\n | { type: NcpEventType.RunError; payload: NcpRunErrorPayload }\n | { type: NcpEventType.RunMetadata; payload: NcpRunMetadataPayload }\n | { type: NcpEventType.ContextWindowUpdated; payload: NcpContextWindowUpdatedPayload }\n | { type: NcpEventType.MessageTextStart; payload: NcpTextStartPayload }\n | { type: NcpEventType.MessageTextDelta; payload: NcpTextDeltaPayload }\n | { type: NcpEventType.MessageTextEnd; payload: NcpTextEndPayload }\n | { type: NcpEventType.MessageReasoningStart; payload: NcpReasoningStartPayload }\n | { type: NcpEventType.MessageReasoningDelta; payload: NcpReasoningDeltaPayload }\n | { type: NcpEventType.MessageReasoningEnd; payload: NcpReasoningEndPayload }\n | { type: NcpEventType.MessageToolCallStart; payload: NcpToolCallStartPayload }\n | { type: NcpEventType.MessageToolCallArgs; payload: NcpToolCallArgsPayload }\n | { type: NcpEventType.MessageToolCallArgsDelta; payload: NcpToolCallArgsDeltaPayload }\n | { type: NcpEventType.MessageToolCallEnd; payload: NcpToolCallEndPayload }\n | { type: NcpEventType.MessageToolCallResult; payload: NcpToolCallResultPayload }\n | { type: NcpEventType.TypingStart; payload: NcpTypingStartPayload }\n | { type: NcpEventType.TypingEnd; payload: NcpTypingEndPayload }\n | { type: NcpEventType.PresenceUpdated; payload: NcpPresenceUpdatedPayload }\n | { type: NcpEventType.MessageRead; payload: NcpMessageReadPayload }\n | { type: NcpEventType.MessageDelivered; payload: NcpMessageDeliveredPayload }\n | { type: NcpEventType.MessageRecalled; payload: NcpMessageRecalledPayload }\n | { type: NcpEventType.MessageReaction; payload: NcpMessageReactionPayload };\n\nexport type NcpEndpointSubscriber = (event: NcpEndpointEvent) => void;\n","import type { NcpMessage } from \"../types/message.js\";\n\nexport type NcpReplyTagParseResult = {\n content: string;\n replyTo?: string;\n};\n\nconst REPLY_TO_CURRENT_PATTERN = /\\[\\[\\s*reply_to_current\\s*\\]\\]/gi;\nconst REPLY_TO_ID_PATTERN = /\\[\\[\\s*reply_to\\s*:\\s*([^\\]]+?)\\s*\\]\\]/i;\n\nfunction normalizeReplyTarget(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function stripReplyTagsFromText(content: string, currentMessageId?: string): NcpReplyTagParseResult {\n let nextContent = content;\n let replyTo: string | undefined;\n\n if (REPLY_TO_CURRENT_PATTERN.test(nextContent)) {\n replyTo = normalizeReplyTarget(currentMessageId);\n nextContent = nextContent.replace(REPLY_TO_CURRENT_PATTERN, \"\").trim();\n }\n\n const explicitReplyTarget = nextContent.match(REPLY_TO_ID_PATTERN)?.[1];\n if (explicitReplyTarget) {\n replyTo = normalizeReplyTarget(explicitReplyTarget);\n nextContent = nextContent.replace(REPLY_TO_ID_PATTERN, \"\").trim();\n }\n\n return replyTo ? { content: nextContent, replyTo } : { content: nextContent };\n}\n\nexport function sanitizeAssistantReplyTags(\n message: NcpMessage,\n currentMessageId = message.id,\n): NcpMessage {\n if (message.role !== \"assistant\") {\n return {\n ...message,\n parts: [...message.parts],\n metadata: message.metadata ? { ...message.metadata } : undefined,\n };\n }\n\n const firstTextIndex = message.parts.findIndex((part) => part.type === \"text\");\n const nextMetadata = message.metadata ? { ...message.metadata } : undefined;\n const existingReplyTo = normalizeReplyTarget(nextMetadata?.reply_to);\n\n if (firstTextIndex < 0) {\n return {\n ...message,\n parts: [...message.parts],\n metadata: nextMetadata,\n };\n }\n\n const firstTextPart = message.parts[firstTextIndex];\n if (!firstTextPart || firstTextPart.type !== \"text\") {\n return {\n ...message,\n parts: [...message.parts],\n metadata: nextMetadata,\n };\n }\n\n const { content, replyTo } = stripReplyTagsFromText(firstTextPart.text, currentMessageId);\n const effectiveReplyTo = replyTo ?? existingReplyTo;\n const nextParts = message.parts.flatMap((part, index) => {\n if (index !== firstTextIndex || part.type !== \"text\") {\n return [part];\n }\n if (content.length === 0) {\n return [];\n }\n return [{ ...part, text: content }];\n });\n\n if (effectiveReplyTo) {\n return {\n ...message,\n parts: nextParts,\n metadata: {\n ...nextMetadata,\n reply_to: effectiveReplyTo,\n },\n };\n }\n\n return {\n ...message,\n parts: nextParts,\n metadata: nextMetadata,\n };\n}\n","export type NcpAssistantReasoningNormalizationMode = \"off\" | \"think-tags\";\n\nexport type NcpAssistantReasoningSegment = {\n type: \"text\" | \"reasoning\";\n text: string;\n};\n\nconst THINK_OPEN_TAG = \"<think>\";\nconst THINK_CLOSE_TAG = \"</think>\";\nconst FINAL_OPEN_TAG = \"<final>\";\nconst FINAL_CLOSE_TAG = \"</final>\";\nconst LEADING_CONTROL_TAGS = [THINK_CLOSE_TAG, FINAL_OPEN_TAG, FINAL_CLOSE_TAG] as const;\nconst MAX_REASONING_DELIMITER_TAIL = THINK_CLOSE_TAG.length - 1;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isWhitespace(char: string): boolean {\n return /\\s/.test(char);\n}\n\nfunction normalizeMode(value: unknown): NcpAssistantReasoningNormalizationMode | null {\n if (value === \"off\" || value === \"think-tags\") {\n return value;\n }\n return null;\n}\n\nfunction readLeadingThinkTagState(\n buffer: string,\n): { status: \"matched\"; consumed: number } | { status: \"pending\" | \"rejected\" } {\n let cursor = 0;\n while (cursor < buffer.length && isWhitespace(buffer[cursor]!)) {\n cursor += 1;\n }\n\n const rest = buffer.slice(cursor);\n if (rest.startsWith(THINK_OPEN_TAG)) {\n return {\n status: \"matched\",\n consumed: cursor + THINK_OPEN_TAG.length,\n };\n }\n if (THINK_OPEN_TAG.startsWith(rest)) {\n return { status: \"pending\" };\n }\n return { status: \"rejected\" };\n}\n\nfunction stripLeadingControlTags(buffer: string): { buffer: string; pending: boolean } {\n let nextBuffer = buffer;\n\n while (true) {\n let cursor = 0;\n while (cursor < nextBuffer.length && isWhitespace(nextBuffer[cursor]!)) {\n cursor += 1;\n }\n\n const rest = nextBuffer.slice(cursor);\n if (rest.length === 0) {\n return { buffer: \"\", pending: false };\n }\n\n const matchedTag = LEADING_CONTROL_TAGS.find((tag) => rest.startsWith(tag));\n if (matchedTag) {\n nextBuffer = rest.slice(matchedTag.length);\n continue;\n }\n\n if (LEADING_CONTROL_TAGS.some((tag) => tag.startsWith(rest))) {\n return { buffer: rest, pending: true };\n }\n\n return { buffer: rest, pending: false };\n }\n}\n\nfunction findReasoningBoundary(buffer: string): { index: number; tag: string } | null {\n const indices = [\n { index: buffer.indexOf(THINK_CLOSE_TAG), tag: THINK_CLOSE_TAG },\n { index: buffer.indexOf(FINAL_OPEN_TAG), tag: FINAL_OPEN_TAG },\n ].filter((entry) => entry.index >= 0);\n\n if (indices.length === 0) {\n return null;\n }\n\n return indices.reduce((left, right) => (right.index < left.index ? right : left));\n}\n\nexport function readAssistantReasoningNormalizationMode(\n value: unknown,\n): NcpAssistantReasoningNormalizationMode | null {\n if (typeof value === \"string\") {\n return normalizeMode(value);\n }\n if (isRecord(value)) {\n return normalizeMode(value.mode);\n }\n return null;\n}\n\nexport function readAssistantReasoningNormalizationModeFromMetadata(\n metadata: Record<string, unknown> | null | undefined,\n): NcpAssistantReasoningNormalizationMode | null {\n if (!metadata) {\n return null;\n }\n return (\n readAssistantReasoningNormalizationMode(metadata.reasoning_normalization) ??\n readAssistantReasoningNormalizationMode(metadata.reasoningNormalization) ??\n normalizeMode(metadata.reasoning_normalization_mode) ??\n normalizeMode(metadata.reasoningNormalizationMode)\n );\n}\n\nexport function writeAssistantReasoningNormalizationModeToMetadata(\n metadata: Record<string, unknown>,\n mode: NcpAssistantReasoningNormalizationMode,\n): Record<string, unknown> {\n const nextMetadata = {\n ...metadata,\n };\n delete nextMetadata.reasoningNormalization;\n delete nextMetadata.reasoningNormalizationMode;\n delete nextMetadata.reasoning_normalization_mode;\n nextMetadata.reasoning_normalization = { mode };\n return nextMetadata;\n}\n\nexport class NcpAssistantTextStreamNormalizer {\n private buffer = \"\";\n private phase: \"initial\" | \"reasoning\" | \"text\" = \"initial\";\n private stripLeadingTextControlTags = false;\n\n constructor(private readonly mode: NcpAssistantReasoningNormalizationMode = \"off\") {}\n\n push(delta: string): NcpAssistantReasoningSegment[] {\n if (!delta) {\n return [];\n }\n if (this.mode !== \"think-tags\") {\n return [{ type: \"text\", text: delta }];\n }\n\n this.buffer += delta;\n return this.flush(false);\n }\n\n finish(): NcpAssistantReasoningSegment[] {\n if (this.mode !== \"think-tags\") {\n return [];\n }\n return this.flush(true);\n }\n\n private flush(final: boolean): NcpAssistantReasoningSegment[] {\n const segments: NcpAssistantReasoningSegment[] = [];\n\n while (true) {\n if (this.phase === \"initial\") {\n const leadingState = readLeadingThinkTagState(this.buffer);\n if (leadingState.status === \"matched\") {\n this.buffer = this.buffer.slice(leadingState.consumed);\n this.phase = \"reasoning\";\n continue;\n }\n if (leadingState.status === \"pending\" && !final) {\n return segments;\n }\n this.phase = \"text\";\n continue;\n }\n\n if (this.phase === \"reasoning\") {\n const boundary = findReasoningBoundary(this.buffer);\n if (boundary) {\n const reasoningText = this.buffer.slice(0, boundary.index);\n if (reasoningText.length > 0) {\n segments.push({ type: \"reasoning\", text: reasoningText });\n }\n this.buffer = this.buffer.slice(boundary.index + boundary.tag.length);\n this.phase = \"text\";\n this.stripLeadingTextControlTags = true;\n continue;\n }\n\n const safeLength = final ? this.buffer.length : Math.max(0, this.buffer.length - MAX_REASONING_DELIMITER_TAIL);\n if (safeLength === 0) {\n return segments;\n }\n segments.push({\n type: \"reasoning\",\n text: this.buffer.slice(0, safeLength),\n });\n this.buffer = this.buffer.slice(safeLength);\n if (!final) {\n return segments;\n }\n continue;\n }\n\n if (this.stripLeadingTextControlTags) {\n const stripped = stripLeadingControlTags(this.buffer);\n if (stripped.pending && !final) {\n this.buffer = stripped.buffer;\n return segments;\n }\n this.buffer = stripped.buffer;\n this.stripLeadingTextControlTags = false;\n }\n\n if (this.buffer.length === 0) {\n return segments;\n }\n\n segments.push({\n type: \"text\",\n text: this.buffer,\n });\n this.buffer = \"\";\n return segments;\n }\n }\n}\n\nexport function normalizeAssistantText(\n text: string,\n mode: NcpAssistantReasoningNormalizationMode,\n): {\n text: string;\n reasoning: string;\n parts: NcpAssistantReasoningSegment[];\n} {\n const normalizer = new NcpAssistantTextStreamNormalizer(mode);\n const parts = [...normalizer.push(text), ...normalizer.finish()].filter((part) => part.text.length > 0);\n\n return {\n text: parts\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\"),\n reasoning: parts\n .filter((part) => part.type === \"reasoning\")\n .map((part) => part.text)\n .join(\"\"),\n parts,\n };\n}\n","import {\n type NcpEndpointEvent,\n NcpEventType,\n type NcpRequestEnvelope,\n type NcpRunHandle,\n} from \"../types/index.js\";\n\nexport function createNcpRunHandle(envelope: NcpRequestEnvelope): NcpRunHandle {\n return {\n sessionId: envelope.sessionId,\n userMessageId: envelope.message.id,\n assistantMessageId: null,\n runId: null,\n ...(envelope.correlationId ? { correlationId: envelope.correlationId } : {}),\n };\n}\n\nexport function consumeNcpRunHandle(\n events: AsyncIterable<NcpEndpointEvent>,\n fallback: NcpRunHandle,\n): Promise<NcpRunHandle> {\n let resolved = false;\n let handle = fallback;\n\n return new Promise<NcpRunHandle>((resolve, reject) => {\n const resolveOnce = (): void => {\n if (resolved) {\n return;\n }\n resolved = true;\n resolve(handle);\n };\n\n void (async () => {\n try {\n for await (const event of events) {\n if (event.type === NcpEventType.RunStarted) {\n handle = {\n ...handle,\n assistantMessageId: event.payload.messageId ?? null,\n runId: event.payload.runId ?? null,\n };\n resolveOnce();\n }\n }\n resolveOnce();\n } catch (error) {\n if (!resolved) reject(error);\n }\n })();\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/types/message.ts","../src/types/events.ts","../src/toolkit/reply-tags.ts","../src/toolkit/reasoning-normalization.ts","../src/toolkit/run-handle.ts"],"sourcesContent":["/**\n * Participants in an NCP conversation.\n *\n * - `user` — A human end-user interacting with the system.\n * - `assistant` — An AI model generating responses.\n * - `system` — Configuration or instruction injected before the conversation.\n * - `tool` — The result returned by a tool invocation.\n * - `service` — A platform-side notification or event (e.g. a bot posting a card),\n * distinct from an AI assistant response.\n */\nexport type NcpMessageRole = \"user\" | \"assistant\" | \"system\" | \"tool\" | \"service\";\n\nexport const NCP_INTERNAL_VISIBILITY_METADATA_KEY = \"ncp_internal_visibility\";\n\nexport function isHiddenNcpMessage(message: Pick<NcpMessage, \"metadata\"> | null | undefined): boolean {\n return message?.metadata?.[NCP_INTERNAL_VISIBILITY_METADATA_KEY] === \"hidden\";\n}\n\n/**\n * Lifecycle state of a message.\n *\n * Applies to both streaming and non-streaming endpoints:\n * - `pending` — Created but not yet sent or received.\n * - `streaming` — Actively receiving incremental deltas.\n * - `final` — Fully received; no further updates expected.\n * - `error` — Terminated with an error; `parts` may be incomplete.\n */\nexport type NcpMessageStatus = \"pending\" | \"streaming\" | \"final\" | \"error\";\n\n// ---------------------------------------------------------------------------\n// Core portable parts\n// ---------------------------------------------------------------------------\n\n/** Plain text content. The most common part type. */\nexport type NcpTextPart = {\n type: \"text\";\n text: string;\n};\n\n/**\n * A file attachment, delivered either as a URL or inline Base64 content.\n *\n * `url` and `contentBase64` are mutually exclusive — populate exactly one.\n */\nexport type NcpFilePart = {\n type: \"file\";\n name?: string;\n mimeType?: string;\n /** Stable logical asset reference managed by the hosting app. */\n assetUri?: string;\n /** Remote URL pointing to the file. Mutually exclusive with `contentBase64`. */\n url?: string;\n /** Inline file content encoded as Base64. Mutually exclusive with `url`. */\n contentBase64?: string;\n sizeBytes?: number;\n};\n\n/** A cited source or reference, typically surfaced alongside AI-generated content. */\nexport type NcpSourcePart = {\n type: \"source\";\n title?: string;\n url?: string;\n /** Short excerpt from the source relevant to the message. */\n snippet?: string;\n};\n\n/**\n * Marks the beginning of a logical reasoning step in a multi-step response.\n * Used by chain-of-thought or agentic flows to delimit discrete steps.\n */\nexport type NcpStepStartPart = {\n type: \"step-start\";\n stepId?: string;\n /** Human-readable label for the step (e.g. \"Searching the web\"). */\n title?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Agent-oriented parts\n// ---------------------------------------------------------------------------\n\n/** Internal reasoning text produced by the model before its final response. */\nexport type NcpReasoningPart = {\n type: \"reasoning\";\n text: string;\n};\n\nexport type NcpToolOutputTextItem = {\n type: \"input_text\";\n text: string;\n};\n\nexport type NcpToolOutputImageItem = {\n type: \"input_image\";\n imageUrl: string;\n mimeType?: string;\n detail?: \"low\" | \"high\" | \"auto\" | \"original\";\n originalDataChars?: number;\n dataOmitted?: boolean;\n};\n\nexport type NcpToolOutputContentItem =\n | NcpToolOutputTextItem\n | NcpToolOutputImageItem;\n\n/**\n * Represents a tool call and its lifecycle.\n *\n * State semantics (aligned with the Vercel AI SDK convention):\n * - `\"call\"` — The model has emitted a complete tool call; `args` is populated.\n * - `\"partial-call\"` — Arguments are still being streamed; `args` may be incomplete.\n * - `\"result\"` — The tool has returned; `result` is populated.\n * - `\"cancelled\"` — The tool was interrupted before a result was delivered.\n */\nexport type NcpToolInvocationPart = {\n type: \"tool-invocation\";\n toolName: string;\n toolCallId?: string;\n state?: \"call\" | \"partial-call\" | \"result\" | \"cancelled\";\n /** Tool input arguments. May be partial when `state === \"partial-call\"`. */\n args?: unknown;\n /** Tool output. Populated when `state === \"result\"`. */\n result?: unknown;\n /** Model-visible structured output items. Text is bounded; images remain image items. */\n resultContentItems?: NcpToolOutputContentItem[];\n};\n\n// ---------------------------------------------------------------------------\n// Collaboration-platform parts\n// ---------------------------------------------------------------------------\n\n/**\n * A rich card with arbitrary structured data.\n * Rendering is delegated to the platform (e.g. Slack block kit, Teams card).\n */\nexport type NcpCardPart = {\n type: \"card\";\n payload: Record<string, unknown>;\n};\n\n/** Formatted text with an explicit markup format hint. */\nexport type NcpRichTextPart = {\n type: \"rich-text\";\n format: \"markdown\" | \"html\" | \"plain\";\n text: string;\n};\n\n/**\n * An interactive action button or trigger exposed to the user.\n * The platform is responsible for rendering and routing the action.\n */\nexport type NcpActionPart = {\n type: \"action\";\n actionId: string;\n /** Display label shown to the user. */\n label: string;\n /** Arbitrary data forwarded to the action handler. */\n payload?: unknown;\n};\n\n// ---------------------------------------------------------------------------\n// Open extension slot\n// ---------------------------------------------------------------------------\n\n/**\n * Escape hatch for custom or future part types not yet in the NCP spec.\n *\n * Use this to avoid forking the protocol during early iterations.\n * Once a part type stabilizes, promote it to a first-class `NcpXxxPart`.\n */\nexport type NcpExtensionPart = {\n type: \"extension\";\n /** Namespaced identifier for the custom part (e.g. `\"myapp.highlight\"`). */\n extensionType: string;\n data: unknown;\n};\n\n// ---------------------------------------------------------------------------\n// Unified part union\n// ---------------------------------------------------------------------------\n\n/** Union of all recognized NCP message part types. */\nexport type NcpMessagePart =\n | NcpTextPart\n | NcpFilePart\n | NcpSourcePart\n | NcpStepStartPart\n | NcpReasoningPart\n | NcpToolInvocationPart\n | NcpCardPart\n | NcpRichTextPart\n | NcpActionPart\n | NcpExtensionPart;\n\n// ---------------------------------------------------------------------------\n// Message envelope\n// ---------------------------------------------------------------------------\n\n/**\n * Canonical message envelope exchanged and persisted in NCP.\n *\n * A message is composed of an ordered list of typed `parts`, allowing\n * heterogeneous content (text, files, tool calls, etc.) in a single message.\n */\nexport type NcpMessage = {\n /** Globally unique message identifier. */\n id: string;\n /** The session this message belongs to. */\n sessionId: string;\n role: NcpMessageRole;\n status: NcpMessageStatus;\n parts: NcpMessagePart[];\n /** ISO 8601 timestamp (e.g. `\"2024-01-15T10:30:00.000Z\"`). */\n timestamp: string;\n /** Arbitrary transport- or application-level metadata. */\n metadata?: Record<string, unknown>;\n};\n","import type { OpenAITool } from \"../agent-runtime/llm-api.js\";\nimport type { NcpError } from \"./errors.js\";\nimport type { NcpMessage, NcpToolOutputContentItem } from \"./message.js\";\n\n/**\n * NCP event and payload definitions.\n *\n * Streaming content (text, reasoning, tool args) uses start → delta sequence → end.\n * The same content can be sent as a single full event (e.g. message.incoming or message.completed)\n * instead; endpoints or upper layers choose as needed.\n */\n\n// ---------------------------------------------------------------------------\n// Message envelopes (used by request/incoming/completed/failed)\n// ---------------------------------------------------------------------------\n\nexport type NcpCorrelationPayload = {\n correlationId?: string;\n};\n\nexport type NcpRequestEnvelope = {\n sessionId: string;\n message: NcpMessage;\n correlationId?: string;\n metadata?: Record<string, unknown>;\n providerRoute?: NcpProviderRuntimeRoute;\n tools?: ReadonlyArray<OpenAITool>;\n};\n\nexport type NcpOutboundMessageDraft = Omit<NcpMessage, \"sessionId\"> & {\n sessionId?: string;\n};\n\nexport type NcpAgentSendEnvelope = Omit<NcpRequestEnvelope, \"sessionId\" | \"message\"> & {\n sessionId?: string;\n message: NcpMessage | NcpOutboundMessageDraft;\n};\n\nexport type NcpProviderRuntimeRoute = {\n model: string;\n apiKey?: string | null;\n apiBase?: string | null;\n headers: Record<string, string>;\n};\n\n/** Payload for message.incoming: message content from the other peer (partial or full). */\nexport type NcpResponseEnvelope = {\n sessionId: string;\n message: NcpMessage;\n metadata?: Record<string, unknown>;\n} & NcpCorrelationPayload;\n\nexport type NcpCompletedEnvelope = {\n sessionId: string;\n message: NcpMessage;\n metadata?: Record<string, unknown>;\n} & NcpCorrelationPayload;\n\nexport type NcpFailedEnvelope = {\n sessionId: string;\n messageId?: string;\n error: NcpError;\n metadata?: Record<string, unknown>;\n} & NcpCorrelationPayload;\n\nexport type NcpMessageAcceptedPayload = {\n messageId: string;\n transportId?: string;\n} & NcpCorrelationPayload;\n\n/** Payload for message.abort: identifies which session's active execution to cancel. */\nexport type NcpMessageAbortPayload = {\n sessionId: string;\n messageId?: string;\n} & NcpCorrelationPayload;\n\n/**\n * Payload for message.stream-request: attach to the live event stream of a session.\n * Used when reconnecting during an active response or attaching another live reader.\n */\nexport type NcpStreamRequestPayload = {\n sessionId: string;\n metadata?: Record<string, unknown>;\n};\n\n/**\n * Payload for message.sent: the local peer has sent a message (outbound).\n * Typically non-streaming; add the message to the local conversation state.\n */\nexport type NcpMessageSentPayload = {\n sessionId: string;\n message: NcpMessage;\n metadata?: Record<string, unknown>;\n} & NcpCorrelationPayload;\n\n// ---------------------------------------------------------------------------\n// IM: typing indicator (user or bot)\n// ---------------------------------------------------------------------------\n\nexport type NcpTypingStartPayload = {\n sessionId: string;\n /** Participant who is typing (human user or bot/assistant). */\n userId?: string;\n};\n\nexport type NcpTypingEndPayload = {\n sessionId: string;\n /** Participant who stopped typing (human user or bot/assistant). */\n userId?: string;\n};\n\n// ---------------------------------------------------------------------------\n// IM: presence (online/offline/away)\n// ---------------------------------------------------------------------------\n\nexport type NcpPresenceUpdatedPayload = {\n sessionId: string;\n /** Participant this presence applies to (human user or bot/assistant). */\n userId?: string;\n status: \"online\" | \"offline\" | \"away\";\n};\n\n// ---------------------------------------------------------------------------\n// IM: read receipt, delivery receipt, recall, reaction\n// ---------------------------------------------------------------------------\n\nexport type NcpMessageReadPayload = {\n sessionId: string;\n messageId: string;\n readAt?: string;\n readerId?: string;\n};\n\nexport type NcpMessageDeliveredPayload = {\n sessionId: string;\n messageId: string;\n};\n\nexport type NcpMessageRecalledPayload = {\n sessionId: string;\n messageId: string;\n};\n\nexport type NcpMessageReactionPayload = {\n sessionId: string;\n messageId: string;\n reaction: string;\n added: boolean;\n /** Participant who added or removed the reaction (human user or bot/assistant). */\n userId?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Run lifecycle (aligned with agent-chat RUN_*)\n// ---------------------------------------------------------------------------\n\nexport type NcpRunStartedPayload = {\n sessionId?: string;\n messageId?: string;\n threadId?: string;\n runId?: string;\n} & NcpCorrelationPayload;\n\nexport type NcpRunFinishedPayload = {\n sessionId?: string;\n messageId?: string;\n threadId?: string;\n runId?: string;\n} & NcpCorrelationPayload;\n\nexport type NcpRunErrorPayload = {\n sessionId?: string;\n messageId?: string;\n error?: string;\n threadId?: string;\n runId?: string;\n} & NcpCorrelationPayload;\n\nexport type NcpRunMetadataPayload = {\n sessionId?: string;\n messageId?: string;\n runId?: string;\n metadata: Record<string, unknown>;\n} & NcpCorrelationPayload;\n\nexport type NcpContextWindowUpdatedPayload = {\n sessionId: string;\n contextWindow: Record<string, unknown>;\n};\n\n// ---------------------------------------------------------------------------\n// Text stream (aligned with agent-chat TEXT_*)\n// Streaming: text-start → text-delta sequence → text-end. Alternative: message.incoming / message.completed with full NcpMessage.\n// ---------------------------------------------------------------------------\n\nexport type NcpTextStartPayload = {\n sessionId: string;\n messageId: string;\n} & NcpCorrelationPayload;\n\nexport type NcpTextDeltaPayload = {\n sessionId: string;\n messageId: string;\n delta: string;\n} & NcpCorrelationPayload;\n\nexport type NcpTextEndPayload = {\n sessionId: string;\n messageId: string;\n} & NcpCorrelationPayload;\n\n// ---------------------------------------------------------------------------\n// Reasoning stream (aligned with agent-chat REASONING_*)\n// Streaming: reasoning-start → reasoning-delta sequence → reasoning-end. Alternative: message.incoming / message.completed with full NcpMessage.\n// ---------------------------------------------------------------------------\n\nexport type NcpReasoningStartPayload = {\n sessionId: string;\n messageId: string;\n} & NcpCorrelationPayload;\n\nexport type NcpReasoningDeltaPayload = {\n sessionId: string;\n messageId: string;\n delta: string;\n} & NcpCorrelationPayload;\n\nexport type NcpReasoningEndPayload = {\n sessionId: string;\n messageId: string;\n} & NcpCorrelationPayload;\n\n// ---------------------------------------------------------------------------\n// Tool call stream (aligned with agent-chat TOOL_CALL_*)\n// Streaming: tool-call-start → tool-call-args or tool-call-args-delta sequence → tool-call-end; then tool-call-result. Alternative: message.incoming / message.completed with full NcpMessage.\n// ---------------------------------------------------------------------------\n\nexport type NcpToolCallStartPayload = {\n sessionId: string;\n messageId?: string;\n toolCallId: string;\n toolName: string;\n} & NcpCorrelationPayload;\n\nexport type NcpToolCallArgsPayload = {\n sessionId: string;\n toolCallId: string;\n args: string;\n} & NcpCorrelationPayload;\n\nexport type NcpToolCallArgsDeltaPayload = {\n sessionId: string;\n messageId?: string;\n toolCallId: string;\n delta: string;\n} & NcpCorrelationPayload;\n\nexport type NcpToolCallEndPayload = {\n sessionId: string;\n toolCallId: string;\n} & NcpCorrelationPayload;\n\nexport type NcpToolCallResultPayload = {\n sessionId: string;\n toolCallId: string;\n content: unknown;\n contentItems?: NcpToolOutputContentItem[];\n} & NcpCorrelationPayload;\n\n// ---------------------------------------------------------------------------\n// Event type enum\n// ---------------------------------------------------------------------------\n\nexport enum NcpEventType {\n EndpointReady = \"endpoint.ready\",\n EndpointError = \"endpoint.error\",\n MessageRequest = \"message.request\",\n MessageStreamRequest = \"message.stream-request\",\n MessageSent = \"message.sent\",\n MessageAccepted = \"message.accepted\",\n MessageIncoming = \"message.incoming\",\n MessageCompleted = \"message.completed\",\n MessageFailed = \"message.failed\",\n MessageAbort = \"message.abort\",\n MessageTextStart = \"message.text-start\",\n MessageTextDelta = \"message.text-delta\",\n MessageTextEnd = \"message.text-end\",\n MessageReasoningStart = \"message.reasoning-start\",\n MessageReasoningDelta = \"message.reasoning-delta\",\n MessageReasoningEnd = \"message.reasoning-end\",\n MessageToolCallStart = \"message.tool-call-start\",\n MessageToolCallArgs = \"message.tool-call-args\",\n MessageToolCallArgsDelta = \"message.tool-call-args-delta\",\n MessageToolCallEnd = \"message.tool-call-end\",\n MessageToolCallResult = \"message.tool-call-result\",\n MessageRead = \"message.read\",\n MessageDelivered = \"message.delivered\",\n MessageRecalled = \"message.recalled\",\n MessageReaction = \"message.reaction\",\n RunStarted = \"run.started\",\n RunFinished = \"run.finished\",\n RunError = \"run.error\",\n RunMetadata = \"run.metadata\",\n ContextWindowUpdated = \"context-window.updated\",\n TypingStart = \"typing.start\",\n TypingEnd = \"typing.end\",\n PresenceUpdated = \"presence.updated\",\n}\n\n// ---------------------------------------------------------------------------\n// Event union (aligned with agent-chat EventType + endpoint lifecycle)\n// ---------------------------------------------------------------------------\n\nexport type NcpEndpointEvent =\n | { type: NcpEventType.EndpointReady }\n | { type: NcpEventType.MessageRequest; payload: NcpAgentSendEnvelope }\n | { type: NcpEventType.MessageStreamRequest; payload: NcpStreamRequestPayload }\n | { type: NcpEventType.MessageSent; payload: NcpMessageSentPayload }\n | { type: NcpEventType.MessageAccepted; payload: NcpMessageAcceptedPayload }\n | { type: NcpEventType.MessageIncoming; payload: NcpResponseEnvelope }\n | { type: NcpEventType.MessageCompleted; payload: NcpCompletedEnvelope }\n | { type: NcpEventType.MessageFailed; payload: NcpFailedEnvelope }\n | { type: NcpEventType.MessageAbort; payload: NcpMessageAbortPayload }\n | { type: NcpEventType.EndpointError; payload: NcpError }\n | { type: NcpEventType.RunStarted; payload: NcpRunStartedPayload }\n | { type: NcpEventType.RunFinished; payload: NcpRunFinishedPayload }\n | { type: NcpEventType.RunError; payload: NcpRunErrorPayload }\n | { type: NcpEventType.RunMetadata; payload: NcpRunMetadataPayload }\n | { type: NcpEventType.ContextWindowUpdated; payload: NcpContextWindowUpdatedPayload }\n | { type: NcpEventType.MessageTextStart; payload: NcpTextStartPayload }\n | { type: NcpEventType.MessageTextDelta; payload: NcpTextDeltaPayload }\n | { type: NcpEventType.MessageTextEnd; payload: NcpTextEndPayload }\n | { type: NcpEventType.MessageReasoningStart; payload: NcpReasoningStartPayload }\n | { type: NcpEventType.MessageReasoningDelta; payload: NcpReasoningDeltaPayload }\n | { type: NcpEventType.MessageReasoningEnd; payload: NcpReasoningEndPayload }\n | { type: NcpEventType.MessageToolCallStart; payload: NcpToolCallStartPayload }\n | { type: NcpEventType.MessageToolCallArgs; payload: NcpToolCallArgsPayload }\n | { type: NcpEventType.MessageToolCallArgsDelta; payload: NcpToolCallArgsDeltaPayload }\n | { type: NcpEventType.MessageToolCallEnd; payload: NcpToolCallEndPayload }\n | { type: NcpEventType.MessageToolCallResult; payload: NcpToolCallResultPayload }\n | { type: NcpEventType.TypingStart; payload: NcpTypingStartPayload }\n | { type: NcpEventType.TypingEnd; payload: NcpTypingEndPayload }\n | { type: NcpEventType.PresenceUpdated; payload: NcpPresenceUpdatedPayload }\n | { type: NcpEventType.MessageRead; payload: NcpMessageReadPayload }\n | { type: NcpEventType.MessageDelivered; payload: NcpMessageDeliveredPayload }\n | { type: NcpEventType.MessageRecalled; payload: NcpMessageRecalledPayload }\n | { type: NcpEventType.MessageReaction; payload: NcpMessageReactionPayload };\n\nexport type NcpEndpointSubscriber = (event: NcpEndpointEvent) => void;\n","import type { NcpMessage } from \"../types/message.js\";\n\nexport type NcpReplyTagParseResult = {\n content: string;\n replyTo?: string;\n};\n\nconst REPLY_TO_CURRENT_PATTERN = /\\[\\[\\s*reply_to_current\\s*\\]\\]/gi;\nconst REPLY_TO_ID_PATTERN = /\\[\\[\\s*reply_to\\s*:\\s*([^\\]]+?)\\s*\\]\\]/i;\n\nfunction normalizeReplyTarget(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function stripReplyTagsFromText(content: string, currentMessageId?: string): NcpReplyTagParseResult {\n let nextContent = content;\n let replyTo: string | undefined;\n\n if (REPLY_TO_CURRENT_PATTERN.test(nextContent)) {\n replyTo = normalizeReplyTarget(currentMessageId);\n nextContent = nextContent.replace(REPLY_TO_CURRENT_PATTERN, \"\").trim();\n }\n\n const explicitReplyTarget = nextContent.match(REPLY_TO_ID_PATTERN)?.[1];\n if (explicitReplyTarget) {\n replyTo = normalizeReplyTarget(explicitReplyTarget);\n nextContent = nextContent.replace(REPLY_TO_ID_PATTERN, \"\").trim();\n }\n\n return replyTo ? { content: nextContent, replyTo } : { content: nextContent };\n}\n\nexport function sanitizeAssistantReplyTags(\n message: NcpMessage,\n currentMessageId = message.id,\n): NcpMessage {\n if (message.role !== \"assistant\") {\n return {\n ...message,\n parts: [...message.parts],\n metadata: message.metadata ? { ...message.metadata } : undefined,\n };\n }\n\n const firstTextIndex = message.parts.findIndex((part) => part.type === \"text\");\n const nextMetadata = message.metadata ? { ...message.metadata } : undefined;\n const existingReplyTo = normalizeReplyTarget(nextMetadata?.reply_to);\n\n if (firstTextIndex < 0) {\n return {\n ...message,\n parts: [...message.parts],\n metadata: nextMetadata,\n };\n }\n\n const firstTextPart = message.parts[firstTextIndex];\n if (!firstTextPart || firstTextPart.type !== \"text\") {\n return {\n ...message,\n parts: [...message.parts],\n metadata: nextMetadata,\n };\n }\n\n const { content, replyTo } = stripReplyTagsFromText(firstTextPart.text, currentMessageId);\n const effectiveReplyTo = replyTo ?? existingReplyTo;\n const nextParts = message.parts.flatMap((part, index) => {\n if (index !== firstTextIndex || part.type !== \"text\") {\n return [part];\n }\n if (content.length === 0) {\n return [];\n }\n return [{ ...part, text: content }];\n });\n\n if (effectiveReplyTo) {\n return {\n ...message,\n parts: nextParts,\n metadata: {\n ...nextMetadata,\n reply_to: effectiveReplyTo,\n },\n };\n }\n\n return {\n ...message,\n parts: nextParts,\n metadata: nextMetadata,\n };\n}\n","export type NcpAssistantReasoningNormalizationMode = \"off\" | \"think-tags\";\n\nexport type NcpAssistantReasoningSegment = {\n type: \"text\" | \"reasoning\";\n text: string;\n};\n\nconst THINK_OPEN_TAG = \"<think>\";\nconst THINK_CLOSE_TAG = \"</think>\";\nconst FINAL_OPEN_TAG = \"<final>\";\nconst FINAL_CLOSE_TAG = \"</final>\";\nconst LEADING_CONTROL_TAGS = [THINK_CLOSE_TAG, FINAL_OPEN_TAG, FINAL_CLOSE_TAG] as const;\nconst MAX_REASONING_DELIMITER_TAIL = THINK_CLOSE_TAG.length - 1;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isWhitespace(char: string): boolean {\n return /\\s/.test(char);\n}\n\nfunction normalizeMode(value: unknown): NcpAssistantReasoningNormalizationMode | null {\n if (value === \"off\" || value === \"think-tags\") {\n return value;\n }\n return null;\n}\n\nfunction readLeadingThinkTagState(\n buffer: string,\n): { status: \"matched\"; consumed: number } | { status: \"pending\" | \"rejected\" } {\n let cursor = 0;\n while (cursor < buffer.length && isWhitespace(buffer[cursor]!)) {\n cursor += 1;\n }\n\n const rest = buffer.slice(cursor);\n if (rest.startsWith(THINK_OPEN_TAG)) {\n return {\n status: \"matched\",\n consumed: cursor + THINK_OPEN_TAG.length,\n };\n }\n if (THINK_OPEN_TAG.startsWith(rest)) {\n return { status: \"pending\" };\n }\n return { status: \"rejected\" };\n}\n\nfunction stripLeadingControlTags(buffer: string): { buffer: string; pending: boolean } {\n let nextBuffer = buffer;\n\n while (true) {\n let cursor = 0;\n while (cursor < nextBuffer.length && isWhitespace(nextBuffer[cursor]!)) {\n cursor += 1;\n }\n\n const rest = nextBuffer.slice(cursor);\n if (rest.length === 0) {\n return { buffer: \"\", pending: false };\n }\n\n const matchedTag = LEADING_CONTROL_TAGS.find((tag) => rest.startsWith(tag));\n if (matchedTag) {\n nextBuffer = rest.slice(matchedTag.length);\n continue;\n }\n\n if (LEADING_CONTROL_TAGS.some((tag) => tag.startsWith(rest))) {\n return { buffer: rest, pending: true };\n }\n\n return { buffer: rest, pending: false };\n }\n}\n\nfunction findReasoningBoundary(buffer: string): { index: number; tag: string } | null {\n const indices = [\n { index: buffer.indexOf(THINK_CLOSE_TAG), tag: THINK_CLOSE_TAG },\n { index: buffer.indexOf(FINAL_OPEN_TAG), tag: FINAL_OPEN_TAG },\n ].filter((entry) => entry.index >= 0);\n\n if (indices.length === 0) {\n return null;\n }\n\n return indices.reduce((left, right) => (right.index < left.index ? right : left));\n}\n\nexport function readAssistantReasoningNormalizationMode(\n value: unknown,\n): NcpAssistantReasoningNormalizationMode | null {\n if (typeof value === \"string\") {\n return normalizeMode(value);\n }\n if (isRecord(value)) {\n return normalizeMode(value.mode);\n }\n return null;\n}\n\nexport function readAssistantReasoningNormalizationModeFromMetadata(\n metadata: Record<string, unknown> | null | undefined,\n): NcpAssistantReasoningNormalizationMode | null {\n if (!metadata) {\n return null;\n }\n return (\n readAssistantReasoningNormalizationMode(metadata.reasoning_normalization) ??\n readAssistantReasoningNormalizationMode(metadata.reasoningNormalization) ??\n normalizeMode(metadata.reasoning_normalization_mode) ??\n normalizeMode(metadata.reasoningNormalizationMode)\n );\n}\n\nexport function writeAssistantReasoningNormalizationModeToMetadata(\n metadata: Record<string, unknown>,\n mode: NcpAssistantReasoningNormalizationMode,\n): Record<string, unknown> {\n const nextMetadata = {\n ...metadata,\n };\n delete nextMetadata.reasoningNormalization;\n delete nextMetadata.reasoningNormalizationMode;\n delete nextMetadata.reasoning_normalization_mode;\n nextMetadata.reasoning_normalization = { mode };\n return nextMetadata;\n}\n\nexport class NcpAssistantTextStreamNormalizer {\n private buffer = \"\";\n private phase: \"initial\" | \"reasoning\" | \"text\" = \"initial\";\n private stripLeadingTextControlTags = false;\n\n constructor(private readonly mode: NcpAssistantReasoningNormalizationMode = \"off\") {}\n\n push(delta: string): NcpAssistantReasoningSegment[] {\n if (!delta) {\n return [];\n }\n if (this.mode !== \"think-tags\") {\n return [{ type: \"text\", text: delta }];\n }\n\n this.buffer += delta;\n return this.flush(false);\n }\n\n finish(): NcpAssistantReasoningSegment[] {\n if (this.mode !== \"think-tags\") {\n return [];\n }\n return this.flush(true);\n }\n\n private flush(final: boolean): NcpAssistantReasoningSegment[] {\n const segments: NcpAssistantReasoningSegment[] = [];\n\n while (true) {\n if (this.phase === \"initial\") {\n const leadingState = readLeadingThinkTagState(this.buffer);\n if (leadingState.status === \"matched\") {\n this.buffer = this.buffer.slice(leadingState.consumed);\n this.phase = \"reasoning\";\n continue;\n }\n if (leadingState.status === \"pending\" && !final) {\n return segments;\n }\n this.phase = \"text\";\n continue;\n }\n\n if (this.phase === \"reasoning\") {\n const boundary = findReasoningBoundary(this.buffer);\n if (boundary) {\n const reasoningText = this.buffer.slice(0, boundary.index);\n if (reasoningText.length > 0) {\n segments.push({ type: \"reasoning\", text: reasoningText });\n }\n this.buffer = this.buffer.slice(boundary.index + boundary.tag.length);\n this.phase = \"text\";\n this.stripLeadingTextControlTags = true;\n continue;\n }\n\n const safeLength = final ? this.buffer.length : Math.max(0, this.buffer.length - MAX_REASONING_DELIMITER_TAIL);\n if (safeLength === 0) {\n return segments;\n }\n segments.push({\n type: \"reasoning\",\n text: this.buffer.slice(0, safeLength),\n });\n this.buffer = this.buffer.slice(safeLength);\n if (!final) {\n return segments;\n }\n continue;\n }\n\n if (this.stripLeadingTextControlTags) {\n const stripped = stripLeadingControlTags(this.buffer);\n if (stripped.pending && !final) {\n this.buffer = stripped.buffer;\n return segments;\n }\n this.buffer = stripped.buffer;\n this.stripLeadingTextControlTags = false;\n }\n\n if (this.buffer.length === 0) {\n return segments;\n }\n\n segments.push({\n type: \"text\",\n text: this.buffer,\n });\n this.buffer = \"\";\n return segments;\n }\n }\n}\n\nexport function normalizeAssistantText(\n text: string,\n mode: NcpAssistantReasoningNormalizationMode,\n): {\n text: string;\n reasoning: string;\n parts: NcpAssistantReasoningSegment[];\n} {\n const normalizer = new NcpAssistantTextStreamNormalizer(mode);\n const parts = [...normalizer.push(text), ...normalizer.finish()].filter((part) => part.text.length > 0);\n\n return {\n text: parts\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\"),\n reasoning: parts\n .filter((part) => part.type === \"reasoning\")\n .map((part) => part.text)\n .join(\"\"),\n parts,\n };\n}\n","import {\n type NcpEndpointEvent,\n NcpEventType,\n type NcpRequestEnvelope,\n type NcpRunHandle,\n} from \"../types/index.js\";\n\nexport function createNcpRunHandle(envelope: NcpRequestEnvelope): NcpRunHandle {\n return {\n sessionId: envelope.sessionId,\n userMessageId: envelope.message.id,\n assistantMessageId: null,\n runId: null,\n ...(envelope.correlationId ? { correlationId: envelope.correlationId } : {}),\n };\n}\n\nexport function consumeNcpRunHandle(\n events: AsyncIterable<NcpEndpointEvent>,\n fallback: NcpRunHandle,\n): Promise<NcpRunHandle> {\n let resolved = false;\n let handle = fallback;\n\n return new Promise<NcpRunHandle>((resolve, reject) => {\n const resolveOnce = (): void => {\n if (resolved) {\n return;\n }\n resolved = true;\n resolve(handle);\n };\n\n void (async () => {\n try {\n for await (const event of events) {\n if (event.type === NcpEventType.RunStarted) {\n handle = {\n ...handle,\n assistantMessageId: event.payload.messageId ?? null,\n runId: event.payload.runId ?? null,\n };\n resolveOnce();\n }\n }\n resolveOnce();\n } catch (error) {\n if (!resolved) reject(error);\n }\n })();\n });\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/ncp",
3
- "version": "0.5.16",
3
+ "version": "0.5.18-beta.0",
4
4
  "private": false,
5
5
  "description": "NextClaw Communication Protocol core abstractions and types.",
6
6
  "type": "module",