@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
package/dist/claude-wake.js
DELETED
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { createConnection } from 'node:net';
|
|
5
|
-
import { compareVersions } from './version.js';
|
|
6
|
-
import { claudeSourceDescriptor, deliverIntoClaudeSession } from './session-handoff.js';
|
|
7
|
-
import { WriteAbortedError, abortedDelivery, cancelledDelivery, holdForNextTurn, runWakeCommand, } from './wake-support.js';
|
|
8
|
-
/** Claude Code's currently observed inbox protocol. Unknown versions fail closed. */
|
|
9
|
-
export const CLAUDE_PEER_PROTOCOL = 1;
|
|
10
|
-
/** The first Claude Code release that publishes a session inbox socket. */
|
|
11
|
-
export const CLAUDE_MIN_INBOX_VERSION = '2.1.224';
|
|
12
|
-
/** The inbox socket is a Unix domain socket; no Windows implementation exists. */
|
|
13
|
-
const INBOX_PLATFORMS = new Set(['darwin', 'linux']);
|
|
14
|
-
/** macOS verifies own-child ancestry only while the posting process is alive. */
|
|
15
|
-
export const CLAUDE_POST_SEND_LIVENESS_MS = 8_000;
|
|
16
|
-
const LIVE_STATUSES = new Set(['idle', 'busy']);
|
|
17
|
-
function isRecord(value) {
|
|
18
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
19
|
-
}
|
|
20
|
-
function parseAgent(value) {
|
|
21
|
-
if (!isRecord(value))
|
|
22
|
-
return null;
|
|
23
|
-
if (typeof value['pid'] !== 'number' ||
|
|
24
|
-
!Number.isInteger(value['pid']) ||
|
|
25
|
-
value['pid'] <= 0 ||
|
|
26
|
-
typeof value['sessionId'] !== 'string' ||
|
|
27
|
-
value['sessionId'] === '' ||
|
|
28
|
-
typeof value['startedAt'] !== 'number' ||
|
|
29
|
-
!Number.isFinite(value['startedAt']) ||
|
|
30
|
-
typeof value['status'] !== 'string') {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
pid: value['pid'],
|
|
35
|
-
sessionId: value['sessionId'],
|
|
36
|
-
startedAt: value['startedAt'],
|
|
37
|
-
status: value['status'],
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
/** A Claude Code session descriptor, or null when it has an unknown shape. */
|
|
41
|
-
export function parseDescriptor(value) {
|
|
42
|
-
if (!isRecord(value))
|
|
43
|
-
return null;
|
|
44
|
-
if (typeof value['pid'] !== 'number' ||
|
|
45
|
-
!Number.isInteger(value['pid']) ||
|
|
46
|
-
value['pid'] <= 0 ||
|
|
47
|
-
typeof value['sessionId'] !== 'string' ||
|
|
48
|
-
value['sessionId'] === '' ||
|
|
49
|
-
typeof value['cwd'] !== 'string' ||
|
|
50
|
-
value['cwd'] === '' ||
|
|
51
|
-
typeof value['startedAt'] !== 'number' ||
|
|
52
|
-
!Number.isFinite(value['startedAt']) ||
|
|
53
|
-
typeof value['procStart'] !== 'string' ||
|
|
54
|
-
value['procStart'] === '' ||
|
|
55
|
-
typeof value['version'] !== 'string' ||
|
|
56
|
-
value['version'] === '' ||
|
|
57
|
-
typeof value['peerProtocol'] !== 'number' ||
|
|
58
|
-
!Number.isInteger(value['peerProtocol']) ||
|
|
59
|
-
typeof value['messagingSocketPath'] !== 'string' ||
|
|
60
|
-
value['messagingSocketPath'] === '' ||
|
|
61
|
-
typeof value['status'] !== 'string') {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
pid: value['pid'],
|
|
66
|
-
sessionId: value['sessionId'],
|
|
67
|
-
cwd: value['cwd'],
|
|
68
|
-
startedAt: value['startedAt'],
|
|
69
|
-
procStart: value['procStart'],
|
|
70
|
-
version: value['version'],
|
|
71
|
-
peerProtocol: value['peerProtocol'],
|
|
72
|
-
messagingSocketPath: value['messagingSocketPath'],
|
|
73
|
-
status: value['status'],
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Observe one exact Claude Code session without guessing.
|
|
78
|
-
*
|
|
79
|
-
* `claude agents --json` is the liveness oracle: Claude Code itself validates
|
|
80
|
-
* each registry row against both PID and process start time before returning it.
|
|
81
|
-
* The descriptor supplies the socket and peer protocol, but is never trusted as
|
|
82
|
-
* proof that a process still owns the session.
|
|
83
|
-
*/
|
|
84
|
-
export async function observeClaudeSession(sessionId, adapters) {
|
|
85
|
-
let listed;
|
|
86
|
-
try {
|
|
87
|
-
listed = await adapters.listAgents();
|
|
88
|
-
}
|
|
89
|
-
catch (err) {
|
|
90
|
-
return {
|
|
91
|
-
state: 'unknown',
|
|
92
|
-
reason: `claude agents probe failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
if (!Array.isArray(listed)) {
|
|
96
|
-
return { state: 'unknown', reason: 'claude agents returned an invalid document' };
|
|
97
|
-
}
|
|
98
|
-
const matchingRaw = listed.filter((value) => isRecord(value) && value['sessionId'] === sessionId);
|
|
99
|
-
if (matchingRaw.length === 0)
|
|
100
|
-
return { state: 'stopped' };
|
|
101
|
-
if (matchingRaw.length !== 1) {
|
|
102
|
-
return { state: 'unknown', reason: 'claude agents returned duplicate session owners' };
|
|
103
|
-
}
|
|
104
|
-
const agent = parseAgent(matchingRaw[0]);
|
|
105
|
-
if (agent === null) {
|
|
106
|
-
return { state: 'unknown', reason: 'claude agents returned an invalid matching row' };
|
|
107
|
-
}
|
|
108
|
-
let descriptorRaw;
|
|
109
|
-
try {
|
|
110
|
-
descriptorRaw = adapters.readDescriptor(agent.pid);
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
return {
|
|
114
|
-
state: 'unknown',
|
|
115
|
-
reason: `Claude session descriptor could not be read: ${err instanceof Error ? err.message : String(err)}`,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
const descriptor = parseDescriptor(descriptorRaw);
|
|
119
|
-
if (descriptor === null) {
|
|
120
|
-
return { state: 'unknown', reason: 'Claude session descriptor has an unknown shape' };
|
|
121
|
-
}
|
|
122
|
-
if (descriptor.pid !== agent.pid ||
|
|
123
|
-
descriptor.sessionId !== agent.sessionId ||
|
|
124
|
-
descriptor.startedAt !== agent.startedAt) {
|
|
125
|
-
return { state: 'unknown', reason: 'Claude liveness probe and descriptor disagree' };
|
|
126
|
-
}
|
|
127
|
-
if (descriptor.peerProtocol !== CLAUDE_PEER_PROTOCOL) {
|
|
128
|
-
return {
|
|
129
|
-
state: 'unknown',
|
|
130
|
-
reason: `unsupported Claude peer protocol ${descriptor.peerProtocol}`,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
if (!LIVE_STATUSES.has(agent.status)) {
|
|
134
|
-
return { state: 'unknown', reason: `Claude session status ${agent.status} is not wakeable` };
|
|
135
|
-
}
|
|
136
|
-
return {
|
|
137
|
-
state: agent.status === 'idle' ? 'live-idle' : 'live-busy',
|
|
138
|
-
descriptor,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Whether an answer could reach this exact Claude session over its inbox
|
|
143
|
-
* socket, decided from evidence already on disk.
|
|
144
|
-
*
|
|
145
|
-
* Read-only by construction: it reads the session descriptor and asks whether
|
|
146
|
-
* the socket file exists, and never connects to it. A diagnostic that delivers
|
|
147
|
-
* a message is not a diagnostic.
|
|
148
|
-
*
|
|
149
|
-
* Every negative answer here is a degradation, not a failure — the accepted
|
|
150
|
-
* journal still replays the answer at the session's next turn. What it buys is
|
|
151
|
-
* that the reason is nameable in advance instead of being discovered as
|
|
152
|
-
* silence. The common one is `--bare`, which binds no socket at all (and runs
|
|
153
|
-
* no hooks either, so nothing would have registered a question in the first
|
|
154
|
-
* place).
|
|
155
|
-
*/
|
|
156
|
-
export function inspectClaudeInbox(options) {
|
|
157
|
-
if (!INBOX_PLATFORMS.has(options.platform)) {
|
|
158
|
-
return {
|
|
159
|
-
state: 'unavailable',
|
|
160
|
-
reason: `Claude Code publishes no inbox socket on ${options.platform}; it exists on macOS and Linux only`,
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
let raw;
|
|
164
|
-
try {
|
|
165
|
-
raw = options.readDescriptor(options.pid);
|
|
166
|
-
}
|
|
167
|
-
catch (err) {
|
|
168
|
-
return {
|
|
169
|
-
state: 'unavailable',
|
|
170
|
-
reason: `no session descriptor for pid ${options.pid} (${err instanceof Error ? err.message : String(err)}); a session started with \`--bare\` binds no inbox socket`,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
const descriptor = parseDescriptor(raw);
|
|
174
|
-
if (descriptor === null) {
|
|
175
|
-
return {
|
|
176
|
-
state: 'unavailable',
|
|
177
|
-
reason: `the session descriptor for pid ${options.pid} has an unknown shape`,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
if (descriptor.peerProtocol !== CLAUDE_PEER_PROTOCOL) {
|
|
181
|
-
return {
|
|
182
|
-
state: 'unavailable',
|
|
183
|
-
reason: `this session speaks inbox protocol ${descriptor.peerProtocol}, and only ${CLAUDE_PEER_PROTOCOL} is known; refusing to guess at an undocumented wire format`,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
const versionComparison = compareVersions(descriptor.version, CLAUDE_MIN_INBOX_VERSION);
|
|
187
|
-
if (versionComparison === 'unparseable') {
|
|
188
|
-
return {
|
|
189
|
-
state: 'unavailable',
|
|
190
|
-
reason: `the Claude Code version ${descriptor.version} is not a recognised release number`,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
if (versionComparison === 'before') {
|
|
194
|
-
return {
|
|
195
|
-
state: 'unavailable',
|
|
196
|
-
reason: `Claude Code ${descriptor.version} is older than ${CLAUDE_MIN_INBOX_VERSION}, which is where the inbox socket starts`,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
if (!options.socketExists(descriptor.messagingSocketPath)) {
|
|
200
|
-
return {
|
|
201
|
-
state: 'unavailable',
|
|
202
|
-
reason: `the descriptor names ${descriptor.messagingSocketPath}, but no socket exists there`,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
return {
|
|
206
|
-
state: 'ready',
|
|
207
|
-
socketPath: descriptor.messagingSocketPath,
|
|
208
|
-
version: descriptor.version,
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Claude's own-child delivery route.
|
|
213
|
-
*
|
|
214
|
-
* A successful socket write proves delivery to Claude Code, not model
|
|
215
|
-
* consumption — and this route reports exactly that, no more. It reports
|
|
216
|
-
* `delivered` all the same, because the write is the strongest acknowledgement
|
|
217
|
-
* this route can ever obtain: the message it posts starts a brand-new turn
|
|
218
|
-
* rather than continuing this one, so no later hook will confirm anything about
|
|
219
|
-
* it. An answer delivered once and settled is strictly better than an answer
|
|
220
|
-
* redelivered on every turn-end for ever.
|
|
221
|
-
*
|
|
222
|
-
* Every path that hands nothing over reports `held`, so the accepted journal
|
|
223
|
-
* replays it. Unknown state deliberately returns without throwing, so the
|
|
224
|
-
* journal becomes `hold-for-next-turn` instead of failing the hook. The
|
|
225
|
-
* in-place write is the hand-off shared with Session Messages
|
|
226
|
-
* (`session-handoff.ts`); only the cold resume of a stopped session belongs to
|
|
227
|
-
* this answer route.
|
|
228
|
-
*/
|
|
229
|
-
export function claudeWakeRoute(options) {
|
|
230
|
-
const adapters = options.adapters ?? systemClaudeWakeAdapters();
|
|
231
|
-
const sourceDescriptor = claudeSourceDescriptor(options.sessionId, options.sourcePid, adapters);
|
|
232
|
-
return {
|
|
233
|
-
kind: 'inbox-socket',
|
|
234
|
-
async deliver(event) {
|
|
235
|
-
const written = await deliverIntoClaudeSession({
|
|
236
|
-
sessionId: options.sessionId,
|
|
237
|
-
sourcePid: options.sourcePid,
|
|
238
|
-
sourceDescriptor,
|
|
239
|
-
adapters,
|
|
240
|
-
text: event.context,
|
|
241
|
-
begin: () => event.commitDelivery(),
|
|
242
|
-
...(event.writeGuard === undefined ? {} : { guard: event.writeGuard }),
|
|
243
|
-
writer: 'Stop-hook process',
|
|
244
|
-
});
|
|
245
|
-
switch (written.status) {
|
|
246
|
-
case 'unavailable':
|
|
247
|
-
return holdForNextTurn(written.reason);
|
|
248
|
-
case 'cancelled':
|
|
249
|
-
return cancelledDelivery();
|
|
250
|
-
case 'aborted':
|
|
251
|
-
return abortedDelivery();
|
|
252
|
-
case 'failed':
|
|
253
|
-
// The write started; the waiter records the failure as it always has.
|
|
254
|
-
throw written.error;
|
|
255
|
-
case 'written':
|
|
256
|
-
return {
|
|
257
|
-
notes: [
|
|
258
|
-
written.sessionState === 'live-idle'
|
|
259
|
-
? 'posted the accepted answer to the live Claude session'
|
|
260
|
-
: 'queued the accepted answer for the busy Claude session',
|
|
261
|
-
],
|
|
262
|
-
log: {
|
|
263
|
-
route: 'inbox-socket',
|
|
264
|
-
stage: 'delivered',
|
|
265
|
-
session_state: written.sessionState,
|
|
266
|
-
},
|
|
267
|
-
// The write completed: Claude Code holds the message. Nothing later
|
|
268
|
-
// reports on it, so this is where the journal settles.
|
|
269
|
-
acknowledgement: 'delivered',
|
|
270
|
-
};
|
|
271
|
-
case 'stopped':
|
|
272
|
-
break;
|
|
273
|
-
}
|
|
274
|
-
// Probe immediately before spawn. A prior descriptor or dead socket is
|
|
275
|
-
// never sufficient: resuming a live session creates a divergent ghost.
|
|
276
|
-
const confirmed = await observeClaudeSession(options.sessionId, adapters);
|
|
277
|
-
if (confirmed.state !== 'stopped') {
|
|
278
|
-
const reason = confirmed.state === 'unknown'
|
|
279
|
-
? confirmed.reason
|
|
280
|
-
: 'the Claude session became live before cold resume';
|
|
281
|
-
return holdForNextTurn(reason);
|
|
282
|
-
}
|
|
283
|
-
// The resumed harness is a subprocess writer: its process group is
|
|
284
|
-
// journaled as soon as it exists, so its survival is never mistaken
|
|
285
|
-
// for a finished write.
|
|
286
|
-
if (!event.commitDelivery('subprocess'))
|
|
287
|
-
return cancelledDelivery();
|
|
288
|
-
// `stopped` is reported only with a proven source descriptor.
|
|
289
|
-
await adapters.resume(options.sessionId, sourceDescriptor.cwd, event.context, (pgid) => event.writerGroup?.(pgid));
|
|
290
|
-
return {
|
|
291
|
-
notes: ['cold-resumed the stopped Claude session with its accepted answer'],
|
|
292
|
-
log: { route: 'cold-resume', stage: 'delivered' },
|
|
293
|
-
acknowledgement: 'delivered',
|
|
294
|
-
};
|
|
295
|
-
},
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
|
-
function runClaude(args, options = {}) {
|
|
299
|
-
return runWakeCommand('claude', args, options);
|
|
300
|
-
}
|
|
301
|
-
function coldResumeEnvironment(env) {
|
|
302
|
-
const next = { ...env };
|
|
303
|
-
for (const key of Object.keys(next)) {
|
|
304
|
-
if (key === 'CLAUDECODE' || key === 'CLAUDE_PID' || key.startsWith('CLAUDE_CODE_')) {
|
|
305
|
-
delete next[key];
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
return next;
|
|
309
|
-
}
|
|
310
|
-
export function systemClaudeWakeAdapters(env = process.env) {
|
|
311
|
-
return {
|
|
312
|
-
async listAgents() {
|
|
313
|
-
const output = await runClaude(['agents', '--json'], { env });
|
|
314
|
-
return JSON.parse(output);
|
|
315
|
-
},
|
|
316
|
-
readDescriptor(pid) {
|
|
317
|
-
const file = path.join(os.homedir(), '.claude', 'sessions', `${pid}.json`);
|
|
318
|
-
return JSON.parse(readFileSync(file, 'utf8'));
|
|
319
|
-
},
|
|
320
|
-
sendSocket(socketPath, line, guard) {
|
|
321
|
-
return new Promise((resolve, reject) => {
|
|
322
|
-
const socket = createConnection(socketPath);
|
|
323
|
-
let settled = false;
|
|
324
|
-
const fail = (err) => {
|
|
325
|
-
if (settled)
|
|
326
|
-
return;
|
|
327
|
-
settled = true;
|
|
328
|
-
clearTimeout(late);
|
|
329
|
-
socket.destroy();
|
|
330
|
-
reject(err);
|
|
331
|
-
};
|
|
332
|
-
// A connection still pending at the write boundary is abandoned.
|
|
333
|
-
const late = guard === undefined
|
|
334
|
-
? undefined
|
|
335
|
-
: setTimeout(() => fail(new WriteAbortedError('the inbox connection outlasted the claim')), Math.min(guard.remainingMs(), 2_147_483_647));
|
|
336
|
-
socket.once('error', fail);
|
|
337
|
-
socket.once('connect', () => {
|
|
338
|
-
if (guard !== undefined && !guard.writable()) {
|
|
339
|
-
fail(new WriteAbortedError('the claim lapsed before the first byte'));
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
clearTimeout(late);
|
|
343
|
-
socket.end(line, () => {
|
|
344
|
-
if (settled)
|
|
345
|
-
return;
|
|
346
|
-
settled = true;
|
|
347
|
-
resolve();
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
},
|
|
352
|
-
async resume(sessionId, cwd, context, onSpawn) {
|
|
353
|
-
if (!existsSync(cwd))
|
|
354
|
-
throw new Error(`Claude session cwd no longer exists: ${cwd}`);
|
|
355
|
-
await runClaude([
|
|
356
|
-
'-p',
|
|
357
|
-
'--resume',
|
|
358
|
-
sessionId,
|
|
359
|
-
'--output-format',
|
|
360
|
-
'json',
|
|
361
|
-
context,
|
|
362
|
-
], { cwd, env: coldResumeEnvironment(env), ...(onSpawn === undefined ? {} : { onSpawn }) });
|
|
363
|
-
},
|
|
364
|
-
sleep(milliseconds) {
|
|
365
|
-
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
366
|
-
},
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
//# sourceMappingURL=claude-wake.js.map
|
package/dist/claude-wake.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-wake.js","sourceRoot":"","sources":["../src/claude-wake.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-bin.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { ReadinessState } from './readiness.js';
|
|
2
|
-
export interface CliBinReadinessOptions {
|
|
3
|
-
runningArtifactPath?: string;
|
|
4
|
-
currentVersion?: string | null;
|
|
5
|
-
}
|
|
6
|
-
export interface CliPathEntry {
|
|
7
|
-
command_path: string;
|
|
8
|
-
executable: boolean;
|
|
9
|
-
artifact_path: string | null;
|
|
10
|
-
version: string | null;
|
|
11
|
-
install_prefix: string | null;
|
|
12
|
-
}
|
|
13
|
-
export interface CliInstallationInspection {
|
|
14
|
-
current: {
|
|
15
|
-
artifact_path: string;
|
|
16
|
-
version: string | null;
|
|
17
|
-
};
|
|
18
|
-
effective: CliPathEntry | null;
|
|
19
|
-
entries: CliPathEntry[];
|
|
20
|
-
}
|
|
21
|
-
/** npm exec prepends its own temporary .bin; it is not the user's installed CLI. */
|
|
22
|
-
export declare function withoutNpxLauncherPath(env: NodeJS.ProcessEnv, platform: NodeJS.Platform, runningArtifact: string): NodeJS.ProcessEnv;
|
|
23
|
-
export declare function pathNotifaiEntries(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string[];
|
|
24
|
-
export declare function isExecutablePath(file: string, platform?: NodeJS.Platform): boolean;
|
|
25
|
-
export declare function inspectCliInstallations(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform, options?: CliBinReadinessOptions): CliInstallationInspection;
|
|
26
|
-
export declare function cliBinReadiness(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform, options?: CliBinReadinessOptions): ReadinessState;
|
package/dist/cli-bin.js
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { accessSync, constants, existsSync, lstatSync, readFileSync, readlinkSync, realpathSync, } from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { packageVersion } from './release.js';
|
|
4
|
-
import { cliUpdateChannel, cliUpdateRecoveryCommand } from './cli-contract.js';
|
|
5
|
-
import { canonicalPath, pathDirectories, sameLocalPath } from './local-path.js';
|
|
6
|
-
const POSIX_NAMES = ['notifai'];
|
|
7
|
-
const WINDOWS_NAMES = ['notifai.cmd', 'notifai.exe', 'notifai'];
|
|
8
|
-
/** npm exec prepends its own temporary .bin; it is not the user's installed CLI. */
|
|
9
|
-
export function withoutNpxLauncherPath(env, platform, runningArtifact) {
|
|
10
|
-
const artifact = canonicalPath(runningArtifact);
|
|
11
|
-
const modules = path.dirname(path.dirname(path.dirname(path.dirname(artifact))));
|
|
12
|
-
const cacheEntry = path.dirname(modules);
|
|
13
|
-
if (path.basename(path.dirname(cacheEntry)) !== '_npx' ||
|
|
14
|
-
!sameLocalPath(artifact, path.join(modules, '@raidiant', 'notifai', 'dist', 'main.js'), platform) ||
|
|
15
|
-
path.basename(modules) !== 'node_modules')
|
|
16
|
-
return env;
|
|
17
|
-
const launcher = path.join(modules, '.bin');
|
|
18
|
-
const key = platform === 'win32' && env['Path'] !== undefined ? 'Path' : 'PATH';
|
|
19
|
-
const directories = pathDirectories(env, platform);
|
|
20
|
-
const retained = directories.filter(directory => !sameLocalPath(directory, launcher, platform));
|
|
21
|
-
const next = { ...env };
|
|
22
|
-
const value = retained.join(platform === 'win32' ? ';' : ':');
|
|
23
|
-
// Node's Windows child environment deduplicates case-insensitive keys. Keep
|
|
24
|
-
// every spelling coherent so an inherited PATH cannot defeat the new Path.
|
|
25
|
-
const keys = platform === 'win32' ? Object.keys(env).filter(name => name.toLowerCase() === 'path') : [key];
|
|
26
|
-
if (keys.every(name => env[name] === value))
|
|
27
|
-
return env;
|
|
28
|
-
for (const name of keys)
|
|
29
|
-
next[name] = value;
|
|
30
|
-
return next;
|
|
31
|
-
}
|
|
32
|
-
export function pathNotifaiEntries(env, platform = process.platform) {
|
|
33
|
-
const names = platform === 'win32' ? WINDOWS_NAMES : POSIX_NAMES;
|
|
34
|
-
const found = [];
|
|
35
|
-
for (const directory of pathDirectories(env, platform)) {
|
|
36
|
-
for (const name of names) {
|
|
37
|
-
const candidate = path.join(directory, name);
|
|
38
|
-
// A dangling npm symlink is still installation evidence after an
|
|
39
|
-
// interrupted upgrade. Keep its destination available to local repair.
|
|
40
|
-
try {
|
|
41
|
-
lstatSync(candidate);
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
if (!found.includes(candidate))
|
|
47
|
-
found.push(candidate);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return found;
|
|
51
|
-
}
|
|
52
|
-
export function isExecutablePath(file, platform = process.platform) {
|
|
53
|
-
if (!existsSync(file))
|
|
54
|
-
return false;
|
|
55
|
-
if (platform === 'win32')
|
|
56
|
-
return true;
|
|
57
|
-
try {
|
|
58
|
-
const target = lstatSync(file).isSymbolicLink() ? realpathSync(file) : file;
|
|
59
|
-
accessSync(target, constants.X_OK);
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
function windowsShimArtifact(file) {
|
|
67
|
-
if (path.extname(file).toLowerCase() !== '.cmd')
|
|
68
|
-
return null;
|
|
69
|
-
try {
|
|
70
|
-
const source = readFileSync(file, 'utf8');
|
|
71
|
-
const match = /(?:%dp0%|%~dp0)?([^"\r\n]*node_modules[\\/]@raidiant[\\/]notifai[\\/]dist[\\/]main\.js)/i.exec(source);
|
|
72
|
-
if (match?.[0] === undefined)
|
|
73
|
-
return null;
|
|
74
|
-
const expanded = match[0]
|
|
75
|
-
.replace(/^%~?dp0%/i, `${path.dirname(file)}${path.sep}`)
|
|
76
|
-
.replaceAll('\\', path.sep);
|
|
77
|
-
return canonicalPath(expanded);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function artifactForCommand(file, platform) {
|
|
84
|
-
const shim = platform === 'win32' ? windowsShimArtifact(file) : null;
|
|
85
|
-
if (shim !== null)
|
|
86
|
-
return shim;
|
|
87
|
-
try {
|
|
88
|
-
if (lstatSync(file).isSymbolicLink()) {
|
|
89
|
-
return canonicalPath(path.resolve(path.dirname(file), readlinkSync(file)));
|
|
90
|
-
}
|
|
91
|
-
return canonicalPath(file);
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
function artifactVersion(artifact) {
|
|
98
|
-
if (artifact === null)
|
|
99
|
-
return null;
|
|
100
|
-
try {
|
|
101
|
-
const parsed = JSON.parse(readFileSync(path.join(path.dirname(artifact), '..', 'package.json'), 'utf8'));
|
|
102
|
-
if (typeof parsed !== 'object' || parsed === null)
|
|
103
|
-
return null;
|
|
104
|
-
const version = parsed.version;
|
|
105
|
-
return typeof version === 'string' && version !== '' ? version : null;
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function installPrefix(artifact, command, platform) {
|
|
112
|
-
if (artifact === null)
|
|
113
|
-
return null;
|
|
114
|
-
// Only an npm-global layout is writable through npm --global --prefix.
|
|
115
|
-
// A local dependency or pnpm store path also contains node_modules, but
|
|
116
|
-
// treating its parent as a global prefix writes an unrelated installation.
|
|
117
|
-
const suffix = path.sep + path.join(...(platform === 'win32' ? [] : ['lib']), 'node_modules', '@raidiant', 'notifai', 'dist', 'main.js');
|
|
118
|
-
const normalized = platform === 'win32' ? artifact.toLowerCase() : artifact;
|
|
119
|
-
if (!normalized.endsWith(suffix))
|
|
120
|
-
return null;
|
|
121
|
-
const prefix = canonicalPath(artifact.slice(0, -suffix.length));
|
|
122
|
-
const bin = platform === 'win32' ? prefix : path.join(prefix, 'bin');
|
|
123
|
-
return sameLocalPath(path.dirname(command), bin, platform) ? prefix : null;
|
|
124
|
-
}
|
|
125
|
-
export function inspectCliInstallations(env, platform = process.platform, options = {}) {
|
|
126
|
-
const runningArtifact = canonicalPath(options.runningArtifactPath ?? process.argv[1] ?? 'notifai');
|
|
127
|
-
const entries = pathNotifaiEntries(withoutNpxLauncherPath(env, platform, runningArtifact), platform).map((command) => {
|
|
128
|
-
const artifact = artifactForCommand(command, platform);
|
|
129
|
-
return {
|
|
130
|
-
command_path: command,
|
|
131
|
-
executable: isExecutablePath(command, platform),
|
|
132
|
-
artifact_path: artifact,
|
|
133
|
-
version: artifactVersion(artifact),
|
|
134
|
-
install_prefix: installPrefix(artifact, command, platform),
|
|
135
|
-
};
|
|
136
|
-
});
|
|
137
|
-
return {
|
|
138
|
-
current: {
|
|
139
|
-
artifact_path: runningArtifact,
|
|
140
|
-
version: options.currentVersion === undefined ? packageVersion() : options.currentVersion,
|
|
141
|
-
},
|
|
142
|
-
effective: entries.find((entry) => entry.executable) ?? null,
|
|
143
|
-
entries,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
export function cliBinReadiness(env, platform = process.platform, options = {}) {
|
|
147
|
-
const inspection = inspectCliInstallations(env, platform, options);
|
|
148
|
-
const { current, effective, entries } = inspection;
|
|
149
|
-
const updateCommand = cliUpdateRecoveryCommand(cliUpdateChannel(current.version));
|
|
150
|
-
if (effective === null && entries.length > 0) {
|
|
151
|
-
return {
|
|
152
|
-
id: 'cli-bin',
|
|
153
|
-
title: 'notifai command',
|
|
154
|
-
status: 'gap',
|
|
155
|
-
detail: 'the notifai command is on PATH but cannot run',
|
|
156
|
-
technical: inspection,
|
|
157
|
-
remedy: {
|
|
158
|
-
by: 'user-here',
|
|
159
|
-
summary: 'repair the global notifai command so it can run',
|
|
160
|
-
command: updateCommand,
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
// A global install that landed outside PATH used to report `ready` with
|
|
165
|
-
// "this process can run" — which is true of the running process and false of
|
|
166
|
-
// every instruction it goes on to print. Hooks embed absolute paths, so
|
|
167
|
-
// nothing visibly breaks until the reader types `notifai` themselves.
|
|
168
|
-
//
|
|
169
|
-
// Not a blocker: this process is already running, so the whole setup —
|
|
170
|
-
// pairing, the app, the delivery proof — still completes. It is the later
|
|
171
|
-
// `notifai …` lines that will not be found, and saying so is the fix.
|
|
172
|
-
if (effective === null) {
|
|
173
|
-
return {
|
|
174
|
-
id: 'cli-bin',
|
|
175
|
-
title: 'notifai command',
|
|
176
|
-
status: 'optional-gap',
|
|
177
|
-
detail: 'no `notifai` on PATH — this process runs, but a typed `notifai …` command will not be found',
|
|
178
|
-
remedy: {
|
|
179
|
-
by: 'user-here',
|
|
180
|
-
summary: 'install notifai globally so the command is on your PATH',
|
|
181
|
-
command: updateCommand,
|
|
182
|
-
},
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
const effectiveIsCurrent = effective.artifact_path === current.artifact_path ||
|
|
186
|
-
(effective.version !== null && current.version !== null && effective.version === current.version);
|
|
187
|
-
if (!effectiveIsCurrent) {
|
|
188
|
-
return {
|
|
189
|
-
id: 'cli-bin',
|
|
190
|
-
title: 'notifai command',
|
|
191
|
-
status: 'gap',
|
|
192
|
-
detail: 'the notifai command resolves to a different installation than this current CLI',
|
|
193
|
-
technical: inspection,
|
|
194
|
-
remedy: {
|
|
195
|
-
by: 'user-here',
|
|
196
|
-
summary: 'update the notifai command that wins PATH',
|
|
197
|
-
command: updateCommand,
|
|
198
|
-
},
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
const duplicateNeedsCleanup = entries.some((entry) => entry !== effective &&
|
|
202
|
-
(!entry.executable || entry.artifact_path !== effective.artifact_path));
|
|
203
|
-
if (duplicateNeedsCleanup) {
|
|
204
|
-
return {
|
|
205
|
-
id: 'cli-bin',
|
|
206
|
-
title: 'notifai command',
|
|
207
|
-
status: 'optional-gap',
|
|
208
|
-
detail: 'the notifai command is ready; another installation remains for cleanup',
|
|
209
|
-
technical: inspection,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
return {
|
|
213
|
-
id: 'cli-bin',
|
|
214
|
-
title: 'notifai command',
|
|
215
|
-
status: 'ready',
|
|
216
|
-
detail: 'the notifai command is ready',
|
|
217
|
-
technical: inspection,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
//# sourceMappingURL=cli-bin.js.map
|
package/dist/cli-bin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-bin.js","sourceRoot":"","sources":["../src/cli-bin.ts"],"names":[],"mappings":"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"}
|