agentel 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -25
- package/docs/code-reference.md +22 -13
- package/docs/history-source-handling.md +173 -60
- package/docs/release.md +1 -2
- package/package.json +1 -1
- package/src/archive.js +1 -1
- package/src/canonical-events.js +74 -25
- package/src/cli.js +818 -109
- package/src/config.js +4 -1
- package/src/doctor.js +15 -2
- package/src/importers/claude.js +309 -11
- package/src/importers/providers.js +47 -1
- package/src/importers.js +845 -63
- package/src/parser-versions.js +6 -0
- package/src/search.js +5 -1
- package/src/sources.js +8 -3
- package/src/web-export-instructions.js +77 -0
package/src/parser-versions.js
CHANGED
|
@@ -10,6 +10,7 @@ const SOURCE_TYPE_ALIASES = {
|
|
|
10
10
|
const PARSER_VERSION_SUFFIXES = {
|
|
11
11
|
"codex-cli-history": 0,
|
|
12
12
|
"codex-desktop-history": 0,
|
|
13
|
+
"codex-sdk-history": 0,
|
|
13
14
|
"cli-history": 0,
|
|
14
15
|
"claude-sdk-history": 0,
|
|
15
16
|
"claude-code-desktop-metadata": 0,
|
|
@@ -21,6 +22,11 @@ const PARSER_VERSION_SUFFIXES = {
|
|
|
21
22
|
"devin-cli-history": 0,
|
|
22
23
|
"gemini-cli-history": 0,
|
|
23
24
|
"cline-task-history": 0,
|
|
25
|
+
"opencode-cli-history": 0,
|
|
26
|
+
"opencode-cli-sqlite-history": 0,
|
|
27
|
+
"opencode-desktop-history": 0,
|
|
28
|
+
"opencode-desktop-sqlite-history": 0,
|
|
29
|
+
"opencode-web-sqlite-history": 0,
|
|
24
30
|
"opencode-history": 0,
|
|
25
31
|
"opencode-sqlite-history": 0,
|
|
26
32
|
"aider-chat-history": 0,
|
package/src/search.js
CHANGED
|
@@ -1103,9 +1103,13 @@ function normalizeProviderFilter(value) {
|
|
|
1103
1103
|
codex: { provider: "codex" },
|
|
1104
1104
|
codex_cli: { provider: "codex", sourceType: "codex-cli-history", sourceTypes: ["codex-cli-history", "cli-history"] },
|
|
1105
1105
|
codex_desktop: { provider: "codex", sourceType: "codex-desktop-history", sourceTypes: ["codex-desktop-history"] },
|
|
1106
|
+
codex_sdk: { provider: "codex", sourceType: "codex-sdk-history", sourceTypes: ["codex-sdk-history"] },
|
|
1106
1107
|
cursor: { provider: "cursor" },
|
|
1107
1108
|
cline: { provider: "cline", sourceType: "cline-task-history", sourceTypes: ["cline-task-history"] },
|
|
1108
|
-
opencode: { provider: "opencode", sourceTypes: ["opencode-history", "opencode-sqlite-history"] },
|
|
1109
|
+
opencode: { provider: "opencode", sourceTypes: ["opencode-cli-history", "opencode-cli-sqlite-history", "opencode-desktop-history", "opencode-desktop-sqlite-history", "opencode-web-sqlite-history", "opencode-history", "opencode-sqlite-history"] },
|
|
1110
|
+
opencode_cli: { provider: "opencode", sourceType: "opencode-cli-history", sourceTypes: ["opencode-cli-history", "opencode-cli-sqlite-history"] },
|
|
1111
|
+
opencode_desktop: { provider: "opencode", sourceType: "opencode-desktop-history", sourceTypes: ["opencode-desktop-history", "opencode-desktop-sqlite-history"] },
|
|
1112
|
+
opencode_web: { provider: "opencode", sourceType: "opencode-web-sqlite-history", sourceTypes: ["opencode-web-sqlite-history"] },
|
|
1109
1113
|
aider: { provider: "aider", sourceType: "aider-chat-history", sourceTypes: ["aider-chat-history"] },
|
|
1110
1114
|
devin: { provider: "devin" },
|
|
1111
1115
|
devin_cli: { provider: "devin", sourceType: "devin-cli-history", sourceTypes: ["devin-cli-history"] },
|
package/src/sources.js
CHANGED
|
@@ -6,6 +6,7 @@ const SOURCE_GROUPS = [
|
|
|
6
6
|
sources: [
|
|
7
7
|
{ source: "codex-cli", provider: "codex", sourceType: "codex-cli-history", label: "Codex CLI" },
|
|
8
8
|
{ source: "codex-desktop", provider: "codex", sourceType: "codex-desktop-history", label: "Codex Desktop" },
|
|
9
|
+
{ source: "codex-sdk", provider: "codex", sourceType: "codex-sdk-history", label: "Codex SDK jobs" },
|
|
9
10
|
{ source: "chatgpt", provider: "chatgpt", label: "ChatGPT" }
|
|
10
11
|
]
|
|
11
12
|
},
|
|
@@ -37,7 +38,9 @@ const SOURCE_GROUPS = [
|
|
|
37
38
|
sources: [
|
|
38
39
|
{ source: "cursor", provider: "cursor", label: "Cursor" },
|
|
39
40
|
{ source: "cline", provider: "cline", sourceType: "cline-task-history", label: "Cline" },
|
|
40
|
-
{ source: "opencode", provider: "opencode", sourceType: "opencode-history", label: "OpenCode" },
|
|
41
|
+
{ source: "opencode-cli", provider: "opencode", sourceType: "opencode-cli-history", label: "OpenCode CLI" },
|
|
42
|
+
{ source: "opencode-desktop", provider: "opencode", sourceType: "opencode-desktop-history", label: "OpenCode Desktop" },
|
|
43
|
+
{ source: "opencode-web", provider: "opencode", sourceType: "opencode-web-sqlite-history", label: "OpenCode Web" },
|
|
41
44
|
{ source: "aider", provider: "aider", sourceType: "aider-chat-history", label: "Aider" }
|
|
42
45
|
]
|
|
43
46
|
}
|
|
@@ -61,7 +64,9 @@ const IMPORT_SOURCE_ORDER = [
|
|
|
61
64
|
"devin-cli",
|
|
62
65
|
"cursor",
|
|
63
66
|
"cline",
|
|
64
|
-
"opencode",
|
|
67
|
+
"opencode-cli",
|
|
68
|
+
"opencode-desktop",
|
|
69
|
+
"opencode-web",
|
|
65
70
|
"aider"
|
|
66
71
|
];
|
|
67
72
|
|
|
@@ -72,7 +77,7 @@ function enabledImportSources(sources) {
|
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
function sourceLabel(source) {
|
|
75
|
-
return HISTORY_PROVIDER_OPTIONS.find((item) => item.source === source)?.label || source;
|
|
80
|
+
return HISTORY_PROVIDER_OPTIONS.find((item) => item.source === source)?.label || { opencode: "OpenCode" }[source] || source;
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
module.exports = {
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const WEB_EXPORT_INSTRUCTIONS = {
|
|
4
|
+
chatgpt: {
|
|
5
|
+
source: "chatgpt",
|
|
6
|
+
provider: "chatgpt",
|
|
7
|
+
label: "ChatGPT",
|
|
8
|
+
requestUrl: "https://privacy.openai.com/policies/en/",
|
|
9
|
+
helpUrl: "https://help.openai.com/en/articles/7260999-how-do-i-export-my-chatgpt-history-and-data",
|
|
10
|
+
fileDescription: "official ChatGPT data export ZIP or extracted folder",
|
|
11
|
+
importCommand: "agentlog import chatgpt <path-to-export.zip> --username <email> --scope local",
|
|
12
|
+
steps: [
|
|
13
|
+
"Open the OpenAI Privacy Portal, choose Make a Privacy Request, select I have a consumer ChatGPT account, then select Download my data.",
|
|
14
|
+
"Or in ChatGPT, open your profile menu, choose Settings, open Data Controls, then use Export Data.",
|
|
15
|
+
"Complete account verification and wait for the export email.",
|
|
16
|
+
"Download the ZIP before the email link expires, then pass the ZIP or extracted folder to agentlog."
|
|
17
|
+
],
|
|
18
|
+
notes: [
|
|
19
|
+
"OpenAI says ChatGPT Business and Enterprise chat exports are not available through the ChatGPT account export flow.",
|
|
20
|
+
"OpenAI export emails can take time to arrive, and the download link expires after 24 hours."
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"claude-web": {
|
|
24
|
+
source: "claude-web",
|
|
25
|
+
provider: "claude_web",
|
|
26
|
+
label: "Claude.ai",
|
|
27
|
+
requestUrl: "https://claude.ai/settings/privacy",
|
|
28
|
+
helpUrl: "https://support.claude.com/en/articles/9450526-how-can-i-export-my-claude-data",
|
|
29
|
+
fileDescription: "official Claude.ai data export ZIP or extracted folder",
|
|
30
|
+
importCommand: "agentlog import claude-web <path-to-export.zip> --username <email-or-name> --scope local",
|
|
31
|
+
steps: [
|
|
32
|
+
"Open Claude on the web or Claude Desktop and go to Settings > Privacy.",
|
|
33
|
+
"Click Export data.",
|
|
34
|
+
"Wait for Claude to email the download link to the address on the account.",
|
|
35
|
+
"Download the ZIP before the email link expires, then pass the ZIP or extracted folder to agentlog."
|
|
36
|
+
],
|
|
37
|
+
notes: [
|
|
38
|
+
"Claude's mobile apps cannot start a data export.",
|
|
39
|
+
"Claude requires you to be signed in when using the emailed download link, and the link expires after 24 hours."
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
function canonicalWebExportInstructionSource(source) {
|
|
45
|
+
const value = String(source || "").trim().toLowerCase().replace(/[_\s]+/g, "-");
|
|
46
|
+
if (value === "chatgpt" || value === "openai") return "chatgpt";
|
|
47
|
+
if (value === "claude-ai" || value === "claude-web") return "claude-web";
|
|
48
|
+
return "";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function webExportInstructions(source) {
|
|
52
|
+
const key = canonicalWebExportInstructionSource(source);
|
|
53
|
+
return key ? WEB_EXPORT_INSTRUCTIONS[key] : null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function manualImportInstructionResult(source) {
|
|
57
|
+
const instructions = webExportInstructions(source);
|
|
58
|
+
if (!instructions) throw new Error(`unknown web export instruction source: ${source}`);
|
|
59
|
+
return {
|
|
60
|
+
provider: instructions.provider,
|
|
61
|
+
source: instructions.source,
|
|
62
|
+
manual: true,
|
|
63
|
+
instructions,
|
|
64
|
+
discovered: 0,
|
|
65
|
+
candidates: 0,
|
|
66
|
+
imported: 0,
|
|
67
|
+
skipped: 0,
|
|
68
|
+
errors: []
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
module.exports = {
|
|
73
|
+
WEB_EXPORT_INSTRUCTIONS,
|
|
74
|
+
canonicalWebExportInstructionSource,
|
|
75
|
+
manualImportInstructionResult,
|
|
76
|
+
webExportInstructions
|
|
77
|
+
};
|