pi-forge 1.3.5 → 1.3.7

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 (69) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/{CodeMirrorEditor-iLMm0PBW.js → CodeMirrorEditor-BklpCqAo.js} +2 -2
  3. package/dist/client/assets/{CodeMirrorEditor-iLMm0PBW.js.map → CodeMirrorEditor-BklpCqAo.js.map} +1 -1
  4. package/dist/client/assets/index-CfPBiBJW.css +1 -0
  5. package/dist/client/assets/{index-ChVHn55j.js → index-EU82nCUh.js} +85 -84
  6. package/dist/client/assets/index-EU82nCUh.js.map +1 -0
  7. package/dist/client/index.html +2 -2
  8. package/dist/client/sw.js +1 -1
  9. package/dist/client/sw.js.map +1 -1
  10. package/dist/server/cli.js +122 -1
  11. package/dist/server/cli.js.map +1 -1
  12. package/dist/server/config.js +69 -4
  13. package/dist/server/config.js.map +1 -1
  14. package/dist/server/git-runner.js +57 -0
  15. package/dist/server/git-runner.js.map +1 -1
  16. package/dist/server/index.js +2 -0
  17. package/dist/server/index.js.map +1 -1
  18. package/dist/server/ldap-auth.js +103 -0
  19. package/dist/server/ldap-auth.js.map +1 -0
  20. package/dist/server/lifecycle-notifications.js +44 -0
  21. package/dist/server/lifecycle-notifications.js.map +1 -0
  22. package/dist/server/mcp/manager.js +40 -5
  23. package/dist/server/mcp/manager.js.map +1 -1
  24. package/dist/server/mcp/tool-bridge.js +12 -8
  25. package/dist/server/mcp/tool-bridge.js.map +1 -1
  26. package/dist/server/orchestration/config.js +10 -36
  27. package/dist/server/orchestration/config.js.map +1 -1
  28. package/dist/server/orchestration/event-bridge.js +80 -28
  29. package/dist/server/orchestration/event-bridge.js.map +1 -1
  30. package/dist/server/orchestration/inbox.js +157 -124
  31. package/dist/server/orchestration/inbox.js.map +1 -1
  32. package/dist/server/orchestration/init.js +1 -1
  33. package/dist/server/orchestration/store.js +44 -4
  34. package/dist/server/orchestration/store.js.map +1 -1
  35. package/dist/server/orchestration/tools.js +51 -132
  36. package/dist/server/orchestration/tools.js.map +1 -1
  37. package/dist/server/orchestration/types.js +8 -4
  38. package/dist/server/orchestration/types.js.map +1 -1
  39. package/dist/server/orchestration/worker-lifecycle.js +68 -0
  40. package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
  41. package/dist/server/routes/_schemas.js +6 -0
  42. package/dist/server/routes/_schemas.js.map +1 -1
  43. package/dist/server/routes/auth.js +31 -9
  44. package/dist/server/routes/auth.js.map +1 -1
  45. package/dist/server/routes/control.js +52 -13
  46. package/dist/server/routes/control.js.map +1 -1
  47. package/dist/server/routes/git.js +227 -216
  48. package/dist/server/routes/git.js.map +1 -1
  49. package/dist/server/routes/health.js +3 -4
  50. package/dist/server/routes/health.js.map +1 -1
  51. package/dist/server/routes/orchestration.js +41 -15
  52. package/dist/server/routes/orchestration.js.map +1 -1
  53. package/dist/server/routes/prompt.js +40 -2
  54. package/dist/server/routes/prompt.js.map +1 -1
  55. package/dist/server/routes/sessions.js +142 -18
  56. package/dist/server/routes/sessions.js.map +1 -1
  57. package/dist/server/routes/stream.js +77 -2
  58. package/dist/server/routes/stream.js.map +1 -1
  59. package/dist/server/routes/terminal.js +18 -7
  60. package/dist/server/routes/terminal.js.map +1 -1
  61. package/dist/server/session-registry.js +159 -32
  62. package/dist/server/session-registry.js.map +1 -1
  63. package/dist/server/sse-bridge.js +58 -29
  64. package/dist/server/sse-bridge.js.map +1 -1
  65. package/dist/server/subagents-external.js +319 -0
  66. package/dist/server/subagents-external.js.map +1 -0
  67. package/package.json +5 -4
  68. package/dist/client/assets/index-ChVHn55j.js.map +0 -1
  69. package/dist/client/assets/index-D311Lak3.css +0 -1
@@ -3,6 +3,7 @@ import { getSession } from "./session-registry.js";
3
3
  import { getPendingForSession as getPendingAskQuestions, subscribe as subscribeAskQuestions, } from "./ask-user-question/registry.js";
4
4
  import { peekCached as peekCachedTodo, subscribe as subscribeTodo } from "./todo/store.js";
5
5
  import { processManager } from "./processes/manager.js";
6
+ import { sendCustomLifecycleMessage } from "./lifecycle-notifications.js";
6
7
  /**
7
8
  * Per-client outbound-buffer cap. When Node's internal socket buffer
8
9
  * for a given client exceeds this many bytes, we drop the client
@@ -87,6 +88,18 @@ const HEARTBEAT_LINE = `: heartbeat ${"_".repeat(HEARTBEAT_PADDING_BYTES - 14)}\
87
88
  */
88
89
  const COMPACTION_START_PADDING_BYTES = 2048;
89
90
  const COMPACTION_START_PADDING_LINE = `: pad-flush ${"_".repeat(COMPACTION_START_PADDING_BYTES - 14)}\n\n`;
91
+ /**
92
+ * One-shot padding flush for tiny forge-native session-list nudges.
93
+ *
94
+ * `session_list_changed` is intentionally a small event (usually just
95
+ * projectId + reason), which makes it vulnerable to L7 proxy buffering in
96
+ * the exact path where users need it most: long-running supervisor turns
97
+ * that spawn a worker, then continue working while the sidebar should update.
98
+ * Follow the data frame with a padded SSE comment so nginx/HAProxy/Vite proxy
99
+ * release it immediately instead of batching it with a later heartbeat.
100
+ */
101
+ const SESSION_LIST_CHANGED_PADDING_BYTES = 2048;
102
+ const SESSION_LIST_CHANGED_PADDING_LINE = `: session-list-changed ${"_".repeat(SESSION_LIST_CHANGED_PADDING_BYTES - 24)}\n\n`;
90
103
  /**
91
104
  * Event types we forward to browser clients. Anything else from the SDK is
92
105
  * dropped on the floor — keeps the wire stream stable across SDK upgrades and
@@ -130,6 +143,10 @@ const ALLOWED_EVENT_TYPES = new Set([
130
143
  "process_update",
131
144
  "process_output",
132
145
  "process_watch",
146
+ // Forge-native session-list invalidation used when tools create sessions
147
+ // out-of-band relative to the user's current sidebar list: pi-subagents'
148
+ // `subagent` and orchestration's `orchestrate_spawn_worker`.
149
+ "session_list_changed",
133
150
  ]);
134
151
  export function isAllowedEvent(event) {
135
152
  return ALLOWED_EVENT_TYPES.has(event.type);
@@ -203,42 +220,51 @@ export function initProcessesFanout() {
203
220
  return;
204
221
  }
205
222
  if (event.type === "process_alert") {
206
- // Inject a user-shaped message into the live session so the
207
- // agent gets a turn to react to the process finishing. The
208
- // alertOn* flags were set at start() time and already filtered
209
- // in the manager by the time we get here, the alert is
210
- // wanted. Best-effort: `sendUserMessage` returns a Promise but
211
- // we don't await it (the SSE fanout shouldn't block on a
212
- // round-trip; agent processing happens in the background and
213
- // the result lands in the session JSONL like any other turn).
214
- //
215
- // deliverAs: "followUp" — if the agent is mid-turn, queue the
216
- // alert until that turn completes. If idle, sendUserMessage
217
- // kicks off a fresh turn immediately. Either way the user
218
- // sees the alert message in the chat as a normal user bubble
219
- // (with the `[process alert]` prefix making it obvious it's
220
- // automated).
223
+ // Lifecycle alerts are status messages, not user-authored chat.
224
+ // Custom messages let the client render a compact status card
225
+ // and let the server decide per outcome whether the parent
226
+ // agent should take a turn. Clean exits are informational;
227
+ // failures/kills preserve the old "wake the agent" behavior.
221
228
  const reasonText = event.reason === "success"
222
229
  ? `finished successfully (exit ${event.info.exitCode ?? "?"})`
223
230
  : event.reason === "failure"
224
231
  ? `failed with exit code ${event.info.exitCode ?? "?"}`
225
232
  : "was killed externally";
226
- const message = `[process alert] "${event.info.name}" (id=${event.info.id}) ${reasonText}. ` +
233
+ const content = `Process "${event.info.name}" (id=${event.info.id}) ${reasonText}. ` +
227
234
  `Use \`process output\` to inspect what it produced if you need to react.`;
228
- void live.session
229
- .sendUserMessage(message, { deliverAs: "followUp" })
230
- .catch((err) => {
231
- // Swallow — most likely failure mode is "session was
232
- // disposed between fanout and queue-write," which is benign.
233
- process.stderr.write(JSON.stringify({
234
- level: "warn",
235
- time: new Date().toISOString(),
236
- msg: "process-alert sendUserMessage failed",
237
- sessionId: event.sessionId,
238
- processId: event.info.id,
235
+ const triggerTurn = event.reason !== "success";
236
+ sendCustomLifecycleMessage(live.session, {
237
+ customType: "process-notify",
238
+ content,
239
+ display: true,
240
+ details: {
241
+ source: "process",
242
+ state: event.reason,
239
243
  reason: event.reason,
240
- err: err instanceof Error ? err.message : String(err),
241
- }) + "\n");
244
+ processId: event.info.id,
245
+ name: event.info.name,
246
+ command: event.info.command,
247
+ pid: event.info.pid,
248
+ exitCode: event.info.exitCode,
249
+ success: event.info.success,
250
+ status: event.info.status,
251
+ },
252
+ }, {
253
+ triggerTurn,
254
+ onError: (err) => {
255
+ // Swallow — most likely failure mode is "session was
256
+ // disposed between fanout and queue-write," which is benign.
257
+ process.stderr.write(JSON.stringify({
258
+ level: "warn",
259
+ time: new Date().toISOString(),
260
+ msg: "process-alert sendCustomMessage failed",
261
+ sessionId: event.sessionId,
262
+ processId: event.info.id,
263
+ reason: event.reason,
264
+ triggerTurn,
265
+ err: err instanceof Error ? err.message : String(err),
266
+ }) + "\n");
267
+ },
242
268
  });
243
269
  return;
244
270
  }
@@ -419,6 +445,9 @@ export function createSSEClient(reply, live) {
419
445
  if (event.type === "compaction_start") {
420
446
  writeRaw(COMPACTION_START_PADDING_LINE);
421
447
  }
448
+ if (event.type === "session_list_changed") {
449
+ writeRaw(SESSION_LIST_CHANGED_PADDING_LINE);
450
+ }
422
451
  };
423
452
  const client = { id, send, close };
424
453
  registeredClient = client;
@@ -1 +1 @@
1
- {"version":3,"file":"sse-bridge.js","sourceRoot":"","sources":["../src/sse-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse-bridge.js","sourceRoot":"","sources":["../src/sse-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ import { existsSync, watch } from "node:fs";
2
+ import { readdir, readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import * as os from "node:os";
5
+ import { SessionManager } from "@earendil-works/pi-coding-agent";
6
+ import { getSession } from "./session-registry.js";
7
+ function sanitizeTempScopeSegment(value) {
8
+ const sanitized = value
9
+ .trim()
10
+ .replace(/[^A-Za-z0-9._-]+/g, "-")
11
+ .replace(/^-+|-+$/g, "");
12
+ return sanitized || "unknown";
13
+ }
14
+ function resolveTempScopeId() {
15
+ if (typeof process.getuid === "function")
16
+ return `uid-${process.getuid()}`;
17
+ for (const key of ["USERNAME", "USER", "LOGNAME"]) {
18
+ const value = process.env[key];
19
+ if (value)
20
+ return `user-${sanitizeTempScopeSegment(value)}`;
21
+ }
22
+ try {
23
+ const username = os.userInfo().username;
24
+ if (username)
25
+ return `user-${sanitizeTempScopeSegment(username)}`;
26
+ }
27
+ catch {
28
+ // fall through
29
+ }
30
+ const homedir = process.env.USERPROFILE ?? process.env.HOME ?? os.homedir();
31
+ if (homedir)
32
+ return `home-${sanitizeTempScopeSegment(homedir)}`;
33
+ return "shared";
34
+ }
35
+ export const SUBAGENTS_TEMP_ROOT = join(os.tmpdir(), `pi-subagents-${resolveTempScopeId()}`);
36
+ export const SUBAGENTS_RESULTS_DIR = join(SUBAGENTS_TEMP_ROOT, "async-subagent-results");
37
+ export const SUBAGENTS_ASYNC_DIR = join(SUBAGENTS_TEMP_ROOT, "async-subagent-runs");
38
+ const TERMINAL_STATES = new Set(["complete", "failed", "paused"]);
39
+ const ACTIVE_STATES = new Set(["queued", "running"]);
40
+ const deliveredCompletionKeys = new Set();
41
+ const deliveredSessionListKeys = new Set();
42
+ let watcherStarted = false;
43
+ let asyncWatcher;
44
+ let resultsWatcher;
45
+ let scanTimer;
46
+ function rootRunId(runId) {
47
+ return runId?.split(/[\\/]/, 1)[0];
48
+ }
49
+ function isExternalState(value) {
50
+ return (value === "queued" ||
51
+ value === "running" ||
52
+ value === "complete" ||
53
+ value === "failed" ||
54
+ value === "paused");
55
+ }
56
+ async function readJson(path) {
57
+ try {
58
+ return JSON.parse(await readFile(path, "utf8"));
59
+ }
60
+ catch {
61
+ return undefined;
62
+ }
63
+ }
64
+ async function readStatusByRoot(root) {
65
+ const statusPath = join(SUBAGENTS_ASYNC_DIR, root, "status.json");
66
+ const status = await readJson(statusPath);
67
+ if (!isExternalState(status?.state))
68
+ return undefined;
69
+ const resultPath = join(SUBAGENTS_RESULTS_DIR, `${root}.json`);
70
+ const out = {
71
+ runId: status.runId ?? root,
72
+ rootRunId: root,
73
+ state: status.state,
74
+ isExternalLive: ACTIVE_STATES.has(status.state),
75
+ statusPath,
76
+ };
77
+ if (existsSync(resultPath))
78
+ out.resultPath = resultPath;
79
+ if (typeof status.sessionId === "string")
80
+ out.parentSessionId = status.sessionId;
81
+ if (typeof status.sessionFile === "string")
82
+ out.sessionFile = status.sessionFile;
83
+ return out;
84
+ }
85
+ function statusMatchesSession(status, sessionPath) {
86
+ if (sessionPath === undefined)
87
+ return true;
88
+ return status.sessionFile === sessionPath;
89
+ }
90
+ async function readStatusRoots() {
91
+ try {
92
+ return await readdir(SUBAGENTS_ASYNC_DIR);
93
+ }
94
+ catch {
95
+ return [];
96
+ }
97
+ }
98
+ function statusFileSessionPaths(status) {
99
+ const paths = [];
100
+ if (typeof status.sessionFile === "string")
101
+ paths.push(status.sessionFile);
102
+ for (const step of status.steps ?? []) {
103
+ if (typeof step.sessionFile === "string")
104
+ paths.push(step.sessionFile);
105
+ }
106
+ return paths;
107
+ }
108
+ async function readStatusByRootForSessionPath(root, sessionPath) {
109
+ const statusPath = join(SUBAGENTS_ASYNC_DIR, root, "status.json");
110
+ const raw = await readJson(statusPath);
111
+ if (!isExternalState(raw?.state))
112
+ return undefined;
113
+ if (!statusFileSessionPaths(raw).includes(sessionPath))
114
+ return undefined;
115
+ const base = await readStatusByRoot(root);
116
+ if (base === undefined)
117
+ return undefined;
118
+ return { ...base, sessionFile: sessionPath };
119
+ }
120
+ async function findExternalSubagentStatusForSessionPath(sessionPath) {
121
+ if (sessionPath === undefined)
122
+ return undefined;
123
+ const roots = await readStatusRoots();
124
+ for (const root of roots) {
125
+ const status = await readStatusByRootForSessionPath(root, sessionPath);
126
+ if (status !== undefined)
127
+ return status;
128
+ }
129
+ return undefined;
130
+ }
131
+ export async function getExternalSubagentStatusForRun(runId) {
132
+ const root = rootRunId(runId);
133
+ if (root === undefined || root.length === 0)
134
+ return undefined;
135
+ return readStatusByRoot(root);
136
+ }
137
+ export async function getExternalSubagentStatusForSession(info) {
138
+ const status = await getExternalSubagentStatusForRun(info.runId);
139
+ if (status !== undefined && statusMatchesSession(status, info.path))
140
+ return status;
141
+ // pi-subagents async status run ids are not always the same as the nested
142
+ // session directory segments that pi-forge discovers in the sidebar. In
143
+ // current pi-subagents, status.json can identify the child by exact
144
+ // `steps[].sessionFile` instead. That path match is the authoritative signal
145
+ // for protecting an externally running child.
146
+ return findExternalSubagentStatusForSessionPath(info.path);
147
+ }
148
+ export async function isExternallyActiveSubagentSession(info) {
149
+ const status = await getExternalSubagentStatusForSession(info);
150
+ return status?.isExternalLive === true;
151
+ }
152
+ export function readSessionMessagesFromDisk(sessionPath, workspacePath) {
153
+ const manager = SessionManager.open(sessionPath, undefined, workspacePath);
154
+ return manager.buildSessionContext().messages;
155
+ }
156
+ function formatCompletionContent(result, status) {
157
+ const state = result?.state === "paused" || status.state === "paused"
158
+ ? "paused"
159
+ : result?.success === false || status.state === "failed"
160
+ ? "failed"
161
+ : "completed";
162
+ const agent = result?.agent ?? result?.results?.[0]?.agent ?? "subagent";
163
+ const summary = result?.summary ??
164
+ result?.results?.[0]?.output ??
165
+ result?.results?.[0]?.error ??
166
+ `(background run ${status.rootRunId} ${state})`;
167
+ const sessionFile = result?.sessionFile ??
168
+ result?.results?.find((r) => typeof r.sessionFile === "string")?.sessionFile ??
169
+ status.sessionFile;
170
+ return [
171
+ `Background task ${state}: **${agent}**`,
172
+ "",
173
+ summary.trim() || "(no output)",
174
+ sessionFile ? "" : undefined,
175
+ sessionFile ? `Session file: ${sessionFile}` : undefined,
176
+ ]
177
+ .filter((line) => line !== undefined)
178
+ .join("\n");
179
+ }
180
+ async function sessionIdFromSessionReference(ref) {
181
+ if (ref === undefined)
182
+ return undefined;
183
+ if (getSession(ref) !== undefined)
184
+ return ref;
185
+ try {
186
+ const firstLine = (await readFile(ref, "utf8")).split(/\r?\n/, 1)[0];
187
+ if (firstLine === undefined)
188
+ return undefined;
189
+ const header = JSON.parse(firstLine);
190
+ return header.type === "session" && typeof header.id === "string" ? header.id : undefined;
191
+ }
192
+ catch {
193
+ return undefined;
194
+ }
195
+ }
196
+ function hasDeliveredCompletionMessage(messages, root, state, content) {
197
+ return messages.some((message) => {
198
+ if (message.role !== "custom" || message.customType !== "subagent-notify")
199
+ return false;
200
+ const details = message.details;
201
+ if (details?.source === "pi-subagents" && details.runId === root && details.state === state) {
202
+ return true;
203
+ }
204
+ // Backward-compatible durable dedupe for notifications written before we
205
+ // started persisting run metadata in details. This also covers SDK versions
206
+ // that might omit details from rebuilt custom-message state. The formatted
207
+ // completion includes the child session file when available, so exact
208
+ // content matching is stable enough to prevent restart replays without
209
+ // suppressing unrelated runs.
210
+ return message.content === content;
211
+ });
212
+ }
213
+ export async function deliverExternalSubagentCompletionForRun(root) {
214
+ const status = await readStatusByRoot(root);
215
+ if (status === undefined || !TERMINAL_STATES.has(status.state))
216
+ return;
217
+ const resultPath = join(SUBAGENTS_RESULTS_DIR, `${root}.json`);
218
+ const result = await readJson(resultPath);
219
+ const parentId = await sessionIdFromSessionReference(result?.sessionId ?? status.parentSessionId);
220
+ if (parentId === undefined)
221
+ return;
222
+ const live = getSession(parentId);
223
+ if (live === undefined)
224
+ return;
225
+ const key = `${parentId}:${root}:${status.state}`;
226
+ if (deliveredCompletionKeys.has(key))
227
+ return;
228
+ const content = formatCompletionContent(result, status);
229
+ if (hasDeliveredCompletionMessage(live.session.messages, root, status.state, content)) {
230
+ deliveredCompletionKeys.add(key);
231
+ return;
232
+ }
233
+ deliveredCompletionKeys.add(key);
234
+ await live.session.sendCustomMessage({
235
+ customType: "subagent-notify",
236
+ content,
237
+ display: true,
238
+ details: { source: "pi-subagents", runId: root, state: status.state },
239
+ }, { triggerTurn: true });
240
+ for (const c of live.clients) {
241
+ c.send({
242
+ type: "session_list_changed",
243
+ sessionId: parentId,
244
+ projectId: live.projectId,
245
+ reason: "subagent_async_complete",
246
+ });
247
+ }
248
+ }
249
+ async function deliverExternalSubagentSessionListChange(root) {
250
+ const status = await readStatusByRoot(root);
251
+ if (status === undefined)
252
+ return;
253
+ const parentId = await sessionIdFromSessionReference(status.parentSessionId);
254
+ if (parentId === undefined)
255
+ return;
256
+ const live = getSession(parentId);
257
+ if (live === undefined)
258
+ return;
259
+ const key = `${parentId}:${root}:${status.state}`;
260
+ if (TERMINAL_STATES.has(status.state)) {
261
+ if (deliveredSessionListKeys.has(key))
262
+ return;
263
+ deliveredSessionListKeys.add(key);
264
+ }
265
+ for (const c of live.clients) {
266
+ c.send({
267
+ type: "session_list_changed",
268
+ sessionId: parentId,
269
+ projectId: live.projectId,
270
+ reason: `subagent_async_${status.state}`,
271
+ });
272
+ }
273
+ }
274
+ async function scanSubagentRuns() {
275
+ let entries;
276
+ try {
277
+ entries = await readdir(SUBAGENTS_ASYNC_DIR);
278
+ }
279
+ catch {
280
+ return;
281
+ }
282
+ await Promise.all(entries.map(async (root) => {
283
+ await deliverExternalSubagentSessionListChange(root);
284
+ await deliverExternalSubagentCompletionForRun(root);
285
+ }));
286
+ }
287
+ export function startExternalSubagentsWatcher() {
288
+ if (watcherStarted)
289
+ return;
290
+ watcherStarted = true;
291
+ void scanSubagentRuns();
292
+ scanTimer = setInterval(() => void scanSubagentRuns(), 3000);
293
+ scanTimer.unref?.();
294
+ try {
295
+ asyncWatcher = watch(SUBAGENTS_ASYNC_DIR, () => void scanSubagentRuns());
296
+ asyncWatcher.unref?.();
297
+ }
298
+ catch {
299
+ // Directory may not exist until pi-subagents first runs. Explicit checks in routes still work.
300
+ }
301
+ try {
302
+ resultsWatcher = watch(SUBAGENTS_RESULTS_DIR, () => void scanSubagentRuns());
303
+ resultsWatcher.unref?.();
304
+ }
305
+ catch {
306
+ // Result files are optional and may be consumed by pi-subagents itself.
307
+ }
308
+ }
309
+ export function stopExternalSubagentsWatcher() {
310
+ asyncWatcher?.close();
311
+ resultsWatcher?.close();
312
+ if (scanTimer !== undefined)
313
+ clearInterval(scanTimer);
314
+ asyncWatcher = undefined;
315
+ resultsWatcher = undefined;
316
+ scanTimer = undefined;
317
+ watcherStarted = false;
318
+ }
319
+ //# sourceMappingURL=subagents-external.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents-external.js","sourceRoot":"","sources":["../src/subagents-external.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-forge",
3
- "version": "1.3.5",
3
+ "version": "1.3.7",
4
4
  "description": "Browser UI for the pi coding agent — embedded HTTP server with a React workbench (chat, file browser, terminal, git, MCP).",
5
5
  "keywords": [
6
6
  "pi",
@@ -38,6 +38,9 @@
38
38
  "postinstall": "node bin/fix-pty-perms.mjs"
39
39
  },
40
40
  "dependencies": {
41
+ "@earendil-works/pi-agent-core": "0.78.0",
42
+ "@earendil-works/pi-ai": "0.78.0",
43
+ "@earendil-works/pi-coding-agent": "0.78.0",
41
44
  "@fastify/cors": "^11.0.1",
42
45
  "@fastify/multipart": "^10.0.0",
43
46
  "@fastify/rate-limit": "^10.2.2",
@@ -45,13 +48,11 @@
45
48
  "@fastify/swagger": "^9.5.0",
46
49
  "@fastify/swagger-ui": "^5.2.3",
47
50
  "@fastify/websocket": "^11.0.2",
48
- "@earendil-works/pi-agent-core": "0.76.0",
49
- "@earendil-works/pi-ai": "0.76.0",
50
- "@earendil-works/pi-coding-agent": "0.76.0",
51
51
  "@modelcontextprotocol/sdk": "^1.29.0",
52
52
  "exceljs": "^4.4.0",
53
53
  "fastify": "^5.3.2",
54
54
  "jsonwebtoken": "^9.0.2",
55
+ "ldapts": "^8.1.8",
55
56
  "mammoth": "^1.12.0",
56
57
  "node-pty": "^1.0.0",
57
58
  "pdf-parse": "^2.4.5",