@memorax/memorax-code 0.1.7 → 0.1.8
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 +36 -5
- package/bin/memorax-code-setup.mjs +0 -3
- package/docs/configuration.md +1 -3
- package/docs/troubleshooting.md +9 -8
- package/lib/memorax-code-backend/dist/app/backend-server.js +2 -29
- package/lib/memorax-code-backend/dist/app/memory-observability.js +1 -4
- package/lib/memorax-code-backend/dist/app/state.js +1 -12
- package/lib/memorax-code-backend/dist/clients/claude/transcript-turn.js +0 -182
- package/lib/memorax-code-backend/dist/clients/opencode/message-turn.js +68 -2
- package/lib/memorax-code-backend/dist/lifecycle/backend/service.js +0 -5
- package/lib/memorax-code-backend/dist/lifecycle/orchestrator.js +1 -14
- package/lib/memorax-code-backend/dist/memory/automatic-writeback.js +8 -5
- package/lib/memorax-code-backend/dist/memory/project.js +4 -26
- package/lib/memorax-code-backend/dist/memory/quota-notice.js +79 -19
- package/lib/memorax-code-backend/dist/provider/memorax/adapter.js +1 -4
- package/lib/memorax-code-backend/dist/provider/memorax/http.js +0 -28
- package/lib/memorax-code-backend/dist/transport/http/request.js +1 -39
- package/lib/memorax-code-backend/package.json +2 -3
- package/lib/memorax-code-claude-adapter/.claude-plugin/plugin.json +1 -1
- package/lib/memorax-code-claude-adapter/hooks/runtime-shell.json +1 -1
- package/lib/memorax-code-claude-adapter/package.json +1 -1
- package/lib/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +0 -6
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +1 -1
- package/lib/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/.claude-plugin/plugin.json +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/hooks/runtime-shell.json +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/package.json +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/SKILL.md +0 -6
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-add.md +1 -1
- package/lib/memorax-code-claude-marketplace/plugins/memorax-code-claude-adapter/skills/memorax-code/references/memorax-search.md +1 -1
- package/lib/memorax-code-codex-adapter/.codex-plugin/plugin.json +1 -1
- package/lib/memorax-code-codex-adapter/hooks/runtime-shell.json +1 -1
- package/lib/memorax-code-codex-adapter/package.json +1 -1
- package/lib/memorax-code-codex-adapter/skills/memorax-code/SKILL.md +0 -6
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-add.md +1 -1
- package/lib/memorax-code-codex-adapter/skills/memorax-code/references/memorax-search.md +1 -1
- package/lib/memorax-code-dsh-adapter/package.json +1 -1
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/SKILL.md +0 -6
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/memorax-add.md +1 -1
- package/lib/memorax-code-dsh-adapter/skills/memorax-code/references/memorax-search.md +1 -1
- package/lib/memorax-code-opencode-adapter/package.json +1 -1
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/SKILL.md +0 -6
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/memorax-add.md +1 -1
- package/lib/memorax-code-opencode-adapter/skills/memorax-code/references/memorax-search.md +1 -1
- package/lib/memorax-code-opencode-adapter/src/plugin.mjs +121 -16
- package/lib/memorax-code-opencode-adapter/src/repo-memory-server-runner.mjs +2 -0
- package/package.json +1 -1
- package/lib/memorax-code-backend/dist/clients/codex/effective-prompt.js +0 -54
- package/lib/memorax-code-backend/dist/memory/writeback-reconciler.js +0 -244
- package/lib/memorax-code-backend/dist/memory/writeback-task-projection.js +0 -377
- package/lib/memorax-code-backend/dist/repository/readiness.js +0 -188
- package/lib/memorax-code-backend/dist/shared/incremental-jsonl-projection.js +0 -271
- package/lib/memorax-code-backend/dist/viewer/history/claude-transcript.js +0 -648
- package/lib/memorax-code-backend/dist/viewer/history/session-title.js +0 -93
- package/lib/memorax-code-backend/dist/viewer/http/public-routes.js +0 -146
- package/lib/memorax-code-backend/dist/viewer/model.js +0 -1
- package/lib/memorax-code-backend/dist/viewer/projection/activity.js +0 -113
- package/lib/memorax-code-backend/dist/viewer/projection/cache.js +0 -69
- package/lib/memorax-code-backend/dist/viewer/projection/event-identity.js +0 -3
- package/lib/memorax-code-backend/dist/viewer/projection/history.js +0 -79
- package/lib/memorax-code-backend/dist/viewer/projection/observability.js +0 -8
- package/lib/memorax-code-backend/dist/viewer/projection/redaction.js +0 -52
- package/lib/memorax-code-backend/dist/viewer/projection/turn-reference.js +0 -12
- package/lib/memorax-code-backend/dist/viewer/projection/user.js +0 -168
- package/lib/memorax-code-backend/dist/viewer/projection/writeback-status.js +0 -97
- package/lib/memorax-code-backend/dist/viewer/store.js +0 -991
- package/lib/memorax-code-backend/dist/viewer/ui/icon.js +0 -1
- package/lib/memorax-code-backend/dist/viewer/ui/logo.js +0 -1
- package/lib/memorax-code-backend/dist/viewer/ui/user-html.js +0 -117
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { isTraceClient } from "../../trace/context.js";
|
|
2
|
-
/**
|
|
3
|
-
* Projects raw Viewer events into the deliberately small user-facing summary contract.
|
|
4
|
-
* Conversation, memory, session, turn, and diagnostic fields never cross this boundary.
|
|
5
|
-
*/
|
|
6
|
-
export function projectMemoryViewerUserData(events) {
|
|
7
|
-
const turnActivities = projectTurnActivities(events);
|
|
8
|
-
const activities = [
|
|
9
|
-
...turnActivities,
|
|
10
|
-
...events.flatMap((event) => {
|
|
11
|
-
if (event.type === "memory_retrieve" || event.type === "memory_cli_search") {
|
|
12
|
-
const occurredAt = canonicalUserActivityTimestamp(event.timestamp);
|
|
13
|
-
if (!occurredAt)
|
|
14
|
-
return [];
|
|
15
|
-
const nativeTranscriptActivity = isClaudeNativeTranscriptMemoryActivity(event);
|
|
16
|
-
return [{
|
|
17
|
-
kind: "search",
|
|
18
|
-
occurredAt,
|
|
19
|
-
source: event.type === "memory_cli_search" ? "assistant" : "automatic",
|
|
20
|
-
status: event.ok ? "completed" : "failed",
|
|
21
|
-
count: event.ok
|
|
22
|
-
? nativeTranscriptActivity
|
|
23
|
-
? safeNativeTranscriptSearchItemCount(event)
|
|
24
|
-
: event.itemCount ?? event.results?.length ?? 0
|
|
25
|
-
: 0,
|
|
26
|
-
...safeProjectFields(event),
|
|
27
|
-
}];
|
|
28
|
-
}
|
|
29
|
-
if (event.type !== "memory_cli_add" && event.type !== "memory_writeback")
|
|
30
|
-
return [];
|
|
31
|
-
const occurredAt = canonicalUserActivityTimestamp(event.timestamp);
|
|
32
|
-
if (!occurredAt)
|
|
33
|
-
return [];
|
|
34
|
-
const nativeTranscriptActivity = isClaudeNativeTranscriptMemoryActivity(event);
|
|
35
|
-
return [{
|
|
36
|
-
kind: "add",
|
|
37
|
-
occurredAt,
|
|
38
|
-
source: event.type === "memory_cli_add" ? "assistant" : "automatic",
|
|
39
|
-
status: nativeTranscriptActivity && event.ok ? "unknown" : addStatus(event),
|
|
40
|
-
count: nativeTranscriptActivity && event.ok ? null : addCount(event),
|
|
41
|
-
...safeProjectFields(event),
|
|
42
|
-
}];
|
|
43
|
-
}),
|
|
44
|
-
].sort(compareUserActivitiesNewestFirst);
|
|
45
|
-
return {
|
|
46
|
-
activities,
|
|
47
|
-
summary: {
|
|
48
|
-
turnCount: turnActivities.length,
|
|
49
|
-
searchOperationCount: countActivities(activities, "search"),
|
|
50
|
-
searchedMemoryCount: sumActivityCounts(activities, "search"),
|
|
51
|
-
addOperationCount: countActivities(activities, "add"),
|
|
52
|
-
addedMemoryCount: activities
|
|
53
|
-
.filter((activity) => activity.kind === "add" && activity.status === "saved")
|
|
54
|
-
.reduce((total, activity) => total + (activity.count ?? 0), 0),
|
|
55
|
-
processingCount: activities.filter((activity) => activity.status === "processing").length,
|
|
56
|
-
unknownCount: activities.filter((activity) => (activity.kind !== "turn"
|
|
57
|
-
&& activity.count === null
|
|
58
|
-
&& activity.status !== "processing"
|
|
59
|
-
&& activity.status !== "failed")).length,
|
|
60
|
-
failedCount: activities.filter((activity) => activity.status === "failed").length,
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
function isClaudeNativeTranscriptMemoryActivity(event) {
|
|
65
|
-
return event.client === "claude"
|
|
66
|
-
&& event.id.startsWith("claude-local:")
|
|
67
|
-
&& (event.type === "memory_cli_search" || event.type === "memory_cli_add");
|
|
68
|
-
}
|
|
69
|
-
function safeNativeTranscriptSearchItemCount(event) {
|
|
70
|
-
return Number.isSafeInteger(event.itemCount)
|
|
71
|
-
&& (event.itemCount ?? -1) >= 0
|
|
72
|
-
&& (event.itemCount ?? 101) <= 100
|
|
73
|
-
? event.itemCount
|
|
74
|
-
: null;
|
|
75
|
-
}
|
|
76
|
-
function projectTurnActivities(events) {
|
|
77
|
-
const turns = new Map();
|
|
78
|
-
for (const event of events) {
|
|
79
|
-
if (!event.sessionId || !event.turnId || (event.type !== "turn_start" && event.type !== "turn_end"))
|
|
80
|
-
continue;
|
|
81
|
-
const key = `${traceClient(event)}\u0000${event.sessionId}\u0000${event.turnId}`;
|
|
82
|
-
const turn = turns.get(key) ?? {};
|
|
83
|
-
if (event.type === "turn_start")
|
|
84
|
-
turn.start = event;
|
|
85
|
-
else
|
|
86
|
-
turn.end = event;
|
|
87
|
-
turns.set(key, turn);
|
|
88
|
-
}
|
|
89
|
-
return [...turns.values()].flatMap((turn) => {
|
|
90
|
-
const anchor = turn.start ?? turn.end;
|
|
91
|
-
if (!anchor)
|
|
92
|
-
return [];
|
|
93
|
-
const occurredAt = canonicalUserActivityTimestamp(turn.start?.timestamp)
|
|
94
|
-
?? canonicalUserActivityTimestamp(turn.end?.timestamp)
|
|
95
|
-
?? canonicalUserActivityTimestamp(anchor.timestamp);
|
|
96
|
-
if (!occurredAt)
|
|
97
|
-
return [];
|
|
98
|
-
return [{
|
|
99
|
-
kind: "turn",
|
|
100
|
-
occurredAt,
|
|
101
|
-
source: "client",
|
|
102
|
-
status: turn.end?.turnOutcome === "interrupted"
|
|
103
|
-
|| (!turn.end && turn.start?.turnOutcome === "interrupted")
|
|
104
|
-
? "interrupted"
|
|
105
|
-
: turn.end
|
|
106
|
-
? "completed"
|
|
107
|
-
: "processing",
|
|
108
|
-
count: null,
|
|
109
|
-
...safeProjectFields(anchor),
|
|
110
|
-
}];
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
function canonicalUserActivityTimestamp(value) {
|
|
114
|
-
if (typeof value !== "string" || value.length > 512)
|
|
115
|
-
return undefined;
|
|
116
|
-
const parsed = Date.parse(value.trim());
|
|
117
|
-
if (!Number.isFinite(parsed))
|
|
118
|
-
return undefined;
|
|
119
|
-
return new Date(parsed).toISOString();
|
|
120
|
-
}
|
|
121
|
-
function traceClient(event) {
|
|
122
|
-
return isTraceClient(event.client) ? event.client : "codex";
|
|
123
|
-
}
|
|
124
|
-
function safeProjectFields(event) {
|
|
125
|
-
return {
|
|
126
|
-
...(event.projectId ? { projectId: event.projectId } : {}),
|
|
127
|
-
...(event.projectLabel ? { projectLabel: event.projectLabel } : {}),
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
function addStatus(event) {
|
|
131
|
-
if (!event.ok || event.writebackOutcome === "failed")
|
|
132
|
-
return "failed";
|
|
133
|
-
if (event.writebackOutcome === "pending")
|
|
134
|
-
return "processing";
|
|
135
|
-
if (event.writebackOutcome === "saved")
|
|
136
|
-
return "saved";
|
|
137
|
-
if (event.writebackOutcome === "skipped")
|
|
138
|
-
return "skipped";
|
|
139
|
-
if (event.writebackOutcome === "completed")
|
|
140
|
-
return "completed";
|
|
141
|
-
if (event.savedMemoryCount !== undefined)
|
|
142
|
-
return event.savedMemoryCount > 0 ? "saved" : "skipped";
|
|
143
|
-
return "unknown";
|
|
144
|
-
}
|
|
145
|
-
function addCount(event) {
|
|
146
|
-
if (!event.ok || event.writebackOutcome === "failed")
|
|
147
|
-
return 0;
|
|
148
|
-
if (event.savedMemoryCount !== undefined)
|
|
149
|
-
return event.savedMemoryCount;
|
|
150
|
-
if (event.writebackOutcome === "skipped")
|
|
151
|
-
return 0;
|
|
152
|
-
return null;
|
|
153
|
-
}
|
|
154
|
-
function compareUserActivitiesNewestFirst(left, right) {
|
|
155
|
-
return timestampOrder(right.occurredAt) - timestampOrder(left.occurredAt);
|
|
156
|
-
}
|
|
157
|
-
function timestampOrder(value) {
|
|
158
|
-
const parsed = Date.parse(value);
|
|
159
|
-
return Number.isFinite(parsed) ? parsed : 0;
|
|
160
|
-
}
|
|
161
|
-
function countActivities(activities, kind) {
|
|
162
|
-
return activities.filter((activity) => activity.kind === kind).length;
|
|
163
|
-
}
|
|
164
|
-
function sumActivityCounts(activities, kind) {
|
|
165
|
-
return activities
|
|
166
|
-
.filter((activity) => activity.kind === kind)
|
|
167
|
-
.reduce((total, activity) => total + (activity.count ?? 0), 0);
|
|
168
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { completeMemoryWritebackTask, memoryText, memoryWritebackTaskEventKey, memoryWritebackTaskOutcome, memoryWritebackTaskOutcomeForStatus, nonNegativeInteger, projectMemoryWritebackTasks, stringArray, } from "../../memory/writeback-task-projection.js";
|
|
2
|
-
export { memoryText, nonNegativeInteger, stringArray, };
|
|
3
|
-
export function pendingMemoryViewerWritebacks(eventsToCheck) {
|
|
4
|
-
const tasks = new Map(projectMemoryWritebackTasks(eventsToCheck.flatMap(memoryViewerWritebackProjectionRecord)).map((task) => [memoryWritebackTaskEventKey(task), task]));
|
|
5
|
-
return eventsToCheck.filter((event) => {
|
|
6
|
-
const task = tasks.get(memoryViewerWritebackEventKey(event));
|
|
7
|
-
return task?.accepted === true && task.completion.outcome === "pending";
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
export function completeMemoryViewerWriteback(event, status) {
|
|
11
|
-
return applyMemoryWritebackTaskCompletion(event, completeMemoryWritebackTask(status), false);
|
|
12
|
-
}
|
|
13
|
-
export function foldMemoryViewerWritebackStatuses(allEvents) {
|
|
14
|
-
const tasks = new Map(projectMemoryWritebackTasks(allEvents.flatMap(memoryViewerWritebackProjectionRecord)).map((task) => [memoryWritebackTaskEventKey(task), task]));
|
|
15
|
-
return allEvents
|
|
16
|
-
.filter((event) => event.type !== "memory_writeback_status")
|
|
17
|
-
.map((event) => {
|
|
18
|
-
const task = tasks.get(memoryViewerWritebackEventKey(event));
|
|
19
|
-
return task?.statusEventId
|
|
20
|
-
? applyMemoryWritebackTaskCompletion(event, task.completion, true)
|
|
21
|
-
: event;
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
export function memoryViewerWritebackOutcome(value) {
|
|
25
|
-
return memoryWritebackTaskOutcome(value);
|
|
26
|
-
}
|
|
27
|
-
export function writebackOutcomeForStatus(status, result = {}) {
|
|
28
|
-
return memoryWritebackTaskOutcomeForStatus(status, result);
|
|
29
|
-
}
|
|
30
|
-
function memoryViewerWritebackProjectionRecord(event) {
|
|
31
|
-
if ((event.type === "memory_writeback" || event.type === "memory_cli_add")
|
|
32
|
-
&& event.taskId
|
|
33
|
-
&& event.writebackStatus) {
|
|
34
|
-
return [{
|
|
35
|
-
kind: "task",
|
|
36
|
-
eventId: event.id,
|
|
37
|
-
timestamp: event.timestamp,
|
|
38
|
-
client: event.client,
|
|
39
|
-
...(event.sessionId ? { sessionId: event.sessionId } : {}),
|
|
40
|
-
...(event.turnId ? { turnId: event.turnId } : {}),
|
|
41
|
-
ok: event.ok,
|
|
42
|
-
taskId: event.taskId,
|
|
43
|
-
status: event.writebackStatus,
|
|
44
|
-
}];
|
|
45
|
-
}
|
|
46
|
-
if (event.type !== "memory_writeback_status" || !event.writebackStatus)
|
|
47
|
-
return [];
|
|
48
|
-
if (!event.originalEventId && (!event.sessionId || !event.taskId))
|
|
49
|
-
return [];
|
|
50
|
-
return [{
|
|
51
|
-
kind: "status",
|
|
52
|
-
eventId: event.id,
|
|
53
|
-
timestamp: event.timestamp,
|
|
54
|
-
client: event.client,
|
|
55
|
-
...(event.sessionId ? { sessionId: event.sessionId } : {}),
|
|
56
|
-
...(event.turnId ? { turnId: event.turnId } : {}),
|
|
57
|
-
...(event.taskId ? { taskId: event.taskId } : {}),
|
|
58
|
-
...(event.originalEventId ? { originalEventId: event.originalEventId } : {}),
|
|
59
|
-
completion: completeMemoryWritebackTask({
|
|
60
|
-
status: event.writebackStatus,
|
|
61
|
-
outcome: event.writebackOutcome,
|
|
62
|
-
savedMemoryCount: event.savedMemoryCount,
|
|
63
|
-
savedMemoryIds: event.savedMemoryIds,
|
|
64
|
-
savedMemories: event.savedMemories,
|
|
65
|
-
error: event.error,
|
|
66
|
-
}),
|
|
67
|
-
}];
|
|
68
|
-
}
|
|
69
|
-
function memoryViewerWritebackEventKey(event) {
|
|
70
|
-
return memoryWritebackTaskEventKey({
|
|
71
|
-
eventId: event.id,
|
|
72
|
-
client: event.client,
|
|
73
|
-
...(event.sessionId ? { sessionId: event.sessionId } : {}),
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
function applyMemoryWritebackTaskCompletion(event, completion, replaceError) {
|
|
77
|
-
const base = replaceError
|
|
78
|
-
? (({ error: _previousError, ...remaining }) => remaining)(event)
|
|
79
|
-
: event;
|
|
80
|
-
return {
|
|
81
|
-
...base,
|
|
82
|
-
ok: completion.ok,
|
|
83
|
-
writebackStatus: completion.status,
|
|
84
|
-
writebackOutcome: completion.outcome,
|
|
85
|
-
...(completion.savedMemories?.length ? {
|
|
86
|
-
content: completion.savedMemories.join("\n\n"),
|
|
87
|
-
savedMemories: completion.savedMemories,
|
|
88
|
-
} : {}),
|
|
89
|
-
...(completion.savedMemoryIds?.length ? {
|
|
90
|
-
savedMemoryIds: completion.savedMemoryIds,
|
|
91
|
-
} : {}),
|
|
92
|
-
...(completion.savedMemoryCount === undefined ? {} : {
|
|
93
|
-
savedMemoryCount: completion.savedMemoryCount,
|
|
94
|
-
}),
|
|
95
|
-
...(completion.error ? { error: completion.error } : {}),
|
|
96
|
-
};
|
|
97
|
-
}
|