@nextclaw/ncp 0.5.17 → 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 +25 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":";AAYA,MAAa,uCAAuC;AAEpD,SAAgB,mBAAmB,SAAmE;AACpG,QAAO,SAAS,WAAW,0CAA0C;;;;ACkQvE,IAAY,eAAL,yBAAA,cAAA;AACL,cAAA,mBAAA;AACA,cAAA,mBAAA;AACA,cAAA,oBAAA;AACA,cAAA,0BAAA;AACA,cAAA,iBAAA;AACA,cAAA,qBAAA;AACA,cAAA,qBAAA;AACA,cAAA,sBAAA;AACA,cAAA,mBAAA;AACA,cAAA,kBAAA;AACA,cAAA,sBAAA;AACA,cAAA,sBAAA;AACA,cAAA,oBAAA;AACA,cAAA,2BAAA;AACA,cAAA,2BAAA;AACA,cAAA,yBAAA;AACA,cAAA,0BAAA;AACA,cAAA,yBAAA;AACA,cAAA,8BAAA;AACA,cAAA,wBAAA;AACA,cAAA,2BAAA;AACA,cAAA,iBAAA;AACA,cAAA,sBAAA;AACA,cAAA,qBAAA;AACA,cAAA,qBAAA;AACA,cAAA,gBAAA;AACA,cAAA,iBAAA;AACA,cAAA,cAAA;AACA,cAAA,iBAAA;AACA,cAAA,0BAAA;AACA,cAAA,iBAAA;AACA,cAAA,eAAA;AACA,cAAA,qBAAA;;KACD;;;AC5SD,MAAM,2BAA2B;AACjC,MAAM,sBAAsB;AAE5B,SAAS,qBAAqB,OAAoC;AAChE,KAAI,OAAO,UAAU,SACnB;CAEF,MAAM,UAAU,MAAM,MAAM;AAC5B,QAAO,QAAQ,SAAS,IAAI,UAAU,KAAA;;AAGxC,SAAgB,uBAAuB,SAAiB,kBAAmD;CACzG,IAAI,cAAc;CAClB,IAAI;AAEJ,KAAI,yBAAyB,KAAK,YAAY,EAAE;AAC9C,YAAU,qBAAqB,iBAAiB;AAChD,gBAAc,YAAY,QAAQ,0BAA0B,GAAG,CAAC,MAAM;;CAGxE,MAAM,sBAAsB,YAAY,MAAM,oBAAoB,GAAG;AACrE,KAAI,qBAAqB;AACvB,YAAU,qBAAqB,oBAAoB;AACnD,gBAAc,YAAY,QAAQ,qBAAqB,GAAG,CAAC,MAAM;;AAGnE,QAAO,UAAU;EAAE,SAAS;EAAa;EAAS,GAAG,EAAE,SAAS,aAAa;;AAG/E,SAAgB,2BACd,SACA,mBAAmB,QAAQ,IACf;AACZ,KAAI,QAAQ,SAAS,YACnB,QAAO;EACL,GAAG;EACH,OAAO,CAAC,GAAG,QAAQ,MAAM;EACzB,UAAU,QAAQ,WAAW,EAAE,GAAG,QAAQ,UAAU,GAAG,KAAA;EACxD;CAGH,MAAM,iBAAiB,QAAQ,MAAM,WAAW,SAAS,KAAK,SAAS,OAAO;CAC9E,MAAM,eAAe,QAAQ,WAAW,EAAE,GAAG,QAAQ,UAAU,GAAG,KAAA;CAClE,MAAM,kBAAkB,qBAAqB,cAAc,SAAS;AAEpE,KAAI,iBAAiB,EACnB,QAAO;EACL,GAAG;EACH,OAAO,CAAC,GAAG,QAAQ,MAAM;EACzB,UAAU;EACX;CAGH,MAAM,gBAAgB,QAAQ,MAAM;AACpC,KAAI,CAAC,iBAAiB,cAAc,SAAS,OAC3C,QAAO;EACL,GAAG;EACH,OAAO,CAAC,GAAG,QAAQ,MAAM;EACzB,UAAU;EACX;CAGH,MAAM,EAAE,SAAS,YAAY,uBAAuB,cAAc,MAAM,iBAAiB;CACzF,MAAM,mBAAmB,WAAW;CACpC,MAAM,YAAY,QAAQ,MAAM,SAAS,MAAM,UAAU;AACvD,MAAI,UAAU,kBAAkB,KAAK,SAAS,OAC5C,QAAO,CAAC,KAAK;AAEf,MAAI,QAAQ,WAAW,EACrB,QAAO,EAAE;AAEX,SAAO,CAAC;GAAE,GAAG;GAAM,MAAM;GAAS,CAAC;GACnC;AAEF,KAAI,iBACF,QAAO;EACL,GAAG;EACH,OAAO;EACP,UAAU;GACR,GAAG;GACH,UAAU;GACX;EACF;AAGH,QAAO;EACL,GAAG;EACH,OAAO;EACP,UAAU;EACX;;;;ACzFH,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AAEvB,MAAM,uBAAuB;CAAC;CAAiB;CADvB;CACuD;AAC/E,MAAM,+BAA+B;AAErC,SAAS,SAAS,OAAkD;AAClE,QAAO,QAAQ,MAAM,IAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM;;AAG7E,SAAS,aAAa,MAAuB;AAC3C,QAAO,KAAK,KAAK,KAAK;;AAGxB,SAAS,cAAc,OAA+D;AACpF,KAAI,UAAU,SAAS,UAAU,aAC/B,QAAO;AAET,QAAO;;AAGT,SAAS,yBACP,QAC8E;CAC9E,IAAI,SAAS;AACb,QAAO,SAAS,OAAO,UAAU,aAAa,OAAO,QAAS,CAC5D,WAAU;CAGZ,MAAM,OAAO,OAAO,MAAM,OAAO;AACjC,KAAI,KAAK,WAAW,eAAe,CACjC,QAAO;EACL,QAAQ;EACR,UAAU,SAAS;EACpB;AAEH,KAAI,eAAe,WAAW,KAAK,CACjC,QAAO,EAAE,QAAQ,WAAW;AAE9B,QAAO,EAAE,QAAQ,YAAY;;AAG/B,SAAS,wBAAwB,QAAsD;CACrF,IAAI,aAAa;AAEjB,QAAO,MAAM;EACX,IAAI,SAAS;AACb,SAAO,SAAS,WAAW,UAAU,aAAa,WAAW,QAAS,CACpE,WAAU;EAGZ,MAAM,OAAO,WAAW,MAAM,OAAO;AACrC,MAAI,KAAK,WAAW,EAClB,QAAO;GAAE,QAAQ;GAAI,SAAS;GAAO;EAGvC,MAAM,aAAa,qBAAqB,MAAM,QAAQ,KAAK,WAAW,IAAI,CAAC;AAC3E,MAAI,YAAY;AACd,gBAAa,KAAK,MAAM,WAAW,OAAO;AAC1C;;AAGF,MAAI,qBAAqB,MAAM,QAAQ,IAAI,WAAW,KAAK,CAAC,CAC1D,QAAO;GAAE,QAAQ;GAAM,SAAS;GAAM;AAGxC,SAAO;GAAE,QAAQ;GAAM,SAAS;GAAO;;;AAI3C,SAAS,sBAAsB,QAAuD;CACpF,MAAM,UAAU,CACd;EAAE,OAAO,OAAO,QAAQ,gBAAgB;EAAE,KAAK;EAAiB,EAChE;EAAE,OAAO,OAAO,QAAQ,eAAe;EAAE,KAAK;EAAgB,CAC/D,CAAC,QAAQ,UAAU,MAAM,SAAS,EAAE;AAErC,KAAI,QAAQ,WAAW,EACrB,QAAO;AAGT,QAAO,QAAQ,QAAQ,MAAM,UAAW,MAAM,QAAQ,KAAK,QAAQ,QAAQ,KAAM;;AAGnF,SAAgB,wCACd,OAC+C;AAC/C,KAAI,OAAO,UAAU,SACnB,QAAO,cAAc,MAAM;AAE7B,KAAI,SAAS,MAAM,CACjB,QAAO,cAAc,MAAM,KAAK;AAElC,QAAO;;AAGT,SAAgB,oDACd,UAC+C;AAC/C,KAAI,CAAC,SACH,QAAO;AAET,QACE,wCAAwC,SAAS,wBAAwB,IACzE,wCAAwC,SAAS,uBAAuB,IACxE,cAAc,SAAS,6BAA6B,IACpD,cAAc,SAAS,2BAA2B;;AAItD,SAAgB,mDACd,UACA,MACyB;CACzB,MAAM,eAAe,EACnB,GAAG,UACJ;AACD,QAAO,aAAa;AACpB,QAAO,aAAa;AACpB,QAAO,aAAa;AACpB,cAAa,0BAA0B,EAAE,MAAM;AAC/C,QAAO;;AAGT,IAAa,mCAAb,MAA8C;CAC5C,SAAiB;CACjB,QAAkD;CAClD,8BAAsC;CAEtC,YAAY,OAAgE,OAAO;AAAtD,OAAA,OAAA;;CAE7B,KAAK,OAA+C;AAClD,MAAI,CAAC,MACH,QAAO,EAAE;AAEX,MAAI,KAAK,SAAS,aAChB,QAAO,CAAC;GAAE,MAAM;GAAQ,MAAM;GAAO,CAAC;AAGxC,OAAK,UAAU;AACf,SAAO,KAAK,MAAM,MAAM;;CAG1B,SAAyC;AACvC,MAAI,KAAK,SAAS,aAChB,QAAO,EAAE;AAEX,SAAO,KAAK,MAAM,KAAK;;CAGzB,MAAc,OAAgD;EAC5D,MAAM,WAA2C,EAAE;AAEnD,SAAO,MAAM;AACX,OAAI,KAAK,UAAU,WAAW;IAC5B,MAAM,eAAe,yBAAyB,KAAK,OAAO;AAC1D,QAAI,aAAa,WAAW,WAAW;AACrC,UAAK,SAAS,KAAK,OAAO,MAAM,aAAa,SAAS;AACtD,UAAK,QAAQ;AACb;;AAEF,QAAI,aAAa,WAAW,aAAa,CAAC,MACxC,QAAO;AAET,SAAK,QAAQ;AACb;;AAGF,OAAI,KAAK,UAAU,aAAa;IAC9B,MAAM,WAAW,sBAAsB,KAAK,OAAO;AACnD,QAAI,UAAU;KACZ,MAAM,gBAAgB,KAAK,OAAO,MAAM,GAAG,SAAS,MAAM;AAC1D,SAAI,cAAc,SAAS,EACzB,UAAS,KAAK;MAAE,MAAM;MAAa,MAAM;MAAe,CAAC;AAE3D,UAAK,SAAS,KAAK,OAAO,MAAM,SAAS,QAAQ,SAAS,IAAI,OAAO;AACrE,UAAK,QAAQ;AACb,UAAK,8BAA8B;AACnC;;IAGF,MAAM,aAAa,QAAQ,KAAK,OAAO,SAAS,KAAK,IAAI,GAAG,KAAK,OAAO,SAAS,6BAA6B;AAC9G,QAAI,eAAe,EACjB,QAAO;AAET,aAAS,KAAK;KACZ,MAAM;KACN,MAAM,KAAK,OAAO,MAAM,GAAG,WAAW;KACvC,CAAC;AACF,SAAK,SAAS,KAAK,OAAO,MAAM,WAAW;AAC3C,QAAI,CAAC,MACH,QAAO;AAET;;AAGF,OAAI,KAAK,6BAA6B;IACpC,MAAM,WAAW,wBAAwB,KAAK,OAAO;AACrD,QAAI,SAAS,WAAW,CAAC,OAAO;AAC9B,UAAK,SAAS,SAAS;AACvB,YAAO;;AAET,SAAK,SAAS,SAAS;AACvB,SAAK,8BAA8B;;AAGrC,OAAI,KAAK,OAAO,WAAW,EACzB,QAAO;AAGT,YAAS,KAAK;IACZ,MAAM;IACN,MAAM,KAAK;IACZ,CAAC;AACF,QAAK,SAAS;AACd,UAAO;;;;AAKb,SAAgB,uBACd,MACA,MAKA;CACA,MAAM,aAAa,IAAI,iCAAiC,KAAK;CAC7D,MAAM,QAAQ,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,GAAG,WAAW,QAAQ,CAAC,CAAC,QAAQ,SAAS,KAAK,KAAK,SAAS,EAAE;AAEvG,QAAO;EACL,MAAM,MACH,QAAQ,SAAS,KAAK,SAAS,OAAO,CACtC,KAAK,SAAS,KAAK,KAAK,CACxB,KAAK,GAAG;EACX,WAAW,MACR,QAAQ,SAAS,KAAK,SAAS,YAAY,CAC3C,KAAK,SAAS,KAAK,KAAK,CACxB,KAAK,GAAG;EACX;EACD;;;;ACjPH,SAAgB,mBAAmB,UAA4C;AAC7E,QAAO;EACL,WAAW,SAAS;EACpB,eAAe,SAAS,QAAQ;EAChC,oBAAoB;EACpB,OAAO;EACP,GAAI,SAAS,gBAAgB,EAAE,eAAe,SAAS,eAAe,GAAG,EAAE;EAC5E;;AAGH,SAAgB,oBACd,QACA,UACuB;CACvB,IAAI,WAAW;CACf,IAAI,SAAS;AAEb,QAAO,IAAI,SAAuB,SAAS,WAAW;EACpD,MAAM,oBAA0B;AAC9B,OAAI,SACF;AAEF,cAAW;AACX,WAAQ,OAAO;;AAGjB,GAAM,YAAY;AAChB,OAAI;AACF,eAAW,MAAM,SAAS,OACxB,KAAI,MAAM,SAAS,aAAa,YAAY;AAC1C,cAAS;MACP,GAAG;MACH,oBAAoB,MAAM,QAAQ,aAAa;MAC/C,OAAO,MAAM,QAAQ,SAAS;MAC/B;AACD,kBAAa;;AAGjB,iBAAa;YACN,OAAO;AACd,QAAI,CAAC,SAAU,QAAO,MAAM;;MAE5B;GACJ"}
|
|
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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"}
|