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.
Files changed (230) hide show
  1. package/README.md +0 -6
  2. package/agent-runtime/agentRecordConfig.ts +2 -0
  3. package/agent-runtime/hostAdapter.ts +1 -0
  4. package/agent-runtime/index.ts +0 -21
  5. package/agent-runtime/localToolPolicy.ts +6 -13
  6. package/agent-runtime/localWorkspaceTools.ts +30 -333
  7. package/agent-runtime/platformChatProvider.ts +1 -4
  8. package/agent-runtime/runtimeToolPolicy.ts +47 -32
  9. package/agentAliases.ts +14 -83
  10. package/agentCommandSupport.ts +3 -6
  11. package/agentInternalCommandEntries.ts +2 -13
  12. package/agentListCommands.ts +19 -28
  13. package/agentMachineCommands.ts +40 -336
  14. package/agentPullCommand.ts +36 -56
  15. package/agentRecordCommands.ts +3 -5
  16. package/agentRecordHelpers.ts +22 -189
  17. package/agentRunCommand.ts +438 -107
  18. package/agentRuntimeLocal.ts +0 -10
  19. package/ai/agent/cliExecutor.ts +19 -323
  20. package/authCommands.ts +2 -36
  21. package/cli/agentAliases.ts +14 -83
  22. package/cli/agentCommandSupport.ts +3 -6
  23. package/cli/agentInternalCommandEntries.ts +2 -13
  24. package/cli/agentListCommands.ts +19 -28
  25. package/cli/agentMachineCommands.ts +40 -336
  26. package/cli/agentPullCommand.ts +36 -56
  27. package/cli/agentRecordCommands.ts +3 -5
  28. package/cli/agentRecordHelpers.ts +22 -189
  29. package/cli/agentRunCommand.ts +438 -107
  30. package/cli/agentRuntimeLocal.ts +0 -10
  31. package/cli/authCommands.ts +2 -36
  32. package/cli/cliEnvHelpers.ts +21 -162
  33. package/cli/client/agentRun.ts +853 -57
  34. package/cli/client/localRuntimeAdapter.ts +22 -159
  35. package/cli/client/streamingOutput.ts +3 -1
  36. package/cli/client/taskRunPrompt.ts +24 -7
  37. package/cli/commandRegistry.ts +2 -3
  38. package/cli/connectorRunArtifact.ts +10 -34
  39. package/cli/connectorWebSocketTarget.ts +6 -10
  40. package/cli/internalCommandEntries.ts +0 -8
  41. package/cli/localRuntimeDb.ts +2 -39
  42. package/cli/machineCommands.ts +189 -190
  43. package/cli/machineDaemonCommands.ts +165 -9
  44. package/cli/machineHeartbeatCommands.ts +2 -1
  45. package/cli/machineStatusCommands.ts +13 -5
  46. package/cli/machineWatchCommands.ts +1 -1
  47. package/cli/machineWsRunDispatch.ts +14 -48
  48. package/cli/machineWsSession.ts +0 -2
  49. package/cli/offlineMarxistsAgentCommand.ts +314 -0
  50. package/cli/runtimeDoctorCommands.ts +69 -18
  51. package/cli/scriptCommandEntries.ts +45 -5
  52. package/cli/tableCommands.ts +133 -33
  53. package/cli/taskRunCommand.ts +211 -16
  54. package/cli/tui/session.ts +372 -43
  55. package/cli/workflowInternalCommandEntries.ts +0 -20
  56. package/cliEnvHelpers.ts +21 -162
  57. package/client/agentConfigResolver.test.ts +2 -0
  58. package/client/agentRun.test.ts +12 -208
  59. package/client/agentRun.ts +853 -57
  60. package/client/localRuntimeAdapter.test.ts +9 -168
  61. package/client/localRuntimeAdapter.ts +22 -159
  62. package/client/localToolPolicy.test.ts +4 -28
  63. package/client/streamingOutput.ts +3 -1
  64. package/client/taskRunPrompt.ts +24 -7
  65. package/commandRegistry.ts +2 -3
  66. package/connectorRunArtifact.ts +10 -34
  67. package/connectorWebSocketTarget.ts +6 -10
  68. package/database/server/db.ts +34 -15
  69. package/internalCommandEntries.ts +0 -8
  70. package/localRuntimeDb.ts +2 -39
  71. package/machineCommands.ts +189 -190
  72. package/machineDaemonCommands.ts +165 -9
  73. package/machineHeartbeatCommands.ts +2 -1
  74. package/machineStatusCommands.ts +13 -5
  75. package/machineWatchCommands.ts +1 -1
  76. package/machineWsRunDispatch.ts +14 -48
  77. package/machineWsSession.ts +0 -2
  78. package/offlineMarxistsAgentCommand.ts +314 -0
  79. package/package.json +49 -193
  80. package/runtimeDoctorCommands.ts +69 -18
  81. package/scriptCommandEntries.ts +45 -5
  82. package/tableCommands.ts +133 -33
  83. package/taskRunCommand.ts +211 -16
  84. package/tui/session.ts +372 -43
  85. package/workflowInternalCommandEntries.ts +0 -20
  86. package/agent-runtime/dialogStatus.ts +0 -139
  87. package/agent-runtime/hostRuntimeConfig.ts +0 -86
  88. package/agentCreateCustomCommands.ts +0 -278
  89. package/agentDialogsCommands.ts +0 -227
  90. package/agentDoctorCommands.ts +0 -203
  91. package/agentRunLocalWorkspace.ts +0 -182
  92. package/agentRunParsing.ts +0 -298
  93. package/agentSuperviseCommands.ts +0 -8
  94. package/agentUnpublishCommands.ts +0 -113
  95. package/ai/agent/agentRunDialogLineage.ts +0 -56
  96. package/ai/policy/types.ts +0 -64
  97. package/ai/skills/skillSummaryMarker.ts +0 -26
  98. package/app/types.ts +0 -358
  99. package/build.ts +0 -16
  100. package/buildPublish.ts +0 -138
  101. package/buildPublishArtifactAssembly.ts +0 -724
  102. package/buildPublishImportAnalysis.ts +0 -242
  103. package/chat/messages/fetchMessages.ts +0 -84
  104. package/chat/messages/types.ts +0 -185
  105. package/cli/agentCreateCustomCommands.ts +0 -278
  106. package/cli/agentDialogsCommands.ts +0 -227
  107. package/cli/agentDoctorCommands.ts +0 -203
  108. package/cli/agentRunLocalWorkspace.ts +0 -182
  109. package/cli/agentRunParsing.ts +0 -298
  110. package/cli/agentSuperviseCommands.ts +0 -8
  111. package/cli/agentUnpublishCommands.ts +0 -113
  112. package/cli/buildPublish.ts +0 -138
  113. package/cli/buildPublishArtifactAssembly.ts +0 -724
  114. package/cli/buildPublishImportAnalysis.ts +0 -242
  115. package/cli/cliIoTypes.ts +0 -3
  116. package/cli/cliRuntimeDoctorReport.ts +0 -193
  117. package/cli/client/agentRunInput.ts +0 -10
  118. package/cli/client/agentRunLocalExecution.ts +0 -124
  119. package/cli/client/agentRunLocalExecutor.ts +0 -179
  120. package/cli/client/agentRunRuntimeSelection.ts +0 -145
  121. package/cli/client/agentRunServerTransport.ts +0 -397
  122. package/cli/client/agentRunTaskRunRecorder.ts +0 -176
  123. package/cli/customCodingAgentFlow.ts +0 -208
  124. package/cli/customCodingAgentRecord.ts +0 -179
  125. package/cli/dialogDataAccess.ts +0 -186
  126. package/cli/dialogInternalCommandEntries.ts +0 -11
  127. package/cli/dialogReadCommands.ts +0 -180
  128. package/cli/dialogReadHelpers.ts +0 -226
  129. package/cli/dialogStatusCommands.ts +0 -123
  130. package/cli/docInternalCommandEntries.ts +0 -20
  131. package/cli/hybridReadHelpers.ts +0 -109
  132. package/cli/machineCommandPrompts.ts +0 -79
  133. package/cli/machineCommandResolution.ts +0 -43
  134. package/cli/noloReadBridgePrompt.ts +0 -16
  135. package/cli/pageCreateCommands.ts +0 -219
  136. package/cli/pageDeleteCommands.ts +0 -167
  137. package/cli/pageReadCommands.ts +0 -151
  138. package/cli/pageUpdateCommands.ts +0 -249
  139. package/cli/pageWriteHelpers.ts +0 -209
  140. package/cli/publishPackage.ts +0 -36
  141. package/cli/runtimeInternalCommandEntries.ts +0 -15
  142. package/cli/runtimePassthroughCommands.ts +0 -22
  143. package/cli/scriptPassthroughHelpers.ts +0 -28
  144. package/cli/secretScanHelpers.ts +0 -31
  145. package/cli/spaceAttachCommands.ts +0 -134
  146. package/cli/spaceCategoryCommands.ts +0 -263
  147. package/cli/spaceCommands.ts +0 -295
  148. package/cli/spaceDeleteCommands.ts +0 -312
  149. package/cli/spaceInternalCommandEntries.ts +0 -21
  150. package/cli/spaceMutationHelpers.ts +0 -135
  151. package/cli/spaceReadCommands.ts +0 -323
  152. package/cli/tableDataOutput.ts +0 -41
  153. package/cli/tableDataSafety.ts +0 -26
  154. package/cli/tableMetaCommands.ts +0 -307
  155. package/cli/tableMutationCommands.ts +0 -266
  156. package/cli/tableQueryParsing.ts +0 -90
  157. package/cli/tableQueryRequest.ts +0 -53
  158. package/cli/taskRunActions.ts +0 -122
  159. package/cli/taskRunParsing.ts +0 -86
  160. package/cli/taskRunPromptShared.ts +0 -55
  161. package/cli/tui/tuiCatalog.ts +0 -22
  162. package/cli/tui/tuiCommandInterpreter.ts +0 -253
  163. package/cli/tui/tuiPresentation.ts +0 -146
  164. package/cliIoTypes.ts +0 -3
  165. package/cliRuntimeDoctorReport.ts +0 -193
  166. package/client/agentRunInput.ts +0 -10
  167. package/client/agentRunLocalExecution.test.ts +0 -123
  168. package/client/agentRunLocalExecution.ts +0 -124
  169. package/client/agentRunLocalExecutor.ts +0 -179
  170. package/client/agentRunRuntimeSelection.test.ts +0 -159
  171. package/client/agentRunRuntimeSelection.ts +0 -145
  172. package/client/agentRunServerTransport.ts +0 -397
  173. package/client/agentRunTaskRunRecorder.ts +0 -176
  174. package/connector-experimental/daemonLauncher.ts +0 -223
  175. package/create/space/spaceKeys.ts +0 -65
  176. package/create/types.ts +0 -21
  177. package/customCodingAgentFlow.ts +0 -208
  178. package/customCodingAgentRecord.ts +0 -179
  179. package/database/keys.ts +0 -765
  180. package/database/server/authorityStoreTypes.ts +0 -31
  181. package/database/server/legacyServerDb.ts +0 -58
  182. package/database/server/levelAuthorityStore.ts +0 -75
  183. package/database/server/memoryAuthorityStore.ts +0 -133
  184. package/database/server/serverStoreFactory.ts +0 -124
  185. package/database/tombstones.ts +0 -52
  186. package/database/utils/ulid.ts +0 -1
  187. package/dialogDataAccess.ts +0 -186
  188. package/dialogInternalCommandEntries.ts +0 -11
  189. package/dialogReadCommands.ts +0 -180
  190. package/dialogReadHelpers.ts +0 -226
  191. package/dialogStatusCommands.ts +0 -123
  192. package/docInternalCommandEntries.ts +0 -20
  193. package/hybridReadHelpers.ts +0 -109
  194. package/machineCommandPrompts.ts +0 -79
  195. package/machineCommandResolution.ts +0 -43
  196. package/noloReadBridgePrompt.ts +0 -16
  197. package/pageCreateCommands.ts +0 -219
  198. package/pageDeleteCommands.ts +0 -167
  199. package/pageReadCommands.ts +0 -151
  200. package/pageUpdateCommands.ts +0 -249
  201. package/pageWriteHelpers.ts +0 -209
  202. package/publishPackage.ts +0 -36
  203. package/runtimeInternalCommandEntries.ts +0 -15
  204. package/runtimePassthroughCommands.ts +0 -22
  205. package/scriptPassthroughHelpers.ts +0 -28
  206. package/secretScanHelpers.ts +0 -31
  207. package/share/helpers.ts +0 -302
  208. package/share/keys.ts +0 -243
  209. package/share/types.ts +0 -100
  210. package/spaceAttachCommands.ts +0 -134
  211. package/spaceCategoryCommands.ts +0 -263
  212. package/spaceCommands.ts +0 -295
  213. package/spaceDeleteCommands.ts +0 -312
  214. package/spaceInternalCommandEntries.ts +0 -21
  215. package/spaceMutationHelpers.ts +0 -135
  216. package/spaceReadCommands.ts +0 -323
  217. package/tableDataOutput.ts +0 -41
  218. package/tableDataSafety.ts +0 -26
  219. package/tableMetaCommands.ts +0 -307
  220. package/tableMutationCommands.ts +0 -266
  221. package/tableQueryParsing.ts +0 -90
  222. package/tableQueryRequest.ts +0 -53
  223. package/taskRunActions.ts +0 -122
  224. package/taskRunParsing.ts +0 -86
  225. package/taskRunPromptShared.ts +0 -55
  226. package/tui/tuiCatalog.ts +0 -22
  227. package/tui/tuiCommandInterpreter.test.ts +0 -169
  228. package/tui/tuiCommandInterpreter.ts +0 -253
  229. package/tui/tuiPresentation.test.ts +0 -154
  230. package/tui/tuiPresentation.ts +0 -146
@@ -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" --space 01SPACEID --dry-run',
59
- ' nolo skill-doc create --title "Agent Query Skill" --description "Inspect recent agent dialogs" --space 01SPACEID',
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",
@@ -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 checked: string[] = [];
46
- const candidates: Array<[string | undefined, string]> = [
47
- [args.env?.NOLO_CONNECTOR_WORKDIR, "NOLO_CONNECTOR_WORKDIR"],
48
- [args.env?.NOLO_AGENT_WORKDIR, "NOLO_AGENT_WORKDIR"],
49
- [args.env?.NOLO_LOCAL_WORKTREE, "NOLO_LOCAL_WORKTREE"],
50
- [args.policy.writableRoots[0], "writableRoots[0]"],
51
- [args.fallbackCwd, "fallbackCwd"],
52
- [process.env.PWD, "PWD"],
53
- [process.cwd(), "process.cwd()"],
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
- throw new Error("Connector run cwd could not be resolved.");
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
+ }
@@ -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
- const {
39
- authorityStore,
40
- serverDb,
41
- }: { authorityStore: AuthorityStore; serverDb: LegacyServerDb } =
42
- getOrCreateServerStoreRuntime(DB_PATH);
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 = authorityStore.status;
80
+ const status = (serverDb as any).status;
62
81
  if (status === "open") return;
63
82
 
64
83
  try {
65
- await ensureDbOpen(authorityStore);
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 = authorityStore.status;
109
+ const status = (serverDb as any).status;
91
110
  if (status !== "open") return;
92
111
 
93
112
  try {
94
- await authorityStore.close();
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
- const dbPath = buildCliLocalRuntimeDbEnv(process.env).NOLO_SERVER_DB_PATH;
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
- try {
60
- await ensureServerDbOpen();
61
- } catch (error) {
62
- throw formatCliLocalRuntimeDbOpenError(dbPath, error);
63
- }
26
+ await ensureServerDbOpen();
64
27
  return serverDb as CliLocalRuntimeDb;
65
28
  }