@youdie006/prodex 0.6.0 → 0.7.0
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 +29 -2
- package/dist/chatgpt-browser.d.ts +1 -0
- package/dist/chatgpt-browser.js +49 -4
- package/dist/chatgpt-browser.js.map +1 -1
- package/dist/cli-args.d.ts +1 -0
- package/dist/cli-args.js +8 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-ledger.d.ts +22 -0
- package/dist/cli-ledger.js +343 -0
- package/dist/cli-ledger.js.map +1 -0
- package/dist/cli-pro.d.ts +89 -0
- package/dist/cli-pro.js +1038 -0
- package/dist/cli-pro.js.map +1 -0
- package/dist/cli-server.d.ts +42 -0
- package/dist/cli-server.js +396 -0
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-shared.d.ts +68 -0
- package/dist/cli-shared.js +207 -0
- package/dist/cli-shared.js.map +1 -0
- package/dist/cli.js +35 -1919
- package/dist/cli.js.map +1 -1
- package/dist/store.js +1 -0
- package/dist/store.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type BrowserCommandOptions = {
|
|
2
|
+
cwd?: string;
|
|
3
|
+
profileDir?: string;
|
|
4
|
+
port?: number;
|
|
5
|
+
targetUrl?: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
launchTimeoutMs?: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function formatInitCommand(sourceCli?: string, options?: {
|
|
10
|
+
cwd?: string;
|
|
11
|
+
}): string;
|
|
12
|
+
export declare function formatSetupCommand(sourceCli?: string, options?: {
|
|
13
|
+
cwd?: string;
|
|
14
|
+
}): string;
|
|
15
|
+
export declare function formatBrowserLoginCommand(sourceCli?: string, options?: BrowserCommandOptions): string;
|
|
16
|
+
export declare function formatBrowserSmokeCommand(sourceCli?: string, options?: BrowserCommandOptions): string;
|
|
17
|
+
export declare function formatBrowserCheckCommand(sourceCli?: string, options?: BrowserCommandOptions): string;
|
|
18
|
+
export declare function formatBrowserTargetAskCommand(sourceCli?: string, options?: BrowserCommandOptions): string;
|
|
19
|
+
export declare function formatProShowCommand(taskId: string, sourceCli?: string, options?: {
|
|
20
|
+
cwd?: string;
|
|
21
|
+
}): string;
|
|
22
|
+
export declare function formatProLatestCommand(sourceCli?: string, options?: {
|
|
23
|
+
cwd?: string;
|
|
24
|
+
}): string;
|
|
25
|
+
export declare function sourceAwareResultMessage(message: string, sourceCli?: string, options?: {
|
|
26
|
+
cwd?: string;
|
|
27
|
+
}): string;
|
|
28
|
+
export declare function sourceAwareResultError(error: unknown, sourceCli?: string, options?: {
|
|
29
|
+
cwd?: string;
|
|
30
|
+
}): unknown;
|
|
31
|
+
export declare function formatBlockedConsultRecordedMessage(message: string, taskId: string, sourceCli?: string, options?: {
|
|
32
|
+
cwd?: string;
|
|
33
|
+
}): string;
|
|
34
|
+
export declare function formatReleaseStatusCommand(sourceCli?: string, options?: {
|
|
35
|
+
cwd?: string;
|
|
36
|
+
}): string;
|
|
37
|
+
export declare function formatReleasePackCommand(sourceCli?: string, options?: {
|
|
38
|
+
cwd?: string;
|
|
39
|
+
}): string;
|
|
40
|
+
export declare function sourceAwareBrowserNextStep(nextStep: string | undefined, sourceCli?: string, options?: BrowserCommandOptions): string | undefined;
|
|
41
|
+
export declare function sourceAwareBrowserBlocker<T extends {
|
|
42
|
+
next_step?: string;
|
|
43
|
+
}>(blocker: T, sourceCli?: string, options?: BrowserCommandOptions): T;
|
|
44
|
+
export declare function sourceAwareSetupMessage(message: string, sourceCli?: string, options?: {
|
|
45
|
+
cwd?: string;
|
|
46
|
+
}): string;
|
|
47
|
+
export declare function sourceAwareReleaseMessage(message: string, sourceCli?: string, options?: {
|
|
48
|
+
cwd?: string;
|
|
49
|
+
}): string;
|
|
50
|
+
export declare function errorMessage(error: unknown): string;
|
|
51
|
+
export declare function isUntrustedResultError(error: unknown): error is Error & {
|
|
52
|
+
code: "EUNTRUSTED_RESULT";
|
|
53
|
+
taskId: string;
|
|
54
|
+
};
|
|
55
|
+
export declare function formatCommandInCwd(command: string, cwd?: string): string;
|
|
56
|
+
export declare function browserOptionsWithStoredPort(options: BrowserCommandOptions, storedArgs?: string): BrowserCommandOptions;
|
|
57
|
+
export declare function formatBrowserSmokeCommandBody(sourceCli?: string, options?: BrowserCommandOptions): string;
|
|
58
|
+
export declare function formatBrowserLoginCommandBody(sourceCli?: string, options?: BrowserCommandOptions): string;
|
|
59
|
+
export declare function formatBrowserAskCommandBody(sourceCli?: string): string;
|
|
60
|
+
export declare function formatResultResealCommand(taskId: string, sourceCli?: string, options?: {
|
|
61
|
+
cwd?: string;
|
|
62
|
+
}): string;
|
|
63
|
+
export declare function isMissingFileError(error: unknown): boolean;
|
|
64
|
+
export declare function isLoopbackHost(hostname: string): boolean;
|
|
65
|
+
export declare function firstLine(value: string): string;
|
|
66
|
+
export declare const DEFAULT_MIN_SEND_INTERVAL_MS = 10000;
|
|
67
|
+
export declare function resolveMinSendIntervalMs(env?: NodeJS.ProcessEnv): number;
|
|
68
|
+
export declare function computeSendPacingWaitMs(lastSendAtMs: number | undefined, nowMs: number, intervalMs: number): number;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { formatCliCommand, formatSourceCliOption, shellQuote } from "./cli-args.js";
|
|
2
|
+
export function formatInitCommand(sourceCli, options = {}) {
|
|
3
|
+
return [`${formatCliCommand(sourceCli)} init`, options.cwd ? `--cwd ${shellQuote(options.cwd)}` : undefined].filter(Boolean).join(" ");
|
|
4
|
+
}
|
|
5
|
+
export function formatSetupCommand(sourceCli, options = {}) {
|
|
6
|
+
return [`${formatCliCommand(sourceCli)} setup`, options.cwd ? `--cwd ${shellQuote(options.cwd)}` : undefined].filter(Boolean).join(" ");
|
|
7
|
+
}
|
|
8
|
+
export function formatBrowserLoginCommand(sourceCli, options = {}) {
|
|
9
|
+
return formatCommandInCwd(formatBrowserLoginCommandBody(sourceCli, options), options.cwd);
|
|
10
|
+
}
|
|
11
|
+
export function formatBrowserSmokeCommand(sourceCli, options = {}) {
|
|
12
|
+
return formatCommandInCwd(formatBrowserSmokeCommandBody(sourceCli, options), options.cwd);
|
|
13
|
+
}
|
|
14
|
+
export function formatBrowserCheckCommand(sourceCli, options = {}) {
|
|
15
|
+
const command = [`${formatCliCommand(sourceCli)} pro browser check${formatSourceCliOption(sourceCli)}`, options.port ? `--port ${options.port}` : undefined]
|
|
16
|
+
.filter(Boolean)
|
|
17
|
+
.join(" ");
|
|
18
|
+
return formatCommandInCwd(command, options.cwd);
|
|
19
|
+
}
|
|
20
|
+
export function formatBrowserTargetAskCommand(sourceCli, options = {}) {
|
|
21
|
+
const command = [
|
|
22
|
+
`${formatCliCommand(sourceCli)} pro browser ask${formatSourceCliOption(sourceCli)}`,
|
|
23
|
+
options.port ? `--port ${options.port}` : undefined,
|
|
24
|
+
`--target-url ${options.targetUrl ? shellQuote(options.targetUrl) : "<chatgpt-url>"} --confirm-target "prompt"`
|
|
25
|
+
]
|
|
26
|
+
.filter(Boolean)
|
|
27
|
+
.join(" ");
|
|
28
|
+
return formatCommandInCwd(command, options.cwd);
|
|
29
|
+
}
|
|
30
|
+
export function formatProShowCommand(taskId, sourceCli, options = {}) {
|
|
31
|
+
return [`${formatCliCommand(sourceCli)} pro show ${shellQuote(taskId)}${formatSourceCliOption(sourceCli)}`, options.cwd ? `--cwd ${shellQuote(options.cwd)}` : undefined]
|
|
32
|
+
.filter(Boolean)
|
|
33
|
+
.join(" ");
|
|
34
|
+
}
|
|
35
|
+
export function formatProLatestCommand(sourceCli, options = {}) {
|
|
36
|
+
return [`${formatCliCommand(sourceCli)} pro latest${formatSourceCliOption(sourceCli)}`, options.cwd ? `--cwd ${shellQuote(options.cwd)}` : undefined]
|
|
37
|
+
.filter(Boolean)
|
|
38
|
+
.join(" ");
|
|
39
|
+
}
|
|
40
|
+
export function sourceAwareResultMessage(message, sourceCli, options = {}) {
|
|
41
|
+
if (!sourceCli && !options.cwd)
|
|
42
|
+
return message;
|
|
43
|
+
return message.replace(/`prodex results reseal ([^`\s]+) --confirm-current-result`/g, (_match, taskId) => `\`${formatResultResealCommand(taskId, sourceCli, options)}\``);
|
|
44
|
+
}
|
|
45
|
+
export function sourceAwareResultError(error, sourceCli, options = {}) {
|
|
46
|
+
if (!isUntrustedResultError(error))
|
|
47
|
+
return error;
|
|
48
|
+
return new Error(sourceAwareResultMessage(errorMessage(error), sourceCli, options), { cause: error });
|
|
49
|
+
}
|
|
50
|
+
export function formatBlockedConsultRecordedMessage(message, taskId, sourceCli, options = {}) {
|
|
51
|
+
return `${message}\nblocked consult recorded: ${taskId}; inspect with \`${formatProShowCommand(taskId, sourceCli, options)}\` or \`${formatProLatestCommand(sourceCli, options)}\`.`;
|
|
52
|
+
}
|
|
53
|
+
export function formatReleaseStatusCommand(sourceCli, options = {}) {
|
|
54
|
+
return [`${formatCliCommand(sourceCli)} release status${formatSourceCliOption(sourceCli)}`, options.cwd ? `--cwd ${shellQuote(options.cwd)}` : undefined]
|
|
55
|
+
.filter(Boolean)
|
|
56
|
+
.join(" ");
|
|
57
|
+
}
|
|
58
|
+
export function formatReleasePackCommand(sourceCli, options = {}) {
|
|
59
|
+
return [
|
|
60
|
+
`${formatCliCommand(sourceCli)} release pack${formatSourceCliOption(sourceCli)}`,
|
|
61
|
+
options.cwd ? `--cwd ${shellQuote(options.cwd)}` : undefined,
|
|
62
|
+
"--pack-destination <dir>"
|
|
63
|
+
]
|
|
64
|
+
.filter(Boolean)
|
|
65
|
+
.join(" ");
|
|
66
|
+
}
|
|
67
|
+
export function sourceAwareBrowserNextStep(nextStep, sourceCli, options = {}) {
|
|
68
|
+
if (!nextStep)
|
|
69
|
+
return nextStep;
|
|
70
|
+
const targetRetry = nextStep.match(/^Open (https:\/\/chatgpt\.com\/\S+) in the (visible|dedicated) browser and retry(\. Current: .+|\.)$/);
|
|
71
|
+
if (targetRetry) {
|
|
72
|
+
const [, targetUrl, location, suffix] = targetRetry;
|
|
73
|
+
return `Open ${targetUrl} in the ${location} browser and run \`${formatBrowserTargetAskCommand(sourceCli, {
|
|
74
|
+
...options,
|
|
75
|
+
targetUrl
|
|
76
|
+
})}\`${suffix}`;
|
|
77
|
+
}
|
|
78
|
+
if (!sourceCli && !options.port && !options.cwd)
|
|
79
|
+
return nextStep;
|
|
80
|
+
return nextStep
|
|
81
|
+
.replace(/`cd (.+?) && prodex pro browser login([^`]*)?`/g, (_match, cwdPrefix, storedArgs) => {
|
|
82
|
+
return `\`cd ${cwdPrefix} && ${formatBrowserLoginCommandBody(sourceCli, browserOptionsWithStoredPort(options, storedArgs))}\``;
|
|
83
|
+
})
|
|
84
|
+
.replace(/`cd (.+?) && prodex pro browser smoke([^`]*)?`/g, (_match, cwdPrefix, storedArgs) => {
|
|
85
|
+
return `\`cd ${cwdPrefix} && ${formatBrowserSmokeCommandBody(sourceCli, browserOptionsWithStoredPort(options, storedArgs))}\``;
|
|
86
|
+
})
|
|
87
|
+
.replace(/`cd (.+?) && prodex pro browser ask([^`]*)?`/g, (_match, cwdPrefix, storedArgs) => {
|
|
88
|
+
return `\`cd ${cwdPrefix} && ${formatBrowserAskCommandBody(sourceCli)}${storedArgs ?? ""}\``;
|
|
89
|
+
})
|
|
90
|
+
.replace(/`prodex pro browser login([^`]*)?`/g, (_match, storedArgs) => {
|
|
91
|
+
return `\`${formatBrowserLoginCommand(sourceCli, browserOptionsWithStoredPort(options, storedArgs))}\``;
|
|
92
|
+
})
|
|
93
|
+
.replace(/`prodex pro browser smoke([^`]*)?`/g, (_match, storedArgs) => {
|
|
94
|
+
return `\`${formatBrowserSmokeCommand(sourceCli, browserOptionsWithStoredPort(options, storedArgs))}\``;
|
|
95
|
+
})
|
|
96
|
+
.replace(/`prodex pro browser ask([^`]*)?`/g, (_match, storedArgs) => {
|
|
97
|
+
return `\`${formatBrowserAskCommandBody(sourceCli)}${storedArgs ?? ""}\``;
|
|
98
|
+
})
|
|
99
|
+
.replaceAll("pass --target-url with --confirm-target", `run \`${formatBrowserTargetAskCommand(sourceCli, options)}\``);
|
|
100
|
+
}
|
|
101
|
+
export function sourceAwareBrowserBlocker(blocker, sourceCli, options = {}) {
|
|
102
|
+
const nextStep = sourceAwareBrowserNextStep(blocker.next_step, sourceCli, options);
|
|
103
|
+
return nextStep === blocker.next_step ? blocker : { ...blocker, next_step: nextStep };
|
|
104
|
+
}
|
|
105
|
+
export function sourceAwareSetupMessage(message, sourceCli, options = {}) {
|
|
106
|
+
if (!sourceCli && !options.cwd)
|
|
107
|
+
return message;
|
|
108
|
+
const setupCommand = formatSetupCommand(sourceCli, options);
|
|
109
|
+
return message
|
|
110
|
+
.replaceAll("`prodex setup --token-ttl-hours <hours>`", `\`${setupCommand} --token-ttl-hours <hours>\``)
|
|
111
|
+
.replaceAll("`prodex setup`", `\`${setupCommand}\``);
|
|
112
|
+
}
|
|
113
|
+
export function sourceAwareReleaseMessage(message, sourceCli, options = {}) {
|
|
114
|
+
if (!sourceCli && !options.cwd)
|
|
115
|
+
return message;
|
|
116
|
+
return message
|
|
117
|
+
.replaceAll("`prodex release pack --pack-destination <dir>`", `\`${formatReleasePackCommand(sourceCli, options)}\``)
|
|
118
|
+
.replaceAll("`prodex release status`", `\`${formatReleaseStatusCommand(sourceCli, options)}\``);
|
|
119
|
+
}
|
|
120
|
+
export function errorMessage(error) {
|
|
121
|
+
return error instanceof Error ? error.message : String(error);
|
|
122
|
+
}
|
|
123
|
+
export function isUntrustedResultError(error) {
|
|
124
|
+
return (typeof error === "object" &&
|
|
125
|
+
error !== null &&
|
|
126
|
+
"code" in error &&
|
|
127
|
+
"taskId" in error &&
|
|
128
|
+
error.code === "EUNTRUSTED_RESULT" &&
|
|
129
|
+
typeof error.taskId === "string");
|
|
130
|
+
}
|
|
131
|
+
export function formatCommandInCwd(command, cwd) {
|
|
132
|
+
return cwd ? `cd ${shellQuote(cwd)} && ${command}` : command;
|
|
133
|
+
}
|
|
134
|
+
export function browserOptionsWithStoredPort(options, storedArgs) {
|
|
135
|
+
if (options.port || !storedArgs)
|
|
136
|
+
return options;
|
|
137
|
+
const match = storedArgs.match(/(?:^|\s)--port\s+(\d{1,5})(?:\s|$)/);
|
|
138
|
+
if (!match)
|
|
139
|
+
return options;
|
|
140
|
+
const port = Number(match[1]);
|
|
141
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
142
|
+
return options;
|
|
143
|
+
return { ...options, port };
|
|
144
|
+
}
|
|
145
|
+
export function formatBrowserSmokeCommandBody(sourceCli, options = {}) {
|
|
146
|
+
const command = [`${formatCliCommand(sourceCli)} pro browser smoke${formatSourceCliOption(sourceCli)}`, options.port ? `--port ${options.port}` : undefined]
|
|
147
|
+
.filter(Boolean)
|
|
148
|
+
.join(" ");
|
|
149
|
+
return command;
|
|
150
|
+
}
|
|
151
|
+
export function formatBrowserLoginCommandBody(sourceCli, options = {}) {
|
|
152
|
+
const command = [
|
|
153
|
+
`${formatCliCommand(sourceCli)} pro browser login${formatSourceCliOption(sourceCli)}`,
|
|
154
|
+
options.profileDir ? `--profile-dir ${shellQuote(options.profileDir)}` : undefined,
|
|
155
|
+
options.port ? `--port ${options.port}` : undefined,
|
|
156
|
+
options.url ? `--url ${shellQuote(options.url)}` : undefined,
|
|
157
|
+
options.launchTimeoutMs ? `--launch-timeout-ms ${options.launchTimeoutMs}` : undefined
|
|
158
|
+
]
|
|
159
|
+
.filter(Boolean)
|
|
160
|
+
.join(" ");
|
|
161
|
+
return command;
|
|
162
|
+
}
|
|
163
|
+
// ask retry commands carry their own --target-url/--confirm-target/"prompt" tail, so callers
|
|
164
|
+
// preserve the stored argument tail verbatim and only re-point this bare base at the source CLI.
|
|
165
|
+
export function formatBrowserAskCommandBody(sourceCli) {
|
|
166
|
+
return `${formatCliCommand(sourceCli)} pro browser ask${formatSourceCliOption(sourceCli)}`;
|
|
167
|
+
}
|
|
168
|
+
export function formatResultResealCommand(taskId, sourceCli, options = {}) {
|
|
169
|
+
return [
|
|
170
|
+
`${formatCliCommand(sourceCli)} results reseal ${shellQuote(taskId)} --confirm-current-result`,
|
|
171
|
+
options.cwd ? `--cwd ${shellQuote(options.cwd)}` : undefined
|
|
172
|
+
]
|
|
173
|
+
.filter(Boolean)
|
|
174
|
+
.join(" ");
|
|
175
|
+
}
|
|
176
|
+
export function isMissingFileError(error) {
|
|
177
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
178
|
+
}
|
|
179
|
+
export function isLoopbackHost(hostname) {
|
|
180
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname === "[::1]";
|
|
181
|
+
}
|
|
182
|
+
export function firstLine(value) {
|
|
183
|
+
return value.split(/\r?\n/).find((line) => line.trim())?.trim() ?? "";
|
|
184
|
+
}
|
|
185
|
+
// Human-pacing for visible-browser sends: chatgpt.com anti-bot systems react to
|
|
186
|
+
// machine-speed request bursts, so an agent loop is throttled to no faster than
|
|
187
|
+
// one send per DEFAULT_MIN_SEND_INTERVAL_MS. Returns how long to wait before the
|
|
188
|
+
// next send given the previous send's start time (0 = send now).
|
|
189
|
+
export const DEFAULT_MIN_SEND_INTERVAL_MS = 10_000;
|
|
190
|
+
export function resolveMinSendIntervalMs(env = process.env) {
|
|
191
|
+
const raw = env.PRODEX_MIN_SEND_INTERVAL_MS;
|
|
192
|
+
if (raw === undefined || raw.trim() === "")
|
|
193
|
+
return DEFAULT_MIN_SEND_INTERVAL_MS;
|
|
194
|
+
const parsed = Number(raw);
|
|
195
|
+
if (!Number.isFinite(parsed) || parsed < 0)
|
|
196
|
+
return DEFAULT_MIN_SEND_INTERVAL_MS;
|
|
197
|
+
return Math.floor(parsed);
|
|
198
|
+
}
|
|
199
|
+
export function computeSendPacingWaitMs(lastSendAtMs, nowMs, intervalMs) {
|
|
200
|
+
if (intervalMs <= 0 || lastSendAtMs === undefined)
|
|
201
|
+
return 0;
|
|
202
|
+
const elapsed = nowMs - lastSendAtMs;
|
|
203
|
+
if (!Number.isFinite(elapsed) || elapsed < 0)
|
|
204
|
+
return 0; // clock skew / bad marker: do not wait
|
|
205
|
+
return elapsed >= intervalMs ? 0 : intervalMs - elapsed;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=cli-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-shared.js","sourceRoot":"","sources":["../src/cli-shared.ts"],"names":[],"mappings":"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"}
|