agent-memory-git 0.1.8__tar.gz → 0.1.9__tar.gz

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 (67) hide show
  1. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/PKG-INFO +1 -1
  2. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/pyproject.toml +1 -1
  3. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/pyproject.toml.orig +1 -1
  4. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/ui_server.py +8 -2
  5. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/app.css +5 -2
  6. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/main.js +2 -1
  7. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/profiles.js +15 -8
  8. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/shell.js +1 -2
  9. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/LICENSE +0 -0
  10. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/README.md +0 -0
  11. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/PROTOCOL.md +0 -0
  12. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/__init__.py +0 -0
  13. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/__main__.py +0 -0
  14. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/capture.py +0 -0
  15. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/cli.py +0 -0
  16. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/config.py +0 -0
  17. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/context.py +0 -0
  18. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/personal/2026/08/20260816-blog-publishing-k3qm.md +0 -0
  19. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/personal/2026/09/20260906-push-personal-repos-w8re.md +0 -0
  20. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/personal/2026/09/20260921-home-server-n2vb.md +0 -0
  21. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/personal/2026/10/20261004-options-first-7hcx.md +0 -0
  22. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/personal/2026/10/20261009-thesis-setup-fr6e.md +0 -0
  23. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/08/20260804-alex-profile-ujzd.md +0 -0
  24. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/08/20260804-reply-language-xdnc.md +0 -0
  25. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/08/20260812-ask-before-push-pf3d.md +0 -0
  26. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/08/20260820-tests-before-done-odzd.md +0 -0
  27. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/08/20260827-etl-orders-export-deadline-pft7.md +0 -0
  28. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/08/20260828-etl-dashboard-72ce.md +0 -0
  29. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/09/20260902-report-eta-is2j.md +0 -0
  30. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/09/20260908-shop-web-stripe-checkout-lgmx.md +0 -0
  31. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/09/20260910-shop-web-deploys-dn73.md +0 -0
  32. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/09/20260915-etl-parquet-partitioning-seh2.md +0 -0
  33. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/09/20260922-design-tokens-source-uvw7.md +0 -0
  34. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/10/20261002-shop-web-v3-freeze-5xtp.md +0 -0
  35. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo/work/2026/10/20261012-payments-runbook-4syw.md +0 -0
  36. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/demo.py +0 -0
  37. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/embed_worker.py +0 -0
  38. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/frontmatter.py +0 -0
  39. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/gitsync.py +0 -0
  40. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/hooks.py +0 -0
  41. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/importers.py +0 -0
  42. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/install.py +0 -0
  43. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/lint.py +0 -0
  44. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/profiles.py +0 -0
  45. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/select.py +0 -0
  46. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/sessions.py +0 -0
  47. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/store.py +0 -0
  48. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/ui.py +0 -0
  49. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/update.py +0 -0
  50. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/util.py +0 -0
  51. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/index.html +0 -0
  52. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/api.js +0 -0
  53. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/avatar.js +0 -0
  54. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/filters.js +0 -0
  55. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/format.js +0 -0
  56. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/h.js +0 -0
  57. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/icons.js +0 -0
  58. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/markdown.js +0 -0
  59. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/search.js +0 -0
  60. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/store.js +0 -0
  61. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/insights.js +0 -0
  62. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/list.js +0 -0
  63. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/memory.js +0 -0
  64. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/overlays.js +0 -0
  65. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/settings.js +0 -0
  66. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/webui/js/views/ui.js +0 -0
  67. {agent_memory_git-0.1.8 → agent_memory_git-0.1.9}/src/agent_memory/workdir.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-memory-git
3
- Version: 0.1.8
3
+ Version: 0.1.9
4
4
  Summary: Shared, git-backed memory for Claude Code and Codex.
5
5
  Keywords: claude-code,codex,memory,agents,git
6
6
  Author: Shichao Song
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agent-memory-git"
3
- version = "0.1.8"
3
+ version = "0.1.9"
4
4
  description = "Shared, git-backed memory for Claude Code and Codex."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agent-memory-git"
3
- version = "0.1.8"
3
+ version = "0.1.9"
4
4
  description = "Shared, git-backed memory for Claude Code and Codex."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -614,12 +614,18 @@ class Handler(BaseHTTPRequestHandler):
614
614
  self._run(lambda: getattr(self.server.app, method)(payload))
615
615
 
616
616
 
617
+ class Server(ThreadingHTTPServer):
618
+ # The page is some twenty modules the browser asks for at once; with socketserver's backlog of 5 the
619
+ # kernel resets the overflow, a module fails to load, and the page stays blank.
620
+ request_queue_size = 128
621
+
622
+
617
623
  def make_server(data_dir, port=8790, semantic=True):
618
624
  app = UiApp(data_dir, semantic=semantic)
619
625
  try:
620
- server = ThreadingHTTPServer(("127.0.0.1", port), Handler)
626
+ server = Server(("127.0.0.1", port), Handler)
621
627
  except OSError:
622
- server = ThreadingHTTPServer(("127.0.0.1", 0), Handler)
628
+ server = Server(("127.0.0.1", 0), Handler)
623
629
  port = server.server_address[1]
624
630
  server.hosts = {f"127.0.0.1:{port}", f"localhost:{port}"}
625
631
  # a restart after an update keeps the token, so the open page carries on
@@ -184,7 +184,8 @@ body.resizing { cursor: col-resize; user-select: none; }
184
184
  .rail-btn:hover { background: var(--hover); color: var(--ink); }
185
185
  .rail-btn[aria-current="page"] { background: var(--surface); color: var(--accent); box-shadow: 0 0 0 1px var(--line); }
186
186
  .rail-btn .i { width: 19px; height: 19px; }
187
- .rail-btn .badge { position: absolute; top: 8px; right: 8px; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 2px var(--panel); }
187
+ .rail-btn .badge, .rail-profile .badge { position: absolute; top: 8px; right: 8px; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 2px var(--panel); }
188
+ .rail-profile .badge { top: 5px; right: 5px; }
188
189
 
189
190
  /* the list is 372, 400 or 440px wide by window size, until its edge is dragged (--list-w);
190
191
  whatever the width, the open memory keeps at least 420px */
@@ -562,11 +563,13 @@ table.nums td:last-child { color: var(--ink); }
562
563
  .field-help { margin-top: 6px; font-size: 12.5px; color: var(--ink-3); }
563
564
  .pform-error { font-size: 13px; color: var(--bad); }
564
565
  .pform-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
565
- .rail-profile { display: grid; width: 40px; height: 40px; place-items: center; border-radius: 9px; transition: background-color .15s; }
566
+ .rail-profile { position: relative; display: grid; width: 40px; height: 40px; place-items: center; border-radius: 9px; transition: background-color .15s, box-shadow .15s; }
566
567
  .rail-profile:hover, .rail-profile:has(+ .menu:popover-open) { background: var(--hover); }
568
+ .rail-profile[aria-current="page"] { background: var(--surface); box-shadow: 0 0 0 1px var(--line); }
567
569
  .rail-profile:has(+ .menu:popover-open)::after { display: none; } /* the menu says it already */
568
570
  .rail-profile .pavatar { width: 26px; height: 26px; }
569
571
  .menu-item.tall { height: 36px; }
572
+ .menu-sep { height: 1px; margin: 4px -4px; background: var(--line); }
570
573
  .menu-note.pad { margin: 0; padding: 6px 8px 4px; }
571
574
  .tick-space { width: 14px; flex-shrink: 0; }
572
575
  @media (max-width: 639px) {
@@ -137,7 +137,8 @@ const ACTIONS = {
137
137
  },
138
138
  toggleHealth: () => { settings.healthOpen = !settings.healthOpen; app.changed(); },
139
139
  useProfile: (id) => { closeMenus(); app.useProfile(id); },
140
- manageProfiles: () => { closeMenus(); app.go("settings"); },
140
+ openSettings: () => { closeMenus(); app.go("settings"); },
141
+ profileNewFromMenu: () => { closeMenus(); app.go("settings"); ACTIONS.profileNew(); },
141
142
  profileNew: async () => { await app.newProfile(); setTimeout(() => document.getElementById("pf-folder")?.focus()); },
142
143
  profileCancel: () => app.cancelProfile(),
143
144
  profileRemove: () => app.removeProfile(),
@@ -1,6 +1,7 @@
1
1
  // Profiles: separate memory repositories, each its own folder and remote. Settings lists them above the
2
- // repository card, which shows the active one; the rail offers a quick switch once there are several. A
3
- // profile's name is picked for it when it is made, and its picture is drawn from the name.
2
+ // repository card, which shows the active one; the rail's last button is the active profile's picture, with
3
+ // Settings and a quick switch behind it. A profile's name is picked for it when it is made, and its picture is
4
+ // drawn from the name.
4
5
  import { avatar } from "../avatar.js";
5
6
  import { plural } from "../format.js";
6
7
  import { attrs, cx, html } from "../h.js";
@@ -64,15 +65,21 @@ export function profileNewCard() {
64
65
 
65
66
  // ---------------------------------------------------------------- the rail
66
67
 
67
- export function railProfile() {
68
+ /** The rail's last button: the active profile's picture, opening a menu with Settings and the profiles. Without
69
+ * profiles (AGENT_MEMORY_DATA picks the folder, or an older server) the rail keeps `fallback`, a Settings button. */
70
+ export function railProfile(fallback) {
68
71
  const list = shown(), now = active();
69
- if (list.length < 2 || !now) return "";
70
- return html`<button type="button" class="rail-profile" popovertarget="menu-profiles"${attrs({ "aria-label": `Profile: ${now.name}`, "data-tip": `Profile: ${now.name}`, "data-tip-side": "right" })}>${avatar(now.name)}</button>
72
+ if (!now) return fallback;
73
+ const update = app.update?.available ? app.update.latest : "";
74
+ const label = `${now.name} · Settings${update ? ` · version ${update} is out` : ""}`;
75
+ return html`<button type="button" class="rail-profile" popovertarget="menu-profiles"${attrs({ "aria-label": label, "data-tip": label, "data-tip-side": "right", "aria-current": app.page === "settings" ? "page" : null })}>${avatar(now.name)}${update ? html`<i class="badge" aria-hidden="true"></i>` : ""}</button>
71
76
  ${menu("menu-profiles", html`<div class="menu-list" role="menu">
72
- <div class="menu-note pad">${app.profiles.demo ? "The profile the page shows." : "New sessions use the profile picked here."}</div>
77
+ <button type="button" role="menuitem" class="menu-item" data-act="openSettings">${icon("settings-2")}<span class="grow">Settings</span>${update ? html`<span class="count accent">${update} is out</span>` : ""}</button>
78
+ <div class="menu-sep" role="separator"></div>
79
+ <div class="menu-note pad">${app.profiles.demo ? "Profile the page shows" : "Profile new sessions use"}</div>
73
80
  ${list.map((p) => html`<button type="button" role="menuitemradio"${attrs({ class: "menu-item tall", "aria-checked": String(p.active), "data-act": "useProfile", "data-arg": p.id })}>
74
81
  ${avatar(p.name, "sm")}<span class="grow truncate">${p.name}</span><span class="count">${plural(p.memories, "memory", "memories")}</span>${p.active ? icon("check", "accent") : html`<span class="tick-space"></span>`}
75
82
  </button>`)}
76
- </div>
77
- <div class="menu-foot"><button type="button" class="menu-wide" data-act="manageProfiles">Manage profiles</button></div>`, "", "side")}`;
83
+ <button type="button" role="menuitem" class="menu-item" data-act="profileNewFromMenu">${icon("plus")}<span class="grow">New profile</span></button>
84
+ </div>`, "", "side")}`;
78
85
  }
@@ -35,8 +35,7 @@ function rail() {
35
35
  </button>
36
36
  ${railButton("insights", "Insights", "chart-column")}
37
37
  <div class="spacer"></div>
38
- ${railProfile()}
39
- ${railButton("settings", settings, "settings-2")}
38
+ ${railProfile(railButton("settings", settings, "settings-2"))}
40
39
  </nav>`;
41
40
  }
42
41