@geminilight/mindos 1.1.59 → 1.1.61

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 (155) hide show
  1. package/README.md +62 -64
  2. package/README_zh.md +60 -62
  3. package/dist/agent/index.d.ts +2 -0
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js +2 -0
  6. package/dist/agent/index.js.map +1 -1
  7. package/dist/agent/ledger/run-ledger-types.d.ts +26 -2
  8. package/dist/agent/ledger/run-ledger-types.d.ts.map +1 -1
  9. package/dist/agent/ledger/run-ledger.d.ts.map +1 -1
  10. package/dist/agent/ledger/run-ledger.js +30 -1
  11. package/dist/agent/ledger/run-ledger.js.map +1 -1
  12. package/dist/agent/ledger/run-timeline-events.d.ts.map +1 -1
  13. package/dist/agent/ledger/run-timeline-events.js +16 -8
  14. package/dist/agent/ledger/run-timeline-events.js.map +1 -1
  15. package/dist/agent/mode-run-events.d.ts +15 -0
  16. package/dist/agent/mode-run-events.d.ts.map +1 -0
  17. package/dist/agent/mode-run-events.js +56 -0
  18. package/dist/agent/mode-run-events.js.map +1 -0
  19. package/dist/agent/mode.d.ts +77 -0
  20. package/dist/agent/mode.d.ts.map +1 -0
  21. package/dist/agent/mode.js +271 -0
  22. package/dist/agent/mode.js.map +1 -0
  23. package/dist/agent/runtime/adapters/index.d.ts +1 -0
  24. package/dist/agent/runtime/adapters/index.d.ts.map +1 -1
  25. package/dist/agent/runtime/adapters/index.js +1 -0
  26. package/dist/agent/runtime/adapters/index.js.map +1 -1
  27. package/dist/agent/runtime/adapters/session-transcripts/adapters/claude.d.ts +4 -0
  28. package/dist/agent/runtime/adapters/session-transcripts/adapters/claude.d.ts.map +1 -0
  29. package/dist/agent/runtime/adapters/session-transcripts/adapters/claude.js +83 -0
  30. package/dist/agent/runtime/adapters/session-transcripts/adapters/claude.js.map +1 -0
  31. package/dist/agent/runtime/adapters/session-transcripts/adapters/codebuddy-code.d.ts +4 -0
  32. package/dist/agent/runtime/adapters/session-transcripts/adapters/codebuddy-code.d.ts.map +1 -0
  33. package/dist/agent/runtime/adapters/session-transcripts/adapters/codebuddy-code.js +74 -0
  34. package/dist/agent/runtime/adapters/session-transcripts/adapters/codebuddy-code.js.map +1 -0
  35. package/dist/agent/runtime/adapters/session-transcripts/adapters/gemini.d.ts +4 -0
  36. package/dist/agent/runtime/adapters/session-transcripts/adapters/gemini.d.ts.map +1 -0
  37. package/dist/agent/runtime/adapters/session-transcripts/adapters/gemini.js +73 -0
  38. package/dist/agent/runtime/adapters/session-transcripts/adapters/gemini.js.map +1 -0
  39. package/dist/agent/runtime/adapters/session-transcripts/adapters/kimi.d.ts +4 -0
  40. package/dist/agent/runtime/adapters/session-transcripts/adapters/kimi.d.ts.map +1 -0
  41. package/dist/agent/runtime/adapters/session-transcripts/adapters/kimi.js +61 -0
  42. package/dist/agent/runtime/adapters/session-transcripts/adapters/kimi.js.map +1 -0
  43. package/dist/agent/runtime/adapters/session-transcripts/adapters/openclaw.d.ts +4 -0
  44. package/dist/agent/runtime/adapters/session-transcripts/adapters/openclaw.d.ts.map +1 -0
  45. package/dist/agent/runtime/adapters/session-transcripts/adapters/openclaw.js +156 -0
  46. package/dist/agent/runtime/adapters/session-transcripts/adapters/openclaw.js.map +1 -0
  47. package/dist/agent/runtime/adapters/session-transcripts/adapters/opencode.d.ts +4 -0
  48. package/dist/agent/runtime/adapters/session-transcripts/adapters/opencode.d.ts.map +1 -0
  49. package/dist/agent/runtime/adapters/session-transcripts/adapters/opencode.js +79 -0
  50. package/dist/agent/runtime/adapters/session-transcripts/adapters/opencode.js.map +1 -0
  51. package/dist/agent/runtime/adapters/session-transcripts/adapters/qwen-code.d.ts +4 -0
  52. package/dist/agent/runtime/adapters/session-transcripts/adapters/qwen-code.d.ts.map +1 -0
  53. package/dist/agent/runtime/adapters/session-transcripts/adapters/qwen-code.js +86 -0
  54. package/dist/agent/runtime/adapters/session-transcripts/adapters/qwen-code.js.map +1 -0
  55. package/dist/agent/runtime/adapters/session-transcripts/adapters/unverified.d.ts +4 -0
  56. package/dist/agent/runtime/adapters/session-transcripts/adapters/unverified.d.ts.map +1 -0
  57. package/dist/agent/runtime/adapters/session-transcripts/adapters/unverified.js +22 -0
  58. package/dist/agent/runtime/adapters/session-transcripts/adapters/unverified.js.map +1 -0
  59. package/dist/agent/runtime/adapters/session-transcripts/file-system.d.ts +24 -0
  60. package/dist/agent/runtime/adapters/session-transcripts/file-system.d.ts.map +1 -0
  61. package/dist/agent/runtime/adapters/session-transcripts/file-system.js +127 -0
  62. package/dist/agent/runtime/adapters/session-transcripts/file-system.js.map +1 -0
  63. package/dist/agent/runtime/adapters/session-transcripts/index.d.ts +4 -0
  64. package/dist/agent/runtime/adapters/session-transcripts/index.d.ts.map +1 -0
  65. package/dist/agent/runtime/adapters/session-transcripts/index.js +3 -0
  66. package/dist/agent/runtime/adapters/session-transcripts/index.js.map +1 -0
  67. package/dist/agent/runtime/adapters/session-transcripts/normalizer.d.ts +45 -0
  68. package/dist/agent/runtime/adapters/session-transcripts/normalizer.d.ts.map +1 -0
  69. package/dist/agent/runtime/adapters/session-transcripts/normalizer.js +331 -0
  70. package/dist/agent/runtime/adapters/session-transcripts/normalizer.js.map +1 -0
  71. package/dist/agent/runtime/adapters/session-transcripts/registry.d.ts +8 -0
  72. package/dist/agent/runtime/adapters/session-transcripts/registry.d.ts.map +1 -0
  73. package/dist/agent/runtime/adapters/session-transcripts/registry.js +73 -0
  74. package/dist/agent/runtime/adapters/session-transcripts/registry.js.map +1 -0
  75. package/dist/agent/runtime/adapters/session-transcripts/types.d.ts +51 -0
  76. package/dist/agent/runtime/adapters/session-transcripts/types.d.ts.map +1 -0
  77. package/dist/agent/runtime/adapters/session-transcripts/types.js +2 -0
  78. package/dist/agent/runtime/adapters/session-transcripts/types.js.map +1 -0
  79. package/dist/agent/runtime/capabilities.d.ts.map +1 -1
  80. package/dist/agent/runtime/capabilities.js +12 -0
  81. package/dist/agent/runtime/capabilities.js.map +1 -1
  82. package/dist/agent/runtime/codex-app-server.d.ts +24 -0
  83. package/dist/agent/runtime/codex-app-server.d.ts.map +1 -1
  84. package/dist/agent/runtime/codex-app-server.js +57 -0
  85. package/dist/agent/runtime/codex-app-server.js.map +1 -1
  86. package/dist/agent/runtime/registry.d.ts +6 -0
  87. package/dist/agent/runtime/registry.d.ts.map +1 -1
  88. package/dist/agent/runtime/registry.js.map +1 -1
  89. package/dist/agent/runtime/run.d.ts +3 -1
  90. package/dist/agent/runtime/run.d.ts.map +1 -1
  91. package/dist/agent/runtime/run.js +11 -3
  92. package/dist/agent/runtime/run.js.map +1 -1
  93. package/dist/agent/tool/kb-tools.d.ts.map +1 -1
  94. package/dist/agent/tool/kb-tools.js +66 -2
  95. package/dist/agent/tool/kb-tools.js.map +1 -1
  96. package/dist/capabilities.d.ts +1 -1
  97. package/dist/capabilities.d.ts.map +1 -1
  98. package/dist/capabilities.js +8 -0
  99. package/dist/capabilities.js.map +1 -1
  100. package/dist/client.d.ts +1 -1
  101. package/dist/client.d.ts.map +1 -1
  102. package/dist/intelligence/cognition/human-modeling.d.ts +84 -0
  103. package/dist/intelligence/cognition/human-modeling.d.ts.map +1 -0
  104. package/dist/intelligence/cognition/human-modeling.js +314 -0
  105. package/dist/intelligence/cognition/human-modeling.js.map +1 -0
  106. package/dist/intelligence/cognition/index.d.ts +2 -0
  107. package/dist/intelligence/cognition/index.d.ts.map +1 -0
  108. package/dist/intelligence/cognition/index.js +2 -0
  109. package/dist/intelligence/cognition/index.js.map +1 -0
  110. package/dist/intelligence/index.d.ts +2 -0
  111. package/dist/intelligence/index.d.ts.map +1 -0
  112. package/dist/intelligence/index.js +2 -0
  113. package/dist/intelligence/index.js.map +1 -0
  114. package/dist/intelligence.d.ts +14 -0
  115. package/dist/intelligence.d.ts.map +1 -0
  116. package/dist/intelligence.js +11 -0
  117. package/dist/intelligence.js.map +1 -0
  118. package/dist/knowledge/content-integrity.d.ts +15 -0
  119. package/dist/knowledge/content-integrity.d.ts.map +1 -0
  120. package/dist/knowledge/content-integrity.js +55 -0
  121. package/dist/knowledge/content-integrity.js.map +1 -0
  122. package/dist/protocols/mcp-server/index.cjs +32 -32
  123. package/dist/protocols/mcp-server/index.js +34 -17
  124. package/dist/protocols/mcp-server/index.js.map +1 -1
  125. package/dist/server/contract.d.ts.map +1 -1
  126. package/dist/server/contract.js +1 -0
  127. package/dist/server/contract.js.map +1 -1
  128. package/dist/server/handlers/agent-runtimes-codex.d.ts +5 -1
  129. package/dist/server/handlers/agent-runtimes-codex.d.ts.map +1 -1
  130. package/dist/server/handlers/agent-runtimes-codex.js +13 -0
  131. package/dist/server/handlers/agent-runtimes-codex.js.map +1 -1
  132. package/dist/server/handlers/agent-turn.d.ts +1 -1
  133. package/dist/server/handlers/agent-turn.d.ts.map +1 -1
  134. package/dist/server/handlers/agent-turn.js +1 -1
  135. package/dist/server/handlers/agent-turn.js.map +1 -1
  136. package/dist/server/handlers/file.d.ts.map +1 -1
  137. package/dist/server/handlers/file.js +70 -17
  138. package/dist/server/handlers/file.js.map +1 -1
  139. package/dist/server/handlers/mcp-install-skill.d.ts +25 -0
  140. package/dist/server/handlers/mcp-install-skill.d.ts.map +1 -1
  141. package/dist/server/handlers/mcp-install-skill.js +231 -9
  142. package/dist/server/handlers/mcp-install-skill.js.map +1 -1
  143. package/dist/server/http.d.ts.map +1 -1
  144. package/dist/server/http.js +9 -1
  145. package/dist/server/http.js.map +1 -1
  146. package/dist/server/index.d.ts +1 -1
  147. package/dist/server/index.d.ts.map +1 -1
  148. package/dist/server/index.js +1 -1
  149. package/dist/server/index.js.map +1 -1
  150. package/dist/server/provider-settings.js +4 -4
  151. package/dist/server/provider-settings.js.map +1 -1
  152. package/dist/server/route-ownership.d.ts.map +1 -1
  153. package/dist/server/route-ownership.js +3 -0
  154. package/dist/server/route-ownership.js.map +1 -1
  155. package/package.json +17 -9
@@ -0,0 +1,127 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readdir, readFile } from 'node:fs/promises';
3
+ import { basename, join, resolve } from 'node:path';
4
+ import { isRecord } from './normalizer.js';
5
+ export const MAX_JSONL_LINES = 20_000;
6
+ export const MAX_DISCOVERED_TRANSCRIPTS = 500;
7
+ export async function readJsonFile(path) {
8
+ try {
9
+ const parsed = JSON.parse(await readFile(path, 'utf8'));
10
+ return isRecord(parsed) ? parsed : null;
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ export async function readJsonl(path) {
17
+ try {
18
+ const text = await readFile(path, 'utf8');
19
+ const records = [];
20
+ for (const line of text.split(/\r?\n/).slice(0, MAX_JSONL_LINES)) {
21
+ const trimmed = line.trim();
22
+ if (!trimmed)
23
+ continue;
24
+ try {
25
+ const parsed = JSON.parse(trimmed);
26
+ if (isRecord(parsed))
27
+ records.push(parsed);
28
+ }
29
+ catch {
30
+ // Ignore malformed tail lines from in-progress CLI writes.
31
+ }
32
+ }
33
+ return records;
34
+ }
35
+ catch {
36
+ return [];
37
+ }
38
+ }
39
+ export function projectBaseFromCwd(cwd) {
40
+ if (!cwd?.trim())
41
+ return null;
42
+ const base = basename(resolve(cwd.trim()));
43
+ return base || null;
44
+ }
45
+ export function claudeProjectDirNameFromCwd(cwd) {
46
+ return resolve(cwd.trim()).replace(/[^A-Za-z0-9_-]/g, '-');
47
+ }
48
+ export function jsonlFileNameFromSessionId(sessionId) {
49
+ const trimmed = sessionId?.trim();
50
+ if (!trimmed)
51
+ return null;
52
+ if (trimmed === '.' || trimmed === '..' || trimmed.includes('/') || trimmed.includes('\\'))
53
+ return null;
54
+ return `${trimmed}.jsonl`;
55
+ }
56
+ export function sanitizedProjectDirNameFromCwd(cwd) {
57
+ return resolve(cwd.trim()).replace(/[^A-Za-z0-9_-]/g, '-');
58
+ }
59
+ export function sameResolvedPath(a, b) {
60
+ try {
61
+ return resolve(a.trim()) === resolve(b.trim());
62
+ }
63
+ catch {
64
+ return a.trim() === b.trim();
65
+ }
66
+ }
67
+ export function shouldSkipForRequestedCwd(input) {
68
+ const requested = input.requestedCwd?.trim();
69
+ if (!requested)
70
+ return false;
71
+ const transcriptCwd = input.transcriptCwd?.trim();
72
+ if (!transcriptCwd)
73
+ return !input.sessionId?.trim();
74
+ return !sameResolvedPath(transcriptCwd, requested);
75
+ }
76
+ export function pathInside(parent, child) {
77
+ const parentPath = resolve(parent);
78
+ const childPath = resolve(child);
79
+ return childPath === parentPath || childPath.startsWith(`${parentPath}/`);
80
+ }
81
+ export async function directJsonlFiles(dir, sessionId) {
82
+ if (!existsSync(dir))
83
+ return [];
84
+ if (sessionId?.trim()) {
85
+ const fileName = jsonlFileNameFromSessionId(sessionId);
86
+ if (!fileName)
87
+ return [];
88
+ const filePath = join(dir, fileName);
89
+ return existsSync(filePath) ? [filePath] : [];
90
+ }
91
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
92
+ return entries
93
+ .filter((entry) => entry.isFile() && entry.name.endsWith('.jsonl'))
94
+ .map((entry) => join(dir, entry.name));
95
+ }
96
+ export async function discoverJsonlFiles(input) {
97
+ if (!existsSync(input.root))
98
+ return [];
99
+ const result = [];
100
+ const wantedName = input.sessionId?.trim() ? jsonlFileNameFromSessionId(input.sessionId) : null;
101
+ if (input.sessionId?.trim() && !wantedName)
102
+ return [];
103
+ async function visit(dir, depth) {
104
+ if (result.length >= MAX_DISCOVERED_TRANSCRIPTS)
105
+ return;
106
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
107
+ for (const entry of entries) {
108
+ if (result.length >= MAX_DISCOVERED_TRANSCRIPTS)
109
+ return;
110
+ const path = join(dir, entry.name);
111
+ if (entry.isDirectory()) {
112
+ if (depth >= input.maxDepth || input.skipDir?.(entry.name))
113
+ continue;
114
+ await visit(path, depth + 1);
115
+ continue;
116
+ }
117
+ if (!entry.isFile() || !entry.name.endsWith('.jsonl'))
118
+ continue;
119
+ if (wantedName && entry.name !== wantedName)
120
+ continue;
121
+ result.push(path);
122
+ }
123
+ }
124
+ await visit(input.root, 0);
125
+ return result;
126
+ }
127
+ //# sourceMappingURL=file-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../../../../src/agent/runtime/adapters/session-transcripts/file-system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { ExternalRuntimeSessionListOptions, ExternalRuntimeSessionRecord, ImportedRuntimeSessionMessage, ImportedRuntimeSessionRole, RuntimeSessionTranscriptAdapter, RuntimeSessionTranscriptRuntimeIdentity, RuntimeSessionTranscriptRuntimeKind, RuntimeSessionTranscriptSource, RuntimeSessionTranscriptSupportStatus, RuntimeSessionTranscriptTarget, } from './types.js';
2
+ export { parseClaudeMessagesFromRecords, parseGeminiMessagesFromRecords, parseKimiWireMessages, parseOpenCodeTextRows, parseVisibleMessagesFromRecords, type OpenCodeTextRow, } from './normalizer.js';
3
+ export { getRuntimeSessionTranscriptAdapter, listRuntimeSessionTranscriptAdapters, listRuntimeSessionTranscripts, normalizeRuntimeSessionTranscriptId, resolveRuntimeSessionTranscriptTarget, RUNTIME_SESSION_TRANSCRIPT_ADAPTERS, } from './registry.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/agent/runtime/adapters/session-transcripts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,+BAA+B,EAC/B,uCAAuC,EACvC,mCAAmC,EACnC,8BAA8B,EAC9B,qCAAqC,EACrC,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kCAAkC,EAClC,oCAAoC,EACpC,6BAA6B,EAC7B,mCAAmC,EACnC,qCAAqC,EACrC,mCAAmC,GACpC,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseClaudeMessagesFromRecords, parseGeminiMessagesFromRecords, parseKimiWireMessages, parseOpenCodeTextRows, parseVisibleMessagesFromRecords, } from './normalizer.js';
2
+ export { getRuntimeSessionTranscriptAdapter, listRuntimeSessionTranscriptAdapters, listRuntimeSessionTranscripts, normalizeRuntimeSessionTranscriptId, resolveRuntimeSessionTranscriptTarget, RUNTIME_SESSION_TRANSCRIPT_ADAPTERS, } from './registry.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/agent/runtime/adapters/session-transcripts/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,GAEhC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kCAAkC,EAClC,oCAAoC,EACpC,6BAA6B,EAC7B,mCAAmC,EACnC,qCAAqC,EACrC,mCAAmC,GACpC,MAAM,eAAe,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { ExternalRuntimeSessionRecord, ImportedRuntimeSessionMessage, ImportedRuntimeSessionRole, MaybeRecord } from './types.js';
2
+ export declare const DEFAULT_RUNTIME_SESSION_TRANSCRIPT_LIMIT = 30;
3
+ export declare const MAX_RUNTIME_SESSION_TEXT_LENGTH = 80000;
4
+ export declare const VISIBLE_TEXT_PART_TYPES: Set<string>;
5
+ export type OpenCodeTextRow = {
6
+ session_id?: string;
7
+ message_id?: string;
8
+ message_time_created?: number;
9
+ message_data?: string;
10
+ part_time_created?: number;
11
+ part_data?: string;
12
+ };
13
+ export declare function isRecord(value: unknown): value is MaybeRecord;
14
+ export declare function safeLimit(value: number | undefined): number;
15
+ export declare function timestampMs(value: unknown): number | undefined;
16
+ export declare function timestampField(value: unknown): string | number | undefined;
17
+ export declare function truncateContent(value: string): string;
18
+ export declare function textFromContent(value: unknown): string;
19
+ export declare function textFromVisibleContent(value: unknown): string;
20
+ export declare function pushMessage(messages: ImportedRuntimeSessionMessage[], role: ImportedRuntimeSessionRole, content: string, timestamp?: number): void;
21
+ export declare function parseGeminiMessagesFromRecords(records: MaybeRecord[]): ImportedRuntimeSessionMessage[];
22
+ export declare function parseKimiWireMessages(records: MaybeRecord[]): ImportedRuntimeSessionMessage[];
23
+ export declare function parseOpenCodeTextRows(rows: OpenCodeTextRow[]): ImportedRuntimeSessionMessage[];
24
+ export declare function parseVisibleMessagesFromRecords(records: MaybeRecord[]): ImportedRuntimeSessionMessage[];
25
+ export declare function parseClaudeMessagesFromRecords(records: MaybeRecord[]): ImportedRuntimeSessionMessage[];
26
+ export declare function firstStringField(records: MaybeRecord[], key: string): string | undefined;
27
+ export declare function newestTimestampField(records: MaybeRecord[], key: string): string | number | undefined;
28
+ export declare function firstStringFromRecords(records: MaybeRecord[], keys: string[]): string | undefined;
29
+ export declare function firstTimestampFromRecords(records: MaybeRecord[], keys: string[]): string | number | undefined;
30
+ export declare function sessionHeaderRecord(records: MaybeRecord[]): MaybeRecord | undefined;
31
+ export declare function sessionIdFromRecords(records: MaybeRecord[], fallback: string): string;
32
+ export declare function firstUserMessage(messages: ImportedRuntimeSessionMessage[]): ImportedRuntimeSessionMessage | undefined;
33
+ export declare function lastUserMessage(messages: ImportedRuntimeSessionMessage[]): ImportedRuntimeSessionMessage | undefined;
34
+ export declare function toExternalRecord(input: {
35
+ id: string;
36
+ title?: string | null;
37
+ preview?: string;
38
+ cwd?: string;
39
+ createdAt?: string | number;
40
+ updatedAt?: string | number;
41
+ messages: ImportedRuntimeSessionMessage[];
42
+ transcriptSource: ExternalRuntimeSessionRecord['transcriptSource'];
43
+ }): ExternalRuntimeSessionRecord;
44
+ export declare function sortAndLimit(records: ExternalRuntimeSessionRecord[], limit?: number): ExternalRuntimeSessionRecord[];
45
+ //# sourceMappingURL=normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../../../../src/agent/runtime/adapters/session-transcripts/normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,331 @@
1
+ export const DEFAULT_RUNTIME_SESSION_TRANSCRIPT_LIMIT = 30;
2
+ export const MAX_RUNTIME_SESSION_TEXT_LENGTH = 80_000;
3
+ export const VISIBLE_TEXT_PART_TYPES = new Set(['text', 'output_text', 'markdown']);
4
+ export function isRecord(value) {
5
+ return !!value && typeof value === 'object' && !Array.isArray(value);
6
+ }
7
+ export function safeLimit(value) {
8
+ if (!Number.isFinite(value) || !value)
9
+ return DEFAULT_RUNTIME_SESSION_TRANSCRIPT_LIMIT;
10
+ return Math.max(1, Math.min(100, Math.floor(value)));
11
+ }
12
+ export function timestampMs(value) {
13
+ if (typeof value === 'number' && Number.isFinite(value))
14
+ return value < 10_000_000_000 ? value * 1000 : value;
15
+ if (typeof value === 'string') {
16
+ const parsed = Date.parse(value);
17
+ if (Number.isFinite(parsed))
18
+ return parsed;
19
+ }
20
+ return undefined;
21
+ }
22
+ export function timestampField(value) {
23
+ return typeof value === 'string' || typeof value === 'number' ? value : undefined;
24
+ }
25
+ export function truncateContent(value) {
26
+ return value.length > MAX_RUNTIME_SESSION_TEXT_LENGTH
27
+ ? `${value.slice(0, MAX_RUNTIME_SESSION_TEXT_LENGTH)}...`
28
+ : value;
29
+ }
30
+ function textFromPart(value) {
31
+ if (typeof value === 'string')
32
+ return [value];
33
+ if (!isRecord(value))
34
+ return [];
35
+ const text = value.text ?? value.content ?? value.value ?? value.markdown;
36
+ return typeof text === 'string' ? [text] : [];
37
+ }
38
+ export function textFromContent(value) {
39
+ if (typeof value === 'string')
40
+ return value.trim();
41
+ if (Array.isArray(value))
42
+ return value.flatMap(textFromPart).join('\n').trim();
43
+ if (isRecord(value))
44
+ return textFromPart(value).join('\n').trim();
45
+ return '';
46
+ }
47
+ function textFromVisiblePart(value) {
48
+ if (typeof value === 'string')
49
+ return [value];
50
+ if (!isRecord(value))
51
+ return [];
52
+ const partType = typeof value.type === 'string' ? value.type : undefined;
53
+ if (partType && !VISIBLE_TEXT_PART_TYPES.has(partType))
54
+ return [];
55
+ const directText = [value.text, value.value, value.markdown]
56
+ .filter((item) => typeof item === 'string' && item.trim().length > 0);
57
+ if (directText.length > 0)
58
+ return directText;
59
+ if (value.content !== undefined && value.content !== null) {
60
+ const nested = textFromVisibleContent(value.content);
61
+ return nested ? [nested] : [];
62
+ }
63
+ return [];
64
+ }
65
+ export function textFromVisibleContent(value) {
66
+ if (typeof value === 'string')
67
+ return value.trim();
68
+ if (Array.isArray(value))
69
+ return value.flatMap(textFromVisiblePart).join('\n').trim();
70
+ if (isRecord(value))
71
+ return textFromVisiblePart(value).join('\n').trim();
72
+ return '';
73
+ }
74
+ export function pushMessage(messages, role, content, timestamp) {
75
+ const normalized = truncateContent(content.trim());
76
+ if (!normalized)
77
+ return;
78
+ const previous = messages[messages.length - 1];
79
+ if (previous?.role === role && previous.content === normalized)
80
+ return;
81
+ messages.push({ role, content: normalized, ...(timestamp !== undefined ? { timestamp } : {}) });
82
+ }
83
+ function roleFromGeminiType(type) {
84
+ if (type === 'user')
85
+ return 'user';
86
+ if (type === 'assistant' || type === 'model' || type === 'gemini')
87
+ return 'assistant';
88
+ return null;
89
+ }
90
+ export function parseGeminiMessagesFromRecords(records) {
91
+ let latestMessages = [];
92
+ for (const record of records) {
93
+ const direct = Array.isArray(record.messages) ? record.messages : undefined;
94
+ const nestedSet = isRecord(record.$set) && Array.isArray(record.$set.messages)
95
+ ? record.$set.messages
96
+ : undefined;
97
+ if (direct)
98
+ latestMessages = direct;
99
+ if (nestedSet)
100
+ latestMessages = nestedSet;
101
+ }
102
+ const messages = [];
103
+ for (const item of latestMessages) {
104
+ if (!isRecord(item))
105
+ continue;
106
+ const role = roleFromGeminiType(item.type) ?? roleFromGeminiType(item.role);
107
+ if (!role)
108
+ continue;
109
+ pushMessage(messages, role, textFromContent(item.content ?? item.text), timestampMs(item.timestamp));
110
+ }
111
+ return messages;
112
+ }
113
+ function flushKimiAssistant(messages, pending) {
114
+ if (!pending)
115
+ return null;
116
+ pushMessage(messages, 'assistant', pending.chunks.join(''), pending.timestamp);
117
+ return null;
118
+ }
119
+ export function parseKimiWireMessages(records) {
120
+ const messages = [];
121
+ let pendingAssistant = null;
122
+ for (const record of records) {
123
+ if (record.type === 'context.append_message' && isRecord(record.message)) {
124
+ const role = record.message.role === 'user' || record.message.role === 'assistant'
125
+ ? record.message.role
126
+ : null;
127
+ const content = textFromContent(record.message.content ?? record.message.text);
128
+ if (role && content) {
129
+ pendingAssistant = flushKimiAssistant(messages, pendingAssistant);
130
+ pushMessage(messages, role, content, timestampMs(record.time));
131
+ }
132
+ continue;
133
+ }
134
+ if (record.type !== 'context.append_loop_event' || !isRecord(record.event))
135
+ continue;
136
+ const event = record.event;
137
+ if (event.type !== 'content.part' || !isRecord(event.part))
138
+ continue;
139
+ if (event.part.type !== 'text' || typeof event.part.text !== 'string')
140
+ continue;
141
+ const turnId = typeof event.turnId === 'string' ? event.turnId : '';
142
+ if (!pendingAssistant || pendingAssistant.turnId !== turnId) {
143
+ pendingAssistant = flushKimiAssistant(messages, pendingAssistant);
144
+ pendingAssistant = {
145
+ turnId,
146
+ chunks: [],
147
+ timestamp: timestampMs(record.time),
148
+ };
149
+ }
150
+ pendingAssistant.chunks.push(event.part.text);
151
+ }
152
+ flushKimiAssistant(messages, pendingAssistant);
153
+ return messages;
154
+ }
155
+ export function parseOpenCodeTextRows(rows) {
156
+ const grouped = new Map();
157
+ const order = [];
158
+ for (const row of rows) {
159
+ if (!row.message_id || !row.message_data || !row.part_data)
160
+ continue;
161
+ let messageData;
162
+ let partData;
163
+ try {
164
+ const parsedMessage = JSON.parse(row.message_data);
165
+ const parsedPart = JSON.parse(row.part_data);
166
+ if (!isRecord(parsedMessage) || !isRecord(parsedPart))
167
+ continue;
168
+ messageData = parsedMessage;
169
+ partData = parsedPart;
170
+ }
171
+ catch {
172
+ continue;
173
+ }
174
+ const role = messageData.role === 'user' || messageData.role === 'assistant'
175
+ ? messageData.role
176
+ : null;
177
+ if (!role || partData.type !== 'text')
178
+ continue;
179
+ const text = typeof partData.text === 'string' ? partData.text : '';
180
+ if (!text.trim())
181
+ continue;
182
+ if (!grouped.has(row.message_id)) {
183
+ order.push(row.message_id);
184
+ grouped.set(row.message_id, {
185
+ role,
186
+ timestamp: timestampMs(row.message_time_created),
187
+ chunks: [],
188
+ });
189
+ }
190
+ grouped.get(row.message_id)?.chunks.push(text);
191
+ }
192
+ const messages = [];
193
+ for (const key of order) {
194
+ const message = grouped.get(key);
195
+ if (!message)
196
+ continue;
197
+ pushMessage(messages, message.role, message.chunks.join('\n'), message.timestamp);
198
+ }
199
+ return messages;
200
+ }
201
+ function roleFromVisibleRecord(record, message) {
202
+ const candidates = [
203
+ message.role,
204
+ record.role,
205
+ message.author,
206
+ record.author,
207
+ message.sender,
208
+ record.sender,
209
+ message.type,
210
+ record.type,
211
+ ];
212
+ for (const candidate of candidates) {
213
+ if (typeof candidate !== 'string')
214
+ continue;
215
+ const normalized = candidate.toLowerCase().replace(/[-_\s]+/g, '');
216
+ if (normalized === 'user' || normalized === 'human' || normalized === 'usermessage')
217
+ return 'user';
218
+ if (normalized === 'assistant'
219
+ || normalized === 'model'
220
+ || normalized === 'agent'
221
+ || normalized === 'assistantmessage'
222
+ || normalized === 'aimessage') {
223
+ return 'assistant';
224
+ }
225
+ }
226
+ return null;
227
+ }
228
+ function timestampFromVisibleRecord(record, message) {
229
+ return timestampMs(record.timestamp)
230
+ ?? timestampMs(message.timestamp)
231
+ ?? timestampMs(record.createdAt)
232
+ ?? timestampMs(message.createdAt)
233
+ ?? timestampMs(record.created_at)
234
+ ?? timestampMs(message.created_at)
235
+ ?? timestampMs(record.time)
236
+ ?? timestampMs(message.time);
237
+ }
238
+ export function parseVisibleMessagesFromRecords(records) {
239
+ const messages = [];
240
+ for (const record of records) {
241
+ if (record.isSidechain === true)
242
+ continue;
243
+ const message = isRecord(record.message) ? record.message : record;
244
+ const role = roleFromVisibleRecord(record, message);
245
+ if (!role)
246
+ continue;
247
+ pushMessage(messages, role, textFromVisibleContent(message.content ?? record.content ?? message.text ?? record.text), timestampFromVisibleRecord(record, message));
248
+ }
249
+ return messages;
250
+ }
251
+ export function parseClaudeMessagesFromRecords(records) {
252
+ return parseVisibleMessagesFromRecords(records);
253
+ }
254
+ export function firstStringField(records, key) {
255
+ for (const record of records) {
256
+ const value = record[key];
257
+ if (typeof value === 'string' && value.trim())
258
+ return value.trim();
259
+ }
260
+ return undefined;
261
+ }
262
+ export function newestTimestampField(records, key) {
263
+ let bestValue;
264
+ let bestMs = -Infinity;
265
+ for (const record of records) {
266
+ const value = timestampField(record[key]);
267
+ const ms = timestampMs(value);
268
+ if (value !== undefined && ms !== undefined && ms >= bestMs) {
269
+ bestValue = value;
270
+ bestMs = ms;
271
+ }
272
+ }
273
+ return bestValue;
274
+ }
275
+ export function firstStringFromRecords(records, keys) {
276
+ for (const key of keys) {
277
+ const value = firstStringField(records, key);
278
+ if (value)
279
+ return value;
280
+ }
281
+ return undefined;
282
+ }
283
+ export function firstTimestampFromRecords(records, keys) {
284
+ for (const key of keys) {
285
+ const record = records.find((item) => timestampField(item[key]) !== undefined);
286
+ const value = record ? timestampField(record[key]) : undefined;
287
+ if (value !== undefined)
288
+ return value;
289
+ }
290
+ return undefined;
291
+ }
292
+ export function sessionHeaderRecord(records) {
293
+ return records.find((record) => record.type === 'session' || record.type === 'session_start');
294
+ }
295
+ export function sessionIdFromRecords(records, fallback) {
296
+ const header = sessionHeaderRecord(records);
297
+ const headerId = isRecord(header) && typeof header.id === 'string' ? header.id.trim() : '';
298
+ return firstStringFromRecords(records, ['sessionId', 'session_id', 'conversationId', 'conversation_id'])
299
+ ?? (headerId || fallback);
300
+ }
301
+ export function firstUserMessage(messages) {
302
+ return messages.find((message) => message.role === 'user');
303
+ }
304
+ export function lastUserMessage(messages) {
305
+ const userMessages = messages.filter((message) => message.role === 'user');
306
+ return userMessages[userMessages.length - 1];
307
+ }
308
+ export function toExternalRecord(input) {
309
+ return {
310
+ id: input.id,
311
+ ...(input.title !== undefined ? { title: input.title } : {}),
312
+ ...(input.preview ? { preview: input.preview } : {}),
313
+ ...(input.cwd ? { cwd: input.cwd } : {}),
314
+ ...(input.createdAt !== undefined ? { createdAt: input.createdAt } : {}),
315
+ ...(input.updatedAt !== undefined ? { updatedAt: input.updatedAt } : {}),
316
+ messageCount: input.messages.length,
317
+ ...(input.messages.some((message) => message.role === 'user')
318
+ ? { turnCount: input.messages.filter((message) => message.role === 'user').length }
319
+ : {}),
320
+ turns: input.messages,
321
+ source: 'native-transcript',
322
+ transcriptSource: input.transcriptSource,
323
+ };
324
+ }
325
+ export function sortAndLimit(records, limit = DEFAULT_RUNTIME_SESSION_TRANSCRIPT_LIMIT) {
326
+ return records
327
+ .slice()
328
+ .sort((a, b) => (timestampMs(b.updatedAt) ?? 0) - (timestampMs(a.updatedAt) ?? 0))
329
+ .slice(0, safeLimit(limit));
330
+ }
331
+ //# sourceMappingURL=normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../../../../src/agent/runtime/adapters/session-transcripts/normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ExternalRuntimeSessionListOptions, ExternalRuntimeSessionRecord, RuntimeSessionTranscriptAdapter, RuntimeSessionTranscriptTarget } from './types.js';
2
+ export declare const RUNTIME_SESSION_TRANSCRIPT_ADAPTERS: readonly RuntimeSessionTranscriptAdapter[];
3
+ export declare function normalizeRuntimeSessionTranscriptId(value: string): string;
4
+ export declare function listRuntimeSessionTranscriptAdapters(): RuntimeSessionTranscriptAdapter[];
5
+ export declare function getRuntimeSessionTranscriptAdapter(runtimeId: string): RuntimeSessionTranscriptAdapter | null;
6
+ export declare function resolveRuntimeSessionTranscriptTarget(cli: string): RuntimeSessionTranscriptTarget | null;
7
+ export declare function listRuntimeSessionTranscripts(options: ExternalRuntimeSessionListOptions): Promise<ExternalRuntimeSessionRecord[]>;
8
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../src/agent/runtime/adapters/session-transcripts/registry.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,iCAAiC,EACjC,4BAA4B,EAC5B,+BAA+B,EAE/B,8BAA8B,EAC/B,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mCAAmC,EAAE,SAAS,+BAA+B,EAUzF,CAAC;AAoBF,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAgBD,wBAAgB,oCAAoC,IAAI,+BAA+B,EAAE,CAExF;AAED,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,MAAM,GAChB,+BAA+B,GAAG,IAAI,CAExC;AAED,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,MAAM,GACV,8BAA8B,GAAG,IAAI,CAUvC;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAKzC"}
@@ -0,0 +1,73 @@
1
+ import { CLAUDE_SESSION_TRANSCRIPT_ADAPTER } from './adapters/claude.js';
2
+ import { CODEBUDDY_SESSION_TRANSCRIPT_ADAPTER } from './adapters/codebuddy-code.js';
3
+ import { GEMINI_SESSION_TRANSCRIPT_ADAPTER } from './adapters/gemini.js';
4
+ import { KIMI_SESSION_TRANSCRIPT_ADAPTER } from './adapters/kimi.js';
5
+ import { OPENCODE_SESSION_TRANSCRIPT_ADAPTER } from './adapters/opencode.js';
6
+ import { OPENCLAW_SESSION_TRANSCRIPT_ADAPTER } from './adapters/openclaw.js';
7
+ import { QWEN_SESSION_TRANSCRIPT_ADAPTER } from './adapters/qwen-code.js';
8
+ import { CURSOR_SESSION_TRANSCRIPT_ADAPTER, HERMES_SESSION_TRANSCRIPT_ADAPTER, } from './adapters/unverified.js';
9
+ export const RUNTIME_SESSION_TRANSCRIPT_ADAPTERS = [
10
+ KIMI_SESSION_TRANSCRIPT_ADAPTER,
11
+ GEMINI_SESSION_TRANSCRIPT_ADAPTER,
12
+ OPENCODE_SESSION_TRANSCRIPT_ADAPTER,
13
+ CLAUDE_SESSION_TRANSCRIPT_ADAPTER,
14
+ QWEN_SESSION_TRANSCRIPT_ADAPTER,
15
+ CODEBUDDY_SESSION_TRANSCRIPT_ADAPTER,
16
+ OPENCLAW_SESSION_TRANSCRIPT_ADAPTER,
17
+ CURSOR_SESSION_TRANSCRIPT_ADAPTER,
18
+ HERMES_SESSION_TRANSCRIPT_ADAPTER,
19
+ ];
20
+ const RUNTIME_SESSION_TRANSCRIPT_TARGETS = [
21
+ { adapterId: 'kimi-code', cli: 'kimi', runtime: { id: 'kimi', name: 'Kimi', kind: 'acp' } },
22
+ { adapterId: 'gemini-cli', cli: 'gemini', runtime: { id: 'gemini', name: 'Gemini', kind: 'acp' } },
23
+ { adapterId: 'opencode', cli: 'opencode', runtime: { id: 'opencode', name: 'OpenCode', kind: 'acp' } },
24
+ { adapterId: 'claude-code', cli: 'claude', runtime: { id: 'claude', name: 'Claude Code', kind: 'claude' } },
25
+ { adapterId: 'qwen-code', cli: 'qwen-code', runtime: { id: 'qwen-code', name: 'Qwen Code', kind: 'acp' } },
26
+ { adapterId: 'codebuddy-code', cli: 'codebuddy', runtime: { id: 'codebuddy', name: 'CodeBuddy', kind: 'acp' } },
27
+ { adapterId: 'openclaw', cli: 'openclaw', runtime: { id: 'openclaw', name: 'OpenClaw', kind: 'acp' } },
28
+ { adapterId: 'cursor', cli: 'cursor', runtime: { id: 'cursor', name: 'Cursor', kind: 'acp' } },
29
+ { adapterId: 'hermes', cli: 'hermes', runtime: { id: 'hermes', name: 'Hermes', kind: 'acp' } },
30
+ ];
31
+ export function normalizeRuntimeSessionTranscriptId(value) {
32
+ return value.trim().toLowerCase().replace(/[_\s]+/g, '-');
33
+ }
34
+ function buildAdapterAliasMap() {
35
+ const map = new Map();
36
+ for (const adapter of RUNTIME_SESSION_TRANSCRIPT_ADAPTERS) {
37
+ map.set(normalizeRuntimeSessionTranscriptId(adapter.id), adapter);
38
+ map.set(normalizeRuntimeSessionTranscriptId(adapter.transcriptSource), adapter);
39
+ for (const alias of adapter.aliases) {
40
+ map.set(normalizeRuntimeSessionTranscriptId(alias), adapter);
41
+ }
42
+ }
43
+ return map;
44
+ }
45
+ const adapterByAlias = buildAdapterAliasMap();
46
+ export function listRuntimeSessionTranscriptAdapters() {
47
+ return [...RUNTIME_SESSION_TRANSCRIPT_ADAPTERS];
48
+ }
49
+ export function getRuntimeSessionTranscriptAdapter(runtimeId) {
50
+ return adapterByAlias.get(normalizeRuntimeSessionTranscriptId(runtimeId)) ?? null;
51
+ }
52
+ export function resolveRuntimeSessionTranscriptTarget(cli) {
53
+ const adapter = getRuntimeSessionTranscriptAdapter(cli);
54
+ if (!adapter)
55
+ return null;
56
+ const target = RUNTIME_SESSION_TRANSCRIPT_TARGETS.find((item) => item.adapterId === adapter.id);
57
+ if (!target)
58
+ return null;
59
+ return {
60
+ cli: target.cli,
61
+ runtime: target.runtime,
62
+ adapter,
63
+ };
64
+ }
65
+ export async function listRuntimeSessionTranscripts(options) {
66
+ const adapter = getRuntimeSessionTranscriptAdapter(options.runtimeId);
67
+ if (!adapter)
68
+ return [];
69
+ if (adapter.status !== 'supported')
70
+ return [];
71
+ return adapter.listSessions(options);
72
+ }
73
+ //# sourceMappingURL=registry.js.map