@hyperdreamer/pi-webui 1.9.1 → 1.10.0

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.
@@ -0,0 +1,55 @@
1
+ // Generated from pi-webui-plugins/workspace-memory/memoryClient.ts. Do not edit directly.
2
+ function isRecord(value) {
3
+ return value !== null && typeof value === "object";
4
+ }
5
+ function parseMemoryEntry(value) {
6
+ if (!isRecord(value))
7
+ return undefined;
8
+ const id = value["id"];
9
+ const content = value["content"];
10
+ if (typeof id !== "string" || typeof content !== "string")
11
+ return undefined;
12
+ const entry = { id, content };
13
+ const category = value["category"];
14
+ if (typeof category === "string")
15
+ entry.category = category;
16
+ const created = value["created"];
17
+ if (typeof created === "string")
18
+ entry.created = created;
19
+ const last = value["last"];
20
+ if (typeof last === "string")
21
+ entry.last = last;
22
+ const failureReason = value["failureReason"];
23
+ if (typeof failureReason === "string")
24
+ entry.failureReason = failureReason;
25
+ return entry;
26
+ }
27
+ function parseEntries(data) {
28
+ if (!isRecord(data))
29
+ throw new Error("Invalid memory API response");
30
+ const entries = data["entries"];
31
+ if (!Array.isArray(entries))
32
+ throw new Error("Invalid memory API response");
33
+ const result = [];
34
+ for (const raw of entries) {
35
+ const parsed = parseMemoryEntry(raw);
36
+ if (parsed !== undefined)
37
+ result.push(parsed);
38
+ }
39
+ return result;
40
+ }
41
+ export async function fetchGlobalMemories() {
42
+ const response = await fetch("api/agent-memory/global");
43
+ if (!response.ok) {
44
+ throw new Error("Failed to load global memories: " + String(response.status));
45
+ }
46
+ return parseEntries(await response.json());
47
+ }
48
+ export async function fetchProjectMemories(projectPath) {
49
+ const params = new URLSearchParams({ projectPath });
50
+ const response = await fetch("api/agent-memory/project?" + String(params));
51
+ if (!response.ok) {
52
+ throw new Error("Failed to load project memories: " + String(response.status));
53
+ }
54
+ return parseEntries(await response.json());
55
+ }
@@ -0,0 +1,2 @@
1
+ // Generated from pi-webui-plugins/workspace-memory/memoryData.ts. Do not edit directly.
2
+ export {};
@@ -0,0 +1,54 @@
1
+ // Generated from pi-webui-plugins/workspace-memory/memoryLoadController.ts. Do not edit directly.
2
+ const PROJECT_UNAVAILABLE_MESSAGE = "Project-specific memory could not be loaded.";
3
+ /** Coordinates independently fetched memory scopes and suppresses superseded loads. */
4
+ export class MemoryLoadController {
5
+ fetchers;
6
+ generation = 0;
7
+ constructor(fetchers) {
8
+ this.fetchers = fetchers;
9
+ }
10
+ async load(projectPath) {
11
+ const loadGeneration = ++this.generation;
12
+ const globalLoad = invokeFetcher(() => this.fetchers.fetchGlobalMemories());
13
+ const projectLoad = invokeFetcher(() => this.fetchers.fetchProjectMemories(projectPath))
14
+ .then((entries) => ({ kind: "available", entries }))
15
+ .catch(() => ({ kind: "unavailable" }));
16
+ let globalEntries;
17
+ try {
18
+ globalEntries = await globalLoad;
19
+ }
20
+ catch (error) {
21
+ if (!this.isCurrent(loadGeneration))
22
+ return undefined;
23
+ return {
24
+ kind: "global-error",
25
+ message: error instanceof Error ? error.message : "Failed to load memories.",
26
+ };
27
+ }
28
+ const projectOutcome = await projectLoad;
29
+ if (!this.isCurrent(loadGeneration))
30
+ return undefined;
31
+ if (projectOutcome.kind === "unavailable") {
32
+ return {
33
+ kind: "loaded",
34
+ globalEntries,
35
+ projectEntries: [],
36
+ projectUnavailableMessage: PROJECT_UNAVAILABLE_MESSAGE,
37
+ };
38
+ }
39
+ return {
40
+ kind: "loaded",
41
+ globalEntries,
42
+ projectEntries: projectOutcome.entries,
43
+ };
44
+ }
45
+ invalidate() {
46
+ this.generation += 1;
47
+ }
48
+ isCurrent(loadGeneration) {
49
+ return this.generation === loadGeneration;
50
+ }
51
+ }
52
+ async function invokeFetcher(fetcher) {
53
+ return fetcher();
54
+ }
@@ -0,0 +1,255 @@
1
+ // Generated from pi-webui-plugins/workspace-memory/memoryPanelElement.ts. Do not edit directly.
2
+ import { fetchGlobalMemories, fetchProjectMemories } from "./memoryClient.js";
3
+ import { MemoryLoadController } from "./memoryLoadController.js";
4
+ export const memoryPanelTagName = "pi-webui-memory-panel";
5
+ const CATEGORY_CLASS = {
6
+ "tool-quirk": "cat-amber",
7
+ insight: "cat-blue",
8
+ correction: "cat-green",
9
+ failure: "cat-red",
10
+ preference: "cat-purple",
11
+ convention: "cat-teal",
12
+ };
13
+ const TRUNCATE_LENGTH = 120;
14
+ export function categoryBadgeLabel(category) {
15
+ return category ?? "uncategorized";
16
+ }
17
+ export function categoryBadgeClass(category) {
18
+ const key = categoryBadgeLabel(category);
19
+ return CATEGORY_CLASS[key] ?? "cat-gray";
20
+ }
21
+ export function truncateContent(content) {
22
+ if (content.length <= TRUNCATE_LENGTH)
23
+ return content;
24
+ return content.slice(0, TRUNCATE_LENGTH) + "\u2026";
25
+ }
26
+ function renderCategoryBadge(category) {
27
+ const label = categoryBadgeLabel(category);
28
+ const cls = categoryBadgeClass(category);
29
+ return `<span class="cat-badge ${cls}">${escapeHtml(label)}</span>`;
30
+ }
31
+ function renderDates(entry) {
32
+ const parts = [];
33
+ if (entry.created !== undefined) {
34
+ parts.push(`<span class="date-label">Created:</span> ${escapeHtml(entry.created)}`);
35
+ }
36
+ if (entry.last !== undefined) {
37
+ parts.push(`<span class="date-label">Last modified:</span> ${escapeHtml(entry.last)}`);
38
+ }
39
+ if (parts.length === 0)
40
+ return "";
41
+ return `<div class="entry-dates">${parts.join(" &middot; ")}</div>`;
42
+ }
43
+ export function renderEntryHtml(entry) {
44
+ const badge = renderCategoryBadge(entry.category);
45
+ const summaryText = truncateContent(entry.content);
46
+ const dates = renderDates(entry);
47
+ return `
48
+ <details class="memory-entry">
49
+ <summary>${badge}<span class="entry-summary">${escapeHtml(summaryText)}</span></summary>
50
+ <div class="entry-body">
51
+ <pre>${escapeHtml(entry.content)}</pre>
52
+ ${dates}
53
+ </div>
54
+ </details>
55
+ `;
56
+ }
57
+ export function defineMemoryPanelElement() {
58
+ if (typeof customElements !== "undefined" && !customElements.get(memoryPanelTagName)) {
59
+ customElements.define(memoryPanelTagName, PiWebUiMemoryPanel);
60
+ }
61
+ }
62
+ // Non-browser test environment fallback — keep the assertion off the ternary line.
63
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
64
+ class _NoopBase {
65
+ }
66
+ function _noopElementConstructor() {
67
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
68
+ return _NoopBase;
69
+ }
70
+ const _BaseElement = typeof HTMLElement !== "undefined"
71
+ ? HTMLElement
72
+ : _noopElementConstructor();
73
+ class PiWebUiMemoryPanel extends _BaseElement {
74
+ contextValue;
75
+ state = { kind: "no-workspace" };
76
+ root;
77
+ loadController = new MemoryLoadController({ fetchGlobalMemories, fetchProjectMemories });
78
+ constructor() {
79
+ super();
80
+ this.root = this.attachShadow({ mode: "open" });
81
+ }
82
+ /** Public setter for the workspace panel context. */
83
+ set context(value) {
84
+ const previousContext = this.contextValue;
85
+ this.contextValue = value;
86
+ if (isSameWorkspaceContext(previousContext, value))
87
+ return;
88
+ this.loadController.invalidate();
89
+ if (value === undefined) {
90
+ this.state = { kind: "no-workspace" };
91
+ this.render();
92
+ return;
93
+ }
94
+ if (this.isConnected)
95
+ void this.loadMemories();
96
+ }
97
+ /** Exposed for tests to inject state directly without network calls. */
98
+ setState(next) {
99
+ this.state = next;
100
+ this.render();
101
+ }
102
+ connectedCallback() {
103
+ this.render();
104
+ if (this.contextValue !== undefined) {
105
+ void this.loadMemories();
106
+ }
107
+ }
108
+ disconnectedCallback() {
109
+ this.loadController.invalidate();
110
+ }
111
+ async loadMemories() {
112
+ const context = this.contextValue;
113
+ if (context === undefined) {
114
+ this.state = { kind: "no-workspace" };
115
+ this.render();
116
+ return;
117
+ }
118
+ const workspacePath = context.workspace.path;
119
+ this.state = { kind: "loading" };
120
+ this.render();
121
+ const result = await this.loadController.load(workspacePath);
122
+ if (result === undefined || !this.isCurrentContext(context, workspacePath))
123
+ return;
124
+ this.state = result.kind === "global-error"
125
+ ? { kind: "error", message: result.message }
126
+ : {
127
+ kind: "data",
128
+ globalEntries: result.globalEntries,
129
+ projectEntries: result.projectEntries,
130
+ ...(result.projectUnavailableMessage === undefined
131
+ ? {}
132
+ : { projectUnavailableMessage: result.projectUnavailableMessage }),
133
+ };
134
+ this.render();
135
+ context.host.requestRender();
136
+ }
137
+ isCurrentContext(context, workspacePath) {
138
+ const currentContext = this.contextValue;
139
+ return currentContext !== undefined
140
+ && hasSameWorkspaceIdentity(currentContext, context)
141
+ && currentContext.workspace.path === workspacePath;
142
+ }
143
+ render() {
144
+ this.root.innerHTML = `${panelStyles()}${renderPanelState(this.state)}`;
145
+ this.attachEventListeners();
146
+ }
147
+ attachEventListeners() {
148
+ this.root.querySelector("button[data-retry]")?.addEventListener("click", () => {
149
+ void this.loadMemories();
150
+ });
151
+ }
152
+ }
153
+ function isSameWorkspaceContext(left, right) {
154
+ if (left === undefined || right === undefined)
155
+ return left === right;
156
+ return hasSameWorkspaceIdentity(left, right) && left.workspace.path === right.workspace.path;
157
+ }
158
+ function hasSameWorkspaceIdentity(left, right) {
159
+ return left.machine.id === right.machine.id
160
+ && left.workspace.projectId === right.workspace.projectId
161
+ && left.workspace.id === right.workspace.id;
162
+ }
163
+ export function renderPanelState(state) {
164
+ switch (state.kind) {
165
+ case "no-workspace":
166
+ return `<section class="empty">Select a workspace.</section>`;
167
+ case "loading":
168
+ return `<section class="viewer"><div class="spinner">Loading memories\u2026</div></section>`;
169
+ case "error":
170
+ return `<section class="viewer">
171
+ <div class="status error">${escapeHtml(state.message)}</div>
172
+ <button class="secondary" data-retry style="margin-top:10px">Retry</button>
173
+ </section>`;
174
+ case "data":
175
+ return `<section class="viewer">
176
+ ${renderMemoryGroupHtml({
177
+ title: "Global memory",
178
+ entries: state.globalEntries,
179
+ emptyMessage: "No global memories found.",
180
+ })}
181
+ ${renderMemoryGroupHtml({
182
+ title: "Project-specific memory",
183
+ entries: state.projectEntries,
184
+ emptyMessage: "No project-specific memories found.",
185
+ ...(state.projectUnavailableMessage === undefined
186
+ ? {}
187
+ : { unavailableMessage: state.projectUnavailableMessage }),
188
+ })}
189
+ </section>`;
190
+ }
191
+ }
192
+ function renderMemoryGroupHtml(options) {
193
+ const unavailable = options.unavailableMessage !== undefined;
194
+ const count = `${String(options.entries.length)} ${options.entries.length === 1 ? "entry" : "entries"}`;
195
+ const body = unavailable
196
+ ? `<p class="memory-group-message unavailable">${escapeHtml(options.unavailableMessage)}</p>`
197
+ : options.entries.length === 0
198
+ ? `<p class="memory-group-message">${escapeHtml(options.emptyMessage)}</p>`
199
+ : options.entries.map((entry) => renderEntryHtml(entry)).join("");
200
+ return `
201
+ <details class="memory-group" open>
202
+ <summary>
203
+ <span class="memory-group-title">${escapeHtml(options.title)}</span>
204
+ <span class="${unavailable ? "memory-group-status unavailable" : "memory-group-count"}">${unavailable ? "Unavailable" : count}</span>
205
+ </summary>
206
+ <div class="memory-group-body">${body}</div>
207
+ </details>
208
+ `;
209
+ }
210
+ function panelStyles() {
211
+ return `
212
+ <style>
213
+ :host { display: contents; }
214
+ .viewer { box-sizing: border-box; min-height: 0; overflow: auto; padding: 12px; }
215
+ .empty { padding: 16px; color: var(--pi-muted); }
216
+ .memory-group { border: 1px solid var(--pi-border); border-radius: 8px; margin-bottom: 10px; }
217
+ .memory-group:last-child { margin-bottom: 0; }
218
+ .memory-group[open] { background: var(--pi-surface); }
219
+ .memory-group summary { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 10px 12px; cursor: pointer; }
220
+ .memory-group-title { font-weight: 600; }
221
+ .memory-group-count, .memory-group-status { color: var(--pi-muted); font-size: 12px; white-space: nowrap; }
222
+ .memory-group-status.unavailable { color: var(--pi-danger); }
223
+ .memory-group-body { padding: 0 12px 12px; }
224
+ .memory-group-message { margin: 0; color: var(--pi-muted); }
225
+ .memory-group-message.unavailable { color: var(--pi-danger); }
226
+ .muted { color: var(--pi-muted); }
227
+ .spinner { display: flex; align-items: center; gap: 8px; color: var(--pi-muted); }
228
+ .spinner::before { content: ""; display: inline-block; width: 16px; height: 16px; border: 2px solid var(--pi-border); border-top-color: var(--pi-accent); border-radius: 50%; animation: spin 0.8s linear infinite; }
229
+ @keyframes spin { to { transform: rotate(360deg); } }
230
+ .status { border: 1px solid var(--pi-border); border-radius: 8px; padding: 10px; }
231
+ .status.error { border-color: var(--pi-danger); color: var(--pi-danger); }
232
+ button { border: 1px solid var(--pi-accent-border); border-radius: 7px; background: var(--pi-accent); color: var(--pi-bg); cursor: pointer; padding: 6px 10px; font: inherit; }
233
+ button.secondary { border-color: var(--pi-border); background: var(--pi-surface); color: var(--pi-text); }
234
+ .memory-entry { border: 1px solid var(--pi-border); border-radius: 8px; margin-bottom: 8px; }
235
+ .memory-entry[open] { background: var(--pi-surface); }
236
+ .memory-entry summary { display: flex; align-items: flex-start; gap: 8px; padding: 10px 12px; cursor: pointer; }
237
+ .cat-badge { display: inline-block; font-size: 11px; font-weight: 600; text-transform: uppercase; border-radius: 4px; padding: 2px 6px; white-space: nowrap; flex-shrink: 0; }
238
+ .cat-amber { background: #f59e0b20; color: #b45309; }
239
+ .cat-blue { background: #3b82f620; color: #1d4ed8; }
240
+ .cat-green { background: #10b98120; color: #047857; }
241
+ .cat-red { background: #ef444420; color: #b91c1c; }
242
+ .cat-purple { background: #8b5cf620; color: #6d28d9; }
243
+ .cat-teal { background: #14b8a620; color: #0f766e; }
244
+ .cat-gray { background: #6b728020; color: #4b5563; }
245
+ .entry-summary { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; }
246
+ .entry-body { padding: 0 12px 12px; }
247
+ .entry-body pre { margin: 0 0 8px; padding: 8px; border: 1px solid var(--pi-border-muted); border-radius: 6px; background: var(--pi-bg); color: var(--pi-text-secondary); font: 12px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; white-space: pre-wrap; word-break: break-word; }
248
+ .entry-dates { font-size: 12px; color: var(--pi-muted); }
249
+ .date-label { font-weight: 600; }
250
+ </style>
251
+ `;
252
+ }
253
+ function escapeHtml(value) {
254
+ return String(value).replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
255
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "@pi-webui/workspace-memory-plugin",
3
+ "private": true,
4
+ "piWebUi": {
5
+ "plugins": [
6
+ { "id": "workspace-memory", "module": "pi-webui-plugin.js" }
7
+ ]
8
+ }
9
+ }
@@ -0,0 +1,32 @@
1
+ // Generated from pi-webui-plugins/workspace-memory/pi-webui-plugin.ts. Do not edit directly.
2
+ import { defineMemoryPanelElement } from "./memoryPanelElement.js";
3
+ const plugin = {
4
+ apiVersion: 1,
5
+ name: "Workspace Memory",
6
+ activate: ({ html, svg }) => {
7
+ defineMemoryPanelElement();
8
+ return {
9
+ contributions: {
10
+ workspacePanels: [
11
+ {
12
+ id: "workspace.memory",
13
+ title: "Memory",
14
+ icon: svg `
15
+ <svg data-icon="brain" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
16
+ <path d="M12 18V5"></path>
17
+ <path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"></path>
18
+ <path d="M17.6 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.6 1.5"></path>
19
+ <path d="M17.6 17.5A3 3 0 1 1 12 19a3 3 0 1 1-5.6-1.5"></path>
20
+ <path d="M17.6 6.5a3 3 0 0 1 1.4 5.5 3 3 0 0 1-1.4 5.5"></path>
21
+ <path d="M6.4 17.5A3 3 0 0 1 5 12a3 3 0 0 1 1.4-5.5"></path>
22
+ </svg>
23
+ `,
24
+ order: 50,
25
+ render: (context) => html `<pi-webui-memory-panel .context=${context}></pi-webui-memory-panel>`,
26
+ },
27
+ ],
28
+ },
29
+ };
30
+ },
31
+ };
32
+ export default plugin;
@@ -30,6 +30,7 @@ import { createPiWebUiStatusCache } from "./piWebUiStatusCache.js";
30
30
  import { getPiWebUiRuntime, getPiWebUiStatus, getPiWebUiVersionStatus } from "./piWebUiStatus.js";
31
31
  import { ActiveAgentProfileAccessError, requireActiveAgentProfile, SessionDaemonActiveAgentProfileProvider, } from "./activeAgentProfileProvider.js";
32
32
  import { MachineService } from "./machines/machineService.js";
33
+ import { registerMemoryRoutes } from "./memory/memoryRoutes.js";
33
34
  import { registerMachineRoutes } from "./machines/machineRoutes.js";
34
35
  import { registerMachineProxyRoutes } from "./machines/machineProxyRoutes.js";
35
36
  import { proxyMachinePluginAsset, registerMachinePluginProxyRoutes } from "./machines/machinePluginProxyRoutes.js";
@@ -184,6 +185,8 @@ export async function buildApp(deps = {}) {
184
185
  const invalidatingConfigService = invalidatePiWebUiStatusOnWrite(configService, piWebUiStatusCache);
185
186
  registerConfigRoutes(app, invalidatingConfigService);
186
187
  registerLocalMachineConfigRoutes(app, invalidatingConfigService);
188
+ registerMemoryRoutes(app, agentProfileProvider, "/api");
189
+ registerMemoryRoutes(app, agentProfileProvider, "/api/machines/local");
187
190
  registerMachineRoutes(app, machines);
188
191
  registerMachinePluginProxyRoutes(app, machines);
189
192
  registerLocalProjectRoutes(app, projects, workspaces, "/api", { config: configService });
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { createHash } from "node:crypto";
2
+ /**
3
+ * Parse a pi-hermes-memory file into structured entries.
4
+ * Entries are delimited by § on its own line.
5
+ * Empty entries are skipped.
6
+ */
7
+ export function parseMemoryFile(content) {
8
+ // Split on § as a line delimiter — handle both \n§\n and leading/trailing §
9
+ const rawEntries = content.split(/\n?^\u00A7\n?/gm);
10
+ return rawEntries
11
+ .map((entry) => entry.trim())
12
+ .filter((entry) => entry !== "")
13
+ .map(parseEntry);
14
+ }
15
+ function parseEntry(raw) {
16
+ const id = createHash("sha256").update(raw).digest("hex").slice(0, 8);
17
+ // Extract category prefix: [category]
18
+ const categoryExec = /^\[([^\]]+)\]\s*/.exec(raw);
19
+ const category = categoryExec?.[1];
20
+ // Extract metadata comment: <!-- created=YYYY-MM-DD, last=YYYY-MM-DD -->
21
+ const metadataExec = /<!--\s*created=(\S+),\s*last=(\S+)\s*-->/.exec(raw);
22
+ const created = metadataExec?.[1];
23
+ const last = metadataExec?.[2];
24
+ // Extract failure reason suffix: — Failed: <reason>
25
+ // Stop before an optional trailing metadata comment.
26
+ const failureExec = /\u2014\s*Failed:\s*(.+?)\s*(?:<!--.*)?$/m.exec(raw);
27
+ const failureRaw = failureExec?.[1]?.trim();
28
+ const failureReason = failureRaw !== undefined && failureRaw !== "" ? failureRaw : undefined;
29
+ return {
30
+ id,
31
+ content: raw,
32
+ ...(category !== undefined ? { category } : {}),
33
+ ...(created !== undefined ? { created } : {}),
34
+ ...(last !== undefined ? { last } : {}),
35
+ ...(failureReason !== undefined ? { failureReason } : {}),
36
+ };
37
+ }
38
+ //# sourceMappingURL=memoryFileParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryFileParser.js","sourceRoot":"","sources":["../../../src/server/memory/memoryFileParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWzC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,4EAA4E;IAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpD,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;SAC/B,GAAG,CAAC,UAAU,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtE,sCAAsC;IACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAuB,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvD,yEAAyE;IACzE,MAAM,YAAY,GAAG,0CAA0C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAuB,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAuB,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,oDAAoD;IACpD,qDAAqD;IACrD,MAAM,WAAW,GAAG,0CAA0C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAuB,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjH,OAAO;QACL,EAAE;QACF,OAAO,EAAE,GAAG;QACZ,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { ActiveAgentProfileAccessError, requireActiveAgentProfile } from "../activeAgentProfileProvider.js";
2
+ import { MemoryService } from "./memoryService.js";
3
+ export function registerMemoryRoutes(app, agentProfileProvider, prefix) {
4
+ app.get(`${prefix}/agent-memory/global`, async (request, reply) => {
5
+ try {
6
+ const profile = await requireActiveAgentProfile(agentProfileProvider);
7
+ const service = new MemoryService(profile.dir);
8
+ const entries = await service.globalEntries();
9
+ const response = { entries };
10
+ return response;
11
+ }
12
+ catch (error) {
13
+ if (error instanceof ActiveAgentProfileAccessError) {
14
+ return reply.code(503).send({ error: error.message });
15
+ }
16
+ throw error;
17
+ }
18
+ });
19
+ app.get(`${prefix}/agent-memory/project`, async (request, reply) => {
20
+ const projectPath = request.query.projectPath;
21
+ if (projectPath === undefined || projectPath === "") {
22
+ return reply.code(400).send({ error: "projectPath query parameter is required" });
23
+ }
24
+ try {
25
+ const profile = await requireActiveAgentProfile(agentProfileProvider);
26
+ const service = new MemoryService(profile.dir);
27
+ const entries = await service.projectEntries(projectPath);
28
+ const response = { entries };
29
+ return response;
30
+ }
31
+ catch (error) {
32
+ if (error instanceof ActiveAgentProfileAccessError) {
33
+ return reply.code(503).send({ error: error.message });
34
+ }
35
+ throw error;
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=memoryRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryRoutes.js","sourceRoot":"","sources":["../../../src/server/memory/memoryRoutes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAmC,MAAM,kCAAkC,CAAC;AAC7I,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,UAAU,oBAAoB,CAClC,GAAoB,EACpB,oBAAgD,EAChD,MAAc;IAEd,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAA0B,EAAE,OAAO,EAAE,CAAC;YACpD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6BAA6B,EAAE,CAAC;gBACnD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CACL,GAAG,MAAM,uBAAuB,EAChC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;QAE9C,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAA0B,EAAE,OAAO,EAAE,CAAC;YACpD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6BAA6B,EAAE,CAAC;gBACnD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { basename, join } from "node:path";
3
+ import { parseMemoryFile } from "./memoryFileParser.js";
4
+ export class MemoryService {
5
+ constructor(agentDir) {
6
+ this.agentDir = agentDir;
7
+ }
8
+ async globalEntries() {
9
+ const results = [];
10
+ const memPath = join(this.agentDir, "pi-hermes-memory", "MEMORY.md");
11
+ try {
12
+ const content = await readFile(memPath, "utf-8");
13
+ results.push(...parseMemoryFile(content));
14
+ }
15
+ catch {
16
+ // File missing — skip
17
+ }
18
+ const failuresPath = join(this.agentDir, "pi-hermes-memory", "failures.md");
19
+ try {
20
+ const content = await readFile(failuresPath, "utf-8");
21
+ results.push(...parseMemoryFile(content));
22
+ }
23
+ catch {
24
+ // File missing — skip
25
+ }
26
+ return results;
27
+ }
28
+ async projectEntries(projectPath) {
29
+ const projectName = basename(projectPath);
30
+ // Path safety: reject names that could escape the projects-memory directory
31
+ if (projectName.includes("/") || projectName.includes("\\") || projectName === ".." || projectName === ".") {
32
+ return [];
33
+ }
34
+ const filePath = join(this.agentDir, "projects-memory", projectName, "MEMORY.md");
35
+ try {
36
+ const content = await readFile(filePath, "utf-8");
37
+ return parseMemoryFile(content);
38
+ }
39
+ catch {
40
+ return [];
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=memoryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryService.js","sourceRoot":"","sources":["../../../src/server/memory/memoryService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAA0B,MAAM,uBAAuB,CAAC;AAEhF,MAAM,OAAO,aAAa;IACxB,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEjD,KAAK,CAAC,aAAa;QACjB,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;QAC5E,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB;QACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE1C,4EAA4E;QAC5E,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;YAC3G,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAClF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -1217,6 +1217,17 @@ export interface SystemMetricsResponse {
1217
1217
  memory: SystemMemoryInfo;
1218
1218
  network: SystemNetworkMetrics;
1219
1219
  }
1220
+ export interface MemoryEntry {
1221
+ id: string;
1222
+ content: string;
1223
+ category?: string;
1224
+ created?: string;
1225
+ last?: string;
1226
+ failureReason?: string;
1227
+ }
1228
+ export interface MemoryEntriesResponse {
1229
+ entries: MemoryEntry[];
1230
+ }
1220
1231
  export interface SystemInfoResponse {
1221
1232
  generatedAt: string;
1222
1233
  os: SystemOsInfo;
package/docs/plugins.md CHANGED
@@ -201,6 +201,23 @@ PI WEBUI ships core, discoverable plugins in the main `@hyperdreamer/pi-webui` n
201
201
 
202
202
  Built-in plugins can be managed from **Settings → PI WEBUI plugins** or with the top-level `plugins` config key.
203
203
 
204
+ ### Memory
205
+
206
+ **Plugin id:** `workspace-memory`
207
+ **What it does:** adds a read-only **Memory** workspace tab. It reads `pi-hermes-memory`-compatible data through PI WEBUI and never writes, creates, edits, or deletes memories.
208
+
209
+ The tab shows independently collapsible **Global memory** and **Project-specific memory** groups. Project-specific memory contains entries only for the selected workspace project. Empty or missing memory data appears as a scoped empty state. An unavailable project-specific request displays a scoped **Project-specific unavailable** state while **Global memory** remains available. A failed global-memory request is presented as a panel-level retryable error.
210
+
211
+ Memory is bundled with PI WEBUI and enabled by default. To disable it, use **Settings → PI WEBUI plugins** or set:
212
+
213
+ ```json
214
+ {
215
+ "plugins": {
216
+ "workspace-memory": { "enabled": false }
217
+ }
218
+ }
219
+ ```
220
+
204
221
  ### Updates
205
222
 
206
223
  **Plugin id:** `updates`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperdreamer/pi-webui",
3
- "version": "1.9.1",
3
+ "version": "1.10.0",
4
4
  "description": "Web UI for persistent Pi Coding Agent sessions in real workspaces.",
5
5
  "license": "MIT",
6
6
  "author": "Federico Jaramillo Martinez and HyperDreamer",