@raidiant/notifai 11.7.1 → 12.0.0-beta.13
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 +57 -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
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/** Durable question retirement, including cross-session orphan recovery. */
|
|
2
|
-
import type { CloseDisposition, CloseRepliesResponse, LifecycleEndState, ListRepliesResponse } from '@raidiant/notifai-protocol';
|
|
3
|
-
import type { HookContext, HookEnvelope, PendingQuestion, RetiringQuestion } from './hook-types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Everything retirement needs. Narrower than a HookContext on purpose:
|
|
6
|
-
* explicit close is a plain command with no hook payload, no idle probe and
|
|
7
|
-
* nothing to sleep for. Independent asks never supersede each other.
|
|
8
|
-
*/
|
|
9
|
-
export type RetireDeps = Pick<HookContext, 'client' | 'config'> & Pick<Partial<HookContext>, 'log'>;
|
|
10
|
-
/**
|
|
11
|
-
* Close is a server-side serialization fence: a successful response contains
|
|
12
|
-
* every reply that committed before the window closed. `null` is deliberately
|
|
13
|
-
* different from an empty reply set — it means ownership could not be proven
|
|
14
|
-
* final and the local record must stay recoverable.
|
|
15
|
-
*
|
|
16
|
-
* `disposition` tells the service why this close happens, and the first close
|
|
17
|
-
* that ends an open window keeps its reason: `deliver` only from a waiter that
|
|
18
|
-
* will claim the fenced answer before handing it off, `retire` from every
|
|
19
|
-
* retirement. Answer collection that hands off unclaimed sends none, so its
|
|
20
|
-
* answer is honestly not editable after the fence.
|
|
21
|
-
*/
|
|
22
|
-
export declare function finalizeReplies(ctx: RetireDeps, requestId: string, disposition?: CloseDisposition): Promise<ListRepliesResponse | CloseRepliesResponse | null>;
|
|
23
|
-
/** Whether this close selected the answer it returned for a claimed hand-off. */
|
|
24
|
-
export declare function selectedForClaimedDelivery(response: ListRepliesResponse | CloseRepliesResponse | null | undefined): boolean;
|
|
25
|
-
/** Best effort only for already-journaled retirement debt. */
|
|
26
|
-
export declare function closeQuietly(ctx: RetireDeps, requestId: string): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* Park a delivered question for retirement. Called at the moment we learn it is
|
|
29
|
-
* dead, which is frequently not a moment we can reach the network.
|
|
30
|
-
*
|
|
31
|
-
* Nothing is parked for a question that never reached a device: with no
|
|
32
|
-
* request_id there is nothing on any device to retire.
|
|
33
|
-
*/
|
|
34
|
-
export declare function parkForRetirement(sessionId: string, env: NodeJS.ProcessEnv, pending: PendingQuestion, state: LifecycleEndState): void;
|
|
35
|
-
/**
|
|
36
|
-
* Stop queued retries under the same lock as admission. Preparations that
|
|
37
|
-
* never started are withdrawn silently; admitted attempts retain their exact
|
|
38
|
-
* retirement identity even if their receipt is still in flight or was lost.
|
|
39
|
-
*/
|
|
40
|
-
export declare function retireQueuedQuestions(sessionId: string, env: NodeJS.ProcessEnv, questionId?: string): {
|
|
41
|
-
withdrawn: PendingQuestion[];
|
|
42
|
-
retiring: RetiringQuestion[];
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Convert live question state into a complete retirement instruction.
|
|
46
|
-
*
|
|
47
|
-
* A request/collapse pair without the original Delivery targets is not safe to
|
|
48
|
-
* send: re-resolving today's routing can miss a device that still shows the
|
|
49
|
-
* question or retire a device that never received it. Fail explicitly and keep
|
|
50
|
-
* the pending record instead of silently broadening or narrowing the fanout.
|
|
51
|
-
*/
|
|
52
|
-
export declare function retiringQuestion(pending: PendingQuestion, state: LifecycleEndState, cwd?: string): RetiringQuestion | null;
|
|
53
|
-
/**
|
|
54
|
-
* Which outstanding questions this prompt plausibly answers.
|
|
55
|
-
*
|
|
56
|
-
* A unique closed-choice match is enough. A short confirmation such as "done"
|
|
57
|
-
* matches only when exactly one question is outstanding. Long unrelated
|
|
58
|
-
* prompts leave every question open for the reply window.
|
|
59
|
-
*/
|
|
60
|
-
export declare function pendingAnsweredByPrompt(prompt: string | undefined, pending: readonly PendingQuestion[]): PendingQuestion[];
|
|
61
|
-
/**
|
|
62
|
-
* Send every parked retirement, and forget the ones that landed. A failure
|
|
63
|
-
* leaves the entry in place for the next hook rather than losing it, which is
|
|
64
|
-
* the whole reason the queue exists.
|
|
65
|
-
*/
|
|
66
|
-
export declare function drainRetirements(ctx: RetireDeps, sessionId: string, env: NodeJS.ProcessEnv): Promise<string[]>;
|
|
67
|
-
/** Move retirements into the global queue; deduped so a retry costs nothing. */
|
|
68
|
-
export declare function orphanRetirements(env: NodeJS.ProcessEnv, entries: RetiringQuestion[], now: number): void;
|
|
69
|
-
/**
|
|
70
|
-
* Retire everything a dead session left behind. Failures stay queued for the
|
|
71
|
-
* next holder of a client; entries past the TTL are dropped as already dead.
|
|
72
|
-
*/
|
|
73
|
-
export declare function drainOrphanRetirements(ctx: RetireDeps, env: NodeJS.ProcessEnv, now: number): Promise<string[]>;
|
|
74
|
-
export declare function retirePendings(ctx: HookContext, envelope: HookEnvelope, sessionId: string, entries: PendingQuestion[], state: LifecycleEndState): Promise<void>;
|
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
import { REPLY_MAX_WINDOW_SECONDS } from '@raidiant/notifai-protocol';
|
|
2
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { atomicWriteFileSync } from './atomic-file.js';
|
|
5
|
-
import { terminateCodexQuestions } from './codex-question-bindings.js';
|
|
6
|
-
import { stateDir } from './config.js';
|
|
7
|
-
import { withFileLock } from './file-lock.js';
|
|
8
|
-
import { isSamePending, questionSubmissionAttempted, rememberQuestionState, sourceContextAtHookEvent, } from './hook-question-state.js';
|
|
9
|
-
import { pendingList, readSessionState, updateSessionState } from './hook-session-state.js';
|
|
10
|
-
/**
|
|
11
|
-
* A retirement is only worth syncing while the question it retires could still
|
|
12
|
-
* be answered, so this has to outlive the longest reply window a user can
|
|
13
|
-
* choose — it is derived from that bound rather than from a guess about how
|
|
14
|
-
* long questions stay open, which is exactly the assumption that broke when
|
|
15
|
-
* the window stopped being one hour. Past it the companion shows the question
|
|
16
|
-
* as dead on next open anyway. Also the backstop that keeps an unreachable
|
|
17
|
-
* server from growing the queue for ever.
|
|
18
|
-
*/
|
|
19
|
-
const ORPHAN_TTL_MS = (REPLY_MAX_WINDOW_SECONDS + 3600) * 1000;
|
|
20
|
-
/** More orphans than this means something is looping; keep the newest. */
|
|
21
|
-
const ORPHAN_QUEUE_CAP = 50;
|
|
22
|
-
/**
|
|
23
|
-
* Close is a server-side serialization fence: a successful response contains
|
|
24
|
-
* every reply that committed before the window closed. `null` is deliberately
|
|
25
|
-
* different from an empty reply set — it means ownership could not be proven
|
|
26
|
-
* final and the local record must stay recoverable.
|
|
27
|
-
*
|
|
28
|
-
* `disposition` tells the service why this close happens, and the first close
|
|
29
|
-
* that ends an open window keeps its reason: `deliver` only from a waiter that
|
|
30
|
-
* will claim the fenced answer before handing it off, `retire` from every
|
|
31
|
-
* retirement. Answer collection that hands off unclaimed sends none, so its
|
|
32
|
-
* answer is honestly not editable after the fence.
|
|
33
|
-
*/
|
|
34
|
-
export async function finalizeReplies(ctx, requestId, disposition) {
|
|
35
|
-
try {
|
|
36
|
-
return disposition === undefined
|
|
37
|
-
? await ctx.client.closeReplies(requestId)
|
|
38
|
-
: await ctx.client.closeReplies(requestId, disposition);
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/** Whether this close selected the answer it returned for a claimed hand-off. */
|
|
45
|
-
export function selectedForClaimedDelivery(response) {
|
|
46
|
-
return (response !== null &&
|
|
47
|
-
response !== undefined &&
|
|
48
|
-
'close_disposition' in response &&
|
|
49
|
-
response.close_disposition === 'deliver' &&
|
|
50
|
-
response.delivered_reply_seq !== null &&
|
|
51
|
-
response.delivered_reply_seq === response.replies.at(-1)?.seq);
|
|
52
|
-
}
|
|
53
|
-
/** Best effort only for already-journaled retirement debt. */
|
|
54
|
-
export async function closeQuietly(ctx, requestId) {
|
|
55
|
-
await finalizeReplies(ctx, requestId, 'retire');
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Close the reply window so the server can mint the retirement push. Client
|
|
59
|
-
* submissions cannot carry `question_retired`; that event is reserved for
|
|
60
|
-
* server-origin state syncs.
|
|
61
|
-
*/
|
|
62
|
-
async function proveRetirement(ctx, requestId) {
|
|
63
|
-
const response = await finalizeReplies(ctx, requestId, 'retire');
|
|
64
|
-
const proven = response !== null;
|
|
65
|
-
ctx.log?.info('hook.retirement', {
|
|
66
|
-
request_id: requestId,
|
|
67
|
-
attempted: true,
|
|
68
|
-
proven,
|
|
69
|
-
});
|
|
70
|
-
return proven;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Park a delivered question for retirement. Called at the moment we learn it is
|
|
74
|
-
* dead, which is frequently not a moment we can reach the network.
|
|
75
|
-
*
|
|
76
|
-
* Nothing is parked for a question that never reached a device: with no
|
|
77
|
-
* request_id there is nothing on any device to retire.
|
|
78
|
-
*/
|
|
79
|
-
export function parkForRetirement(sessionId, env, pending, state) {
|
|
80
|
-
const retirement = retiringQuestion(pending, state);
|
|
81
|
-
if (retirement === null)
|
|
82
|
-
return;
|
|
83
|
-
updateSessionState(sessionId, env, (current) => {
|
|
84
|
-
const already = current.retiring ?? [];
|
|
85
|
-
const existing = already.findIndex((entry) => entry.request_id === retirement.request_id);
|
|
86
|
-
if (existing < 0) {
|
|
87
|
-
return rememberQuestionState({ ...current, retiring: [...already, retirement] }, pending, state === 'answered' ? 'answered' : 'retired');
|
|
88
|
-
}
|
|
89
|
-
const retiring = [...already];
|
|
90
|
-
// An observed answer is final truth and upgrades an earlier supersession
|
|
91
|
-
// parked while the submission callback was racing a newer question.
|
|
92
|
-
if (retirement.state === 'answered' && retiring[existing].state !== 'answered') {
|
|
93
|
-
retiring[existing] = retirement;
|
|
94
|
-
}
|
|
95
|
-
return rememberQuestionState({ ...current, retiring }, pending, state === 'answered' ? 'answered' : 'retired');
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Stop queued retries under the same lock as admission. Preparations that
|
|
100
|
-
* never started are withdrawn silently; admitted attempts retain their exact
|
|
101
|
-
* retirement identity even if their receipt is still in flight or was lost.
|
|
102
|
-
*/
|
|
103
|
-
export function retireQueuedQuestions(sessionId, env, questionId) {
|
|
104
|
-
const withdrawn = [];
|
|
105
|
-
const retiring = [];
|
|
106
|
-
updateSessionState(sessionId, env, (current) => {
|
|
107
|
-
const selected = pendingList(current).filter((entry) => entry.request_id === undefined &&
|
|
108
|
-
(questionId === undefined || entry.question_id === questionId));
|
|
109
|
-
const remaining = pendingList(current).filter((entry) => !selected.includes(entry));
|
|
110
|
-
let next = terminateCodexQuestions({ ...current }, new Set(selected.flatMap(entry => entry.question_id === undefined ? [] : [entry.question_id])));
|
|
111
|
-
if (remaining.length > 0)
|
|
112
|
-
next.pending = remaining;
|
|
113
|
-
else
|
|
114
|
-
delete next.pending;
|
|
115
|
-
for (const entry of selected) {
|
|
116
|
-
if (questionSubmissionAttempted(entry)) {
|
|
117
|
-
const retirement = retiringQuestion(entry, 'answered_elsewhere');
|
|
118
|
-
retiring.push(retirement);
|
|
119
|
-
const queue = [...(next.retiring ?? [])];
|
|
120
|
-
if (!queue.some((item) => item.request_id === retirement.request_id))
|
|
121
|
-
queue.push(retirement);
|
|
122
|
-
next = rememberQuestionState({ ...next, retiring: queue }, entry, 'retired');
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
withdrawn.push(entry);
|
|
126
|
-
next = rememberQuestionState(next, entry, 'withdrawn');
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return next;
|
|
130
|
-
});
|
|
131
|
-
return { withdrawn, retiring };
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Convert live question state into a complete retirement instruction.
|
|
135
|
-
*
|
|
136
|
-
* A request/collapse pair without the original Delivery targets is not safe to
|
|
137
|
-
* send: re-resolving today's routing can miss a device that still shows the
|
|
138
|
-
* question or retire a device that never received it. Fail explicitly and keep
|
|
139
|
-
* the pending record instead of silently broadening or narrowing the fanout.
|
|
140
|
-
*/
|
|
141
|
-
export function retiringQuestion(pending, state, cwd) {
|
|
142
|
-
// A submit journal is written before the first network byte. SessionEnd can
|
|
143
|
-
// therefore race a request that the server accepts after local cleanup. Its
|
|
144
|
-
// reserved request id and exact fanout are already sufficient retirement
|
|
145
|
-
// identity, even though the ordinary live fields have not been promoted yet.
|
|
146
|
-
const requestId = pending.request_id ?? pending.submission?.request_id;
|
|
147
|
-
const collapseKey = pending.collapse_key ?? pending.submission?.collapse_key;
|
|
148
|
-
const deviceIds = pending.device_ids ?? pending.submission?.device_ids;
|
|
149
|
-
const hasRequest = requestId !== undefined;
|
|
150
|
-
const hasCollapse = collapseKey !== undefined;
|
|
151
|
-
const hasDevices = deviceIds !== undefined && deviceIds.length > 0;
|
|
152
|
-
if (!hasRequest && !hasCollapse && !hasDevices)
|
|
153
|
-
return null;
|
|
154
|
-
if (!hasRequest || !hasCollapse || !hasDevices) {
|
|
155
|
-
throw new Error('live question state is incomplete; refusing to retire it without request, collapse, and device identifiers');
|
|
156
|
-
}
|
|
157
|
-
const source = sourceContextAtHookEvent(pending.source, cwd);
|
|
158
|
-
return {
|
|
159
|
-
...(pending.question_id !== undefined ? { question_id: pending.question_id } : {}),
|
|
160
|
-
request_id: requestId,
|
|
161
|
-
collapse_key: collapseKey,
|
|
162
|
-
device_ids: [...deviceIds],
|
|
163
|
-
question: pending.question,
|
|
164
|
-
...(pending.project !== undefined ? { project: pending.project } : {}),
|
|
165
|
-
...(source !== undefined ? { source } : {}),
|
|
166
|
-
state,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
const SHORT_CONFIRMATIONS = new Set(['done', 'yes', 'y', 'no', 'n', 'ok', 'okay']);
|
|
170
|
-
function normalizePrompt(value) {
|
|
171
|
-
return value.trim().replace(/\s+/g, ' ').toLowerCase();
|
|
172
|
-
}
|
|
173
|
-
function pendingChoiceLabels(pending) {
|
|
174
|
-
const fromQuestions = (pending.questions ?? []).flatMap((question) => (question.choices ?? []).flatMap((choice) => [choice.label, choice.id]));
|
|
175
|
-
return fromQuestions.map(normalizePrompt).filter((label) => label.length > 0);
|
|
176
|
-
}
|
|
177
|
-
function pendingHasMatchingChoice(pending, normalizedPrompt) {
|
|
178
|
-
return pendingChoiceLabels(pending).includes(normalizedPrompt);
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Which outstanding questions this prompt plausibly answers.
|
|
182
|
-
*
|
|
183
|
-
* A unique closed-choice match is enough. A short confirmation such as "done"
|
|
184
|
-
* matches only when exactly one question is outstanding. Long unrelated
|
|
185
|
-
* prompts leave every question open for the reply window.
|
|
186
|
-
*/
|
|
187
|
-
export function pendingAnsweredByPrompt(prompt, pending) {
|
|
188
|
-
const normalized = normalizePrompt(prompt ?? '');
|
|
189
|
-
if (normalized.length === 0 || pending.length === 0)
|
|
190
|
-
return [];
|
|
191
|
-
const labelled = pending.filter((entry) => pendingHasMatchingChoice(entry, normalized));
|
|
192
|
-
if (labelled.length === 1)
|
|
193
|
-
return labelled;
|
|
194
|
-
if (labelled.length > 1)
|
|
195
|
-
return [];
|
|
196
|
-
if (pending.length === 1 && SHORT_CONFIRMATIONS.has(normalized))
|
|
197
|
-
return [...pending];
|
|
198
|
-
return [];
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Send every parked retirement, and forget the ones that landed. A failure
|
|
202
|
-
* leaves the entry in place for the next hook rather than losing it, which is
|
|
203
|
-
* the whole reason the queue exists.
|
|
204
|
-
*/
|
|
205
|
-
export async function drainRetirements(ctx, sessionId, env) {
|
|
206
|
-
const queue = readSessionState(sessionId, env).retiring ?? [];
|
|
207
|
-
if (queue.length === 0)
|
|
208
|
-
return [];
|
|
209
|
-
const retired = [];
|
|
210
|
-
for (const entry of queue) {
|
|
211
|
-
const proven = await proveRetirement(ctx, entry.request_id);
|
|
212
|
-
if (proven) {
|
|
213
|
-
retired.push(entry.request_id);
|
|
214
|
-
// Persist each success before touching the next entry. A later corrupt
|
|
215
|
-
// record or interrupted process must not resurrect work already done.
|
|
216
|
-
updateSessionState(sessionId, env, (current) => rememberQuestionState({
|
|
217
|
-
...current,
|
|
218
|
-
retiring: (current.retiring ?? []).filter((candidate) => candidate.request_id !== entry.request_id),
|
|
219
|
-
}, entry, entry.state === 'answered' ? 'answered' : 'retired'));
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return retired;
|
|
223
|
-
}
|
|
224
|
-
function orphanQueuePath(env) {
|
|
225
|
-
return path.join(stateDir(env), 'retire-queue.json');
|
|
226
|
-
}
|
|
227
|
-
function readOrphanQueue(env) {
|
|
228
|
-
const file = orphanQueuePath(env);
|
|
229
|
-
if (!existsSync(file))
|
|
230
|
-
return [];
|
|
231
|
-
try {
|
|
232
|
-
const parsed = JSON.parse(readFileSync(file, 'utf8'));
|
|
233
|
-
return Array.isArray(parsed) ? parsed : [];
|
|
234
|
-
}
|
|
235
|
-
catch {
|
|
236
|
-
// Same stance as session state: corruption fails closed to "nothing queued".
|
|
237
|
-
return [];
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
function writeOrphanQueueUnlocked(file, queue) {
|
|
241
|
-
atomicWriteFileSync(file, `${JSON.stringify(queue, null, 2)}\n`);
|
|
242
|
-
}
|
|
243
|
-
function updateOrphanQueue(env, update) {
|
|
244
|
-
const file = orphanQueuePath(env);
|
|
245
|
-
return withFileLock(`${file}.lock`, () => {
|
|
246
|
-
const next = update(readOrphanQueue(env));
|
|
247
|
-
writeOrphanQueueUnlocked(file, next);
|
|
248
|
-
return next;
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
/** Move retirements into the global queue; deduped so a retry costs nothing. */
|
|
252
|
-
export function orphanRetirements(env, entries, now) {
|
|
253
|
-
if (entries.length === 0)
|
|
254
|
-
return;
|
|
255
|
-
updateOrphanQueue(env, (queue) => {
|
|
256
|
-
const known = new Set(queue.map((entry) => entry.request_id));
|
|
257
|
-
const added = entries
|
|
258
|
-
.filter((entry) => !known.has(entry.request_id))
|
|
259
|
-
.map((entry) => ({ ...entry, enqueued_at: now }));
|
|
260
|
-
return [...queue, ...added].slice(-ORPHAN_QUEUE_CAP);
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Retire everything a dead session left behind. Failures stay queued for the
|
|
265
|
-
* next holder of a client; entries past the TTL are dropped as already dead.
|
|
266
|
-
*/
|
|
267
|
-
export async function drainOrphanRetirements(ctx, env, now) {
|
|
268
|
-
const queue = readOrphanQueue(env);
|
|
269
|
-
if (queue.length === 0)
|
|
270
|
-
return [];
|
|
271
|
-
const done = [];
|
|
272
|
-
for (const entry of queue) {
|
|
273
|
-
const age = now - entry.enqueued_at;
|
|
274
|
-
// A negative age is a clock jump, not a fresh entry; retiring is idempotent
|
|
275
|
-
// and cheap, so treat it as due rather than letting it linger for ever.
|
|
276
|
-
if (age > ORPHAN_TTL_MS) {
|
|
277
|
-
done.push(entry.request_id);
|
|
278
|
-
updateOrphanQueue(env, (current) => current.filter((candidate) => candidate.request_id !== entry.request_id));
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
const proven = await proveRetirement(ctx, entry.request_id);
|
|
282
|
-
if (proven) {
|
|
283
|
-
done.push(entry.request_id);
|
|
284
|
-
updateOrphanQueue(env, (current) => current.filter((candidate) => candidate.request_id !== entry.request_id));
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
return done;
|
|
288
|
-
}
|
|
289
|
-
export async function retirePendings(ctx, envelope, sessionId, entries, state) {
|
|
290
|
-
updateSessionState(sessionId, ctx.env, (current) => {
|
|
291
|
-
const retiring = [...(current.retiring ?? [])];
|
|
292
|
-
for (const entry of entries) {
|
|
293
|
-
const retirement = retiringQuestion(entry, state, envelope.cwd);
|
|
294
|
-
if (retirement !== null && !retiring.some((item) => item.request_id === retirement.request_id)) {
|
|
295
|
-
retiring.push(retirement);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
const pending = pendingList(current).filter((candidate) => !entries.some((entry) => isSamePending(candidate, entry)));
|
|
299
|
-
const next = { ...current };
|
|
300
|
-
if (pending.length > 0)
|
|
301
|
-
next.pending = pending;
|
|
302
|
-
else
|
|
303
|
-
delete next.pending;
|
|
304
|
-
if (retiring.length > 0)
|
|
305
|
-
next.retiring = retiring;
|
|
306
|
-
else
|
|
307
|
-
delete next.retiring;
|
|
308
|
-
return entries.reduce((remembered, entry) => rememberQuestionState(remembered, entry, state === 'answered' ? 'answered' : 'retired'), next);
|
|
309
|
-
});
|
|
310
|
-
// Network retirement is deliberately deferred to a later no-question hook.
|
|
311
|
-
// The state write above is the durable operation; blocking here creates a
|
|
312
|
-
// crash window before an answer can reach harness stdout.
|
|
313
|
-
}
|
|
314
|
-
//# sourceMappingURL=hook-question-retirement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-question-retirement.js","sourceRoot":"","sources":["../src/hook-question-retirement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/** Question history, inspection, and atomic live-question state changes. */
|
|
2
|
-
import type { QuestionT, SourceContextT } from '@raidiant/notifai-protocol';
|
|
3
|
-
import type { PendingQuestion, PendingSubmissionIntent, QuestionDeliveryState, QuestionTerminalState, SessionState } from './hook-types.js';
|
|
4
|
-
import type { ServiceIdentity } from './credentials.js';
|
|
5
|
-
export interface QuestionStateView {
|
|
6
|
-
question_id: string;
|
|
7
|
-
state: QuestionDeliveryState;
|
|
8
|
-
/** Null means a frozen submission may or may not have crossed the service boundary. */
|
|
9
|
-
submitted: boolean | null;
|
|
10
|
-
request_id: string | null;
|
|
11
|
-
frozen_request_id: string | null;
|
|
12
|
-
}
|
|
13
|
-
export type QuestionStateLookup = {
|
|
14
|
-
found: true;
|
|
15
|
-
session_id: string;
|
|
16
|
-
question: QuestionStateView;
|
|
17
|
-
} | {
|
|
18
|
-
found: false;
|
|
19
|
-
ambiguous: boolean;
|
|
20
|
-
};
|
|
21
|
-
/** Keep immutable session grouping while replacing per-event Git location authoritatively. */
|
|
22
|
-
export declare function sourceContextAtHookEvent(source: SourceContextT | undefined, cwd: string | undefined): SourceContextT | undefined;
|
|
23
|
-
export declare function summarizeRequestIds(entries: readonly PendingQuestion[]): {
|
|
24
|
-
ids: string[];
|
|
25
|
-
display: string;
|
|
26
|
-
};
|
|
27
|
-
type QuestionIdentity = Pick<PendingQuestion, 'question_id' | 'request_id' | 'submission'>;
|
|
28
|
-
/** Keep a bounded, content-free map from local identity to its terminal state. */
|
|
29
|
-
export declare function rememberQuestionState(current: SessionState, question: QuestionIdentity, state: QuestionTerminalState): SessionState;
|
|
30
|
-
/** Read one stable local question identity without minting or submitting anything. */
|
|
31
|
-
export declare function inspectQuestionState(questionId: string, env: NodeJS.ProcessEnv): QuestionStateLookup;
|
|
32
|
-
/** Registration identity — the convention every racing writer compares by. */
|
|
33
|
-
export declare function isSamePending(a: PendingQuestion, b: PendingQuestion): boolean;
|
|
34
|
-
export declare function dropPendingQuestion(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion, terminalState?: QuestionTerminalState): void;
|
|
35
|
-
/** A cheap preflight check; only admitQueuedQuestion authorizes submission. */
|
|
36
|
-
export declare function queuedQuestionStillEligible(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion): boolean;
|
|
37
|
-
/** Whether silent local withdrawal is no longer an honest outcome. */
|
|
38
|
-
export declare function questionSubmissionAttempted(entry: PendingQuestion): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* One serialized boundary with close, prompt retirement, and SessionEnd.
|
|
41
|
-
* Withdrawal first means no request starts. Admission first journals the
|
|
42
|
-
* reserved identity and starts the request before releasing the lock; a later
|
|
43
|
-
* close must retire that potentially remote identity, never call it withdrawn.
|
|
44
|
-
*
|
|
45
|
-
* submit must initiate the request synchronously and return its promise. The
|
|
46
|
-
* lock is released before awaiting network work, using the ordinary bounded
|
|
47
|
-
* acquisition and dead-process recovery of the session-state lock.
|
|
48
|
-
*/
|
|
49
|
-
export declare function admitQueuedQuestion<T>(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion, intent: PendingSubmissionIntent, now: number, submit: () => Promise<T>, serviceIdentity?: ServiceIdentity): Promise<T> | null;
|
|
50
|
-
/** Replace only the rejected frozen identity, atomically with the native
|
|
51
|
-
* obligation check. Preparing a replacement never erases the original first.
|
|
52
|
-
*/
|
|
53
|
-
export declare function replaceFrozenSubmission(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion, rejected: PendingSubmissionIntent, replacement: PendingSubmissionIntent): boolean;
|
|
54
|
-
/** The question set this pending record pushes, however it was registered. */
|
|
55
|
-
export declare function pendingQuestions(pending: PendingQuestion): QuestionT[];
|
|
56
|
-
/** Did any question in the set offer choices? Decides how replies combine. */
|
|
57
|
-
export declare function pendingHasChoices(pending: PendingQuestion): boolean;
|
|
58
|
-
export {};
|