nolo-cli 0.1.32 → 0.1.33
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 +0 -6
- package/agent-runtime/agentRecordConfig.ts +2 -0
- package/agent-runtime/hostAdapter.ts +1 -0
- package/agent-runtime/index.ts +0 -21
- package/agent-runtime/localToolPolicy.ts +6 -13
- package/agent-runtime/localWorkspaceTools.ts +30 -333
- package/agent-runtime/platformChatProvider.ts +1 -4
- package/agent-runtime/runtimeToolPolicy.ts +47 -32
- package/agentAliases.ts +14 -83
- package/agentCommandSupport.ts +3 -6
- package/agentInternalCommandEntries.ts +2 -13
- package/agentListCommands.ts +19 -28
- package/agentMachineCommands.ts +40 -336
- package/agentPullCommand.ts +36 -56
- package/agentRecordCommands.ts +3 -5
- package/agentRecordHelpers.ts +22 -189
- package/agentRunCommand.ts +438 -107
- package/agentRuntimeLocal.ts +0 -10
- package/ai/agent/cliExecutor.ts +19 -323
- package/authCommands.ts +2 -36
- package/cli/agentAliases.ts +14 -83
- package/cli/agentCommandSupport.ts +3 -6
- package/cli/agentInternalCommandEntries.ts +2 -13
- package/cli/agentListCommands.ts +19 -28
- package/cli/agentMachineCommands.ts +40 -336
- package/cli/agentPullCommand.ts +36 -56
- package/cli/agentRecordCommands.ts +3 -5
- package/cli/agentRecordHelpers.ts +22 -189
- package/cli/agentRunCommand.ts +438 -107
- package/cli/agentRuntimeLocal.ts +0 -10
- package/cli/authCommands.ts +2 -36
- package/cli/cliEnvHelpers.ts +21 -162
- package/cli/client/agentRun.ts +853 -57
- package/cli/client/localRuntimeAdapter.ts +22 -159
- package/cli/client/streamingOutput.ts +3 -1
- package/cli/client/taskRunPrompt.ts +24 -7
- package/cli/commandRegistry.ts +2 -3
- 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 +14 -48
- package/cli/machineWsSession.ts +0 -2
- package/cli/offlineMarxistsAgentCommand.ts +314 -0
- package/cli/runtimeDoctorCommands.ts +69 -18
- 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/cliEnvHelpers.ts +21 -162
- package/client/agentConfigResolver.test.ts +2 -0
- package/client/agentRun.test.ts +12 -208
- package/client/agentRun.ts +853 -57
- package/client/localRuntimeAdapter.test.ts +9 -168
- package/client/localRuntimeAdapter.ts +22 -159
- package/client/localToolPolicy.test.ts +4 -28
- package/client/streamingOutput.ts +3 -1
- package/client/taskRunPrompt.ts +24 -7
- package/commandRegistry.ts +2 -3
- package/connectorRunArtifact.ts +10 -34
- package/connectorWebSocketTarget.ts +6 -10
- package/database/server/db.ts +34 -15
- 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 +14 -48
- package/machineWsSession.ts +0 -2
- package/offlineMarxistsAgentCommand.ts +314 -0
- package/package.json +49 -193
- package/runtimeDoctorCommands.ts +69 -18
- 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/server/authorityStoreTypes.ts +0 -31
- package/database/server/legacyServerDb.ts +0 -58
- package/database/server/levelAuthorityStore.ts +0 -75
- package/database/server/memoryAuthorityStore.ts +0 -133
- package/database/server/serverStoreFactory.ts +0 -124
- 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
package/commandRegistry.ts
CHANGED
|
@@ -55,8 +55,8 @@ export function renderHelpText() {
|
|
|
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
|
+
}
|
package/database/server/db.ts
CHANGED
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
// 文件路径: packages/database/server/db.ts
|
|
2
2
|
|
|
3
|
+
import { Level } from "level";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import fs from "fs";
|
|
3
6
|
import { ensureDbOpen } from "./ensureDbOpen";
|
|
4
7
|
import { resolveServerDbPath } from "./dbPath";
|
|
5
|
-
import type { LegacyServerDb } from "./legacyServerDb";
|
|
6
|
-
import type { AuthorityStore } from "./authorityStoreTypes";
|
|
7
|
-
import { getOrCreateServerStoreRuntime } from "./serverStoreFactory";
|
|
8
8
|
|
|
9
9
|
const DB_PATH = resolveServerDbPath();
|
|
10
10
|
|
|
11
|
+
// 确保目录存在
|
|
12
|
+
if (!fs.existsSync(path.dirname(DB_PATH))) {
|
|
13
|
+
fs.mkdirSync(path.dirname(DB_PATH), { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
|
|
11
16
|
console.log("数据库配置:");
|
|
12
17
|
console.log("- 当前工作目录:", process.cwd());
|
|
13
18
|
console.log("- 数据库路径:", DB_PATH);
|
|
14
19
|
|
|
20
|
+
// 安全 JSON 编码:解码失败时返回 null 而非抛异常,防止损坏记录导致进程崩溃
|
|
21
|
+
const safeJsonEncoding = {
|
|
22
|
+
name: "safe-json",
|
|
23
|
+
format: "utf8" as const,
|
|
24
|
+
encode: (data: any) => JSON.stringify(data),
|
|
25
|
+
decode: (data: string) => {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(data);
|
|
28
|
+
} catch {
|
|
29
|
+
console.warn("[LevelDB] Corrupted value:", data?.substring?.(0, 60));
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
15
35
|
export function isServerDbLockError(error: unknown): boolean {
|
|
16
36
|
const queue: unknown[] = [error];
|
|
17
37
|
const seen = new Set<unknown>();
|
|
@@ -35,11 +55,13 @@ export function isServerDbLockError(error: unknown): boolean {
|
|
|
35
55
|
return false;
|
|
36
56
|
}
|
|
37
57
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
58
|
+
// 单例实例:挂在 globalThis 上,--hot 模式下模块重新求值时复用同一实例,避免 LevelDB 锁冲突
|
|
59
|
+
if (!(globalThis as any).__serverDb) {
|
|
60
|
+
(globalThis as any).__serverDb = new Level<string, any>(DB_PATH, {
|
|
61
|
+
valueEncoding: safeJsonEncoding,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const serverDb: Level<string, any> = (globalThis as any).__serverDb;
|
|
43
65
|
|
|
44
66
|
console.log("- LevelDB实际路径:", serverDb.location);
|
|
45
67
|
|
|
@@ -48,9 +70,6 @@ export default serverDb;
|
|
|
48
70
|
|
|
49
71
|
// 具名导出:需要的时候可以引用
|
|
50
72
|
export { serverDb };
|
|
51
|
-
export function getServerAuthorityStore() {
|
|
52
|
-
return authorityStore;
|
|
53
|
-
}
|
|
54
73
|
|
|
55
74
|
/**
|
|
56
75
|
* 确保数据库处于 open 状态。
|
|
@@ -58,11 +77,11 @@ export function getServerAuthorityStore() {
|
|
|
58
77
|
* - 其他状态:尝试 open,一旦失败抛错
|
|
59
78
|
*/
|
|
60
79
|
export async function ensureServerDbOpen() {
|
|
61
|
-
const status =
|
|
80
|
+
const status = (serverDb as any).status;
|
|
62
81
|
if (status === "open") return;
|
|
63
82
|
|
|
64
83
|
try {
|
|
65
|
-
await ensureDbOpen(
|
|
84
|
+
await ensureDbOpen(serverDb);
|
|
66
85
|
if (status !== "opening") {
|
|
67
86
|
console.log("✅ LevelDB 已打开");
|
|
68
87
|
}
|
|
@@ -87,11 +106,11 @@ export async function openServerDb() {
|
|
|
87
106
|
* 优雅关机时关闭 DB
|
|
88
107
|
*/
|
|
89
108
|
export async function closeServerDb() {
|
|
90
|
-
const status =
|
|
109
|
+
const status = (serverDb as any).status;
|
|
91
110
|
if (status !== "open") return;
|
|
92
111
|
|
|
93
112
|
try {
|
|
94
|
-
await
|
|
113
|
+
await serverDb.close();
|
|
95
114
|
console.log("✅ LevelDB 已关闭");
|
|
96
115
|
} catch (err) {
|
|
97
116
|
console.error("❌ 关闭 LevelDB 失败:", err);
|
|
@@ -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
|
}
|
package/localRuntimeDb.ts
CHANGED
|
@@ -20,46 +20,9 @@ export function buildCliLocalRuntimeDbEnv(env: EnvLike = process.env) {
|
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export function isCliLocalRuntimeDbLockError(error: unknown): boolean {
|
|
24
|
-
const queue: unknown[] = [error];
|
|
25
|
-
const seen = new Set<unknown>();
|
|
26
|
-
|
|
27
|
-
while (queue.length > 0) {
|
|
28
|
-
const current = queue.shift();
|
|
29
|
-
if (!current || seen.has(current)) continue;
|
|
30
|
-
seen.add(current);
|
|
31
|
-
|
|
32
|
-
const text = `${(current as any)?.code ?? ""} ${(current as any)?.message ?? current}`;
|
|
33
|
-
if (/LEVEL_LOCKED|Resource temporarily unavailable|\/LOCK|LOCK:|db locked|locked/i.test(text)) {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if ((current as any)?.cause) queue.push((current as any).cause);
|
|
38
|
-
if (Array.isArray((current as any)?.errors)) queue.push(...(current as any).errors);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function formatCliLocalRuntimeDbOpenError(dbPath: string, error: unknown) {
|
|
45
|
-
if (!isCliLocalRuntimeDbLockError(error)) {
|
|
46
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
47
|
-
}
|
|
48
|
-
return new Error(
|
|
49
|
-
`CLI local runtime DB is locked at ${dbPath}. Another nolo local runtime is already using it. ` +
|
|
50
|
-
"Stop the other local runtime, rerun without --local, or set NOLO_SERVER_DB_PATH to a different cache path.",
|
|
51
|
-
{ cause: error instanceof Error ? error : undefined }
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
23
|
export async function getDefaultCliLocalRuntimeDb(): Promise<CliLocalRuntimeDb> {
|
|
56
|
-
|
|
57
|
-
process.env.NOLO_SERVER_DB_PATH = dbPath;
|
|
24
|
+
process.env.NOLO_SERVER_DB_PATH = buildCliLocalRuntimeDbEnv(process.env).NOLO_SERVER_DB_PATH;
|
|
58
25
|
const { default: serverDb, ensureServerDbOpen } = await import("./database/server/db");
|
|
59
|
-
|
|
60
|
-
await ensureServerDbOpen();
|
|
61
|
-
} catch (error) {
|
|
62
|
-
throw formatCliLocalRuntimeDbOpenError(dbPath, error);
|
|
63
|
-
}
|
|
26
|
+
await ensureServerDbOpen();
|
|
64
27
|
return serverDb as CliLocalRuntimeDb;
|
|
65
28
|
}
|