@youdie006/prodex 0.40.6 → 0.40.9
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 +31 -13
- package/dist/browser-send-lock.js +10 -131
- package/dist/chatgpt-browser.js +428 -746
- package/dist/cli-args.js +2 -0
- package/dist/cli-help.js +30 -24
- package/dist/cli-ledger.js +2 -0
- package/dist/cli-pro.js +328 -121
- package/dist/cli-server.js +2 -2
- package/dist/cli.js +1 -4
- package/dist/config.js +3 -3
- package/dist/continue-thread.js +9 -2
- package/dist/http-mcp.js +1 -1
- package/dist/issue-report.js +9 -4
- package/dist/mcp-tools.js +42 -10
- package/dist/mcp.js +11 -7
- package/dist/registry.js +54 -6
- package/dist/repo-write.js +22 -2
- package/dist/safe-file.js +249 -1
- package/dist/schema.js +8 -0
- package/dist/store.js +10 -1
- package/dist/tui-flow.js +0 -1
- package/dist/tui-run.js +62 -25
- package/dist/tui.js +68 -54
- package/docs/claude.md +6 -2
- package/docs/cli-reference.md +18 -7
- package/docs/clients.md +18 -6
- package/docs/http-mcp.md +5 -1
- package/docs/releasing.md +3 -1
- package/package.json +1 -1
package/dist/cli-args.js
CHANGED
|
@@ -271,6 +271,7 @@ export const ASK_PRO_BOOLEAN_FLAGS = new Set([
|
|
|
271
271
|
export const ASK_PRO_SELECTION_VALUE_FLAGS = ["--project", "--project-new", "--model", "--pro-mode", "--effort"];
|
|
272
272
|
export const ASK_PRO_VALUE_FLAGS = new Set([
|
|
273
273
|
"--cwd",
|
|
274
|
+
"--session-key",
|
|
274
275
|
// Continue one NAMED past consult, when "the last one" is not the one meant.
|
|
275
276
|
"--continue-task",
|
|
276
277
|
"--file",
|
|
@@ -287,6 +288,7 @@ export const ASK_PRO_VALUE_FLAGS = new Set([
|
|
|
287
288
|
]);
|
|
288
289
|
export const ASK_PRO_PREVIEW_VALUE_FLAGS = new Set([
|
|
289
290
|
"--cwd",
|
|
291
|
+
"--session-key",
|
|
290
292
|
"--file",
|
|
291
293
|
"--port",
|
|
292
294
|
"--timeout-ms",
|
package/dist/cli-help.js
CHANGED
|
@@ -19,14 +19,14 @@ Ask / consult commands:
|
|
|
19
19
|
prodex ask [same flags as pro browser ask] "prompt" # top-level shortcut for pro browser ask
|
|
20
20
|
prodex pro ask [--dry-run] [--cwd /absolute/path/to/repo] [--file path] [--attach path] [--tool deep-research|web-search|create-image] "prompt" # dry-run preview
|
|
21
21
|
prodex pro debate-prompt [--topic "..."] [--rounds 2] [--source-cli /absolute/path/to/dist/cli.js] # print an agent prompt for a structured GPT Pro debate
|
|
22
|
-
prodex pro browser login [--cwd /absolute/path/to/repo] [--dry-run] [--source-cli /absolute/path/to/dist/cli.js] [--profile-dir path] [--port 9333] [--url https://chatgpt.com/...] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000] # preview/open
|
|
22
|
+
prodex pro browser login [--cwd /absolute/path/to/repo] [--dry-run] [--source-cli /absolute/path/to/dist/cli.js] [--profile-dir path] [--port 9333] [--url https://chatgpt.com/...] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headed|--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000] # preview/open browser login
|
|
23
23
|
prodex pro browser help [--source-cli /absolute/path/to/dist/cli.js]
|
|
24
24
|
prodex pro browser check [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 1500]
|
|
25
25
|
prodex pro browser smoke [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 90000]
|
|
26
26
|
prodex pro browser models [--source-cli /absolute/path/to/dist/cli.js] [--port 9333] [--timeout-ms 15000] # read-only list of model menu options
|
|
27
27
|
prodex pro browser projects [--source-cli /absolute/path/to/dist/cli.js] [--port 9333] [--timeout-ms 15000] # read-only list of sidebar project names (for --project)
|
|
28
|
-
prodex pro browser recover [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] --target-url <thread-url> [--timeout-ms 60000] # recover a finished answer from a
|
|
29
|
-
prodex pro browser ask [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 300000] [--busy-wait-ms 600000] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] [--model Pro] [--pro-mode 기본|확장] [--effort 즉시|중간|높음|"매우 높음"|Max|Ultra|Pro] [--project "name" | --project-new "name"] "prompt" # explicit visible-browser send
|
|
28
|
+
prodex pro browser recover [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] --target-url <thread-url> [--request-id 32hex] [--timeout-ms 60000] # recover a finished answer from a timed-out request
|
|
29
|
+
prodex pro browser ask [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--session-key id] [--port 9333] [--timeout-ms 300000] [--busy-wait-ms 600000] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] [--model Pro] [--pro-mode 기본|확장] [--effort 즉시|중간|높음|"매우 높음"|Max|Ultra|Pro] [--project "name" | --project-new "name"] "prompt" # explicit visible-browser send
|
|
30
30
|
prodex pro latest [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--json]
|
|
31
31
|
prodex pro blockers [--cwd /absolute/path/to/repo] [--since 7d] [--limit 10] [--json] # what actually blocks consults, ranked, across every bridge root on this machine
|
|
32
32
|
prodex pro list [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--json]
|
|
@@ -166,11 +166,11 @@ Commands:
|
|
|
166
166
|
prodex pro ask [--dry-run] [--cwd /absolute/path/to/repo] [--file path] [--attach path] [--tool deep-research|web-search|create-image] "prompt"
|
|
167
167
|
prodex pro debate-prompt [--topic "..."] [--rounds 2] [--source-cli /absolute/path/to/dist/cli.js]
|
|
168
168
|
prodex pro browser help [--source-cli /absolute/path/to/dist/cli.js]
|
|
169
|
-
prodex pro browser login [--cwd /absolute/path/to/repo] [--dry-run] [--source-cli /absolute/path/to/dist/cli.js] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000]
|
|
169
|
+
prodex pro browser login [--cwd /absolute/path/to/repo] [--dry-run] [--source-cli /absolute/path/to/dist/cli.js] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headed|--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000]
|
|
170
170
|
prodex pro browser check [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo]
|
|
171
171
|
prodex pro browser smoke [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo]
|
|
172
172
|
prodex pro browser models [--source-cli /absolute/path/to/dist/cli.js]
|
|
173
|
-
prodex pro browser ask [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] [--model Pro] [--pro-mode 기본|확장] [--effort 즉시|중간|높음|"매우 높음"|Max|Ultra|Pro] [--project "name" | --project-new "name"] "prompt"
|
|
173
|
+
prodex pro browser ask [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--session-key id] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] [--model Pro] [--pro-mode 기본|확장] [--effort 즉시|중간|높음|"매우 높음"|Max|Ultra|Pro] [--project "name" | --project-new "name"] "prompt"
|
|
174
174
|
prodex pro latest [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--json]
|
|
175
175
|
prodex pro blockers [--cwd /absolute/path/to/repo] [--since 7d] [--limit 10] [--json] # what actually blocks consults, ranked, across every bridge root on this machine
|
|
176
176
|
prodex pro list [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--json]
|
|
@@ -242,14 +242,17 @@ export function printSessionsHelp(stdout) {
|
|
|
242
242
|
Commands:
|
|
243
243
|
prodex sessions list [--status preview|running|done|blocked] [--cwd /absolute/path/to/repo] [--json]
|
|
244
244
|
prodex sessions show <session-id|latest> [--cwd /absolute/path/to/repo]
|
|
245
|
-
prodex sessions cancel <session-id|latest> [--cwd /absolute/path/to/repo]
|
|
245
|
+
prodex sessions cancel <session-id|latest> [--cwd /absolute/path/to/repo]
|
|
246
|
+
|
|
247
|
+
cancel clears a stale session record left by an interrupted send. It does not
|
|
248
|
+
stop an active browser request; stop that request in its originating terminal.`);
|
|
246
249
|
}
|
|
247
250
|
export function printProBrowserHelp(stdout, sourceCli) {
|
|
248
251
|
const cli = formatCliCommand(sourceCli);
|
|
249
252
|
const sourceCliOption = formatSourceCliOption(sourceCli);
|
|
250
253
|
const loginUsage = sourceCli
|
|
251
|
-
? `${cli} pro browser login${sourceCliOption} [--cwd /absolute/path/to/repo] [--dry-run] [--profile-dir path] [--port 9333] [--url https://chatgpt.com/...] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000]`
|
|
252
|
-
: "prodex pro browser login [--cwd /absolute/path/to/repo] [--dry-run] [--source-cli /absolute/path/to/dist/cli.js] [--profile-dir path] [--port 9333] [--url https://chatgpt.com/...] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000]";
|
|
254
|
+
? `${cli} pro browser login${sourceCliOption} [--cwd /absolute/path/to/repo] [--dry-run] [--profile-dir path] [--port 9333] [--url https://chatgpt.com/...] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headed|--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000]`
|
|
255
|
+
: "prodex pro browser login [--cwd /absolute/path/to/repo] [--dry-run] [--source-cli /absolute/path/to/dist/cli.js] [--profile-dir path] [--port 9333] [--url https://chatgpt.com/...] [--launch-timeout-ms 5000] [--wait|--no-wait] [--headed|--headless|--minimized|--virtual-display] [--wait-timeout-ms 300000]";
|
|
253
256
|
const checkUsage = sourceCli
|
|
254
257
|
? `${cli} pro browser check${sourceCliOption} [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 1500]`
|
|
255
258
|
: "prodex pro browser check [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 1500]";
|
|
@@ -258,33 +261,29 @@ export function printProBrowserHelp(stdout, sourceCli) {
|
|
|
258
261
|
: "prodex pro browser smoke [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 90000]";
|
|
259
262
|
const selectionUsage = '[--model Pro] [--pro-mode 기본|확장] [--effort 즉시|중간|높음|"매우 높음"|Max|Ultra|Pro] [--project "name" | --project-new "name"]';
|
|
260
263
|
const askUsage = sourceCli
|
|
261
|
-
? `${cli} pro browser ask${sourceCliOption} [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 300000] [--busy-wait-ms 600000] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] ${selectionUsage} "prompt"`
|
|
262
|
-
: `prodex pro browser ask [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] [--timeout-ms 300000] [--busy-wait-ms 600000] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] ${selectionUsage} "prompt"`;
|
|
264
|
+
? `${cli} pro browser ask${sourceCliOption} [--cwd /absolute/path/to/repo] [--session-key id] [--port 9333] [--timeout-ms 300000] [--busy-wait-ms 600000] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] ${selectionUsage} "prompt"`
|
|
265
|
+
: `prodex pro browser ask [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--session-key id] [--port 9333] [--timeout-ms 300000] [--busy-wait-ms 600000] [--target-url url --confirm-target] [--new-chat] [--continue | --continue-task task_id] [--temporary] [--allow-model-fallback] [--stdin] [--json] [--auto-login|--no-auto-login] [--file path] [--attach path] [--tool deep-research|web-search|create-image] ${selectionUsage} "prompt"`;
|
|
263
266
|
const modelsUsage = sourceCli
|
|
264
267
|
? `${cli} pro browser models${sourceCliOption} [--port 9333] [--timeout-ms 15000]`
|
|
265
268
|
: "prodex pro browser models [--source-cli /absolute/path/to/dist/cli.js] [--port 9333] [--timeout-ms 15000]";
|
|
266
269
|
const projectsUsage = sourceCli
|
|
267
270
|
? `${cli} pro browser projects${sourceCliOption} [--port 9333] [--timeout-ms 15000] # read-only: exact sidebar project names`
|
|
268
271
|
: "prodex pro browser projects [--source-cli /absolute/path/to/dist/cli.js] [--port 9333] [--timeout-ms 15000] # read-only: exact sidebar project names";
|
|
269
|
-
// A send that outlives its budget is not a lost answer, but only if agents
|
|
270
|
-
// know this exists - and this help is where onboarding sends them.
|
|
271
|
-
// Deleting a project takes its chats with it, so the usage line says so and
|
|
272
|
-
// the flag that actually deletes is spelled out rather than implied.
|
|
273
272
|
const projectDeleteUsage = sourceCli
|
|
274
|
-
? `${cli} pro browser project-delete${sourceCliOption} [--name "exact name" | --id g-p-...] [--confirm-delete] #
|
|
275
|
-
: `prodex pro browser project-delete [--source-cli /absolute/path/to/dist/cli.js] [--name "exact name" | --id g-p-...] [--confirm-delete] #
|
|
273
|
+
? `${cli} pro browser project-delete${sourceCliOption} [--name "exact name" | --id g-p-...] [--confirm-delete] # automatic deletion unsupported; use the ChatGPT UI`
|
|
274
|
+
: `prodex pro browser project-delete [--source-cli /absolute/path/to/dist/cli.js] [--name "exact name" | --id g-p-...] [--confirm-delete] # automatic deletion unsupported; use the ChatGPT UI`;
|
|
276
275
|
const chatsUsage = sourceCli
|
|
277
|
-
? `${cli} pro browser chats${sourceCliOption} [--limit 10] # read-only:
|
|
278
|
-
: "prodex pro browser chats [--source-cli /absolute/path/to/dist/cli.js] [--limit 10] # read-only:
|
|
276
|
+
? `${cli} pro browser chats${sourceCliOption} [--limit 10] # read-only: conversations currently visible in the UI`
|
|
277
|
+
: "prodex pro browser chats [--source-cli /absolute/path/to/dist/cli.js] [--limit 10] # read-only: conversations currently visible in the UI";
|
|
279
278
|
const chatDeleteUsage = sourceCli
|
|
280
|
-
? `${cli} pro browser chat-delete${sourceCliOption} [--title "exact title" | --id <id>] [--confirm-delete] #
|
|
281
|
-
: `prodex pro browser chat-delete [--source-cli /absolute/path/to/dist/cli.js] [--title "exact title" | --id <id>] [--confirm-delete] #
|
|
279
|
+
? `${cli} pro browser chat-delete${sourceCliOption} [--title "exact title" | --id <id>] [--confirm-delete] # automatic deletion unsupported; use the ChatGPT UI`
|
|
280
|
+
: `prodex pro browser chat-delete [--source-cli /absolute/path/to/dist/cli.js] [--title "exact title" | --id <id>] [--confirm-delete] # automatic deletion unsupported; use the ChatGPT UI`;
|
|
282
281
|
const resetUsage = sourceCli
|
|
283
282
|
? `${cli} pro browser reset${sourceCliOption} [--port 9333] [--confirm] # end a browser that runs but stopped answering; previews unless --confirm`
|
|
284
283
|
: "prodex pro browser reset [--source-cli /absolute/path/to/dist/cli.js] [--port 9333] [--confirm] # end a browser that runs but stopped answering; previews unless --confirm";
|
|
285
284
|
const recoverUsage = sourceCli
|
|
286
|
-
? `${cli} pro browser recover${sourceCliOption} [--cwd /absolute/path/to/repo] [--port 9333] --target-url <thread-url> [--timeout-ms 60000] #
|
|
287
|
-
: "prodex pro browser recover [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] --target-url <thread-url> [--timeout-ms 60000] #
|
|
285
|
+
? `${cli} pro browser recover${sourceCliOption} [--cwd /absolute/path/to/repo] [--port 9333] --target-url <thread-url> [--request-id 32hex] [--timeout-ms 60000] # read the stable answer for one marked request`
|
|
286
|
+
: "prodex pro browser recover [--source-cli /absolute/path/to/dist/cli.js] [--cwd /absolute/path/to/repo] [--port 9333] --target-url <thread-url> [--request-id 32hex] [--timeout-ms 60000] # read the stable answer for one marked request";
|
|
288
287
|
stdout(`${cli} pro browser
|
|
289
288
|
|
|
290
289
|
Commands:
|
|
@@ -301,6 +300,10 @@ Commands:
|
|
|
301
300
|
${recoverUsage}
|
|
302
301
|
|
|
303
302
|
Visible-browser sends require a manual browser session and stop on login, captcha, Cloudflare, permission, rate-limit, or usage-limit blockers, plus response_choice_pending when ChatGPT is waiting for you to pick which of two answers you prefer.
|
|
303
|
+
Only rendered page content is read. Automatic deep-research report retrieval and deletion are unsupported; --tool deep-research stops before sending. Lists cover visible entries, not the full account history.
|
|
304
|
+
Window mode (login and auto-recovery):
|
|
305
|
+
--headed / --headless / --minimized / --virtual-display are mutually exclusive. An explicit flag selects the whole mode and overrides environment and saved state; --headed requests a visible interactive browser for login or captcha. Close any browser running in a different mode yourself before switching.
|
|
306
|
+
If no mode flag is supplied, any non-empty PRODEX_HEADLESS / PRODEX_MINIMIZE_WINDOW / PRODEX_VIRTUAL_DISPLAY setting selects the whole environment mode, including 0/false/no values that explicitly select headed mode. Otherwise the last recorded login mode is reused; with no saved mode the default is headed.
|
|
304
307
|
Model/project selection (ask):
|
|
305
308
|
--model Composer model by its exact menu label. On the current picker only Pro applies - it is a step of the power slider, while the model rows carry pointer-events: none and no coordinate reaches them, so any other name warns and the send goes out on whatever the composer already had. Models whose menu entry opens a submenu of variants are rejected with a clear error for now.
|
|
306
309
|
--pro-mode Pro sub-mode: 기본 (standard) or 확장 (extended), used when the model is Pro. A Pro selection raises the default --timeout-ms to 1200000.
|
|
@@ -308,9 +311,12 @@ Model/project selection (ask):
|
|
|
308
311
|
--project Enter an existing sidebar project before sending. Cannot be combined with --target-url.
|
|
309
312
|
|
|
310
313
|
Continuing a conversation (ask):
|
|
311
|
-
|
|
312
|
-
--
|
|
314
|
+
Ordinary sends start a fresh chat by default, including inside a saved project. new_chat:false never opts into the shared current tab.
|
|
315
|
+
--session-key Stable caller id for --continue. Falls back to PRODEX_SESSION_KEY, then CODEX_THREAD_ID.
|
|
316
|
+
--continue Continue this session key's newest FINISHED consult in the same project. Refuses when no caller key or matching consult exists.
|
|
317
|
+
--continue-task Continue one named past consult by its task_id, deliberately crossing session boundaries. List them with \`${cli} pro list\`.
|
|
313
318
|
Cannot be combined with --new-chat, --target-url, --project-new or --temporary.
|
|
319
|
+
Recovery should use the request_id returned by the original send: --request-id verifies the answer follows that exact marked user turn. Omitting it keeps legacy recovery but reports request_verified=false.
|
|
314
320
|
--pro-mode and --effort cannot be combined. Labels are matched in both the Korean and English (US) ChatGPT UI (e.g. 높음/High, Pro 확장/Pro Extended).
|
|
315
321
|
Run \`${cli} pro browser models${sourceCliOption}\` to list the labels your account currently shows.
|
|
316
322
|
Persist defaults with \`${cli} setup${sourceCliOption}\`; per-ask flags override them.
|
package/dist/cli-ledger.js
CHANGED
|
@@ -164,6 +164,8 @@ export async function runResultsCommand(rest, io) {
|
|
|
164
164
|
try {
|
|
165
165
|
const resolvedTaskId = taskId === "latest" ? await latestResultTaskId(targetStore, { readOnly: true }) : taskId;
|
|
166
166
|
const artifact = await targetStore.readFinalizedResultArtifactText(resolvedTaskId, artifactPath);
|
|
167
|
+
for (const warning of artifact.warnings ?? [])
|
|
168
|
+
io.stderr(warning);
|
|
167
169
|
io.stdout(artifact.content);
|
|
168
170
|
}
|
|
169
171
|
catch (error) {
|