@raidiant/notifai 11.7.1 → 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 +48 -0
- 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,77 +0,0 @@
|
|
|
1
|
-
import { lstatSync, readFileSync } from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { atomicWriteFileSync } from './atomic-file.js';
|
|
4
|
-
import { stateDir } from './config.js';
|
|
5
|
-
import { withFileLock } from './file-lock.js';
|
|
6
|
-
import { newerPublishedCli, publishedCliDistTags, shouldConsultCliRegistry, thisCliVersion } from './cli-release.js';
|
|
7
|
-
import { CLI_UPDATE_AVAILABLE } from './cli-contract.js';
|
|
8
|
-
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
9
|
-
const NOTICE_INTERVAL_MS = 7 * CHECK_INTERVAL_MS;
|
|
10
|
-
function readState(file) {
|
|
11
|
-
try {
|
|
12
|
-
const stat = lstatSync(file);
|
|
13
|
-
if (!stat.isFile() || stat.size > 1024)
|
|
14
|
-
throw new Error('invalid update notice state');
|
|
15
|
-
const value = JSON.parse(readFileSync(file, 'utf8'));
|
|
16
|
-
if (typeof value !== 'object' || value === null)
|
|
17
|
-
throw new Error('invalid update notice state');
|
|
18
|
-
const state = value;
|
|
19
|
-
for (const timestamp of [state.checked_at, state.notified_at]) {
|
|
20
|
-
if (timestamp !== undefined && (!Number.isSafeInteger(timestamp) || timestamp < 0)) {
|
|
21
|
-
throw new Error('invalid update notice timestamp');
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return state;
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
if (error.code === 'ENOENT')
|
|
28
|
-
return {};
|
|
29
|
-
throw error;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
function recent(timestamp, now, interval) {
|
|
33
|
-
// A clock rollback must not create another notice.
|
|
34
|
-
return timestamp !== undefined && now - timestamp < interval;
|
|
35
|
-
}
|
|
36
|
-
/** One optional notice per machine-local state directory, across roots and harnesses. */
|
|
37
|
-
export async function agentUpdateNotice(options) {
|
|
38
|
-
if (!shouldConsultCliRegistry({ env: options.env }))
|
|
39
|
-
return undefined;
|
|
40
|
-
const file = path.join(stateDir(options.env), 'cli-update-notice.json');
|
|
41
|
-
const save = (state) => atomicWriteFileSync(file, `${JSON.stringify(state)}\n`);
|
|
42
|
-
try {
|
|
43
|
-
// Claim the lookup before doing network I/O. Another process neither waits
|
|
44
|
-
// for the registry nor emits a duplicate. Only short disk work holds a lock.
|
|
45
|
-
const claimed = withFileLock(`${file}.lock`, () => {
|
|
46
|
-
const state = readState(file);
|
|
47
|
-
if (recent(state.notified_at, options.now, NOTICE_INTERVAL_MS) ||
|
|
48
|
-
recent(state.checked_at, options.now, CHECK_INTERVAL_MS))
|
|
49
|
-
return false;
|
|
50
|
-
save({ ...state, checked_at: options.now });
|
|
51
|
-
return true;
|
|
52
|
-
}, { waitMs: 50 });
|
|
53
|
-
if (!claimed)
|
|
54
|
-
return undefined;
|
|
55
|
-
const tags = await publishedCliDistTags(options.fetchImpl, { useCache: false });
|
|
56
|
-
if (newerPublishedCli(thisCliVersion(), tags) === null)
|
|
57
|
-
return undefined;
|
|
58
|
-
const notify = withFileLock(`${file}.lock`, () => {
|
|
59
|
-
const state = readState(file);
|
|
60
|
-
if (recent(state.notified_at, options.now, NOTICE_INTERVAL_MS))
|
|
61
|
-
return false;
|
|
62
|
-
save({ ...state, notified_at: options.now });
|
|
63
|
-
return true;
|
|
64
|
-
}, { waitMs: 50 });
|
|
65
|
-
if (!notify)
|
|
66
|
-
return undefined;
|
|
67
|
-
return `${CLI_UPDATE_AVAILABLE} Run \`notifai update --check --json\`, read the release notes, and briefly offer to perform the update at a natural pause. ` +
|
|
68
|
-
`When authorized, use \`${options.updateCommand}\` and follow the new CLI guidance and session handoff. ` +
|
|
69
|
-
'Follow the User\'s instructions about updating; keep working if deferred. ' +
|
|
70
|
-
'Do not send a Notification Request just for this notice. It appears at most once every seven days on this machine.';
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// Update discovery must never interrupt lifecycle guidance or routing.
|
|
74
|
-
return undefined;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=agent-update-notice.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-update-notice.js","sourceRoot":"","sources":["../src/agent-update-notice.ts"],"names":[],"mappings":"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"}
|
package/dist/atomic-file.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface AtomicWriteOptions {
|
|
2
|
-
/** Mode for a newly created file. Existing regular files keep their mode. */
|
|
3
|
-
mode?: number;
|
|
4
|
-
/** False when a managed executable must keep the requested mode on repair. */
|
|
5
|
-
preserveMode?: boolean;
|
|
6
|
-
/** Reject a target owned by another user instead of replacing it. */
|
|
7
|
-
requireCurrentUserOwner?: boolean;
|
|
8
|
-
/**
|
|
9
|
-
* POSIX directory mode applied to the parent. Defaults to 0o700 when
|
|
10
|
-
* `requireCurrentUserOwner` is set so credential and config dirs match the
|
|
11
|
-
* hook-adapter and log directories.
|
|
12
|
-
*/
|
|
13
|
-
directoryMode?: number;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Replace one regular file without exposing a truncated intermediate state.
|
|
17
|
-
*
|
|
18
|
-
* The temporary file is a unique sibling, so rename is atomic on every
|
|
19
|
-
* supported filesystem. The contents are flushed before the rename, and a
|
|
20
|
-
* symlink target is refused instead of silently writing through it.
|
|
21
|
-
*/
|
|
22
|
-
export declare function atomicWriteFileSync(file: string, contents: string | Uint8Array, options?: AtomicWriteOptions): void;
|
|
23
|
-
/**
|
|
24
|
-
* Create (or tighten) a directory that must not be world-readable.
|
|
25
|
-
*
|
|
26
|
-
* `mkdir` mode applies only to a newly created leaf, so an existing 0755
|
|
27
|
-
* credential directory would otherwise stay world-listable. POSIX chmod of
|
|
28
|
-
* the leaf is the matching repair; Windows has no equivalent mode bits.
|
|
29
|
-
*/
|
|
30
|
-
export declare function ensurePrivateDirectory(directory: string): void;
|
package/dist/atomic-file.js
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { randomBytes } from 'node:crypto';
|
|
2
|
-
import { chmodSync, closeSync, fsyncSync, lstatSync, mkdirSync, openSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
/**
|
|
5
|
-
* Replace one regular file without exposing a truncated intermediate state.
|
|
6
|
-
*
|
|
7
|
-
* The temporary file is a unique sibling, so rename is atomic on every
|
|
8
|
-
* supported filesystem. The contents are flushed before the rename, and a
|
|
9
|
-
* symlink target is refused instead of silently writing through it.
|
|
10
|
-
*/
|
|
11
|
-
export function atomicWriteFileSync(file, contents, options = {}) {
|
|
12
|
-
const directory = path.dirname(file);
|
|
13
|
-
const requireCurrentUserOwner = options.requireCurrentUserOwner ?? false;
|
|
14
|
-
const directoryMode = options.directoryMode ?? (requireCurrentUserOwner ? 0o700 : undefined);
|
|
15
|
-
const parent = ensureDirectory(directory, {
|
|
16
|
-
requireCurrentUserOwner,
|
|
17
|
-
...(directoryMode === undefined ? {} : { mode: directoryMode }),
|
|
18
|
-
});
|
|
19
|
-
const target = targetMetadata(file, options.mode ?? 0o600, options.preserveMode ?? true, options.requireCurrentUserOwner ?? false);
|
|
20
|
-
const temp = path.join(directory, `.${path.basename(file)}.notifai-${process.pid}-${randomBytes(6).toString('hex')}.tmp`);
|
|
21
|
-
let handle;
|
|
22
|
-
try {
|
|
23
|
-
handle = openSync(temp, 'wx', target.mode);
|
|
24
|
-
writeFileSync(handle, contents);
|
|
25
|
-
fsyncSync(handle);
|
|
26
|
-
closeSync(handle);
|
|
27
|
-
handle = undefined;
|
|
28
|
-
// Creation may already have the exact mode. Avoid a redundant operation
|
|
29
|
-
// that a sandbox can forbid while still allowing the private write.
|
|
30
|
-
if ((lstatSync(temp).mode & 0o7777) !== target.mode)
|
|
31
|
-
chmodSync(temp, target.mode);
|
|
32
|
-
assertSameDirectory(directory, parent);
|
|
33
|
-
assertUnchangedTarget(file, target);
|
|
34
|
-
renameSync(temp, file);
|
|
35
|
-
syncDirectory(directory);
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
if (handle !== undefined)
|
|
39
|
-
closeSync(handle);
|
|
40
|
-
try {
|
|
41
|
-
unlinkSync(temp);
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// Preserve the original error; the temp may not have been created.
|
|
45
|
-
}
|
|
46
|
-
throw err;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Create (or tighten) a directory that must not be world-readable.
|
|
51
|
-
*
|
|
52
|
-
* `mkdir` mode applies only to a newly created leaf, so an existing 0755
|
|
53
|
-
* credential directory would otherwise stay world-listable. POSIX chmod of
|
|
54
|
-
* the leaf is the matching repair; Windows has no equivalent mode bits.
|
|
55
|
-
*/
|
|
56
|
-
export function ensurePrivateDirectory(directory) {
|
|
57
|
-
ensureDirectory(directory, { mode: 0o700, requireCurrentUserOwner: false });
|
|
58
|
-
}
|
|
59
|
-
function ensureDirectory(directory, options) {
|
|
60
|
-
if (options.mode === undefined)
|
|
61
|
-
mkdirSync(directory, { recursive: true });
|
|
62
|
-
else
|
|
63
|
-
mkdirSync(directory, { recursive: true, mode: options.mode });
|
|
64
|
-
const parent = safeDirectory(directory, options.requireCurrentUserOwner);
|
|
65
|
-
if (options.mode !== undefined &&
|
|
66
|
-
process.platform !== 'win32' &&
|
|
67
|
-
parent.mode !== options.mode) {
|
|
68
|
-
chmodSync(directory, options.mode);
|
|
69
|
-
}
|
|
70
|
-
return parent;
|
|
71
|
-
}
|
|
72
|
-
/** Persist the published directory entry where the host supports directory fsync. */
|
|
73
|
-
function syncDirectory(directory) {
|
|
74
|
-
if (process.platform === 'win32')
|
|
75
|
-
return;
|
|
76
|
-
const handle = openSync(directory, 'r');
|
|
77
|
-
try {
|
|
78
|
-
fsyncSync(handle);
|
|
79
|
-
}
|
|
80
|
-
finally {
|
|
81
|
-
closeSync(handle);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
function targetMetadata(file, fallback, preserveMode, requireCurrentUserOwner) {
|
|
85
|
-
let stat;
|
|
86
|
-
try {
|
|
87
|
-
stat = lstatSync(file);
|
|
88
|
-
}
|
|
89
|
-
catch (err) {
|
|
90
|
-
if (err.code === 'ENOENT') {
|
|
91
|
-
return { mode: fallback, identity: null };
|
|
92
|
-
}
|
|
93
|
-
throw err;
|
|
94
|
-
}
|
|
95
|
-
if (stat.isSymbolicLink()) {
|
|
96
|
-
throw new Error(`${file} is a symlink; refusing to write through it. Replace it with a regular file, ` +
|
|
97
|
-
'or use a different state directory.');
|
|
98
|
-
}
|
|
99
|
-
if (!stat.isFile())
|
|
100
|
-
throw new Error(`${file} is not a regular file; refusing to replace it.`);
|
|
101
|
-
if (requireCurrentUserOwner)
|
|
102
|
-
assertCurrentUserOwns(file, stat.uid);
|
|
103
|
-
return {
|
|
104
|
-
mode: preserveMode ? stat.mode & 0o777 : fallback,
|
|
105
|
-
identity: { dev: stat.dev, ino: stat.ino },
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
function assertUnchangedTarget(file, target) {
|
|
109
|
-
let current;
|
|
110
|
-
try {
|
|
111
|
-
current = lstatSync(file);
|
|
112
|
-
}
|
|
113
|
-
catch (err) {
|
|
114
|
-
if (err.code === 'ENOENT' && target.identity === null)
|
|
115
|
-
return;
|
|
116
|
-
throw new Error(`${file} changed during the atomic write; refusing to replace it.`);
|
|
117
|
-
}
|
|
118
|
-
if (target.identity === null ||
|
|
119
|
-
current.dev !== target.identity.dev ||
|
|
120
|
-
current.ino !== target.identity.ino) {
|
|
121
|
-
throw new Error(`${file} changed during the atomic write; refusing to replace it.`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
function safeDirectory(directory, requireCurrentUserOwner) {
|
|
125
|
-
const stat = lstatSync(directory);
|
|
126
|
-
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
127
|
-
throw new Error(`${directory} is not a regular directory; refusing to write inside it.`);
|
|
128
|
-
}
|
|
129
|
-
if (requireCurrentUserOwner)
|
|
130
|
-
assertCurrentUserOwns(directory, stat.uid);
|
|
131
|
-
return { dev: stat.dev, ino: stat.ino, mode: stat.mode & 0o7777 };
|
|
132
|
-
}
|
|
133
|
-
function assertSameDirectory(directory, expected) {
|
|
134
|
-
const current = lstatSync(directory);
|
|
135
|
-
if (current.isSymbolicLink() ||
|
|
136
|
-
!current.isDirectory() ||
|
|
137
|
-
current.dev !== expected.dev ||
|
|
138
|
-
current.ino !== expected.ino) {
|
|
139
|
-
throw new Error(`${directory} changed during the write; refusing to publish the file.`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
function assertCurrentUserOwns(file, owner) {
|
|
143
|
-
const uid = typeof process.getuid === 'function' ? process.getuid() : undefined;
|
|
144
|
-
if (uid !== undefined && owner !== uid) {
|
|
145
|
-
throw new Error(`${file} is owned by uid ${owner}, not the current user; refusing to replace it.`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=atomic-file.js.map
|
package/dist/atomic-file.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-file.js","sourceRoot":"","sources":["../src/atomic-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type CommandDeps } from './commands-core.js';
|
|
2
|
-
/** Existing durable ownership is required; this path cannot create a session. */
|
|
3
|
-
export declare function recoveryOwner(deps: CommandDeps, sessionId: string, key: string): {
|
|
4
|
-
owner: import("./hook-session-state.js").SessionIncarnation;
|
|
5
|
-
cwd: string;
|
|
6
|
-
} | null;
|
|
7
|
-
/** Internal child entrypoint. It observes native data; it does not impersonate a hook. */
|
|
8
|
-
export declare function resumeAttendantCommand(deps: CommandDeps, sessionId: string, key: string): Promise<number>;
|
|
9
|
-
export interface AttendantActivation {
|
|
10
|
-
session_id: string;
|
|
11
|
-
state: 'current' | 'activated' | 'pending';
|
|
12
|
-
native_activity: boolean;
|
|
13
|
-
}
|
|
14
|
-
/** Called only by the authorized updater, after effective installation checks. */
|
|
15
|
-
export declare function activateInstalledAttendants(deps: CommandDeps, artifact: string): Promise<AttendantActivation[]>;
|
package/dist/attendant-update.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/** Explicit recovery of already-owned resident writers after an installation. */
|
|
2
|
-
import { spawn } from 'node:child_process';
|
|
3
|
-
import { readFileSync } from 'node:fs';
|
|
4
|
-
import { EXIT, log } from './commands-core.js';
|
|
5
|
-
import { attendHook, attendantGates, attendantRuntimeRevision } from './commands-hook-attend.js';
|
|
6
|
-
import { findNativeTranscript, nativeTranscriptOwned } from './codex-native-turn.js';
|
|
7
|
-
import { lifecycleStamp, readSessionIncarnation, readSessionState, sessionHasEnded } from './hook-session-state.js';
|
|
8
|
-
import { readClaimFile } from './hook-question-lock.js';
|
|
9
|
-
import { processExecutableName, processIdentityLiveness } from './process-identity.js';
|
|
10
|
-
import { attendantClaimPath, attendantStatusPath, codexNativeActivityObserved, listAttendantReports } from './session-attendant-state.js';
|
|
11
|
-
import { packageVersion } from './release.js';
|
|
12
|
-
import { codexTrustProblems, findInstallations } from './install-hooks.js';
|
|
13
|
-
/** Existing durable ownership is required; this path cannot create a session. */
|
|
14
|
-
export function recoveryOwner(deps, sessionId, key) {
|
|
15
|
-
const state = readSessionState(sessionId, deps.env);
|
|
16
|
-
const owner = readSessionIncarnation(sessionId, deps.env);
|
|
17
|
-
if (state.harness !== 'codex' || typeof state.activation_cwd !== 'string' ||
|
|
18
|
-
owner?.key !== key || owner.harness_process === undefined || sessionHasEnded(sessionId, deps.env) ||
|
|
19
|
-
processIdentityLiveness(owner.harness_process) !== 'alive' ||
|
|
20
|
-
processExecutableName(owner.harness_process.pid) !== 'codex')
|
|
21
|
-
return null;
|
|
22
|
-
return { owner, cwd: state.activation_cwd };
|
|
23
|
-
}
|
|
24
|
-
/** Internal child entrypoint. It observes native data; it does not impersonate a hook. */
|
|
25
|
-
export async function resumeAttendantCommand(deps, sessionId, key) {
|
|
26
|
-
const owned = recoveryOwner(deps, sessionId, key);
|
|
27
|
-
if (owned === null)
|
|
28
|
-
return EXIT.failed;
|
|
29
|
-
const transcript = readSessionState(sessionId, deps.env).codex_native_turn?.transcript_path ?? findNativeTranscript(sessionId, deps.env);
|
|
30
|
-
if (transcript === null || !nativeTranscriptOwned(transcript, sessionId, deps.env))
|
|
31
|
-
return EXIT.failed;
|
|
32
|
-
const installations = findInstallations(deps.env, deps.hookAdapterHome, deps.hookPlatform).filter(entry => entry.harness === 'codex');
|
|
33
|
-
if (installations.length === 0 || codexTrustProblems(installations, deps.env).length > 0)
|
|
34
|
-
return EXIT.failed;
|
|
35
|
-
const logger = log(deps);
|
|
36
|
-
logger.bind({ session: sessionId });
|
|
37
|
-
logger.info('attendant.state', { source: 'update-resume', phase: 'recovering' });
|
|
38
|
-
return attendHook(deps, {
|
|
39
|
-
envelope: { session_id: sessionId, cwd: owned.cwd }, harness: 'codex', cwd: owned.cwd,
|
|
40
|
-
invokedAt: lifecycleStamp(), logger,
|
|
41
|
-
recovery: { key, harnessProcess: owned.owner.harness_process, transcriptPath: transcript },
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
/** Called only by the authorized updater, after effective installation checks. */
|
|
45
|
-
export async function activateInstalledAttendants(deps, artifact) {
|
|
46
|
-
const reports = listAttendantReports(deps.env).filter(report => report.alive && readSessionState(report.session_id, deps.env).harness === 'codex');
|
|
47
|
-
// Each current owner is independent. Bound subprocess fanout and wall time.
|
|
48
|
-
return Promise.all(reports.map(async (report, index) => {
|
|
49
|
-
const sessionId = report.session_id;
|
|
50
|
-
const result = (state) => ({
|
|
51
|
-
session_id: sessionId, state, native_activity: codexNativeActivityObserved(sessionId, deps.env),
|
|
52
|
-
});
|
|
53
|
-
const current = readSessionIncarnation(sessionId, deps.env);
|
|
54
|
-
if (current === null || index >= 16)
|
|
55
|
-
return result('pending');
|
|
56
|
-
const owned = recoveryOwner(deps, sessionId, current.key);
|
|
57
|
-
if (owned === null || !attendantGates(deps, owned.cwd, sessionId, 'codex', packageVersion()).ok)
|
|
58
|
-
return result('pending');
|
|
59
|
-
const claimFile = attendantClaimPath(sessionId, deps.env);
|
|
60
|
-
const holder = readClaimFile(claimFile);
|
|
61
|
-
if (holder?.['runtime_revision'] === attendantRuntimeRevision && holder['runtime_version'] === packageVersion())
|
|
62
|
-
return result('current');
|
|
63
|
-
const transcript = readSessionState(sessionId, deps.env).codex_native_turn?.transcript_path ?? findNativeTranscript(sessionId, deps.env);
|
|
64
|
-
if (transcript === null || !nativeTranscriptOwned(transcript, sessionId, deps.env))
|
|
65
|
-
return result('pending');
|
|
66
|
-
let child;
|
|
67
|
-
try {
|
|
68
|
-
child = spawn(process.execPath, [artifact, 'attendant-resume', sessionId, current.key], {
|
|
69
|
-
cwd: owned.cwd, env: deps.env, detached: true, stdio: 'ignore', windowsHide: true,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
return result('pending');
|
|
74
|
-
}
|
|
75
|
-
let failed = false;
|
|
76
|
-
child.on('error', () => { failed = true; });
|
|
77
|
-
child.unref();
|
|
78
|
-
const until = performance.now() + 8_000;
|
|
79
|
-
while (!failed && performance.now() < until) {
|
|
80
|
-
const claim = readClaimFile(claimFile);
|
|
81
|
-
let active = {};
|
|
82
|
-
try {
|
|
83
|
-
active = JSON.parse(readFileSync(attendantStatusPath(sessionId, deps.env), 'utf8'));
|
|
84
|
-
}
|
|
85
|
-
catch { /* not started */ }
|
|
86
|
-
if (claim?.['runtime_revision'] === attendantRuntimeRevision && active.pid === claim['pid'] &&
|
|
87
|
-
['dormant', 'attending'].includes(active.phase ?? ''))
|
|
88
|
-
return result('activated');
|
|
89
|
-
if (recoveryOwner(deps, sessionId, current.key) === null)
|
|
90
|
-
break;
|
|
91
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
92
|
-
}
|
|
93
|
-
return result('pending');
|
|
94
|
-
}));
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=attendant-update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attendant-update.js","sourceRoot":"","sources":["../src/attendant-update.ts"],"names":[],"mappings":"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"}
|
package/dist/claude-wake.d.ts
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import type { EscalationDeliveryRoute } from './hook-types.js';
|
|
2
|
-
import { type WriteGuard } from './wake-support.js';
|
|
3
|
-
/** Claude Code's currently observed inbox protocol. Unknown versions fail closed. */
|
|
4
|
-
export declare const CLAUDE_PEER_PROTOCOL = 1;
|
|
5
|
-
/** The first Claude Code release that publishes a session inbox socket. */
|
|
6
|
-
export declare const CLAUDE_MIN_INBOX_VERSION = "2.1.224";
|
|
7
|
-
/** macOS verifies own-child ancestry only while the posting process is alive. */
|
|
8
|
-
export declare const CLAUDE_POST_SEND_LIVENESS_MS = 8000;
|
|
9
|
-
export interface ClaudeSessionDescriptor {
|
|
10
|
-
pid: number;
|
|
11
|
-
sessionId: string;
|
|
12
|
-
cwd: string;
|
|
13
|
-
startedAt: number;
|
|
14
|
-
procStart: string;
|
|
15
|
-
version: string;
|
|
16
|
-
peerProtocol: number;
|
|
17
|
-
messagingSocketPath: string;
|
|
18
|
-
status: string;
|
|
19
|
-
}
|
|
20
|
-
export interface ClaudeAgentObservation {
|
|
21
|
-
pid: number;
|
|
22
|
-
sessionId: string;
|
|
23
|
-
startedAt: number;
|
|
24
|
-
status: string;
|
|
25
|
-
}
|
|
26
|
-
export interface ClaudeWakeAdapters {
|
|
27
|
-
listAgents(): Promise<unknown>;
|
|
28
|
-
readDescriptor(pid: number): unknown;
|
|
29
|
-
/** With `guard`, a connection that is late or no longer writable writes nothing. */
|
|
30
|
-
sendSocket(socketPath: string, line: string, guard?: WriteGuard): Promise<void>;
|
|
31
|
-
/** `onSpawn` receives the resumed harness's own process group as soon as it exists. */
|
|
32
|
-
resume(sessionId: string, cwd: string, context: string, onSpawn?: (pgid: number) => void): Promise<void>;
|
|
33
|
-
sleep(milliseconds: number): Promise<void>;
|
|
34
|
-
}
|
|
35
|
-
export type ClaudeWakeObservation = {
|
|
36
|
-
state: 'live-idle' | 'live-busy';
|
|
37
|
-
descriptor: ClaudeSessionDescriptor;
|
|
38
|
-
} | {
|
|
39
|
-
state: 'stopped';
|
|
40
|
-
} | {
|
|
41
|
-
state: 'unknown';
|
|
42
|
-
reason: string;
|
|
43
|
-
};
|
|
44
|
-
/** A Claude Code session descriptor, or null when it has an unknown shape. */
|
|
45
|
-
export declare function parseDescriptor(value: unknown): ClaudeSessionDescriptor | null;
|
|
46
|
-
/**
|
|
47
|
-
* Observe one exact Claude Code session without guessing.
|
|
48
|
-
*
|
|
49
|
-
* `claude agents --json` is the liveness oracle: Claude Code itself validates
|
|
50
|
-
* each registry row against both PID and process start time before returning it.
|
|
51
|
-
* The descriptor supplies the socket and peer protocol, but is never trusted as
|
|
52
|
-
* proof that a process still owns the session.
|
|
53
|
-
*/
|
|
54
|
-
export declare function observeClaudeSession(sessionId: string, adapters: Pick<ClaudeWakeAdapters, 'listAgents' | 'readDescriptor'>): Promise<ClaudeWakeObservation>;
|
|
55
|
-
export type ClaudeInboxReadiness = {
|
|
56
|
-
state: 'ready';
|
|
57
|
-
socketPath: string;
|
|
58
|
-
version: string;
|
|
59
|
-
} | {
|
|
60
|
-
state: 'unavailable';
|
|
61
|
-
reason: string;
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Whether an answer could reach this exact Claude session over its inbox
|
|
65
|
-
* socket, decided from evidence already on disk.
|
|
66
|
-
*
|
|
67
|
-
* Read-only by construction: it reads the session descriptor and asks whether
|
|
68
|
-
* the socket file exists, and never connects to it. A diagnostic that delivers
|
|
69
|
-
* a message is not a diagnostic.
|
|
70
|
-
*
|
|
71
|
-
* Every negative answer here is a degradation, not a failure — the accepted
|
|
72
|
-
* journal still replays the answer at the session's next turn. What it buys is
|
|
73
|
-
* that the reason is nameable in advance instead of being discovered as
|
|
74
|
-
* silence. The common one is `--bare`, which binds no socket at all (and runs
|
|
75
|
-
* no hooks either, so nothing would have registered a question in the first
|
|
76
|
-
* place).
|
|
77
|
-
*/
|
|
78
|
-
export declare function inspectClaudeInbox(options: {
|
|
79
|
-
pid: number;
|
|
80
|
-
platform: NodeJS.Platform;
|
|
81
|
-
readDescriptor: (pid: number) => unknown;
|
|
82
|
-
socketExists: (socketPath: string) => boolean;
|
|
83
|
-
}): ClaudeInboxReadiness;
|
|
84
|
-
/**
|
|
85
|
-
* Claude's own-child delivery route.
|
|
86
|
-
*
|
|
87
|
-
* A successful socket write proves delivery to Claude Code, not model
|
|
88
|
-
* consumption — and this route reports exactly that, no more. It reports
|
|
89
|
-
* `delivered` all the same, because the write is the strongest acknowledgement
|
|
90
|
-
* this route can ever obtain: the message it posts starts a brand-new turn
|
|
91
|
-
* rather than continuing this one, so no later hook will confirm anything about
|
|
92
|
-
* it. An answer delivered once and settled is strictly better than an answer
|
|
93
|
-
* redelivered on every turn-end for ever.
|
|
94
|
-
*
|
|
95
|
-
* Every path that hands nothing over reports `held`, so the accepted journal
|
|
96
|
-
* replays it. Unknown state deliberately returns without throwing, so the
|
|
97
|
-
* journal becomes `hold-for-next-turn` instead of failing the hook. The
|
|
98
|
-
* in-place write is the hand-off shared with Session Messages
|
|
99
|
-
* (`session-handoff.ts`); only the cold resume of a stopped session belongs to
|
|
100
|
-
* this answer route.
|
|
101
|
-
*/
|
|
102
|
-
export declare function claudeWakeRoute(options: {
|
|
103
|
-
sessionId: string;
|
|
104
|
-
cwd: string;
|
|
105
|
-
sourcePid: number;
|
|
106
|
-
adapters?: ClaudeWakeAdapters;
|
|
107
|
-
}): EscalationDeliveryRoute;
|
|
108
|
-
export declare function systemClaudeWakeAdapters(env?: NodeJS.ProcessEnv): ClaudeWakeAdapters;
|