@raidiant/notifai 11.7.1-beta.2 → 12.0.0-beta.5
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 +56 -4
- package/NOTICE +16 -0
- package/THIRD_PARTY_NOTICES +725 -0
- package/bin/notifai.mjs +11387 -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,239 +0,0 @@
|
|
|
1
|
-
import { withFileLock } from './file-lock.js';
|
|
2
|
-
import { findOwningSession, pendingList, readSessionState, sessionHasEnded, sessionStatePath, updateSessionState, writeSessionStateUnlocked, } from './hook-session-state.js';
|
|
3
|
-
import { inferInvocationContext } from './invocation-context.js';
|
|
4
|
-
/** Keep immutable session grouping while replacing per-event Git location authoritatively. */
|
|
5
|
-
export function sourceContextAtHookEvent(source, cwd) {
|
|
6
|
-
const invocation = cwd === undefined ? null : inferInvocationContext(cwd);
|
|
7
|
-
const current = {
|
|
8
|
-
...(source?.session_id !== undefined ? { session_id: source.session_id } : {}),
|
|
9
|
-
...(source?.session_label !== undefined ? { session_label: source.session_label } : {}),
|
|
10
|
-
...(source?.harness !== undefined ? { harness: source.harness } : {}),
|
|
11
|
-
...(invocation?.branch !== undefined ? { branch: invocation.branch } : {}),
|
|
12
|
-
...(invocation?.worktree !== undefined ? { worktree: invocation.worktree } : {}),
|
|
13
|
-
};
|
|
14
|
-
return Object.keys(current).length === 0 ? undefined : current;
|
|
15
|
-
}
|
|
16
|
-
export function summarizeRequestIds(entries) {
|
|
17
|
-
const ids = entries.flatMap((entry) => entry.request_id === undefined ? [] : [entry.request_id]);
|
|
18
|
-
return { ids, display: ids.join(', ') };
|
|
19
|
-
}
|
|
20
|
-
const QUESTION_HISTORY_CAP = 50;
|
|
21
|
-
/** Keep a bounded, content-free map from local identity to its terminal state. */
|
|
22
|
-
export function rememberQuestionState(current, question, state) {
|
|
23
|
-
if (question.question_id === undefined)
|
|
24
|
-
return current;
|
|
25
|
-
const existing = (current.question_history ?? []).find((entry) => entry.question_id === question.question_id);
|
|
26
|
-
const terminalState = existing?.state === 'withdrawn' || existing?.state === 'answered'
|
|
27
|
-
? existing.state
|
|
28
|
-
: state === 'answered'
|
|
29
|
-
? 'answered'
|
|
30
|
-
: state;
|
|
31
|
-
const requestId = question.request_id ?? existing?.request_id;
|
|
32
|
-
const frozenRequestId = requestId === undefined && terminalState !== 'withdrawn'
|
|
33
|
-
? question.submission?.request_id ?? existing?.frozen_request_id
|
|
34
|
-
: undefined;
|
|
35
|
-
const record = {
|
|
36
|
-
question_id: question.question_id,
|
|
37
|
-
state: terminalState,
|
|
38
|
-
...(requestId === undefined ? {} : { request_id: requestId }),
|
|
39
|
-
...(frozenRequestId === undefined ? {} : { frozen_request_id: frozenRequestId }),
|
|
40
|
-
};
|
|
41
|
-
const history = [
|
|
42
|
-
...(current.question_history ?? []).filter((entry) => entry.question_id !== question.question_id),
|
|
43
|
-
record,
|
|
44
|
-
].slice(-QUESTION_HISTORY_CAP);
|
|
45
|
-
return { ...current, question_history: history };
|
|
46
|
-
}
|
|
47
|
-
function pendingQuestionView(entry) {
|
|
48
|
-
if (entry.question_id === undefined)
|
|
49
|
-
return null;
|
|
50
|
-
if (entry.request_id !== undefined) {
|
|
51
|
-
return {
|
|
52
|
-
question_id: entry.question_id,
|
|
53
|
-
state: 'live',
|
|
54
|
-
submitted: true,
|
|
55
|
-
request_id: entry.request_id,
|
|
56
|
-
frozen_request_id: null,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
if (entry.submission !== undefined) {
|
|
60
|
-
return {
|
|
61
|
-
question_id: entry.question_id,
|
|
62
|
-
state: 'frozen',
|
|
63
|
-
submitted: null,
|
|
64
|
-
request_id: null,
|
|
65
|
-
frozen_request_id: entry.submission.request_id,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
question_id: entry.question_id,
|
|
70
|
-
state: 'local',
|
|
71
|
-
submitted: false,
|
|
72
|
-
request_id: null,
|
|
73
|
-
frozen_request_id: null,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
/** Read one stable local question identity without minting or submitting anything. */
|
|
77
|
-
export function inspectQuestionState(questionId, env) {
|
|
78
|
-
const owner = findOwningSession(questionId, env);
|
|
79
|
-
if (owner.ambiguous || owner.sessionId === null) {
|
|
80
|
-
return { found: false, ambiguous: owner.ambiguous };
|
|
81
|
-
}
|
|
82
|
-
const state = readSessionState(owner.sessionId, env);
|
|
83
|
-
const pending = pendingList(state).find((entry) => entry.question_id === questionId);
|
|
84
|
-
const pendingView = pending === undefined ? null : pendingQuestionView(pending);
|
|
85
|
-
if (pendingView !== null) {
|
|
86
|
-
return { found: true, session_id: owner.sessionId, question: pendingView };
|
|
87
|
-
}
|
|
88
|
-
const accepted = [...(state.accepted?.answers ?? []), ...(state.delivered_answers ?? [])].find(({ pending: entry }) => entry.question_id === questionId)?.pending;
|
|
89
|
-
if (accepted?.question_id !== undefined) {
|
|
90
|
-
return {
|
|
91
|
-
found: true,
|
|
92
|
-
session_id: owner.sessionId,
|
|
93
|
-
question: {
|
|
94
|
-
question_id: accepted.question_id,
|
|
95
|
-
state: 'answered',
|
|
96
|
-
submitted: true,
|
|
97
|
-
request_id: accepted.request_id ?? null,
|
|
98
|
-
frozen_request_id: null,
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
const retiring = (state.retiring ?? []).find((entry) => entry.question_id === questionId);
|
|
103
|
-
const history = (state.question_history ?? []).find((entry) => entry.question_id === questionId);
|
|
104
|
-
if (retiring?.question_id !== undefined) {
|
|
105
|
-
const unconfirmed = history?.request_id === undefined &&
|
|
106
|
-
history?.frozen_request_id === retiring.request_id;
|
|
107
|
-
return {
|
|
108
|
-
found: true,
|
|
109
|
-
session_id: owner.sessionId,
|
|
110
|
-
question: {
|
|
111
|
-
question_id: retiring.question_id,
|
|
112
|
-
state: retiring.state === 'answered' ? 'answered' : 'retired',
|
|
113
|
-
submitted: unconfirmed ? null : true,
|
|
114
|
-
request_id: unconfirmed ? null : retiring.request_id,
|
|
115
|
-
frozen_request_id: unconfirmed ? retiring.request_id : null,
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
if (history !== undefined) {
|
|
120
|
-
return {
|
|
121
|
-
found: true,
|
|
122
|
-
session_id: owner.sessionId,
|
|
123
|
-
question: {
|
|
124
|
-
question_id: history.question_id,
|
|
125
|
-
state: history.state,
|
|
126
|
-
submitted: history.request_id !== undefined
|
|
127
|
-
? true
|
|
128
|
-
: history.frozen_request_id !== undefined
|
|
129
|
-
? null
|
|
130
|
-
: false,
|
|
131
|
-
request_id: history.request_id ?? null,
|
|
132
|
-
frozen_request_id: history.frozen_request_id ?? null,
|
|
133
|
-
},
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
return { found: false, ambiguous: false };
|
|
137
|
-
}
|
|
138
|
-
/** Registration identity — the convention every racing writer compares by. */
|
|
139
|
-
export function isSamePending(a, b) {
|
|
140
|
-
if (a.question_id !== undefined || b.question_id !== undefined) {
|
|
141
|
-
return a.question_id !== undefined && a.question_id === b.question_id;
|
|
142
|
-
}
|
|
143
|
-
return a.question === b.question && a.asked_at === b.asked_at;
|
|
144
|
-
}
|
|
145
|
-
export function dropPendingQuestion(sessionId, env, entry, terminalState = 'retired') {
|
|
146
|
-
updateSessionState(sessionId, env, (current) => {
|
|
147
|
-
const pending = pendingList(current).filter((candidate) => !isSamePending(candidate, entry));
|
|
148
|
-
const next = { ...current };
|
|
149
|
-
if (pending.length > 0)
|
|
150
|
-
next.pending = pending;
|
|
151
|
-
else
|
|
152
|
-
delete next.pending;
|
|
153
|
-
return rememberQuestionState(next, entry, terminalState);
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
function queuedQuestionIndex(state, entry) {
|
|
157
|
-
if (entry.question_id !== undefined) {
|
|
158
|
-
const remembered = (state.question_history ?? []).find((item) => item.question_id === entry.question_id);
|
|
159
|
-
if (remembered?.state === 'withdrawn' ||
|
|
160
|
-
remembered?.state === 'answered' ||
|
|
161
|
-
remembered?.state === 'retired') {
|
|
162
|
-
return -1;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return pendingList(state).findIndex((candidate) => isSamePending(candidate, entry) && candidate.request_id === undefined);
|
|
166
|
-
}
|
|
167
|
-
/** A cheap preflight check; only admitQueuedQuestion authorizes submission. */
|
|
168
|
-
export function queuedQuestionStillEligible(sessionId, env, entry) {
|
|
169
|
-
return queuedQuestionIndex(readSessionState(sessionId, env), entry) >= 0;
|
|
170
|
-
}
|
|
171
|
-
/** Whether silent local withdrawal is no longer an honest outcome. */
|
|
172
|
-
export function questionSubmissionAttempted(entry) {
|
|
173
|
-
return entry.request_id !== undefined || entry.submission?.admitted_at !== undefined;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* One serialized boundary with close, prompt retirement, and SessionEnd.
|
|
177
|
-
* Withdrawal first means no request starts. Admission first journals the
|
|
178
|
-
* reserved identity and starts the request before releasing the lock; a later
|
|
179
|
-
* close must retire that potentially remote identity, never call it withdrawn.
|
|
180
|
-
*
|
|
181
|
-
* submit must initiate the request synchronously and return its promise. The
|
|
182
|
-
* lock is released before awaiting network work, using the ordinary bounded
|
|
183
|
-
* acquisition and dead-process recovery of the session-state lock.
|
|
184
|
-
*/
|
|
185
|
-
export function admitQueuedQuestion(sessionId, env, entry, intent, now, submit, serviceIdentity) {
|
|
186
|
-
const file = sessionStatePath(sessionId, env);
|
|
187
|
-
return withFileLock(`${file}.lock`, () => {
|
|
188
|
-
if (sessionHasEnded(sessionId, env))
|
|
189
|
-
return null;
|
|
190
|
-
const current = readSessionState(sessionId, env);
|
|
191
|
-
const index = queuedQuestionIndex(current, entry);
|
|
192
|
-
if (index < 0)
|
|
193
|
-
return null;
|
|
194
|
-
const pending = [...pendingList(current)];
|
|
195
|
-
const candidate = pending[index];
|
|
196
|
-
for (const identity of [candidate.service_identity, intent.service_identity]) {
|
|
197
|
-
if (identity !== undefined && (identity.machine_id !== serviceIdentity?.machine_id ||
|
|
198
|
-
identity.base_url !== serviceIdentity?.base_url))
|
|
199
|
-
return null;
|
|
200
|
-
}
|
|
201
|
-
if (candidate.submission?.request_id !== intent.request_id)
|
|
202
|
-
return null;
|
|
203
|
-
pending[index] = {
|
|
204
|
-
...candidate,
|
|
205
|
-
submission: { ...intent, admitted_at: intent.admitted_at ?? now },
|
|
206
|
-
};
|
|
207
|
-
writeSessionStateUnlocked(file, sessionId, { ...current, pending });
|
|
208
|
-
return submit();
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
/** Replace only the rejected frozen identity, atomically with the native
|
|
212
|
-
* obligation check. Preparing a replacement never erases the original first.
|
|
213
|
-
*/
|
|
214
|
-
export function replaceFrozenSubmission(sessionId, env, entry, rejected, replacement) {
|
|
215
|
-
let replaced = false;
|
|
216
|
-
updateSessionState(sessionId, env, (current) => {
|
|
217
|
-
if (sessionHasEnded(sessionId, env) || current.native_answer_operations?.some(op => op.question_id === entry.question_id))
|
|
218
|
-
return current;
|
|
219
|
-
const list = pendingList(current);
|
|
220
|
-
const index = queuedQuestionIndex(current, entry);
|
|
221
|
-
if (index < 0 || list[index]?.submission?.request_id !== rejected.request_id ||
|
|
222
|
-
list[index]?.submission?.idempotency_key !== rejected.idempotency_key)
|
|
223
|
-
return current;
|
|
224
|
-
const next = [...list];
|
|
225
|
-
next[index] = { ...next[index], submission: replacement };
|
|
226
|
-
replaced = true;
|
|
227
|
-
return { ...current, pending: next };
|
|
228
|
-
});
|
|
229
|
-
return replaced;
|
|
230
|
-
}
|
|
231
|
-
/** The question set this pending record pushes, however it was registered. */
|
|
232
|
-
export function pendingQuestions(pending) {
|
|
233
|
-
return pending.questions ?? [{ id: 'q1', text: pending.question }];
|
|
234
|
-
}
|
|
235
|
-
/** Did any question in the set offer choices? Decides how replies combine. */
|
|
236
|
-
export function pendingHasChoices(pending) {
|
|
237
|
-
return pendingQuestions(pending).some((question) => question.choices !== undefined);
|
|
238
|
-
}
|
|
239
|
-
//# sourceMappingURL=hook-question-state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-question-state.js","sourceRoot":"","sources":["../src/hook-question-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import type { HookHarness, PendingQuestion, SessionState } from './hook-types.js';
|
|
2
|
-
import type { ProcessIdentity } from './process-identity.js';
|
|
3
|
-
export declare function sessionStatePath(sessionId: string, env: NodeJS.ProcessEnv): string;
|
|
4
|
-
export declare function sessionHasEnded(sessionId: string, env: NodeJS.ProcessEnv): boolean;
|
|
5
|
-
/**
|
|
6
|
-
* When a lifecycle edge happened, in an order no wall-clock change can alter.
|
|
7
|
-
*
|
|
8
|
-
* `mono` is the system-wide monotonic clock (`process.hrtime`), shared by
|
|
9
|
-
* every process on this machine within one boot. Wall time is kept for people
|
|
10
|
-
* reading the files, never for ordering: an NTP step or a manual change moved
|
|
11
|
-
* it backwards far enough to end a resumed session with its own earlier end.
|
|
12
|
-
*/
|
|
13
|
-
export interface LifecycleStamp {
|
|
14
|
-
wall: number;
|
|
15
|
-
mono: string;
|
|
16
|
-
}
|
|
17
|
-
export declare function lifecycleStamp(wall?: number): LifecycleStamp;
|
|
18
|
-
/**
|
|
19
|
-
* Whether `edge` happened before `reference`, a stamp taken by this process.
|
|
20
|
-
* A monotonic value ahead of this process's own clock can only come from an
|
|
21
|
-
* earlier boot, so it is earlier too; an edge without a stamp (an older
|
|
22
|
-
* build's marker) is treated as earlier.
|
|
23
|
-
*/
|
|
24
|
-
export declare function happenedBefore(edge: LifecycleStamp | null, reference: LifecycleStamp): boolean;
|
|
25
|
-
/** What SessionEnd recorded: when, and which incarnation it ended. */
|
|
26
|
-
export interface SessionEndMarker {
|
|
27
|
-
stamp: LifecycleStamp | null;
|
|
28
|
-
/** `key` of the incarnation current when the session ended, when there was one. */
|
|
29
|
-
ends: string | null;
|
|
30
|
-
}
|
|
31
|
-
export declare function markSessionEnded(sessionId: string, env: NodeJS.ProcessEnv, now: number): SessionEndMarker;
|
|
32
|
-
/** The end marker, or null when the session carries none. */
|
|
33
|
-
export declare function readSessionEndMarker(sessionId: string, env: NodeJS.ProcessEnv): SessionEndMarker | null;
|
|
34
|
-
/** Whether this marker ended exactly this incarnation. */
|
|
35
|
-
export declare function endsIncarnation(marker: SessionEndMarker | null, incarnation: SessionIncarnation): boolean;
|
|
36
|
-
/**
|
|
37
|
-
* One start of one Agent Session: the edge from which its end is judged.
|
|
38
|
-
*
|
|
39
|
-
* A harness may start the same session id again — `/resume` in the same
|
|
40
|
-
* process, or `--resume` in a new one — after SessionEnd already marked it
|
|
41
|
-
* ended. SessionEnd names the incarnation it ended, so an end recorded for an
|
|
42
|
-
* earlier incarnation can never end a later one, whatever the wall clock did.
|
|
43
|
-
*/
|
|
44
|
-
export interface SessionIncarnation {
|
|
45
|
-
/** Stable local identity of this start; end markers name it. */
|
|
46
|
-
key: string;
|
|
47
|
-
/** Opaque identity shown to the service by the Session Attendant. Never a PID. */
|
|
48
|
-
incarnation: string;
|
|
49
|
-
start: LifecycleStamp;
|
|
50
|
-
/** The OpenClaw plugin generation behind this stable sessionKey. */
|
|
51
|
-
openclaw_generation?: string;
|
|
52
|
-
/** The harness process hosting this incarnation, when the starter knew it. */
|
|
53
|
-
harness_process?: ProcessIdentity;
|
|
54
|
-
}
|
|
55
|
-
export declare function readSessionIncarnation(sessionId: string, env: NodeJS.ProcessEnv): SessionIncarnation | null;
|
|
56
|
-
export declare function newIncarnationId(): string;
|
|
57
|
-
/**
|
|
58
|
-
* The one shared, idempotent start of an Agent Session incarnation.
|
|
59
|
-
*
|
|
60
|
-
* Every SessionStart handler calls it before anything reads the end marker,
|
|
61
|
-
* stamped with the moment its own invocation began.
|
|
62
|
-
*
|
|
63
|
-
* - The recorded incarnation is joined when it runs in the same harness
|
|
64
|
-
* process and has not ended — the second handler of one start — or when its
|
|
65
|
-
* end came *after* this handler began: that end is this start's own, seen by
|
|
66
|
-
* a delayed handler, and it must stay ended.
|
|
67
|
-
* - Otherwise a new incarnation is minted: no record, another harness
|
|
68
|
-
* process, or the recorded incarnation ended before this handler began
|
|
69
|
-
* (in-process `/resume` after `/clear`).
|
|
70
|
-
* - An end marker from before this handler, for any incarnation but the one
|
|
71
|
-
* joined, is dropped; a later one is kept.
|
|
72
|
-
*/
|
|
73
|
-
export declare function beginSessionIncarnation(sessionId: string, env: NodeJS.ProcessEnv, options: {
|
|
74
|
-
stamp: LifecycleStamp;
|
|
75
|
-
harnessProcess?: ProcessIdentity;
|
|
76
|
-
/**
|
|
77
|
-
* Only a SessionStart may drop an earlier end marker. A re-arm (a later
|
|
78
|
-
* hook finding no incarnation for its harness process) mints one without
|
|
79
|
-
* touching the marker, so shared cancellation stays intact.
|
|
80
|
-
*/
|
|
81
|
-
clearEarlierEnd?: boolean;
|
|
82
|
-
openclawGeneration?: string;
|
|
83
|
-
}): SessionIncarnation;
|
|
84
|
-
/**
|
|
85
|
-
* Replace this incarnation's service identity after the service refused it,
|
|
86
|
-
* keeping its local key and start. Only the holder of `expected` may rotate it.
|
|
87
|
-
*/
|
|
88
|
-
export declare function rotateSessionIncarnation(sessionId: string, env: NodeJS.ProcessEnv, expected: string): SessionIncarnation | null;
|
|
89
|
-
export declare function sessionNotified(sessionId: string, env: NodeJS.ProcessEnv): boolean;
|
|
90
|
-
/** Record the first accepted Notification Request of an Agent Session. Never throws. */
|
|
91
|
-
export declare function recordSessionNotified(sessionId: string, env: NodeJS.ProcessEnv, now: number): void;
|
|
92
|
-
/**
|
|
93
|
-
* Keep a long-running session's small files younger than the abandoned-state
|
|
94
|
-
* prune, including any extra files its owner names (the attendant's claim).
|
|
95
|
-
*/
|
|
96
|
-
export declare function refreshSessionMarkers(sessionId: string, env: NodeJS.ProcessEnv, now: number, extra?: readonly string[]): void;
|
|
97
|
-
export declare function readSessionState(sessionId: string, env: NodeJS.ProcessEnv): SessionState;
|
|
98
|
-
/**
|
|
99
|
-
* Resolve a stable question or request id to the one exact session that owns it.
|
|
100
|
-
*
|
|
101
|
-
* This deliberately searches lifecycle state, not checkout pointers: question
|
|
102
|
-
* identity is global on this machine, while a linked worktree is only where a
|
|
103
|
-
* command happened to run. Ambiguous or corrupt matches fail closed.
|
|
104
|
-
*/
|
|
105
|
-
export declare function findOwningSession(id: string, env: NodeJS.ProcessEnv): {
|
|
106
|
-
sessionId: string | null;
|
|
107
|
-
ambiguous: boolean;
|
|
108
|
-
};
|
|
109
|
-
export declare function writeSessionState(sessionId: string, env: NodeJS.ProcessEnv, state: SessionState): void;
|
|
110
|
-
export declare function clearSessionState(sessionId: string, env: NodeJS.ProcessEnv): void;
|
|
111
|
-
/** Caller owns the session lock. Completed keys remain non-reusable until the
|
|
112
|
-
* whole abandoned session is pruned; unfinished operations pin that boundary.
|
|
113
|
-
*/
|
|
114
|
-
export declare function clearSessionStateUnlocked(sessionId: string, env: NodeJS.ProcessEnv): void;
|
|
115
|
-
export declare function writeSessionStateUnlocked(file: string, sessionId: string, state: SessionState): void;
|
|
116
|
-
export declare function updateSessionState(sessionId: string, env: NodeJS.ProcessEnv, update: (current: SessionState) => SessionState): SessionState;
|
|
117
|
-
/** Record the current installation when an owner session starts. */
|
|
118
|
-
export declare function recordSessionStart(sessionId: string, env: NodeJS.ProcessEnv, harness?: HookHarness, cwd?: string, codexStopDefinitionFingerprint?: string, stamp?: LifecycleStamp, openclawGeneration?: string): void;
|
|
119
|
-
/** Atomically claim Cursor's first-Stop activation fallback once per conversation. */
|
|
120
|
-
export declare function claimCursorStopActivation(sessionId: string, env: NodeJS.ProcessEnv, now: number): boolean;
|
|
121
|
-
/** Cursor's loop_count proves the previous Stop follow-up reached the host. */
|
|
122
|
-
export declare function confirmCursorStopActivation(sessionId: string, env: NodeJS.ProcessEnv, now: number): boolean;
|
|
123
|
-
/** A fresh/cleared Cursor lifecycle makes its next Stop the fallback owner again. */
|
|
124
|
-
export declare function resetCursorStopActivation(sessionId: string, env: NodeJS.ProcessEnv): void;
|
|
125
|
-
export declare function pruneAbandonedSessions(env: NodeJS.ProcessEnv, now?: number, maxAgeMs?: number): number;
|
|
126
|
-
/** The registered-question queue. Anything but the current shape reads as empty. */
|
|
127
|
-
export declare function pendingList(state: SessionState): PendingQuestion[];
|