Skip to content

Commit 2f7c1c9

Browse files
authored
Merge branch 'main' into fix/sms-prefixed-number-spacing-v2
2 parents 59956e9 + 0a8c485 commit 2f7c1c9

5 files changed

Lines changed: 39 additions & 3 deletions

File tree

extensions/anthropic/session-catalog-history.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,38 @@ vi.mock("openclaw/plugin-sdk/session-transcript-runtime", () => ({
2020
}));
2121

2222
describe("importClaudeHistory", () => {
23+
it("falls back for invalid timestamps while preserving valid pre-epoch dates", async () => {
24+
appended.length = 0;
25+
const fallbackTimestamp = new Date("2026-07-18T12:00:00.000Z").getTime();
26+
vi.useFakeTimers();
27+
vi.setSystemTime(fallbackTimestamp);
28+
try {
29+
await importClaudeHistory({
30+
items: [
31+
{ type: "userMessage", text: "invalid", timestamp: "not-a-date", uuid: "u-1" },
32+
{
33+
type: "userMessage",
34+
text: "pre-epoch",
35+
timestamp: "1969-12-31T23:59:59.000Z",
36+
uuid: "u-2",
37+
},
38+
],
39+
threadId: "thread-1",
40+
sessionFile: "/tmp/unused.jsonl",
41+
sessionId: "session-1",
42+
sessionKey: "agent:main:catalog-adopt",
43+
agentId: "main",
44+
config: {} as OpenClawConfig,
45+
});
46+
} finally {
47+
vi.useRealTimers();
48+
}
49+
50+
expect(appended).toHaveLength(2);
51+
expect(appended.map((message) => message.timestamp)).toEqual([-1_000, fallbackTimestamp + 1]);
52+
expect(JSON.stringify(appended)).not.toContain('"timestamp":null');
53+
});
54+
2355
it("tags imported native user rows so self-echo provenance excludes them", async () => {
2456
appended.length = 0;
2557
await importClaudeHistory({

extensions/anthropic/session-catalog-history.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ function importedClaudeMessage(
88
item: ClaudeTranscriptItem,
99
fallbackTimestamp: number,
1010
): AgentMessage {
11-
const timestamp = item.timestamp ? Date.parse(item.timestamp) : fallbackTimestamp;
11+
const parsedTimestamp = item.timestamp ? Date.parse(item.timestamp) : Number.NaN;
12+
const timestamp = Number.isFinite(parsedTimestamp) ? parsedTimestamp : fallbackTimestamp;
1213
const text = item.text?.trim() || "[Unsupported Claude transcript item]";
1314
if (item.type === "userMessage") {
1415
// Imported native rows are not OpenClaw-authored; mirrorOrigin excludes them

extensions/browser/chrome-extension/modules/copilot-runtime.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extensions/browser/scripts/build-copilot-runtime.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ export async function buildCopilotRuntime(params = {}) {
3535
bundle: true,
3636
format: "esm",
3737
legalComments: "inline",
38-
minify: true,
38+
minifyIdentifiers: false,
39+
minifySyntax: true,
40+
minifyWhitespace: true,
3941
platform: "browser",
4042
target: "chrome125",
4143
tsconfig: path.join(repoRoot, "tsconfig.json"),

extensions/browser/scripts/build-copilot-runtime.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ describe("scripts/build-copilot-runtime.mjs", () => {
2626
expect(build).toHaveBeenCalledWith(
2727
expect.objectContaining({
2828
outfile: outputPath,
29+
minifyIdentifiers: false,
2930
write: false,
3031
}),
3132
);

0 commit comments

Comments
 (0)