march-cli 0.1.15 → 0.1.16
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/package.json
CHANGED
|
@@ -1,93 +1,11 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
|
-
import { createRunner } from "../runner.mjs";
|
|
3
1
|
import { createProcessRuntimeIpcPeer } from "./ipc/process-ipc-transport.mjs";
|
|
4
|
-
import { createRemoteRuntimeUiClient } from "./remote-ui-client.mjs";
|
|
5
2
|
import { createRunnerIpcTarget } from "./runner-ipc-target.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import { createCliShellRuntime } from "../../shell/cli-runtime.mjs";
|
|
8
|
-
import { MarkdownMemoryStore } from "../../memory/markdown-store.mjs";
|
|
9
|
-
import { createMarkdownMemoryTools } from "../../memory/markdown-tools.mjs";
|
|
10
|
-
import { initializeMcp } from "../../mcp/index.mjs";
|
|
11
|
-
import { createWebToolsFromConfig } from "../../web/tools.mjs";
|
|
12
|
-
import { createPermissionController } from "../../cli/permissions.mjs";
|
|
13
|
-
import { resolvePiSessionManager } from "../../session/pi-manager.mjs";
|
|
14
|
-
import { createModelContextDumper } from "../../debug/model-context-dumper.mjs";
|
|
15
|
-
import { createLogger, installProcessLogHandlers } from "../../debug/logger.mjs";
|
|
16
|
-
import { createDesktopTurnNotifier } from "../../notification/desktop-notifier.mjs";
|
|
3
|
+
import { createIsolatedRunner } from "./runner-process-factory.mjs";
|
|
17
4
|
|
|
18
5
|
const peer = createProcessRuntimeIpcPeer({
|
|
19
|
-
target: createRunnerIpcTarget({
|
|
6
|
+
target: createRunnerIpcTarget({
|
|
7
|
+
createRunnerImpl: (options) => createIsolatedRunner(options, { peer }),
|
|
8
|
+
}),
|
|
20
9
|
});
|
|
21
10
|
|
|
22
11
|
process.once("disconnect", () => peer.dispose());
|
|
23
|
-
|
|
24
|
-
async function createIsolatedRunner(options = {}) {
|
|
25
|
-
const ui = createRemoteRuntimeUiClient(peer);
|
|
26
|
-
const memoryStore = new MarkdownMemoryStore({ root: options.memoryRoot });
|
|
27
|
-
const memoryTools = createMarkdownMemoryTools(memoryStore);
|
|
28
|
-
const shellRuntime = options.shellRuntime ? createCliShellRuntime({ cwd: options.cwd }) : null;
|
|
29
|
-
const mcpInit = await initializeMcp({ projectDir: options.cwd });
|
|
30
|
-
const logger = createLogger({ logDir: options.logDir ?? (options.stateRoot ? join(options.stateRoot, "logs") : undefined) });
|
|
31
|
-
installProcessLogHandlers(logger);
|
|
32
|
-
|
|
33
|
-
const runner = await createRunner({
|
|
34
|
-
cwd: options.cwd,
|
|
35
|
-
modelId: options.modelId,
|
|
36
|
-
provider: options.provider,
|
|
37
|
-
serviceTier: options.serviceTier,
|
|
38
|
-
providers: options.providers,
|
|
39
|
-
stateRoot: options.stateRoot,
|
|
40
|
-
ui,
|
|
41
|
-
memoryRoot: options.memoryRoot,
|
|
42
|
-
profilePaths: options.profilePaths,
|
|
43
|
-
memoryStore,
|
|
44
|
-
memoryTools,
|
|
45
|
-
shellRuntime,
|
|
46
|
-
mcpTools: mcpInit.mcpTools,
|
|
47
|
-
mcpInjections: mcpInit.mcpInjections,
|
|
48
|
-
mcpClientManager: mcpInit.clientManager,
|
|
49
|
-
webTools: createWebToolsFromConfig(options.config ?? {}),
|
|
50
|
-
namespace: options.namespace,
|
|
51
|
-
projectMarchDir: options.projectMarchDir,
|
|
52
|
-
extensionPaths: options.extensionPaths ?? [],
|
|
53
|
-
sessionManager: resolvePiSessionManager({
|
|
54
|
-
cwd: options.cwd,
|
|
55
|
-
projectMarchDir: options.projectMarchDir,
|
|
56
|
-
enabled: true,
|
|
57
|
-
}),
|
|
58
|
-
useRuntimeHost: true,
|
|
59
|
-
syncPiSidecar: true,
|
|
60
|
-
lifecycleHooks: options.lifecycleHooks ?? [],
|
|
61
|
-
lifecycleDiagnostics: options.lifecycleDiagnostics ?? [],
|
|
62
|
-
authStorage: createMarchAuthStorage({
|
|
63
|
-
provider: options.provider ?? "deepseek",
|
|
64
|
-
providers: options.providers,
|
|
65
|
-
cwd: options.cwd,
|
|
66
|
-
}).authStorage,
|
|
67
|
-
maxTurns: options.config?.maxTurns ?? undefined,
|
|
68
|
-
trimBatch: options.config?.trimBatch ?? undefined,
|
|
69
|
-
hostedTools: options.config?.hostedTools,
|
|
70
|
-
permissionController: createPermissionController({ mode: options.permissionMode }),
|
|
71
|
-
modelContextDumper: createModelContextDumper(options.modelContextDumper ?? { enabled: false }),
|
|
72
|
-
turnNotifier: createDesktopTurnNotifier({
|
|
73
|
-
enabled: Boolean(options.config?.notifications?.turnEnd),
|
|
74
|
-
config: options.config?.notifications,
|
|
75
|
-
}),
|
|
76
|
-
logger,
|
|
77
|
-
onModelPayload: (event) => peer.notify("modelPayload", pickModelPayloadEvent(event)),
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
const originalDispose = runner.dispose;
|
|
81
|
-
runner.dispose = async () => {
|
|
82
|
-
try {
|
|
83
|
-
await originalDispose.call(runner);
|
|
84
|
-
} finally {
|
|
85
|
-
memoryStore.close?.();
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
return runner;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function pickModelPayloadEvent({ estimatedTokens, provider, model, kind, turnId } = {}) {
|
|
92
|
-
return { estimatedTokens, provider, model, kind, turnId };
|
|
93
|
-
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { createRunner } from "../runner.mjs";
|
|
3
|
+
import { createRemoteRuntimeUiClient } from "./remote-ui-client.mjs";
|
|
4
|
+
import { createMarchAuthStorage } from "../../auth/storage.mjs";
|
|
5
|
+
import { createCliShellRuntime } from "../../shell/cli-runtime.mjs";
|
|
6
|
+
import { MarkdownMemoryStore } from "../../memory/markdown-store.mjs";
|
|
7
|
+
import { createMarkdownMemoryTools } from "../../memory/markdown-tools.mjs";
|
|
8
|
+
import { initializeMcp } from "../../mcp/index.mjs";
|
|
9
|
+
import { createWebToolsFromConfig } from "../../web/tools.mjs";
|
|
10
|
+
import { createPermissionController } from "../../cli/permissions.mjs";
|
|
11
|
+
import { resolvePiSessionManager } from "../../session/pi-manager.mjs";
|
|
12
|
+
import { createModelContextDumper } from "../../debug/model-context-dumper.mjs";
|
|
13
|
+
import { createLogger, installProcessLogHandlers } from "../../debug/logger.mjs";
|
|
14
|
+
import { createDesktopTurnNotifier } from "../../notification/desktop-notifier.mjs";
|
|
15
|
+
import { installNetworkEnvironment } from "../../network/environment.mjs";
|
|
16
|
+
|
|
17
|
+
const DEFAULT_DEPS = {
|
|
18
|
+
createRunner,
|
|
19
|
+
createRemoteRuntimeUiClient,
|
|
20
|
+
createCliShellRuntime,
|
|
21
|
+
MarkdownMemoryStore,
|
|
22
|
+
createMarkdownMemoryTools,
|
|
23
|
+
initializeMcp,
|
|
24
|
+
createWebToolsFromConfig,
|
|
25
|
+
createPermissionController,
|
|
26
|
+
resolvePiSessionManager,
|
|
27
|
+
createModelContextDumper,
|
|
28
|
+
createMarchAuthStorage,
|
|
29
|
+
createLogger,
|
|
30
|
+
installProcessLogHandlers,
|
|
31
|
+
createDesktopTurnNotifier,
|
|
32
|
+
installNetworkEnvironment,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export async function createIsolatedRunner(options = {}, deps = {}) {
|
|
36
|
+
const d = { ...DEFAULT_DEPS, ...deps };
|
|
37
|
+
d.installNetworkEnvironment(options.config?.network);
|
|
38
|
+
|
|
39
|
+
const ui = d.createRemoteRuntimeUiClient(d.peer);
|
|
40
|
+
const memoryStore = new d.MarkdownMemoryStore({ root: options.memoryRoot });
|
|
41
|
+
const memoryTools = d.createMarkdownMemoryTools(memoryStore);
|
|
42
|
+
const shellRuntime = options.shellRuntime ? d.createCliShellRuntime({ cwd: options.cwd }) : null;
|
|
43
|
+
const mcpInit = await d.initializeMcp({ projectDir: options.cwd });
|
|
44
|
+
const logDir = options.logDir ?? (options.stateRoot ? join(options.stateRoot, "logs") : undefined);
|
|
45
|
+
const logger = d.createLogger({ logDir });
|
|
46
|
+
d.installProcessLogHandlers(logger);
|
|
47
|
+
|
|
48
|
+
const runner = await d.createRunner({
|
|
49
|
+
cwd: options.cwd,
|
|
50
|
+
modelId: options.modelId,
|
|
51
|
+
provider: options.provider,
|
|
52
|
+
serviceTier: options.serviceTier,
|
|
53
|
+
providers: options.providers,
|
|
54
|
+
stateRoot: options.stateRoot,
|
|
55
|
+
ui,
|
|
56
|
+
memoryRoot: options.memoryRoot,
|
|
57
|
+
profilePaths: options.profilePaths,
|
|
58
|
+
memoryStore,
|
|
59
|
+
memoryTools,
|
|
60
|
+
shellRuntime,
|
|
61
|
+
mcpTools: mcpInit.mcpTools,
|
|
62
|
+
mcpInjections: mcpInit.mcpInjections,
|
|
63
|
+
mcpClientManager: mcpInit.clientManager,
|
|
64
|
+
webTools: d.createWebToolsFromConfig(options.config ?? {}),
|
|
65
|
+
namespace: options.namespace,
|
|
66
|
+
projectMarchDir: options.projectMarchDir,
|
|
67
|
+
extensionPaths: options.extensionPaths ?? [],
|
|
68
|
+
sessionManager: d.resolvePiSessionManager({
|
|
69
|
+
cwd: options.cwd,
|
|
70
|
+
projectMarchDir: options.projectMarchDir,
|
|
71
|
+
enabled: true,
|
|
72
|
+
}),
|
|
73
|
+
useRuntimeHost: true,
|
|
74
|
+
syncPiSidecar: true,
|
|
75
|
+
lifecycleHooks: options.lifecycleHooks ?? [],
|
|
76
|
+
lifecycleDiagnostics: options.lifecycleDiagnostics ?? [],
|
|
77
|
+
authStorage: d.createMarchAuthStorage({
|
|
78
|
+
provider: options.provider ?? "deepseek",
|
|
79
|
+
providers: options.providers,
|
|
80
|
+
cwd: options.cwd,
|
|
81
|
+
}).authStorage,
|
|
82
|
+
maxTurns: options.config?.maxTurns ?? undefined,
|
|
83
|
+
trimBatch: options.config?.trimBatch ?? undefined,
|
|
84
|
+
hostedTools: options.config?.hostedTools,
|
|
85
|
+
permissionController: d.createPermissionController({ mode: options.permissionMode }),
|
|
86
|
+
modelContextDumper: d.createModelContextDumper(options.modelContextDumper ?? { enabled: false }),
|
|
87
|
+
turnNotifier: d.createDesktopTurnNotifier({
|
|
88
|
+
enabled: Boolean(options.config?.notifications?.turnEnd),
|
|
89
|
+
config: options.config?.notifications,
|
|
90
|
+
}),
|
|
91
|
+
logger,
|
|
92
|
+
onModelPayload: (event) => d.peer.notify("modelPayload", pickModelPayloadEvent(event)),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const originalDispose = runner.dispose;
|
|
96
|
+
runner.dispose = async () => {
|
|
97
|
+
try {
|
|
98
|
+
await originalDispose.call(runner);
|
|
99
|
+
} finally {
|
|
100
|
+
memoryStore.close?.();
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
return runner;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function pickModelPayloadEvent({ estimatedTokens, provider, model, kind, turnId } = {}) {
|
|
107
|
+
return { estimatedTokens, provider, model, kind, turnId };
|
|
108
|
+
}
|