qlogicagent 2.10.12 → 2.10.14

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 (77) hide show
  1. package/dist/agent.js +14 -14
  2. package/dist/cli.js +441 -376
  3. package/dist/index.js +440 -375
  4. package/dist/orchestration.js +6 -6
  5. package/dist/protocol.js +1 -1
  6. package/dist/types/agent/agent.d.ts +1 -1
  7. package/dist/types/agent/tool-loop.d.ts +1 -1
  8. package/dist/types/agent/types.d.ts +1 -1
  9. package/dist/types/cli/handlers/memory-handler.d.ts +4 -0
  10. package/dist/types/cli/handlers/turn-handler.d.ts +1 -1
  11. package/dist/types/cli/stdio-server.contract.test.d.ts +1 -0
  12. package/dist/types/cli/stdio-server.d.ts +11 -0
  13. package/dist/types/cli/tool-bootstrap.d.ts +3 -3
  14. package/dist/types/index.d.ts +2 -2
  15. package/dist/types/llm/index.d.ts +1 -1
  16. package/dist/types/orchestration/tool-cascade.d.ts +2 -2
  17. package/dist/types/protocol/wire/agent-rpc.d.ts +14 -0
  18. package/dist/types/protocol/wire/gateway-contract.d.ts +61 -0
  19. package/dist/types/protocol/wire/gateway-contract.test.d.ts +1 -0
  20. package/dist/types/protocol/wire/gateway-rpc.d.ts +183 -1
  21. package/dist/types/protocol/wire/index.d.ts +3 -2
  22. package/dist/types/protocol/wire/memory-provider-lifecycle.d.ts +1 -1
  23. package/dist/types/runtime/execution/dream-agent.d.ts +1 -1
  24. package/dist/types/runtime/execution/forked-agent.d.ts +1 -1
  25. package/dist/types/runtime/hooks/context-compression.d.ts +1 -1
  26. package/dist/types/runtime/session/session-persistence.d.ts +1 -1
  27. package/dist/types/skills/memory/local-embedding.d.ts +4 -100
  28. package/dist/types/skills/memory/local-memory-provider.d.ts +18 -5
  29. package/dist/types/skills/memory/local-store.d.ts +70 -0
  30. package/dist/types/skills/memory/memory-provider-factory.d.ts +5 -11
  31. package/package.json +3 -5
  32. package/dist/types/provider-core/adapters/aliyun-oss-file-upload-adapter.d.ts +0 -44
  33. package/dist/types/provider-core/adapters/gemini-file-upload-adapter.d.ts +0 -26
  34. package/dist/types/provider-core/adapters/hub-oss-file-upload-adapter.d.ts +0 -29
  35. package/dist/types/provider-core/adapters/index.d.ts +0 -10
  36. package/dist/types/provider-core/adapters/openai-file-upload-adapter.d.ts +0 -38
  37. package/dist/types/provider-core/adapters/volcengine-file-upload-adapter.d.ts +0 -24
  38. package/dist/types/provider-core/builtin-providers.d.ts +0 -8
  39. package/dist/types/provider-core/constants.d.ts +0 -1
  40. package/dist/types/provider-core/credentials.d.ts +0 -1
  41. package/dist/types/provider-core/debug-transport.d.ts +0 -12
  42. package/dist/types/provider-core/errors.d.ts +0 -11
  43. package/dist/types/provider-core/events.d.ts +0 -48
  44. package/dist/types/provider-core/file-upload-service.d.ts +0 -68
  45. package/dist/types/provider-core/gemini-schema-utils.d.ts +0 -17
  46. package/dist/types/provider-core/index.d.ts +0 -37
  47. package/dist/types/provider-core/llm-client.d.ts +0 -43
  48. package/dist/types/provider-core/media-client.d.ts +0 -42
  49. package/dist/types/provider-core/media-transport.d.ts +0 -176
  50. package/dist/types/provider-core/media.d.ts +0 -2
  51. package/dist/types/provider-core/model-detection.d.ts +0 -22
  52. package/dist/types/provider-core/paths.d.ts +0 -2
  53. package/dist/types/provider-core/provider-def.d.ts +0 -220
  54. package/dist/types/provider-core/provider-registry.d.ts +0 -50
  55. package/dist/types/provider-core/provider-tool-api.d.ts +0 -44
  56. package/dist/types/provider-core/provider-variant-resolver.d.ts +0 -35
  57. package/dist/types/provider-core/retry.d.ts +0 -37
  58. package/dist/types/provider-core/transport.d.ts +0 -281
  59. package/dist/types/provider-core/transports/anthropic-messages.d.ts +0 -65
  60. package/dist/types/provider-core/transports/gemini-cache-api.d.ts +0 -86
  61. package/dist/types/provider-core/transports/gemini-file-api.d.ts +0 -90
  62. package/dist/types/provider-core/transports/gemini-generatecontent.d.ts +0 -56
  63. package/dist/types/provider-core/transports/gemini-lyria-realtime.d.ts +0 -117
  64. package/dist/types/provider-core/transports/gemini-media.d.ts +0 -53
  65. package/dist/types/provider-core/transports/media-resolve.d.ts +0 -50
  66. package/dist/types/provider-core/transports/minimax-media.d.ts +0 -56
  67. package/dist/types/provider-core/transports/openai-chat.d.ts +0 -81
  68. package/dist/types/provider-core/transports/openai-media.d.ts +0 -24
  69. package/dist/types/provider-core/transports/openai-responses.d.ts +0 -63
  70. package/dist/types/provider-core/transports/qwen-media.d.ts +0 -59
  71. package/dist/types/provider-core/transports/realtime-transport.d.ts +0 -183
  72. package/dist/types/provider-core/transports/volcengine-grounding.d.ts +0 -58
  73. package/dist/types/provider-core/transports/volcengine-media.d.ts +0 -94
  74. package/dist/types/provider-core/transports/volcengine-responses.d.ts +0 -64
  75. package/dist/types/provider-core/transports/zhipu-media.d.ts +0 -82
  76. package/dist/types/provider-core/transports/zhipu-tool-api.d.ts +0 -35
  77. package/dist/types/provider-core/wire-types.d.ts +0 -51
@@ -27,6 +27,40 @@ export interface ProjectInfo {
27
27
  leaderSessionId?: string;
28
28
  }
29
29
  export interface GatewayRpcMethodMap {
30
+ "agent.health": {
31
+ params: {};
32
+ result: {
33
+ ok: boolean;
34
+ status: "healthy" | "degraded" | "stopping";
35
+ uptimeMs: number;
36
+ protocolVersion: string;
37
+ version: string;
38
+ };
39
+ };
40
+ "agent.metrics": {
41
+ params: {};
42
+ result: {
43
+ rpc: {
44
+ activeRequests: number;
45
+ completedRequests: number;
46
+ cancelledRequests: number;
47
+ deadlineExceededRequests: number;
48
+ dedupedRequests: number;
49
+ lateResponsesDropped: number;
50
+ invalidRequests: number;
51
+ };
52
+ };
53
+ };
54
+ "agent.cancel": {
55
+ params: {
56
+ requestId: string;
57
+ reason?: string;
58
+ };
59
+ result: {
60
+ ok: boolean;
61
+ cancelled: boolean;
62
+ };
63
+ };
30
64
  "session.list": {
31
65
  params: {
32
66
  limit?: number;
@@ -381,8 +415,14 @@ export interface GatewayRpcMethodMap {
381
415
  params: {
382
416
  userId?: string;
383
417
  pageSize?: number;
418
+ windowStartAt?: number;
419
+ windowEndAt?: number;
420
+ windowCenterAt?: number;
421
+ bucketCount?: number;
422
+ clusterLimit?: number;
384
423
  };
385
424
  result: {
425
+ totalCount: number;
386
426
  records: Array<{
387
427
  id: string;
388
428
  text: string;
@@ -399,6 +439,38 @@ export interface GatewayRpcMethodMap {
399
439
  lastAccessedAt: number;
400
440
  isArchived: boolean;
401
441
  }>;
442
+ buckets: Array<{
443
+ id: string;
444
+ startAt: number;
445
+ endAt: number;
446
+ count: number;
447
+ avgImportance: number;
448
+ avgConfidence: number;
449
+ topCategory: string;
450
+ }>;
451
+ clusters: Array<{
452
+ id: string;
453
+ label: string;
454
+ kind: "source" | "category" | "tag";
455
+ count: number;
456
+ startAt: number;
457
+ endAt: number;
458
+ avgImportance: number;
459
+ avgConfidence: number;
460
+ topCategory: string;
461
+ }>;
462
+ windowCursor: {
463
+ startAt: number;
464
+ endAt: number;
465
+ centerAt: number;
466
+ pageSize: number;
467
+ hasBefore: boolean;
468
+ hasAfter: boolean;
469
+ } | null;
470
+ timeRange: {
471
+ startAt: number;
472
+ endAt: number;
473
+ } | null;
402
474
  stats: {
403
475
  formed: number;
404
476
  insights: number;
@@ -425,11 +497,121 @@ export interface GatewayRpcMethodMap {
425
497
  }>;
426
498
  };
427
499
  };
500
+ "memory.addManual": {
501
+ params: {
502
+ userId?: string;
503
+ text: string;
504
+ category?: string;
505
+ importance?: number;
506
+ source?: string;
507
+ tags?: string[];
508
+ attachments?: Array<{
509
+ type: "image" | "audio" | "video" | "file" | string;
510
+ filename: string;
511
+ mimeType?: string;
512
+ size?: number;
513
+ text?: string;
514
+ url?: string;
515
+ path?: string;
516
+ }>;
517
+ autoExtract?: boolean;
518
+ };
519
+ result: {
520
+ ok: boolean;
521
+ memoriesAdded: number;
522
+ };
523
+ };
524
+ "memory.ingest": {
525
+ params: {
526
+ userId?: string;
527
+ text?: string;
528
+ category?: string;
529
+ importance?: number;
530
+ source?: string;
531
+ tags?: string[];
532
+ autoExtract?: boolean;
533
+ attachments?: Array<{
534
+ type: "image" | "audio" | "video" | "file" | string;
535
+ filename: string;
536
+ mimeType?: string;
537
+ size?: number;
538
+ text?: string;
539
+ url?: string;
540
+ path?: string;
541
+ }>;
542
+ };
543
+ result: {
544
+ ok: boolean;
545
+ extractor: "llm" | "deterministic";
546
+ candidates: Array<{
547
+ id: string;
548
+ text: string;
549
+ category: string;
550
+ importance: number;
551
+ confidence: number;
552
+ source: string;
553
+ eventDate?: string;
554
+ tags: string[];
555
+ relatedMemoryIds: string[];
556
+ evidence: Array<Record<string, unknown>>;
557
+ requiresConfirmation: boolean;
558
+ reason?: string;
559
+ }>;
560
+ relatedMemories: Array<{
561
+ id: string;
562
+ text: string;
563
+ score: number;
564
+ category?: string;
565
+ }>;
566
+ };
567
+ };
568
+ "memory.commit": {
569
+ params: {
570
+ userId?: string;
571
+ candidates: Array<{
572
+ id?: string;
573
+ text: string;
574
+ category?: string;
575
+ importance?: number;
576
+ confidence?: number;
577
+ source?: string;
578
+ eventDate?: string;
579
+ tags?: string[];
580
+ relatedMemoryIds?: string[];
581
+ }>;
582
+ };
583
+ result: {
584
+ ok: boolean;
585
+ memoriesAdded: number;
586
+ };
587
+ };
588
+ "memory.update": {
589
+ params: {
590
+ userId?: string;
591
+ id: string;
592
+ text?: string;
593
+ category?: string;
594
+ importance?: number;
595
+ source?: string;
596
+ eventDate?: string;
597
+ tags?: string[];
598
+ };
599
+ result: {
600
+ ok: boolean;
601
+ updated: number;
602
+ };
603
+ };
428
604
  }
429
605
  /**
430
606
  * Type-safe Agent RPC caller.
431
607
  * Gateway passes this around instead of `(string, Record<string, unknown>) => Promise<unknown>`.
432
608
  */
433
- export type AgentCall = <M extends keyof GatewayRpcMethodMap>(method: M, params: GatewayRpcMethodMap[M]["params"]) => Promise<GatewayRpcMethodMap[M]["result"]>;
609
+ export interface AgentCallOptions {
610
+ timeoutMs?: number;
611
+ requestId?: string;
612
+ idempotencyKey?: string;
613
+ traceId?: string;
614
+ }
615
+ export type AgentCall = <M extends keyof GatewayRpcMethodMap>(method: M, params: GatewayRpcMethodMap[M]["params"], options?: AgentCallOptions) => Promise<GatewayRpcMethodMap[M]["result"]>;
434
616
  /** All gateway-facing RPC method names (runtime array). */
435
617
  export declare const GATEWAY_RPC_METHODS: (keyof GatewayRpcMethodMap)[];
@@ -1,5 +1,6 @@
1
- export { AGENT_RPC_APPROVAL_METHODS, AGENT_RPC_ERROR_CODES, AGENT_RPC_PROTOCOL_VERSION, isAgentRpcNotification, isAgentRpcRequest, isAgentRpcResponse, parseAgentRpcMessage, type AgentHelloParams, type AgentHelloResult, type AgentRpcError, type AgentRpcErrorCode, type AgentRpcMessage, type AgentRpcNotification, type AgentRpcRequest, type AgentRpcResponse, type ToolApprovalRequestParams, type ToolApprovalResponseParams, } from "./agent-rpc.js";
2
- export { GATEWAY_RPC_METHODS, type AgentCall, type GatewayRpcMethodMap, type ProjectInfo as RpcProjectInfo, type ProjectStatus as RpcProjectStatus, type ProjectType as RpcProjectType, } from "./gateway-rpc.js";
1
+ export { AGENT_RPC_APPROVAL_METHODS, AGENT_RPC_ERROR_CODES, AGENT_RPC_PROTOCOL_VERSION, isAgentRpcNotification, isAgentRpcRequest, isAgentRpcResponse, parseAgentRpcMessage, type AgentHelloParams, type AgentHelloResult, type AgentRpcError, type AgentRpcErrorCode, type AgentRpcMeta, type AgentRpcChannel, type AgentRpcMessage, type AgentRpcNotification, type AgentRpcRequest, type AgentRpcResponse, type ToolApprovalRequestParams, type ToolApprovalResponseParams, } from "./agent-rpc.js";
2
+ export { GatewayRpcContract, buildAgentRpcMeta, classifyGatewayRpcMethod, requireGatewayRpcMeta, requiresIdempotencyKey, type GatewayRpcClassification, type GatewayRpcMetrics, type GatewayRpcMutability, } from "./gateway-contract.js";
3
+ export { GATEWAY_RPC_METHODS, type AgentCall, type AgentCallOptions, type GatewayRpcMethodMap, type ProjectInfo as RpcProjectInfo, type ProjectStatus as RpcProjectStatus, type ProjectType as RpcProjectType, } from "./gateway-rpc.js";
3
4
  export { type ChatMessage, type ChatMessageRole, type ThinkingBlock, type ToolCallMessage, type ToolDefinition, } from "./chat-types.js";
4
5
  export { type AgentCapabilities, type AgentCategory, type AgentConfig, type AgentDescriptor, type AgentProtocol, type AgentRpcMethodMap, type AgentStatus, type CustomAgentDef, type ProductInstanceDef, type ProductPhase, type ProductStatus, type ProductSummary, type ProductTaskDef, type ProductTaskStatus, type SoloAgentResult, type SoloAgentState, type SoloState, type SoloStatus, } from "./agent-methods.js";
5
6
  export { AGENT_TEAM_WS_EVENT_NAMES, AGENT_WS_EVENT_NAMES, ALL_AGENT_WS_EVENT_NAMES, type AgentTeamWsEventName, type AgentWsEventName, type AllAgentWsEventName, } from "./agent-events.js";
@@ -61,7 +61,7 @@ export interface MemorySearchOptions {
61
61
  }
62
62
  export interface MemoryIngestOptions {
63
63
  llmConfig?: MemoryLlmConfig;
64
- source?: MemoryObservationSource;
64
+ source?: string;
65
65
  sessionId?: string;
66
66
  }
67
67
  export interface MemoryProvider {
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { DreamTaskState, DreamTurn } from "../../orchestration/subagent/task-types.js";
14
14
  import type { ToolDefinition, ToolInvoker, AgentLogger, HookRegistry } from "../../agent/types.js";
15
- import type { LLMTransport } from "../../provider-core/index.js";
15
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
16
16
  export interface DreamTriggerConfig {
17
17
  /** Minimum hours since last consolidation. Default: 24. */
18
18
  minHours: number;
@@ -18,7 +18,7 @@
18
18
  * Reference: claude-code src/utils/forkedAgent.ts
19
19
  */
20
20
  import type { AgentLogger, ChatMessage, ToolDefinition, ToolInvoker, TokenUsage, TurnEvent, HookRegistry } from "../../agent/types.js";
21
- import type { LLMTransport } from "../../provider-core/index.js";
21
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
22
22
  import type { AgentProgress } from "./progress-tracker.js";
23
23
  /**
24
24
  * Tool permission check function — CC canUseTool parity.
@@ -1,7 +1,7 @@
1
1
  import { ContextEngineRegistry, type CompressibleMessage, type CompressionResult, type CompressionStrategy, type AsyncCompressionStrategy, type SummarizeFn } from "../../orchestration/index.js";
2
2
  import type { HookRegistry } from "./hook-registry.js";
3
3
  import type { RuntimeLogger } from "./hook-registry.js";
4
- import type { LLMTransport } from "../../provider-core/index.js";
4
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
5
5
  /** Rough token estimate: ~4 chars per token for mixed CJK/English. */
6
6
  export declare function estimateTokens(msg: CompressibleMessage): number;
7
7
  /** Estimate total tokens for a message array. */
@@ -107,7 +107,7 @@ export declare function deleteSession(sessionId: string, projectRoot: string): P
107
107
  */
108
108
  export declare function pruneOldSessions(projectRoot: string): Promise<number>;
109
109
  export interface TaskSummaryDeps {
110
- transport: import("../../provider-core/index.js").LLMTransport;
110
+ transport: import("@xiaozhiclaw/provider-core").LLMTransport;
111
111
  apiKey: string;
112
112
  model: string;
113
113
  }
@@ -2,10 +2,7 @@
2
2
  * Local Embedding — Pluggable embedding interface for local memory.
3
3
  *
4
4
  * Provides a unified interface for text → vector embedding.
5
- * Strategies:
6
- * 1. "api" — calls an external embedding API (OpenAI-compatible)
7
- * 2. "onnx" — @xenova/transformers for fully offline embedding
8
- * 3. "none" — no embeddings, FTS-only search (zero-dep fallback)
5
+ * If no API config is provided, memory search falls back to FTS-only.
9
6
  */
10
7
  export interface EmbeddingProvider {
11
8
  readonly dimensions: number;
@@ -38,29 +35,6 @@ export declare class NullEmbeddingProvider implements EmbeddingProvider {
38
35
  embed(_text: string): Promise<Float32Array>;
39
36
  embedBatch(_texts: string[]): Promise<Float32Array[]>;
40
37
  }
41
- /**
42
- * Wraps a primary EmbeddingProvider with automatic fallback to a local provider.
43
- * When the primary fails (timeout, network error, 5xx), transparently retries with local.
44
- *
45
- * IMPORTANT: primary and fallback MUST have the same dimensions.
46
- * If they differ, vectors in the same index will be incomparable.
47
- * Use this only when both produce the same dimensionality (e.g. hub TEI bge-m3 1024d
48
- * + local ONNX bge-m3-small 1024d).
49
- */
50
- export declare class FallbackEmbeddingProvider implements EmbeddingProvider {
51
- readonly dimensions: number;
52
- readonly model: string;
53
- private primary;
54
- private fallback;
55
- private onFallback?;
56
- constructor(opts: {
57
- primary: EmbeddingProvider;
58
- fallback: EmbeddingProvider;
59
- onFallback?: (error: Error) => void;
60
- });
61
- embed(text: string): Promise<Float32Array>;
62
- embedBatch(texts: string[]): Promise<Float32Array[]>;
63
- }
64
38
  export declare class ApiEmbeddingProvider implements EmbeddingProvider {
65
39
  readonly dimensions: number;
66
40
  readonly model: string;
@@ -75,89 +49,19 @@ export declare class ApiEmbeddingProvider implements EmbeddingProvider {
75
49
  private parseResponse;
76
50
  }
77
51
  export interface LocalEmbeddingConfig {
78
- strategy: "api" | "onnx" | "none";
79
52
  api?: EmbeddingApiConfig;
80
- onnx?: OnnxEmbeddingConfig;
81
- /**
82
- * When strategy=api, if the API fails (timeout/error), fallback to this.
83
- * - "onnx": use local ONNX model (download on first use, ~23MB)
84
- * - "none": give up embedding (FTS-only)
85
- * Requires same dimensions for vector compatibility. Default ONNX model
86
- * (bge-small-zh-v1.5, 512d) differs from bge-m3 (1024d).
87
- * Accept dimension mismatch for degraded recall in fallback mode.
88
- */
89
- fallbackStrategy?: "onnx" | "none";
90
- fallbackOnnx?: OnnxEmbeddingConfig;
91
- }
92
- export interface OnnxEmbeddingConfig {
93
- /** Model ID for @xenova/transformers (default: "Xenova/bge-small-zh-v1.5") */
94
- modelId?: string;
95
- /** Expected dimensions (default: 512 for bge-small-zh-v1.5) */
96
- dimensions?: number;
97
- /** Max sequence length before truncation (default: 256) */
98
- maxLength?: number;
99
- /** Override local model path (for testing). */
100
- localModelPath?: string;
101
53
  }
102
- /**
103
- * Offline embedding provider using ONNX Runtime via @xenova/transformers.
104
- *
105
- * Model is lazily downloaded on first use (~24MB for bge-small-zh-v1.5 quantized).
106
- * Subsequent loads are instant from local cache (~/.qlogicagent/models/).
107
- *
108
- * For China network: set ONNX_MODEL_MIRROR to OSS URL or HF_MIRROR=https://hf-mirror.com
109
- */
110
- export declare class OnnxEmbeddingProvider implements EmbeddingProvider {
111
- readonly dimensions: number;
112
- readonly model: string;
113
- private maxLength;
114
- private localModelPath;
115
- private pipeline;
116
- private loading;
117
- constructor(config?: OnnxEmbeddingConfig);
118
- private getPipeline;
119
- embed(text: string): Promise<Float32Array>;
120
- embedBatch(texts: string[]): Promise<Float32Array[]>;
121
- /**
122
- * Pre-download and load the ONNX model without blocking.
123
- * Call this at process startup for instant readiness on first real embed().
124
- */
125
- warmup(): Promise<void>;
126
- }
127
- export interface WarmupResult {
128
- onnxAvailable: boolean;
129
- modelCached: boolean;
130
- modelDownloaded: boolean;
131
- dimensions: number;
132
- error?: string;
133
- }
134
- /**
135
- * Run at process startup to verify environment and pre-download ONNX model.
136
- *
137
- * - Checks if @xenova/transformers is installed
138
- * - Checks if model already in local cache
139
- * - If not cached, downloads from OSS CDN in background
140
- * - Returns status for diagnostics logging
141
- *
142
- * Fire-and-forget: never throws, never blocks critical path.
143
- */
144
- export declare function warmupEmbeddingModel(config?: OnnxEmbeddingConfig): Promise<WarmupResult>;
145
54
  /**
146
55
  * Create an embedding provider based on configuration.
147
56
  *
148
57
  * Resolution order:
149
- * 1. Explicit config (api/onnx/none)
150
- * 2. Auto-detect: @xenova/transformers availableuse ONNX (lazy download)
151
- * 3. Fallback to NullEmbeddingProvider (FTS-only)
152
- *
153
- * When config.fallbackStrategy is set and strategy=api, wraps primary in
154
- * FallbackEmbeddingProvider for automatic local retry on API failure.
58
+ * 1. API config → ApiEmbeddingProvider
59
+ * 2. No API configNullEmbeddingProvider (FTS-only)
155
60
  */
156
61
  export declare function createEmbeddingProvider(config?: LocalEmbeddingConfig): EmbeddingProvider;
157
62
  /**
158
63
  * Known provider → format mapping.
159
- * Used by auto-cascade to build the correct EmbeddingApiConfig
160
- * when the user's LLM provider also has an embedding API.
64
+ * Used only for the explicit ModelRegistry embedding binding.
161
65
  */
162
66
  export declare const PROVIDER_EMBEDDING_REGISTRY: Record<string, {
163
67
  format: "openai" | "minimax" | "volcengine";
@@ -9,7 +9,7 @@
9
9
  * - Without embedding: FTS-only search (still useful for exact/keyword matches)
10
10
  */
11
11
  import type { MemoryProvider, MemorySearchResult, MemorySearchOptions, MemoryIngestMessage, MemoryIngestOptions } from "../../protocol/wire/index.js";
12
- import type { SqliteDatabase } from "./local-store.js";
12
+ import type { MemoryUpdateInput, SqliteDatabase } from "./local-store.js";
13
13
  import { type LocalEmbeddingConfig } from "./local-embedding.js";
14
14
  /** A pre-extracted memory item ready to be stored (no LLM needed). */
15
15
  export interface ExtractedMemoryItem {
@@ -38,6 +38,9 @@ export declare class LocalMemoryProvider implements MemoryProvider {
38
38
  private dbPath;
39
39
  constructor(config: LocalMemoryProviderConfig);
40
40
  private resolveUserId;
41
+ private buildEmbedding;
42
+ private findExistingDuplicate;
43
+ private insertDeduped;
41
44
  search(query: string, userId: string, options?: MemorySearchOptions): Promise<MemorySearchResult[]>;
42
45
  ingest(messages: MemoryIngestMessage[], userId: string, options?: MemoryIngestOptions): Promise<void>;
43
46
  addText(text: string, userId: string, options?: MemoryIngestOptions & {
@@ -47,6 +50,7 @@ export declare class LocalMemoryProvider implements MemoryProvider {
47
50
  memoriesAdded: number;
48
51
  }>;
49
52
  remove(memoryId: string): Promise<boolean>;
53
+ update(memoryId: string, input: MemoryUpdateInput): Promise<boolean>;
50
54
  /**
51
55
  * Ingest pre-extracted memory items (no LLM needed).
52
56
  * Compatible with qmemory-adapter's ingestExtracted interface.
@@ -129,6 +133,19 @@ export declare class LocalMemoryProvider implements MemoryProvider {
129
133
  /**
130
134
  * Find memories by event date (±tolerance). For temporal context retrieval.
131
135
  */
136
+ /**
137
+ * Return the final atlas payload: a bounded interactive record window plus
138
+ * whole-history buckets/clusters for large timelines.
139
+ */
140
+ getAtlas(userId: string, options?: {
141
+ pageSize?: number;
142
+ windowStartAt?: number;
143
+ windowEndAt?: number;
144
+ windowCenterAt?: number;
145
+ bucketCount?: number;
146
+ clusterLimit?: number;
147
+ activeOnly?: boolean;
148
+ }): import("./local-store.js").MemoryAtlasResult;
132
149
  findByEventDate(userId: string, targetDate: string, toleranceDays?: number): import("./local-store.js").MemorySearchHit[];
133
150
  /**
134
151
  * Find related memories (event continuity detection).
@@ -200,8 +217,4 @@ export declare class LocalMemoryProvider implements MemoryProvider {
200
217
  */
201
218
  close(): void;
202
219
  }
203
- /**
204
- * Create a local memory provider (convenience factory).
205
- * Caller must provide the createDatabase factory to avoid hard dependency on better-sqlite3.
206
- */
207
220
  export declare function createLocalMemoryProvider(config: LocalMemoryProviderConfig): LocalMemoryProvider;
@@ -42,6 +42,15 @@ export interface MemoryInsertInput {
42
42
  tags?: string[];
43
43
  embedding?: Float32Array;
44
44
  }
45
+ export interface MemoryUpdateInput {
46
+ text?: string;
47
+ category?: string;
48
+ importance?: number;
49
+ source?: string;
50
+ eventDate?: string;
51
+ tags?: string[];
52
+ embedding?: Float32Array | null;
53
+ }
45
54
  export interface MemorySearchHit {
46
55
  id: string;
47
56
  text: string;
@@ -50,6 +59,45 @@ export interface MemorySearchHit {
50
59
  importance: number;
51
60
  metadata: Record<string, unknown>;
52
61
  }
62
+ export interface MemoryAtlasBucket {
63
+ id: string;
64
+ startAt: number;
65
+ endAt: number;
66
+ count: number;
67
+ avgImportance: number;
68
+ avgConfidence: number;
69
+ topCategory: string;
70
+ }
71
+ export interface MemoryAtlasCluster {
72
+ id: string;
73
+ label: string;
74
+ kind: "source" | "category" | "tag";
75
+ count: number;
76
+ startAt: number;
77
+ endAt: number;
78
+ avgImportance: number;
79
+ avgConfidence: number;
80
+ topCategory: string;
81
+ }
82
+ export interface MemoryAtlasWindowCursor {
83
+ startAt: number;
84
+ endAt: number;
85
+ centerAt: number;
86
+ pageSize: number;
87
+ hasBefore: boolean;
88
+ hasAfter: boolean;
89
+ }
90
+ export interface MemoryAtlasResult {
91
+ totalCount: number;
92
+ records: MemoryRecord[];
93
+ buckets: MemoryAtlasBucket[];
94
+ clusters: MemoryAtlasCluster[];
95
+ windowCursor: MemoryAtlasWindowCursor | null;
96
+ timeRange: {
97
+ startAt: number;
98
+ endAt: number;
99
+ } | null;
100
+ }
53
101
  export interface SqliteDatabase {
54
102
  exec(sql: string): void;
55
103
  prepare(sql: string): SqliteStatement;
@@ -89,6 +137,24 @@ export declare class LocalMemoryStore {
89
137
  * Get all memories for a user (paginated).
90
138
  */
91
139
  listByUser(userId: string, page?: number, pageSize?: number, activeOnly?: boolean): MemoryRecord[];
140
+ /**
141
+ * Return a windowed atlas payload for large-history visualization.
142
+ *
143
+ * `records` are only the interactive window. `buckets` and `clusters` summarize
144
+ * the whole history so the UI can render distant history as star dust /
145
+ * aggregate galaxies without loading every memory as an interactive object.
146
+ */
147
+ getAtlas(userId: string, options?: {
148
+ pageSize?: number;
149
+ windowStartAt?: number;
150
+ windowEndAt?: number;
151
+ windowCenterAt?: number;
152
+ bucketCount?: number;
153
+ clusterLimit?: number;
154
+ activeOnly?: boolean;
155
+ }): MemoryAtlasResult;
156
+ private getAtlasBuckets;
157
+ private getAtlasClusters;
92
158
  /**
93
159
  * Get a single memory by ID.
94
160
  */
@@ -97,6 +163,10 @@ export declare class LocalMemoryStore {
97
163
  * Update memory text and bump updatedAt.
98
164
  */
99
165
  updateText(id: string, text: string, embedding?: Float32Array): boolean;
166
+ /**
167
+ * Update editable memory fields and bump updatedAt.
168
+ */
169
+ update(id: string, input: MemoryUpdateInput): boolean;
100
170
  /**
101
171
  * Delete a memory by ID.
102
172
  */
@@ -29,19 +29,13 @@ export declare function createMemoryProvider(config: MemoryProviderFactoryConfig
29
29
  * Used by stdio-server to auto-configure memory.
30
30
  *
31
31
  * Environment variables:
32
- * QMEMORY_EMBEDDING_STRATEGY"auto" | "api" | "onnx" | "none" (default: "none")
33
- * - "auto": detect LLM provider → use their embedding API directly
34
- * QMEMORY_EMBEDDING_BASE_URL — required when strategy=api
35
- * QMEMORY_EMBEDDING_API_KEY — required when strategy=api
36
- * QMEMORY_EMBEDDING_MODEL — model name (default: "text-embedding-3-small")
37
- * QMEMORY_ONNX_MODEL_ID — model for ONNX (default: "Xenova/bge-small-zh-v1.5")
32
+ * QMEMORY_EMBEDDING_TIMEOUT_MSembedding request timeout (default: 1500)
38
33
  * QMEMORY_USER_PREFIX — user ID prefix for multi-tenant
39
34
  *
40
- * Auto-cascade (strategy=auto):
41
- * Layer 0: LLM provider's embedding API (detected from LLM_PROVIDER + *_API_KEY)
42
- * Layer 1: Self-hosted TEI bge-m3 (QMEMORY_TEI_URL / QMEMORY_TEI_FALLBACK_URL)
43
- * Layer 2: ONNX local (@xenova/transformers)
44
- * Layer 3: FTS5 pure text (NullEmbeddingProvider)
35
+ * Fixed embedding resolution:
36
+ * Layer 0: Explicit ModelRegistry "embedding" binding
37
+ * Layer 1: LLM Router default embedding endpoint (BAAI/bge-m3)
38
+ * Layer 2: FTS5 pure text (NullEmbeddingProvider)
45
39
  *
46
40
  * @param projectRoot — Project root for local storage path
47
41
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qlogicagent",
3
- "version": "2.10.12",
3
+ "version": "2.10.14",
4
4
  "description": "XiaozhiClaw Agent CLI — subprocess architecture (JSON-RPC over stdio)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,25 +56,23 @@
56
56
  "test": "vitest run",
57
57
  "test:watch": "vitest",
58
58
  "lint": "oxlint .",
59
+ "check:provider-core-boundary": "node scripts/check-provider-core-boundary.mjs",
59
60
  "release": "node scripts/release.mjs"
60
61
  },
61
62
  "engines": {
62
63
  "node": ">=22.0.0"
63
64
  },
64
65
  "dependencies": {
66
+ "@xiaozhiclaw/provider-core": "^0.1.0",
65
67
  "better-sqlite3": "^12.10.0",
66
68
  "dotenv": "^17.3.1",
67
69
  "nanoid": "^5.1.5",
68
70
  "pino": "^9.6.0",
69
71
  "pino-pretty": "^13.0.0"
70
72
  },
71
- "optionalDependencies": {
72
- "@xenova/transformers": "^2.17.2"
73
- },
74
73
  "devDependencies": {
75
74
  "@types/better-sqlite3": "^7.6.13",
76
75
  "@types/node": "^22.15.0",
77
- "@qlogic/provider-core": "workspace:*",
78
76
  "esbuild": "^0.28.0",
79
77
  "tsx": "^4.19.0",
80
78
  "typescript": "^5.9.0",
@@ -1,44 +0,0 @@
1
- /**
2
- * Aliyun OSS File Upload Adapter 鈥?direct upload to Alibaba Cloud OSS.
3
- *
4
- * Uploads files directly to OSS bucket using V1 signature (HMAC-SHA1).
5
- * No external dependencies 鈥?uses Node.js crypto + fetch.
6
- *
7
- * This is the **universal fallback adapter** for providers without a native
8
- * File Upload API (e.g. Anthropic). Ensures ALL file handling goes through
9
- * upload 鈥?never base64 inline.
10
- *
11
- * Environment variables:
12
- * OSS_ACCESS_KEY_ID 鈥?Aliyun AccessKey ID
13
- * OSS_ACCESS_KEY_SECRET 鈥?Aliyun AccessKey Secret
14
- * OSS_BUCKET 鈥?Bucket name (default: "qlogicagent")
15
- * OSS_REGION 鈥?Region (default: "cn-beijing")
16
- * OSS_ENDPOINT 鈥?Custom endpoint (default: derived from region)
17
- */
18
- import type { FileUploadAdapter, FileUploadResult } from "../file-upload-service.js";
19
- export interface AliyunOSSFileUploadConfig {
20
- /** Aliyun AccessKey ID. Required. */
21
- accessKeyId: string;
22
- /** Aliyun AccessKey Secret. Required. */
23
- accessKeySecret: string;
24
- /** OSS Bucket name. Default: "qlogicagent". */
25
- bucket?: string;
26
- /** OSS Region. Default: "cn-beijing". */
27
- region?: string;
28
- /** Custom OSS endpoint. Default: "{bucket}.oss-{region}.aliyuncs.com". */
29
- endpoint?: string;
30
- /** Upload path prefix. Default: "media". */
31
- pathPrefix?: string;
32
- /** Timeout ms. Default: 120_000. */
33
- timeoutMs?: number;
34
- }
35
- /**
36
- * Create an AliyunOSSFileUploadAdapter from environment variables.
37
- * Returns undefined if required env vars (OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) are missing.
38
- */
39
- export declare function createAliyunOSSAdapterFromEnv(): AliyunOSSFileUploadAdapter | undefined;
40
- export declare class AliyunOSSFileUploadAdapter implements FileUploadAdapter {
41
- private readonly config;
42
- constructor(config: AliyunOSSFileUploadConfig);
43
- uploadFile(buffer: Buffer, filename: string, mimeType: string, _apiKey: string, signal?: AbortSignal): Promise<FileUploadResult>;
44
- }