@hyperdreamer/pi-webui 1.10.2 → 1.10.3
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/dist/client/assets/{CodeViewer-BdULrLxb.js → CodeViewer-Ddszn9bT.js} +1 -1
- package/dist/client/assets/{UnifiedDiffViewer-DDlEJGJ4.js → UnifiedDiffViewer-BIR0ksAc.js} +1 -1
- package/dist/client/assets/{index-Bq-PmNe2.js → index-BB7O_b10.js} +427 -405
- package/dist/client/index.html +1 -1
- package/dist/pi-webui-plugins/workspace-memory/memoryPanelElement.js +45 -72
- package/dist/pi-webui-plugins/workspace-memory/pi-webui-plugin.js +13 -2
- package/dist/server/memory/memoryCatalog.js +34 -0
- package/dist/server/memory/memoryCatalog.js.map +1 -0
- package/dist/server/memory/memoryProvider.js +2 -0
- package/dist/server/memory/memoryProvider.js.map +1 -0
- package/dist/server/memory/memoryRoutes.js +21 -0
- package/dist/server/memory/memoryRoutes.js.map +1 -1
- package/dist/server/memory/memoryService.js +5 -35
- package/dist/server/memory/memoryService.js.map +1 -1
- package/dist/server/memory/piHermesMemoryProvider.js +118 -0
- package/dist/server/memory/piHermesMemoryProvider.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +8 -0
- package/dist/shared/federatedRoutes.js +1 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/docs/plugins.md +2 -0
- package/package.json +1 -1
- package/dist/pi-webui-plugins/workspace-memory/memoryClient.js +0 -55
- package/dist/pi-webui-plugins/workspace-memory/memoryLoadController.js +0 -54
package/dist/client/index.html
CHANGED
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
html, body { margin: 0; height: 100%; overflow: hidden; background: var(--pi-bg); color: var(--pi-text); }
|
|
54
54
|
body { min-height: 100dvh; }
|
|
55
55
|
</style>
|
|
56
|
-
<script type="module" crossorigin src="./assets/index-
|
|
56
|
+
<script type="module" crossorigin src="./assets/index-BB7O_b10.js"></script>
|
|
57
57
|
<link rel="modulepreload" crossorigin href="./assets/vendor-editor-core-vUi74DnD.js">
|
|
58
58
|
<link rel="modulepreload" crossorigin href="./assets/vendor-editor-languages-DoaXUodB.js">
|
|
59
59
|
<link rel="modulepreload" crossorigin href="./assets/vendor-terminal-D8k4UKM2.js">
|
|
@@ -1,6 +1,4 @@
|
|
|
1
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
2
|
export const memoryPanelTagName = "pi-webui-memory-panel";
|
|
5
3
|
const CATEGORY_CLASS = {
|
|
6
4
|
"tool-quirk": "cat-amber",
|
|
@@ -54,6 +52,24 @@ export function renderEntryHtml(entry) {
|
|
|
54
52
|
</details>
|
|
55
53
|
`;
|
|
56
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns the total count of memories for a workspace-panel badge, or
|
|
57
|
+
* undefined when no badge should be shown (loading, unavailable, error, or
|
|
58
|
+
* zero entries).
|
|
59
|
+
*/
|
|
60
|
+
export function memoryBadge(state) {
|
|
61
|
+
if (state.kind !== "data")
|
|
62
|
+
return undefined;
|
|
63
|
+
const total = state.globalEntries.length + state.projectEntries.length;
|
|
64
|
+
return total > 0 ? total : undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns true unless the provider has confirmed that memories are
|
|
68
|
+
* unavailable (e.g. older agent runtime without the memory endpoint).
|
|
69
|
+
*/
|
|
70
|
+
export function isMemoryPanelVisible(state) {
|
|
71
|
+
return state.kind !== "unavailable";
|
|
72
|
+
}
|
|
57
73
|
export function defineMemoryPanelElement() {
|
|
58
74
|
if (typeof customElements !== "undefined" && !customElements.get(memoryPanelTagName)) {
|
|
59
75
|
customElements.define(memoryPanelTagName, PiWebUiMemoryPanel);
|
|
@@ -71,98 +87,50 @@ const _BaseElement = typeof HTMLElement !== "undefined"
|
|
|
71
87
|
? HTMLElement
|
|
72
88
|
: _noopElementConstructor();
|
|
73
89
|
class PiWebUiMemoryPanel extends _BaseElement {
|
|
74
|
-
|
|
75
|
-
|
|
90
|
+
state = { kind: "loading" };
|
|
91
|
+
retry;
|
|
76
92
|
root;
|
|
77
|
-
loadController = new MemoryLoadController({ fetchGlobalMemories, fetchProjectMemories });
|
|
78
93
|
constructor() {
|
|
79
94
|
super();
|
|
80
95
|
this.root = this.attachShadow({ mode: "open" });
|
|
81
96
|
}
|
|
82
|
-
/** Public setter for the workspace panel context. */
|
|
83
|
-
set context(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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();
|
|
97
|
+
/** Public setter for the workspace panel context (reserved for WorkspacePanel wiring). */
|
|
98
|
+
set context(_value) {
|
|
99
|
+
// Context is consumed by the plugin contribution (visible/badge/render),
|
|
100
|
+
// not by the panel element itself in the new architecture. Keep the
|
|
101
|
+
// setter so WorkspacePanel can assign it without errors.
|
|
96
102
|
}
|
|
97
|
-
/**
|
|
98
|
-
|
|
99
|
-
this.state =
|
|
103
|
+
/** Accept the core-owned memory state and render synchronously. */
|
|
104
|
+
set memoryState(value) {
|
|
105
|
+
this.state = value;
|
|
100
106
|
this.render();
|
|
101
107
|
}
|
|
108
|
+
/** Retry callback wired to the core MemoryController. */
|
|
109
|
+
set onRetry(value) {
|
|
110
|
+
this.retry = value;
|
|
111
|
+
}
|
|
102
112
|
connectedCallback() {
|
|
103
113
|
this.render();
|
|
104
|
-
if (this.contextValue !== undefined) {
|
|
105
|
-
void this.loadMemories();
|
|
106
|
-
}
|
|
107
114
|
}
|
|
108
115
|
disconnectedCallback() {
|
|
109
|
-
|
|
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;
|
|
116
|
+
// No timers to clean up — the core controller owns that lifetime.
|
|
142
117
|
}
|
|
143
118
|
render() {
|
|
144
119
|
this.root.innerHTML = `${panelStyles()}${renderPanelState(this.state)}`;
|
|
145
120
|
this.attachEventListeners();
|
|
146
121
|
}
|
|
147
122
|
attachEventListeners() {
|
|
123
|
+
const retry = this.retry;
|
|
124
|
+
if (retry === undefined)
|
|
125
|
+
return;
|
|
148
126
|
this.root.querySelector("button[data-retry]")?.addEventListener("click", () => {
|
|
149
|
-
|
|
127
|
+
retry();
|
|
150
128
|
});
|
|
151
129
|
}
|
|
152
130
|
}
|
|
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
131
|
export function renderPanelState(state) {
|
|
164
132
|
switch (state.kind) {
|
|
165
|
-
case "
|
|
133
|
+
case "unavailable":
|
|
166
134
|
return `<section class="empty">Select a workspace.</section>`;
|
|
167
135
|
case "loading":
|
|
168
136
|
return `<section class="viewer"><div class="spinner">Loading memories\u2026</div></section>`;
|
|
@@ -173,6 +141,7 @@ export function renderPanelState(state) {
|
|
|
173
141
|
</section>`;
|
|
174
142
|
case "data":
|
|
175
143
|
return `<section class="viewer">
|
|
144
|
+
${state.refreshError === undefined ? "" : `<div class="status warning">${escapeHtml(state.refreshError)}</div>`}
|
|
176
145
|
${renderMemoryGroupHtml({
|
|
177
146
|
title: "Global memory",
|
|
178
147
|
entries: state.globalEntries,
|
|
@@ -186,17 +155,19 @@ export function renderPanelState(state) {
|
|
|
186
155
|
? {}
|
|
187
156
|
: { unavailableMessage: state.projectUnavailableMessage }),
|
|
188
157
|
})}
|
|
158
|
+
${state.refreshError === undefined ? "" : `<button class="secondary" data-retry style="margin-top:10px">Retry</button>`}
|
|
189
159
|
</section>`;
|
|
190
160
|
}
|
|
191
161
|
}
|
|
192
162
|
function renderMemoryGroupHtml(options) {
|
|
193
|
-
const unavailable = options.unavailableMessage !== undefined;
|
|
163
|
+
const unavailable = options.unavailableMessage !== undefined && options.entries.length === 0;
|
|
164
|
+
const hasPartialWarning = options.unavailableMessage !== undefined && !unavailable;
|
|
194
165
|
const count = `${String(options.entries.length)} ${options.entries.length === 1 ? "entry" : "entries"}`;
|
|
195
166
|
const body = unavailable
|
|
196
167
|
? `<p class="memory-group-message unavailable">${escapeHtml(options.unavailableMessage)}</p>`
|
|
197
168
|
: options.entries.length === 0
|
|
198
169
|
? `<p class="memory-group-message">${escapeHtml(options.emptyMessage)}</p>`
|
|
199
|
-
: options.entries.map((entry) => renderEntryHtml(entry)).join("")
|
|
170
|
+
: `${hasPartialWarning ? `<p class="memory-group-message warning">${escapeHtml(options.unavailableMessage)}</p>` : ""}${options.entries.map((entry) => renderEntryHtml(entry)).join("")}`;
|
|
200
171
|
return `
|
|
201
172
|
<details class="memory-group">
|
|
202
173
|
<summary>
|
|
@@ -228,12 +199,14 @@ function panelStyles() {
|
|
|
228
199
|
.memory-group-body { padding: 0 12px 12px; }
|
|
229
200
|
.memory-group-message { margin: 0; color: var(--pi-muted); }
|
|
230
201
|
.memory-group-message.unavailable { color: var(--pi-danger); }
|
|
202
|
+
.memory-group-message.warning { color: var(--pi-warning, #d97706); margin-bottom: 8px; }
|
|
231
203
|
.muted { color: var(--pi-muted); }
|
|
232
204
|
.spinner { display: flex; align-items: center; gap: 8px; color: var(--pi-muted); }
|
|
233
205
|
.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; }
|
|
234
206
|
@keyframes spin { to { transform: rotate(360deg); } }
|
|
235
207
|
.status { border: 1px solid var(--pi-border); border-radius: 8px; padding: 10px; }
|
|
236
208
|
.status.error { border-color: var(--pi-danger); color: var(--pi-danger); }
|
|
209
|
+
.status.warning { border-color: var(--pi-warning, #d97706); color: var(--pi-warning, #d97706); margin-bottom: 10px; }
|
|
237
210
|
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; }
|
|
238
211
|
button.secondary { border-color: var(--pi-border); background: var(--pi-surface); color: var(--pi-text); }
|
|
239
212
|
.memory-entry { border: 1px solid var(--pi-border); border-radius: 8px; margin-bottom: 8px; }
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
// Generated from pi-webui-plugins/workspace-memory/pi-webui-plugin.ts. Do not edit directly.
|
|
2
|
-
import { defineMemoryPanelElement } from "./memoryPanelElement.js";
|
|
2
|
+
import { defineMemoryPanelElement, isMemoryPanelVisible, memoryBadge } from "./memoryPanelElement.js";
|
|
3
|
+
// The core supplies a context compatible with BundledMemoryContext;
|
|
4
|
+
// this is the narrowest boundary type without importing core internals.
|
|
5
|
+
function bundledMemoryContext(context) {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
7
|
+
return context;
|
|
8
|
+
}
|
|
3
9
|
const plugin = {
|
|
4
10
|
apiVersion: 1,
|
|
5
11
|
name: "Workspace Memory",
|
|
@@ -22,7 +28,12 @@ const plugin = {
|
|
|
22
28
|
</svg>
|
|
23
29
|
`,
|
|
24
30
|
order: 50,
|
|
25
|
-
|
|
31
|
+
visible: (context) => isMemoryPanelVisible(bundledMemoryContext(context).state.memory),
|
|
32
|
+
badge: (context) => memoryBadge(bundledMemoryContext(context).state.memory),
|
|
33
|
+
render: (context) => {
|
|
34
|
+
const memory = bundledMemoryContext(context);
|
|
35
|
+
return html `<pi-webui-memory-panel .context=${context} .memoryState=${memory.state.memory} .onRetry=${memory.onRefreshMemory}></pi-webui-memory-panel>`;
|
|
36
|
+
},
|
|
26
37
|
},
|
|
27
38
|
],
|
|
28
39
|
},
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export class MemoryCatalog {
|
|
2
|
+
constructor(providers) {
|
|
3
|
+
this.providers = providers;
|
|
4
|
+
}
|
|
5
|
+
async read(projectPath) {
|
|
6
|
+
const results = await Promise.all(this.providers.map(async (provider) => ({ provider, result: await provider.read({ projectPath }) })));
|
|
7
|
+
const globalEntries = [];
|
|
8
|
+
const projectEntries = [];
|
|
9
|
+
let projectUnavailableMessage;
|
|
10
|
+
let hasAvailableProvider = false;
|
|
11
|
+
for (const { provider, result } of results) {
|
|
12
|
+
if (result.kind === "unavailable")
|
|
13
|
+
continue;
|
|
14
|
+
hasAvailableProvider = true;
|
|
15
|
+
globalEntries.push(...namespaceEntries(provider.id, result.globalEntries));
|
|
16
|
+
projectEntries.push(...namespaceEntries(provider.id, result.projectEntries));
|
|
17
|
+
if (projectUnavailableMessage === undefined && result.projectUnavailableMessage !== undefined) {
|
|
18
|
+
projectUnavailableMessage = result.projectUnavailableMessage;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (!hasAvailableProvider)
|
|
22
|
+
return { kind: "unavailable" };
|
|
23
|
+
return {
|
|
24
|
+
kind: "data",
|
|
25
|
+
globalEntries,
|
|
26
|
+
projectEntries,
|
|
27
|
+
...(projectUnavailableMessage === undefined ? {} : { projectUnavailableMessage }),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function namespaceEntries(providerId, entries) {
|
|
32
|
+
return entries.map((entry) => ({ ...entry, id: `${providerId}:${entry.id}` }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=memoryCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryCatalog.js","sourceRoot":"","sources":["../../../src/server/memory/memoryCatalog.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IACxB,YAA6B,SAAoC;QAApC,cAAS,GAAT,SAAS,CAA2B;IAAG,CAAC;IAErE,KAAK,CAAC,IAAI,CAAC,WAAmB;QAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CACrG,CAAC;QACF,MAAM,aAAa,GAAkB,EAAE,CAAC;QACxC,MAAM,cAAc,GAAkB,EAAE,CAAC;QACzC,IAAI,yBAA6C,CAAC;QAClD,IAAI,oBAAoB,GAAG,KAAK,CAAC;QAEjC,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;gBAAE,SAAS;YAE5C,oBAAoB,GAAG,IAAI,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3E,cAAc,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC7E,IAAI,yBAAyB,KAAK,SAAS,IAAI,MAAM,CAAC,yBAAyB,KAAK,SAAS,EAAE,CAAC;gBAC9F,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,oBAAoB;YAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QAE1D,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,aAAa;YACb,cAAc;YACd,GAAG,CAAC,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,CAAC;SAClF,CAAC;IACJ,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,UAAkB,EAAE,OAAsB;IAClE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryProvider.js","sourceRoot":"","sources":["../../../src/server/memory/memoryProvider.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { ActiveAgentProfileAccessError, requireActiveAgentProfile } from "../activeAgentProfileProvider.js";
|
|
2
|
+
import { MemoryCatalog } from "./memoryCatalog.js";
|
|
3
|
+
import { PiHermesMemoryProvider } from "./piHermesMemoryProvider.js";
|
|
2
4
|
import { MemoryService } from "./memoryService.js";
|
|
3
5
|
export function registerMemoryRoutes(app, agentProfileProvider, prefix) {
|
|
4
6
|
app.get(`${prefix}/agent-memory/global`, async (request, reply) => {
|
|
@@ -35,5 +37,24 @@ export function registerMemoryRoutes(app, agentProfileProvider, prefix) {
|
|
|
35
37
|
throw error;
|
|
36
38
|
}
|
|
37
39
|
});
|
|
40
|
+
app.get(`${prefix}/agent-memory/snapshot`, async (request, reply) => {
|
|
41
|
+
reply.header("Cache-Control", "no-store");
|
|
42
|
+
const projectPath = request.query.projectPath;
|
|
43
|
+
if (projectPath === undefined || projectPath === "") {
|
|
44
|
+
return reply.code(400).send({ error: "projectPath query parameter is required" });
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const profile = await requireActiveAgentProfile(agentProfileProvider);
|
|
48
|
+
const catalog = new MemoryCatalog([new PiHermesMemoryProvider(profile.dir)]);
|
|
49
|
+
const response = await catalog.read(projectPath);
|
|
50
|
+
return response;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (error instanceof ActiveAgentProfileAccessError) {
|
|
54
|
+
return reply.code(503).send({ error: error.message });
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
38
59
|
}
|
|
39
60
|
//# sourceMappingURL=memoryRoutes.js.map
|
|
@@ -1 +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"}
|
|
1
|
+
{"version":3,"file":"memoryRoutes.js","sourceRoot":"","sources":["../../../src/server/memory/memoryRoutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { basename, join } from "node:path";
|
|
3
|
-
import { parseMemoryFile } from "./memoryFileParser.js";
|
|
1
|
+
import { PiHermesMemoryProvider } from "./piHermesMemoryProvider.js";
|
|
4
2
|
export class MemoryService {
|
|
5
3
|
constructor(agentDir) {
|
|
6
|
-
this.
|
|
4
|
+
this.provider = new PiHermesMemoryProvider(agentDir);
|
|
7
5
|
}
|
|
8
6
|
async globalEntries() {
|
|
9
|
-
const
|
|
10
|
-
|
|
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;
|
|
7
|
+
const result = await this.provider.read({});
|
|
8
|
+
return result.kind === "data" ? result.globalEntries : [];
|
|
27
9
|
}
|
|
28
10
|
async projectEntries(projectPath) {
|
|
29
|
-
|
|
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
|
-
}
|
|
11
|
+
return this.provider.readProjectEntries(projectPath);
|
|
42
12
|
}
|
|
43
13
|
}
|
|
44
14
|
//# sourceMappingURL=memoryService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryService.js","sourceRoot":"","sources":["../../../src/server/memory/memoryService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memoryService.js","sourceRoot":"","sources":["../../../src/server/memory/memoryService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,OAAO,aAAa;IAGxB,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;CACF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
|
+
import { parseMemoryFile } from "./memoryFileParser.js";
|
|
4
|
+
const PROJECT_UNAVAILABLE_MESSAGE = "Project-specific memory could not be loaded.";
|
|
5
|
+
const nodeFileAccess = {
|
|
6
|
+
readFile: (path) => readFile(path, "utf-8"),
|
|
7
|
+
isDirectory: async (path) => (await stat(path)).isDirectory(),
|
|
8
|
+
};
|
|
9
|
+
export class PiHermesMemoryProvider {
|
|
10
|
+
constructor(agentDir, fileAccess = nodeFileAccess) {
|
|
11
|
+
this.agentDir = agentDir;
|
|
12
|
+
this.fileAccess = fileAccess;
|
|
13
|
+
this.id = "pi-hermes-memory";
|
|
14
|
+
}
|
|
15
|
+
async read(input) {
|
|
16
|
+
const globalRootAvailable = await this.directoryExists(join(this.agentDir, "pi-hermes-memory"));
|
|
17
|
+
const project = await this.projectScope(input.projectPath);
|
|
18
|
+
if (!globalRootAvailable && !project.rootAvailable) {
|
|
19
|
+
if (project.probeError !== undefined)
|
|
20
|
+
throw project.probeError;
|
|
21
|
+
return { kind: "unavailable" };
|
|
22
|
+
}
|
|
23
|
+
const globalEntries = await this.globalEntries();
|
|
24
|
+
if (input.projectPath === undefined)
|
|
25
|
+
return { kind: "data", globalEntries, projectEntries: [] };
|
|
26
|
+
if (project.unavailableMessage !== undefined || project.memoryFilePath === undefined) {
|
|
27
|
+
return {
|
|
28
|
+
kind: "data",
|
|
29
|
+
globalEntries,
|
|
30
|
+
projectEntries: [],
|
|
31
|
+
projectUnavailableMessage: project.unavailableMessage ?? PROJECT_UNAVAILABLE_MESSAGE,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return {
|
|
36
|
+
kind: "data",
|
|
37
|
+
globalEntries,
|
|
38
|
+
projectEntries: await this.readOptionalEntries(project.memoryFilePath),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return {
|
|
43
|
+
kind: "data",
|
|
44
|
+
globalEntries,
|
|
45
|
+
projectEntries: [],
|
|
46
|
+
projectUnavailableMessage: PROJECT_UNAVAILABLE_MESSAGE,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async readProjectEntries(projectPath) {
|
|
51
|
+
const project = await this.projectScope(projectPath);
|
|
52
|
+
if (!project.rootAvailable || project.memoryFilePath === undefined)
|
|
53
|
+
return [];
|
|
54
|
+
try {
|
|
55
|
+
return await this.readOptionalEntries(project.memoryFilePath);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async globalEntries() {
|
|
62
|
+
const memoryPath = join(this.agentDir, "pi-hermes-memory", "MEMORY.md");
|
|
63
|
+
const failuresPath = join(this.agentDir, "pi-hermes-memory", "failures.md");
|
|
64
|
+
return [...await this.readOptionalEntries(memoryPath), ...await this.readOptionalEntries(failuresPath)];
|
|
65
|
+
}
|
|
66
|
+
async projectScope(projectPath) {
|
|
67
|
+
if (projectPath === undefined)
|
|
68
|
+
return { rootAvailable: false };
|
|
69
|
+
const projectName = basename(projectPath);
|
|
70
|
+
if (isUnsafeProjectName(projectName)) {
|
|
71
|
+
return { rootAvailable: false, unavailableMessage: PROJECT_UNAVAILABLE_MESSAGE };
|
|
72
|
+
}
|
|
73
|
+
const rootPath = join(this.agentDir, "projects-memory", projectName);
|
|
74
|
+
try {
|
|
75
|
+
return {
|
|
76
|
+
rootAvailable: await this.directoryExists(rootPath),
|
|
77
|
+
memoryFilePath: join(rootPath, "MEMORY.md"),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
rootAvailable: false,
|
|
83
|
+
unavailableMessage: PROJECT_UNAVAILABLE_MESSAGE,
|
|
84
|
+
probeError: toError(error),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async directoryExists(path) {
|
|
89
|
+
try {
|
|
90
|
+
return await this.fileAccess.isDirectory(path);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (isEnoent(error))
|
|
94
|
+
return false;
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async readOptionalEntries(path) {
|
|
99
|
+
try {
|
|
100
|
+
return parseMemoryFile(await this.fileAccess.readFile(path));
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (isEnoent(error))
|
|
104
|
+
return [];
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function toError(error) {
|
|
110
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
111
|
+
}
|
|
112
|
+
function isUnsafeProjectName(name) {
|
|
113
|
+
return name === "." || name === ".." || name.includes("/") || name.includes("\\");
|
|
114
|
+
}
|
|
115
|
+
function isEnoent(error) {
|
|
116
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=piHermesMemoryProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"piHermesMemoryProvider.js","sourceRoot":"","sources":["../../../src/server/memory/piHermesMemoryProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1225,6 +1225,14 @@ export interface MemoryEntry {
|
|
|
1225
1225
|
last?: string;
|
|
1226
1226
|
failureReason?: string;
|
|
1227
1227
|
}
|
|
1228
|
+
export type MemorySnapshotResponse = {
|
|
1229
|
+
kind: "unavailable";
|
|
1230
|
+
} | {
|
|
1231
|
+
kind: "data";
|
|
1232
|
+
globalEntries: MemoryEntry[];
|
|
1233
|
+
projectEntries: MemoryEntry[];
|
|
1234
|
+
projectUnavailableMessage?: string;
|
|
1235
|
+
};
|
|
1228
1236
|
export interface MemoryEntriesResponse {
|
|
1229
1237
|
entries: MemoryEntry[];
|
|
1230
1238
|
}
|
|
@@ -14,6 +14,7 @@ export const FEDERATED_HTTP_ROUTES = [
|
|
|
14
14
|
{ method: "POST", path: "/models-config/discover" },
|
|
15
15
|
{ method: "GET", path: "/session-defaults" },
|
|
16
16
|
{ method: "PUT", path: "/session-defaults" },
|
|
17
|
+
{ method: "GET", path: "/agent-memory/snapshot" },
|
|
17
18
|
{ method: "GET", path: "/skills" },
|
|
18
19
|
{ method: "PATCH", path: "/skills" },
|
|
19
20
|
{ method: "POST", path: "/skills/search", timeoutMs: SKILLS_OPERATION_PROXY_TIMEOUT_MS },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federatedRoutes.js","sourceRoot":"","sources":["../../src/shared/federatedRoutes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"federatedRoutes.js","sourceRoot":"","sources":["../../src/shared/federatedRoutes.ts"],"names":[],"mappings":"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"}
|
package/docs/plugins.md
CHANGED
|
@@ -208,6 +208,8 @@ Built-in plugins can be managed from **Settings → PI WEBUI plugins** or with t
|
|
|
208
208
|
|
|
209
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
210
|
|
|
211
|
+
The Memory tab is visible only when a compatible memory provider is detected for the active agent profile and project scope. A compatible provider with zero entries still shows the tab but omits the badge. A positive badge totals global and project-specific memory entries. PI WEBUI refreshes the badge immediately after a selected project or workspace change and then checks approximately every 30 seconds. This is polling; PI WEBUI does not promise instant or realtime updates.
|
|
212
|
+
|
|
211
213
|
Memory is bundled with PI WEBUI and enabled by default. To disable it, use **Settings → PI WEBUI plugins** or set:
|
|
212
214
|
|
|
213
215
|
```json
|
package/package.json
CHANGED
|
@@ -1,55 +0,0 @@
|
|
|
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
|
-
}
|