claude-memory-admin 1.5.0 → 1.5.2
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 +17 -4
- package/package.json +1 -1
- package/public/api.mjs +26 -0
- package/public/app.mjs +57 -2323
- package/public/bus.mjs +7 -0
- package/public/dialog.mjs +84 -0
- package/public/dialogs/add-entry.mjs +69 -0
- package/public/dialogs/bulk-delete.mjs +58 -0
- package/public/dialogs/delete.mjs +114 -0
- package/public/dialogs/hook-editor.mjs +54 -0
- package/public/dialogs/merge.mjs +81 -0
- package/public/dialogs/move.mjs +43 -0
- package/public/dialogs/remember-path.mjs +65 -0
- package/public/dialogs/store-delete.mjs +64 -0
- package/public/dom.mjs +15 -0
- package/public/index.html +1 -1
- package/public/parts.mjs +58 -0
- package/public/state.mjs +22 -0
- package/public/store.mjs +116 -0
- package/public/styles.css +1 -1
- package/public/ui.mjs +41 -6
- package/public/views/context.mjs +120 -0
- package/public/views/header.mjs +126 -0
- package/public/views/health.mjs +21 -0
- package/public/views/index.mjs +122 -0
- package/public/views/issue.mjs +270 -0
- package/public/views/memories.mjs +183 -0
- package/public/views/path-check.mjs +102 -0
- package/public/views/prune.mjs +191 -0
- package/public/views/search.mjs +101 -0
- package/public/views/sessions.mjs +235 -0
- package/public/views/settings.mjs +120 -0
- package/public/views/stores.mjs +65 -0
- package/public/views/trash.mjs +37 -0
- package/src/sessions.mjs +69 -1
package/README.md
CHANGED
|
@@ -19,17 +19,26 @@ and this README were written by Claude Code, with a human directing the design
|
|
|
19
19
|
and reviewing what landed. Fitting for a tool about what Claude writes for
|
|
20
20
|
itself, and worth saying out loud.
|
|
21
21
|
|
|
22
|
-
<sub>Brought to you by [BitSpire](https://bitspire.ch/).</sub>
|
|
23
|
-
|
|
24
22
|
---
|
|
25
23
|
|
|
26
24
|
### Prune: see what MEMORY.md actually costs you
|
|
27
25
|
|
|
28
26
|

|
|
29
27
|
|
|
28
|
+
### Health: every problem found, worst first
|
|
29
|
+
|
|
30
|
+

|
|
31
|
+
|
|
30
32
|
### Graph: see how memories link to each other
|
|
31
33
|
|
|
32
|
-

|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
### Context: what every session loads before a project is even chosen
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
There is a light theme and a dark one, toggled with `t`; the Health shot above is
|
|
41
|
+
the light one and the rest are dark.
|
|
33
42
|
|
|
34
43
|
---
|
|
35
44
|
|
|
@@ -106,7 +115,11 @@ project is to the cliff, and makes it quick to get back under it.
|
|
|
106
115
|
memory exists can no longer be traced from anything on disk.
|
|
107
116
|
- **Sessions**: the transcripts beside a store, with the retention window drawn
|
|
108
117
|
the way MEMORY.md's cutoff is - each session a tick, the sweep line where it
|
|
109
|
-
falls.
|
|
118
|
+
falls. Under it, a tile per day shades how much work that day held, and
|
|
119
|
+
clicking one narrows the list to it; the grid spans the retention window
|
|
120
|
+
rather than a fixed year, because a year of empty tiles would read as *no
|
|
121
|
+
sessions* when it only means *already swept*. Titles are the ones Claude Code
|
|
122
|
+
generated, falling back to the session
|
|
110
123
|
slug and then the opening prompt; a session that names itself nowhere in the
|
|
111
124
|
part read is shown by id rather than given an invented name. Only the head of
|
|
112
125
|
each file is ever read, so a 200MB store of transcripts costs a quarter of a
|
package/package.json
CHANGED
package/public/api.mjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as ui from '/ui.mjs';
|
|
2
|
+
import { el, node } from '/dom.mjs';
|
|
3
|
+
|
|
4
|
+
export async function api(path, options) {
|
|
5
|
+
const response = await fetch(path, {
|
|
6
|
+
headers: { 'content-type': 'application/json' },
|
|
7
|
+
...options,
|
|
8
|
+
});
|
|
9
|
+
const data = await response.json().catch(() => ({ error: 'Bad response from server' }));
|
|
10
|
+
if (!response.ok) throw new Error(data.error || `Request failed (${response.status})`);
|
|
11
|
+
return data;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function toast(message, { error = false, action } = {}) {
|
|
15
|
+
const element = node('div', { class: ui.toast(error) });
|
|
16
|
+
element.append(document.createTextNode(message));
|
|
17
|
+
if (action) {
|
|
18
|
+
element.append(node('button', {
|
|
19
|
+
class: ui.toastAction,
|
|
20
|
+
text: action.label,
|
|
21
|
+
onclick: () => { element.remove(); action.run(); },
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
el('toast-root').append(element);
|
|
25
|
+
setTimeout(() => element.remove(), action ? 12000 : 4500);
|
|
26
|
+
}
|