@raidiant/notifai 11.7.1 → 12.0.0-beta.11
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 +53 -0
- package/NOTICE +16 -0
- package/THIRD_PARTY_NOTICES +725 -0
- package/bin/notifai.mjs +11420 -0
- package/data/install.ps1 +318 -0
- package/data/release.json +1 -0
- package/inventory.json +1 -0
- package/npm-adapter-files.json +52 -0
- package/package.json +14 -44
- package/README.md +0 -168
- package/dist/agent-update-notice.d.ts +0 -7
- package/dist/agent-update-notice.js +0 -77
- package/dist/agent-update-notice.js.map +0 -1
- package/dist/atomic-file.d.ts +0 -30
- package/dist/atomic-file.js +0 -148
- package/dist/atomic-file.js.map +0 -1
- package/dist/attendant-update.d.ts +0 -15
- package/dist/attendant-update.js +0 -96
- package/dist/attendant-update.js.map +0 -1
- package/dist/claude-wake.d.ts +0 -108
- package/dist/claude-wake.js +0 -369
- package/dist/claude-wake.js.map +0 -1
- package/dist/cli-bin.d.ts +0 -26
- package/dist/cli-bin.js +0 -220
- package/dist/cli-bin.js.map +0 -1
- package/dist/cli-contract.d.ts +0 -16
- package/dist/cli-contract.js +0 -27
- package/dist/cli-contract.js.map +0 -1
- package/dist/cli-release.d.ts +0 -36
- package/dist/cli-release.js +0 -85
- package/dist/cli-release.js.map +0 -1
- package/dist/client.d.ts +0 -109
- package/dist/client.js +0 -217
- package/dist/client.js.map +0 -1
- package/dist/codex-answer-control.d.ts +0 -14
- package/dist/codex-answer-control.js +0 -41
- package/dist/codex-answer-control.js.map +0 -1
- package/dist/codex-answer-presentation.d.ts +0 -18
- package/dist/codex-answer-presentation.js +0 -113
- package/dist/codex-answer-presentation.js.map +0 -1
- package/dist/codex-input-lifecycle.d.ts +0 -10
- package/dist/codex-input-lifecycle.js +0 -63
- package/dist/codex-input-lifecycle.js.map +0 -1
- package/dist/codex-native-control.d.ts +0 -13
- package/dist/codex-native-control.js +0 -120
- package/dist/codex-native-control.js.map +0 -1
- package/dist/codex-native-turn.d.ts +0 -37
- package/dist/codex-native-turn.js +0 -155
- package/dist/codex-native-turn.js.map +0 -1
- package/dist/codex-question-bindings.d.ts +0 -76
- package/dist/codex-question-bindings.js +0 -151
- package/dist/codex-question-bindings.js.map +0 -1
- package/dist/codex-queue-control.d.ts +0 -21
- package/dist/codex-queue-control.js +0 -59
- package/dist/codex-queue-control.js.map +0 -1
- package/dist/codex-tool-messages.d.ts +0 -7
- package/dist/codex-tool-messages.js +0 -126
- package/dist/codex-tool-messages.js.map +0 -1
- package/dist/codex-wake.d.ts +0 -58
- package/dist/codex-wake.js +0 -135
- package/dist/codex-wake.js.map +0 -1
- package/dist/command-session.d.ts +0 -14
- package/dist/command-session.js +0 -31
- package/dist/command-session.js.map +0 -1
- package/dist/commands-acknowledge.d.ts +0 -13
- package/dist/commands-acknowledge.js +0 -116
- package/dist/commands-acknowledge.js.map +0 -1
- package/dist/commands-agent-sessions.d.ts +0 -6
- package/dist/commands-agent-sessions.js +0 -51
- package/dist/commands-agent-sessions.js.map +0 -1
- package/dist/commands-ask.d.ts +0 -62
- package/dist/commands-ask.js +0 -503
- package/dist/commands-ask.js.map +0 -1
- package/dist/commands-auth.d.ts +0 -76
- package/dist/commands-auth.js +0 -421
- package/dist/commands-auth.js.map +0 -1
- package/dist/commands-close.d.ts +0 -6
- package/dist/commands-close.js +0 -273
- package/dist/commands-close.js.map +0 -1
- package/dist/commands-config.d.ts +0 -31
- package/dist/commands-config.js +0 -272
- package/dist/commands-config.js.map +0 -1
- package/dist/commands-core.d.ts +0 -145
- package/dist/commands-core.js +0 -190
- package/dist/commands-core.js.map +0 -1
- package/dist/commands-devices.d.ts +0 -41
- package/dist/commands-devices.js +0 -144
- package/dist/commands-devices.js.map +0 -1
- package/dist/commands-doctor.d.ts +0 -25
- package/dist/commands-doctor.js +0 -1553
- package/dist/commands-doctor.js.map +0 -1
- package/dist/commands-guidance.d.ts +0 -27
- package/dist/commands-guidance.js +0 -150
- package/dist/commands-guidance.js.map +0 -1
- package/dist/commands-harness-context.d.ts +0 -57
- package/dist/commands-harness-context.js +0 -102
- package/dist/commands-harness-context.js.map +0 -1
- package/dist/commands-hook-attend.d.ts +0 -70
- package/dist/commands-hook-attend.js +0 -655
- package/dist/commands-hook-attend.js.map +0 -1
- package/dist/commands-hook-diagnostics.d.ts +0 -37
- package/dist/commands-hook-diagnostics.js +0 -136
- package/dist/commands-hook-diagnostics.js.map +0 -1
- package/dist/commands-hook-install.d.ts +0 -26
- package/dist/commands-hook-install.js +0 -784
- package/dist/commands-hook-install.js.map +0 -1
- package/dist/commands-hook-run.d.ts +0 -29
- package/dist/commands-hook-run.js +0 -933
- package/dist/commands-hook-run.js.map +0 -1
- package/dist/commands-hook-shape.d.ts +0 -19
- package/dist/commands-hook-shape.js +0 -48
- package/dist/commands-hook-shape.js.map +0 -1
- package/dist/commands-init.d.ts +0 -42
- package/dist/commands-init.js +0 -901
- package/dist/commands-init.js.map +0 -1
- package/dist/commands-io.d.ts +0 -2
- package/dist/commands-io.js +0 -117
- package/dist/commands-io.js.map +0 -1
- package/dist/commands-logs.d.ts +0 -30
- package/dist/commands-logs.js +0 -201
- package/dist/commands-logs.js.map +0 -1
- package/dist/commands-native-acknowledge.d.ts +0 -8
- package/dist/commands-native-acknowledge.js +0 -114
- package/dist/commands-native-acknowledge.js.map +0 -1
- package/dist/commands-project.d.ts +0 -4
- package/dist/commands-project.js +0 -41
- package/dist/commands-project.js.map +0 -1
- package/dist/commands-receive.d.ts +0 -3
- package/dist/commands-receive.js +0 -59
- package/dist/commands-receive.js.map +0 -1
- package/dist/commands-send-support.d.ts +0 -59
- package/dist/commands-send-support.js +0 -258
- package/dist/commands-send-support.js.map +0 -1
- package/dist/commands-send.d.ts +0 -34
- package/dist/commands-send.js +0 -900
- package/dist/commands-send.js.map +0 -1
- package/dist/commands-setup-proof.d.ts +0 -43
- package/dist/commands-setup-proof.js +0 -134
- package/dist/commands-setup-proof.js.map +0 -1
- package/dist/commands-skill.d.ts +0 -21
- package/dist/commands-skill.js +0 -199
- package/dist/commands-skill.js.map +0 -1
- package/dist/commands-sounds.d.ts +0 -12
- package/dist/commands-sounds.js +0 -35
- package/dist/commands-sounds.js.map +0 -1
- package/dist/commands-update-check.d.ts +0 -6
- package/dist/commands-update-check.js +0 -102
- package/dist/commands-update-check.js.map +0 -1
- package/dist/commands-update-resume.d.ts +0 -7
- package/dist/commands-update-resume.js +0 -143
- package/dist/commands-update-resume.js.map +0 -1
- package/dist/commands-update-skill.d.ts +0 -5
- package/dist/commands-update-skill.js +0 -36
- package/dist/commands-update-skill.js.map +0 -1
- package/dist/commands-update.d.ts +0 -11
- package/dist/commands-update.js +0 -286
- package/dist/commands-update.js.map +0 -1
- package/dist/commands.d.ts +0 -26
- package/dist/commands.js +0 -27
- package/dist/commands.js.map +0 -1
- package/dist/config-schema.d.ts +0 -62
- package/dist/config-schema.js +0 -302
- package/dist/config-schema.js.map +0 -1
- package/dist/config.d.ts +0 -181
- package/dist/config.js +0 -357
- package/dist/config.js.map +0 -1
- package/dist/credentials.d.ts +0 -96
- package/dist/credentials.js +0 -342
- package/dist/credentials.js.map +0 -1
- package/dist/file-lock.d.ts +0 -34
- package/dist/file-lock.js +0 -367
- package/dist/file-lock.js.map +0 -1
- package/dist/generated-session-label.d.ts +0 -2
- package/dist/generated-session-label.js +0 -152
- package/dist/generated-session-label.js.map +0 -1
- package/dist/guidance-content.d.ts +0 -53
- package/dist/guidance-content.js +0 -248
- package/dist/guidance-content.js.map +0 -1
- package/dist/guidance-render.d.ts +0 -25
- package/dist/guidance-render.js +0 -47
- package/dist/guidance-render.js.map +0 -1
- package/dist/guidance.d.ts +0 -69
- package/dist/guidance.js +0 -173
- package/dist/guidance.js.map +0 -1
- package/dist/harness-session-title.d.ts +0 -22
- package/dist/harness-session-title.js +0 -74
- package/dist/harness-session-title.js.map +0 -1
- package/dist/harnesses.d.ts +0 -65
- package/dist/harnesses.js +0 -159
- package/dist/harnesses.js.map +0 -1
- package/dist/hermes-attendant.d.ts +0 -38
- package/dist/hermes-attendant.js +0 -337
- package/dist/hermes-attendant.js.map +0 -1
- package/dist/hermes-plugin.d.ts +0 -11
- package/dist/hermes-plugin.js +0 -299
- package/dist/hermes-plugin.js.map +0 -1
- package/dist/hook-acknowledgements.d.ts +0 -70
- package/dist/hook-acknowledgements.js +0 -490
- package/dist/hook-acknowledgements.js.map +0 -1
- package/dist/hook-adapter.d.ts +0 -48
- package/dist/hook-adapter.js +0 -419
- package/dist/hook-adapter.js.map +0 -1
- package/dist/hook-events.d.ts +0 -105
- package/dist/hook-events.js +0 -130
- package/dist/hook-events.js.map +0 -1
- package/dist/hook-gates.d.ts +0 -7
- package/dist/hook-gates.js +0 -20
- package/dist/hook-gates.js.map +0 -1
- package/dist/hook-input.d.ts +0 -10
- package/dist/hook-input.js +0 -64
- package/dist/hook-input.js.map +0 -1
- package/dist/hook-lifecycle.d.ts +0 -112
- package/dist/hook-lifecycle.js +0 -2031
- package/dist/hook-lifecycle.js.map +0 -1
- package/dist/hook-project-sessions.d.ts +0 -28
- package/dist/hook-project-sessions.js +0 -141
- package/dist/hook-project-sessions.js.map +0 -1
- package/dist/hook-question-lock.d.ts +0 -29
- package/dist/hook-question-lock.js +0 -217
- package/dist/hook-question-lock.js.map +0 -1
- package/dist/hook-question-retirement.d.ts +0 -74
- package/dist/hook-question-retirement.js +0 -314
- package/dist/hook-question-retirement.js.map +0 -1
- package/dist/hook-question-state.d.ts +0 -58
- package/dist/hook-question-state.js +0 -239
- package/dist/hook-question-state.js.map +0 -1
- package/dist/hook-session-state.d.ts +0 -127
- package/dist/hook-session-state.js +0 -488
- package/dist/hook-session-state.js.map +0 -1
- package/dist/hook-types.d.ts +0 -476
- package/dist/hook-types.js +0 -4
- package/dist/hook-types.js.map +0 -1
- package/dist/injection-render.d.ts +0 -36
- package/dist/injection-render.js +0 -61
- package/dist/injection-render.js.map +0 -1
- package/dist/install-hooks.d.ts +0 -470
- package/dist/install-hooks.js +0 -1622
- package/dist/install-hooks.js.map +0 -1
- package/dist/integration-health.d.ts +0 -26
- package/dist/integration-health.js +0 -133
- package/dist/integration-health.js.map +0 -1
- package/dist/interactive.d.ts +0 -22
- package/dist/interactive.js +0 -644
- package/dist/interactive.js.map +0 -1
- package/dist/invocation-context.d.ts +0 -47
- package/dist/invocation-context.js +0 -164
- package/dist/invocation-context.js.map +0 -1
- package/dist/local-path.d.ts +0 -7
- package/dist/local-path.js +0 -27
- package/dist/local-path.js.map +0 -1
- package/dist/logging.d.ts +0 -157
- package/dist/logging.js +0 -599
- package/dist/logging.js.map +0 -1
- package/dist/main-run.d.ts +0 -1
- package/dist/main-run.js +0 -42
- package/dist/main-run.js.map +0 -1
- package/dist/main.d.ts +0 -2
- package/dist/main.js +0 -12
- package/dist/main.js.map +0 -1
- package/dist/native-answer-operation.d.ts +0 -70
- package/dist/native-answer-operation.js +0 -247
- package/dist/native-answer-operation.js.map +0 -1
- package/dist/native-skills.d.ts +0 -64
- package/dist/native-skills.js +0 -167
- package/dist/native-skills.js.map +0 -1
- package/dist/node-floor.d.ts +0 -19
- package/dist/node-floor.js +0 -32
- package/dist/node-floor.js.map +0 -1
- package/dist/npm-invocation.d.ts +0 -34
- package/dist/npm-invocation.js +0 -53
- package/dist/npm-invocation.js.map +0 -1
- package/dist/openclaw-continuation-bridge.d.ts +0 -7
- package/dist/openclaw-continuation-bridge.js +0 -64
- package/dist/openclaw-continuation-bridge.js.map +0 -1
- package/dist/openclaw-gateway-readiness.d.ts +0 -1
- package/dist/openclaw-gateway-readiness.js +0 -24
- package/dist/openclaw-gateway-readiness.js.map +0 -1
- package/dist/openclaw-generation.d.ts +0 -21
- package/dist/openclaw-generation.js +0 -115
- package/dist/openclaw-generation.js.map +0 -1
- package/dist/openclaw-message-bridge.d.ts +0 -8
- package/dist/openclaw-message-bridge.js +0 -93
- package/dist/openclaw-message-bridge.js.map +0 -1
- package/dist/openclaw-pending.d.ts +0 -8
- package/dist/openclaw-pending.js +0 -47
- package/dist/openclaw-pending.js.map +0 -1
- package/dist/openclaw-plugin.d.ts +0 -75
- package/dist/openclaw-plugin.js +0 -1353
- package/dist/openclaw-plugin.js.map +0 -1
- package/dist/openclaw-session-access.d.ts +0 -12
- package/dist/openclaw-session-access.js +0 -79
- package/dist/openclaw-session-access.js.map +0 -1
- package/dist/opencode-plugin.d.ts +0 -88
- package/dist/opencode-plugin.js +0 -286
- package/dist/opencode-plugin.js.map +0 -1
- package/dist/orca-session-title.d.ts +0 -11
- package/dist/orca-session-title.js +0 -111
- package/dist/orca-session-title.js.map +0 -1
- package/dist/pack-feedback-slice.d.ts +0 -35
- package/dist/pack-feedback-slice.js +0 -126
- package/dist/pack-feedback-slice.js.map +0 -1
- package/dist/pairing-qr.d.ts +0 -5
- package/dist/pairing-qr.js +0 -24
- package/dist/pairing-qr.js.map +0 -1
- package/dist/pending-pairing.d.ts +0 -38
- package/dist/pending-pairing.js +0 -70
- package/dist/pending-pairing.js.map +0 -1
- package/dist/platform.d.ts +0 -67
- package/dist/platform.js +0 -140
- package/dist/platform.js.map +0 -1
- package/dist/process-identity.d.ts +0 -26
- package/dist/process-identity.js +0 -82
- package/dist/process-identity.js.map +0 -1
- package/dist/program.d.ts +0 -59
- package/dist/program.js +0 -691
- package/dist/program.js.map +0 -1
- package/dist/project-enablement.d.ts +0 -21
- package/dist/project-enablement.js +0 -71
- package/dist/project-enablement.js.map +0 -1
- package/dist/question-settlement-process.d.ts +0 -17
- package/dist/question-settlement-process.js +0 -35
- package/dist/question-settlement-process.js.map +0 -1
- package/dist/question-timing.d.ts +0 -46
- package/dist/question-timing.js +0 -48
- package/dist/question-timing.js.map +0 -1
- package/dist/readiness.d.ts +0 -153
- package/dist/readiness.js +0 -149
- package/dist/readiness.js.map +0 -1
- package/dist/release.d.ts +0 -31
- package/dist/release.js +0 -52
- package/dist/release.js.map +0 -1
- package/dist/send-attempts.d.ts +0 -26
- package/dist/send-attempts.js +0 -139
- package/dist/send-attempts.js.map +0 -1
- package/dist/send.d.ts +0 -115
- package/dist/send.js +0 -421
- package/dist/send.js.map +0 -1
- package/dist/session-activation.d.ts +0 -13
- package/dist/session-activation.js +0 -64
- package/dist/session-activation.js.map +0 -1
- package/dist/session-attendant-probe.d.ts +0 -85
- package/dist/session-attendant-probe.js +0 -173
- package/dist/session-attendant-probe.js.map +0 -1
- package/dist/session-attendant-state.d.ts +0 -70
- package/dist/session-attendant-state.js +0 -256
- package/dist/session-attendant-state.js.map +0 -1
- package/dist/session-attendant.d.ts +0 -143
- package/dist/session-attendant.js +0 -520
- package/dist/session-attendant.js.map +0 -1
- package/dist/session-delivery.d.ts +0 -249
- package/dist/session-delivery.js +0 -576
- package/dist/session-delivery.js.map +0 -1
- package/dist/session-handoff.d.ts +0 -98
- package/dist/session-handoff.js +0 -118
- package/dist/session-handoff.js.map +0 -1
- package/dist/session-input-wakes.d.ts +0 -78
- package/dist/session-input-wakes.js +0 -239
- package/dist/session-input-wakes.js.map +0 -1
- package/dist/session-inputs.d.ts +0 -57
- package/dist/session-inputs.js +0 -434
- package/dist/session-inputs.js.map +0 -1
- package/dist/session-labels.d.ts +0 -56
- package/dist/session-labels.js +0 -396
- package/dist/session-labels.js.map +0 -1
- package/dist/session-message-handoff.d.ts +0 -39
- package/dist/session-message-handoff.js +0 -107
- package/dist/session-message-handoff.js.map +0 -1
- package/dist/setup-destinations.d.ts +0 -23
- package/dist/setup-destinations.js +0 -44
- package/dist/setup-destinations.js.map +0 -1
- package/dist/skill-integrity.d.ts +0 -54
- package/dist/skill-integrity.js +0 -164
- package/dist/skill-integrity.js.map +0 -1
- package/dist/skill-source/manifest.json +0 -40
- package/dist/skill-source/notifai/SKILL.md +0 -350
- package/dist/skill-source/notifai/references/diagnostics.md +0 -36
- package/dist/skill-source/notifai/references/harness-setup.md +0 -384
- package/dist/skill-source/notifai/references/native-questions.md +0 -51
- package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
- package/dist/skill-source/notifai/references/send-details.md +0 -14
- package/dist/skill-source/notifai/references/updates.md +0 -116
- package/dist/skill-source/notifai/references/writing-examples.md +0 -56
- package/dist/sound-ref.d.ts +0 -23
- package/dist/sound-ref.js +0 -28
- package/dist/sound-ref.js.map +0 -1
- package/dist/ui/banner.d.ts +0 -22
- package/dist/ui/banner.js +0 -87
- package/dist/ui/banner.js.map +0 -1
- package/dist/ui/config-view.d.ts +0 -30
- package/dist/ui/config-view.js +0 -108
- package/dist/ui/config-view.js.map +0 -1
- package/dist/ui/help.d.ts +0 -44
- package/dist/ui/help.js +0 -107
- package/dist/ui/help.js.map +0 -1
- package/dist/ui/theme.d.ts +0 -90
- package/dist/ui/theme.js +0 -244
- package/dist/ui/theme.js.map +0 -1
- package/dist/update-handoff.d.ts +0 -29
- package/dist/update-handoff.js +0 -69
- package/dist/update-handoff.js.map +0 -1
- package/dist/url-policy.d.ts +0 -85
- package/dist/url-policy.js +0 -369
- package/dist/url-policy.js.map +0 -1
- package/dist/version.d.ts +0 -40
- package/dist/version.js +0 -132
- package/dist/version.js.map +0 -1
- package/dist/wake-support.d.ts +0 -40
- package/dist/wake-support.js +0 -95
- package/dist/wake-support.js.map +0 -1
package/dist/commands-auth.js
DELETED
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
import {} from '@raidiant/notifai-protocol';
|
|
2
|
-
import { sha256Hex } from '@raidiant/notifai-protocol/node';
|
|
3
|
-
import { randomBytes } from 'node:crypto';
|
|
4
|
-
import os from 'node:os';
|
|
5
|
-
import { renderPairingQr, terminalPairingQr, pairingQrPath, pairingQrTextPath } from './pairing-qr.js';
|
|
6
|
-
import { ApiCallError, NetworkError } from './client.js';
|
|
7
|
-
import {} from './config.js';
|
|
8
|
-
import { checkApproveUrl } from './url-policy.js';
|
|
9
|
-
import { EXIT, SETUP_COMMAND, authedClient, loadLoggedConfig, makeClient, reportError, } from './commands-core.js';
|
|
10
|
-
import { setupAccessUrl } from './setup-destinations.js';
|
|
11
|
-
import { clearPendingPairing, readPendingPairing, writePendingPairing, } from './pending-pairing.js';
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
// login / logout / auth status
|
|
14
|
-
// ---------------------------------------------------------------------------
|
|
15
|
-
/**
|
|
16
|
-
* Keep the one-time confirmation secret out of the HTTP request that opens
|
|
17
|
-
* the dashboard. URL fragments are browser-local and are not sent by GET,
|
|
18
|
-
* prefetchers, referrers, or link scanners.
|
|
19
|
-
*/
|
|
20
|
-
export function pairingApprovalUrl(approveUrl, confirmationSecret) {
|
|
21
|
-
const url = new URL(approveUrl);
|
|
22
|
-
url.hash = new URLSearchParams({ confirmation_secret: confirmationSecret }).toString();
|
|
23
|
-
return url.toString();
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* The state `init` reports when approval has been started and not finished.
|
|
27
|
-
*
|
|
28
|
-
* It is a `credential` gap whose remedy names the exact page and code, so an
|
|
29
|
-
* agent can relay both without inventing wording, and whose command is the
|
|
30
|
-
* same setup command — the next run resumes this very handshake rather than
|
|
31
|
-
* starting a second one.
|
|
32
|
-
*/
|
|
33
|
-
export function pendingApprovalBlocker(pairing, env) {
|
|
34
|
-
return {
|
|
35
|
-
id: 'credential',
|
|
36
|
-
title: 'This machine',
|
|
37
|
-
status: 'gap',
|
|
38
|
-
detail: `waiting for you to review and approve this computer (code ${pairing.code})`,
|
|
39
|
-
technical: {
|
|
40
|
-
pairing_outcome: 'pending',
|
|
41
|
-
pairing: {
|
|
42
|
-
approve_url: pairing.approve_url,
|
|
43
|
-
...(env ? { qr_path: pairingQrPath(env), qr_text_path: pairingQrTextPath(env) } : {}),
|
|
44
|
-
alternatives: ['qr', 'notification', 'browser'],
|
|
45
|
-
code: pairing.code,
|
|
46
|
-
expires_at: pairing.expires_at,
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
remedy: {
|
|
50
|
-
by: 'user-here',
|
|
51
|
-
summary: `scan the local QR to review this computer in Notifai and compare code ${pairing.code}; browser approval is also available at ${pairing.approve_url}`,
|
|
52
|
-
command: SETUP_COMMAND,
|
|
53
|
-
// The next run resumes this handshake through the same login path.
|
|
54
|
-
interactive: true,
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* The state `init` reports when an approval ended without a credential. Each
|
|
60
|
-
* outcome is named, because "not paired" alone sends an agent straight back
|
|
61
|
-
* into a new approval — and a User who just said no gets asked again.
|
|
62
|
-
*/
|
|
63
|
-
export function pairingOutcomeBlocker(outcome, detail) {
|
|
64
|
-
return {
|
|
65
|
-
id: 'credential',
|
|
66
|
-
title: 'This machine',
|
|
67
|
-
status: 'gap',
|
|
68
|
-
detail,
|
|
69
|
-
technical: { pairing_outcome: outcome },
|
|
70
|
-
remedy: {
|
|
71
|
-
by: 'user-here',
|
|
72
|
-
summary: outcome === 'denied'
|
|
73
|
-
? 'approval was denied; start setup again only if you want to connect this computer'
|
|
74
|
-
: 'start machine approval again',
|
|
75
|
-
command: SETUP_COMMAND,
|
|
76
|
-
interactive: true,
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Pair this machine with the User's Account.
|
|
82
|
-
*
|
|
83
|
-
* The handshake is one server-side pairing: this machine keeps the credential
|
|
84
|
-
* and the confirmation secret, the User approves the code in their browser,
|
|
85
|
-
* and polling collects the machine id. It is persisted between runs (see
|
|
86
|
-
* `pending-pairing.ts`), which is what lets two very different callers share
|
|
87
|
-
* it honestly:
|
|
88
|
-
*
|
|
89
|
-
* - A human at a terminal watches a spinner until the pairing resolves or
|
|
90
|
-
* expires, as before.
|
|
91
|
-
* - An agent, or any run with nobody at the terminal, never waits on a
|
|
92
|
-
* person. It prints the page and the code, polls once, and returns — its
|
|
93
|
-
* caller relays the errand, and the next run picks the same pairing up
|
|
94
|
-
* where it was left. A shell tool that times out no longer strands an
|
|
95
|
-
* approval the User already gave.
|
|
96
|
-
*
|
|
97
|
-
* A resumed handshake is always asked about before it is replaced: the
|
|
98
|
-
* service answers `approved` for an approved pairing even after its expiry,
|
|
99
|
-
* so an approval given late is collected rather than duplicated. Only the
|
|
100
|
-
* service's `expired`, `denied`, or unknown answer discards one.
|
|
101
|
-
*/
|
|
102
|
-
export async function loginCommand(deps, flags, onBlocked) {
|
|
103
|
-
if (flags.approval !== undefined && !['qr', 'notification', 'browser'].includes(flags.approval)) {
|
|
104
|
-
deps.io.err('Choose --approval qr, notification, or browser.');
|
|
105
|
-
return EXIT.usage;
|
|
106
|
-
}
|
|
107
|
-
if (flags.approvalEmail && flags.approval && flags.approval !== 'notification') {
|
|
108
|
-
deps.io.err('--approval-email is for --approval notification.');
|
|
109
|
-
return EXIT.usage;
|
|
110
|
-
}
|
|
111
|
-
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env, flags: { base_url: flags.baseUrl } });
|
|
112
|
-
const baseUrl = config.base_url.value;
|
|
113
|
-
const interactive = deps.io.interactive === true;
|
|
114
|
-
const now = deps.now ?? Date.now;
|
|
115
|
-
const sleep = deps.sleep ?? ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
|
|
116
|
-
const client = makeClient(deps, baseUrl, null);
|
|
117
|
-
const startPairing = async () => {
|
|
118
|
-
const machineName = flags.name ?? os.hostname();
|
|
119
|
-
const secret = randomBytes(32).toString('base64url');
|
|
120
|
-
const pollVerifier = randomBytes(24).toString('base64url');
|
|
121
|
-
const confirmationSecret = randomBytes(32).toString('base64url');
|
|
122
|
-
let begin;
|
|
123
|
-
try {
|
|
124
|
-
begin = await client.beginPairing({
|
|
125
|
-
machine_name: machineName,
|
|
126
|
-
credential_hash: sha256Hex(secret),
|
|
127
|
-
poll_verifier_hash: sha256Hex(pollVerifier),
|
|
128
|
-
confirmation_hash: sha256Hex(confirmationSecret),
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
const code = reportError(deps, err);
|
|
133
|
-
onBlocked?.(pairingOutcomeBlocker('not_started', `machine approval could not be started: ${err instanceof Error ? err.message : String(err)}`));
|
|
134
|
-
return code;
|
|
135
|
-
}
|
|
136
|
-
// The approval URL is the server's choice, and this machine is about to put
|
|
137
|
-
// it in front of the user's browser. A compromised or misconfigured service
|
|
138
|
-
// must not be able to aim that anywhere it likes, so the pairing stops here
|
|
139
|
-
// rather than showing a link the user would reasonably trust.
|
|
140
|
-
const approvable = checkApproveUrl(begin.approve_url, baseUrl, config.approve_origins.value);
|
|
141
|
-
if (!approvable.ok) {
|
|
142
|
-
deps.io.err(`Pairing stopped: ${approvable.reason}`);
|
|
143
|
-
deps.io.err('next: If you self-host with the dashboard on its own origin, allow it with ' +
|
|
144
|
-
'`notifai config set approve_origins <origin>` and run `notifai login` again.');
|
|
145
|
-
onBlocked?.(pairingOutcomeBlocker('not_started', `machine approval was refused: ${approvable.reason}`));
|
|
146
|
-
return EXIT.auth;
|
|
147
|
-
}
|
|
148
|
-
const started = {
|
|
149
|
-
pairing_id: begin.pairing_id,
|
|
150
|
-
code: begin.code,
|
|
151
|
-
approve_url: pairingApprovalUrl(begin.approve_url, confirmationSecret),
|
|
152
|
-
base_url: baseUrl,
|
|
153
|
-
machine_name: machineName,
|
|
154
|
-
secret,
|
|
155
|
-
poll_verifier: pollVerifier,
|
|
156
|
-
expires_at: begin.expires_at,
|
|
157
|
-
poll_interval_seconds: begin.poll_interval_seconds,
|
|
158
|
-
};
|
|
159
|
-
writePendingPairing(deps.env, started);
|
|
160
|
-
return started;
|
|
161
|
-
};
|
|
162
|
-
let route = flags.approval ?? (flags.approvalEmail ? 'notification' : 'qr');
|
|
163
|
-
const announce = async (pairing, resumed) => {
|
|
164
|
-
const file = await renderPairingQr(deps.env, pairing.approve_url);
|
|
165
|
-
deps.io.out(`Pairing code: ${pairing.code}`);
|
|
166
|
-
if (route === 'qr') {
|
|
167
|
-
if (interactive && deps.io.note)
|
|
168
|
-
await deps.io.note(await terminalPairingQr(pairing.approve_url), 'Scan to approve in Notifai');
|
|
169
|
-
else {
|
|
170
|
-
deps.io.out('Scan to approve in Notifai:');
|
|
171
|
-
deps.io.out(await terminalPairingQr(pairing.approve_url, false));
|
|
172
|
-
}
|
|
173
|
-
deps.io.out(`Local QR image: ${file}`);
|
|
174
|
-
}
|
|
175
|
-
if (interactive && flags.approval === undefined && flags.approvalEmail === undefined && deps.io.select) {
|
|
176
|
-
route = await deps.io.select('Connect this computer', [
|
|
177
|
-
{ value: 'qr', label: 'Scan the QR', hint: 'Approve in your signed-in Notifai app' },
|
|
178
|
-
{ value: 'notification', label: 'Send approval notification', hint: 'Enter your Account email' },
|
|
179
|
-
{ value: 'browser', label: 'Use browser approval' },
|
|
180
|
-
]) ?? 'qr';
|
|
181
|
-
}
|
|
182
|
-
deps.io.out(`Browser alternative: ${pairing.approve_url}`);
|
|
183
|
-
if (route === 'browser' && flags.open !== false)
|
|
184
|
-
deps.io.openUrl(pairing.approve_url);
|
|
185
|
-
if (route === 'notification') {
|
|
186
|
-
const email = (flags.approvalEmail ?? (interactive ? await deps.io.text?.('Account email') : null))?.trim();
|
|
187
|
-
if (!email) {
|
|
188
|
-
deps.io.err('For an approval notification, run `notifai init --approval notification --approval-email <email>`; QR and browser approval use the same pairing.');
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
if (email.toLowerCase() !== pairing.approval_email?.toLowerCase()) {
|
|
192
|
-
try {
|
|
193
|
-
await client.requestPairingNotification(pairing.pairing_id, pairing.poll_verifier, email);
|
|
194
|
-
}
|
|
195
|
-
catch (err) {
|
|
196
|
-
reportError(deps, err);
|
|
197
|
-
return false;
|
|
198
|
-
}
|
|
199
|
-
pairing.approval_email = email;
|
|
200
|
-
writePendingPairing(deps.env, pairing);
|
|
201
|
-
}
|
|
202
|
-
deps.io.out('Approval invitation requested. Review it if it arrives; QR and browser approval remain available.');
|
|
203
|
-
}
|
|
204
|
-
// The default QR does not open a browser or send an approval notification.
|
|
205
|
-
void resumed;
|
|
206
|
-
return true;
|
|
207
|
-
};
|
|
208
|
-
// A handshake started against another service, or under another machine
|
|
209
|
-
// name, is not this one; only an identical errand is resumed.
|
|
210
|
-
let pairing = readPendingPairing(deps.env, now());
|
|
211
|
-
if (pairing !== null && (pairing.base_url !== baseUrl || (flags.name !== undefined && flags.name !== pairing.machine_name))) {
|
|
212
|
-
clearPendingPairing(deps.env);
|
|
213
|
-
pairing = null;
|
|
214
|
-
}
|
|
215
|
-
let resumed = pairing !== null;
|
|
216
|
-
let active;
|
|
217
|
-
if (pairing === null) {
|
|
218
|
-
const started = await startPairing();
|
|
219
|
-
if (typeof started === 'number')
|
|
220
|
-
return started;
|
|
221
|
-
active = started;
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
active = pairing;
|
|
225
|
-
}
|
|
226
|
-
let expiresAt = Date.parse(active.expires_at);
|
|
227
|
-
let intervalMs = Math.max(active.poll_interval_seconds, 1) * 1000;
|
|
228
|
-
const approvalWaitMessage = () => {
|
|
229
|
-
const remainingSec = Math.max(0, Math.ceil((expiresAt - now()) / 1000));
|
|
230
|
-
const minutes = Math.floor(remainingSec / 60);
|
|
231
|
-
const seconds = remainingSec % 60;
|
|
232
|
-
const remaining = minutes > 0 ? `${minutes}m ${seconds.toString().padStart(2, '0')}s` : `${seconds}s`;
|
|
233
|
-
return `Waiting for approval… code ${active.code} · ${remaining} left`;
|
|
234
|
-
};
|
|
235
|
-
const progress = {};
|
|
236
|
-
let announced = false;
|
|
237
|
-
const announceActive = async () => {
|
|
238
|
-
if (announced)
|
|
239
|
-
return true;
|
|
240
|
-
const ready = await announce(active, resumed);
|
|
241
|
-
announced = true;
|
|
242
|
-
if (ready && interactive)
|
|
243
|
-
progress.spinner = await deps.io.spinner?.(approvalWaitMessage()) ?? null;
|
|
244
|
-
return ready;
|
|
245
|
-
};
|
|
246
|
-
// A resumed handshake the service no longer knows is replaced once, in the
|
|
247
|
-
// same run, so the User is handed a fresh code instead of a dead end.
|
|
248
|
-
const replaceStale = async () => {
|
|
249
|
-
progress.spinner?.stop('Previous approval expired');
|
|
250
|
-
progress.spinner = null;
|
|
251
|
-
clearPendingPairing(deps.env);
|
|
252
|
-
if (!resumed)
|
|
253
|
-
return false;
|
|
254
|
-
const started = await startPairing();
|
|
255
|
-
if (typeof started === 'number')
|
|
256
|
-
return false;
|
|
257
|
-
active = started;
|
|
258
|
-
resumed = false;
|
|
259
|
-
expiresAt = Date.parse(active.expires_at);
|
|
260
|
-
intervalMs = Math.max(active.poll_interval_seconds, 1) * 1000;
|
|
261
|
-
announced = false;
|
|
262
|
-
return true;
|
|
263
|
-
};
|
|
264
|
-
for (;;) {
|
|
265
|
-
let poll;
|
|
266
|
-
try {
|
|
267
|
-
poll = await client.pollPairing(active.pairing_id, active.poll_verifier);
|
|
268
|
-
}
|
|
269
|
-
catch (err) {
|
|
270
|
-
if (err instanceof NetworkError) {
|
|
271
|
-
if (!await announceActive()) {
|
|
272
|
-
onBlocked?.(pendingApprovalBlocker(active, deps.env));
|
|
273
|
-
return EXIT.auth;
|
|
274
|
-
}
|
|
275
|
-
if (!interactive) {
|
|
276
|
-
// The handshake is intact; only this check could not be made.
|
|
277
|
-
deps.io.err(err.message);
|
|
278
|
-
deps.io.out(`Waiting for approval. Run \`${SETUP_COMMAND}\` again once it is approved.`);
|
|
279
|
-
onBlocked?.(pendingApprovalBlocker(active, deps.env));
|
|
280
|
-
return EXIT.network;
|
|
281
|
-
}
|
|
282
|
-
progress.spinner?.message(`Connection lost — retrying… code ${active.code}`);
|
|
283
|
-
await sleep(intervalMs);
|
|
284
|
-
continue;
|
|
285
|
-
}
|
|
286
|
-
if (err instanceof ApiCallError && err.code === 'pairing_not_found' && resumed) {
|
|
287
|
-
if (await replaceStale())
|
|
288
|
-
continue;
|
|
289
|
-
return EXIT.auth;
|
|
290
|
-
}
|
|
291
|
-
progress.spinner?.error('Pairing failed');
|
|
292
|
-
return reportError(deps, err);
|
|
293
|
-
}
|
|
294
|
-
if (poll.status === 'approved' && poll.machine_id) {
|
|
295
|
-
deps.store.save({ machineId: poll.machine_id, secret: active.secret, baseUrl, machineName: active.machine_name });
|
|
296
|
-
clearPendingPairing(deps.env);
|
|
297
|
-
if (interactive) {
|
|
298
|
-
progress.spinner?.stop(`Machine "${active.machine_name}" approved`);
|
|
299
|
-
await deps.io.outro?.(`Credential stored in ${deps.store.describe()}`);
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
deps.io.out(`Machine "${active.machine_name}" approved. Credential stored in ${deps.store.describe()}.`);
|
|
303
|
-
}
|
|
304
|
-
return EXIT.ok;
|
|
305
|
-
}
|
|
306
|
-
if (poll.status === 'denied') {
|
|
307
|
-
clearPendingPairing(deps.env);
|
|
308
|
-
progress.spinner?.error('Pairing denied');
|
|
309
|
-
deps.io.err('Pairing was denied.');
|
|
310
|
-
onBlocked?.(pairingOutcomeBlocker('denied', 'you denied this computer'));
|
|
311
|
-
return EXIT.auth;
|
|
312
|
-
}
|
|
313
|
-
// Proof-gated: the server never returns this from lookup. Stop now rather
|
|
314
|
-
// than waiting out a TTL no approval can arrive within.
|
|
315
|
-
if (poll.status === 'no_active_plan') {
|
|
316
|
-
clearPendingPairing(deps.env);
|
|
317
|
-
// The server owns which access errand is current — requesting it today,
|
|
318
|
-
// choosing a plan after cutover — so its line wins whenever it sends one.
|
|
319
|
-
const accessUrl = setupAccessUrl(baseUrl);
|
|
320
|
-
const next = poll.next_action ?? `Open ${accessUrl} to set up access, then retry.`;
|
|
321
|
-
progress.spinner?.error('Pairing stopped');
|
|
322
|
-
// One wall, said once. When a caller takes the blocker it closes the
|
|
323
|
-
// visit on this exact errand, so repeating the destination here would
|
|
324
|
-
// leave the User three phrasings of one step to choose between.
|
|
325
|
-
if (onBlocked === undefined) {
|
|
326
|
-
deps.io.err('This account has no active plan or temporary Alpha access.');
|
|
327
|
-
deps.io.err(`next: ${next}`);
|
|
328
|
-
deps.io.err(`After access is granted, run \`${SETUP_COMMAND}\` again.`);
|
|
329
|
-
}
|
|
330
|
-
onBlocked?.({
|
|
331
|
-
id: 'auth',
|
|
332
|
-
title: 'Access',
|
|
333
|
-
status: 'gap',
|
|
334
|
-
detail: 'this account does not have access to Notifai yet',
|
|
335
|
-
technical: { access_url: accessUrl, next_action: next },
|
|
336
|
-
remedy: { by: 'user-elsewhere', summary: next },
|
|
337
|
-
});
|
|
338
|
-
return EXIT.auth;
|
|
339
|
-
}
|
|
340
|
-
if (poll.status === 'expired') {
|
|
341
|
-
if (await replaceStale())
|
|
342
|
-
continue;
|
|
343
|
-
break;
|
|
344
|
-
}
|
|
345
|
-
if (!await announceActive()) {
|
|
346
|
-
onBlocked?.(pendingApprovalBlocker(active, deps.env));
|
|
347
|
-
return EXIT.auth;
|
|
348
|
-
}
|
|
349
|
-
// Still pending. Nobody at this terminal means nobody to wait for: hand
|
|
350
|
-
// the errand back and let the next run resume the same handshake.
|
|
351
|
-
if (!interactive) {
|
|
352
|
-
deps.io.out(`Waiting for approval. Run \`${SETUP_COMMAND}\` again once it is approved.`);
|
|
353
|
-
onBlocked?.(pendingApprovalBlocker(active, deps.env));
|
|
354
|
-
return EXIT.auth;
|
|
355
|
-
}
|
|
356
|
-
if (now() >= expiresAt)
|
|
357
|
-
break;
|
|
358
|
-
progress.spinner?.message(approvalWaitMessage());
|
|
359
|
-
await sleep(Math.min(intervalMs, Math.max(0, expiresAt - now())));
|
|
360
|
-
}
|
|
361
|
-
clearPendingPairing(deps.env);
|
|
362
|
-
progress.spinner?.error('Pairing expired');
|
|
363
|
-
deps.io.err(`Pairing expired before it was approved. Run \`${SETUP_COMMAND}\` again.`);
|
|
364
|
-
onBlocked?.(pairingOutcomeBlocker('expired', 'the approval expired before it was given'));
|
|
365
|
-
return EXIT.auth;
|
|
366
|
-
}
|
|
367
|
-
export function logoutCommand(deps) {
|
|
368
|
-
deps.store.clear();
|
|
369
|
-
clearPendingPairing(deps.env);
|
|
370
|
-
deps.io.out('Machine credential removed. Revoke it in the dashboard too if the machine is untrusted.');
|
|
371
|
-
return EXIT.ok;
|
|
372
|
-
}
|
|
373
|
-
export function authStatusCommand(deps, flags) {
|
|
374
|
-
const credential = deps.store.load();
|
|
375
|
-
if (flags.json) {
|
|
376
|
-
deps.io.out(JSON.stringify(credential
|
|
377
|
-
? {
|
|
378
|
-
signed_in: true,
|
|
379
|
-
machine_id: credential.machineId,
|
|
380
|
-
machine_name: credential.machineName,
|
|
381
|
-
base_url: credential.baseUrl,
|
|
382
|
-
store: deps.store.describe(),
|
|
383
|
-
}
|
|
384
|
-
: { signed_in: false }, null, 2));
|
|
385
|
-
return credential ? EXIT.ok : EXIT.auth;
|
|
386
|
-
}
|
|
387
|
-
if (!credential) {
|
|
388
|
-
deps.io.err(`Not signed in. Run \`${SETUP_COMMAND}\`; it will coordinate machine login and device setup.`);
|
|
389
|
-
return EXIT.auth;
|
|
390
|
-
}
|
|
391
|
-
deps.io.out(`Signed in as machine "${credential.machineName}" (${credential.machineId})`);
|
|
392
|
-
deps.io.out(`Server: ${credential.baseUrl}`);
|
|
393
|
-
deps.io.out(`Credential store: ${deps.store.describe()}`);
|
|
394
|
-
return EXIT.ok;
|
|
395
|
-
}
|
|
396
|
-
/** Show the server's account access decision without attempting a product mutation. */
|
|
397
|
-
export async function accessStatusCommand(deps, flags) {
|
|
398
|
-
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
399
|
-
const authed = authedClient(deps, config);
|
|
400
|
-
if (!authed)
|
|
401
|
-
return EXIT.auth;
|
|
402
|
-
try {
|
|
403
|
-
const access = await authed.client.accessStatus();
|
|
404
|
-
if (flags.json) {
|
|
405
|
-
deps.io.out(JSON.stringify(access, null, 2));
|
|
406
|
-
return access.status === 'active' ? EXIT.ok : EXIT.failed;
|
|
407
|
-
}
|
|
408
|
-
if (access.status === 'no_active_plan') {
|
|
409
|
-
deps.io.out('This account does not have access to Notifai yet.');
|
|
410
|
-
deps.io.out(`next: Open ${setupAccessUrl(authed.baseUrl)} to set up access, then retry.`);
|
|
411
|
-
return EXIT.failed;
|
|
412
|
-
}
|
|
413
|
-
const expiry = access.expires_at ? ` until ${access.expires_at}` : '';
|
|
414
|
-
deps.io.out(`Access active (${access.reason})${expiry}`);
|
|
415
|
-
return EXIT.ok;
|
|
416
|
-
}
|
|
417
|
-
catch (err) {
|
|
418
|
-
return reportError(deps, err);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
//# sourceMappingURL=commands-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-auth.js","sourceRoot":"","sources":["../src/commands-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,4BAA4B,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACtG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAsB,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EACL,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,WAAW,GAGZ,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,sBAAsB,CAAA;AAG7B,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,kBAA0B;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;IAC/B,GAAG,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;IACtF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;AACvB,CAAC;AAmBD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAuB,EAAE,GAAuB;IACrF,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,6DAA6D,OAAO,CAAC,IAAI,GAAG;QACpF,SAAS,EAAE;YACT,eAAe,EAAE,SAAkC;YACnD,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC;gBAC/C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B;SACF;QACD,MAAM,EAAE;YACN,EAAE,EAAE,WAAW;YACf,OAAO,EAAE,yEAAyE,OAAO,CAAC,IAAI,2CAA2C,OAAO,CAAC,WAAW,EAAE;YAC9J,OAAO,EAAE,aAAa;YACtB,mEAAmE;YACnE,WAAW,EAAE,IAAI;SAClB;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA2C,EAC3C,MAAc;IAEd,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,KAAK;QACb,MAAM;QACN,SAAS,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE;QACvC,MAAM,EAAE;YACN,EAAE,EAAE,WAAW;YACf,OAAO,EACL,OAAO,KAAK,QAAQ;gBAClB,CAAC,CAAC,kFAAkF;gBACpF,CAAC,CAAC,8BAA8B;YACpC,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,IAAI;SAClB;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAiB,EACjB,KAAqG,EACrG,SAA4B;IAE5B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QAC/E,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAmB,EAAE,CAAC,CAAA;IAC5H,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAA;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI,CAAA;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,YAAoB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IACzH,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAE9C,MAAM,YAAY,GAAG,KAAK,IAAsC,EAAE;QAChE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAA;QAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC1D,MAAM,kBAAkB,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAChE,IAAI,KAAK,CAAA;QACT,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;gBAChC,YAAY,EAAE,WAAW;gBACzB,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC;gBAClC,kBAAkB,EAAE,SAAS,CAAC,YAAY,CAAC;gBAC3C,iBAAiB,EAAE,SAAS,CAAC,kBAAkB,CAAC;aACjD,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YACnC,SAAS,EAAE,CAAC,qBAAqB,CAAC,aAAa,EAAE,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAC/I,OAAO,IAAI,CAAA;QACb,CAAC;QAED,4EAA4E;QAC5E,4EAA4E;QAC5E,4EAA4E;QAC5E,8DAA8D;QAC9D,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QAC5F,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAoB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;YACpD,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,6EAA6E;gBAC3E,8EAA8E,CACjF,CAAA;YACD,SAAS,EAAE,CAAC,qBAAqB,CAAC,aAAa,EAAE,iCAAiC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACvG,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QAED,MAAM,OAAO,GAAmB;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC;YACtE,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,WAAW;YACzB,MAAM;YACN,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;SACnD,CAAA;QACD,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACtC,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC3E,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAuB,EAAE,OAAgB,EAAoB,EAAE;QACrF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QACjE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI;gBAAE,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,4BAA4B,CAAC,CAAA;iBAC1H,CAAC;gBACJ,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;gBAC1C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;YAClE,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;QACD,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YACvG,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,uBAAuB,EAAE;gBACpD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,uCAAuC,EAAE;gBACpF,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,0BAA0B,EAAE;gBAChG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB,EAAE;aACpD,CAAC,IAAI,IAAI,CAAA;QACZ,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;QAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACrF,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;YAC3G,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kJAAkJ,CAAC,CAAA;gBAC/J,OAAO,KAAK,CAAA;YACd,CAAC;YACD,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC;gBAClE,IAAI,CAAC;oBAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;gBAAC,CAAC;gBACjG,OAAO,GAAG,EAAE,CAAC;oBAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAAC,OAAO,KAAK,CAAA;gBAAC,CAAC;gBACpD,OAAO,CAAC,cAAc,GAAG,KAAK,CAAA;gBAC9B,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACxC,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mGAAmG,CAAC,CAAA;QAClH,CAAC;QACD,2EAA2E;QAC3E,KAAK,OAAO,CAAA;QACZ,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,wEAAwE;IACxE,8DAA8D;IAC9D,IAAI,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IACjD,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC5H,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,OAAO,GAAG,IAAI,CAAA;IAChB,CAAC;IACD,IAAI,OAAO,GAAG,OAAO,KAAK,IAAI,CAAA;IAC9B,IAAI,MAAsB,CAAA;IAC1B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAA;QACpC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAA;QAC/C,MAAM,GAAG,OAAO,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,OAAO,CAAA;IAClB,CAAC;IAED,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC7C,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;IACjE,MAAM,mBAAmB,GAAG,GAAW,EAAE;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;QAC7C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;QACjC,MAAM,SAAS,GACb,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAA;QACrF,OAAO,8BAA8B,MAAM,CAAC,IAAI,MAAM,SAAS,OAAO,CAAA;IACxE,CAAC,CAAA;IACD,MAAM,QAAQ,GAAwC,EAAE,CAAA;IACxD,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,MAAM,cAAc,GAAG,KAAK,IAAsB,EAAE;QAClD,IAAI,SAAS;YAAE,OAAO,IAAI,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC7C,SAAS,GAAG,IAAI,CAAA;QAChB,IAAI,KAAK,IAAI,WAAW;YAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,IAAI,CAAA;QACnG,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,YAAY,GAAG,KAAK,IAAsB,EAAE;QAChD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACnD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;QACvB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC1B,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAA;QACpC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAC7C,MAAM,GAAG,OAAO,CAAA;QAChB,OAAO,GAAG,KAAK,CAAA;QACf,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACzC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;QAC7D,SAAS,GAAG,KAAK,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,SAAS,CAAC;QACR,IAAI,IAAI,CAAA;QACR,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,cAAc,EAAE,EAAE,CAAC;oBAAC,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAC,OAAO,IAAI,CAAC,IAAI,CAAA;gBAAC,CAAC;gBACxG,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,8DAA8D;oBAC9D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBACxB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,+BAA+B,aAAa,+BAA+B,CAAC,CAAA;oBACxF,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;oBACrD,OAAO,IAAI,CAAC,OAAO,CAAA;gBACrB,CAAC;gBACD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,oCAAoC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC5E,MAAM,KAAK,CAAC,UAAU,CAAC,CAAA;gBACvB,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,IAAI,OAAO,EAAE,CAAC;gBAC/E,IAAI,MAAM,YAAY,EAAE;oBAAE,SAAQ;gBAClC,OAAO,IAAI,CAAC,IAAI,CAAA;YAClB,CAAC;YACD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACzC,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;YACjH,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,IAAI,WAAW,EAAE,CAAC;gBAChB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,YAAY,CAAC,CAAA;gBACnE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,wBAAwB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,YAAY,oCAAoC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC1G,CAAC;YACD,OAAO,IAAI,CAAC,EAAE,CAAA;QAChB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACzC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;YAClC,SAAS,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAA;YACxE,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,0EAA0E;QAC1E,wDAAwD;QACxD,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACrC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,wEAAwE;YACxE,0EAA0E;YAC1E,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,QAAQ,SAAS,gCAAgC,CAAA;YAClF,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC1C,qEAAqE;YACrE,sEAAsE;YACtE,gEAAgE;YAChE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;gBACzE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;gBAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kCAAkC,aAAa,WAAW,CAAC,CAAA;YACzE,CAAC;YACD,SAAS,EAAE,CAAC;gBACV,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,kDAAkD;gBAC1D,SAAS,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;gBACvD,MAAM,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;aAChD,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,MAAM,YAAY,EAAE;gBAAE,SAAQ;YAClC,MAAK;QACP,CAAC;QACD,IAAI,CAAC,MAAM,cAAc,EAAE,EAAE,CAAC;YAC5B,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,wEAAwE;QACxE,kEAAkE;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,+BAA+B,aAAa,+BAA+B,CAAC,CAAA;YACxF,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,SAAS;YAAE,MAAK;QAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;QAChD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;IACD,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iDAAiD,aAAa,WAAW,CAAC,CAAA;IACtF,SAAS,EAAE,CAAC,qBAAqB,CAAC,SAAS,EAAE,0CAA0C,CAAC,CAAC,CAAA;IACzF,OAAO,IAAI,CAAC,IAAI,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC7C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAClB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAA;IACtG,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,KAAyB;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IACpC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ,UAAU;YACR,CAAC,CAAC;gBACE,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,UAAU,CAAC,SAAS;gBAChC,YAAY,EAAE,UAAU,CAAC,WAAW;gBACpC,QAAQ,EAAE,UAAU,CAAC,OAAO;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;aAC7B;YACH,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EACxB,IAAI,EACJ,CAAC,CACF,CACF,CAAA;QACD,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IACzC,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,aAAa,wDAAwD,CAAC,CAAA;QAC1G,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,UAAU,CAAC,WAAW,MAAM,UAAU,CAAC,SAAS,GAAG,CAAC,CAAA;IACzF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACzD,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAiB,EACjB,KAAyB;IAEzB,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAA0B,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;QACxE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5C,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QAC3D,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAA;YAChE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAA;YACzF,OAAO,IAAI,CAAC,MAAM,CAAA;QACpB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACrE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAA;QACxD,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC"}
|
package/dist/commands-close.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { type CommandDeps } from './commands-core.js';
|
|
2
|
-
/** Retire a question so a late answer is rejected rather than silently lost. */
|
|
3
|
-
export declare function closeCommand(deps: CommandDeps, requestId: string | undefined, flags?: {
|
|
4
|
-
json?: boolean;
|
|
5
|
-
pending?: boolean;
|
|
6
|
-
}): Promise<number>;
|