@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
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/** Present one claimed app submission through its exact accepted native form. */
|
|
2
|
-
import { createHash } from 'node:crypto';
|
|
3
|
-
import { isDeepStrictEqual } from 'node:util';
|
|
4
|
-
import { acknowledgementContext } from './hook-acknowledgements.js';
|
|
5
|
-
import { TRANSPORT_LIMIT } from './injection-render.js';
|
|
6
|
-
import { nativeQuestionTitle, observeCodexQuestions } from './codex-question-bindings.js';
|
|
7
|
-
import { readNativeQuestionSnapshot } from './codex-native-turn.js';
|
|
8
|
-
import { readSessionIncarnation, updateSessionState } from './hook-session-state.js';
|
|
9
|
-
import { connectCodexAnswerControl } from './codex-answer-control.js';
|
|
10
|
-
import { CodexControlNotSent } from './codex-native-control.js';
|
|
11
|
-
/** Multipart, malformed and unsupported answers keep the ordinary input path. */
|
|
12
|
-
function boundAnswer(answer, state, ownerKey, service) {
|
|
13
|
-
if (answer.delivery_claim !== true || answer.replies.length !== 1 ||
|
|
14
|
-
!isDeepStrictEqual(answer.reply, answer.replies[0]) || !isDeepStrictEqual(answer.pending.service_identity, service))
|
|
15
|
-
return null;
|
|
16
|
-
const registration = state.codex_question_bindings?.find(item => item.question_id === answer.pending.question_id);
|
|
17
|
-
if (registration === undefined || registration.owner_key !== ownerKey || registration.ordinary_only === true ||
|
|
18
|
-
registration.terminated === true || registration.confirmed_request_id !== answer.pending.request_id ||
|
|
19
|
-
!isDeepStrictEqual(registration.service_identity, service) ||
|
|
20
|
-
!isDeepStrictEqual(registration.questions.map(item => item.question), answer.pending.questions))
|
|
21
|
-
return null;
|
|
22
|
-
const parts = answer.reply.answers;
|
|
23
|
-
if (parts.length === 0 || new Set(parts.map(part => part.question_id)).size !== parts.length)
|
|
24
|
-
return null;
|
|
25
|
-
for (const part of parts) {
|
|
26
|
-
const binding = registration.questions.find(item => item.question.id === part.question_id);
|
|
27
|
-
if (binding?.verified !== true || binding.native === undefined || binding.ambiguous === true ||
|
|
28
|
-
binding.question.multi === true || part.choice_ids.length > 1 ||
|
|
29
|
-
part.choice_ids.some(id => !binding.question.choices?.some(choice => choice.id === id)) ||
|
|
30
|
-
(part.choice_ids.length === 0 && !part.text?.trim()))
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
return registration;
|
|
34
|
-
}
|
|
35
|
-
export function codexAnswerPresentation(input) {
|
|
36
|
-
const eligible = (answer, state) => boundAnswer(answer, state, input.ownerKey, input.service);
|
|
37
|
-
const refresh = (state) => {
|
|
38
|
-
const snapshot = readNativeQuestionSnapshot(input.transcriptPath, input.sessionId, input.env);
|
|
39
|
-
return { state: observeCodexQuestions(state, input.ownerKey, snapshot),
|
|
40
|
-
current: snapshot?.latest.id === input.turnId && !snapshot.latest.ended };
|
|
41
|
-
};
|
|
42
|
-
const owned = () => input.mayWrite() && readSessionIncarnation(input.sessionId, input.env)?.key === input.ownerKey;
|
|
43
|
-
return {
|
|
44
|
-
eligible: (answer, state) => eligible(answer, state) !== null,
|
|
45
|
-
prepare: async (answer, _state, deadline) => {
|
|
46
|
-
let registration = null;
|
|
47
|
-
updateSessionState(input.sessionId, input.env, state => {
|
|
48
|
-
const observed = refresh(state);
|
|
49
|
-
if (owned() && observed.current)
|
|
50
|
-
registration = eligible(answer, observed.state);
|
|
51
|
-
return observed.state;
|
|
52
|
-
});
|
|
53
|
-
if (registration === null)
|
|
54
|
-
return null;
|
|
55
|
-
// Freeze the binding independently of later state changes and retries.
|
|
56
|
-
const binding = structuredClone(registration);
|
|
57
|
-
const control = await (input.connect ?? connectCodexAnswerControl)(input.sessionId, input.turnId, input.env, Math.min(input.deadline, deadline));
|
|
58
|
-
if (control === null)
|
|
59
|
-
return null;
|
|
60
|
-
try {
|
|
61
|
-
if (!owned() || !await control.currentTurn(input.turnId)) {
|
|
62
|
-
control.close();
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
const reply = answer.reply;
|
|
66
|
-
const text = '<send_user_message_question_reply>\n' + JSON.stringify(reply.answers.map(part => {
|
|
67
|
-
const question = binding.questions.find(item => item.question.id === part.question_id);
|
|
68
|
-
const selected = part.choice_ids.map(id => question.question.choices.find(choice => choice.id === id).label);
|
|
69
|
-
return { questionItemId: JSON.stringify(['request_user_input_async', question.native.call_id, question.native.index]),
|
|
70
|
-
question: nativeQuestionTitle(question), answer: [...selected, ...(part.text == null ? [] : [part.text])].join('\n'),
|
|
71
|
-
notifai: { origin: 'companion', request_id: answer.pending.request_id, question_id: part.question_id,
|
|
72
|
-
reply_id: reply.reply_id, reply_seq: reply.seq,
|
|
73
|
-
instruction: 'This is the existing Notifai app submission, not a new native submission. Do not report it as a native answer.' +
|
|
74
|
-
acknowledgementContext([answer]) + TRANSPORT_LIMIT } };
|
|
75
|
-
})) + '\n</send_user_message_question_reply>';
|
|
76
|
-
const validate = (state) => {
|
|
77
|
-
const observed = refresh(state);
|
|
78
|
-
return { state: observed.state, valid: owned() && observed.current &&
|
|
79
|
-
isDeepStrictEqual(eligible(answer, observed.state), binding) };
|
|
80
|
-
};
|
|
81
|
-
return {
|
|
82
|
-
presentation: { kind: 'codex-answer', request_id: answer.pending.request_id, question_id: binding.question_id,
|
|
83
|
-
replies: [{ reply_id: reply.reply_id, seq: reply.seq }],
|
|
84
|
-
questions: reply.answers.map(part => ({ question_id: part.question_id,
|
|
85
|
-
...binding.questions.find(item => item.question.id === part.question_id).native })),
|
|
86
|
-
owner_key: input.ownerKey, ...input.lease, service_identity: input.service,
|
|
87
|
-
namespace: control.namespace, thread_id: control.threadId, expected_turn_id: input.turnId,
|
|
88
|
-
envelope_sha256: createHash('sha256').update(text).digest('hex') },
|
|
89
|
-
validate,
|
|
90
|
-
write: async (mayWrite) => {
|
|
91
|
-
if (!input.serviceCurrent())
|
|
92
|
-
throw new CodexControlNotSent('Native answer Machine changed before send');
|
|
93
|
-
let valid = false;
|
|
94
|
-
updateSessionState(input.sessionId, input.env, state => {
|
|
95
|
-
const checked = validate(state);
|
|
96
|
-
valid = checked.valid;
|
|
97
|
-
return checked.state;
|
|
98
|
-
});
|
|
99
|
-
if (!valid || !owned() || !mayWrite())
|
|
100
|
-
throw new CodexControlNotSent('Native answer authority changed before send');
|
|
101
|
-
await control.steer(input.turnId, text);
|
|
102
|
-
},
|
|
103
|
-
close: () => control.close(),
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
control.close();
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=codex-answer-presentation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-answer-presentation.js","sourceRoot":"","sources":["../src/codex-answer-presentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type CodexInputActivity = 'working' | 'idle' | 'aborted' | 'unknown';
|
|
2
|
-
/** Never infers idle from missing callbacks or a Stop hook. */
|
|
3
|
-
export declare function refreshCodexInputActivity(sessionId: string, env: NodeJS.ProcessEnv, expectedKey: string, transcriptPath?: string): CodexInputActivity;
|
|
4
|
-
/** One observer owns the grace interval across probes and final wake checks.
|
|
5
|
-
* Only a continuous read failure permits the bounded queue fallback. */
|
|
6
|
-
export declare function codexInputObserver(sessionId: string, env: NodeJS.ProcessEnv, expectedKey: string, monotonic: () => number, transcriptPath?: string): {
|
|
7
|
-
observe: () => CodexInputActivity;
|
|
8
|
-
mayWake: () => boolean;
|
|
9
|
-
unknownAllowed: () => boolean;
|
|
10
|
-
};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/** Exact native activity used by the existing input scheduler. */
|
|
2
|
-
import { readNativeTurnSnapshot } from './codex-native-turn.js';
|
|
3
|
-
import { readSessionIncarnation, readSessionState, sessionHasEnded, updateSessionState } from './hook-session-state.js';
|
|
4
|
-
import { processIdentityLiveness } from './process-identity.js';
|
|
5
|
-
import { reconcileNativeTurn } from './session-attendant-state.js';
|
|
6
|
-
/** Never infers idle from missing callbacks or a Stop hook. */
|
|
7
|
-
export function refreshCodexInputActivity(sessionId, env, expectedKey, transcriptPath) {
|
|
8
|
-
const owner = readSessionIncarnation(sessionId, env);
|
|
9
|
-
const owns = () => owner !== null && owner.key === expectedKey && !sessionHasEnded(sessionId, env) &&
|
|
10
|
-
readSessionIncarnation(sessionId, env)?.key === expectedKey &&
|
|
11
|
-
readSessionIncarnation(sessionId, env)?.incarnation === owner.incarnation &&
|
|
12
|
-
owner.harness_process !== undefined && processIdentityLiveness(owner.harness_process) === 'alive';
|
|
13
|
-
if (!owns() || owner === null)
|
|
14
|
-
return 'unknown';
|
|
15
|
-
const proof = readSessionState(sessionId, env).codex_native_turn;
|
|
16
|
-
const file = transcriptPath ?? (proof?.key === owner.key ? proof.transcript_path : undefined);
|
|
17
|
-
const native = readNativeTurnSnapshot(file, sessionId, env);
|
|
18
|
-
if (native === null)
|
|
19
|
-
return 'unknown';
|
|
20
|
-
try {
|
|
21
|
-
if (!reconcileNativeTurn(sessionId, env, owner.key, native.latest.id, native, owns))
|
|
22
|
-
return 'unknown';
|
|
23
|
-
updateSessionState(sessionId, env, state => !owns() ? state : ({ ...state, codex_native_turn: {
|
|
24
|
-
key: owner.key, turn_id: native.latest.id, transcript_path: native.file, observed_at: Date.now(),
|
|
25
|
-
} }));
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return 'unknown';
|
|
29
|
-
}
|
|
30
|
-
if (!owns())
|
|
31
|
-
return 'unknown';
|
|
32
|
-
return native.latest.ended ? native.latest.outcome === 'aborted' ? 'aborted' : 'idle' : 'working';
|
|
33
|
-
}
|
|
34
|
-
/** One observer owns the grace interval across probes and final wake checks.
|
|
35
|
-
* Only a continuous read failure permits the bounded queue fallback. */
|
|
36
|
-
export function codexInputObserver(sessionId, env, expectedKey, monotonic, transcriptPath) {
|
|
37
|
-
let unknownSince;
|
|
38
|
-
const observe = () => {
|
|
39
|
-
const activity = refreshCodexInputActivity(sessionId, env, expectedKey, transcriptPath);
|
|
40
|
-
if (activity === 'unknown')
|
|
41
|
-
unknownSince ??= monotonic();
|
|
42
|
-
else
|
|
43
|
-
unknownSince = undefined;
|
|
44
|
-
return activity;
|
|
45
|
-
};
|
|
46
|
-
return {
|
|
47
|
-
observe,
|
|
48
|
-
unknownAllowed: () => unknownSince !== undefined && monotonic() - unknownSince >= 6_000,
|
|
49
|
-
mayWake: () => {
|
|
50
|
-
if (readSessionIncarnation(sessionId, env)?.key !== expectedKey || sessionHasEnded(sessionId, env))
|
|
51
|
-
return false;
|
|
52
|
-
const activity = observe();
|
|
53
|
-
const owner = readSessionIncarnation(sessionId, env);
|
|
54
|
-
if (owner?.key !== expectedKey || sessionHasEnded(sessionId, env) ||
|
|
55
|
-
owner.harness_process === undefined || processIdentityLiveness(owner.harness_process) !== 'alive')
|
|
56
|
-
return false;
|
|
57
|
-
// Aborting fences its turn; it does not cancel pending User input.
|
|
58
|
-
return activity === 'idle' || activity === 'aborted' ||
|
|
59
|
-
(activity === 'unknown' && monotonic() - unknownSince >= 6_000);
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=codex-input-lifecycle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-input-lifecycle.js","sourceRoot":"","sources":["../src/codex-input-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export type CodexControlMethod = 'thread/queue/list' | 'thread/queue/add' | 'thread/queue/delete' | 'thread/turns/list' | 'turn/steer';
|
|
2
|
-
export interface CodexControl {
|
|
3
|
-
namespace: string;
|
|
4
|
-
threadId: string;
|
|
5
|
-
call(method: CodexControlMethod, params: unknown): Promise<unknown>;
|
|
6
|
-
close(): void;
|
|
7
|
-
}
|
|
8
|
-
/** Positive evidence that this request sent no bytes. RPC refusal is uncertain. */
|
|
9
|
-
export declare class CodexControlNotSent extends Error {
|
|
10
|
-
}
|
|
11
|
-
/** Discovery proves a running endpoint, its namespace and an already loaded
|
|
12
|
-
* thread. It never loads, resumes or takes ownership of a thread. */
|
|
13
|
-
export declare function connectCodexControl(sessionId: string, env: NodeJS.ProcessEnv, deadlineAt: number, now?: () => number, unavailable?: (stage: string) => void): Promise<CodexControl | null>;
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/** Verified existing Codex connection shared by queue and answer adapters. */
|
|
2
|
-
import { execFile } from 'node:child_process';
|
|
3
|
-
import { lstatSync, realpathSync } from 'node:fs';
|
|
4
|
-
import { promisify } from 'node:util';
|
|
5
|
-
import WebSocket from 'ws';
|
|
6
|
-
import { codexHome } from './codex-wake.js';
|
|
7
|
-
const execute = promisify(execFile);
|
|
8
|
-
/** Positive evidence that this request sent no bytes. RPC refusal is uncertain. */
|
|
9
|
-
export class CodexControlNotSent extends Error {
|
|
10
|
-
}
|
|
11
|
-
/** Discovery proves a running endpoint, its namespace and an already loaded
|
|
12
|
-
* thread. It never loads, resumes or takes ownership of a thread. */
|
|
13
|
-
export async function connectCodexControl(sessionId, env, deadlineAt, now = () => performance.now(), unavailable) {
|
|
14
|
-
let socket;
|
|
15
|
-
let stage = 'discovery';
|
|
16
|
-
try {
|
|
17
|
-
const remaining = () => Math.max(1, Math.ceil(deadlineAt - now()));
|
|
18
|
-
const { stdout } = await execute('codex', ['app-server', 'daemon', 'version'], {
|
|
19
|
-
env, timeout: remaining(), maxBuffer: 16_384,
|
|
20
|
-
});
|
|
21
|
-
const version = JSON.parse(stdout);
|
|
22
|
-
if (version.status !== 'running' || typeof version.socketPath !== 'string')
|
|
23
|
-
throw new Error('No running daemon');
|
|
24
|
-
stage = 'endpoint';
|
|
25
|
-
const socketPath = realpathSync(version.socketPath);
|
|
26
|
-
const endpoint = lstatSync(socketPath);
|
|
27
|
-
if (!endpoint.isSocket() || (process.getuid !== undefined && endpoint.uid !== process.getuid()))
|
|
28
|
-
throw new Error('Endpoint ownership unavailable');
|
|
29
|
-
stage = 'connection';
|
|
30
|
-
const home = realpathSync(codexHome(env));
|
|
31
|
-
socket = new WebSocket(`ws+unix://${socketPath}:/`, { maxPayload: 2 * 1024 * 1024 });
|
|
32
|
-
const connected = socket;
|
|
33
|
-
const timer = setTimeout(() => connected.terminate(), remaining());
|
|
34
|
-
connected.once('close', () => clearTimeout(timer));
|
|
35
|
-
let seq = 0;
|
|
36
|
-
const pending = new Map();
|
|
37
|
-
const fail = (error) => { for (const p of pending.values())
|
|
38
|
-
p.reject(error); pending.clear(); };
|
|
39
|
-
connected.on('error', fail);
|
|
40
|
-
connected.on('close', () => fail(new Error('Native queue connection closed; acceptance unknown')));
|
|
41
|
-
connected.on('message', raw => {
|
|
42
|
-
let value;
|
|
43
|
-
try {
|
|
44
|
-
value = JSON.parse(raw.toString());
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (value === null || typeof value !== 'object' || typeof value.id !== 'number')
|
|
50
|
-
return;
|
|
51
|
-
const waiting = pending.get(value.id);
|
|
52
|
-
if (waiting === undefined)
|
|
53
|
-
return;
|
|
54
|
-
pending.delete(value.id);
|
|
55
|
-
if (value.error !== undefined)
|
|
56
|
-
waiting.reject(new Error('Native queue RPC refused; acceptance not established'));
|
|
57
|
-
else
|
|
58
|
-
waiting.resolve(value.result);
|
|
59
|
-
});
|
|
60
|
-
await new Promise((resolve, reject) => {
|
|
61
|
-
connected.once('open', resolve);
|
|
62
|
-
connected.once('error', reject);
|
|
63
|
-
connected.once('close', () => reject(new Error('Native queue unavailable')));
|
|
64
|
-
});
|
|
65
|
-
const call = (method, params) => {
|
|
66
|
-
try {
|
|
67
|
-
const current = lstatSync(socketPath);
|
|
68
|
-
if (realpathSync(version.socketPath) !== socketPath || current.dev !== endpoint.dev ||
|
|
69
|
-
current.ino !== endpoint.ino || now() >= deadlineAt || connected.readyState !== WebSocket.OPEN) {
|
|
70
|
-
throw new Error('Native queue endpoint, connection or deadline changed');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
return Promise.reject(new CodexControlNotSent('Native queue request was not sent'));
|
|
75
|
-
}
|
|
76
|
-
const id = ++seq;
|
|
77
|
-
return new Promise((resolve, reject) => {
|
|
78
|
-
pending.set(id, { resolve, reject });
|
|
79
|
-
connected.send(JSON.stringify({ id, method, params }), error => {
|
|
80
|
-
if (error) {
|
|
81
|
-
pending.delete(id);
|
|
82
|
-
reject(error);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
};
|
|
87
|
-
stage = 'initialize';
|
|
88
|
-
const initialized = await call('initialize', { clientInfo: { name: 'notifai_control', version: '1' }, capabilities: { experimentalApi: true } });
|
|
89
|
-
stage = 'namespace';
|
|
90
|
-
if (initialized.codexHome === undefined || realpathSync(initialized.codexHome) !== home)
|
|
91
|
-
throw new Error('Different native queue namespace');
|
|
92
|
-
connected.send(JSON.stringify({ method: 'initialized', params: {} }));
|
|
93
|
-
stage = 'loaded-thread';
|
|
94
|
-
let loaded = false;
|
|
95
|
-
let loadedCursor = null;
|
|
96
|
-
for (let page = 0; page < 16; page += 1) {
|
|
97
|
-
const result = await call('thread/loaded/list', loadedCursor === null ? {} : { cursor: loadedCursor });
|
|
98
|
-
if (!Array.isArray(result.data))
|
|
99
|
-
throw new Error('Unrecognized loaded-thread response');
|
|
100
|
-
if (result.data.includes(sessionId)) {
|
|
101
|
-
loaded = true;
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
if (result.nextCursor == null)
|
|
105
|
-
break;
|
|
106
|
-
if (result.nextCursor === loadedCursor)
|
|
107
|
-
throw new Error('Unrecognized loaded-thread cursor');
|
|
108
|
-
loadedCursor = result.nextCursor;
|
|
109
|
-
}
|
|
110
|
-
if (!loaded)
|
|
111
|
-
throw new Error('Exact owner thread is not loaded; refuse to load it');
|
|
112
|
-
return { namespace: home, threadId: sessionId, call, close: () => connected.terminate() };
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
socket?.terminate();
|
|
116
|
-
unavailable?.(stage);
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=codex-native-control.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-native-control.js","sourceRoot":"","sources":["../src/codex-native-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export interface NativeTurnSnapshot {
|
|
2
|
-
file: string;
|
|
3
|
-
identity: string;
|
|
4
|
-
size: number;
|
|
5
|
-
latest: {
|
|
6
|
-
id: string;
|
|
7
|
-
offset: number;
|
|
8
|
-
ended: boolean;
|
|
9
|
-
outcome?: 'completed' | 'aborted';
|
|
10
|
-
};
|
|
11
|
-
positions: Map<string, number>;
|
|
12
|
-
/** Only populated by explicit question observation, never by activity polling. */
|
|
13
|
-
questions?: NativeQuestionEmission[];
|
|
14
|
-
}
|
|
15
|
-
export interface NativeQuestionEmission {
|
|
16
|
-
/** Byte position of the actual tool call, used to reject pre-registration calls. */
|
|
17
|
-
offset: number;
|
|
18
|
-
turn_id: string;
|
|
19
|
-
call_id: string;
|
|
20
|
-
index: number;
|
|
21
|
-
title: string;
|
|
22
|
-
options?: string[];
|
|
23
|
-
accepted: boolean;
|
|
24
|
-
}
|
|
25
|
-
/** Bounded filename discovery for an existing owner during an explicit update.
|
|
26
|
-
* The reader below still verifies native metadata; filenames are not identity.
|
|
27
|
-
*/
|
|
28
|
-
export declare function findNativeTranscript(sessionId: string, env: NodeJS.ProcessEnv): string | null;
|
|
29
|
-
/** Unknown, replaced, partial or unowned records never supply activity evidence. */
|
|
30
|
-
export declare function readNativeTurnSnapshot(file: unknown, sessionId: string, env: NodeJS.ProcessEnv): NativeTurnSnapshot | null;
|
|
31
|
-
/** Observe actual native async-question calls plus their acceptance receipts.
|
|
32
|
-
* User messages, quoted examples and injected app-answer envelopes are never
|
|
33
|
-
* question emissions. This reads only the same owned, stable bounded tail.
|
|
34
|
-
*/
|
|
35
|
-
export declare function readNativeQuestionSnapshot(file: unknown, sessionId: string, env: NodeJS.ProcessEnv): NativeTurnSnapshot | null;
|
|
36
|
-
/** Ownership can be proved even when a long turn exceeds the activity bound. */
|
|
37
|
-
export declare function nativeTranscriptOwned(file: unknown, sessionId: string, env: NodeJS.ProcessEnv): boolean;
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/** Read typed lifecycle and optional question records from an owned native transcript. */
|
|
2
|
-
import { closeSync, constants, fstatSync, lstatSync, openSync, readSync, realpathSync, readdirSync } from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { configHome } from './install-hooks.js';
|
|
5
|
-
const HEADER_BYTES = 64 * 1024;
|
|
6
|
-
const TAIL_BYTES = 8 * 1024 * 1024;
|
|
7
|
-
/** Bounded filename discovery for an existing owner during an explicit update.
|
|
8
|
-
* The reader below still verifies native metadata; filenames are not identity.
|
|
9
|
-
*/
|
|
10
|
-
export function findNativeTranscript(sessionId, env) {
|
|
11
|
-
if (!/^[0-9a-f-]{36}$/i.test(sessionId))
|
|
12
|
-
return null;
|
|
13
|
-
const matches = [];
|
|
14
|
-
let remaining = 50_000;
|
|
15
|
-
const visit = (directory, depth) => {
|
|
16
|
-
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
|
17
|
-
if (--remaining < 0)
|
|
18
|
-
throw new Error('discovery-bound');
|
|
19
|
-
const file = path.join(directory, entry.name);
|
|
20
|
-
if (entry.isDirectory() && depth < 3)
|
|
21
|
-
visit(file, depth + 1);
|
|
22
|
-
else if (entry.isFile() && entry.name.endsWith(`-${sessionId}.jsonl`))
|
|
23
|
-
matches.push(file);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
try {
|
|
27
|
-
visit(path.join(configHome(env, 'CODEX_HOME', '.codex'), 'sessions'), 0);
|
|
28
|
-
return matches.length === 1 ? matches[0] : null;
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/** Unknown, replaced, partial or unowned records never supply activity evidence. */
|
|
35
|
-
export function readNativeTurnSnapshot(file, sessionId, env) {
|
|
36
|
-
const observed = readNativeTranscript(file, sessionId, env, false);
|
|
37
|
-
return observed !== null && 'latest' in observed ? observed : null;
|
|
38
|
-
}
|
|
39
|
-
/** Observe actual native async-question calls plus their acceptance receipts.
|
|
40
|
-
* User messages, quoted examples and injected app-answer envelopes are never
|
|
41
|
-
* question emissions. This reads only the same owned, stable bounded tail.
|
|
42
|
-
*/
|
|
43
|
-
export function readNativeQuestionSnapshot(file, sessionId, env) {
|
|
44
|
-
const observed = readNativeTranscript(file, sessionId, env, false, true);
|
|
45
|
-
return observed !== null && 'latest' in observed ? observed : null;
|
|
46
|
-
}
|
|
47
|
-
/** Ownership can be proved even when a long turn exceeds the activity bound. */
|
|
48
|
-
export function nativeTranscriptOwned(file, sessionId, env) {
|
|
49
|
-
return readNativeTranscript(file, sessionId, env, true) !== null;
|
|
50
|
-
}
|
|
51
|
-
function readNativeTranscript(file, sessionId, env, identityOnly, includeQuestions = false) {
|
|
52
|
-
if (typeof file !== 'string' || !path.isAbsolute(file))
|
|
53
|
-
return null;
|
|
54
|
-
let fd;
|
|
55
|
-
try {
|
|
56
|
-
const sessions = realpathSync(path.join(configHome(env, 'CODEX_HOME', '.codex'), 'sessions'));
|
|
57
|
-
const canonical = realpathSync(file);
|
|
58
|
-
if (lstatSync(file).isSymbolicLink() || !canonical.startsWith(`${sessions}${path.sep}`))
|
|
59
|
-
return null;
|
|
60
|
-
fd = openSync(canonical, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
61
|
-
const stat = fstatSync(fd);
|
|
62
|
-
if (!stat.isFile() || stat.size === 0)
|
|
63
|
-
return null;
|
|
64
|
-
const read = (at, count) => {
|
|
65
|
-
const bytes = Buffer.alloc(count);
|
|
66
|
-
const length = readSync(fd, bytes, 0, count, at);
|
|
67
|
-
return bytes.subarray(0, length);
|
|
68
|
-
};
|
|
69
|
-
const header = read(0, Math.min(HEADER_BYTES, stat.size)).toString('utf8');
|
|
70
|
-
const newline = header.indexOf('\n');
|
|
71
|
-
if (newline < 0)
|
|
72
|
-
return null;
|
|
73
|
-
const meta = JSON.parse(header.slice(0, newline));
|
|
74
|
-
if (meta.type !== 'session_meta' || meta.payload?.id !== sessionId ||
|
|
75
|
-
!['cli', 'vscode', 'exec'].includes(String(meta.payload.source)))
|
|
76
|
-
return null;
|
|
77
|
-
if (identityOnly)
|
|
78
|
-
return { file: canonical, identity: `${stat.dev}:${stat.ino}` };
|
|
79
|
-
const at = Math.max(0, stat.size - TAIL_BYTES);
|
|
80
|
-
const bytes = read(at, stat.size - at);
|
|
81
|
-
// A trailing partial record may be a newer start: do not report an older one.
|
|
82
|
-
if (bytes.length !== stat.size - at || bytes.at(-1) !== 10)
|
|
83
|
-
return null;
|
|
84
|
-
let offset = at === 0 ? 0 : bytes.indexOf(10) + 1;
|
|
85
|
-
if (at > 0 && offset === 0)
|
|
86
|
-
return null;
|
|
87
|
-
let latest;
|
|
88
|
-
const positions = new Map();
|
|
89
|
-
const questions = [];
|
|
90
|
-
const questionCalls = new Set();
|
|
91
|
-
const outputs = new Map();
|
|
92
|
-
while (offset < bytes.length) {
|
|
93
|
-
const end = bytes.indexOf(10, offset);
|
|
94
|
-
if (end < 0)
|
|
95
|
-
return null;
|
|
96
|
-
const line = bytes.subarray(offset, end).toString('utf8');
|
|
97
|
-
// Conversation records are skipped without parsing or retaining their payload.
|
|
98
|
-
if (line.includes('"event_msg"')) {
|
|
99
|
-
const record = JSON.parse(line);
|
|
100
|
-
const event = record.type === 'event_msg' ? record.payload : undefined;
|
|
101
|
-
if (event?.type === 'task_started' && typeof event.turn_id === 'string') {
|
|
102
|
-
latest = { id: event.turn_id, offset: at + offset, ended: false };
|
|
103
|
-
positions.set(event.turn_id, at + offset);
|
|
104
|
-
}
|
|
105
|
-
else if (latest !== undefined && event?.turn_id === latest.id &&
|
|
106
|
-
['task_complete', 'turn_aborted'].includes(event.type ?? '')) {
|
|
107
|
-
latest.ended = true;
|
|
108
|
-
latest.outcome = event.type === 'turn_aborted' ? 'aborted' : 'completed';
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
if (includeQuestions && line.includes('"response_item"')) {
|
|
112
|
-
const record = JSON.parse(line);
|
|
113
|
-
const item = record.type === 'response_item' ? record.payload : undefined;
|
|
114
|
-
if (latest !== undefined && item?.type === 'function_call' && item.name === 'request_user_input_async') {
|
|
115
|
-
if (latest.ended || typeof item.call_id !== 'string' || item.call_id.trim() === '' ||
|
|
116
|
-
questionCalls.has(item.call_id) || typeof item.arguments !== 'string')
|
|
117
|
-
return null;
|
|
118
|
-
questionCalls.add(item.call_id);
|
|
119
|
-
const args = JSON.parse(item.arguments);
|
|
120
|
-
if (!Array.isArray(args.questions) || args.questions.length === 0)
|
|
121
|
-
return null;
|
|
122
|
-
for (const [index, question] of args.questions.entries()) {
|
|
123
|
-
if (question === null || typeof question.title !== 'string' ||
|
|
124
|
-
(question.options !== undefined && (!Array.isArray(question.options) || !question.options.every(option => typeof option === 'string'))))
|
|
125
|
-
return null;
|
|
126
|
-
questions.push({ offset: at + offset, turn_id: latest.id, call_id: item.call_id, index, title: question.title,
|
|
127
|
-
...(question.options === undefined ? {} : { options: question.options }), accepted: false });
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else if (item?.type === 'function_call_output' && typeof item.call_id === 'string' &&
|
|
131
|
-
questions.some(question => question.call_id === item.call_id)) {
|
|
132
|
-
// Missing, conflicting or repeated receipts cannot prove one emission.
|
|
133
|
-
if (outputs.has(item.call_id) || typeof item.output !== 'string')
|
|
134
|
-
return null;
|
|
135
|
-
const output = JSON.parse(item.output);
|
|
136
|
-
outputs.set(item.call_id, output?.accepted === true);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
offset = end + 1;
|
|
140
|
-
}
|
|
141
|
-
const after = fstatSync(fd);
|
|
142
|
-
if (latest === undefined || after.size !== stat.size || after.mtimeMs !== stat.mtimeMs)
|
|
143
|
-
return null;
|
|
144
|
-
return { file: canonical, identity: `${stat.dev}:${stat.ino}`, size: stat.size, latest, positions,
|
|
145
|
-
...(includeQuestions ? { questions: questions.map(question => ({ ...question, accepted: outputs.get(question.call_id) === true })) } : {}) };
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
finally {
|
|
151
|
-
if (fd !== undefined)
|
|
152
|
-
closeSync(fd);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=codex-native-turn.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-native-turn.js","sourceRoot":"","sources":["../src/codex-native-turn.ts"],"names":[],"mappings":"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"}
|