nolo-cli 0.1.32 → 0.1.34
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 +4 -10
- package/agent-runtime/agentRecordConfig.ts +10 -0
- package/agent-runtime/hostAdapter.ts +10 -1
- package/agent-runtime/index.ts +9 -20
- package/agent-runtime/localLoop.ts +49 -2
- package/agent-runtime/localToolPolicy.ts +76 -34
- package/agent-runtime/localWorkspaceTools.ts +30 -333
- package/agent-runtime/openAiCompatibleProvider.ts +7 -3
- package/agent-runtime/openAiCompatibleProviderConfig.ts +15 -26
- package/agent-runtime/platformChatProvider.ts +47 -73
- package/agent-runtime/providerResolution.ts +244 -0
- package/agent-runtime/runtimeToolPolicy.ts +77 -29
- package/agent-runtime/shellCommandPolicy.ts +120 -0
- package/agentAliases.ts +14 -83
- package/agentCommandSupport.ts +3 -6
- package/agentInternalCommandEntries.ts +4 -13
- package/agentListCommands.ts +18 -27
- package/agentMachineCommands.ts +40 -336
- package/agentPullCommand.ts +30 -55
- package/agentRecordCommands.ts +84 -1
- package/agentRecordHelpers.ts +102 -186
- package/agentRunCommand.ts +438 -107
- package/agentRuntimeLocal.ts +2 -9
- package/ai/agent/cliExecutor.ts +19 -323
- package/ai/tools/toolNameAliases.ts +70 -0
- package/authCommands.ts +2 -36
- package/cli/agentAliases.ts +14 -83
- package/cli/agentCommandSupport.ts +3 -6
- package/cli/agentInternalCommandEntries.ts +4 -13
- package/cli/agentListCommands.ts +18 -27
- package/cli/agentMachineCommands.ts +40 -336
- package/cli/agentPullCommand.ts +30 -55
- package/cli/agentRecordCommands.ts +84 -1
- package/cli/agentRecordHelpers.ts +102 -186
- package/cli/agentRunCommand.ts +438 -107
- package/cli/agentRuntimeLocal.ts +2 -9
- package/cli/authCommands.ts +2 -36
- package/cli/cliCommandDispatch.ts +2 -2
- package/cli/cliEnvHelpers.ts +34 -107
- package/cli/client/agentRun.ts +854 -57
- package/cli/client/localRuntimeAdapter.ts +59 -159
- package/cli/client/streamingOutput.ts +3 -1
- package/cli/client/taskRunPrompt.ts +24 -7
- package/cli/commandRegistry.ts +4 -5
- package/cli/connectorRunArtifact.ts +10 -34
- package/cli/connectorWebSocketTarget.ts +6 -10
- package/cli/internalCommandEntries.ts +0 -8
- package/cli/localRuntimeDb.ts +2 -39
- package/cli/machineCommands.ts +189 -190
- package/cli/machineDaemonCommands.ts +165 -9
- package/cli/machineHeartbeatCommands.ts +2 -1
- package/cli/machineStatusCommands.ts +13 -5
- package/cli/machineWatchCommands.ts +1 -1
- package/cli/machineWsRunDispatch.ts +30 -44
- package/cli/machineWsSession.ts +0 -2
- package/cli/offlineMarxistsAgentCommand.ts +314 -0
- package/cli/runtimeDoctorCommands.ts +72 -15
- package/cli/scriptCommandEntries.ts +45 -5
- package/cli/tableCommands.ts +133 -33
- package/cli/taskRunCommand.ts +211 -16
- package/cli/tui/session.ts +372 -43
- package/cli/workflowInternalCommandEntries.ts +0 -20
- package/cliCommandDispatch.ts +2 -2
- package/cliEnvHelpers.ts +34 -107
- package/client/agentConfigResolver.test.ts +2 -0
- package/client/agentRun.test.ts +12 -208
- package/client/agentRun.ts +854 -57
- package/client/localProviderResolver.test.ts +26 -2
- package/client/localRuntimeAdapter.test.ts +296 -171
- package/client/localRuntimeAdapter.ts +59 -159
- package/client/localToolPolicy.test.ts +4 -28
- package/client/streamingOutput.ts +3 -1
- package/client/taskRunPrompt.ts +24 -7
- package/commandRegistry.ts +4 -5
- package/connectorRunArtifact.ts +10 -34
- package/connectorWebSocketTarget.ts +6 -10
- package/database/server/serverStoreFactory.ts +2 -8
- package/internalCommandEntries.ts +0 -8
- package/localRuntimeDb.ts +2 -39
- package/machineCommands.ts +189 -190
- package/machineDaemonCommands.ts +165 -9
- package/machineHeartbeatCommands.ts +2 -1
- package/machineStatusCommands.ts +13 -5
- package/machineWatchCommands.ts +1 -1
- package/machineWsRunDispatch.ts +30 -44
- package/machineWsSession.ts +0 -2
- package/offlineMarxistsAgentCommand.ts +314 -0
- package/package.json +52 -188
- package/runtimeDoctorCommands.ts +72 -15
- package/scriptCommandEntries.ts +45 -5
- package/tableCommands.ts +133 -33
- package/taskRunCommand.ts +211 -16
- package/tui/session.ts +372 -43
- package/workflowInternalCommandEntries.ts +0 -20
- package/agent-runtime/dialogStatus.ts +0 -139
- package/agent-runtime/hostRuntimeConfig.ts +0 -86
- package/agentCreateCustomCommands.ts +0 -278
- package/agentDialogsCommands.ts +0 -227
- package/agentDoctorCommands.ts +0 -203
- package/agentRunLocalWorkspace.ts +0 -182
- package/agentRunParsing.ts +0 -298
- package/agentSuperviseCommands.ts +0 -8
- package/agentUnpublishCommands.ts +0 -113
- package/ai/agent/agentRunDialogLineage.ts +0 -56
- package/ai/policy/types.ts +0 -64
- package/ai/skills/skillSummaryMarker.ts +0 -26
- package/app/types.ts +0 -358
- package/build.ts +0 -16
- package/buildPublish.ts +0 -138
- package/buildPublishArtifactAssembly.ts +0 -724
- package/buildPublishImportAnalysis.ts +0 -242
- package/chat/messages/fetchMessages.ts +0 -84
- package/chat/messages/types.ts +0 -185
- package/cli/agentCreateCustomCommands.ts +0 -278
- package/cli/agentDialogsCommands.ts +0 -227
- package/cli/agentDoctorCommands.ts +0 -203
- package/cli/agentRunLocalWorkspace.ts +0 -182
- package/cli/agentRunParsing.ts +0 -298
- package/cli/agentSuperviseCommands.ts +0 -8
- package/cli/agentUnpublishCommands.ts +0 -113
- package/cli/buildPublish.ts +0 -138
- package/cli/buildPublishArtifactAssembly.ts +0 -724
- package/cli/buildPublishImportAnalysis.ts +0 -242
- package/cli/cliIoTypes.ts +0 -3
- package/cli/cliRuntimeDoctorReport.ts +0 -193
- package/cli/client/agentRunInput.ts +0 -10
- package/cli/client/agentRunLocalExecution.ts +0 -124
- package/cli/client/agentRunLocalExecutor.ts +0 -179
- package/cli/client/agentRunRuntimeSelection.ts +0 -145
- package/cli/client/agentRunServerTransport.ts +0 -397
- package/cli/client/agentRunTaskRunRecorder.ts +0 -176
- package/cli/customCodingAgentFlow.ts +0 -208
- package/cli/customCodingAgentRecord.ts +0 -179
- package/cli/dialogDataAccess.ts +0 -186
- package/cli/dialogInternalCommandEntries.ts +0 -11
- package/cli/dialogReadCommands.ts +0 -180
- package/cli/dialogReadHelpers.ts +0 -226
- package/cli/dialogStatusCommands.ts +0 -123
- package/cli/docInternalCommandEntries.ts +0 -20
- package/cli/hybridReadHelpers.ts +0 -109
- package/cli/machineCommandPrompts.ts +0 -79
- package/cli/machineCommandResolution.ts +0 -43
- package/cli/noloReadBridgePrompt.ts +0 -16
- package/cli/pageCreateCommands.ts +0 -219
- package/cli/pageDeleteCommands.ts +0 -167
- package/cli/pageReadCommands.ts +0 -151
- package/cli/pageUpdateCommands.ts +0 -249
- package/cli/pageWriteHelpers.ts +0 -209
- package/cli/publishPackage.ts +0 -36
- package/cli/runtimeInternalCommandEntries.ts +0 -15
- package/cli/runtimePassthroughCommands.ts +0 -22
- package/cli/scriptPassthroughHelpers.ts +0 -28
- package/cli/secretScanHelpers.ts +0 -31
- package/cli/spaceAttachCommands.ts +0 -134
- package/cli/spaceCategoryCommands.ts +0 -263
- package/cli/spaceCommands.ts +0 -295
- package/cli/spaceDeleteCommands.ts +0 -312
- package/cli/spaceInternalCommandEntries.ts +0 -21
- package/cli/spaceMutationHelpers.ts +0 -135
- package/cli/spaceReadCommands.ts +0 -323
- package/cli/tableDataOutput.ts +0 -41
- package/cli/tableDataSafety.ts +0 -26
- package/cli/tableMetaCommands.ts +0 -307
- package/cli/tableMutationCommands.ts +0 -266
- package/cli/tableQueryParsing.ts +0 -90
- package/cli/tableQueryRequest.ts +0 -53
- package/cli/taskRunActions.ts +0 -122
- package/cli/taskRunParsing.ts +0 -86
- package/cli/taskRunPromptShared.ts +0 -55
- package/cli/tui/tuiCatalog.ts +0 -22
- package/cli/tui/tuiCommandInterpreter.ts +0 -253
- package/cli/tui/tuiPresentation.ts +0 -146
- package/cliIoTypes.ts +0 -3
- package/cliRuntimeDoctorReport.ts +0 -193
- package/client/agentRunInput.ts +0 -10
- package/client/agentRunLocalExecution.test.ts +0 -123
- package/client/agentRunLocalExecution.ts +0 -124
- package/client/agentRunLocalExecutor.ts +0 -179
- package/client/agentRunRuntimeSelection.test.ts +0 -159
- package/client/agentRunRuntimeSelection.ts +0 -145
- package/client/agentRunServerTransport.ts +0 -397
- package/client/agentRunTaskRunRecorder.ts +0 -176
- package/connector-experimental/daemonLauncher.ts +0 -223
- package/create/space/spaceKeys.ts +0 -65
- package/create/types.ts +0 -21
- package/customCodingAgentFlow.ts +0 -208
- package/customCodingAgentRecord.ts +0 -179
- package/database/keys.ts +0 -765
- package/database/tombstones.ts +0 -52
- package/database/utils/ulid.ts +0 -1
- package/dialogDataAccess.ts +0 -186
- package/dialogInternalCommandEntries.ts +0 -11
- package/dialogReadCommands.ts +0 -180
- package/dialogReadHelpers.ts +0 -226
- package/dialogStatusCommands.ts +0 -123
- package/docInternalCommandEntries.ts +0 -20
- package/hybridReadHelpers.ts +0 -109
- package/machineCommandPrompts.ts +0 -79
- package/machineCommandResolution.ts +0 -43
- package/noloReadBridgePrompt.ts +0 -16
- package/pageCreateCommands.ts +0 -219
- package/pageDeleteCommands.ts +0 -167
- package/pageReadCommands.ts +0 -151
- package/pageUpdateCommands.ts +0 -249
- package/pageWriteHelpers.ts +0 -209
- package/publishPackage.ts +0 -36
- package/runtimeInternalCommandEntries.ts +0 -15
- package/runtimePassthroughCommands.ts +0 -22
- package/scriptPassthroughHelpers.ts +0 -28
- package/secretScanHelpers.ts +0 -31
- package/share/helpers.ts +0 -302
- package/share/keys.ts +0 -243
- package/share/types.ts +0 -100
- package/spaceAttachCommands.ts +0 -134
- package/spaceCategoryCommands.ts +0 -263
- package/spaceCommands.ts +0 -295
- package/spaceDeleteCommands.ts +0 -312
- package/spaceInternalCommandEntries.ts +0 -21
- package/spaceMutationHelpers.ts +0 -135
- package/spaceReadCommands.ts +0 -323
- package/tableDataOutput.ts +0 -41
- package/tableDataSafety.ts +0 -26
- package/tableMetaCommands.ts +0 -307
- package/tableMutationCommands.ts +0 -266
- package/tableQueryParsing.ts +0 -90
- package/tableQueryRequest.ts +0 -53
- package/taskRunActions.ts +0 -122
- package/taskRunParsing.ts +0 -86
- package/taskRunPromptShared.ts +0 -55
- package/tui/tuiCatalog.ts +0 -22
- package/tui/tuiCommandInterpreter.test.ts +0 -169
- package/tui/tuiCommandInterpreter.ts +0 -253
- package/tui/tuiPresentation.test.ts +0 -154
- package/tui/tuiPresentation.ts +0 -146
|
@@ -7,7 +7,6 @@ import { request as httpRequest } from "node:http";
|
|
|
7
7
|
import { request as httpsRequest } from "node:https";
|
|
8
8
|
import {
|
|
9
9
|
buildLocalWorkspacePolicyToolNames,
|
|
10
|
-
resolveLocalWorkspaceShellToolExposure,
|
|
11
10
|
buildLocalWorkspaceToolset,
|
|
12
11
|
buildLocalWorkspaceOpenAiTools,
|
|
13
12
|
buildOpenAiCompatibleChatCompletionRequest,
|
|
@@ -16,11 +15,9 @@ import {
|
|
|
16
15
|
parseOpenAiCompatibleChatCompletionResponse,
|
|
17
16
|
parsePlatformChatCompletionData,
|
|
18
17
|
parsePlatformChatCompletionResponse,
|
|
19
|
-
resolveHostRuntimeConfigFromEnv,
|
|
20
18
|
resolvePlatformChatProviderConfig,
|
|
21
19
|
resolveRequestedRuntimeToolNames,
|
|
22
20
|
shouldUsePlatformChatProvider,
|
|
23
|
-
type HostRuntimeConfig,
|
|
24
21
|
} from "../agentRuntimeLocal";
|
|
25
22
|
import type { AgentRuntimeChatMessage } from "../agent-runtime";
|
|
26
23
|
import { getDefaultCliLocalRuntimeDb } from "../localRuntimeDb";
|
|
@@ -52,29 +49,6 @@ import {
|
|
|
52
49
|
type EnvLike = Record<string, string | undefined>;
|
|
53
50
|
type FetchInput = Parameters<typeof fetch>[0];
|
|
54
51
|
type FetchInit = Parameters<typeof fetch>[1];
|
|
55
|
-
type CliLocalRuntimeCliExecution = {
|
|
56
|
-
text: string;
|
|
57
|
-
raw?: string;
|
|
58
|
-
elapsed?: number;
|
|
59
|
-
warnings?: string[];
|
|
60
|
-
};
|
|
61
|
-
type CliLocalRuntimeCliExecutor = (
|
|
62
|
-
provider: string,
|
|
63
|
-
prompt: string,
|
|
64
|
-
options: {
|
|
65
|
-
model?: string;
|
|
66
|
-
timeout?: number;
|
|
67
|
-
cwd?: string;
|
|
68
|
-
yolo?: boolean;
|
|
69
|
-
env?: EnvLike;
|
|
70
|
-
systemPrompt?: string;
|
|
71
|
-
reasoningEffort?: "low" | "medium" | "high" | "xhigh" | "max";
|
|
72
|
-
temperature?: number;
|
|
73
|
-
topP?: number;
|
|
74
|
-
frequencyPenalty?: number;
|
|
75
|
-
maxTokens?: number;
|
|
76
|
-
}
|
|
77
|
-
) => Promise<CliLocalRuntimeCliExecution>;
|
|
78
52
|
const TRANSIENT_FETCH_MAX_ATTEMPTS = 8;
|
|
79
53
|
const TRANSIENT_FETCH_RETRY_BASE_DELAY_MS = 250;
|
|
80
54
|
|
|
@@ -82,17 +56,16 @@ export type CliLocalRuntimeDb = CliKvDb;
|
|
|
82
56
|
|
|
83
57
|
export type CliLocalRuntimeAdapterDeps = {
|
|
84
58
|
env: EnvLike;
|
|
85
|
-
hostRuntimeConfig?: HostRuntimeConfig;
|
|
86
59
|
db?: CliLocalRuntimeDb;
|
|
87
60
|
store?: HybridRecordStore;
|
|
88
61
|
now?: () => number;
|
|
89
62
|
createId?: () => string;
|
|
90
63
|
fetchImpl?: typeof fetch;
|
|
91
64
|
cwd?: string;
|
|
65
|
+
useCwdAsTaskWorkspaceBase?: boolean;
|
|
92
66
|
output?: { write(chunk: string): unknown };
|
|
93
67
|
prepareTaskWorktree?: typeof prepareTaskWorktree;
|
|
94
68
|
localToolExecutors?: Record<string, (call: any) => Promise<{ content: string; metadata?: Record<string, unknown> }>>;
|
|
95
|
-
executeCli?: CliLocalRuntimeCliExecutor;
|
|
96
69
|
sleep?: (ms: number) => Promise<void>;
|
|
97
70
|
loopbackRequest?: (input: FetchInput, init?: FetchInit) => Promise<Response>;
|
|
98
71
|
};
|
|
@@ -101,15 +74,6 @@ async function defaultLocalRuntimeDb(): Promise<CliLocalRuntimeDb> {
|
|
|
101
74
|
return getDefaultCliLocalRuntimeDb();
|
|
102
75
|
}
|
|
103
76
|
|
|
104
|
-
async function defaultExecuteCli(
|
|
105
|
-
provider: string,
|
|
106
|
-
prompt: string,
|
|
107
|
-
options: Parameters<CliLocalRuntimeCliExecutor>[2]
|
|
108
|
-
) {
|
|
109
|
-
const { executeCli } = await import("../ai/agent/cliExecutor");
|
|
110
|
-
return executeCli(provider as any, prompt, options);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
77
|
function createFallbackId() {
|
|
114
78
|
return `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`.toUpperCase();
|
|
115
79
|
}
|
|
@@ -118,6 +82,10 @@ function resolveLocalUserId(env: EnvLike) {
|
|
|
118
82
|
return env.NOLO_LOCAL_USER_ID || env.NOLO_USER_ID || "local";
|
|
119
83
|
}
|
|
120
84
|
|
|
85
|
+
function shellModeEnabled(env: EnvLike) {
|
|
86
|
+
return ["worktree", "dangerous", "1", "true"].includes(env.NOLO_LOCAL_SHELL_MODE || "");
|
|
87
|
+
}
|
|
88
|
+
|
|
121
89
|
function parseLocalToolBudgets(env: EnvLike) {
|
|
122
90
|
const raw = env.NOLO_LOCAL_TOOL_BUDGETS?.trim();
|
|
123
91
|
if (!raw) return {};
|
|
@@ -202,6 +170,12 @@ async function defaultLoopbackRequest(input: FetchInput, init?: FetchInit) {
|
|
|
202
170
|
});
|
|
203
171
|
});
|
|
204
172
|
req.on("error", reject);
|
|
173
|
+
init?.signal?.addEventListener("abort", () => {
|
|
174
|
+
req.destroy(
|
|
175
|
+
init.signal?.reason instanceof Error ? init.signal.reason : new Error("request aborted")
|
|
176
|
+
);
|
|
177
|
+
reject(init.signal?.reason ?? new Error("request aborted"));
|
|
178
|
+
}, { once: true });
|
|
205
179
|
if (body) req.write(body);
|
|
206
180
|
req.end();
|
|
207
181
|
});
|
|
@@ -224,6 +198,7 @@ async function fetchWithTransientRetry(
|
|
|
224
198
|
}
|
|
225
199
|
return await fetchImpl(input, init);
|
|
226
200
|
} catch (error) {
|
|
201
|
+
if (init?.signal?.aborted) throw error;
|
|
227
202
|
if (!isTransientFetchError(error)) throw error;
|
|
228
203
|
lastError = error;
|
|
229
204
|
if (attempt < TRANSIENT_FETCH_MAX_ATTEMPTS) {
|
|
@@ -234,52 +209,44 @@ async function fetchWithTransientRetry(
|
|
|
234
209
|
throw lastError;
|
|
235
210
|
}
|
|
236
211
|
|
|
237
|
-
function
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
212
|
+
function buildRequestTimeoutSignal(timeoutMs?: number) {
|
|
213
|
+
if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
if (typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function") {
|
|
217
|
+
return AbortSignal.timeout(timeoutMs);
|
|
218
|
+
}
|
|
219
|
+
const controller = new AbortController();
|
|
220
|
+
setTimeout(() => controller.abort(new Error(`request timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
221
|
+
return controller.signal;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function buildOpenAiTools(args: { toolNames?: string[]; env: EnvLike }) {
|
|
225
|
+
const toolset = buildLocalWorkspaceToolsetForEnv(args);
|
|
243
226
|
return [
|
|
244
227
|
...buildLocalWorkspaceOpenAiTools({
|
|
245
228
|
toolNames: toolset.toolNames,
|
|
246
229
|
exposeShellTools: toolset.exposeShellTools,
|
|
247
230
|
}),
|
|
248
|
-
...buildServerPlatformOpenAiTools({ toolNames: args.
|
|
231
|
+
...buildServerPlatformOpenAiTools({ toolNames: args.toolNames }),
|
|
249
232
|
];
|
|
250
233
|
}
|
|
251
234
|
|
|
252
|
-
function
|
|
253
|
-
requestedToolNames?: string[];
|
|
254
|
-
hostRuntimeConfig: HostRuntimeConfig;
|
|
255
|
-
}) {
|
|
256
|
-
const requestedToolNames = args.requestedToolNames ?? [];
|
|
257
|
-
const exposeShellTools = resolveLocalWorkspaceShellToolExposure({
|
|
258
|
-
declaredToolNames: requestedToolNames,
|
|
259
|
-
hostRuntimeConfig: args.hostRuntimeConfig,
|
|
260
|
-
});
|
|
235
|
+
function buildLocalWorkspaceToolsetForEnv(args: { toolNames?: string[]; env: EnvLike }) {
|
|
261
236
|
const toolset = buildLocalWorkspaceToolset({
|
|
262
|
-
declaredToolNames:
|
|
263
|
-
exposeShellTools,
|
|
237
|
+
declaredToolNames: args.toolNames,
|
|
238
|
+
exposeShellTools: shellModeEnabled(args.env),
|
|
264
239
|
});
|
|
265
240
|
return toolset;
|
|
266
241
|
}
|
|
267
242
|
|
|
268
|
-
function buildLocalPolicyToolNames(args: {
|
|
269
|
-
requestedToolNames?: string[];
|
|
270
|
-
platformToolNames?: string[];
|
|
271
|
-
hostRuntimeConfig: HostRuntimeConfig;
|
|
272
|
-
}) {
|
|
273
|
-
const exposeShellTools = resolveLocalWorkspaceShellToolExposure({
|
|
274
|
-
declaredToolNames: args.requestedToolNames,
|
|
275
|
-
hostRuntimeConfig: args.hostRuntimeConfig,
|
|
276
|
-
});
|
|
243
|
+
function buildLocalPolicyToolNames(args: { toolNames?: string[]; env: EnvLike }) {
|
|
277
244
|
return [
|
|
278
245
|
...buildLocalWorkspacePolicyToolNames({
|
|
279
|
-
declaredToolNames: args.
|
|
280
|
-
exposeShellTools,
|
|
246
|
+
declaredToolNames: args.toolNames,
|
|
247
|
+
exposeShellTools: shellModeEnabled(args.env),
|
|
281
248
|
}),
|
|
282
|
-
...((args.
|
|
249
|
+
...((args.toolNames ?? []).includes("taskRun") ? ["taskRun"] : []),
|
|
283
250
|
];
|
|
284
251
|
}
|
|
285
252
|
|
|
@@ -365,33 +332,6 @@ function readLocalWorkspaceMode(agentConfig: AgentRuntimeAgentConfig | null) {
|
|
|
365
332
|
return value === "task-worktree" ? "task-worktree" : "current";
|
|
366
333
|
}
|
|
367
334
|
|
|
368
|
-
function extractRuntimeMessageText(content: AgentRuntimeChatMessage["content"]) {
|
|
369
|
-
if (typeof content === "string") return content;
|
|
370
|
-
if (!Array.isArray(content)) return "";
|
|
371
|
-
return content
|
|
372
|
-
.filter((part): part is Extract<typeof part, { type: "text" }> => part?.type === "text")
|
|
373
|
-
.map((part) => part.text ?? "")
|
|
374
|
-
.join("");
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
function buildCliTaskPromptFromMessages(messages: AgentRuntimeChatMessage[]) {
|
|
378
|
-
const history = messages
|
|
379
|
-
.filter((message) => message.role === "user" || message.role === "assistant")
|
|
380
|
-
.map((message) => {
|
|
381
|
-
const text = extractRuntimeMessageText(message.content).trim();
|
|
382
|
-
if (!text) return null;
|
|
383
|
-
return `[${message.role === "user" ? "用户" : "助手"}]\n${text}`;
|
|
384
|
-
})
|
|
385
|
-
.filter((message): message is string => Boolean(message))
|
|
386
|
-
.slice(-6);
|
|
387
|
-
|
|
388
|
-
if (history.length === 0) return "";
|
|
389
|
-
if (history.length === 1 && history[0]?.startsWith("[用户]\n")) {
|
|
390
|
-
return history[0].slice("[用户]\n".length);
|
|
391
|
-
}
|
|
392
|
-
return `请基于以下最近对话继续完成当前任务。\n\n${history.join("\n\n")}`;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
335
|
async function resolveStore(deps: CliLocalRuntimeAdapterDeps) {
|
|
396
336
|
if (deps.store) return deps.store;
|
|
397
337
|
return createCliHybridRecordStore({
|
|
@@ -462,18 +402,12 @@ export function createCliLocalRuntimeAdapter(
|
|
|
462
402
|
const createId = deps.createId ?? createFallbackId;
|
|
463
403
|
const fetchImpl = deps.fetchImpl ?? fetch;
|
|
464
404
|
const loopbackRequest = deps.loopbackRequest ?? (deps.fetchImpl ? undefined : defaultLoopbackRequest);
|
|
465
|
-
const executeCli = deps.executeCli ?? defaultExecuteCli;
|
|
466
405
|
const userId = resolveLocalUserId(deps.env);
|
|
467
|
-
const hostRuntimeConfig = deps.hostRuntimeConfig ?? resolveHostRuntimeConfigFromEnv({
|
|
468
|
-
env: deps.env,
|
|
469
|
-
surface: "cli-local",
|
|
470
|
-
workspaceBinding: "explicit-cwd",
|
|
471
|
-
});
|
|
472
406
|
const localToolBudgets = parseLocalToolBudgets(deps.env);
|
|
473
407
|
const localToolUsage = new Map<string, number>();
|
|
474
408
|
let activeAgentToolNames: string[] = [];
|
|
475
409
|
let workspaceSession: WorkspaceSession = createWorkspaceSession(
|
|
476
|
-
|
|
410
|
+
deps.useCwdAsTaskWorkspaceBase
|
|
477
411
|
? { defaultCwd: deps.cwd }
|
|
478
412
|
: { cwd: deps.cwd }
|
|
479
413
|
);
|
|
@@ -518,9 +452,8 @@ export function createCliLocalRuntimeAdapter(
|
|
|
518
452
|
? resolveRequestedRuntimeToolNames({ agentConfig })
|
|
519
453
|
: [];
|
|
520
454
|
activeAgentToolNames = buildLocalPolicyToolNames({
|
|
521
|
-
requestedToolNames,
|
|
522
|
-
|
|
523
|
-
hostRuntimeConfig,
|
|
455
|
+
toolNames: requestedToolNames,
|
|
456
|
+
env: deps.env,
|
|
524
457
|
});
|
|
525
458
|
await activateAgentWorkspaceSession({ agentRef, agentConfig });
|
|
526
459
|
return agentConfig;
|
|
@@ -538,48 +471,6 @@ export function createCliLocalRuntimeAdapter(
|
|
|
538
471
|
cwd: workspaceSession.workspaceRoot,
|
|
539
472
|
}),
|
|
540
473
|
resolveProvider: async (agentConfig) => {
|
|
541
|
-
if (agentConfig.apiSource === "cli") {
|
|
542
|
-
const cliProvider = String(agentConfig.cliProvider || "copilot").trim() || "copilot";
|
|
543
|
-
return {
|
|
544
|
-
model: agentConfig.model || cliProvider,
|
|
545
|
-
complete: async (messages) => {
|
|
546
|
-
const [firstMessage, ...remainingMessages] = messages;
|
|
547
|
-
const systemPrompt = firstMessage?.role === "system"
|
|
548
|
-
? extractRuntimeMessageText(firstMessage.content).trim()
|
|
549
|
-
: "";
|
|
550
|
-
const taskPrompt = buildCliTaskPromptFromMessages(
|
|
551
|
-
firstMessage?.role === "system" ? remainingMessages : messages
|
|
552
|
-
);
|
|
553
|
-
const result = await executeCli(cliProvider, taskPrompt, {
|
|
554
|
-
...(agentConfig.model ? { model: agentConfig.model } : {}),
|
|
555
|
-
cwd: workspaceSession.workspaceRoot,
|
|
556
|
-
yolo: true,
|
|
557
|
-
env: deps.env,
|
|
558
|
-
...(systemPrompt ? { systemPrompt } : {}),
|
|
559
|
-
...(typeof agentConfig.reasoning_effort === "string"
|
|
560
|
-
? { reasoningEffort: agentConfig.reasoning_effort as "low" | "medium" | "high" | "xhigh" | "max" }
|
|
561
|
-
: {}),
|
|
562
|
-
...(typeof agentConfig.temperature === "number"
|
|
563
|
-
? { temperature: agentConfig.temperature }
|
|
564
|
-
: {}),
|
|
565
|
-
...(typeof agentConfig.top_p === "number" ? { topP: agentConfig.top_p } : {}),
|
|
566
|
-
...(typeof agentConfig.frequency_penalty === "number"
|
|
567
|
-
? { frequencyPenalty: agentConfig.frequency_penalty }
|
|
568
|
-
: {}),
|
|
569
|
-
...(typeof agentConfig.max_tokens === "number"
|
|
570
|
-
? { maxTokens: agentConfig.max_tokens }
|
|
571
|
-
: {}),
|
|
572
|
-
});
|
|
573
|
-
return {
|
|
574
|
-
content: result.text,
|
|
575
|
-
model: agentConfig.model || cliProvider,
|
|
576
|
-
provider: cliProvider,
|
|
577
|
-
trace: messages,
|
|
578
|
-
};
|
|
579
|
-
},
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
|
|
583
474
|
if (shouldUsePlatformChatProvider(deps.env, agentConfig)) {
|
|
584
475
|
const providerConfig = resolvePlatformChatProviderConfig({
|
|
585
476
|
agentConfig,
|
|
@@ -587,19 +478,24 @@ export function createCliLocalRuntimeAdapter(
|
|
|
587
478
|
});
|
|
588
479
|
return {
|
|
589
480
|
model: providerConfig.model,
|
|
590
|
-
complete: async (messages) => {
|
|
591
|
-
const requestedToolNames = resolveRequestedRuntimeToolNames({
|
|
481
|
+
complete: async (messages, options) => {
|
|
482
|
+
const requestedToolNames = resolveRequestedRuntimeToolNames({
|
|
483
|
+
agentConfig,
|
|
484
|
+
});
|
|
592
485
|
const tools = buildOpenAiTools({
|
|
593
|
-
requestedToolNames,
|
|
594
|
-
|
|
595
|
-
hostRuntimeConfig,
|
|
486
|
+
toolNames: requestedToolNames,
|
|
487
|
+
env: deps.env,
|
|
596
488
|
});
|
|
597
489
|
const request = buildPlatformChatCompletionRequest({
|
|
598
490
|
providerConfig,
|
|
599
491
|
messages,
|
|
600
492
|
tools,
|
|
601
493
|
});
|
|
602
|
-
const
|
|
494
|
+
const signal = buildRequestTimeoutSignal(options?.timeoutMs);
|
|
495
|
+
const res = await fetchWithTransientRetry(fetchImpl, request.url, {
|
|
496
|
+
...request.init,
|
|
497
|
+
...(signal ? { signal } : {}),
|
|
498
|
+
}, {
|
|
603
499
|
sleep: deps.sleep,
|
|
604
500
|
loopbackRequest,
|
|
605
501
|
});
|
|
@@ -622,19 +518,24 @@ export function createCliLocalRuntimeAdapter(
|
|
|
622
518
|
});
|
|
623
519
|
return {
|
|
624
520
|
model: providerConfig.model,
|
|
625
|
-
complete: async (messages) => {
|
|
626
|
-
const requestedToolNames = resolveRequestedRuntimeToolNames({
|
|
521
|
+
complete: async (messages, options) => {
|
|
522
|
+
const requestedToolNames = resolveRequestedRuntimeToolNames({
|
|
523
|
+
agentConfig,
|
|
524
|
+
});
|
|
627
525
|
const tools = buildOpenAiTools({
|
|
628
|
-
requestedToolNames,
|
|
629
|
-
|
|
630
|
-
hostRuntimeConfig,
|
|
526
|
+
toolNames: requestedToolNames,
|
|
527
|
+
env: deps.env,
|
|
631
528
|
});
|
|
632
529
|
const request = buildOpenAiCompatibleChatCompletionRequest({
|
|
633
530
|
providerConfig,
|
|
634
531
|
messages,
|
|
635
532
|
tools,
|
|
636
533
|
});
|
|
637
|
-
const
|
|
534
|
+
const signal = buildRequestTimeoutSignal(options?.timeoutMs);
|
|
535
|
+
const res = await fetchWithTransientRetry(fetchImpl, request.url, {
|
|
536
|
+
...request.init,
|
|
537
|
+
...(signal ? { signal } : {}),
|
|
538
|
+
}, {
|
|
638
539
|
sleep: deps.sleep,
|
|
639
540
|
loopbackRequest,
|
|
640
541
|
});
|
|
@@ -658,7 +559,6 @@ export function createCliLocalRuntimeAdapter(
|
|
|
658
559
|
});
|
|
659
560
|
const result = await executeLocalToolWithPolicy({
|
|
660
561
|
env: deps.env,
|
|
661
|
-
hostRuntimeConfig,
|
|
662
562
|
agentToolNames: activeAgentToolNames,
|
|
663
563
|
call,
|
|
664
564
|
executors: localToolExecutors,
|
|
@@ -1,47 +1,24 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
2
|
|
|
3
3
|
import { executeLocalToolWithPolicy, resolveLocalToolPolicy } from "./localToolPolicy";
|
|
4
|
-
import { createHostRuntimeConfig } from "../agent-runtime";
|
|
5
|
-
|
|
6
|
-
function createCliHostRuntimeConfig(allowShell = false) {
|
|
7
|
-
return createHostRuntimeConfig({
|
|
8
|
-
surface: "cli-local",
|
|
9
|
-
workspaceBinding: "explicit-cwd",
|
|
10
|
-
allowShell,
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
4
|
|
|
14
5
|
describe("CLI local tool policy", () => {
|
|
15
|
-
test("allows execShell
|
|
6
|
+
test("allows execShell in explicit worktree shell mode", () => {
|
|
16
7
|
expect(resolveLocalToolPolicy({
|
|
17
|
-
env: {},
|
|
18
|
-
|
|
19
|
-
agentToolNames: ["execShell"],
|
|
8
|
+
env: { NOLO_LOCAL_SHELL_MODE: "worktree" },
|
|
9
|
+
agentToolNames: [],
|
|
20
10
|
toolName: "execShell",
|
|
21
11
|
})).toEqual({ allowed: true, toolName: "execShell" });
|
|
22
12
|
});
|
|
23
13
|
|
|
24
|
-
test("blocks execShell unless
|
|
14
|
+
test("blocks execShell unless explicit shell mode is enabled", () => {
|
|
25
15
|
expect(resolveLocalToolPolicy({
|
|
26
16
|
env: { NOLO_LOCAL_ALLOWED_TOOLS: "execShell" },
|
|
27
|
-
hostRuntimeConfig: createCliHostRuntimeConfig(),
|
|
28
17
|
agentToolNames: ["execShell"],
|
|
29
18
|
toolName: "execShell",
|
|
30
19
|
})).toMatchObject({ allowed: false });
|
|
31
20
|
});
|
|
32
21
|
|
|
33
|
-
test("blocks execShell when shell was not requested by the runtime", () => {
|
|
34
|
-
expect(resolveLocalToolPolicy({
|
|
35
|
-
env: {},
|
|
36
|
-
hostRuntimeConfig: createCliHostRuntimeConfig(true),
|
|
37
|
-
agentToolNames: [],
|
|
38
|
-
toolName: "execShell",
|
|
39
|
-
})).toMatchObject({
|
|
40
|
-
allowed: false,
|
|
41
|
-
reason: "execShell is not requested by this agent runtime.",
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
22
|
test("requires both env allowlist and agent declaration", () => {
|
|
46
23
|
expect(resolveLocalToolPolicy({
|
|
47
24
|
env: { NOLO_LOCAL_ALLOWED_TOOLS: "readFile" },
|
|
@@ -59,7 +36,6 @@ describe("CLI local tool policy", () => {
|
|
|
59
36
|
test("executes only registered tools after policy allows them", async () => {
|
|
60
37
|
const result = await executeLocalToolWithPolicy({
|
|
61
38
|
env: { NOLO_LOCAL_ALLOWED_TOOLS: "readFile" },
|
|
62
|
-
hostRuntimeConfig: createCliHostRuntimeConfig(),
|
|
63
39
|
agentToolNames: ["readFile"],
|
|
64
40
|
call: { id: "call-1", name: "readFile", arguments: "{\"path\":\"README.md\"}" },
|
|
65
41
|
executors: {
|
package/client/taskRunPrompt.ts
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
export type TaskRunPromptContext = {
|
|
2
|
+
rowDbKey: string;
|
|
3
|
+
taskRunId?: string;
|
|
4
|
+
workItemId?: string;
|
|
5
|
+
artifactIds?: string[];
|
|
6
|
+
};
|
|
7
7
|
|
|
8
8
|
export function prependTaskRunPrompt(message: string, context?: TaskRunPromptContext): string {
|
|
9
|
-
|
|
9
|
+
if (!context?.rowDbKey) return message;
|
|
10
|
+
const artifactIds = context.artifactIds?.filter(Boolean) ?? [];
|
|
11
|
+
return [
|
|
12
|
+
"AI-native task-run context:",
|
|
13
|
+
"- This system is AI-native. The current task board is only the present observation and validation use case; different users, companies, and workflows may use different task owners later.",
|
|
14
|
+
"- Treat the task row meta as the durable execution context. Do not infer branch, runner, handoff, review, or blocker state from chat history alone.",
|
|
15
|
+
`- rowDbKey: ${context.rowDbKey}`,
|
|
16
|
+
...(context.taskRunId ? [`- taskRunId: ${context.taskRunId}`] : []),
|
|
17
|
+
...(context.workItemId ? [`- workItemId: ${context.workItemId}`] : []),
|
|
18
|
+
...(artifactIds.length ? [`- artifactIds: ${artifactIds.join(",")}`] : []),
|
|
19
|
+
"- Handoff rule: start from the durable task context, then inspect existing refs such as workItems.dialogIds, workItems.outcome, review.dialogId, activityRefs, agentRuns.dialogId/resultSummary, and artifactRefs. Use dialog read/search for exact evidence.",
|
|
20
|
+
"- When you create, update, hand off, block, or review work, update the task context with `bun run task:run -- ...`.",
|
|
21
|
+
"- If this turn already includes a server TaskRun preflight snapshot, use that snapshot directly for read-only reporting or planning.",
|
|
22
|
+
"- Keep long reasoning and logs in the dialog; record only resumable references in task row meta.",
|
|
23
|
+
"",
|
|
24
|
+
"User task:",
|
|
25
|
+
message,
|
|
26
|
+
].join("\n");
|
|
10
27
|
}
|
package/commandRegistry.ts
CHANGED
|
@@ -49,14 +49,14 @@ export function renderHelpText() {
|
|
|
49
49
|
" nolo connect",
|
|
50
50
|
" nolo connect --watch",
|
|
51
51
|
" nolo connect --ws",
|
|
52
|
-
" nolo connect --ws --server-url https://api.nolo.chat --
|
|
53
|
-
" nolo connect --daemon --server-url https://api.nolo.chat --
|
|
52
|
+
" nolo connect --ws --server-url https://api.nolo.chat --machine-key sk_machine_xxx",
|
|
53
|
+
" nolo connect --daemon --server-url https://api.nolo.chat --machine-key sk_machine_xxx",
|
|
54
54
|
" nolo machine status",
|
|
55
55
|
" nolo doctor",
|
|
56
56
|
" nolo doctor runtime",
|
|
57
57
|
" nolo update",
|
|
58
|
-
' nolo doc create --title "Trip Notes" --body "hello" --
|
|
59
|
-
' nolo skill-doc create --title "Agent Query Skill" --description "Inspect recent agent dialogs" --
|
|
58
|
+
' nolo doc create --title "Trip Notes" --body "hello" --sync local,us --dry-run',
|
|
59
|
+
' nolo skill-doc create --title "Agent Query Skill" --description "Inspect recent agent dialogs" --sync local,main,us',
|
|
60
60
|
" nolo agent list --json",
|
|
61
61
|
" nolo space list --json",
|
|
62
62
|
" nolo agent pull agent-pub-01APPBUILDER00000001YAII3I",
|
|
@@ -64,7 +64,6 @@ export function renderHelpText() {
|
|
|
64
64
|
' nolo agent run frontend-implementer --msg "polish notifications"',
|
|
65
65
|
" nolo agent bind-current agent-user-1-agent-1",
|
|
66
66
|
" nolo agent runtime-doctor agent-user-1-agent-1",
|
|
67
|
-
' nolo agent smoke-bound agent-user-1-agent-1 --msg "ping"',
|
|
68
67
|
' nolo agent smoke-current agent-user-1-agent-1 --msg "ping"',
|
|
69
68
|
' nolo chat --agent agent-pub-01APPBUILDER00000001YAII3I --msg "你好"',
|
|
70
69
|
" nolo space read 01KKY77TT0DA9NY7TNW3R7255N --content-key page-user-id --brief",
|
package/connectorRunArtifact.ts
CHANGED
|
@@ -24,46 +24,22 @@ function normalizePath(value: string) {
|
|
|
24
24
|
return resolve(value.trim());
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
function resolveExistingCandidate(
|
|
28
|
-
value: string | undefined,
|
|
29
|
-
checked: string[],
|
|
30
|
-
label: string
|
|
31
|
-
) {
|
|
32
|
-
const trimmed = value?.trim();
|
|
33
|
-
if (!trimmed) return null;
|
|
34
|
-
const normalized = normalizePath(trimmed);
|
|
35
|
-
if (existsSync(normalized)) return normalized;
|
|
36
|
-
checked.push(`${label}=${normalized}`);
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
27
|
export function resolveConnectorRunCwd(args: {
|
|
41
28
|
env?: EnvLike;
|
|
42
29
|
policy: MachineRunPermissionPolicy;
|
|
43
30
|
fallbackCwd?: string;
|
|
44
31
|
}) {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
];
|
|
55
|
-
|
|
56
|
-
for (const [value, label] of candidates) {
|
|
57
|
-
const resolved = resolveExistingCandidate(value, checked, label);
|
|
58
|
-
if (resolved) return resolved;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (checked.length > 0) {
|
|
62
|
-
throw new Error(
|
|
63
|
-
`Connector run cwd does not exist. Checked: ${checked.join(", ")}`
|
|
64
|
-
);
|
|
32
|
+
const explicit =
|
|
33
|
+
args.env?.NOLO_CONNECTOR_WORKDIR ||
|
|
34
|
+
args.env?.NOLO_AGENT_WORKDIR ||
|
|
35
|
+
args.env?.NOLO_LOCAL_WORKTREE ||
|
|
36
|
+
"";
|
|
37
|
+
const candidate = explicit || args.policy.writableRoots[0] || args.fallbackCwd || process.cwd();
|
|
38
|
+
const cwd = normalizePath(candidate);
|
|
39
|
+
if (!existsSync(cwd)) {
|
|
40
|
+
throw new Error(`Connector run cwd does not exist: ${cwd}`);
|
|
65
41
|
}
|
|
66
|
-
|
|
42
|
+
return cwd;
|
|
67
43
|
}
|
|
68
44
|
|
|
69
45
|
async function runGit(
|
|
@@ -49,18 +49,14 @@ function parseRetryAfterMs(response: Response, bodyRetryAfterMs?: unknown) {
|
|
|
49
49
|
export async function resolveConnectorWebSocketTarget(input: {
|
|
50
50
|
serverUrl: string;
|
|
51
51
|
machineId: string;
|
|
52
|
-
connectorSurface?: string;
|
|
53
52
|
headers: Record<string, string>;
|
|
54
53
|
fetchImpl?: typeof fetch;
|
|
55
54
|
}) {
|
|
56
55
|
const directWsUrl = new URL(input.serverUrl);
|
|
57
56
|
directWsUrl.protocol = directWsUrl.protocol === "https:" ? "wss:" : "ws:";
|
|
58
57
|
directWsUrl.pathname = "/api/connector/ws";
|
|
59
|
-
directWsUrl.search = "";
|
|
60
|
-
directWsUrl.searchParams.set("machineId", input.machineId);
|
|
61
|
-
if (input.connectorSurface?.trim()) {
|
|
62
|
-
directWsUrl.searchParams.set("connectorSurface", input.connectorSurface.trim().toLowerCase());
|
|
63
|
-
}
|
|
58
|
+
directWsUrl.search = "";
|
|
59
|
+
directWsUrl.searchParams.set("machineId", input.machineId);
|
|
64
60
|
|
|
65
61
|
const probeUrl = new URL(input.serverUrl);
|
|
66
62
|
probeUrl.pathname = "/api/connector/ws";
|
|
@@ -103,7 +99,7 @@ export async function resolveConnectorWebSocketTarget(input: {
|
|
|
103
99
|
}
|
|
104
100
|
|
|
105
101
|
const json = await response.json().catch(() => null);
|
|
106
|
-
return typeof json?.wsUrl === "string" && json.wsUrl
|
|
107
|
-
? json.wsUrl
|
|
108
|
-
: directWsUrl.toString();
|
|
109
|
-
}
|
|
102
|
+
return typeof json?.wsUrl === "string" && json.wsUrl
|
|
103
|
+
? json.wsUrl
|
|
104
|
+
: directWsUrl.toString();
|
|
105
|
+
}
|
|
@@ -7,8 +7,6 @@ import { createLegacyServerDb, type LegacyServerDb } from "./legacyServerDb";
|
|
|
7
7
|
import { createLevelAuthorityStore } from "./levelAuthorityStore";
|
|
8
8
|
import { createMemoryAuthorityStore } from "./memoryAuthorityStore";
|
|
9
9
|
|
|
10
|
-
// Keep the storage seam local-first. Cross-process sharing stays in the
|
|
11
|
-
// existing core/proxy runtime layer; this factory is only for embedded drivers.
|
|
12
10
|
export type ServerStoreDriver = "level" | "memory";
|
|
13
11
|
|
|
14
12
|
export type ServerStoreFactoryEnv = {
|
|
@@ -66,15 +64,12 @@ export function resolveServerStoreDriver(
|
|
|
66
64
|
|
|
67
65
|
export function createAuthorityStoreForDriver(
|
|
68
66
|
driver: ServerStoreDriver,
|
|
69
|
-
dbPath: string
|
|
70
|
-
env: ServerStoreFactoryEnv = process.env
|
|
67
|
+
dbPath: string
|
|
71
68
|
): AuthorityStore {
|
|
72
69
|
switch (driver) {
|
|
73
70
|
case "level":
|
|
74
71
|
return createLevelBackedAuthorityStore(dbPath);
|
|
75
72
|
case "memory":
|
|
76
|
-
// Test/dev-only driver that exercises the seam without changing the
|
|
77
|
-
// production single-writer runtime model.
|
|
78
73
|
return createMemoryAuthorityStore(dbPath);
|
|
79
74
|
}
|
|
80
75
|
}
|
|
@@ -103,8 +98,7 @@ export function getOrCreateServerStoreRuntime(
|
|
|
103
98
|
if (!globalScope.__serverAuthorityStore) {
|
|
104
99
|
globalScope.__serverAuthorityStore = createAuthorityStoreForDriver(
|
|
105
100
|
driver,
|
|
106
|
-
dbPath
|
|
107
|
-
options.env
|
|
101
|
+
dbPath
|
|
108
102
|
);
|
|
109
103
|
globalScope.__serverAuthorityStoreDriver = driver;
|
|
110
104
|
} else if (!cachedDriver) {
|
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
import { getAgentInternalCommandEntries } from "./agentInternalCommandEntries";
|
|
2
2
|
import type { CommandEntry } from "./cliCommandTypes";
|
|
3
|
-
import { getDialogInternalCommandEntries } from "./dialogInternalCommandEntries";
|
|
4
|
-
import { getDocInternalCommandEntries } from "./docInternalCommandEntries";
|
|
5
|
-
import { getRuntimeInternalCommandEntries } from "./runtimeInternalCommandEntries";
|
|
6
|
-
import { getSpaceInternalCommandEntries } from "./spaceInternalCommandEntries";
|
|
7
3
|
import { getSystemInternalCommandEntries } from "./systemInternalCommandEntries";
|
|
8
4
|
import { getWorkflowInternalCommandEntries } from "./workflowInternalCommandEntries";
|
|
9
5
|
|
|
10
6
|
export function getInternalCommandEntries(renderHelpText: () => string): CommandEntry[] {
|
|
11
7
|
return [
|
|
12
8
|
...getAgentInternalCommandEntries(),
|
|
13
|
-
...getDialogInternalCommandEntries(),
|
|
14
|
-
...getDocInternalCommandEntries(),
|
|
15
|
-
...getSpaceInternalCommandEntries(),
|
|
16
9
|
...getWorkflowInternalCommandEntries(),
|
|
17
|
-
...getRuntimeInternalCommandEntries(),
|
|
18
10
|
...getSystemInternalCommandEntries(renderHelpText),
|
|
19
11
|
];
|
|
20
12
|
}
|