@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/commands-project.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { loadLoggedConfig, EXIT } from './commands-core.js';
|
|
2
|
-
import { disableProject, enableProject, projectBinding, projectEnabled, } from './project-enablement.js';
|
|
3
|
-
function bindingFor(deps) {
|
|
4
|
-
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
5
|
-
return projectBinding(deps.cwd, deps.env, config.project.value);
|
|
6
|
-
}
|
|
7
|
-
export function projectEnableCommand(deps) {
|
|
8
|
-
const binding = bindingFor(deps);
|
|
9
|
-
if (binding === null) {
|
|
10
|
-
deps.io.err('No Project can be inferred here. Run inside a Project or configure an explicit Project id.');
|
|
11
|
-
return EXIT.usage;
|
|
12
|
-
}
|
|
13
|
-
enableProject(binding);
|
|
14
|
-
deps.io.out(`Notifai lifecycle behavior is enabled for Project "${binding.project}".`);
|
|
15
|
-
return EXIT.ok;
|
|
16
|
-
}
|
|
17
|
-
export function projectDisableCommand(deps) {
|
|
18
|
-
const binding = bindingFor(deps);
|
|
19
|
-
if (binding === null) {
|
|
20
|
-
deps.io.err('No Project can be inferred here. Run inside a Project or configure an explicit Project id.');
|
|
21
|
-
return EXIT.usage;
|
|
22
|
-
}
|
|
23
|
-
disableProject(binding);
|
|
24
|
-
deps.io.out(`Notifai lifecycle behavior is disabled for Project "${binding.project}".`);
|
|
25
|
-
return EXIT.ok;
|
|
26
|
-
}
|
|
27
|
-
export function projectStatusCommand(deps, json = false) {
|
|
28
|
-
const binding = bindingFor(deps);
|
|
29
|
-
const enabled = projectEnabled(binding);
|
|
30
|
-
if (json) {
|
|
31
|
-
deps.io.out(JSON.stringify({ project: binding?.project ?? null, enabled }));
|
|
32
|
-
}
|
|
33
|
-
else if (binding === null) {
|
|
34
|
-
deps.io.out('No Project can be inferred here; lifecycle behavior is disabled.');
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
deps.io.out(`Project "${binding.project}": lifecycle behavior ${enabled ? 'enabled' : 'disabled'}.`);
|
|
38
|
-
}
|
|
39
|
-
return EXIT.ok;
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=commands-project.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-project.js","sourceRoot":"","sources":["../src/commands-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAoB,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,yBAAyB,CAAA;AAEhC,SAAS,UAAU,CAAC,IAAiB;IACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACvE,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAiB;IACpD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAA;QACzG,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,aAAa,CAAC,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,sDAAsD,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;IACtF,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAA;QACzG,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,uDAAuD,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;IACvF,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAiB,EAAE,IAAI,GAAG,KAAK;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC7E,CAAC;SAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAA;IACjF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,OAAO,yBAAyB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAA;IACtG,CAAC;IACD,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC"}
|
package/dist/commands-receive.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/** Foreground input consumption, shared by prompt hooks and an explicit wake. */
|
|
2
|
-
import { resolveCommandSession } from './command-session.js';
|
|
3
|
-
import { EXIT, makeClient, log } from './commands-core.js';
|
|
4
|
-
import { readSessionIncarnation, sessionHasEnded } from './hook-session-state.js';
|
|
5
|
-
import { currentProcessIdentity, processIdentityLiveness } from './process-identity.js';
|
|
6
|
-
import { readAttendantLease } from './session-attendant-state.js';
|
|
7
|
-
import { drainSessionInputs, hasSessionInputs, observeSessionInputWake, sessionInputWake } from './session-inputs.js';
|
|
8
|
-
export async function receiveSessionInputs(deps, sessionId, write) {
|
|
9
|
-
const lease = readAttendantLease(sessionId, deps.env);
|
|
10
|
-
const incarnation = readSessionIncarnation(sessionId, deps.env);
|
|
11
|
-
const owner = incarnation?.harness_process;
|
|
12
|
-
if (!hasSessionInputs(sessionId, deps.env, lease))
|
|
13
|
-
return false;
|
|
14
|
-
const mayWrite = () => {
|
|
15
|
-
const current = readAttendantLease(sessionId, deps.env);
|
|
16
|
-
if (sessionHasEnded(sessionId, deps.env))
|
|
17
|
-
return false;
|
|
18
|
-
if (lease === null)
|
|
19
|
-
return current === null;
|
|
20
|
-
return incarnation?.incarnation === lease.incarnation && owner !== undefined && current?.incarnation === lease.incarnation &&
|
|
21
|
-
current.generation === lease.generation && readSessionIncarnation(sessionId, deps.env)?.incarnation === lease.incarnation &&
|
|
22
|
-
processIdentityLiveness(owner) === 'alive';
|
|
23
|
-
};
|
|
24
|
-
if (!mayWrite())
|
|
25
|
-
return false;
|
|
26
|
-
const credential = deps.store.load();
|
|
27
|
-
const writer = currentProcessIdentity();
|
|
28
|
-
if (credential === null || writer === null)
|
|
29
|
-
return false;
|
|
30
|
-
const now = deps.now ?? Date.now;
|
|
31
|
-
const deadlineAt = now() + 2_000;
|
|
32
|
-
const client = makeClient(deps, credential.baseUrl, `Bearer nfm_${credential.machineId}.${credential.secret}`, {
|
|
33
|
-
timeoutMs: 750, deadlineAt, now,
|
|
34
|
-
});
|
|
35
|
-
return drainSessionInputs({
|
|
36
|
-
lease, mayWrite: () => now() < deadlineAt && mayWrite(), write,
|
|
37
|
-
sequencer: { sessionId, env: deps.env, client, writer, log: log(deps),
|
|
38
|
-
wall: now, monotonic: () => performance.now(), recoveryDeadline: performance.now() + 500,
|
|
39
|
-
sleep: async () => undefined },
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
export async function receiveCommand(deps) {
|
|
43
|
-
const current = resolveCommandSession(deps);
|
|
44
|
-
if (current?.source !== 'exact-harness') {
|
|
45
|
-
deps.io.err('Exact Agent Session identity could not be resolved; no input was read.');
|
|
46
|
-
return EXIT.usage;
|
|
47
|
-
}
|
|
48
|
-
log(deps).bind({ session: current.sessionId });
|
|
49
|
-
observeSessionInputWake(current.sessionId, deps.env, sessionInputWake());
|
|
50
|
-
const received = await receiveSessionInputs(deps, current.sessionId, (text) => deps.io.out(text));
|
|
51
|
-
if (!received) {
|
|
52
|
-
const pending = hasSessionInputs(current.sessionId, deps.env, readAttendantLease(current.sessionId, deps.env));
|
|
53
|
-
deps.io.out(pending
|
|
54
|
-
? 'User input is pending but could not be handed over yet. It remains queued. Inspect notifai logs for the claim or delivery failure; do not treat this as an empty inbox or acknowledge unseen input.'
|
|
55
|
-
: 'No user input is pending in the local inbox for this session. Continue your work.');
|
|
56
|
-
}
|
|
57
|
-
return EXIT.ok;
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=commands-receive.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-receive.js","sourceRoot":"","sources":["../src/commands-receive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { type ListRepliesResponse } from '@raidiant/notifai-protocol';
|
|
2
|
-
import { type ApiClient } from './client.js';
|
|
3
|
-
import { type DraftInvocation, type SendFlags } from './send.js';
|
|
4
|
-
import { type CommandDeps } from './commands-core.js';
|
|
5
|
-
import type { ActiveHarnessSession } from './commands-harness-context.js';
|
|
6
|
-
export declare function resolveDraftInvocation(deps: CommandDeps, flags: Pick<SendFlags, 'sessionId' | 'sessionLabel'>, active: ActiveHarnessSession | null): {
|
|
7
|
-
ok: true;
|
|
8
|
-
invocation: DraftInvocation;
|
|
9
|
-
} | {
|
|
10
|
-
ok: false;
|
|
11
|
-
error: string;
|
|
12
|
-
};
|
|
13
|
-
interface ReplyWaitOptions {
|
|
14
|
-
timeoutSeconds: number;
|
|
15
|
-
afterSeq: number;
|
|
16
|
-
now?: (() => number) | undefined;
|
|
17
|
-
sleep?: ((milliseconds: number) => Promise<void>) | undefined;
|
|
18
|
-
}
|
|
19
|
-
interface ReplyWaitResult {
|
|
20
|
-
response: ListRepliesResponse;
|
|
21
|
-
timedOut: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* The wait ended while polls were failing, so silence is unproven: the user
|
|
24
|
-
* may well have answered and we could not see it.
|
|
25
|
-
*/
|
|
26
|
-
degraded: boolean;
|
|
27
|
-
}
|
|
28
|
-
/** Loop over server-capped long polls until a reply arrives or the caller's deadline passes. */
|
|
29
|
-
export declare function waitForReply(client: ApiClient, requestId: string, options: ReplyWaitOptions): Promise<ReplyWaitResult>;
|
|
30
|
-
export declare function acknowledgementCommand(requestId: string, textRequired: boolean, acknowledgement: ListRepliesResponse['agent_acknowledgement'], hasReply?: boolean): string | null;
|
|
31
|
-
export declare function printAcknowledgementStatus(deps: CommandDeps, response: ListRepliesResponse): void;
|
|
32
|
-
type UploadResult = {
|
|
33
|
-
ok: true;
|
|
34
|
-
mediaId: string;
|
|
35
|
-
}
|
|
36
|
-
/** `error: null` means `reportError` already said it; do not print it twice. */
|
|
37
|
-
| {
|
|
38
|
-
ok: false;
|
|
39
|
-
error: string | null;
|
|
40
|
-
exit: number;
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Read a remote image without buffering more than the server will accept.
|
|
44
|
-
*
|
|
45
|
-
* Content-Length is an early refusal, not trust: a lying header still hits
|
|
46
|
-
* the byte cap while the body is read. Supported schemes stay http and https.
|
|
47
|
-
*/
|
|
48
|
-
export declare function readCappedBytes(response: Response, maxBytes: number): Promise<Uint8Array | 'too-large'>;
|
|
49
|
-
/**
|
|
50
|
-
* `--image` accepts a media id, a local file path, or an http(s) URL.
|
|
51
|
-
*
|
|
52
|
-
* A remote URL is fetched under the media URL policy (`url-policy.ts`):
|
|
53
|
-
* public HTTPS by default, every redirect hop re-validated, and non-public
|
|
54
|
-
* destinations only through the User's `media_origins` — never a
|
|
55
|
-
* repository's. `--image` values routinely arrive from an agent that read
|
|
56
|
-
* them in a working tree, so the URL is hostile input until proven otherwise.
|
|
57
|
-
*/
|
|
58
|
-
export declare function uploadImage(deps: CommandDeps, client: ApiClient, source: string, allowOrigins?: readonly string[]): Promise<UploadResult>;
|
|
59
|
-
export {};
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
import { NOTIFICATION_IMAGE_MAX_BYTES } from '@raidiant/notifai-protocol';
|
|
2
|
-
import { sha256Hex } from '@raidiant/notifai-protocol/node';
|
|
3
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { isRetryableReplyPollError } from './client.js';
|
|
6
|
-
import { fetchMediaUrl } from './url-policy.js';
|
|
7
|
-
import { buildSourceContext, inferInvocationContext } from './invocation-context.js';
|
|
8
|
-
import { readHarnessSessionTitle } from './harness-session-title.js';
|
|
9
|
-
import {} from './send.js';
|
|
10
|
-
import { EXIT, reportError } from './commands-core.js';
|
|
11
|
-
function managedSessionTitle(deps, active) {
|
|
12
|
-
try {
|
|
13
|
-
return readHarnessSessionTitle(deps.env, active, {
|
|
14
|
-
...(deps.orcaSessionTitle === undefined ? {} : { orca: deps.orcaSessionTitle }),
|
|
15
|
-
...(deps.codexSessionTitle === undefined ? {} : { codex: deps.codexSessionTitle }),
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export function resolveDraftInvocation(deps, flags, active) {
|
|
23
|
-
const inferred = inferInvocationContext(deps.cwd);
|
|
24
|
-
const sessionTitle = managedSessionTitle(deps, active);
|
|
25
|
-
const source = buildSourceContext({
|
|
26
|
-
env: deps.env,
|
|
27
|
-
invocation: inferred,
|
|
28
|
-
...(flags.sessionId !== undefined ? { sessionId: flags.sessionId } : {}),
|
|
29
|
-
...(flags.sessionLabel !== undefined ? { sessionLabel: flags.sessionLabel } : {}),
|
|
30
|
-
...(active === null
|
|
31
|
-
? {}
|
|
32
|
-
: {
|
|
33
|
-
activeHarness: {
|
|
34
|
-
harness: active.harness,
|
|
35
|
-
...(active.sessionId === undefined ? {} : { sessionId: active.sessionId }),
|
|
36
|
-
...(sessionTitle === undefined ? {} : { sessionLabel: sessionTitle }),
|
|
37
|
-
...(active.sessionLabelPending === true ? { sessionLabelPending: true } : {}),
|
|
38
|
-
},
|
|
39
|
-
}),
|
|
40
|
-
now: (deps.now ?? Date.now)(),
|
|
41
|
-
});
|
|
42
|
-
if (!source.ok)
|
|
43
|
-
return source;
|
|
44
|
-
if (source.generatedSessionLabel !== undefined) {
|
|
45
|
-
deps.io.err(`Heads up (source.session_label): No semantic Agent Session title was available; using generated fallback "${source.generatedSessionLabel}". Pass --session-label with a concise task name when one is available.`);
|
|
46
|
-
}
|
|
47
|
-
if (source.unchangedSessionLabel !== undefined) {
|
|
48
|
-
deps.io.err(`Heads up (source.session_label): The supplied label did not rename this Agent Session; its local name remains ${JSON.stringify(source.unchangedSessionLabel)}. If the job changed completely enough that this name would mislead, run \`notifai session rename "New job"\` inside the exact active Agent Session. Keep the current name for milestones, progress, or same-job refinements.`);
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
ok: true,
|
|
52
|
-
invocation: {
|
|
53
|
-
inferredProject: inferred.project,
|
|
54
|
-
...(source.source === undefined ? {} : { source: source.source }),
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/** Loop over server-capped long polls until a reply arrives or the caller's deadline passes. */
|
|
59
|
-
export async function waitForReply(client, requestId, options) {
|
|
60
|
-
const now = options.now ?? Date.now;
|
|
61
|
-
const sleep = options.sleep ?? ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
|
|
62
|
-
const deadline = now() + options.timeoutSeconds * 1000;
|
|
63
|
-
let lastResponse = null;
|
|
64
|
-
let lastTransientError = null;
|
|
65
|
-
let consecutiveTransientErrors = 0;
|
|
66
|
-
let firstPoll = true;
|
|
67
|
-
while (firstPoll || now() < deadline) {
|
|
68
|
-
firstPoll = false;
|
|
69
|
-
const remainingMs = Math.max(0, deadline - now());
|
|
70
|
-
const waitSeconds = Math.min(25, Math.floor(remainingMs / 1000));
|
|
71
|
-
try {
|
|
72
|
-
const response = await client.replies(requestId, {
|
|
73
|
-
waitSeconds,
|
|
74
|
-
afterSeq: options.afterSeq,
|
|
75
|
-
});
|
|
76
|
-
lastResponse = response;
|
|
77
|
-
lastTransientError = null;
|
|
78
|
-
consecutiveTransientErrors = 0;
|
|
79
|
-
if (response.replies.length > 0)
|
|
80
|
-
return { response, timedOut: false, degraded: false };
|
|
81
|
-
const pauseMs = Math.min(250, Math.max(0, deadline - now()));
|
|
82
|
-
if (pauseMs > 0)
|
|
83
|
-
await sleep(pauseMs);
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
if (!isRetryableReplyPollError(err))
|
|
87
|
-
throw err;
|
|
88
|
-
lastTransientError = err instanceof Error ? err : new Error(String(err));
|
|
89
|
-
consecutiveTransientErrors += 1;
|
|
90
|
-
const remainingAfterError = Math.max(0, deadline - now());
|
|
91
|
-
if (remainingAfterError === 0)
|
|
92
|
-
break;
|
|
93
|
-
const backoffMs = Math.min(250 * 2 ** (consecutiveTransientErrors - 1), 2_000, remainingAfterError);
|
|
94
|
-
await sleep(backoffMs);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Never saw a successful poll: surface the fault so callers get EXIT.network
|
|
98
|
-
// rather than a fake empty silence. The durable request is still on the
|
|
99
|
-
// server; the typed recovery is `notifai replies <id>`.
|
|
100
|
-
if (!lastResponse && lastTransientError)
|
|
101
|
-
throw lastTransientError;
|
|
102
|
-
return {
|
|
103
|
-
response: lastResponse ??
|
|
104
|
-
{
|
|
105
|
-
request_id: requestId,
|
|
106
|
-
reply_expires_at: null,
|
|
107
|
-
agent_acknowledgement_required: false,
|
|
108
|
-
agent_acknowledgement_text_required: false,
|
|
109
|
-
agent_acknowledgement: null,
|
|
110
|
-
replies: [],
|
|
111
|
-
},
|
|
112
|
-
timedOut: true,
|
|
113
|
-
// A poll succeeded at some point, so we do not throw — but the last thing
|
|
114
|
-
// we know is that we could not reach the server. Reporting that as a plain
|
|
115
|
-
// "no reply" would let an agent treat an unseen refusal as consent.
|
|
116
|
-
degraded: lastTransientError !== null,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
function acknowledgeInvocation(requestId, textRequired) {
|
|
120
|
-
return textRequired
|
|
121
|
-
? `notifai acknowledge ${requestId} --text <text>`
|
|
122
|
-
: `notifai acknowledge ${requestId}`;
|
|
123
|
-
}
|
|
124
|
-
export function acknowledgementCommand(requestId, textRequired, acknowledgement, hasReply = true) {
|
|
125
|
-
return acknowledgement === null && hasReply
|
|
126
|
-
? acknowledgeInvocation(requestId, textRequired)
|
|
127
|
-
: null;
|
|
128
|
-
}
|
|
129
|
-
export function printAcknowledgementStatus(deps, response) {
|
|
130
|
-
if (!response.agent_acknowledgement_required && response.replies.length === 0) {
|
|
131
|
-
deps.io.out('Agent Acknowledgement: not required for this request.');
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const textRequired = response.agent_acknowledgement_text_required;
|
|
135
|
-
if (response.agent_acknowledgement !== null) {
|
|
136
|
-
const recorded = `Agent Acknowledgement: recorded at ${response.agent_acknowledgement.created_at}`;
|
|
137
|
-
deps.io.out(response.agent_acknowledgement.text.length > 0
|
|
138
|
-
? `${recorded}: ${response.agent_acknowledgement.text}`
|
|
139
|
-
: `${recorded}.`);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
if (response.replies.length > 0) {
|
|
143
|
-
deps.io.out('Agent Acknowledgement required.');
|
|
144
|
-
deps.io.out(textRequired
|
|
145
|
-
? `next: Run \`${acknowledgeInvocation(response.request_id, true)}\` with concrete text saying what you will do because of the reply.`
|
|
146
|
-
: `next: Run \`${acknowledgeInvocation(response.request_id, false)}\` so the user sees you read the reply; this account turned acknowledgement text off.`);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
deps.io.out('Agent Acknowledgement: required after a user reply; no reply is recorded yet.');
|
|
150
|
-
}
|
|
151
|
-
const MEDIA_TYPES = {
|
|
152
|
-
'.jpg': 'image/jpeg',
|
|
153
|
-
'.jpeg': 'image/jpeg',
|
|
154
|
-
'.png': 'image/png',
|
|
155
|
-
'.gif': 'image/gif',
|
|
156
|
-
};
|
|
157
|
-
/**
|
|
158
|
-
* Read a remote image without buffering more than the server will accept.
|
|
159
|
-
*
|
|
160
|
-
* Content-Length is an early refusal, not trust: a lying header still hits
|
|
161
|
-
* the byte cap while the body is read. Supported schemes stay http and https.
|
|
162
|
-
*/
|
|
163
|
-
export async function readCappedBytes(response, maxBytes) {
|
|
164
|
-
const contentLength = Number(response.headers.get('content-length'));
|
|
165
|
-
if (Number.isFinite(contentLength) && contentLength > maxBytes)
|
|
166
|
-
return 'too-large';
|
|
167
|
-
const reader = response.body?.getReader();
|
|
168
|
-
if (reader === undefined) {
|
|
169
|
-
const buf = new Uint8Array(await response.arrayBuffer());
|
|
170
|
-
return buf.byteLength > maxBytes ? 'too-large' : buf;
|
|
171
|
-
}
|
|
172
|
-
const chunks = [];
|
|
173
|
-
let received = 0;
|
|
174
|
-
while (true) {
|
|
175
|
-
const { done, value } = await reader.read();
|
|
176
|
-
if (done)
|
|
177
|
-
break;
|
|
178
|
-
received += value.byteLength;
|
|
179
|
-
if (received > maxBytes) {
|
|
180
|
-
await reader.cancel();
|
|
181
|
-
return 'too-large';
|
|
182
|
-
}
|
|
183
|
-
chunks.push(value);
|
|
184
|
-
}
|
|
185
|
-
const out = new Uint8Array(received);
|
|
186
|
-
let offset = 0;
|
|
187
|
-
for (const chunk of chunks) {
|
|
188
|
-
out.set(chunk, offset);
|
|
189
|
-
offset += chunk.byteLength;
|
|
190
|
-
}
|
|
191
|
-
return out;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* `--image` accepts a media id, a local file path, or an http(s) URL.
|
|
195
|
-
*
|
|
196
|
-
* A remote URL is fetched under the media URL policy (`url-policy.ts`):
|
|
197
|
-
* public HTTPS by default, every redirect hop re-validated, and non-public
|
|
198
|
-
* destinations only through the User's `media_origins` — never a
|
|
199
|
-
* repository's. `--image` values routinely arrive from an agent that read
|
|
200
|
-
* them in a working tree, so the URL is hostile input until proven otherwise.
|
|
201
|
-
*/
|
|
202
|
-
export async function uploadImage(deps, client, source, allowOrigins = []) {
|
|
203
|
-
let bytes;
|
|
204
|
-
let mediaType;
|
|
205
|
-
if (/^https?:\/\//.test(source)) {
|
|
206
|
-
try {
|
|
207
|
-
const fetched = await fetchMediaUrl(source, { allowOrigins }, deps.fetchImpl);
|
|
208
|
-
if (!fetched.ok)
|
|
209
|
-
return { ok: false, error: fetched.reason, exit: EXIT.usage };
|
|
210
|
-
const response = fetched.response;
|
|
211
|
-
if (!response.ok)
|
|
212
|
-
return { ok: false, error: `Could not fetch ${source} (${response.status}).`, exit: EXIT.usage };
|
|
213
|
-
const contentType = response.headers.get('content-type')?.split(';')[0]?.trim() ?? '';
|
|
214
|
-
mediaType = ['image/jpeg', 'image/png', 'image/gif'].find((t) => t === contentType);
|
|
215
|
-
const downloaded = await readCappedBytes(response, NOTIFICATION_IMAGE_MAX_BYTES);
|
|
216
|
-
if (downloaded === 'too-large') {
|
|
217
|
-
return {
|
|
218
|
-
ok: false,
|
|
219
|
-
error: `Remote image exceeds the ${NOTIFICATION_IMAGE_MAX_BYTES} byte media limit.`,
|
|
220
|
-
exit: EXIT.usage,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
bytes = downloaded;
|
|
224
|
-
}
|
|
225
|
-
catch (err) {
|
|
226
|
-
return { ok: false, error: `Could not fetch ${source}: ${String(err)}`, exit: EXIT.network };
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
if (!existsSync(source)) {
|
|
231
|
-
return { ok: false, error: `--image: "${source}" is not a media id, file, or URL.`, exit: EXIT.usage };
|
|
232
|
-
}
|
|
233
|
-
bytes = new Uint8Array(readFileSync(source));
|
|
234
|
-
mediaType = MEDIA_TYPES[path.extname(source).toLowerCase()];
|
|
235
|
-
}
|
|
236
|
-
if (!mediaType) {
|
|
237
|
-
return { ok: false, error: 'Images must be JPEG, PNG, or GIF.', exit: EXIT.usage };
|
|
238
|
-
}
|
|
239
|
-
try {
|
|
240
|
-
const grant = await client.createMediaUpload({
|
|
241
|
-
media_type: mediaType,
|
|
242
|
-
size_bytes: bytes.byteLength,
|
|
243
|
-
sha256: sha256Hex(bytes),
|
|
244
|
-
});
|
|
245
|
-
await client.uploadMedia(grant, bytes);
|
|
246
|
-
return { ok: true, mediaId: grant.media_id };
|
|
247
|
-
}
|
|
248
|
-
catch (err) {
|
|
249
|
-
// Every other API failure in this file goes through `reportError`, which
|
|
250
|
-
// maps a revoked credential to the auth code, a server fault to the network
|
|
251
|
-
// one and everything else to plain failure, and records it in the local
|
|
252
|
-
// log with whatever next step the server named. This used to answer
|
|
253
|
-
// `network` to all of them, so an image too large for the account exited
|
|
254
|
-
// the same way an unreachable server did, and nothing about it was logged.
|
|
255
|
-
return { ok: false, error: null, exit: reportError(deps, err) };
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
//# sourceMappingURL=commands-send-support.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-send-support.js","sourceRoot":"","sources":["../src/commands-send-support.ts"],"names":[],"mappings":"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"}
|
package/dist/commands-send.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { type ReplyView } from '@raidiant/notifai-protocol';
|
|
2
|
-
import { type SendFlags } from './send.js';
|
|
3
|
-
import { type CommandDeps } from './commands-core.js';
|
|
4
|
-
export declare function sendCommand(deps: CommandDeps, flags: SendFlags & {
|
|
5
|
-
json?: boolean;
|
|
6
|
-
wait?: number;
|
|
7
|
-
noWait?: boolean;
|
|
8
|
-
replyTimeout?: number;
|
|
9
|
-
idempotencyKey?: string;
|
|
10
|
-
retry?: boolean;
|
|
11
|
-
baseUrl?: string;
|
|
12
|
-
}): Promise<number>;
|
|
13
|
-
export declare function repliesCommand(deps: CommandDeps, requestedId: string | undefined, flags: {
|
|
14
|
-
wait?: number;
|
|
15
|
-
after?: number;
|
|
16
|
-
json?: boolean;
|
|
17
|
-
pending?: boolean;
|
|
18
|
-
handoff?: boolean;
|
|
19
|
-
}): Promise<number>;
|
|
20
|
-
/**
|
|
21
|
-
* The correction note for a wait that saw more than one answer.
|
|
22
|
-
*
|
|
23
|
-
* A later reply that conflicts with an earlier one is a correction, so the
|
|
24
|
-
* latest answer is the one that counts. The server retires the question on
|
|
25
|
-
* the other devices the moment one answers, which makes this rare; it is
|
|
26
|
-
* still reachable, because a device can answer between the first reply
|
|
27
|
-
* landing and its retirement arriving.
|
|
28
|
-
*
|
|
29
|
-
* Ordered by seq, so `replies.at(-1)` is the answer to act on.
|
|
30
|
-
*/
|
|
31
|
-
export declare function contradictingAnswer(replies: ReplyView[]): string | null;
|
|
32
|
-
export declare function statusCommand(deps: CommandDeps, id: string, flags: {
|
|
33
|
-
json?: boolean;
|
|
34
|
-
}): Promise<number>;
|