@kodax-ai/kodax 0.7.40 → 0.7.42

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.
Files changed (70) hide show
  1. package/CHANGELOG.md +146 -1
  2. package/README.md +129 -232
  3. package/README_CN.md +128 -253
  4. package/dist/chunks/chunk-3RKBXWZS.js +2 -0
  5. package/dist/chunks/chunk-7JLYVWAF.js +1033 -0
  6. package/dist/chunks/chunk-CD3R5YBH.js +16 -0
  7. package/dist/chunks/chunk-DKXUY5F2.js +209 -0
  8. package/dist/chunks/chunk-HMYEQJGT.js +31 -0
  9. package/dist/chunks/{chunk-FAVPT4P7.js → chunk-IYJ5EPRV.js} +1 -1
  10. package/dist/chunks/chunk-KUX5LRPP.js +2 -0
  11. package/dist/chunks/{chunk-EQ5DGS2W.js → chunk-OWSKU55I.js} +5 -6
  12. package/dist/chunks/chunk-ZZ4KRK2B.js +465 -0
  13. package/dist/chunks/compaction-config-FIFFP4FT.js +2 -0
  14. package/dist/chunks/{construction-bootstrap-OFPUZTXQ.js → construction-bootstrap-J2WOCYEK.js} +1 -1
  15. package/dist/chunks/dist-2ZHWDXMQ.js +2 -0
  16. package/dist/chunks/dist-W4CJWLIH.js +2 -0
  17. package/dist/chunks/utils-A5MWDTWZ.js +2 -0
  18. package/dist/index.d.ts +237 -7
  19. package/dist/index.js +5 -5
  20. package/dist/kodax_cli.js +935 -917
  21. package/dist/sdk-agent.d.ts +1375 -10
  22. package/dist/sdk-agent.js +1 -1
  23. package/dist/sdk-coding.d.ts +4608 -14
  24. package/dist/sdk-coding.js +1 -1
  25. package/dist/sdk-llm.d.ts +210 -10
  26. package/dist/sdk-llm.js +1 -1
  27. package/dist/sdk-mcp.d.ts +17 -0
  28. package/dist/sdk-mcp.js +2 -0
  29. package/dist/sdk-repl.d.ts +3026 -13
  30. package/dist/sdk-repl.js +2 -1
  31. package/dist/sdk-session.d.ts +164 -0
  32. package/dist/sdk-session.js +2 -0
  33. package/dist/sdk-skills.d.ts +553 -9
  34. package/dist/sdk-skills.js +1 -1
  35. package/dist/types-chunks/bash-prefix-extractor.d-CkhaqKkg.d.ts +2571 -0
  36. package/dist/types-chunks/capability.d-3C62G8Eq.d.ts +39 -0
  37. package/dist/types-chunks/config.d-BfJUXxC0.d.ts +41 -0
  38. package/dist/types-chunks/cost-tracker.d-B6vMoLLF.d.ts +360 -0
  39. package/dist/types-chunks/history-cleanup.d-DznrzEiU.d.ts +1475 -0
  40. package/dist/types-chunks/instance-discovery.d-BsKnIwpg.d.ts +990 -0
  41. package/dist/types-chunks/resolver.d-DX9au4NJ.d.ts +263 -0
  42. package/dist/types-chunks/session-storage.d-Cci897iM.d.ts +68 -0
  43. package/dist/types-chunks/storage.d-Bc5DoAwp.d.ts +532 -0
  44. package/dist/types-chunks/transport.d-DuyjG30t.d.ts +180 -0
  45. package/dist/types-chunks/types.d-B1uGoVTE.d.ts +400 -0
  46. package/dist/types-chunks/types.d-C5mHR87z.d.ts +119 -0
  47. package/dist/types-chunks/types.d-mM8vqvhT.d.ts +254 -0
  48. package/package.json +16 -3
  49. package/dist/acp_events.d.ts +0 -109
  50. package/dist/acp_logger.d.ts +0 -20
  51. package/dist/acp_server.d.ts +0 -92
  52. package/dist/chunks/chunk-6QO6HWGU.js +0 -30
  53. package/dist/chunks/chunk-CLS57NPX.js +0 -460
  54. package/dist/chunks/chunk-NDNILSTR.js +0 -2
  55. package/dist/chunks/chunk-QZEDWITG.js +0 -1226
  56. package/dist/chunks/chunk-Z5EBDA6R.js +0 -15
  57. package/dist/chunks/compaction-config-A7XZ6H5Y.js +0 -2
  58. package/dist/chunks/dist-M57GIWR4.js +0 -2
  59. package/dist/chunks/dist-OTUF22DA.js +0 -2
  60. package/dist/chunks/utils-DFMYJUTE.js +0 -2
  61. package/dist/cli_commands.d.ts +0 -17
  62. package/dist/cli_option_helpers.d.ts +0 -49
  63. package/dist/cli_option_helpers.test.d.ts +0 -1
  64. package/dist/constructed_cli.d.ts +0 -82
  65. package/dist/constructed_cli.test.d.ts +0 -1
  66. package/dist/kodax_cli.d.ts +0 -7
  67. package/dist/self_modify_cli.d.ts +0 -81
  68. package/dist/self_modify_cli.test.d.ts +0 -9
  69. package/dist/skill_cli.d.ts +0 -15
  70. package/dist/skill_cli.test.d.ts +0 -1
@@ -0,0 +1,263 @@
1
+ import { D as KodaXReasoningMode, U as KodaXThinkingBudgetMap, V as KodaXThinkingDepth, r as KodaXProviderConfig, C as KodaXReasoningCapability, F as KodaXReasoningRequest, Q as KodaXTaskType, E as KodaXReasoningOverride, X as KodaXToolDefinition, m as KodaXMessage, z as KodaXProviderStreamOptions, J as KodaXStreamResult, q as KodaXProviderCapabilityProfile, h as KodaXCustomProviderConfig } from './types.d-B1uGoVTE.js';
2
+ import Anthropic from '@anthropic-ai/sdk';
3
+ import { K as KodaXBaseProvider } from './cost-tracker.d-B6vMoLLF.js';
4
+ import OpenAI from 'openai';
5
+
6
+ /**
7
+ * KodaX AI Errors
8
+ *
9
+ * AI 层错误类型 - 提供结构化的错误处理
10
+ */
11
+ /** 基础 KodaX 错误类 */
12
+ declare class KodaXError extends Error {
13
+ readonly code: string;
14
+ constructor(message: string, code?: string);
15
+ }
16
+ /** Provider 配置错误 */
17
+ declare class KodaXProviderError extends KodaXError {
18
+ readonly provider?: string | undefined;
19
+ constructor(message: string, provider?: string | undefined);
20
+ }
21
+ /** API 速率限制错误 */
22
+ declare class KodaXRateLimitError extends KodaXError {
23
+ readonly retryAfter?: number | undefined;
24
+ constructor(message: string, retryAfter?: number | undefined);
25
+ }
26
+ /** 网络错误 (超时, 连接被拒绝等) */
27
+ declare class KodaXNetworkError extends KodaXError {
28
+ readonly isTimeout: boolean;
29
+ constructor(message: string, isTimeout?: boolean);
30
+ }
31
+ /** Tool call ID 不匹配错误 */
32
+ declare class KodaXToolCallIdError extends KodaXError {
33
+ constructor(message: string);
34
+ }
35
+
36
+ declare const KODAX_REASONING_MODE_SEQUENCE: KodaXReasoningMode[];
37
+ declare const KODAX_DEFAULT_THINKING_BUDGETS: KodaXThinkingBudgetMap;
38
+ declare const KODAX_REASONING_SAFETY_RESERVE = 4096;
39
+ declare function getReasoningCapability(config: KodaXProviderConfig): KodaXReasoningCapability;
40
+ declare function isReasoningEnabled(reasoning?: boolean | KodaXReasoningRequest): boolean;
41
+ declare function normalizeReasoningRequest(reasoning?: boolean | KodaXReasoningRequest): Required<KodaXReasoningRequest>;
42
+ declare function getDefaultThinkingDepthForMode(mode: KodaXReasoningMode): KodaXThinkingDepth;
43
+ declare function resolveThinkingBudget(config: KodaXProviderConfig, depth: KodaXThinkingDepth, taskType?: KodaXTaskType): number;
44
+ declare function clampThinkingBudget(requestedBudget: number, maxOutputTokens: number, safetyReserve?: number): number;
45
+ declare function mapDepthToOpenAIReasoningEffort(depth: KodaXThinkingDepth): 'low' | 'medium' | 'high' | undefined;
46
+
47
+ declare function reasoningCapabilityToOverride(capability: KodaXReasoningCapability): KodaXReasoningOverride | undefined;
48
+ declare function reasoningOverrideToCapability(override: KodaXReasoningOverride): KodaXReasoningCapability;
49
+ declare function buildReasoningOverrideKey(providerName: string, config: Pick<KodaXProviderConfig, 'baseUrl' | 'model'>, modelOverride?: string): string;
50
+ declare function loadReasoningOverride(providerName: string, config: Pick<KodaXProviderConfig, 'baseUrl' | 'model'>, modelOverride?: string): KodaXReasoningOverride | undefined;
51
+ declare function saveReasoningOverride(providerName: string, config: Pick<KodaXProviderConfig, 'baseUrl' | 'model'>, override: KodaXReasoningOverride, modelOverride?: string): void;
52
+ declare function clearReasoningOverride(providerName: string, config: Pick<KodaXProviderConfig, 'baseUrl' | 'model'>, modelOverride?: string): void;
53
+
54
+ /**
55
+ * KodaX Anthropic Compatible Provider
56
+ *
57
+ * 支持 Anthropic API 格式的 Provider 基类
58
+ */
59
+
60
+ declare abstract class KodaXAnthropicCompatProvider extends KodaXBaseProvider {
61
+ abstract readonly name: string;
62
+ readonly supportsThinking = true;
63
+ protected abstract readonly config: KodaXProviderConfig;
64
+ protected client: Anthropic;
65
+ protected initClient(): void;
66
+ protected onStaleConnection(): void;
67
+ /**
68
+ * FEATURE_116 (v0.7.37) — Wrap a string `system` prompt as a single
69
+ * cacheable text block. v1 treats the entire system prompt as one cache
70
+ * prefix (implicit boundary at the end). When upstream callers later
71
+ * emit `KodaXContentBlock[]` with explicit `cache-boundary` markers
72
+ * (Phase 1.4+), this helper switches to lowering those markers via
73
+ * `lowerCacheBoundaries(blocks, 'attach')`.
74
+ *
75
+ * Escape hatch: setting `KODAX_DISABLE_PROMPT_CACHE=1` returns the
76
+ * original string unchanged so prompt caching can be disabled at
77
+ * runtime without redeploying.
78
+ */
79
+ protected applyCacheControlToSystem(systemText: string): string | Anthropic.Messages.TextBlockParam[];
80
+ /**
81
+ * FEATURE_116 (v0.7.37) — Mark the last tool definition as the cache
82
+ * suffix for the tools array. The Anthropic API caches the entire
83
+ * prefix up to and including the marked tool, so this is equivalent
84
+ * to "all tool defs are cacheable".
85
+ *
86
+ * Returns a new array; never mutates input.
87
+ */
88
+ protected applyCacheControlToTools(tools: KodaXToolDefinition[]): Anthropic.Messages.Tool[];
89
+ stream(messages: KodaXMessage[], tools: KodaXToolDefinition[], system: string, reasoning?: boolean | KodaXReasoningRequest, streamOptions?: KodaXProviderStreamOptions, signal?: AbortSignal): Promise<KodaXStreamResult>;
90
+ supportsNonStreamingFallback(): boolean;
91
+ complete(messages: KodaXMessage[], tools: KodaXToolDefinition[], system: string, reasoning?: boolean | KodaXReasoningRequest, streamOptions?: KodaXProviderStreamOptions, signal?: AbortSignal): Promise<KodaXStreamResult>;
92
+ private serializeSystemMessageContent;
93
+ private buildSystemPrompt;
94
+ private convertMessages;
95
+ }
96
+
97
+ /**
98
+ * KodaX OpenAI Compatible Provider
99
+ *
100
+ * 支持 OpenAI API 格式的 Provider 基类
101
+ */
102
+
103
+ declare abstract class KodaXOpenAICompatProvider extends KodaXBaseProvider {
104
+ abstract readonly name: string;
105
+ readonly supportsThinking = true;
106
+ protected abstract readonly config: KodaXProviderConfig;
107
+ protected client: OpenAI;
108
+ protected initClient(): void;
109
+ protected onStaleConnection(): void;
110
+ /**
111
+ * FEATURE_116 (v0.7.37) — Strip any `cache-boundary` markers from
112
+ * KodaXMessage content arrays before they reach OpenAI wire
113
+ * serialization. OpenAI / DeepSeek auto-cache prefix tokens
114
+ * server-side, so the client has no marker to lower; Kimi/Zhipu/通义
115
+ * self-cache via separate `cache_id` endpoints that are deferred to
116
+ * v0.7.45+ (FEATURE_102). Stripping is the correct universal action
117
+ * for this base class.
118
+ *
119
+ * Idempotent: a message whose content is a string or contains no
120
+ * boundaries returns the same reference. Safe to call multiple times.
121
+ */
122
+ protected stripCacheBoundariesFromMessages(messages: KodaXMessage[]): KodaXMessage[];
123
+ /**
124
+ * Collapse every `role: 'system'` message (the `system` parameter plus any
125
+ * system messages embedded in `messages`) into a single top-of-wire system
126
+ * content and return the remaining non-system messages. Some OpenAI-compat
127
+ * gateways — notably third-party Qwen proxies — reject any system message
128
+ * that is not at position 0, so this normalization guarantees the wire has
129
+ * exactly one system entry regardless of what the upstream caller passed.
130
+ *
131
+ * Post-compact attachments, compaction summaries and handoff-time
132
+ * `replaceSystemMessage` can all leave secondary `role: 'system'` entries
133
+ * mid-transcript; merging here is the provider-layer bottleneck that keeps
134
+ * callers from having to coordinate.
135
+ */
136
+ private normalizeSystemForWire;
137
+ private appendExtraBody;
138
+ private resetReasoningCapabilityParams;
139
+ private applyReasoningCapability;
140
+ private getFallbackTerms;
141
+ stream(messages: KodaXMessage[], tools: KodaXToolDefinition[], system: string, reasoning?: boolean | KodaXReasoningRequest, streamOptions?: KodaXProviderStreamOptions, signal?: AbortSignal): Promise<KodaXStreamResult>;
142
+ supportsNonStreamingFallback(): boolean;
143
+ complete(messages: KodaXMessage[], tools: KodaXToolDefinition[], system: string, reasoning?: boolean | KodaXReasoningRequest, streamOptions?: KodaXProviderStreamOptions, signal?: AbortSignal): Promise<KodaXStreamResult>;
144
+ private extractReasoningDelta;
145
+ private serializeAssistantMessage;
146
+ private serializeUserMessage;
147
+ private serializeSystemMessage;
148
+ private convertMessages;
149
+ }
150
+
151
+ /**
152
+ * KodaX Provider Registry
153
+ *
154
+ * Provider 注册表 - 统一管理所有 Provider
155
+ */
156
+
157
+ type ProviderName = 'anthropic' | 'openai' | 'deepseek' | 'kimi' | 'kimi-code' | 'qwen' | 'zhipu' | 'zhipu-coding' | 'minimax-coding' | 'mimo-coding' | 'ark-coding' | 'gemini-cli' | 'codex-cli';
158
+ type ProviderSnapshot = {
159
+ model: string;
160
+ models?: readonly string[];
161
+ apiKeyEnv: string;
162
+ reasoningCapability: KodaXReasoningCapability;
163
+ modelReasoningCapabilities?: Partial<Record<string, KodaXReasoningCapability>>;
164
+ capabilityProfile: KodaXProviderCapabilityProfile;
165
+ };
166
+ declare const KODAX_PROVIDER_SNAPSHOTS: Record<ProviderName, ProviderSnapshot>;
167
+ declare const KODAX_PROVIDERS: Record<string, () => KodaXBaseProvider>;
168
+ declare const KODAX_DEFAULT_PROVIDER: string;
169
+ declare function getProvider(name?: string): KodaXBaseProvider;
170
+ declare function isProviderConfigured(name: string): boolean;
171
+ declare function getProviderModel(name: string): string | null;
172
+ declare function getProviderConfiguredReasoningCapability(name: string, modelOverride?: string): KodaXReasoningCapability | 'unknown';
173
+ declare function getProviderConfiguredCapabilityProfile(name: string): KodaXProviderCapabilityProfile | null;
174
+ declare function getProviderList(): Array<{
175
+ name: string;
176
+ model: string;
177
+ models: string[];
178
+ configured: boolean;
179
+ reasoningCapability: KodaXReasoningCapability;
180
+ capabilityProfile: KodaXProviderCapabilityProfile;
181
+ }>;
182
+ declare function getProviderModels(name: string): string[];
183
+ declare function isProviderName(name: string): name is ProviderName;
184
+
185
+ /**
186
+ * Custom Provider Factory
187
+ *
188
+ * Creates KodaXBaseProvider instances from KodaXCustomProviderConfig.
189
+ * Supports both OpenAI and Anthropic protocol families.
190
+ */
191
+
192
+ declare function validateCustomProviderConfig(custom: KodaXCustomProviderConfig): void;
193
+ declare function createCustomProvider(custom: KodaXCustomProviderConfig): KodaXBaseProvider;
194
+
195
+ /**
196
+ * Register custom providers from config. Replaces all existing custom providers.
197
+ */
198
+ declare function registerCustomProviders(configs: KodaXCustomProviderConfig[]): void;
199
+ /**
200
+ * Get a custom provider instance by name.
201
+ * Returns undefined if not found in custom registry.
202
+ * Note: This will throw if the provider's API key env var is not set.
203
+ */
204
+ declare function getCustomProvider(name: string): KodaXBaseProvider | undefined;
205
+ /**
206
+ * Check if a name refers to a custom provider.
207
+ */
208
+ declare function isCustomProviderName(name: string): boolean;
209
+ /**
210
+ * Get all custom provider names without instantiation.
211
+ */
212
+ declare function getCustomProviderNames(): string[];
213
+ /**
214
+ * Get display info for all registered custom providers.
215
+ * Reads metadata from stored config without instantiating providers,
216
+ * so it won't throw for unconfigured providers.
217
+ */
218
+ declare function getCustomProviderList(): Array<{
219
+ name: string;
220
+ model: string;
221
+ models: string[];
222
+ configured: boolean;
223
+ reasoningCapability: string;
224
+ capabilityProfile: KodaXProviderCapabilityProfile;
225
+ custom: true;
226
+ }>;
227
+ /**
228
+ * Get available model IDs for a custom provider.
229
+ * Reads from stored config without instantiation.
230
+ * Returns undefined if not a custom provider.
231
+ */
232
+ declare function getCustomProviderModels(name: string): string[] | undefined;
233
+
234
+ type ModelProviderFactory = () => KodaXBaseProvider;
235
+ declare function registerModelProvider(name: string, factory: ModelProviderFactory): () => void;
236
+ declare function getRuntimeModelProvider(name: string): KodaXBaseProvider | undefined;
237
+ declare function isRuntimeModelProviderName(name: string): boolean;
238
+ declare function getRuntimeModelProviderNames(): string[];
239
+ declare function clearRuntimeModelProviders(): void;
240
+
241
+ /**
242
+ * Unified Provider Resolver
243
+ *
244
+ * Resolves provider instances by checking built-in registry first,
245
+ * then custom providers. Built-in takes precedence on name collision.
246
+ */
247
+
248
+ /**
249
+ * Resolve a provider by name. Built-in providers take precedence over custom.
250
+ * @throws Error if provider is not found in either registry.
251
+ */
252
+ declare function resolveProvider(name: string): KodaXBaseProvider;
253
+ /**
254
+ * Check if a name refers to any known provider (built-in or custom).
255
+ */
256
+ declare function isKnownProvider(name: string): boolean;
257
+ /**
258
+ * Get all available provider names (built-in + custom).
259
+ */
260
+ declare function getAvailableProviderNames(): string[];
261
+
262
+ export { getProviderList as A, getProviderModel as B, getProviderModels as C, getReasoningCapability as D, getRuntimeModelProvider as E, getRuntimeModelProviderNames as F, isCustomProviderName as G, isKnownProvider as H, isProviderConfigured as I, isProviderName as J, KODAX_DEFAULT_PROVIDER as K, isReasoningEnabled as L, isRuntimeModelProviderName as M, loadReasoningOverride as N, mapDepthToOpenAIReasoningEffort as O, normalizeReasoningRequest as Q, reasoningCapabilityToOverride as R, reasoningOverrideToCapability as S, registerCustomProviders as T, registerModelProvider as U, resolveProvider as V, resolveThinkingBudget as W, saveReasoningOverride as X, validateCustomProviderConfig as Y, KODAX_DEFAULT_THINKING_BUDGETS as a, KODAX_PROVIDERS as b, KODAX_PROVIDER_SNAPSHOTS as c, KODAX_REASONING_MODE_SEQUENCE as d, KODAX_REASONING_SAFETY_RESERVE as e, KodaXAnthropicCompatProvider as f, KodaXError as g, KodaXNetworkError as h, KodaXOpenAICompatProvider as i, KodaXProviderError as j, KodaXRateLimitError as k, KodaXToolCallIdError as l, buildReasoningOverrideKey as m, clampThinkingBudget as n, clearReasoningOverride as o, clearRuntimeModelProviders as p, createCustomProvider as q, getAvailableProviderNames as r, getCustomProvider as s, getCustomProviderList as t, getCustomProviderModels as u, getCustomProviderNames as v, getDefaultThinkingDepthForMode as w, getProvider as x, getProviderConfiguredCapabilityProfile as y, getProviderConfiguredReasoningCapability as z };
263
+ export type { ProviderName as P };
@@ -0,0 +1,68 @@
1
+ import { k as KodaXSessionData, o as KodaXSessionLineage, r as KodaXSessionNavigationOptions, s as KodaXSessionRuntimeInfo } from './types.d-mM8vqvhT.js';
2
+
3
+ /**
4
+ * Session Storage - Session storage abstraction layer
5
+ *
6
+ * Provides a shared persistence interface across memory and filesystem storage.
7
+ */
8
+
9
+ /**
10
+ * Session data structure.
11
+ */
12
+ type SessionData = KodaXSessionData;
13
+ /**
14
+ * Session storage interface.
15
+ */
16
+ interface SessionStorage {
17
+ save(id: string, data: SessionData): Promise<void>;
18
+ load(id: string): Promise<SessionData | null>;
19
+ getLineage?(id: string): Promise<KodaXSessionLineage | null>;
20
+ setActiveEntry?(id: string, selector: string, options?: KodaXSessionNavigationOptions): Promise<SessionData | null>;
21
+ setLabel?(id: string, selector: string, label?: string): Promise<SessionData | null>;
22
+ rewind?(id: string, selector?: string): Promise<SessionData | null>;
23
+ fork?(id: string, selector?: string, options?: {
24
+ sessionId?: string;
25
+ title?: string;
26
+ }): Promise<{
27
+ sessionId: string;
28
+ data: SessionData;
29
+ } | null>;
30
+ list(gitRoot?: string): Promise<Array<{
31
+ id: string;
32
+ title: string;
33
+ msgCount: number;
34
+ runtimeInfo?: KodaXSessionRuntimeInfo;
35
+ }>>;
36
+ delete?(id: string): Promise<void>;
37
+ deleteAll?(gitRoot?: string): Promise<void>;
38
+ }
39
+ /**
40
+ * In-memory session storage implementation.
41
+ */
42
+ declare class MemorySessionStorage implements SessionStorage {
43
+ private sessions;
44
+ save(id: string, data: SessionData): Promise<void>;
45
+ load(id: string): Promise<SessionData | null>;
46
+ getLineage(id: string): Promise<KodaXSessionLineage | null>;
47
+ setActiveEntry(id: string, selector: string, options?: KodaXSessionNavigationOptions): Promise<SessionData | null>;
48
+ setLabel(id: string, selector: string, label?: string): Promise<SessionData | null>;
49
+ fork(id: string, selector?: string, options?: {
50
+ sessionId?: string;
51
+ title?: string;
52
+ }): Promise<{
53
+ sessionId: string;
54
+ data: SessionData;
55
+ } | null>;
56
+ rewind(id: string, selector?: string): Promise<SessionData | null>;
57
+ list(_gitRoot?: string): Promise<Array<{
58
+ id: string;
59
+ title: string;
60
+ msgCount: number;
61
+ }>>;
62
+ delete(id: string): Promise<void>;
63
+ deleteAll(_gitRoot?: string): Promise<void>;
64
+ }
65
+ declare function createMemorySessionStorage(): SessionStorage;
66
+
67
+ export { MemorySessionStorage as M, createMemorySessionStorage as c };
68
+ export type { SessionData as S, SessionStorage as a };