@hyperdreamer/pi-webui 1.10.2 → 1.10.4
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 +68 -75
- 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",
|
|
@@ -11,6 +9,7 @@ const CATEGORY_CLASS = {
|
|
|
11
9
|
convention: "cat-teal",
|
|
12
10
|
};
|
|
13
11
|
const TRUNCATE_LENGTH = 120;
|
|
12
|
+
const MEMORY_GROUP_SELECTOR = "details.memory-group";
|
|
14
13
|
export function categoryBadgeLabel(category) {
|
|
15
14
|
return category ?? "uncategorized";
|
|
16
15
|
}
|
|
@@ -54,6 +53,24 @@ export function renderEntryHtml(entry) {
|
|
|
54
53
|
</details>
|
|
55
54
|
`;
|
|
56
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Returns the total count of memories for a workspace-panel badge, or
|
|
58
|
+
* undefined when no badge should be shown (loading, unavailable, error, or
|
|
59
|
+
* zero entries).
|
|
60
|
+
*/
|
|
61
|
+
export function memoryBadge(state) {
|
|
62
|
+
if (state.kind !== "data")
|
|
63
|
+
return undefined;
|
|
64
|
+
const total = state.globalEntries.length + state.projectEntries.length;
|
|
65
|
+
return total > 0 ? total : undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns true unless the provider has confirmed that memories are
|
|
69
|
+
* unavailable (e.g. older agent runtime without the memory endpoint).
|
|
70
|
+
*/
|
|
71
|
+
export function isMemoryPanelVisible(state) {
|
|
72
|
+
return state.kind !== "unavailable";
|
|
73
|
+
}
|
|
57
74
|
export function defineMemoryPanelElement() {
|
|
58
75
|
if (typeof customElements !== "undefined" && !customElements.get(memoryPanelTagName)) {
|
|
59
76
|
customElements.define(memoryPanelTagName, PiWebUiMemoryPanel);
|
|
@@ -71,98 +88,62 @@ const _BaseElement = typeof HTMLElement !== "undefined"
|
|
|
71
88
|
? HTMLElement
|
|
72
89
|
: _noopElementConstructor();
|
|
73
90
|
class PiWebUiMemoryPanel extends _BaseElement {
|
|
74
|
-
|
|
75
|
-
|
|
91
|
+
state = { kind: "loading" };
|
|
92
|
+
retry;
|
|
76
93
|
root;
|
|
77
|
-
loadController = new MemoryLoadController({ fetchGlobalMemories, fetchProjectMemories });
|
|
78
94
|
constructor() {
|
|
79
95
|
super();
|
|
80
96
|
this.root = this.attachShadow({ mode: "open" });
|
|
81
97
|
}
|
|
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();
|
|
98
|
+
/** Public setter for the workspace panel context (reserved for WorkspacePanel wiring). */
|
|
99
|
+
set context(_value) {
|
|
100
|
+
// Context is consumed by the plugin contribution (visible/badge/render),
|
|
101
|
+
// not by the panel element itself in the new architecture. Keep the
|
|
102
|
+
// setter so WorkspacePanel can assign it without errors.
|
|
96
103
|
}
|
|
97
|
-
/**
|
|
98
|
-
|
|
99
|
-
this.state
|
|
104
|
+
/** Accept the core-owned memory state and render synchronously. */
|
|
105
|
+
set memoryState(value) {
|
|
106
|
+
if (this.state === value)
|
|
107
|
+
return;
|
|
108
|
+
this.state = value;
|
|
100
109
|
this.render();
|
|
101
110
|
}
|
|
111
|
+
/** Retry callback wired to the core MemoryController. */
|
|
112
|
+
set onRetry(value) {
|
|
113
|
+
this.retry = value;
|
|
114
|
+
}
|
|
102
115
|
connectedCallback() {
|
|
103
116
|
this.render();
|
|
104
|
-
if (this.contextValue !== undefined) {
|
|
105
|
-
void this.loadMemories();
|
|
106
|
-
}
|
|
107
117
|
}
|
|
108
118
|
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;
|
|
119
|
+
// No timers to clean up — the core controller owns that lifetime.
|
|
142
120
|
}
|
|
143
121
|
render() {
|
|
144
|
-
|
|
122
|
+
const expandedGroups = this.expandedMemoryGroups();
|
|
123
|
+
this.root.innerHTML = `${panelStyles()}${renderPanelState(this.state, expandedGroups)}`;
|
|
145
124
|
this.attachEventListeners();
|
|
146
125
|
}
|
|
126
|
+
expandedMemoryGroups() {
|
|
127
|
+
const expanded = new Set();
|
|
128
|
+
for (const group of this.root.querySelectorAll(MEMORY_GROUP_SELECTOR)) {
|
|
129
|
+
const scope = group.dataset["memoryGroup"];
|
|
130
|
+
if (group.open && isMemoryGroupScope(scope))
|
|
131
|
+
expanded.add(scope);
|
|
132
|
+
}
|
|
133
|
+
return expanded;
|
|
134
|
+
}
|
|
147
135
|
attachEventListeners() {
|
|
136
|
+
const retry = this.retry;
|
|
137
|
+
if (retry === undefined)
|
|
138
|
+
return;
|
|
148
139
|
this.root.querySelector("button[data-retry]")?.addEventListener("click", () => {
|
|
149
|
-
|
|
140
|
+
retry();
|
|
150
141
|
});
|
|
151
142
|
}
|
|
152
143
|
}
|
|
153
|
-
function
|
|
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) {
|
|
144
|
+
export function renderPanelState(state, expandedGroups = new Set()) {
|
|
164
145
|
switch (state.kind) {
|
|
165
|
-
case "
|
|
146
|
+
case "unavailable":
|
|
166
147
|
return `<section class="empty">Select a workspace.</section>`;
|
|
167
148
|
case "loading":
|
|
168
149
|
return `<section class="viewer"><div class="spinner">Loading memories\u2026</div></section>`;
|
|
@@ -173,32 +154,39 @@ export function renderPanelState(state) {
|
|
|
173
154
|
</section>`;
|
|
174
155
|
case "data":
|
|
175
156
|
return `<section class="viewer">
|
|
157
|
+
${state.refreshError === undefined ? "" : `<div class="status warning">${escapeHtml(state.refreshError)}</div>`}
|
|
176
158
|
${renderMemoryGroupHtml({
|
|
159
|
+
scope: "global",
|
|
177
160
|
title: "Global memory",
|
|
178
161
|
entries: state.globalEntries,
|
|
179
162
|
emptyMessage: "No global memories found.",
|
|
163
|
+
open: expandedGroups.has("global"),
|
|
180
164
|
})}
|
|
181
165
|
${renderMemoryGroupHtml({
|
|
166
|
+
scope: "project",
|
|
182
167
|
title: "Project-specific memory",
|
|
183
168
|
entries: state.projectEntries,
|
|
184
169
|
emptyMessage: "No project-specific memories found.",
|
|
170
|
+
open: expandedGroups.has("project"),
|
|
185
171
|
...(state.projectUnavailableMessage === undefined
|
|
186
172
|
? {}
|
|
187
173
|
: { unavailableMessage: state.projectUnavailableMessage }),
|
|
188
174
|
})}
|
|
175
|
+
${state.refreshError === undefined ? "" : `<button class="secondary" data-retry style="margin-top:10px">Retry</button>`}
|
|
189
176
|
</section>`;
|
|
190
177
|
}
|
|
191
178
|
}
|
|
192
179
|
function renderMemoryGroupHtml(options) {
|
|
193
|
-
const unavailable = options.unavailableMessage !== undefined;
|
|
180
|
+
const unavailable = options.unavailableMessage !== undefined && options.entries.length === 0;
|
|
181
|
+
const hasPartialWarning = options.unavailableMessage !== undefined && !unavailable;
|
|
194
182
|
const count = `${String(options.entries.length)} ${options.entries.length === 1 ? "entry" : "entries"}`;
|
|
195
183
|
const body = unavailable
|
|
196
184
|
? `<p class="memory-group-message unavailable">${escapeHtml(options.unavailableMessage)}</p>`
|
|
197
185
|
: options.entries.length === 0
|
|
198
186
|
? `<p class="memory-group-message">${escapeHtml(options.emptyMessage)}</p>`
|
|
199
|
-
: options.entries.map((entry) => renderEntryHtml(entry)).join("")
|
|
187
|
+
: `${hasPartialWarning ? `<p class="memory-group-message warning">${escapeHtml(options.unavailableMessage)}</p>` : ""}${options.entries.map((entry) => renderEntryHtml(entry)).join("")}`;
|
|
200
188
|
return `
|
|
201
|
-
<details class="memory-group">
|
|
189
|
+
<details class="memory-group" data-memory-group="${options.scope}"${options.open ? " open" : ""}>
|
|
202
190
|
<summary>
|
|
203
191
|
<svg class="memory-group-chevron" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="m9 18 6-6-6-6"></path></svg>
|
|
204
192
|
<span class="memory-group-title">${escapeHtml(options.title)}</span>
|
|
@@ -208,6 +196,9 @@ function renderMemoryGroupHtml(options) {
|
|
|
208
196
|
</details>
|
|
209
197
|
`;
|
|
210
198
|
}
|
|
199
|
+
function isMemoryGroupScope(value) {
|
|
200
|
+
return value === "global" || value === "project";
|
|
201
|
+
}
|
|
211
202
|
function panelStyles() {
|
|
212
203
|
return `
|
|
213
204
|
<style>
|
|
@@ -228,12 +219,14 @@ function panelStyles() {
|
|
|
228
219
|
.memory-group-body { padding: 0 12px 12px; }
|
|
229
220
|
.memory-group-message { margin: 0; color: var(--pi-muted); }
|
|
230
221
|
.memory-group-message.unavailable { color: var(--pi-danger); }
|
|
222
|
+
.memory-group-message.warning { color: var(--pi-warning, #d97706); margin-bottom: 8px; }
|
|
231
223
|
.muted { color: var(--pi-muted); }
|
|
232
224
|
.spinner { display: flex; align-items: center; gap: 8px; color: var(--pi-muted); }
|
|
233
225
|
.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
226
|
@keyframes spin { to { transform: rotate(360deg); } }
|
|
235
227
|
.status { border: 1px solid var(--pi-border); border-radius: 8px; padding: 10px; }
|
|
236
228
|
.status.error { border-color: var(--pi-danger); color: var(--pi-danger); }
|
|
229
|
+
.status.warning { border-color: var(--pi-warning, #d97706); color: var(--pi-warning, #d97706); margin-bottom: 10px; }
|
|
237
230
|
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
231
|
button.secondary { border-color: var(--pi-border); background: var(--pi-surface); color: var(--pi-text); }
|
|
239
232
|
.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