@jmfederico/pi-web 1.202607.1 → 1.202607.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.
Files changed (96) hide show
  1. package/README.md +8 -8
  2. package/dist/cli.js +17 -5
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client/assets/{CodeViewer-uASb28Y1.js → CodeViewer-CDVbMiN9.js} +1 -1
  5. package/dist/client/assets/{TerminalPanel-DfTmykFw.js → TerminalPanel-CTS1CgqF.js} +2 -2
  6. package/dist/client/assets/{UnifiedDiffViewer-laQN1x7P.js → UnifiedDiffViewer-Cqke12ZX.js} +1 -1
  7. package/dist/client/assets/index-LME0LfPb.js +4068 -0
  8. package/dist/client/index.html +1 -1
  9. package/dist/config.js +52 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/pi-web-plugins/info/infoInternals.js +208 -0
  12. package/dist/pi-web-plugins/info/pi-web-plugin.js +12 -15
  13. package/dist/pi-web-plugins/relays/markdownDocument.js +81 -0
  14. package/dist/pi-web-plugins/relays/package.json +9 -0
  15. package/dist/pi-web-plugins/relays/pi-web-plugin.js +44 -0
  16. package/dist/pi-web-plugins/relays/relayDiscovery.js +96 -0
  17. package/dist/pi-web-plugins/relays/relaysPanelElement.js +393 -0
  18. package/dist/pi-web-plugins/relays/vendor/README.md +24 -0
  19. package/dist/pi-web-plugins/relays/vendor/marked.esm.js +76 -0
  20. package/dist/plugin-api.d.ts +7 -1
  21. package/dist/server/configRoutes.js +11 -0
  22. package/dist/server/configRoutes.js.map +1 -1
  23. package/dist/server/diagnostics/nodePtyNativeModule.js +36 -0
  24. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -0
  25. package/dist/server/git/gitService.js +176 -5
  26. package/dist/server/git/gitService.js.map +1 -1
  27. package/dist/server/piWebStatus.js +6 -3
  28. package/dist/server/piWebStatus.js.map +1 -1
  29. package/dist/server/realtime/sessionEventHub.js +4 -0
  30. package/dist/server/realtime/sessionEventHub.js.map +1 -1
  31. package/dist/server/sessiond/sessionServiceDependencies.js +32 -0
  32. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -0
  33. package/dist/server/sessiond.js +127 -79
  34. package/dist/server/sessiond.js.map +1 -1
  35. package/dist/server/sessions/askUserTool.js +105 -0
  36. package/dist/server/sessions/askUserTool.js.map +1 -0
  37. package/dist/server/sessions/authService.js +58 -7
  38. package/dist/server/sessions/authService.js.map +1 -1
  39. package/dist/server/sessions/extensionDialogWaiters.js +76 -0
  40. package/dist/server/sessions/extensionDialogWaiters.js.map +1 -0
  41. package/dist/server/sessions/globalProviderPolicy.js +167 -0
  42. package/dist/server/sessions/globalProviderPolicy.js.map +1 -0
  43. package/dist/server/sessions/modelCatalogRefresher.js +192 -0
  44. package/dist/server/sessions/modelCatalogRefresher.js.map +1 -0
  45. package/dist/server/sessions/parentSessionLocator.js +75 -0
  46. package/dist/server/sessions/parentSessionLocator.js.map +1 -0
  47. package/dist/server/sessions/pendingAskStore.js +278 -0
  48. package/dist/server/sessions/pendingAskStore.js.map +1 -0
  49. package/dist/server/sessions/pendingExtensionDialogStore.js +196 -0
  50. package/dist/server/sessions/pendingExtensionDialogStore.js.map +1 -0
  51. package/dist/server/sessions/piSessionService.js +1226 -130
  52. package/dist/server/sessions/piSessionService.js.map +1 -1
  53. package/dist/server/sessions/plainTextTheme.js +112 -0
  54. package/dist/server/sessions/plainTextTheme.js.map +1 -0
  55. package/dist/server/sessions/sessionCommandService.js +68 -9
  56. package/dist/server/sessions/sessionCommandService.js.map +1 -1
  57. package/dist/server/sessions/sessionFileHeader.js +45 -0
  58. package/dist/server/sessions/sessionFileHeader.js.map +1 -0
  59. package/dist/server/sessions/sessionNotificationStore.js +484 -0
  60. package/dist/server/sessions/sessionNotificationStore.js.map +1 -0
  61. package/dist/server/sessions/sessionRoutes.js +273 -1
  62. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  63. package/dist/server/sessions/sessionTreeProjection.js +250 -0
  64. package/dist/server/sessions/sessionTreeProjection.js.map +1 -0
  65. package/dist/server/sessions/sessionUnreadStore.js +520 -0
  66. package/dist/server/sessions/sessionUnreadStore.js.map +1 -0
  67. package/dist/server/sessions/spawnSessionTool.js +2 -2
  68. package/dist/server/sessions/spawnSessionTool.js.map +1 -1
  69. package/dist/server/sessions/spawnSubsessionTool.js +10 -12
  70. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  71. package/dist/server/sessions/spawnTargetResolver.js +3 -16
  72. package/dist/server/sessions/spawnTargetResolver.js.map +1 -1
  73. package/dist/server/workspaces/gitWorktreeDiscovery.js +9 -0
  74. package/dist/server/workspaces/gitWorktreeDiscovery.js.map +1 -1
  75. package/dist/server/workspaces/projectWorkspaceCwds.js +22 -0
  76. package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -0
  77. package/dist/server/workspaces/workspaceService.js +15 -2
  78. package/dist/server/workspaces/workspaceService.js.map +1 -1
  79. package/dist/shared/activity.js +9 -1
  80. package/dist/shared/activity.js.map +1 -1
  81. package/dist/shared/apiTypes.d.ts +452 -2
  82. package/dist/shared/apiTypes.js +34 -0
  83. package/dist/shared/apiTypes.js.map +1 -1
  84. package/dist/shared/capabilities.js +9 -0
  85. package/dist/shared/capabilities.js.map +1 -1
  86. package/dist/shared/federatedRoutes.js +12 -0
  87. package/dist/shared/federatedRoutes.js.map +1 -1
  88. package/docs/config.md +84 -7
  89. package/docs/plugins.md +87 -17
  90. package/install.sh +1 -1
  91. package/package.json +9 -7
  92. package/dist/client/assets/index-Dhapi0oR.js +0 -3093
  93. package/dist/server/sessiond/sessionDaemonStartup.js +0 -49
  94. package/dist/server/sessiond/sessionDaemonStartup.js.map +0 -1
  95. package/dist/server/sessions/sessionArchiveMigration.js +0 -590
  96. package/dist/server/sessions/sessionArchiveMigration.js.map +0 -1
@@ -0,0 +1,250 @@
1
+ const SUMMARY_MAX_LENGTH = 360;
2
+ const SUMMARY_SOURCE_MAX_LENGTH = SUMMARY_MAX_LENGTH * 2;
3
+ const LABEL_MAX_LENGTH = 160;
4
+ const NAMED_FIELD_MAX_LENGTH = 80;
5
+ const TIMESTAMP_MAX_LENGTH = 80;
6
+ /**
7
+ * Project Pi's complete append-only session tree into the strict browser contract.
8
+ * Only explicitly selected plain-text fields leave this boundary.
9
+ */
10
+ export function projectSessionTree(roots, activeLeafId) {
11
+ const nodes = [];
12
+ const projectedIds = new Set();
13
+ const stack = [...roots].reverse();
14
+ const visitedNodes = new WeakSet();
15
+ while (stack.length > 0) {
16
+ const candidate = stack.pop();
17
+ if (candidate === undefined)
18
+ continue;
19
+ if (!isProjectableSessionTreeNode(candidate))
20
+ throw new Error("Pi returned a malformed session-tree node");
21
+ const node = candidate;
22
+ if (visitedNodes.has(node))
23
+ continue;
24
+ visitedNodes.add(node);
25
+ if (!isProjectableSessionEntry(node.entry)) {
26
+ throw new Error("Pi returned a malformed session-tree entry");
27
+ }
28
+ if (projectedIds.has(node.entry.id))
29
+ throw new Error("Pi returned duplicate session-tree entry IDs");
30
+ projectedIds.add(node.entry.id);
31
+ nodes.push(projectNode(node, node.entry));
32
+ for (let index = node.children.length - 1; index >= 0; index -= 1) {
33
+ const child = node.children[index];
34
+ if (child !== undefined)
35
+ stack.push(child);
36
+ }
37
+ }
38
+ if (activeLeafId !== null && (activeLeafId.trim() === "" || !projectedIds.has(activeLeafId))) {
39
+ throw new Error("Pi returned an invalid active session-tree leaf");
40
+ }
41
+ return {
42
+ nodes,
43
+ activeLeafId,
44
+ activePathIds: buildActivePath(nodes, activeLeafId),
45
+ };
46
+ }
47
+ function projectNode(node, entry) {
48
+ const projection = projectEntry(entry);
49
+ const timestamp = optionalPlainText(entry["timestamp"], TIMESTAMP_MAX_LENGTH);
50
+ const label = optionalPlainText(node.label, LABEL_MAX_LENGTH);
51
+ return {
52
+ id: entry.id,
53
+ parentId: entry.parentId,
54
+ kind: projection.kind,
55
+ summary: projection.summary,
56
+ ...(timestamp === undefined ? {} : { timestamp }),
57
+ ...(label === undefined ? {} : { label }),
58
+ };
59
+ }
60
+ function projectEntry(entry) {
61
+ switch (entry.type) {
62
+ case "message":
63
+ return projectMessage(entry["message"]);
64
+ case "custom_message":
65
+ return projectCustomMessage(entry);
66
+ case "compaction":
67
+ return { kind: "compaction", summary: summary(entry["summary"], "Compaction summary") };
68
+ case "branch_summary":
69
+ return { kind: "branch-summary", summary: summary(entry["summary"], "Branch summary") };
70
+ case "model_change":
71
+ return { kind: "model-change", summary: modelChangeSummary(entry) };
72
+ case "thinking_level_change":
73
+ return { kind: "thinking-level-change", summary: namedSummary("Thinking level", entry["thinkingLevel"], "Thinking level changed") };
74
+ case "session_info":
75
+ return { kind: "session-info", summary: namedSummary("Session name", entry["name"], "Session info changed") };
76
+ case "label":
77
+ return { kind: "label", summary: namedSummary("Label", entry["label"], "Label removed") };
78
+ case "custom":
79
+ return { kind: "custom", summary: namedSummary("Custom entry", entry["customType"], "Custom entry") };
80
+ default:
81
+ return { kind: "other", summary: namedSummary("Entry", entry.type, "Other session entry") };
82
+ }
83
+ }
84
+ function projectMessage(value) {
85
+ if (!isRecord(value))
86
+ return { kind: "other", summary: "Message" };
87
+ switch (value["role"]) {
88
+ case "user":
89
+ return { kind: "user", summary: summary(contentPreview(value["content"], true), "User message") };
90
+ case "assistant":
91
+ return { kind: "assistant", summary: assistantSummary(value) };
92
+ case "toolResult":
93
+ return { kind: "tool-result", summary: toolResultSummary(value) };
94
+ case "bashExecution":
95
+ return { kind: "bash", summary: namedSummary("Shell", value["command"], "Shell command") };
96
+ case "custom":
97
+ return projectCustomMessage(value);
98
+ case "compactionSummary":
99
+ return { kind: "compaction", summary: summary(value["summary"], "Compaction summary") };
100
+ case "branchSummary":
101
+ return { kind: "branch-summary", summary: summary(value["summary"], "Branch summary") };
102
+ default:
103
+ return { kind: "other", summary: "Message" };
104
+ }
105
+ }
106
+ function projectCustomMessage(value) {
107
+ if (value["display"] !== true)
108
+ return { kind: "custom-message", summary: "Hidden custom message" };
109
+ const customType = optionalPlainText(value["customType"], NAMED_FIELD_MAX_LENGTH);
110
+ const content = contentPreview(value["content"], true);
111
+ const prefix = customType === undefined ? "Custom message" : `Custom message (${customType})`;
112
+ return { kind: "custom-message", summary: summary(content === "" ? prefix : `${prefix}: ${content}`, prefix) };
113
+ }
114
+ function assistantSummary(message) {
115
+ const text = contentPreview(message["content"], false);
116
+ if (text !== "")
117
+ return summary(text, "Assistant response");
118
+ const toolNames = assistantToolNames(message["content"]);
119
+ if (toolNames.length > 0)
120
+ return summary(`Tool call: ${toolNames.join(", ")}`, "Assistant tool call");
121
+ if (message["stopReason"] === "error")
122
+ return "Assistant error";
123
+ if (message["stopReason"] === "aborted")
124
+ return "Assistant response aborted";
125
+ return "Assistant response";
126
+ }
127
+ function assistantToolNames(content) {
128
+ if (!Array.isArray(content))
129
+ return [];
130
+ const names = [];
131
+ for (const part of content) {
132
+ if (!isRecord(part) || part["type"] !== "toolCall")
133
+ continue;
134
+ const name = optionalPlainText(part["name"], NAMED_FIELD_MAX_LENGTH);
135
+ if (name !== undefined && !names.includes(name))
136
+ names.push(name);
137
+ if (names.length === 3)
138
+ break;
139
+ }
140
+ return names;
141
+ }
142
+ function toolResultSummary(message) {
143
+ const isError = message["isError"] === true;
144
+ const toolName = optionalPlainText(message["toolName"], NAMED_FIELD_MAX_LENGTH);
145
+ const prefix = toolName === undefined
146
+ ? isError ? "Tool error" : "Tool result"
147
+ : `${isError ? "Tool error" : "Tool result"} (${toolName})`;
148
+ const content = contentPreview(message["content"], true);
149
+ return summary(content === "" ? prefix : `${prefix}: ${content}`, prefix);
150
+ }
151
+ function modelChangeSummary(entry) {
152
+ const provider = optionalPlainText(entry["provider"], NAMED_FIELD_MAX_LENGTH);
153
+ const modelId = optionalPlainText(entry["modelId"], NAMED_FIELD_MAX_LENGTH);
154
+ if (provider !== undefined && modelId !== undefined)
155
+ return summary(`Model: ${provider}/${modelId}`, "Model changed");
156
+ return namedSummary("Model", modelId ?? provider, "Model changed");
157
+ }
158
+ function contentPreview(content, includeImageMarkers) {
159
+ const fragments = [];
160
+ let remaining = SUMMARY_SOURCE_MAX_LENGTH;
161
+ const append = (text) => {
162
+ if (remaining <= 0 || text === "")
163
+ return;
164
+ const fragment = text.slice(0, remaining);
165
+ fragments.push(fragment);
166
+ remaining -= fragment.length;
167
+ };
168
+ if (typeof content === "string") {
169
+ append(content);
170
+ }
171
+ else if (Array.isArray(content)) {
172
+ for (const part of content) {
173
+ if (!isRecord(part))
174
+ continue;
175
+ if (part["type"] === "text" && typeof part["text"] === "string")
176
+ append(part["text"]);
177
+ else if (includeImageMarkers && part["type"] === "image")
178
+ append("[image]");
179
+ if (remaining <= 0)
180
+ break;
181
+ }
182
+ }
183
+ return plainText(fragments.join(" "));
184
+ }
185
+ function namedSummary(prefix, value, fallback) {
186
+ const field = optionalPlainText(value, NAMED_FIELD_MAX_LENGTH);
187
+ return field === undefined ? fallback : summary(`${prefix}: ${field}`, fallback);
188
+ }
189
+ function summary(value, fallback) {
190
+ if (typeof value !== "string")
191
+ return fallback;
192
+ const normalized = plainText(value);
193
+ return normalized === "" ? fallback : truncate(normalized, SUMMARY_MAX_LENGTH);
194
+ }
195
+ function optionalPlainText(value, maxLength) {
196
+ if (typeof value !== "string")
197
+ return undefined;
198
+ const normalized = plainText(value);
199
+ return normalized === "" ? undefined : truncate(normalized, maxLength);
200
+ }
201
+ function plainText(value) {
202
+ // Browser previews should not retain non-whitespace C0/C1 controls.
203
+ // eslint-disable-next-line no-control-regex
204
+ return value.replace(/[\u0000-\u001f\u007f-\u009f]/gu, " ").replace(/\s+/gu, " ").trim();
205
+ }
206
+ function truncate(value, maxLength) {
207
+ if (value.length <= maxLength)
208
+ return value;
209
+ let end = maxLength - 1;
210
+ const finalCodeUnit = value.charCodeAt(end - 1);
211
+ if (finalCodeUnit >= 0xd800 && finalCodeUnit <= 0xdbff)
212
+ end -= 1;
213
+ return `${value.slice(0, end)}…`;
214
+ }
215
+ function buildActivePath(nodes, activeLeafId) {
216
+ if (activeLeafId === null)
217
+ return [];
218
+ const byId = new Map();
219
+ for (const node of nodes) {
220
+ if (!byId.has(node.id))
221
+ byId.set(node.id, node);
222
+ }
223
+ const path = [];
224
+ const visitedIds = new Set();
225
+ let currentId = activeLeafId;
226
+ while (currentId !== null && !visitedIds.has(currentId)) {
227
+ const node = byId.get(currentId);
228
+ if (node === undefined)
229
+ break;
230
+ visitedIds.add(currentId);
231
+ path.push(currentId);
232
+ currentId = node.parentId;
233
+ }
234
+ path.reverse();
235
+ return path;
236
+ }
237
+ function isProjectableSessionTreeNode(value) {
238
+ return isRecord(value) && Array.isArray(value["children"]);
239
+ }
240
+ function isProjectableSessionEntry(value) {
241
+ return isRecord(value)
242
+ && typeof value["id"] === "string"
243
+ && value["id"].trim() !== ""
244
+ && (value["parentId"] === null || (typeof value["parentId"] === "string" && value["parentId"].trim() !== ""))
245
+ && typeof value["type"] === "string";
246
+ }
247
+ function isRecord(value) {
248
+ return typeof value === "object" && value !== null;
249
+ }
250
+ //# sourceMappingURL=sessionTreeProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionTreeProjection.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionTreeProjection.ts"],"names":[],"mappings":"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"}