@noorm/marie-cli 0.1.15 → 0.1.17
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/.marie_visual_verify_1771225696548/progress_bar_check.txt +1 -0
- package/SENTINEL.md +33 -0
- package/dist/cli-new/components/App.js +3 -1
- package/dist/cli-new/components/App.js.map +1 -1
- package/dist/cli-new/components/Banner.js +5 -5
- package/dist/cli-new/components/Banner.js.map +1 -1
- package/dist/cli-new/hooks/useUpdateCheck.js +17 -0
- package/dist/cli-new/hooks/useUpdateCheck.js.map +1 -0
- package/dist/domain/DomainEntity.js +7 -0
- package/dist/domain/DomainEntity.js.map +1 -0
- package/dist/extension.cjs +164 -154
- package/dist/extension.js +473 -0
- package/dist/extension.js.map +1 -0
- package/dist/infrastructure/BaseAdapter.js +3 -0
- package/dist/infrastructure/BaseAdapter.js.map +1 -0
- package/dist/monolith/cli/CliFileSystemPort.js +16 -8
- package/dist/monolith/cli/CliFileSystemPort.js.map +1 -1
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js +9 -6
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +1 -1
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js +29 -10
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +19 -13
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +8 -8
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +1 -1
- package/dist/monolith/infrastructure/config/ConfigService.js +2 -22
- package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
- package/dist/monolith/infrastructure/joy/JoyTools.js +535 -0
- package/dist/monolith/infrastructure/joy/JoyTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +14 -13
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -1
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js +23 -3
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/TestService.js +2 -1
- package/dist/monolith/plumbing/analysis/TestService.js.map +1 -1
- package/dist/monolith/plumbing/filesystem/FileService.js +22 -10
- package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -1
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js +59 -0
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js.map +1 -0
- package/dist/monolith/plumbing/utils/MutexUtils.js +86 -0
- package/dist/monolith/plumbing/utils/MutexUtils.js.map +1 -0
- package/dist/monolith/runtime/MarieRuntime.js +250 -136
- package/dist/monolith/runtime/MarieRuntime.js.map +1 -1
- package/dist/monolith/runtime/RuntimeAdapterBase.js +6 -0
- package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -1
- package/dist/monolith/services/JoyAutomationService.js +1 -1
- package/dist/monolith/services/JoyAutomationService.js.map +1 -1
- package/dist/monolith/services/JoyService.js +1 -1
- package/dist/monolith/services/JoyService.js.map +1 -1
- package/dist/monolith/services/UpdateService.js +61 -0
- package/dist/monolith/services/UpdateService.js.map +1 -0
- package/dist/plumbing/BaseTool.js +7 -0
- package/dist/plumbing/BaseTool.js.map +1 -0
- package/dist/prompts.js +90 -0
- package/dist/prompts.js.map +1 -0
- package/dist/test_agent_stream_control_plane.js +170 -0
- package/dist/test_agent_stream_control_plane.js.map +1 -0
- package/dist/test_content_buffer_cap.js +67 -0
- package/dist/test_content_buffer_cap.js.map +1 -0
- package/dist/test_prefix_tree.js +120 -0
- package/dist/test_prefix_tree.js.map +1 -0
- package/dist/test_retry_utils.js +169 -0
- package/dist/test_retry_utils.js.map +1 -0
- package/dist/test_strategy_integration.js +114 -0
- package/dist/test_strategy_integration.js.map +1 -0
- package/dist/test_streaming_fragility.js +191 -0
- package/dist/test_streaming_fragility.js.map +1 -0
- package/dist/webview-ui/App.js +16 -0
- package/dist/webview-ui/App.js.map +1 -0
- package/dist/webview-ui/Providers.js +6 -0
- package/dist/webview-ui/Providers.js.map +1 -0
- package/dist/webview-ui/components/ApprovalPanel.js +8 -0
- package/dist/webview-ui/components/ApprovalPanel.js.map +1 -0
- package/dist/webview-ui/components/ChatPanel.js +19 -0
- package/dist/webview-ui/components/ChatPanel.js.map +1 -0
- package/dist/webview-ui/components/Composer.js +19 -0
- package/dist/webview-ui/components/Composer.js.map +1 -0
- package/dist/webview-ui/components/HeaderBar.js +5 -0
- package/dist/webview-ui/components/HeaderBar.js.map +1 -0
- package/dist/webview-ui/components/SessionList.js +14 -0
- package/dist/webview-ui/components/SessionList.js.map +1 -0
- package/dist/webview-ui/context/WebviewStateContext.js +146 -0
- package/dist/webview-ui/context/WebviewStateContext.js.map +1 -0
- package/dist/webview-ui/main.css +1 -0
- package/dist/webview-ui/main.js +108 -0
- package/dist/webview-ui/main.js.map +1 -0
- package/dist/webview-ui/types.js +2 -0
- package/dist/webview-ui/types.js.map +1 -0
- package/dist/webview-ui/vscode.js +4 -0
- package/dist/webview-ui/vscode.js.map +1 -0
- package/lint_output.txt +705 -0
- package/lint_output_v2.txt +711 -0
- package/marie-coder-0.1.16.vsix +0 -0
- package/package.json +3 -10
- package/JOY_ZONING.md +0 -200
- package/dist/monolith/tests/FileAppendVerifyTest.js +0 -28
- package/dist/monolith/tests/FileAppendVerifyTest.js.map +0 -1
- package/dist/monolith/tests/StreamingVerifyTest.js +0 -100
- package/dist/monolith/tests/StreamingVerifyTest.js.map +0 -1
- package/dist/monolith/tests/VisualProgressTest.js +0 -86
- package/dist/monolith/tests/VisualProgressTest.js.map +0 -1
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import * as vscode from "vscode";
|
|
2
|
+
import { Marie } from "./monolith/adapters/VscodeMarieAdapter.js";
|
|
3
|
+
import { JoyService } from "./monolith/services/JoyService.js";
|
|
4
|
+
import { JoyLogService } from "./monolith/services/JoyLogService.js";
|
|
5
|
+
import { ConfigService } from "./monolith/infrastructure/config/ConfigService.js";
|
|
6
|
+
import { UpdateService } from "./monolith/services/UpdateService.js";
|
|
7
|
+
let marie;
|
|
8
|
+
let joyService;
|
|
9
|
+
let mariePanel;
|
|
10
|
+
let webviewHost;
|
|
11
|
+
class MarieWebviewHost {
|
|
12
|
+
context;
|
|
13
|
+
marieInstance;
|
|
14
|
+
webviews = new Set();
|
|
15
|
+
stateSubscription;
|
|
16
|
+
constructor(context, marieInstance) {
|
|
17
|
+
this.context = context;
|
|
18
|
+
this.marieInstance = marieInstance;
|
|
19
|
+
this.stateSubscription = this.marieInstance.onStateChanged((state) => {
|
|
20
|
+
this.pushState(state);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
attach(webview) {
|
|
24
|
+
console.log("[MarieHost] Attaching new webview");
|
|
25
|
+
this.webviews.add(webview);
|
|
26
|
+
webview.options = {
|
|
27
|
+
enableScripts: true,
|
|
28
|
+
localResourceRoots: [
|
|
29
|
+
vscode.Uri.joinPath(this.context.extensionUri, "dist", "webview-ui"),
|
|
30
|
+
vscode.Uri.joinPath(this.context.extensionUri, "assets"),
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
const scriptDiskPath = vscode.Uri.joinPath(this.context.extensionUri, "dist", "webview-ui", "main.js");
|
|
34
|
+
vscode.workspace.fs.stat(scriptDiskPath).then(() => undefined, () => {
|
|
35
|
+
void vscode.window.showErrorMessage("Marie webview bundle missing (dist/webview-ui/main.js). Run `npm run build` and reinstall the extension.");
|
|
36
|
+
});
|
|
37
|
+
webview.html = this.getHtml(webview);
|
|
38
|
+
webview.onDidReceiveMessage((message) => this.onMessage(message));
|
|
39
|
+
// Refined: push initial state ONLY to this webview immediately after attach
|
|
40
|
+
this.pushInitState(webview).catch(() => undefined);
|
|
41
|
+
}
|
|
42
|
+
detach(webview) {
|
|
43
|
+
this.webviews.delete(webview);
|
|
44
|
+
}
|
|
45
|
+
dispose() {
|
|
46
|
+
if (this.stateSubscription) {
|
|
47
|
+
this.stateSubscription();
|
|
48
|
+
this.stateSubscription = undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
post(message) {
|
|
52
|
+
const enriched = {
|
|
53
|
+
...message,
|
|
54
|
+
sequenceNumber: this.marieInstance.getSequenceNumber(),
|
|
55
|
+
};
|
|
56
|
+
for (const webview of this.webviews) {
|
|
57
|
+
void webview.postMessage(enriched);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async pushState(runtimeState) {
|
|
61
|
+
const config = this.getConfigSnapshot();
|
|
62
|
+
const sessions = await this.marieInstance.listSessions();
|
|
63
|
+
const uiMessages = runtimeState.messages.map((message, index) => ({
|
|
64
|
+
id: `hist_${index}`,
|
|
65
|
+
role: (message.role || "assistant"),
|
|
66
|
+
content: this.extractMessageText(message),
|
|
67
|
+
timestamp: message.timestamp || Date.now(),
|
|
68
|
+
}));
|
|
69
|
+
this.post({
|
|
70
|
+
type: "init_state",
|
|
71
|
+
state: {
|
|
72
|
+
messages: uiMessages,
|
|
73
|
+
config: config,
|
|
74
|
+
currentSessionId: runtimeState.currentSessionId,
|
|
75
|
+
sessions: sessions,
|
|
76
|
+
availableModels: await this.marieInstance.getModels(),
|
|
77
|
+
sequenceNumber: runtimeState.sequenceNumber,
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async onMessage(message) {
|
|
82
|
+
console.log("[MarieHost] Received message from webview:", message?.type);
|
|
83
|
+
switch (message?.type) {
|
|
84
|
+
case "ready":
|
|
85
|
+
await this.pushInitState();
|
|
86
|
+
return;
|
|
87
|
+
case "send_message":
|
|
88
|
+
await this.handleSendMessage(String(message.text || ""));
|
|
89
|
+
return;
|
|
90
|
+
case "stop_generation":
|
|
91
|
+
this.marieInstance.stopGeneration();
|
|
92
|
+
this.post({ type: "status", isLoading: false });
|
|
93
|
+
return;
|
|
94
|
+
case "approval_response":
|
|
95
|
+
if (message.id && typeof message.approved === "boolean") {
|
|
96
|
+
this.marieInstance.resolveApproval(String(message.id), Boolean(message.approved));
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
case "create_session":
|
|
100
|
+
await this.marieInstance.createSession();
|
|
101
|
+
await this.pushInitState();
|
|
102
|
+
return;
|
|
103
|
+
case "clear_session":
|
|
104
|
+
await this.marieInstance.clearCurrentSession();
|
|
105
|
+
await this.pushInitState();
|
|
106
|
+
return;
|
|
107
|
+
case "list_sessions":
|
|
108
|
+
await this.pushSessions();
|
|
109
|
+
return;
|
|
110
|
+
case "load_session":
|
|
111
|
+
if (message.id) {
|
|
112
|
+
await this.marieInstance.loadSession(String(message.id));
|
|
113
|
+
await this.pushInitState();
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
116
|
+
case "delete_session":
|
|
117
|
+
if (message.id) {
|
|
118
|
+
await this.marieInstance.deleteSession(String(message.id));
|
|
119
|
+
await this.pushInitState();
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
case "rename_session":
|
|
123
|
+
if (message.id && message.title) {
|
|
124
|
+
await this.marieInstance.renameSession(String(message.id), String(message.title));
|
|
125
|
+
await this.pushSessions();
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
case "toggle_pin_session":
|
|
129
|
+
if (message.id) {
|
|
130
|
+
await this.marieInstance.togglePinSession(String(message.id));
|
|
131
|
+
await this.pushSessions();
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
case "get_models":
|
|
135
|
+
// Models are now part of init_state, but we keep this for manual refreshes
|
|
136
|
+
this.post({
|
|
137
|
+
type: "models",
|
|
138
|
+
models: await this.marieInstance.getModels(),
|
|
139
|
+
});
|
|
140
|
+
return;
|
|
141
|
+
case "set_provider":
|
|
142
|
+
await this.setProvider(String(message.provider || "anthropic"));
|
|
143
|
+
return;
|
|
144
|
+
case "set_model":
|
|
145
|
+
await this.setModel(String(message.model || ""));
|
|
146
|
+
return;
|
|
147
|
+
case "set_autonomy_mode":
|
|
148
|
+
await this.setAutonomyMode(String(message.mode || "balanced"));
|
|
149
|
+
return;
|
|
150
|
+
case "set_api_key":
|
|
151
|
+
await this.setApiKey(String(message.provider || "anthropic"), String(message.apiKey || ""));
|
|
152
|
+
return;
|
|
153
|
+
case "open_settings":
|
|
154
|
+
await vscode.commands.executeCommand("workbench.action.openSettings", "@ext:cardsorting.marie");
|
|
155
|
+
return;
|
|
156
|
+
default:
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async handleSendMessage(text) {
|
|
161
|
+
const trimmed = text.trim();
|
|
162
|
+
if (!trimmed)
|
|
163
|
+
return;
|
|
164
|
+
this.post({ type: "status", isLoading: true });
|
|
165
|
+
this.post({ type: "user_echo", text: trimmed });
|
|
166
|
+
try {
|
|
167
|
+
const response = await this.marieInstance.handleMessage(trimmed, {
|
|
168
|
+
onStream: (chunk) => {
|
|
169
|
+
this.post({ type: "message_stream", chunk });
|
|
170
|
+
},
|
|
171
|
+
onTool: (tool) => {
|
|
172
|
+
this.post({ type: "tool_event", tool });
|
|
173
|
+
},
|
|
174
|
+
onToolDelta: (delta) => {
|
|
175
|
+
this.post({ type: "tool_delta", delta });
|
|
176
|
+
},
|
|
177
|
+
onApprovalRequest: (request) => {
|
|
178
|
+
this.post({ type: "approval_request", request });
|
|
179
|
+
},
|
|
180
|
+
onEvent: (event) => {
|
|
181
|
+
this.post({ type: "runtime_event", event });
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
this.post({ type: "assistant_response", text: response });
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
this.post({ type: "error", message: String(error) });
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
this.post({ type: "status", isLoading: false });
|
|
191
|
+
await this.pushSessions();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async setAutonomyMode(rawMode) {
|
|
195
|
+
const mode = rawMode === "yolo" || rawMode === "high" ? rawMode : "balanced";
|
|
196
|
+
const cfg = vscode.workspace.getConfiguration("marie");
|
|
197
|
+
await cfg.update("autonomyMode", mode, vscode.ConfigurationTarget.Global);
|
|
198
|
+
this.marieInstance.updateSettings();
|
|
199
|
+
this.post({ type: "config", config: this.getConfigSnapshot() });
|
|
200
|
+
}
|
|
201
|
+
async setProvider(rawProvider) {
|
|
202
|
+
const provider = rawProvider === "openrouter" || rawProvider === "cerebras"
|
|
203
|
+
? rawProvider
|
|
204
|
+
: "anthropic";
|
|
205
|
+
const cfg = vscode.workspace.getConfiguration("marie");
|
|
206
|
+
// Get the current model to check if we need to reset it for the new provider
|
|
207
|
+
const currentModel = ConfigService.getModel();
|
|
208
|
+
// Define sensible default models for each provider
|
|
209
|
+
let newModel;
|
|
210
|
+
if (provider === "openrouter") {
|
|
211
|
+
// For OpenRouter, use the OpenRouter format for Claude
|
|
212
|
+
newModel = "anthropic/claude-3.5-sonnet";
|
|
213
|
+
}
|
|
214
|
+
else if (provider === "cerebras") {
|
|
215
|
+
// For Cerebras, use Llama
|
|
216
|
+
newModel = "llama3.1-8b";
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// For Anthropic, use the default Claude model
|
|
220
|
+
newModel = "claude-3-5-sonnet-20241022";
|
|
221
|
+
}
|
|
222
|
+
// Only update model if it's not already set to a compatible model for the provider
|
|
223
|
+
// Check if current model would work with the new provider
|
|
224
|
+
const needsModelReset = !this.isModelCompatibleWithProvider(currentModel, provider);
|
|
225
|
+
await cfg.update("aiProvider", provider, vscode.ConfigurationTarget.Global);
|
|
226
|
+
if (needsModelReset) {
|
|
227
|
+
await cfg.update("model", newModel, vscode.ConfigurationTarget.Global);
|
|
228
|
+
}
|
|
229
|
+
this.marieInstance.updateSettings();
|
|
230
|
+
this.post({ type: "config", config: this.getConfigSnapshot() });
|
|
231
|
+
this.post({ type: "models", models: await this.marieInstance.getModels() });
|
|
232
|
+
}
|
|
233
|
+
isModelCompatibleWithProvider(model, provider) {
|
|
234
|
+
if (provider === "anthropic") {
|
|
235
|
+
// Anthropic accepts claude-* models
|
|
236
|
+
return model.startsWith("claude-");
|
|
237
|
+
}
|
|
238
|
+
else if (provider === "openrouter") {
|
|
239
|
+
// OpenRouter accepts models in various formats (anthropic/*, openai/*, google/*, etc.)
|
|
240
|
+
// or common models like llama-*
|
|
241
|
+
return (model.includes("/") ||
|
|
242
|
+
model.startsWith("llama-") ||
|
|
243
|
+
model.startsWith("gpt-"));
|
|
244
|
+
}
|
|
245
|
+
else if (provider === "cerebras") {
|
|
246
|
+
// Cerebras accepts llama-* models
|
|
247
|
+
return model.startsWith("llama-");
|
|
248
|
+
}
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
async setModel(rawModel) {
|
|
252
|
+
const model = rawModel.trim();
|
|
253
|
+
if (!model)
|
|
254
|
+
return;
|
|
255
|
+
const cfg = vscode.workspace.getConfiguration("marie");
|
|
256
|
+
await cfg.update("model", model, vscode.ConfigurationTarget.Global);
|
|
257
|
+
this.marieInstance.updateSettings();
|
|
258
|
+
this.post({ type: "config", config: this.getConfigSnapshot() });
|
|
259
|
+
}
|
|
260
|
+
async setApiKey(rawProvider, rawKey) {
|
|
261
|
+
const provider = rawProvider === "openrouter" || rawProvider === "cerebras"
|
|
262
|
+
? rawProvider
|
|
263
|
+
: "anthropic";
|
|
264
|
+
const apiKey = rawKey.trim();
|
|
265
|
+
if (!apiKey)
|
|
266
|
+
return;
|
|
267
|
+
const cfg = vscode.workspace.getConfiguration("marie");
|
|
268
|
+
const settingKey = provider === "openrouter"
|
|
269
|
+
? "openrouterApiKey"
|
|
270
|
+
: provider === "cerebras"
|
|
271
|
+
? "cerebrasApiKey"
|
|
272
|
+
: "apiKey";
|
|
273
|
+
await cfg.update(settingKey, apiKey, vscode.ConfigurationTarget.Global);
|
|
274
|
+
this.marieInstance.updateSettings();
|
|
275
|
+
this.post({ type: "config", config: this.getConfigSnapshot() });
|
|
276
|
+
this.post({ type: "models", models: await this.marieInstance.getModels() });
|
|
277
|
+
}
|
|
278
|
+
async pushInitState(targetWebview) {
|
|
279
|
+
console.log("[MarieHost] Pushing initial state...");
|
|
280
|
+
const config = this.getConfigSnapshot();
|
|
281
|
+
const messages = this.getUiMessages();
|
|
282
|
+
const sessions = await this.marieInstance.listSessions();
|
|
283
|
+
const currentSessionId = this.marieInstance.getCurrentSessionId();
|
|
284
|
+
const payload = {
|
|
285
|
+
type: "init_state",
|
|
286
|
+
state: {
|
|
287
|
+
messages: messages,
|
|
288
|
+
config: config,
|
|
289
|
+
currentSessionId: currentSessionId,
|
|
290
|
+
sessions: sessions,
|
|
291
|
+
availableModels: await this.marieInstance.getModels(),
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
if (targetWebview) {
|
|
295
|
+
void targetWebview.postMessage(payload);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
this.post(payload);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
async pushSessions() {
|
|
302
|
+
const sessions = await this.marieInstance.listSessions();
|
|
303
|
+
this.post({
|
|
304
|
+
type: "sessions",
|
|
305
|
+
sessions,
|
|
306
|
+
currentSessionId: this.marieInstance.getCurrentSessionId(),
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
getConfigSnapshot() {
|
|
310
|
+
const provider = ConfigService.getAiProvider();
|
|
311
|
+
const providerKey = provider === "openrouter"
|
|
312
|
+
? ConfigService.getOpenRouterApiKey()
|
|
313
|
+
: provider === "cerebras"
|
|
314
|
+
? ConfigService.getCerebrasApiKey()
|
|
315
|
+
: ConfigService.getApiKey();
|
|
316
|
+
return {
|
|
317
|
+
provider,
|
|
318
|
+
model: ConfigService.getModel(),
|
|
319
|
+
autonomyMode: ConfigService.getAutonomyMode(),
|
|
320
|
+
hasAnyApiKey: Boolean(ConfigService.getApiKey() ||
|
|
321
|
+
ConfigService.getOpenRouterApiKey() ||
|
|
322
|
+
ConfigService.getCerebrasApiKey()),
|
|
323
|
+
hasProviderApiKey: Boolean(providerKey),
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
getUiMessages() {
|
|
327
|
+
return this.marieInstance
|
|
328
|
+
.getMessages()
|
|
329
|
+
.map((message, index) => ({
|
|
330
|
+
id: `hist_${index}`,
|
|
331
|
+
role: (message.role || "assistant"),
|
|
332
|
+
content: this.extractMessageText(message),
|
|
333
|
+
timestamp: Date.now(),
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
extractMessageText(message) {
|
|
337
|
+
if (typeof message?.content === "string") {
|
|
338
|
+
return message.content;
|
|
339
|
+
}
|
|
340
|
+
if (!Array.isArray(message?.content)) {
|
|
341
|
+
return String(message?.content ?? "");
|
|
342
|
+
}
|
|
343
|
+
const parts = [];
|
|
344
|
+
for (const block of message.content) {
|
|
345
|
+
if (block?.type === "text") {
|
|
346
|
+
parts.push(block.text || "");
|
|
347
|
+
}
|
|
348
|
+
else if (block?.type === "tool_use") {
|
|
349
|
+
parts.push(`[Tool Use: ${block.name}]`);
|
|
350
|
+
}
|
|
351
|
+
else if (block?.type === "tool_result") {
|
|
352
|
+
const content = typeof block.content === "string"
|
|
353
|
+
? block.content
|
|
354
|
+
: JSON.stringify(block.content);
|
|
355
|
+
const summary = content.length > 100 ? content.substring(0, 100) + "..." : content;
|
|
356
|
+
parts.push(`[Tool Result: ${summary}]`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return parts.join("\n").trim() || "(empty content)";
|
|
360
|
+
}
|
|
361
|
+
getHtml(webview) {
|
|
362
|
+
const scriptUri = webview.asWebviewUri(vscode.Uri.joinPath(this.context.extensionUri, "dist", "webview-ui", "main.js"));
|
|
363
|
+
const styleUri = webview.asWebviewUri(vscode.Uri.joinPath(this.context.extensionUri, "dist", "webview-ui", "main.css"));
|
|
364
|
+
const nonce = `${Date.now()}${Math.random().toString(36).slice(2)}`;
|
|
365
|
+
return `<!DOCTYPE html>
|
|
366
|
+
<html lang="en">
|
|
367
|
+
<head>
|
|
368
|
+
<meta charset="UTF-8" />
|
|
369
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
370
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${webview.cspSource} https: data:; style-src ${webview.cspSource} 'unsafe-inline'; script-src ${webview.cspSource} 'nonce-${nonce}';" />
|
|
371
|
+
<link rel="stylesheet" type="text/css" href="${styleUri}" />
|
|
372
|
+
<title>Marie</title>
|
|
373
|
+
</head>
|
|
374
|
+
<body>
|
|
375
|
+
<div id="app" style="padding:12px;font-family:var(--vscode-font-family);color:var(--vscode-foreground);">Loading Marie UI…</div>
|
|
376
|
+
<script nonce="${nonce}">
|
|
377
|
+
try {
|
|
378
|
+
const el = document.getElementById('app');
|
|
379
|
+
if (el) el.textContent = 'Marie script bootstrapping…';
|
|
380
|
+
} catch {}
|
|
381
|
+
</script>
|
|
382
|
+
<script nonce="${nonce}" src="${scriptUri}"></script>
|
|
383
|
+
</body>
|
|
384
|
+
</html>`;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
class MarieSidebarProvider {
|
|
388
|
+
static viewType = "marieView";
|
|
389
|
+
resolveWebviewView(webviewView) {
|
|
390
|
+
webviewHost?.attach(webviewView.webview);
|
|
391
|
+
webviewHost?.["pushInitState"]?.(webviewView.webview);
|
|
392
|
+
webviewView.onDidDispose(() => {
|
|
393
|
+
webviewHost?.detach(webviewView.webview);
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
function showMarieWebview(context) {
|
|
398
|
+
if (mariePanel) {
|
|
399
|
+
mariePanel.reveal(vscode.ViewColumn.Beside);
|
|
400
|
+
return mariePanel;
|
|
401
|
+
}
|
|
402
|
+
mariePanel = vscode.window.createWebviewPanel("marieUi", "Marie", vscode.ViewColumn.Beside, {
|
|
403
|
+
enableScripts: true,
|
|
404
|
+
retainContextWhenHidden: true,
|
|
405
|
+
});
|
|
406
|
+
webviewHost?.attach(mariePanel.webview);
|
|
407
|
+
webviewHost?.["pushInitState"]?.(mariePanel.webview);
|
|
408
|
+
mariePanel.onDidDispose(() => {
|
|
409
|
+
if (mariePanel) {
|
|
410
|
+
webviewHost?.detach(mariePanel.webview);
|
|
411
|
+
}
|
|
412
|
+
mariePanel = undefined;
|
|
413
|
+
}, null, context.subscriptions);
|
|
414
|
+
return mariePanel;
|
|
415
|
+
}
|
|
416
|
+
export function activate(context) {
|
|
417
|
+
console.log("[Marie] Activating extension...");
|
|
418
|
+
// Initialize JoyLog service
|
|
419
|
+
const joyLog = new JoyLogService(context);
|
|
420
|
+
console.log("[Marie] JoyLogService initialized");
|
|
421
|
+
// Initialize Joy service
|
|
422
|
+
joyService = new JoyService(context, joyLog);
|
|
423
|
+
console.log("[Marie] JoyService initialized");
|
|
424
|
+
// Initialize Marie
|
|
425
|
+
marie = new Marie(context, joyService);
|
|
426
|
+
console.log("[Marie] Marie adapter initialized");
|
|
427
|
+
webviewHost = new MarieWebviewHost(context, marie);
|
|
428
|
+
console.log("[Marie] MarieWebviewHost initialized");
|
|
429
|
+
// Check for updates
|
|
430
|
+
const currentVersion = context.extension.packageJSON.version;
|
|
431
|
+
UpdateService.checkUpdate(currentVersion).then((info) => {
|
|
432
|
+
if (info?.isUpdateAvailable) {
|
|
433
|
+
vscode.window
|
|
434
|
+
.showInformationMessage(`A new version of Marie (${info.latestVersion}) is available.`, "Update Now", "View Release Notes")
|
|
435
|
+
.then((selection) => {
|
|
436
|
+
if (selection === "Update Now" || selection === "View Release Notes") {
|
|
437
|
+
vscode.env.openExternal(vscode.Uri.parse("https://github.com/DreamBeesAI/Marie-Coder-New-the-vatican/releases"));
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
// Register commands
|
|
443
|
+
const disposable = vscode.commands.registerCommand("marie.start", () => {
|
|
444
|
+
return showMarieWebview(context);
|
|
445
|
+
});
|
|
446
|
+
const sidebarProvider = vscode.window.registerWebviewViewProvider(MarieSidebarProvider.viewType, new MarieSidebarProvider());
|
|
447
|
+
context.subscriptions.push(disposable);
|
|
448
|
+
context.subscriptions.push(sidebarProvider);
|
|
449
|
+
context.subscriptions.push(marie);
|
|
450
|
+
console.log("[Marie] Commands and providers registered");
|
|
451
|
+
return {
|
|
452
|
+
getWebviewHtml: () => webviewHost?.["getHtml"]?.call(webviewHost, {
|
|
453
|
+
asWebviewUri: (uri) => uri,
|
|
454
|
+
cspSource: "vscode-resource:",
|
|
455
|
+
}),
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
export function deactivate() {
|
|
459
|
+
if (mariePanel) {
|
|
460
|
+
mariePanel.dispose();
|
|
461
|
+
mariePanel = undefined;
|
|
462
|
+
}
|
|
463
|
+
if (webviewHost) {
|
|
464
|
+
webviewHost.dispose();
|
|
465
|
+
webviewHost = undefined;
|
|
466
|
+
}
|
|
467
|
+
if (marie) {
|
|
468
|
+
marie.dispose();
|
|
469
|
+
marie = undefined;
|
|
470
|
+
}
|
|
471
|
+
joyService = undefined;
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAdapter.js","sourceRoot":"","sources":["../../src/infrastructure/BaseAdapter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,WAAW;CAGhC"}
|
|
@@ -99,7 +99,9 @@ export class CliFileSystemPort {
|
|
|
99
99
|
throw new Error(`Failed to append to file ${filePath}: ${error.message}`);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
async deleteFile(filePath) {
|
|
102
|
+
async deleteFile(filePath, signal) {
|
|
103
|
+
if (signal?.aborted)
|
|
104
|
+
throw new Error("Aborted");
|
|
103
105
|
try {
|
|
104
106
|
await fs.rm(this.resolve(filePath), { force: true });
|
|
105
107
|
}
|
|
@@ -107,9 +109,11 @@ export class CliFileSystemPort {
|
|
|
107
109
|
throw new Error(`Failed to delete file ${filePath}: ${error.message}`);
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
|
-
async backupFile(filePath) {
|
|
112
|
+
async backupFile(filePath, signal) {
|
|
113
|
+
if (signal?.aborted)
|
|
114
|
+
throw new Error("Aborted");
|
|
111
115
|
try {
|
|
112
|
-
const content = await this.readFile(filePath);
|
|
116
|
+
const content = await this.readFile(filePath, signal);
|
|
113
117
|
this.backups.set(filePath, content);
|
|
114
118
|
}
|
|
115
119
|
catch {
|
|
@@ -117,27 +121,31 @@ export class CliFileSystemPort {
|
|
|
117
121
|
this.backups.set(filePath, "__NON_EXISTENT__");
|
|
118
122
|
}
|
|
119
123
|
}
|
|
120
|
-
async restoreFile(filePath) {
|
|
124
|
+
async restoreFile(filePath, signal) {
|
|
125
|
+
if (signal?.aborted)
|
|
126
|
+
throw new Error("Aborted");
|
|
121
127
|
const content = this.backups.get(filePath);
|
|
122
128
|
if (content === undefined)
|
|
123
129
|
return;
|
|
124
130
|
if (content === "__NON_EXISTENT__") {
|
|
125
131
|
try {
|
|
126
|
-
await this.deleteFile(filePath);
|
|
132
|
+
await this.deleteFile(filePath, signal);
|
|
127
133
|
}
|
|
128
134
|
catch {
|
|
129
135
|
// Ignore errors during restore-delete
|
|
130
136
|
}
|
|
131
137
|
}
|
|
132
138
|
else {
|
|
133
|
-
await this.writeFile(filePath, content);
|
|
139
|
+
await this.writeFile(filePath, content, signal);
|
|
134
140
|
}
|
|
135
141
|
this.backups.delete(filePath);
|
|
136
142
|
}
|
|
137
|
-
async rollbackAll() {
|
|
143
|
+
async rollbackAll(signal) {
|
|
138
144
|
const paths = Array.from(this.backups.keys());
|
|
139
145
|
for (const p of paths) {
|
|
140
|
-
|
|
146
|
+
if (signal?.aborted)
|
|
147
|
+
throw new Error("Aborted");
|
|
148
|
+
await this.restoreFile(p, signal);
|
|
141
149
|
}
|
|
142
150
|
this.backups.clear();
|
|
143
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CliFileSystemPort.js","sourceRoot":"","sources":["../../../src/monolith/cli/CliFileSystemPort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAIR;IAHJ,IAAI,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,YAAoB,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IAAG,CAAC;IAElC,OAAO,CAAC,QAAgB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC9B,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,OAAqB;QACpD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CACb,QAAgB,EAChB,OAAe,EACf,MAAoB,EACpB,UAAyD;QAEzD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CACT,gCAAgC,QAAQ,yBAAyB,CAAC,CAAC,UAAU,EAAE,CAChF,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;YAEjC,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,KAAK,CAAC;gBACzB,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC5C,IAAI,CAAC;oBACH,OAAO,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC/B,IAAI,MAAM,EAAE,OAAO;4BAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;wBAChD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;wBAC7D,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC1B,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;wBACxB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;4BAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;wBACnE,CAAC;wBACD,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACrC,UAAU,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CACd,QAAgB,EAChB,OAAe,EACf,MAAoB,EACpB,UAAyD;QAEzD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;YAEjC,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,KAAK,CAAC;gBACzB,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC5C,IAAI,CAAC;oBACH,OAAO,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC/B,IAAI,MAAM,EAAE,OAAO;4BAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;wBAChD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;wBAC7D,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC1B,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;wBACxB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;4BAC5B,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;wBACpE,CAAC;wBACD,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACtC,UAAU,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;
|
|
1
|
+
{"version":3,"file":"CliFileSystemPort.js","sourceRoot":"","sources":["../../../src/monolith/cli/CliFileSystemPort.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,12 @@ import { getStringArg, getArrayArg, } from "../infrastructure/tools/ToolUtils.js
|
|
|
4
4
|
import { exec } from "child_process";
|
|
5
5
|
import { promisify } from "util";
|
|
6
6
|
import { registerSharedToolDefinitions } from "../infrastructure/tools/SharedToolDefinitions.js";
|
|
7
|
-
import { cherishFile, generateJoyDashboard } from "../
|
|
7
|
+
import { cherishFile, generateJoyDashboard } from "../infrastructure/joy/JoyTools.js";
|
|
8
8
|
import { checkCodeHealth } from "../plumbing/analysis/CodeHealthService.js";
|
|
9
9
|
import { LintService } from "../plumbing/analysis/LintService.js";
|
|
10
10
|
const execAsync = promisify(exec);
|
|
11
|
-
async function readFile(filePath, startLine, endLine) {
|
|
12
|
-
const content = await fsPromises.readFile(filePath, "utf-8");
|
|
11
|
+
async function readFile(filePath, startLine, endLine, signal) {
|
|
12
|
+
const content = await fsPromises.readFile(filePath, { encoding: "utf-8", signal });
|
|
13
13
|
const lines = content.split("\n");
|
|
14
14
|
if (startLine && endLine) {
|
|
15
15
|
return lines.slice(startLine - 1, endLine).join("\n");
|
|
@@ -67,16 +67,19 @@ async function getGitDiff(root, staged) {
|
|
|
67
67
|
return "Unable to get diff";
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
async function runCommand(command, cwd) {
|
|
70
|
+
async function runCommand(command, cwd, signal) {
|
|
71
71
|
try {
|
|
72
72
|
const { stdout, stderr } = await execAsync(command, {
|
|
73
73
|
cwd,
|
|
74
74
|
timeout: 60000,
|
|
75
75
|
maxBuffer: 1024 * 1024,
|
|
76
|
+
signal,
|
|
76
77
|
});
|
|
77
78
|
return stdout + (stderr ? `\nstderr: ${stderr}` : "");
|
|
78
79
|
}
|
|
79
80
|
catch (e) {
|
|
81
|
+
if (signal?.aborted)
|
|
82
|
+
return "Command aborted by user.";
|
|
80
83
|
return `Error: ${e.message}\n${e.stdout || ""}\n${e.stderr || ""}`;
|
|
81
84
|
}
|
|
82
85
|
}
|
|
@@ -118,7 +121,7 @@ export function registerMarieToolsCLI(registry, _automationService, workingDir,
|
|
|
118
121
|
resolvePath: (p) => path.isAbsolute(p) ? p : path.join(workingDir, p),
|
|
119
122
|
writeFile: async (p, content, signal, onProgress) => await fsPort.writeFile(p, content, signal, onProgress),
|
|
120
123
|
appendFile: async (p, content, signal, onProgress) => await fsPort.appendFile(p, content, signal, onProgress),
|
|
121
|
-
readFile: async (p, start, end) => await readFile(p, start, end),
|
|
124
|
+
readFile: async (p, start, end, signal) => await readFile(p, start, end, signal),
|
|
122
125
|
listDir: async (p) => await listFiles(p),
|
|
123
126
|
grepSearch: async (q, p) => await searchFiles(q, p),
|
|
124
127
|
getGitContext: async () => {
|
|
@@ -129,7 +132,7 @@ export function registerMarieToolsCLI(registry, _automationService, workingDir,
|
|
|
129
132
|
]);
|
|
130
133
|
return `# Git Context\n\n## Status\n\`\`\`\n${status}\n\`\`\`\n\n## Staged Changes\n\`\`\`\n${staged}\n\`\`\`\n\n## Unstaged Changes\n\`\`\`\n${unstaged}\n\`\`\``;
|
|
131
134
|
},
|
|
132
|
-
runCommand: async (cmd) => await runCommand(cmd, workingDir),
|
|
135
|
+
runCommand: async (cmd, signal) => await runCommand(cmd, workingDir, signal),
|
|
133
136
|
getFolderStructure: async (p, depth) => await getFolderTree(p, depth),
|
|
134
137
|
replaceInFile: async (p, s, r) => {
|
|
135
138
|
if (process.env.MARIE_DEBUG) {
|