@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-ask.js
DELETED
|
@@ -1,503 +0,0 @@
|
|
|
1
|
-
/** Validation and durable registration for the agent-facing ask command. */
|
|
2
|
-
import { CAPABILITIES_V1, QUESTION_TEXT_MAX_LENGTH, REPLY_MAX_QUESTIONS, validateDraft, } from '@raidiant/notifai-protocol';
|
|
3
|
-
import { EXIT, authedClient, log, makeClient } from './commands-core.js';
|
|
4
|
-
import { resolveActiveHarness } from './commands-harness-context.js';
|
|
5
|
-
import { CODEX_FRESH_SESSION_USER_ACTION, CODEX_HOOK_APPROVAL_USER_ACTION, CODEX_STALE_STOP_DEFINITION_PROBLEM, CODEX_STOP_DEFINITION_NOT_SINGULAR_PROBLEM, activeQuestionRouteProblems, } from './commands-hook-diagnostics.js';
|
|
6
|
-
import { resolveDraftInvocation, uploadImage } from './commands-send-support.js';
|
|
7
|
-
import { loadConfig } from './config.js';
|
|
8
|
-
import { HERMES_QUESTION_ROUTING_UNAVAILABLE, isHookInstallableHarness } from './harnesses.js';
|
|
9
|
-
import { QuestionRegistrationChanged, registerQuestion } from './hook-lifecycle.js';
|
|
10
|
-
import { readSessionIncarnation, readSessionState } from './hook-session-state.js';
|
|
11
|
-
import { currentCodexQuestionContext, nativeQuestionTitle } from './codex-question-bindings.js';
|
|
12
|
-
import { hermesQuestionRouteReady } from './session-attendant-state.js';
|
|
13
|
-
import { codexRoutingTrustProblems, findInstallations } from './install-hooks.js';
|
|
14
|
-
import { inferInvocationContext } from './invocation-context.js';
|
|
15
|
-
import { activeOpenclawGeneration } from './openclaw-session-access.js';
|
|
16
|
-
import { openclawGatewayReady } from './openclaw-gateway-readiness.js';
|
|
17
|
-
import { enableProject, projectBinding } from './project-enablement.js';
|
|
18
|
-
import { spawnQuestionSettlement } from './question-settlement-process.js';
|
|
19
|
-
import { CHOICE_USAGE, buildDraft, parseChoices, rejectAccidentalEscapedNewlines, slugify, validateMediaInputs, } from './send.js';
|
|
20
|
-
/** One stable failure contract for every machine-readable ask refusal. */
|
|
21
|
-
export function reportAskFailure(deps, flags, failure) {
|
|
22
|
-
log(deps).error('cli.error', {
|
|
23
|
-
kind: 'ask_admission',
|
|
24
|
-
code: failure.code,
|
|
25
|
-
check_id: failure.check_id,
|
|
26
|
-
exit: failure.exit_code,
|
|
27
|
-
});
|
|
28
|
-
if (flags.json === true) {
|
|
29
|
-
deps.io.out(JSON.stringify({ ok: false, registered: false, ...failure }, null, 2));
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
deps.io.err(failure.message);
|
|
33
|
-
deps.io.err(`next: ${failure.remedy}`);
|
|
34
|
-
}
|
|
35
|
-
return failure.exit_code;
|
|
36
|
-
}
|
|
37
|
-
function askFailure(deps, flags, code, checkId, message, remedy, exitCode = EXIT.usage, details = {}) {
|
|
38
|
-
return reportAskFailure(deps, flags, {
|
|
39
|
-
code,
|
|
40
|
-
check_id: checkId,
|
|
41
|
-
exit_code: exitCode,
|
|
42
|
-
remedy,
|
|
43
|
-
message,
|
|
44
|
-
...details,
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Turn ask input into questions plus authored presentation content. Everything is
|
|
49
|
-
* validated at registration because a later hook failure is easy to miss.
|
|
50
|
-
*/
|
|
51
|
-
export function buildQuestions(flags, question) {
|
|
52
|
-
if (flags.form !== undefined) {
|
|
53
|
-
if (question !== undefined || flags.choice?.length || flags.multi) {
|
|
54
|
-
return { ok: false, error: '--form replaces the positional question, --choice, and --multi.' };
|
|
55
|
-
}
|
|
56
|
-
let parsed;
|
|
57
|
-
try {
|
|
58
|
-
parsed = JSON.parse(flags.form);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return {
|
|
62
|
-
ok: false,
|
|
63
|
-
error: '--form must be JSON: {"summary": "...", "questions": [{"text", "choices"?, "multi"?}], "body"?}.',
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
67
|
-
return { ok: false, error: `--form needs a "questions" array (1-${REPLY_MAX_QUESTIONS} entries).` };
|
|
68
|
-
}
|
|
69
|
-
const record = parsed;
|
|
70
|
-
const unknownKeys = Object.keys(record).filter((key) => key !== 'summary' && key !== 'questions' && key !== 'body');
|
|
71
|
-
if (unknownKeys.length > 0) {
|
|
72
|
-
return {
|
|
73
|
-
ok: false,
|
|
74
|
-
error: `Unknown --form ${unknownKeys.length === 1 ? 'key' : 'keys'}: ${unknownKeys.join(', ')}.`,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
if (!Array.isArray(record['questions'])) {
|
|
78
|
-
return { ok: false, error: `--form needs a "questions" array (1-${REPLY_MAX_QUESTIONS} entries).` };
|
|
79
|
-
}
|
|
80
|
-
if (typeof record['summary'] !== 'string' || record['summary'].trim() === '') {
|
|
81
|
-
return { ok: false, error: '--form needs a non-empty one-line "summary" string.' };
|
|
82
|
-
}
|
|
83
|
-
const formQuestions = record['questions'];
|
|
84
|
-
if (formQuestions.length < 1 || formQuestions.length > REPLY_MAX_QUESTIONS) {
|
|
85
|
-
return {
|
|
86
|
-
ok: false,
|
|
87
|
-
error: `A form asks 1-${REPLY_MAX_QUESTIONS} questions; this one has ${formQuestions.length}.`,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
if (record['body'] !== undefined && typeof record['body'] !== 'string') {
|
|
91
|
-
return { ok: false, error: '"body" must be a Markdown string.' };
|
|
92
|
-
}
|
|
93
|
-
if (flags.body !== undefined && record['body'] !== undefined) {
|
|
94
|
-
return { ok: false, error: 'Pass the Markdown Body in either --body or the form "body" key, not both.' };
|
|
95
|
-
}
|
|
96
|
-
const questions = [];
|
|
97
|
-
const usedIds = new Set();
|
|
98
|
-
for (const [index, entry] of formQuestions.entries()) {
|
|
99
|
-
if (typeof entry !== 'object' || entry === null || typeof entry.text !== 'string') {
|
|
100
|
-
return { ok: false, error: `Question ${index + 1} needs a "text" string.` };
|
|
101
|
-
}
|
|
102
|
-
const spec = entry;
|
|
103
|
-
const built = buildOneQuestion(spec.text, spec.choices, spec.multi === true, index, usedIds);
|
|
104
|
-
if ('error' in built)
|
|
105
|
-
return { ok: false, error: `Question ${index + 1}: ${built.error}` };
|
|
106
|
-
questions.push(built.question);
|
|
107
|
-
}
|
|
108
|
-
const body = flags.body ?? record['body'];
|
|
109
|
-
return {
|
|
110
|
-
ok: true,
|
|
111
|
-
questions,
|
|
112
|
-
summary: record['summary'],
|
|
113
|
-
...(body !== undefined ? { body } : {}),
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
if (question === undefined || question.trim() === '') {
|
|
117
|
-
return { ok: false, error: 'The question cannot be empty.' };
|
|
118
|
-
}
|
|
119
|
-
const built = buildOneQuestion(question, flags.choice, flags.multi === true, 0, new Set());
|
|
120
|
-
if ('error' in built)
|
|
121
|
-
return { ok: false, error: built.error };
|
|
122
|
-
return {
|
|
123
|
-
ok: true,
|
|
124
|
-
questions: [built.question],
|
|
125
|
-
summary: built.question.text,
|
|
126
|
-
...(flags.body !== undefined ? { body: flags.body } : {}),
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
function buildOneQuestion(text, choiceLabels, multi, index, usedIds) {
|
|
130
|
-
const trimmed = text.trim();
|
|
131
|
-
if (trimmed === '')
|
|
132
|
-
return { error: 'the question text cannot be empty.' };
|
|
133
|
-
if ([...trimmed].length > QUESTION_TEXT_MAX_LENGTH) {
|
|
134
|
-
return {
|
|
135
|
-
error: `a question must be readable where it is answered: keep it within ` +
|
|
136
|
-
`${QUESTION_TEXT_MAX_LENGTH} characters and put the longer explanation in --body.`,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
const choices = parseChoices(choiceLabels);
|
|
140
|
-
if (choices === 'invalid')
|
|
141
|
-
return { error: CHOICE_USAGE };
|
|
142
|
-
if (multi && choices === null) {
|
|
143
|
-
return { error: '--multi needs answers to select between; add --choice.' };
|
|
144
|
-
}
|
|
145
|
-
let id = slugify(trimmed);
|
|
146
|
-
if (id === '' || usedIds.has(id))
|
|
147
|
-
id = `q${index + 1}`;
|
|
148
|
-
usedIds.add(id);
|
|
149
|
-
return {
|
|
150
|
-
question: {
|
|
151
|
-
id,
|
|
152
|
-
text: trimmed,
|
|
153
|
-
...(choices !== null ? { choices } : {}),
|
|
154
|
-
...(multi ? { multi: true } : {}),
|
|
155
|
-
},
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
function buildAskDraft(config, built, flags, invocation, mediaIds) {
|
|
159
|
-
const result = buildDraft(config, {
|
|
160
|
-
title: built.questions[0].text,
|
|
161
|
-
summary: built.summary,
|
|
162
|
-
...(built.body !== undefined ? { body: built.body } : {}),
|
|
163
|
-
...(flags.project !== undefined ? { project: flags.project } : {}),
|
|
164
|
-
...(mediaIds.length > 0 ? { image: mediaIds } : {}),
|
|
165
|
-
...(flags.imageAlt !== undefined ? { imageAlt: flags.imageAlt } : {}),
|
|
166
|
-
reply: true,
|
|
167
|
-
questions: built.questions,
|
|
168
|
-
}, invocation);
|
|
169
|
-
if (!result.ok)
|
|
170
|
-
return result;
|
|
171
|
-
const capabilities = CAPABILITIES_V1.describe(result.platform);
|
|
172
|
-
if (capabilities === null)
|
|
173
|
-
return { ok: false, error: 'No iOS capability contract is available.' };
|
|
174
|
-
const validation = validateDraft(result.draft, capabilities);
|
|
175
|
-
if (!validation.ok) {
|
|
176
|
-
return {
|
|
177
|
-
ok: false,
|
|
178
|
-
error: validation.errors.map((issue) => `${issue.path}: ${issue.message}`).join('\n'),
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
return { ok: true, draft: result.draft };
|
|
182
|
-
}
|
|
183
|
-
function recordRegisteredQuestion(deps, sessionId, built, draft, service, json = false) {
|
|
184
|
-
const ordinary = () => persistRegisteredQuestion(deps, sessionId, built, draft, service, json);
|
|
185
|
-
if (built.questions.some(question => question.multi === true))
|
|
186
|
-
return ordinary();
|
|
187
|
-
const local = currentCodexQuestionContext(readSessionState(sessionId, deps.env), sessionId, deps.env);
|
|
188
|
-
if (local === null)
|
|
189
|
-
return ordinary();
|
|
190
|
-
const credential = deps.store.load();
|
|
191
|
-
if (credential === null || credential.machineId !== service.machine_id || credential.baseUrl !== service.base_url)
|
|
192
|
-
return ordinary();
|
|
193
|
-
const persist = (nativeAdmission) => persistRegisteredQuestion(deps, sessionId, built, draft, service, json, nativeAdmission, local.owner_key);
|
|
194
|
-
// Discovery is optional and bounded. Missing service support must not create
|
|
195
|
-
// a hidden binding or block ordinary question registration. Do not cache it.
|
|
196
|
-
const client = makeClient(deps, service.base_url, `Bearer nfm_${credential.machineId}.${credential.secret}`, { timeoutMs: 1500 });
|
|
197
|
-
return client.compatibility().then(support => persist(Array.isArray(support?.server_capabilities) && support.server_capabilities.includes('harness_answers')
|
|
198
|
-
? { owner_key: local.owner_key, turn_id: local.snapshot.latest.id, service } : undefined), () => persist());
|
|
199
|
-
}
|
|
200
|
-
function persistRegisteredQuestion(deps, sessionId, built, draft, service, json = false, nativeAdmission, ownerKey) {
|
|
201
|
-
let questionId;
|
|
202
|
-
const credential = deps.store.load();
|
|
203
|
-
if (credential === null || credential.machineId !== service.machine_id || credential.baseUrl !== service.base_url) {
|
|
204
|
-
return askFailure(deps, { json }, 'auth_required', 'credential', 'The Approved Machine changed before question registration completed.', 'retry the same ask from the intended signed-in machine', EXIT.auth);
|
|
205
|
-
}
|
|
206
|
-
try {
|
|
207
|
-
questionId = registerQuestion(sessionId, deps.env, {
|
|
208
|
-
question: built.questions[0].text,
|
|
209
|
-
summary: draft.presentation.summary,
|
|
210
|
-
service_identity: service,
|
|
211
|
-
questions: built.questions,
|
|
212
|
-
...(draft.presentation.body !== undefined ? { body: draft.presentation.body } : {}),
|
|
213
|
-
...(draft.project !== undefined ? { project: draft.project } : {}),
|
|
214
|
-
...(draft.source !== undefined ? { source: draft.source } : {}),
|
|
215
|
-
...(draft.presentation.media !== undefined ? { media: draft.presentation.media } : {}),
|
|
216
|
-
}, (deps.now ?? Date.now)(), nativeAdmission, { ...(ownerKey === undefined ? {} : { owner_key: ownerKey }), machineStillMatches: () => {
|
|
217
|
-
const current = deps.store.load();
|
|
218
|
-
return current !== null && current.machineId === service.machine_id && current.baseUrl === service.base_url;
|
|
219
|
-
} });
|
|
220
|
-
}
|
|
221
|
-
catch (err) {
|
|
222
|
-
if (err instanceof QuestionRegistrationChanged) {
|
|
223
|
-
return askFailure(deps, { json }, err.reason === 'credential' ? 'auth_required' : 'session_changed', err.reason === 'credential' ? 'credential' : 'question_registration', err.message, 'retry the same ask from the current Agent Session and intended signed-in machine', err.reason === 'credential' ? EXIT.auth : EXIT.failed);
|
|
224
|
-
}
|
|
225
|
-
return askFailure(deps, { json }, 'registration_failed', 'question_registration', `Could not register the question: ${err instanceof Error ? err.message : String(err)}`, 'retire an older pending question if the limit was reached, then retry the same ask', EXIT.failed);
|
|
226
|
-
}
|
|
227
|
-
log(deps).info('ask.registered', {
|
|
228
|
-
ok: true,
|
|
229
|
-
session: sessionId,
|
|
230
|
-
question_id: questionId,
|
|
231
|
-
questions: built.questions.length,
|
|
232
|
-
text_chars: built.questions[0].text.length,
|
|
233
|
-
choices: built.questions[0].choices?.length ?? 0,
|
|
234
|
-
media: draft.presentation.media?.length ?? 0,
|
|
235
|
-
});
|
|
236
|
-
const harness = readSessionState(sessionId, deps.env).harness;
|
|
237
|
-
let submission = 'starting';
|
|
238
|
-
try {
|
|
239
|
-
if (harness === undefined)
|
|
240
|
-
throw new Error('The admitted Agent Session lost its harness identity');
|
|
241
|
-
(deps.spawnQuestionSettlement ?? spawnQuestionSettlement)({
|
|
242
|
-
envelope: { session_id: sessionId, cwd: deps.cwd }, harness, purpose: 'submission',
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
catch (err) {
|
|
246
|
-
submission = 'launch-failed';
|
|
247
|
-
log(deps).error('cli.error', { kind: 'question_submission_launch', session: sessionId, question_id: questionId, outcome: submission,
|
|
248
|
-
message: err instanceof Error ? err.message : String(err) });
|
|
249
|
-
}
|
|
250
|
-
const nextStep = submission === 'starting'
|
|
251
|
-
? 'Submission starts without ending this turn. Continue independent work while Question Routing owns the answer return path.'
|
|
252
|
-
: 'Background startup failed. Keep this registration; ordinary lifecycle hooks can recover it. Inspect status before relying on submission.';
|
|
253
|
-
const native = readSessionState(sessionId, deps.env).codex_question_bindings?.find(binding => binding.question_id === questionId && binding.owner_key === readSessionIncarnation(sessionId, deps.env)?.key);
|
|
254
|
-
const nativeCommand = `notifai acknowledge ${questionId} --operation-id native-1 --native-answers '<actual answers JSON>' --text '<concrete work this answer sets in motion>' --json`;
|
|
255
|
-
const nativeInstruction = `If you use request_user_input_async, copy the native titles and options exactly in this turn. For an answer you actually read from that native form, your first dependent command must be: ${nativeCommand}. Use the registered question/choice IDs. Use a distinct operation ID for each distinct submission; retry the same ID and immutable body after failure, omitting answers/text only after the command confirms the operation was saved. Do not report an app answer again as a native answer. Keep the app watcher; do not close the question after native acknowledgement. If you did not emit the exact marked native form, ordinary conversation answers still retire with notifai close ${questionId}. Native linking is optional and capability-dependent; never promise form closure.`;
|
|
256
|
-
// The block below is the densest guidance this CLI prints, and until now it
|
|
257
|
-
// was prose only: an agent could not read back the choice ids it must branch
|
|
258
|
-
// on without asking the server for them. The JSON form carries the same
|
|
259
|
-
// obligation as data.
|
|
260
|
-
if (json) {
|
|
261
|
-
deps.io.out(JSON.stringify({
|
|
262
|
-
registered: true,
|
|
263
|
-
question_id: questionId,
|
|
264
|
-
state: 'local',
|
|
265
|
-
submitted: false,
|
|
266
|
-
submission,
|
|
267
|
-
request_id: null,
|
|
268
|
-
provider_acceptance: 'not_available',
|
|
269
|
-
questions: built.questions.map((entry) => ({
|
|
270
|
-
id: entry.id,
|
|
271
|
-
text: entry.text,
|
|
272
|
-
...(entry.choices === undefined ? {} : { choices: entry.choices }),
|
|
273
|
-
...(entry.multi === true ? { multi: true } : {}),
|
|
274
|
-
})),
|
|
275
|
-
...(native === undefined ? {} : { native_question: {
|
|
276
|
-
tool: 'request_user_input_async',
|
|
277
|
-
questions: native.questions.map(binding => ({ question_id: binding.question.id, title: nativeQuestionTitle(binding),
|
|
278
|
-
...(binding.question.choices === undefined ? {} : { options: binding.question.choices.map(choice => choice.label) }) })),
|
|
279
|
-
instructions: nativeInstruction,
|
|
280
|
-
} }),
|
|
281
|
-
status: `notifai status ${questionId}`,
|
|
282
|
-
close: `notifai close ${questionId}`,
|
|
283
|
-
next: {
|
|
284
|
-
end_turn: false,
|
|
285
|
-
in_this_turn: `Ask the question in the conversation and explain what each answer will change. ${nextStep}`,
|
|
286
|
-
route_neutral: 'Never say where the answer must arrive; it returns by whatever route the harness supports.',
|
|
287
|
-
on_answer: 'Acknowledge it, then resume the committed work without asking the user to confirm again.',
|
|
288
|
-
answered_outside_notifai: native === undefined
|
|
289
|
-
? `If they answer in the conversation instead, run \`notifai close ${questionId}\` to retire this question.`
|
|
290
|
-
: nativeInstruction,
|
|
291
|
-
},
|
|
292
|
-
}, null, 2));
|
|
293
|
-
return EXIT.ok;
|
|
294
|
-
}
|
|
295
|
-
for (const [index, entry] of built.questions.entries()) {
|
|
296
|
-
const prefix = built.questions.length > 1 ? `${index + 1}. ` : '';
|
|
297
|
-
if (entry.choices !== undefined) {
|
|
298
|
-
const kind = entry.multi === true ? 'answers offered (several may be chosen)' : 'answers offered';
|
|
299
|
-
deps.io.out(`${prefix}${entry.text} — ${kind}: ${entry.choices.map((choice) => choice.label).join(' / ')}`);
|
|
300
|
-
}
|
|
301
|
-
else if (built.questions.length > 1) {
|
|
302
|
-
deps.io.out(`${prefix}${entry.text} — free text`);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
deps.io.out(built.questions.length > 1
|
|
306
|
-
? `${built.questions.length} questions registered as one form (${questionId}); background submission is ${submission}. Provider Acceptance is not confirmed yet.`
|
|
307
|
-
: `Question registered (${questionId}); background submission is ${submission}. Provider Acceptance is not confirmed yet.`);
|
|
308
|
-
deps.io.out(`${nextStep} Inspect \`notifai status ${questionId}\` for submission evidence; never register a replacement to check this question.`);
|
|
309
|
-
deps.io.out('Ask in the conversation and explain what each answer will change:');
|
|
310
|
-
for (const [index, entry] of built.questions.entries()) {
|
|
311
|
-
const questionPrefix = built.questions.length > 1 ? `Question ${index + 1}, ` : '';
|
|
312
|
-
if (entry.choices !== undefined) {
|
|
313
|
-
for (const choice of entry.choices) {
|
|
314
|
-
deps.io.out(`- ${questionPrefix}If the answer is ${JSON.stringify(choice.label)}: state the concrete work you will resume.`);
|
|
315
|
-
}
|
|
316
|
-
deps.io.out(`- ${questionPrefix}For an unexpected typed answer: state how it will determine the concrete work you resume.`);
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
deps.io.out(`- ${questionPrefix}For the free-text answer: state how its content will determine the concrete work you resume.`);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
deps.io.out('When the answer arrives, resume the matching work without asking the user to confirm again. Frame this as work you will resume, not as approval you receive.');
|
|
323
|
-
deps.io.out('A Notifai answer cannot answer a harness permission prompt or interactive picker; leave those to the harness and user.');
|
|
324
|
-
if (native !== undefined) {
|
|
325
|
-
deps.io.out(nativeInstruction);
|
|
326
|
-
deps.io.out(JSON.stringify({ native_questions: native.questions.map(binding => ({ title: nativeQuestionTitle(binding),
|
|
327
|
-
question_id: binding.question.id, ...(binding.question.choices === undefined ? {} : { options: binding.question.choices.map(choice => choice.label) }),
|
|
328
|
-
...(binding.question.choices === undefined ? {} : { choice_ids: binding.question.choices.map(choice => choice.id) }),
|
|
329
|
-
})) }));
|
|
330
|
-
}
|
|
331
|
-
else
|
|
332
|
-
deps.io.out(`If they answer in this conversation instead, retire it with \`notifai close ${questionId}\`.`);
|
|
333
|
-
return EXIT.ok;
|
|
334
|
-
}
|
|
335
|
-
async function uploadAskMedia(deps, config, sessionId, built, flags, invocation, service) {
|
|
336
|
-
const authed = authedClient(deps, config);
|
|
337
|
-
if (!authed) {
|
|
338
|
-
return askFailure(deps, flags, 'auth_required', 'credential', 'Question routing is not paired on this machine.', 'run `notifai init --json`', EXIT.auth);
|
|
339
|
-
}
|
|
340
|
-
if (authed.service.base_url !== service.base_url || authed.service.machine_id !== service.machine_id) {
|
|
341
|
-
return askFailure(deps, flags, 'machine_changed', 'credential', 'The Approved Machine changed before the question media upload started.', 'retry the same ask from the intended signed-in machine', EXIT.auth);
|
|
342
|
-
}
|
|
343
|
-
const mediaIds = [];
|
|
344
|
-
for (const image of flags.image ?? []) {
|
|
345
|
-
if (image.startsWith('med_')) {
|
|
346
|
-
mediaIds.push(image);
|
|
347
|
-
continue;
|
|
348
|
-
}
|
|
349
|
-
const uploaded = await uploadImage(deps, authed.client, image, config.media_origins.value);
|
|
350
|
-
if (!uploaded.ok) {
|
|
351
|
-
if (uploaded.error !== null)
|
|
352
|
-
deps.io.err(uploaded.error);
|
|
353
|
-
return askFailure(deps, flags, 'media_upload_failed', 'media', uploaded.error ?? 'The image upload failed.', 'fix the reported image or network problem, then retry the same ask', uploaded.exit);
|
|
354
|
-
}
|
|
355
|
-
mediaIds.push(uploaded.mediaId);
|
|
356
|
-
}
|
|
357
|
-
const ready = buildAskDraft(config, built, flags, invocation, mediaIds);
|
|
358
|
-
if (!ready.ok) {
|
|
359
|
-
return askFailure(deps, flags, 'invalid_draft', 'draft', ready.error, 'fix the reported field and retry');
|
|
360
|
-
}
|
|
361
|
-
return recordRegisteredQuestion(deps, sessionId, built, ready.draft, service, flags.json === true);
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Registers and starts submission immediately, without waiting for turn end.
|
|
365
|
-
* The exact harness keeps ownership of answer delivery while work continues.
|
|
366
|
-
*/
|
|
367
|
-
export function askCommand(deps, question, flags) {
|
|
368
|
-
// Validate before route discovery. A malformed question belongs to the
|
|
369
|
-
// caller and should not be hidden behind whichever harness setup issue
|
|
370
|
-
// happens to exist on this machine.
|
|
371
|
-
const escapedBody = rejectAccidentalEscapedNewlines(flags.body, flags.literalBackslashN);
|
|
372
|
-
if (escapedBody !== null) {
|
|
373
|
-
return askFailure(deps, flags, 'invalid_input', 'body', escapedBody, 'fix the body and retry');
|
|
374
|
-
}
|
|
375
|
-
const built = buildQuestions(flags, question);
|
|
376
|
-
if (!built.ok) {
|
|
377
|
-
return askFailure(deps, flags, 'invalid_input', 'questions', built.error, 'fix the question input and retry');
|
|
378
|
-
}
|
|
379
|
-
const mediaInputError = validateMediaInputs(flags.image, flags.imageAlt);
|
|
380
|
-
if (mediaInputError !== null) {
|
|
381
|
-
return askFailure(deps, flags, 'invalid_input', 'media', mediaInputError, 'fix the media flags and retry');
|
|
382
|
-
}
|
|
383
|
-
let explicitUseConfig;
|
|
384
|
-
try {
|
|
385
|
-
explicitUseConfig = loadConfig({ cwd: deps.cwd, env: deps.env });
|
|
386
|
-
}
|
|
387
|
-
catch (err) {
|
|
388
|
-
return askFailure(deps, flags, 'config_invalid', 'configuration', `Question routing configuration is invalid: ${String(err)}`, 'fix the reported Notifai configuration and retry');
|
|
389
|
-
}
|
|
390
|
-
const explicitProject = flags.project ?? explicitUseConfig.project.value ?? inferInvocationContext(deps.cwd).project;
|
|
391
|
-
if (explicitProject !== null) {
|
|
392
|
-
const binding = projectBinding(deps.cwd, deps.env, explicitProject);
|
|
393
|
-
// A disabled OpenClaw Project must remain disabled until the User or agent
|
|
394
|
-
// explicitly enables it; the exact-generation route cannot infer consent.
|
|
395
|
-
if (binding !== null && deps.env['NOTIFAI_ACTIVE_HARNESS'] !== 'openclaw') {
|
|
396
|
-
try {
|
|
397
|
-
enableProject(binding);
|
|
398
|
-
}
|
|
399
|
-
catch (err) {
|
|
400
|
-
return askFailure(deps, flags, 'project_enablement_failed', 'project_enablement', `Project Enablement could not be saved: ${String(err)}`, 'check filesystem permissions or sandbox access for the Notifai state directory, then retry the same ask', EXIT.failed);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
const credential = deps.store.load();
|
|
405
|
-
if (credential === null) {
|
|
406
|
-
return askFailure(deps, flags, 'auth_required', 'credential', 'Question routing is not paired on this machine.', 'run `notifai init --json`', EXIT.auth);
|
|
407
|
-
}
|
|
408
|
-
// An agent calling this gets no hook payload. Harness-native environment
|
|
409
|
-
// markers identify the active owner, while UserPromptSubmit adds the hook's
|
|
410
|
-
// canonical id to the directory's concurrent-session index.
|
|
411
|
-
const now = (deps.now ?? Date.now)();
|
|
412
|
-
const { active, contested } = resolveActiveHarness(deps.env, deps.cwd, now);
|
|
413
|
-
let sessionId;
|
|
414
|
-
if (active !== null) {
|
|
415
|
-
if (contested.length > 1) {
|
|
416
|
-
return askFailure(deps, flags, 'session_identity_ambiguous', 'exact_session', `Several harness sessions could own this shell (${contested.map((candidate) => candidate.label).join(', ')}).`, 'use the documented foreground `notifai send --reply` flow with --reply-timeout equal to --reply-window, or run ask from an unambiguous harness session');
|
|
417
|
-
}
|
|
418
|
-
if ((active.harness === 'hermes' && active.integrationInstance === undefined) ||
|
|
419
|
-
!isHookInstallableHarness(active.harness)) {
|
|
420
|
-
const capability = HERMES_QUESTION_ROUTING_UNAVAILABLE;
|
|
421
|
-
return askFailure(deps, flags, 'question_routing_unavailable', 'hook_contract', `${active.label}: ${capability.deliveryContract}`, 'use a blocking `notifai send --reply` question');
|
|
422
|
-
}
|
|
423
|
-
const installations = findInstallations(deps.env, deps.hookAdapterHome, deps.hookPlatform);
|
|
424
|
-
const activeInstalled = installations.some((installation) => installation.harness === active.harness);
|
|
425
|
-
if (!activeInstalled) {
|
|
426
|
-
return askFailure(deps, flags, 'hooks_not_installed', 'hook_installation', `Notifai ${active.label} hooks are not installed in this active harness home.`, `run \`notifai init --json\` from this ${active.label} session`);
|
|
427
|
-
}
|
|
428
|
-
if (active.sessionId === undefined) {
|
|
429
|
-
return askFailure(deps, flags, 'session_identity_missing', 'exact_session', `The active ${active.label} shell does not expose an exact session id.`, 'use a blocking `notifai send --reply` question');
|
|
430
|
-
}
|
|
431
|
-
const matchingInstallations = installations.filter((installation) => installation.harness === active.harness);
|
|
432
|
-
const trustProblems = active.harness === 'codex'
|
|
433
|
-
? codexRoutingTrustProblems(matchingInstallations, deps.env)
|
|
434
|
-
: [];
|
|
435
|
-
if (trustProblems.length > 0) {
|
|
436
|
-
return askFailure(deps, flags, 'codex_hook_approval_required', 'hook_trust', `Question routing is not ready: ${trustProblems.join('; ')}. This question was not registered. Do not replace it with a short \`notifai send --reply\` wait: that command cannot resume this Agent Session after its reply timeout.`, 'open `/hooks` in Codex and approve or enable the Notifai handlers', EXIT.usage, { user_action: CODEX_HOOK_APPROVAL_USER_ACTION });
|
|
437
|
-
}
|
|
438
|
-
const routeProblems = activeQuestionRouteProblems(deps, active, installations);
|
|
439
|
-
if (routeProblems.includes(CODEX_STOP_DEFINITION_NOT_SINGULAR_PROBLEM)) {
|
|
440
|
-
return askFailure(deps, flags, 'codex_stop_definition_invalid', 'hook_installation', `Question routing is not ready: ${CODEX_STOP_DEFINITION_NOT_SINGULAR_PROBLEM}. This question was not registered.`, 'run `notifai hooks install --harness codex`, then re-run `notifai doctor`');
|
|
441
|
-
}
|
|
442
|
-
if (routeProblems.includes(CODEX_STALE_STOP_DEFINITION_PROBLEM)) {
|
|
443
|
-
return askFailure(deps, flags, 'codex_fresh_session_required', 'stop_hook', `Question routing is not ready: ${CODEX_STALE_STOP_DEFINITION_PROBLEM}. This question was not registered.`, 'start one fresh Codex session, send one prompt in it, then retry `notifai ask --json`', EXIT.usage, { user_action: CODEX_FRESH_SESSION_USER_ACTION });
|
|
444
|
-
}
|
|
445
|
-
if (routeProblems.length > 0) {
|
|
446
|
-
return askFailure(deps, flags, 'question_routing_unavailable', 'hook_contract', `Question routing is not ready: ${routeProblems.join('; ')}`, 'run `notifai init --json` and follow its question-routing remedy');
|
|
447
|
-
}
|
|
448
|
-
const state = readSessionState(active.sessionId, deps.env);
|
|
449
|
-
if (active.harness === 'openclaw' &&
|
|
450
|
-
activeOpenclawGeneration(active.sessionId, deps.env, deps.cwd) === null) {
|
|
451
|
-
return askFailure(deps, flags, 'openclaw_generation_stale', 'exact_session', 'This OpenClaw tool subprocess cannot prove the current enabled Gateway session generation.', 'enable the Project if needed, then run the question from a current OpenClaw turn after the Notifai plugin has activated');
|
|
452
|
-
}
|
|
453
|
-
if (active.harness === 'openclaw' && !openclawGatewayReady(deps.env)) {
|
|
454
|
-
return askFailure(deps, flags, 'openclaw_gateway_unready', 'hook_contract', 'The local OpenClaw Gateway service has not proved a matching CLI and live process.', 'restart the Gateway with the installed Notifai plugin, then run `notifai doctor`');
|
|
455
|
-
}
|
|
456
|
-
if (state.harness !== active.harness ||
|
|
457
|
-
(active.harness !== 'hermes' && state.last_prompt_at === undefined)) {
|
|
458
|
-
return askFailure(deps, flags, 'session_not_activated', 'user_prompt_submit', `This exact ${active.label} session has not fired UserPromptSubmit.`, `send one prompt in this ${active.label} session, then retry \`notifai ask --json\``);
|
|
459
|
-
}
|
|
460
|
-
if (active.harness === 'hermes' &&
|
|
461
|
-
!hermesQuestionRouteReady(active.sessionId, deps.env, now)) {
|
|
462
|
-
return askFailure(deps, flags, 'question_routing_unavailable', 'plugin_writer', 'This exact Hermes classic CLI session has no current attending plugin writer.', 'start a fresh local classic CLI session with the Notifai plugin enabled, then retry');
|
|
463
|
-
}
|
|
464
|
-
sessionId = active.sessionId;
|
|
465
|
-
}
|
|
466
|
-
else {
|
|
467
|
-
return askFailure(deps, flags, 'session_identity_missing', 'exact_session', 'Could not prove which live Agent Session owns this command.', 'run it from a supported harness with exact Agent Session identity, or use a blocking `notifai send --reply` question');
|
|
468
|
-
}
|
|
469
|
-
if (!sessionId) {
|
|
470
|
-
return askFailure(deps, flags, 'session_identity_missing', 'exact_session', 'No exact active Agent Session is available.', 'use a blocking `notifai send --reply` question');
|
|
471
|
-
}
|
|
472
|
-
let routingConfig;
|
|
473
|
-
try {
|
|
474
|
-
routingConfig = loadConfig({ cwd: deps.cwd, env: deps.env, sessionId });
|
|
475
|
-
}
|
|
476
|
-
catch (err) {
|
|
477
|
-
return askFailure(deps, flags, 'config_invalid', 'configuration', `Question routing configuration is invalid: ${String(err)}`, 'fix the reported Notifai configuration and retry');
|
|
478
|
-
}
|
|
479
|
-
if (!routingConfig.ask_notifications.value) {
|
|
480
|
-
return askFailure(deps, flags, 'question_routing_disabled', 'ask_notifications', 'Question routing is disabled by ask_notifications=false.', 'enable question routing or use a blocking `notifai send --reply` question');
|
|
481
|
-
}
|
|
482
|
-
const source = resolveDraftInvocation(deps, flags, active);
|
|
483
|
-
if (!source.ok) {
|
|
484
|
-
return askFailure(deps, flags, 'invalid_source', 'source_context', source.error, /session-name store|session's name/u.test(source.error)
|
|
485
|
-
? 'inspect the named session-name store, isolate or remove the invalid record, and retry'
|
|
486
|
-
: 'remove the conflicting source override and retry');
|
|
487
|
-
}
|
|
488
|
-
if (source.invocation.source?.session_id !== sessionId) {
|
|
489
|
-
return askFailure(deps, flags, 'session_identity_mismatch', 'exact_session', `The inferred session does not match the exact active ${active.label} session.`, 'remove NOTIFAI_SESSION_ID and retry from the exact active session');
|
|
490
|
-
}
|
|
491
|
-
// Placeholders let every body, source, project, media, and payload limit fail
|
|
492
|
-
// before an upload starts. The real ids replace them only after this passes.
|
|
493
|
-
const placeholders = (flags.image ?? []).map((_, index) => `med_pending_${index + 1}`);
|
|
494
|
-
const preflight = buildAskDraft(routingConfig, built, flags, source.invocation, placeholders);
|
|
495
|
-
if (!preflight.ok) {
|
|
496
|
-
return askFailure(deps, flags, 'invalid_draft', 'draft', preflight.error, 'fix the reported field and retry');
|
|
497
|
-
}
|
|
498
|
-
if ((flags.image?.length ?? 0) > 0) {
|
|
499
|
-
return uploadAskMedia(deps, routingConfig, sessionId, built, flags, source.invocation, { base_url: credential.baseUrl, machine_id: credential.machineId });
|
|
500
|
-
}
|
|
501
|
-
return recordRegisteredQuestion(deps, sessionId, built, preflight.draft, { base_url: credential.baseUrl, machine_id: credential.machineId }, flags.json === true);
|
|
502
|
-
}
|
|
503
|
-
//# sourceMappingURL=commands-ask.js.map
|
package/dist/commands-ask.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-ask.js","sourceRoot":"","sources":["../src/commands-ask.ts"],"names":[],"mappings":"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"}
|
package/dist/commands-auth.d.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { type CommandDeps } from './commands-core.js';
|
|
2
|
-
import { type PendingPairing } from './pending-pairing.js';
|
|
3
|
-
import type { ReadinessState } from './readiness.js';
|
|
4
|
-
/**
|
|
5
|
-
* Keep the one-time confirmation secret out of the HTTP request that opens
|
|
6
|
-
* the dashboard. URL fragments are browser-local and are not sent by GET,
|
|
7
|
-
* prefetchers, referrers, or link scanners.
|
|
8
|
-
*/
|
|
9
|
-
export declare function pairingApprovalUrl(approveUrl: string, confirmationSecret: string): string;
|
|
10
|
-
/**
|
|
11
|
-
* Why a sign-in stopped, in the shape the close line renders.
|
|
12
|
-
*
|
|
13
|
-
* Without it, `init` fell back to the state it had before the attempt — "this
|
|
14
|
-
* machine is not paired … run `notifai init`" — so the last thing a User read
|
|
15
|
-
* contradicted the correct line three lines above it and pointed back at the
|
|
16
|
-
* command that had just failed, for a reason it never mentioned.
|
|
17
|
-
*
|
|
18
|
-
* Passing one also transfers the errand: whoever takes the blocker prints the
|
|
19
|
-
* close, so this command stops after naming what stopped. A sign-in run on its
|
|
20
|
-
* own has no such caller and states the errand itself.
|
|
21
|
-
*/
|
|
22
|
-
export type LoginBlockedSink = (blocker: ReadinessState) => void;
|
|
23
|
-
/** Why a machine approval is not (yet) a credential, as an agent reads it. */
|
|
24
|
-
export type PairingOutcome = 'pending' | 'denied' | 'expired' | 'not_started';
|
|
25
|
-
/**
|
|
26
|
-
* The state `init` reports when approval has been started and not finished.
|
|
27
|
-
*
|
|
28
|
-
* It is a `credential` gap whose remedy names the exact page and code, so an
|
|
29
|
-
* agent can relay both without inventing wording, and whose command is the
|
|
30
|
-
* same setup command — the next run resumes this very handshake rather than
|
|
31
|
-
* starting a second one.
|
|
32
|
-
*/
|
|
33
|
-
export declare function pendingApprovalBlocker(pairing: PendingPairing, env?: NodeJS.ProcessEnv): ReadinessState;
|
|
34
|
-
/**
|
|
35
|
-
* The state `init` reports when an approval ended without a credential. Each
|
|
36
|
-
* outcome is named, because "not paired" alone sends an agent straight back
|
|
37
|
-
* into a new approval — and a User who just said no gets asked again.
|
|
38
|
-
*/
|
|
39
|
-
export declare function pairingOutcomeBlocker(outcome: Exclude<PairingOutcome, 'pending'>, detail: string): ReadinessState;
|
|
40
|
-
/**
|
|
41
|
-
* Pair this machine with the User's Account.
|
|
42
|
-
*
|
|
43
|
-
* The handshake is one server-side pairing: this machine keeps the credential
|
|
44
|
-
* and the confirmation secret, the User approves the code in their browser,
|
|
45
|
-
* and polling collects the machine id. It is persisted between runs (see
|
|
46
|
-
* `pending-pairing.ts`), which is what lets two very different callers share
|
|
47
|
-
* it honestly:
|
|
48
|
-
*
|
|
49
|
-
* - A human at a terminal watches a spinner until the pairing resolves or
|
|
50
|
-
* expires, as before.
|
|
51
|
-
* - An agent, or any run with nobody at the terminal, never waits on a
|
|
52
|
-
* person. It prints the page and the code, polls once, and returns — its
|
|
53
|
-
* caller relays the errand, and the next run picks the same pairing up
|
|
54
|
-
* where it was left. A shell tool that times out no longer strands an
|
|
55
|
-
* approval the User already gave.
|
|
56
|
-
*
|
|
57
|
-
* A resumed handshake is always asked about before it is replaced: the
|
|
58
|
-
* service answers `approved` for an approved pairing even after its expiry,
|
|
59
|
-
* so an approval given late is collected rather than duplicated. Only the
|
|
60
|
-
* service's `expired`, `denied`, or unknown answer discards one.
|
|
61
|
-
*/
|
|
62
|
-
export declare function loginCommand(deps: CommandDeps, flags: {
|
|
63
|
-
name?: string;
|
|
64
|
-
baseUrl?: string;
|
|
65
|
-
open?: boolean;
|
|
66
|
-
approval?: string;
|
|
67
|
-
approvalEmail?: string;
|
|
68
|
-
}, onBlocked?: LoginBlockedSink): Promise<number>;
|
|
69
|
-
export declare function logoutCommand(deps: CommandDeps): number;
|
|
70
|
-
export declare function authStatusCommand(deps: CommandDeps, flags: {
|
|
71
|
-
json?: boolean;
|
|
72
|
-
}): number;
|
|
73
|
-
/** Show the server's account access decision without attempting a product mutation. */
|
|
74
|
-
export declare function accessStatusCommand(deps: CommandDeps, flags: {
|
|
75
|
-
json?: boolean;
|
|
76
|
-
}): Promise<number>;
|