@visual-z/xeno 0.8.4 → 0.9.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/CHANGELOG.md +8 -0
- package/README.md +31 -746
- package/bin/xeno.exe +26 -0
- package/install.cjs +88 -0
- package/package.json +18 -48
- package/docs/app-server.md +0 -115
- package/docs/foundations.md +0 -88
- package/docs/install.md +0 -244
- package/docs/providers.md +0 -172
- package/docs/research/foundation-clients-2026-10-09.md +0 -27
- package/docs/research/foundation-editing-2026-10-09.md +0 -56
- package/docs/research/foundation-network-2026-10-09.md +0 -37
- package/docs/research/foundation-workflow-2026-10-09.md +0 -37
- package/src/apps/acp-server.ts +0 -41
- package/src/apps/agent-profiles.ts +0 -19
- package/src/apps/app-server.ts +0 -30
- package/src/apps/approve.ts +0 -49
- package/src/apps/cli.ts +0 -99
- package/src/apps/commands.ts +0 -319
- package/src/apps/completions.ts +0 -87
- package/src/apps/control-transport.ts +0 -90
- package/src/apps/export-cli.ts +0 -24
- package/src/apps/goal-flow.ts +0 -70
- package/src/apps/image-draft.ts +0 -46
- package/src/apps/input.ts +0 -312
- package/src/apps/model-catalog.ts +0 -69
- package/src/apps/preferences.ts +0 -20
- package/src/apps/project-trust.ts +0 -9
- package/src/apps/provider-connect.ts +0 -346
- package/src/apps/question-ui.ts +0 -27
- package/src/apps/render.ts +0 -181
- package/src/apps/resources.ts +0 -66
- package/src/apps/review.ts +0 -109
- package/src/apps/session-hub.ts +0 -96
- package/src/apps/session-lifecycle.ts +0 -64
- package/src/apps/shell.ts +0 -2071
- package/src/apps/startup-input.ts +0 -135
- package/src/apps/startup.ts +0 -1677
- package/src/apps/ui/app.ts +0 -1818
- package/src/apps/ui/control-model.ts +0 -43
- package/src/apps/ui/extension-host.ts +0 -194
- package/src/apps/ui/image-cache.ts +0 -121
- package/src/apps/ui/palette.ts +0 -88
- package/src/apps/ui/project.ts +0 -127
- package/src/apps/ui/standalone.ts +0 -148
- package/src/apps/ui/status-model.ts +0 -68
- package/src/apps/ui/surface.ts +0 -91
- package/src/apps/ui/theme.ts +0 -86
- package/src/apps/update-check.ts +0 -112
- package/src/apps/workflow.ts +0 -58
- package/src/core/acceptance.ts +0 -139
- package/src/core/action-defaults.ts +0 -58
- package/src/core/activity-status.ts +0 -52
- package/src/core/agent-profile.ts +0 -130
- package/src/core/attachment-input.ts +0 -17
- package/src/core/blind-checks.ts +0 -72
- package/src/core/boundary.ts +0 -174
- package/src/core/branch-receipt.ts +0 -26
- package/src/core/catalog-merge.ts +0 -19
- package/src/core/checkpoints.ts +0 -85
- package/src/core/churn.ts +0 -61
- package/src/core/command-artifacts.ts +0 -94
- package/src/core/command-contract.ts +0 -151
- package/src/core/completion-action.ts +0 -20
- package/src/core/completion-review.ts +0 -98
- package/src/core/context-detail.ts +0 -37
- package/src/core/context-policy.ts +0 -133
- package/src/core/context-window.ts +0 -54
- package/src/core/continuation.ts +0 -130
- package/src/core/control-protocol.ts +0 -69
- package/src/core/control-view.ts +0 -39
- package/src/core/cycle.ts +0 -17
- package/src/core/data-query.ts +0 -201
- package/src/core/deadline.ts +0 -40
- package/src/core/derive.ts +0 -516
- package/src/core/draft-images.ts +0 -56
- package/src/core/edit-plan.ts +0 -200
- package/src/core/environment.ts +0 -181
- package/src/core/event-validation.ts +0 -220
- package/src/core/events.ts +0 -670
- package/src/core/evidence-ladder.ts +0 -62
- package/src/core/evidence-links.ts +0 -68
- package/src/core/evidence.ts +0 -240
- package/src/core/execution.ts +0 -18
- package/src/core/exhaustive.ts +0 -18
- package/src/core/export.ts +0 -179
- package/src/core/extension-flags.ts +0 -14
- package/src/core/external-effects.ts +0 -488
- package/src/core/failure-recovery.ts +0 -173
- package/src/core/file-precondition.ts +0 -78
- package/src/core/file-references.ts +0 -35
- package/src/core/frontmatter.ts +0 -213
- package/src/core/git-status.ts +0 -29
- package/src/core/goal-view.ts +0 -64
- package/src/core/goal.ts +0 -200
- package/src/core/handoff.ts +0 -479
- package/src/core/history-query.ts +0 -139
- package/src/core/history.ts +0 -237
- package/src/core/image-limits.ts +0 -72
- package/src/core/images.ts +0 -46
- package/src/core/integration-health.ts +0 -34
- package/src/core/json-event.ts +0 -131
- package/src/core/json-pointer.ts +0 -46
- package/src/core/keymap.ts +0 -153
- package/src/core/lsp-framing.ts +0 -34
- package/src/core/mcp-config.ts +0 -68
- package/src/core/model-picker.ts +0 -64
- package/src/core/model-preferences.ts +0 -28
- package/src/core/model-replay.ts +0 -22
- package/src/core/model-scope.ts +0 -53
- package/src/core/note-guidance.ts +0 -34
- package/src/core/oauth-fields.ts +0 -44
- package/src/core/observation-view.ts +0 -152
- package/src/core/outcome.ts +0 -44
- package/src/core/overflow.ts +0 -59
- package/src/core/packages.ts +0 -47
- package/src/core/patch.ts +0 -130
- package/src/core/path-suggestions.ts +0 -59
- package/src/core/permissions.ts +0 -410
- package/src/core/process-receipt.ts +0 -105
- package/src/core/process-state.ts +0 -37
- package/src/core/program-status.ts +0 -40
- package/src/core/progress.ts +0 -150
- package/src/core/project.ts +0 -431
- package/src/core/prompt-policy.ts +0 -46
- package/src/core/prompts.ts +0 -111
- package/src/core/question.ts +0 -94
- package/src/core/queue.ts +0 -78
- package/src/core/read-bounds.ts +0 -24
- package/src/core/read-observation.ts +0 -106
- package/src/core/recovery-sources.ts +0 -74
- package/src/core/regex-dialect.ts +0 -25
- package/src/core/request-budget.ts +0 -23
- package/src/core/request-progress.ts +0 -87
- package/src/core/request-state.ts +0 -273
- package/src/core/resource-selection.ts +0 -36
- package/src/core/response-recovery.ts +0 -59
- package/src/core/resume.ts +0 -59
- package/src/core/review.ts +0 -68
- package/src/core/ripgrep-release.ts +0 -64
- package/src/core/runtime-target.ts +0 -94
- package/src/core/scheduling.ts +0 -8
- package/src/core/search-observation.ts +0 -97
- package/src/core/secrets.ts +0 -188
- package/src/core/session-archive.ts +0 -4
- package/src/core/session-browser.ts +0 -82
- package/src/core/session-entry.ts +0 -61
- package/src/core/session-exit.ts +0 -42
- package/src/core/session-format.ts +0 -169
- package/src/core/session-position.ts +0 -26
- package/src/core/session-tree.ts +0 -147
- package/src/core/settings.ts +0 -192
- package/src/core/skills.ts +0 -165
- package/src/core/sql-query.ts +0 -211
- package/src/core/stall.ts +0 -128
- package/src/core/stop-report.ts +0 -68
- package/src/core/text-normalize.ts +0 -81
- package/src/core/theme.ts +0 -166
- package/src/core/thinking.ts +0 -26
- package/src/core/tokens.ts +0 -151
- package/src/core/tool-contract.ts +0 -153
- package/src/core/tool-discovery.ts +0 -87
- package/src/core/tool-failure.ts +0 -81
- package/src/core/tool-input.ts +0 -44
- package/src/core/transcript.ts +0 -108
- package/src/core/tui-mode.ts +0 -29
- package/src/core/update-check.ts +0 -157
- package/src/core/version.ts +0 -55
- package/src/core/web-content.ts +0 -80
- package/src/core/work-state.ts +0 -154
- package/src/core/workflow-mode.ts +0 -34
- package/src/core/working-set.ts +0 -119
- package/src/core/yaml.ts +0 -282
- package/src/runtime/acp-agent.ts +0 -289
- package/src/runtime/agent-profiles.ts +0 -21
- package/src/runtime/auth.ts +0 -367
- package/src/runtime/blind-check.ts +0 -36
- package/src/runtime/branch-jobs.ts +0 -36
- package/src/runtime/catalog.ts +0 -285
- package/src/runtime/clipboard.ts +0 -125
- package/src/runtime/command-artifacts.ts +0 -64
- package/src/runtime/connection-reuse.ts +0 -40
- package/src/runtime/control-client.ts +0 -149
- package/src/runtime/control-connection.ts +0 -139
- package/src/runtime/counter-check.ts +0 -74
- package/src/runtime/environment-tools.ts +0 -60
- package/src/runtime/evidence-notes.ts +0 -35
- package/src/runtime/exec-sessions.ts +0 -456
- package/src/runtime/execution-control.ts +0 -40
- package/src/runtime/extension-loader.ts +0 -37
- package/src/runtime/extension-ui.ts +0 -47
- package/src/runtime/extensions.ts +0 -370
- package/src/runtime/formatter-tool.ts +0 -38
- package/src/runtime/formatter.ts +0 -50
- package/src/runtime/foundation.ts +0 -116
- package/src/runtime/history-cache.ts +0 -57
- package/src/runtime/history-tools.ts +0 -168
- package/src/runtime/images.ts +0 -80
- package/src/runtime/integrations.ts +0 -216
- package/src/runtime/loop.ts +0 -3108
- package/src/runtime/lsp-client.ts +0 -201
- package/src/runtime/mcp-client.ts +0 -264
- package/src/runtime/mcp-oauth.ts +0 -168
- package/src/runtime/mcp-schema.ts +0 -51
- package/src/runtime/model-config.ts +0 -232
- package/src/runtime/model-data.LICENSE +0 -27
- package/src/runtime/model-data.ts +0 -21
- package/src/runtime/model-discovery.ts +0 -208
- package/src/runtime/model-replay.ts +0 -10
- package/src/runtime/model-scope.ts +0 -20
- package/src/runtime/model-sources.ts +0 -151
- package/src/runtime/model.ts +0 -686
- package/src/runtime/models-fetch.ts +0 -57
- package/src/runtime/oauth-device.ts +0 -86
- package/src/runtime/oauth.ts +0 -853
- package/src/runtime/open-image.ts +0 -42
- package/src/runtime/openai-responses.ts +0 -304
- package/src/runtime/openai.ts +0 -697
- package/src/runtime/output-schema.ts +0 -26
- package/src/runtime/package-manager.ts +0 -125
- package/src/runtime/patch-tool.ts +0 -38
- package/src/runtime/permission-resources.ts +0 -18
- package/src/runtime/pi-provider.ts +0 -423
- package/src/runtime/program-status.ts +0 -38
- package/src/runtime/progress.ts +0 -26
- package/src/runtime/provider-access.ts +0 -21
- package/src/runtime/provider-connect.ts +0 -109
- package/src/runtime/provider-presets.ts +0 -98
- package/src/runtime/provider-protocols.ts +0 -29
- package/src/runtime/provider-request.ts +0 -87
- package/src/runtime/provider-tool-policy.ts +0 -33
- package/src/runtime/provider.ts +0 -580
- package/src/runtime/question-tool.ts +0 -62
- package/src/runtime/retry.ts +0 -447
- package/src/runtime/review-tool.ts +0 -48
- package/src/runtime/rich-text.ts +0 -36
- package/src/runtime/runtime-target.ts +0 -149
- package/src/runtime/secrets.ts +0 -79
- package/src/runtime/self-update.ts +0 -74
- package/src/runtime/session-control.ts +0 -265
- package/src/runtime/session-hub.ts +0 -85
- package/src/runtime/stream-idle.ts +0 -80
- package/src/runtime/tool-broker.ts +0 -137
- package/src/runtime/tool-discovery.ts +0 -58
- package/src/runtime/tool-queue.ts +0 -77
- package/src/runtime/tools.ts +0 -1820
- package/src/runtime/turn-effects.ts +0 -31
- package/src/runtime/update-check.ts +0 -48
- package/src/runtime/usage.ts +0 -253
- package/src/runtime/version.ts +0 -12
- package/src/runtime/web-http.ts +0 -56
- package/src/runtime/web-tools.ts +0 -88
- package/src/runtime/working-notes.ts +0 -60
- package/src/runtime/workspace-lifecycle.ts +0 -141
- package/src/store/acceptance.ts +0 -15
- package/src/store/agent-profile-files.ts +0 -13
- package/src/store/atomic.ts +0 -31
- package/src/store/auth-store.ts +0 -50
- package/src/store/blind-checks.ts +0 -32
- package/src/store/blobs.ts +0 -143
- package/src/store/checkpoint-history.ts +0 -32
- package/src/store/command-artifacts.ts +0 -96
- package/src/store/command.ts +0 -111
- package/src/store/config.ts +0 -69
- package/src/store/context-files.ts +0 -436
- package/src/store/file-checkpoints.ts +0 -108
- package/src/store/file-index.ts +0 -174
- package/src/store/foundation-config.ts +0 -24
- package/src/store/git-checkpoints.ts +0 -67
- package/src/store/git-status.ts +0 -15
- package/src/store/history-search.ts +0 -19
- package/src/store/log.ts +0 -725
- package/src/store/lsp-document.ts +0 -30
- package/src/store/mcp-credentials.ts +0 -85
- package/src/store/models.ts +0 -60
- package/src/store/observations.ts +0 -224
- package/src/store/packages.ts +0 -98
- package/src/store/patch.ts +0 -92
- package/src/store/permission-paths.ts +0 -34
- package/src/store/process-receipts.ts +0 -34
- package/src/store/query-source.ts +0 -49
- package/src/store/recovery.ts +0 -44
- package/src/store/replay.ts +0 -76
- package/src/store/resource-index.ts +0 -170
- package/src/store/resources.ts +0 -285
- package/src/store/restore.ts +0 -110
- package/src/store/review.ts +0 -109
- package/src/store/runtime-target.ts +0 -64
- package/src/store/search.ts +0 -728
- package/src/store/secrets.ts +0 -44
- package/src/store/serial.ts +0 -13
- package/src/store/session-archive.ts +0 -165
- package/src/store/session-browser.ts +0 -68
- package/src/store/session-position.ts +0 -27
- package/src/store/sessions.ts +0 -525
- package/src/store/source-cancellation.ts +0 -6
- package/src/store/tool-binaries.ts +0 -90
- package/src/store/trust.ts +0 -82
- package/src/store/update-cache.ts +0 -36
- package/src/store/user-settings.ts +0 -30
- package/src/store/workspace-clone.ts +0 -42
- package/src/store/workspace-observation.ts +0 -113
- package/src/store/workspace.ts +0 -115
- package/src/store/worktree.ts +0 -278
- package/src/tui/ansi-spans.ts +0 -126
- package/src/tui/diff.ts +0 -160
- package/src/tui/exhaustive.ts +0 -14
- package/src/tui/fuzzy.ts +0 -75
- package/src/tui/style.ts +0 -208
- package/src/tui/ui/atomic-draft.ts +0 -121
- package/src/tui/ui/branch-panel.ts +0 -47
- package/src/tui/ui/canvas.ts +0 -96
- package/src/tui/ui/colors.ts +0 -70
- package/src/tui/ui/composer.ts +0 -199
- package/src/tui/ui/control-panel.ts +0 -25
- package/src/tui/ui/control-sidebar.ts +0 -49
- package/src/tui/ui/dialog.ts +0 -398
- package/src/tui/ui/draft.ts +0 -23
- package/src/tui/ui/duration.ts +0 -16
- package/src/tui/ui/edge.ts +0 -186
- package/src/tui/ui/image-size.ts +0 -44
- package/src/tui/ui/ink.ts +0 -210
- package/src/tui/ui/items.ts +0 -42
- package/src/tui/ui/keys.ts +0 -40
- package/src/tui/ui/layout.ts +0 -74
- package/src/tui/ui/list-model.ts +0 -86
- package/src/tui/ui/list-view.ts +0 -172
- package/src/tui/ui/mascot.ts +0 -67
- package/src/tui/ui/messages.ts +0 -518
- package/src/tui/ui/motion.ts +0 -28
- package/src/tui/ui/paths.ts +0 -10
- package/src/tui/ui/pictures.ts +0 -108
- package/src/tui/ui/prompt-history.ts +0 -60
- package/src/tui/ui/screen.ts +0 -579
- package/src/tui/ui/status.ts +0 -403
- package/src/tui/ui/styled.ts +0 -85
- package/src/tui/ui/tool-card.ts +0 -150
- package/src/tui/width.ts +0 -567
- package/src/vendor/pi-rich/LICENSE.upstream +0 -21
- package/src/vendor/pi-rich/UPSTREAM.json +0 -17
- package/src/vendor/pi-rich/clipboard-command.ts +0 -44
- package/src/vendor/pi-rich/exif-orientation.ts +0 -182
- package/src/vendor/pi-rich/html.ts +0 -51
- package/src/vendor/pi-rich/image-convert.ts +0 -49
- package/src/vendor/pi-rich/image-resize-core.ts +0 -164
- package/src/vendor/pi-rich/image-resize-worker.ts +0 -42
- package/src/vendor/pi-rich/image-resize.ts +0 -123
- package/src/vendor/pi-rich/mime.ts +0 -116
- package/src/vendor/pi-rich/photon.ts +0 -139
- package/src/vendor/pi-rich/syntax-highlight.ts +0 -214
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explicit catalog refresh. The only network read in this area.
|
|
3
|
-
*
|
|
4
|
-
* Startup never imports a call to this. `xeno models --refresh` and
|
|
5
|
-
* `/models refresh` do. A failure (no network, timeout, 404) is a reason
|
|
6
|
-
* string, not a throw — the caller falls back to the built-in list and
|
|
7
|
-
* says so. Timeout is 15s, assumed: long enough for a 4.7MB JSON on a
|
|
8
|
-
* slow link, short enough that a hang is distinguishable from "still
|
|
9
|
-
* starting".
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { modelsDevCatalog, unionSourceCatalog } from "./model-sources.ts";
|
|
13
|
-
|
|
14
|
-
export const MODELS_DEV_URL = "https://models.dev/api.json";
|
|
15
|
-
|
|
16
|
-
/** Assumed. See the file header. */
|
|
17
|
-
const REFRESH_TIMEOUT_MS = 15_000;
|
|
18
|
-
|
|
19
|
-
export type RefreshResult =
|
|
20
|
-
| { ok: true; count: number }
|
|
21
|
-
| { ok: false; reason: string };
|
|
22
|
-
|
|
23
|
-
export async function refreshRemoteCatalog(opts: {
|
|
24
|
-
/** Call signature only — `typeof fetch` also has `preconnect`, which a test spy does not. */
|
|
25
|
-
fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
26
|
-
write: (value: unknown) => Promise<void>;
|
|
27
|
-
url?: string;
|
|
28
|
-
}): Promise<RefreshResult> {
|
|
29
|
-
const url = opts.url ?? MODELS_DEV_URL;
|
|
30
|
-
let response: Response;
|
|
31
|
-
try {
|
|
32
|
-
response = await opts.fetch(url, { signal: AbortSignal.timeout(REFRESH_TIMEOUT_MS) });
|
|
33
|
-
} catch (err) {
|
|
34
|
-
const detail = err instanceof Error ? err.message : String(err);
|
|
35
|
-
return { ok: false, reason: `could not refresh models: ${detail}` };
|
|
36
|
-
}
|
|
37
|
-
if (!response.ok) {
|
|
38
|
-
return { ok: false, reason: `could not refresh models: ${url} returned ${response.status}` };
|
|
39
|
-
}
|
|
40
|
-
let json: unknown;
|
|
41
|
-
try {
|
|
42
|
-
json = await response.json();
|
|
43
|
-
} catch (err) {
|
|
44
|
-
return { ok: false, reason: `could not refresh models: body is not JSON (${(err as Error).message})` };
|
|
45
|
-
}
|
|
46
|
-
if (modelsDevCatalog(json).models.length === 0) {
|
|
47
|
-
return { ok: false, reason: `could not refresh models: ${url} named no provider we can speak` };
|
|
48
|
-
}
|
|
49
|
-
const catalog = unionSourceCatalog(json);
|
|
50
|
-
try {
|
|
51
|
-
// Provider metadata is not the user's executable provider configuration.
|
|
52
|
-
await opts.write({ schemaVersion: 1, models: catalog.models, providerMetadata: catalog.providers, excluded: catalog.excluded });
|
|
53
|
-
} catch (err) {
|
|
54
|
-
return { ok: false, reason: `could not write models: ${(err as Error).message}` };
|
|
55
|
-
}
|
|
56
|
-
return { ok: true, count: catalog.models.length };
|
|
57
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RFC 8628 device-code polling.
|
|
3
|
-
*
|
|
4
|
-
* Ported from pi (earendil-works/pi, MIT) — packages/ai/src/auth/oauth/device-code.ts
|
|
5
|
-
*
|
|
6
|
-
* Isolated from the authorization-code module so Copilot's poll loop does not
|
|
7
|
-
* drag a callback HTTP server into a path that never binds a port.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const CANCEL_MESSAGE = "Login cancelled";
|
|
11
|
-
const TIMEOUT_MESSAGE = "Device flow timed out";
|
|
12
|
-
/**
|
|
13
|
-
* RFC 8628 §3.2: if the authorization server omits `interval`, poll every 5s.
|
|
14
|
-
* Assumed from the RFC, not measured.
|
|
15
|
-
*/
|
|
16
|
-
const DEFAULT_POLL_INTERVAL_SECONDS = 5;
|
|
17
|
-
const MINIMUM_INTERVAL_MS = 1000;
|
|
18
|
-
/** RFC 8628 §3.5: `slow_down` increases the interval by 5 seconds. */
|
|
19
|
-
const SLOW_DOWN_INTERVAL_INCREMENT_MS = 5000;
|
|
20
|
-
|
|
21
|
-
type Incomplete =
|
|
22
|
-
| { status: "pending" }
|
|
23
|
-
| { status: "slow_down"; intervalSeconds?: number }
|
|
24
|
-
| { status: "failed"; message: string };
|
|
25
|
-
|
|
26
|
-
export type DevicePollResult<T> = Incomplete | { status: "complete"; value: T };
|
|
27
|
-
|
|
28
|
-
export async function abortableSleep(ms: number, signal: AbortSignal): Promise<void> {
|
|
29
|
-
return new Promise((resolve, reject) => {
|
|
30
|
-
if (signal.aborted) {
|
|
31
|
-
reject(new Error(CANCEL_MESSAGE));
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const onAbort = (): void => {
|
|
35
|
-
clearTimeout(timeout);
|
|
36
|
-
reject(new Error(CANCEL_MESSAGE));
|
|
37
|
-
};
|
|
38
|
-
const timeout = setTimeout(() => {
|
|
39
|
-
signal.removeEventListener("abort", onAbort);
|
|
40
|
-
resolve();
|
|
41
|
-
}, ms);
|
|
42
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export async function pollDeviceCode<T>(opts: {
|
|
47
|
-
intervalSeconds?: number;
|
|
48
|
-
expiresInSeconds?: number;
|
|
49
|
-
waitBeforeFirstPoll?: boolean;
|
|
50
|
-
poll: () => Promise<DevicePollResult<T>>;
|
|
51
|
-
signal: AbortSignal;
|
|
52
|
-
sleep?: (ms: number, signal: AbortSignal) => Promise<void>;
|
|
53
|
-
}): Promise<T> {
|
|
54
|
-
const sleep = opts.sleep ?? abortableSleep;
|
|
55
|
-
const deadline =
|
|
56
|
-
typeof opts.expiresInSeconds === "number"
|
|
57
|
-
? Date.now() + opts.expiresInSeconds * 1000
|
|
58
|
-
: Number.POSITIVE_INFINITY;
|
|
59
|
-
let intervalMs = Math.max(
|
|
60
|
-
MINIMUM_INTERVAL_MS,
|
|
61
|
-
Math.floor((opts.intervalSeconds ?? DEFAULT_POLL_INTERVAL_SECONDS) * 1000),
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
if (opts.waitBeforeFirstPoll === true) {
|
|
65
|
-
const remaining = deadline - Date.now();
|
|
66
|
-
if (remaining > 0) await sleep(Math.min(intervalMs, remaining), opts.signal);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
while (Date.now() < deadline) {
|
|
70
|
-
if (opts.signal.aborted) throw new Error(CANCEL_MESSAGE);
|
|
71
|
-
const result = await opts.poll();
|
|
72
|
-
if (result.status === "complete") return result.value;
|
|
73
|
-
if (result.status === "failed") throw new Error(result.message);
|
|
74
|
-
if (result.status === "slow_down") {
|
|
75
|
-
const next = result.intervalSeconds;
|
|
76
|
-
intervalMs =
|
|
77
|
-
typeof next === "number" && Number.isFinite(next) && next > 0
|
|
78
|
-
? Math.max(MINIMUM_INTERVAL_MS, Math.floor(next * 1000))
|
|
79
|
-
: Math.max(MINIMUM_INTERVAL_MS, intervalMs + SLOW_DOWN_INTERVAL_INCREMENT_MS);
|
|
80
|
-
}
|
|
81
|
-
const remaining = deadline - Date.now();
|
|
82
|
-
if (remaining <= 0) break;
|
|
83
|
-
await sleep(Math.min(intervalMs, remaining), opts.signal);
|
|
84
|
-
}
|
|
85
|
-
throw new Error(TIMEOUT_MESSAGE);
|
|
86
|
-
}
|