@prestyj/cli 5.30.1 → 5.30.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/README.md +54 -38
- package/dist/app-sidecar/app-settings.d.ts +6 -2
- package/dist/app-sidecar/app-settings.js +39 -20
- package/dist/app-sidecar/app-settings.js.map +1 -1
- package/dist/app-sidecar/auth-routes.js +4 -1
- package/dist/app-sidecar/auth-routes.js.map +1 -1
- package/dist/app-sidecar/autopilot-runner.js +2 -5
- package/dist/app-sidecar/autopilot-runner.js.map +1 -1
- package/dist/app-sidecar/git-target.d.ts +17 -0
- package/dist/app-sidecar/git-target.js +31 -0
- package/dist/app-sidecar/git-target.js.map +1 -0
- package/dist/app-sidecar/goal-routes.d.ts +26 -0
- package/dist/app-sidecar/goal-routes.js +445 -0
- package/dist/app-sidecar/goal-routes.js.map +1 -0
- package/dist/app-sidecar/history-routes.d.ts +13 -0
- package/dist/app-sidecar/history-routes.js +36 -25
- package/dist/app-sidecar/history-routes.js.map +1 -1
- package/dist/app-sidecar/mcp-routes.js +1 -2
- package/dist/app-sidecar/mcp-routes.js.map +1 -1
- package/dist/app-sidecar/repo-polls.d.ts +5 -2
- package/dist/app-sidecar/repo-polls.js +20 -0
- package/dist/app-sidecar/repo-polls.js.map +1 -1
- package/dist/app-sidecar/route-context.d.ts +14 -0
- package/dist/app-sidecar/run-control-routes.js +2 -1
- package/dist/app-sidecar/run-control-routes.js.map +1 -1
- package/dist/app-sidecar/session-routes.js +41 -0
- package/dist/app-sidecar/session-routes.js.map +1 -1
- package/dist/app-sidecar/session-types.d.ts +2 -0
- package/dist/app-sidecar/workspace-routes.js +13 -95
- package/dist/app-sidecar/workspace-routes.js.map +1 -1
- package/dist/app-sidecar.js +237 -50
- package/dist/app-sidecar.js.map +1 -1
- package/dist/chat-agents/jiwa.js +2 -0
- package/dist/chat-agents/jiwa.js.map +1 -1
- package/dist/chat-agents/memory.js +2 -0
- package/dist/chat-agents/memory.js.map +1 -1
- package/dist/cli/auth.js +13 -9
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/shared.js +1 -1
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli.js +8 -9
- package/dist/cli.js.map +1 -1
- package/dist/core/acceptance-checks.js +17 -4
- package/dist/core/acceptance-checks.js.map +1 -1
- package/dist/core/agent-notifications.d.ts +1 -1
- package/dist/core/agent-session/verification-tracker.d.ts +5 -1
- package/dist/core/agent-session/verification-tracker.js +25 -6
- package/dist/core/agent-session/verification-tracker.js.map +1 -1
- package/dist/core/agent-session.d.ts +83 -5
- package/dist/core/agent-session.js +174 -59
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/ask-user.d.ts +11 -0
- package/dist/core/ask-user.js +6 -1
- package/dist/core/ask-user.js.map +1 -1
- package/dist/core/auth-providers.d.ts +2 -80
- package/dist/core/auth-providers.js +4 -183
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/autopilot-cycle.d.ts +2 -0
- package/dist/core/autopilot-cycle.js +21 -2
- package/dist/core/autopilot-cycle.js.map +1 -1
- package/dist/core/cache-diagnostics.d.ts +1 -1
- package/dist/core/cache-diagnostics.js +2 -1
- package/dist/core/cache-diagnostics.js.map +1 -1
- package/dist/core/checklist-prompt.d.ts +9 -2
- package/dist/core/checklist-prompt.js +26 -7
- package/dist/core/checklist-prompt.js.map +1 -1
- package/dist/core/checklist-snapshot.js +1 -1
- package/dist/core/checklist-snapshot.js.map +1 -1
- package/dist/core/checklist-store.d.ts +5 -1
- package/dist/core/checklist-store.js +35 -4
- package/dist/core/checklist-store.js.map +1 -1
- package/dist/core/compaction/tool-result-pruner.d.ts +10 -0
- package/dist/core/compaction/tool-result-pruner.js +12 -0
- package/dist/core/compaction/tool-result-pruner.js.map +1 -1
- package/dist/core/context-files.d.ts +8 -0
- package/dist/core/context-files.js +46 -0
- package/dist/core/context-files.js.map +1 -0
- package/dist/core/env-delta.d.ts +9 -1
- package/dist/core/env-delta.js +20 -0
- package/dist/core/env-delta.js.map +1 -1
- package/dist/core/event-bus.d.ts +1 -1
- package/dist/core/event-bus.js +39 -13
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/extensions/plugin-bundles.js +4 -2
- package/dist/core/extensions/plugin-bundles.js.map +1 -1
- package/dist/core/goals-store.d.ts +208 -0
- package/dist/core/goals-store.js +521 -0
- package/dist/core/goals-store.js.map +1 -0
- package/dist/core/hashline.d.ts +10 -8
- package/dist/core/hashline.js.map +1 -1
- package/dist/core/local-endpoint-store.js +15 -11
- package/dist/core/local-endpoint-store.js.map +1 -1
- package/dist/core/mcp/client.js +2 -0
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/loopback.d.ts +2 -2
- package/dist/core/mcp/loopback.js +2 -2
- package/dist/core/mcp/shared-pool.js +4 -3
- package/dist/core/mcp/shared-pool.js.map +1 -1
- package/dist/core/persistent-shell.js +2 -1
- package/dist/core/persistent-shell.js.map +1 -1
- package/dist/core/process-manager.js +9 -1
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/project-discovery.d.ts +7 -0
- package/dist/core/project-discovery.js +9 -3
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/project-health-scan.d.ts +109 -0
- package/dist/core/project-health-scan.js +673 -0
- package/dist/core/project-health-scan.js.map +1 -0
- package/dist/core/project-health-score.d.ts +41 -0
- package/dist/core/project-health-score.js +257 -0
- package/dist/core/project-health-score.js.map +1 -0
- package/dist/core/prompt-commands.js +44 -6
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/radio.d.ts +2 -3
- package/dist/core/radio.js.map +1 -1
- package/dist/core/session-manager.d.ts +7 -1
- package/dist/core/session-manager.js +17 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-storage.d.ts +4 -0
- package/dist/core/session-storage.js +9 -3
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/steroids.d.ts +8 -0
- package/dist/core/steroids.js +19 -3
- package/dist/core/steroids.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +51 -0
- package/dist/core/subagent-manager.js +114 -22
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-receipt.js +3 -4
- package/dist/core/subagent-receipt.js.map +1 -1
- package/dist/core/subagent-store.js +2 -1
- package/dist/core/subagent-store.js.map +1 -1
- package/dist/core/ui-adoption.js +2 -0
- package/dist/core/ui-adoption.js.map +1 -1
- package/dist/core/ui-registry.js +5 -4
- package/dist/core/ui-registry.js.map +1 -1
- package/dist/core/verification-evidence.d.ts +13 -2
- package/dist/core/verification-evidence.js +256 -3
- package/dist/core/verification-evidence.js.map +1 -1
- package/dist/core/verification-gate.js +4 -2
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/core/verify-commands.js +2 -3
- package/dist/core/verify-commands.js.map +1 -1
- package/dist/goals-agent/goal-team.d.ts +2 -0
- package/dist/goals-agent/goal-team.js +83 -0
- package/dist/goals-agent/goal-team.js.map +1 -0
- package/dist/goals-agent/goals-agent.d.ts +90 -0
- package/dist/goals-agent/goals-agent.js +246 -0
- package/dist/goals-agent/goals-agent.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interactive.js +4 -3
- package/dist/interactive.js.map +1 -1
- package/dist/modes/agent-home-mode.js +1 -4
- package/dist/modes/agent-home-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +14 -0
- package/dist/modes/subagent-worker-mode.js +45 -9
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.d.ts +8 -0
- package/dist/system-prompt.js +41 -20
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash-read-evidence.d.ts +13 -0
- package/dist/tools/bash-read-evidence.js +48 -1
- package/dist/tools/bash-read-evidence.js.map +1 -1
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.js +8 -4
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/checklist.d.ts +5 -4
- package/dist/tools/checklist.js +17 -4
- package/dist/tools/checklist.js.map +1 -1
- package/dist/tools/edit.d.ts +1 -0
- package/dist/tools/edit.js +84 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/grep.js +3 -2
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/index.d.ts +7 -1
- package/dist/tools/index.js +19 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-only-bash.js +3 -0
- package/dist/tools/read-only-bash.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +6 -12
- package/dist/tools/read-tracker.js +21 -36
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/read.js +2 -2
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/subagent-control.js +22 -3
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/write.js +110 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/App.js +20 -26
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.d.ts +5 -5
- package/dist/ui/components/InputArea.d.ts +2 -2
- package/dist/ui/components/InputArea.js +3 -5
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts +2 -2
- package/dist/ui/components/ToolExecution.js +4 -3
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +7 -6
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useContextCompaction.js +38 -31
- package/dist/ui/hooks/useContextCompaction.js.map +1 -1
- package/dist/ui/sessions.js +1 -5
- package/dist/ui/sessions.js.map +1 -1
- package/dist/ui/utils/highlight.d.ts +0 -5
- package/dist/ui/utils/highlight.js +3 -49
- package/dist/ui/utils/highlight.js.map +1 -1
- package/dist/ui/utils/markdown-renderer.d.ts +6 -0
- package/dist/ui/utils/markdown-renderer.js +21 -5
- package/dist/ui/utils/markdown-renderer.js.map +1 -1
- package/dist/utils/format.d.ts +0 -4
- package/dist/utils/format.js +0 -7
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/process.js +3 -3
- package/dist/utils/process.js.map +1 -1
- package/package.json +5 -8
- package/dist/ui/activity-phrases.d.ts +0 -10
- package/dist/ui/activity-phrases.js +0 -184
- package/dist/ui/activity-phrases.js.map +0 -1
- package/dist/ui/components/PlanApproval.d.ts +0 -7
- package/dist/ui/components/PlanApproval.js +0 -60
- package/dist/ui/components/PlanApproval.js.map +0 -1
- package/dist/ui/components/PlanBanner.d.ts +0 -5
- package/dist/ui/components/PlanBanner.js +0 -31
- package/dist/ui/components/PlanBanner.js.map +0 -1
- package/dist/ui/components/PlanProgress.d.ts +0 -6
- package/dist/ui/components/PlanProgress.js +0 -30
- package/dist/ui/components/PlanProgress.js.map +0 -1
- package/dist/ui/hooks/useMinDisplayTime.d.ts +0 -10
- package/dist/ui/hooks/useMinDisplayTime.js +0 -34
- package/dist/ui/hooks/useMinDisplayTime.js.map +0 -1
- package/dist/ui/hooks/useSessionManager.d.ts +0 -12
- package/dist/ui/hooks/useSessionManager.js +0 -43
- package/dist/ui/hooks/useSessionManager.js.map +0 -1
- package/dist/ui/hooks/useSlashCommands.d.ts +0 -6
- package/dist/ui/hooks/useSlashCommands.js +0 -11
- package/dist/ui/hooks/useSlashCommands.js.map +0 -1
- package/dist/ui/terminal-history-spacing.d.ts +0 -1
- package/dist/ui/terminal-history-spacing.js +0 -2
- package/dist/ui/terminal-history-spacing.js.map +0 -1
- package/dist/ui/utils/markdown-cache.d.ts +0 -10
- package/dist/ui/utils/markdown-cache.js +0 -58
- package/dist/ui/utils/markdown-cache.js.map +0 -1
- package/dist/ui/utils/token-to-ansi.d.ts +0 -8
- package/dist/ui/utils/token-to-ansi.js +0 -323
- package/dist/ui/utils/token-to-ansi.js.map +0 -1
package/dist/tools/write.js
CHANGED
|
@@ -3,7 +3,9 @@ import path from "node:path";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { resolvePath, rejectSymlink } from "./path-utils.js";
|
|
5
5
|
import { localOperations } from "./operations.js";
|
|
6
|
-
import {
|
|
6
|
+
import { diffLines } from "diff";
|
|
7
|
+
import { recordWrite, unseenLines } from "./read-tracker.js";
|
|
8
|
+
import { writeOverflow } from "./overflow.js";
|
|
7
9
|
import { getActiveGoalMode, goalModeMutationRestriction, isPlanModeActive, } from "../core/runtime-mode.js";
|
|
8
10
|
import { resolveWriteGuard } from "../core/workspace-guard.js";
|
|
9
11
|
import { REDACTION_MARKER } from "@prestyj/ai";
|
|
@@ -25,6 +27,98 @@ const WriteParams = z.object({
|
|
|
25
27
|
file_path: z.string(),
|
|
26
28
|
content: z.string(),
|
|
27
29
|
});
|
|
30
|
+
/** Above this, removed unseen lines are summarized instead of listed. */
|
|
31
|
+
const MAX_LISTED_CHARS = 4_000;
|
|
32
|
+
/**
|
|
33
|
+
* Edit distance past which the exact line diff gives up. Its cost grows with
|
|
34
|
+
* this distance times the file size, so an unbounded diff of a large rewrite
|
|
35
|
+
* blocked the shared daemon for minutes (30k changed lines: ~190s).
|
|
36
|
+
*/
|
|
37
|
+
const MAX_DIFF_EDITS = 1_000;
|
|
38
|
+
/** Lines of `text`; a trailing newline does not add an empty last line. */
|
|
39
|
+
function splitLines(text) {
|
|
40
|
+
return text === "" ? [] : text.replace(/\n$/, "").split("\n");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Fallback for rewrites too different to diff: an old line counts as removed
|
|
44
|
+
* once the new text has no copies of it left. Linear time; a line that only
|
|
45
|
+
* moved is not reported.
|
|
46
|
+
*/
|
|
47
|
+
function removedByCount(before, after, isUnseen) {
|
|
48
|
+
const left = new Map();
|
|
49
|
+
for (const text of splitLines(after))
|
|
50
|
+
left.set(text, (left.get(text) ?? 0) + 1);
|
|
51
|
+
const removed = [];
|
|
52
|
+
for (const [i, text] of splitLines(before).entries()) {
|
|
53
|
+
const copies = left.get(text) ?? 0;
|
|
54
|
+
if (copies > 0)
|
|
55
|
+
left.set(text, copies - 1);
|
|
56
|
+
else if (isUnseen(i + 1))
|
|
57
|
+
removed.push([i + 1, text]);
|
|
58
|
+
}
|
|
59
|
+
return removed;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* On-disk lines `next` removes or replaces that fall in `unseen`, with their
|
|
63
|
+
* original 1-based line numbers. Line endings are normalized so a CRLF file
|
|
64
|
+
* rewritten with LF does not count every line as removed.
|
|
65
|
+
*/
|
|
66
|
+
function removedUnseen(current, next, unseen) {
|
|
67
|
+
const isUnseen = (line) => unseen === "all" || unseen.some(([start, end]) => line >= start && line <= end);
|
|
68
|
+
const normalize = (text) => text.replace(/\r\n/g, "\n");
|
|
69
|
+
const before = normalize(current);
|
|
70
|
+
const after = normalize(next);
|
|
71
|
+
const changes = diffLines(before, after, { maxEditLength: MAX_DIFF_EDITS });
|
|
72
|
+
if (!changes)
|
|
73
|
+
return removedByCount(before, after, isUnseen);
|
|
74
|
+
const removed = [];
|
|
75
|
+
let line = 1;
|
|
76
|
+
for (const change of changes) {
|
|
77
|
+
if (change.added)
|
|
78
|
+
continue;
|
|
79
|
+
const lines = change.value.replace(/\n$/, "").split("\n");
|
|
80
|
+
if (change.removed) {
|
|
81
|
+
for (const [i, text] of lines.entries()) {
|
|
82
|
+
if (isUnseen(line + i))
|
|
83
|
+
removed.push([line + i, text]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
line += change.count ?? lines.length;
|
|
87
|
+
}
|
|
88
|
+
return removed;
|
|
89
|
+
}
|
|
90
|
+
/** Collapse sorted line numbers into "3-7, 12" form. */
|
|
91
|
+
function spans(lines) {
|
|
92
|
+
const ranges = [];
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
const last = ranges[ranges.length - 1];
|
|
95
|
+
if (last && line === last[1] + 1)
|
|
96
|
+
last[1] = line;
|
|
97
|
+
else
|
|
98
|
+
ranges.push([line, line]);
|
|
99
|
+
}
|
|
100
|
+
return ranges.map(([start, end]) => (start === end ? `${start}` : `${start}-${end}`)).join(", ");
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Note appended to a successful write that removed lines the model never saw
|
|
104
|
+
* (unread file, changed since its last read, or only partly read). The write
|
|
105
|
+
* is never refused for this: refusing threw away the generated content and
|
|
106
|
+
* forced a full regeneration. Instead the previous file is backed up and the
|
|
107
|
+
* model is shown exactly what went, so it can restore anything unintended.
|
|
108
|
+
*/
|
|
109
|
+
function unseenRemovalNote(removed, backup) {
|
|
110
|
+
const count = removed.length;
|
|
111
|
+
const lines = `${count} line${count === 1 ? "" : "s"}`;
|
|
112
|
+
const listing = removed.map(([line, text]) => `${line}|-${text}`).join("\n");
|
|
113
|
+
const where = backup
|
|
114
|
+
? ` The previous file is saved at ${backup}.`
|
|
115
|
+
: " /rewind restores the previous file.";
|
|
116
|
+
const body = listing.length <= MAX_LISTED_CHARS
|
|
117
|
+
? `:\n${listing}`
|
|
118
|
+
: ` (old lines ${spans(removed.map(([line]) => line))}).`;
|
|
119
|
+
return (`\n\nNote: this write removed ${lines} you had not seen in their current form${body}\n` +
|
|
120
|
+
`If that was intended, carry on. If not, put them back with edit.${where}`);
|
|
121
|
+
}
|
|
28
122
|
export function createWriteTool(cwd, readFiles, ops = localOperations, planModeRefOrOnFileMutated, onFileMutated, onPreFileMutation, getDiagnostics, goalModeRefArg, getWriteGuardSettings) {
|
|
29
123
|
const planModeRef = isPlanModeRef(planModeRefOrOnFileMutated)
|
|
30
124
|
? planModeRefOrOnFileMutated
|
|
@@ -60,13 +154,7 @@ export function createWriteTool(cwd, readFiles, ops = localOperations, planModeR
|
|
|
60
154
|
}
|
|
61
155
|
await fs.mkdir(plansDir, { recursive: true });
|
|
62
156
|
}
|
|
63
|
-
// Block overwriting existing files that haven't been read, that changed
|
|
64
|
-
// since the last read, or that were only partly read.
|
|
65
157
|
const exists = await ops.stat(resolved).then(() => true, () => false);
|
|
66
|
-
if (readFiles && exists) {
|
|
67
|
-
await assertFresh(readFiles, resolved, ops);
|
|
68
|
-
assertFullySeen(readFiles, resolved);
|
|
69
|
-
}
|
|
70
158
|
// Never replace real secrets with the placeholder the model was shown.
|
|
71
159
|
if (exists && content.includes(REDACTION_MARKER)) {
|
|
72
160
|
const original = await ops.readFile(resolved).catch(() => undefined);
|
|
@@ -74,6 +162,20 @@ export function createWriteTool(cwd, readFiles, ops = localOperations, planModeR
|
|
|
74
162
|
if (lossError)
|
|
75
163
|
return `Error: ${lossError}`;
|
|
76
164
|
}
|
|
165
|
+
// Lines this overwrite drops that the model never saw are reported, not
|
|
166
|
+
// refused. Computed before the write, against the file as it is now.
|
|
167
|
+
let unseenNote = "";
|
|
168
|
+
if (exists) {
|
|
169
|
+
const unseen = await unseenLines(readFiles, resolved, ops);
|
|
170
|
+
if (unseen === "all" || unseen.length > 0) {
|
|
171
|
+
const current = await ops.readFile(resolved);
|
|
172
|
+
const removed = removedUnseen(current, content, unseen);
|
|
173
|
+
if (removed.length > 0) {
|
|
174
|
+
const backup = await writeOverflow(current, "write-backup").catch(() => null);
|
|
175
|
+
unseenNote = unseenRemovalNote(removed, backup);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
77
179
|
// Snapshot the pre-mutation on-disk state for /rewind before writing.
|
|
78
180
|
await onPreFileMutation?.(resolved);
|
|
79
181
|
await ops.writeFile(resolved, content);
|
|
@@ -91,7 +193,7 @@ export function createWriteTool(cwd, readFiles, ops = localOperations, planModeR
|
|
|
91
193
|
}
|
|
92
194
|
}
|
|
93
195
|
const lines = content.split("\n").length;
|
|
94
|
-
return `Wrote ${lines} lines to ${resolved}` + diagnosticsNote;
|
|
196
|
+
return `Wrote ${lines} lines to ${resolved}` + unseenNote + diagnosticsNote;
|
|
95
197
|
},
|
|
96
198
|
};
|
|
97
199
|
}
|
package/dist/tools/write.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAuB,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/App.js
CHANGED
|
@@ -805,29 +805,22 @@ export function App(props) {
|
|
|
805
805
|
killTask(props.processManager, id);
|
|
806
806
|
}, [props.processManager]);
|
|
807
807
|
const handleTaskNavigate = useCallback((index) => navigateTaskBar(index), []);
|
|
808
|
-
// Resolve fresh OAuth credentials before each agent loop run.
|
|
809
|
-
//
|
|
808
|
+
// Resolve fresh OAuth credentials before each agent loop run. Only wired up
|
|
809
|
+
// when authStorage exists; without it the loop uses the static apiKey props.
|
|
810
|
+
const authStorage = props.authStorage;
|
|
810
811
|
const resolveCredentials = useCallback(async (opts) => {
|
|
811
|
-
if (
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
}, [
|
|
824
|
-
props.authStorage,
|
|
825
|
-
currentProvider,
|
|
826
|
-
currentModel,
|
|
827
|
-
activeApiKey,
|
|
828
|
-
activeAccountId,
|
|
829
|
-
activeProjectId,
|
|
830
|
-
]);
|
|
812
|
+
if (!authStorage)
|
|
813
|
+
throw new Error("resolveCredentials called without authStorage");
|
|
814
|
+
const creds = await authStorage.resolveCredentials(currentProvider, {
|
|
815
|
+
...opts,
|
|
816
|
+
storageKeys: getAuthStorageKeys(currentProvider, currentModel),
|
|
817
|
+
});
|
|
818
|
+
return {
|
|
819
|
+
apiKey: creds.accessToken,
|
|
820
|
+
accountId: creds.accountId,
|
|
821
|
+
projectId: creds.projectId,
|
|
822
|
+
};
|
|
823
|
+
}, [authStorage, currentProvider, currentModel]);
|
|
831
824
|
// Back-reference to the loop, so callbacks defined in its own options object
|
|
832
825
|
// (which run long after mount) can read loop-owned refs such as runStartRef.
|
|
833
826
|
const agentLoopRef = useRef(null);
|
|
@@ -844,7 +837,7 @@ export function App(props) {
|
|
|
844
837
|
baseUrl: activeBaseUrl,
|
|
845
838
|
accountId: activeAccountId,
|
|
846
839
|
projectId: activeProjectId,
|
|
847
|
-
resolveCredentials,
|
|
840
|
+
resolveCredentials: authStorage ? resolveCredentials : undefined,
|
|
848
841
|
transformContext,
|
|
849
842
|
getLoopBreakMessage: (stats, stage) => {
|
|
850
843
|
if (!idealReviewEnabledRef.current)
|
|
@@ -2436,10 +2429,11 @@ export function App(props) {
|
|
|
2436
2429
|
// re-spawning `npx` there only risks a failed
|
|
2437
2430
|
// re-spawn that would silently drop the tools.
|
|
2438
2431
|
const glmInvolved = newProvider === "glm" || prevProvider === "glm";
|
|
2439
|
-
|
|
2432
|
+
const mcpManager = props.mcpManager;
|
|
2433
|
+
if (mcpManager && glmInvolved) {
|
|
2440
2434
|
void (async () => {
|
|
2441
2435
|
// Disconnect old MCP servers
|
|
2442
|
-
await
|
|
2436
|
+
await mcpManager.dispose();
|
|
2443
2437
|
// Remove old MCP tools, connect new ones
|
|
2444
2438
|
let apiKey;
|
|
2445
2439
|
if (newProvider === "glm" && props.authStorage) {
|
|
@@ -2459,7 +2453,7 @@ export function App(props) {
|
|
|
2459
2453
|
// ~/.ezcoder/mcp.json and ./.ezcoder/mcp.json) survive the reconnect —
|
|
2460
2454
|
// getMCPServers returns provider defaults only.
|
|
2461
2455
|
const servers = await getAllMcpServers(newProvider, apiKey, props.cwd);
|
|
2462
|
-
const mcpTools = await
|
|
2456
|
+
const mcpTools = await mcpManager.connectAll(servers);
|
|
2463
2457
|
setCurrentTools((prev) => {
|
|
2464
2458
|
const next = [...prev.filter((t) => !t.name.startsWith("mcp__")), ...mcpTools];
|
|
2465
2459
|
rebuildPromptWithTools(next);
|