@raidiant/notifai 11.7.1-beta.2 → 12.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -4
- package/NOTICE +16 -0
- package/THIRD_PARTY_NOTICES +725 -0
- package/bin/notifai.mjs +11420 -0
- package/data/install.ps1 +318 -0
- package/data/release.json +1 -0
- package/inventory.json +1 -0
- package/npm-adapter-files.json +52 -0
- package/package.json +14 -44
- package/README.md +0 -168
- package/dist/agent-update-notice.d.ts +0 -7
- package/dist/agent-update-notice.js +0 -77
- package/dist/agent-update-notice.js.map +0 -1
- package/dist/atomic-file.d.ts +0 -30
- package/dist/atomic-file.js +0 -148
- package/dist/atomic-file.js.map +0 -1
- package/dist/attendant-update.d.ts +0 -15
- package/dist/attendant-update.js +0 -96
- package/dist/attendant-update.js.map +0 -1
- package/dist/claude-wake.d.ts +0 -108
- package/dist/claude-wake.js +0 -369
- package/dist/claude-wake.js.map +0 -1
- package/dist/cli-bin.d.ts +0 -26
- package/dist/cli-bin.js +0 -220
- package/dist/cli-bin.js.map +0 -1
- package/dist/cli-contract.d.ts +0 -16
- package/dist/cli-contract.js +0 -27
- package/dist/cli-contract.js.map +0 -1
- package/dist/cli-release.d.ts +0 -36
- package/dist/cli-release.js +0 -85
- package/dist/cli-release.js.map +0 -1
- package/dist/client.d.ts +0 -109
- package/dist/client.js +0 -217
- package/dist/client.js.map +0 -1
- package/dist/codex-answer-control.d.ts +0 -14
- package/dist/codex-answer-control.js +0 -41
- package/dist/codex-answer-control.js.map +0 -1
- package/dist/codex-answer-presentation.d.ts +0 -18
- package/dist/codex-answer-presentation.js +0 -113
- package/dist/codex-answer-presentation.js.map +0 -1
- package/dist/codex-input-lifecycle.d.ts +0 -10
- package/dist/codex-input-lifecycle.js +0 -63
- package/dist/codex-input-lifecycle.js.map +0 -1
- package/dist/codex-native-control.d.ts +0 -13
- package/dist/codex-native-control.js +0 -120
- package/dist/codex-native-control.js.map +0 -1
- package/dist/codex-native-turn.d.ts +0 -37
- package/dist/codex-native-turn.js +0 -155
- package/dist/codex-native-turn.js.map +0 -1
- package/dist/codex-question-bindings.d.ts +0 -76
- package/dist/codex-question-bindings.js +0 -151
- package/dist/codex-question-bindings.js.map +0 -1
- package/dist/codex-queue-control.d.ts +0 -21
- package/dist/codex-queue-control.js +0 -59
- package/dist/codex-queue-control.js.map +0 -1
- package/dist/codex-tool-messages.d.ts +0 -7
- package/dist/codex-tool-messages.js +0 -126
- package/dist/codex-tool-messages.js.map +0 -1
- package/dist/codex-wake.d.ts +0 -58
- package/dist/codex-wake.js +0 -135
- package/dist/codex-wake.js.map +0 -1
- package/dist/command-session.d.ts +0 -14
- package/dist/command-session.js +0 -31
- package/dist/command-session.js.map +0 -1
- package/dist/commands-acknowledge.d.ts +0 -13
- package/dist/commands-acknowledge.js +0 -116
- package/dist/commands-acknowledge.js.map +0 -1
- package/dist/commands-agent-sessions.d.ts +0 -6
- package/dist/commands-agent-sessions.js +0 -51
- package/dist/commands-agent-sessions.js.map +0 -1
- package/dist/commands-ask.d.ts +0 -62
- package/dist/commands-ask.js +0 -503
- package/dist/commands-ask.js.map +0 -1
- package/dist/commands-auth.d.ts +0 -76
- package/dist/commands-auth.js +0 -421
- package/dist/commands-auth.js.map +0 -1
- package/dist/commands-close.d.ts +0 -6
- package/dist/commands-close.js +0 -273
- package/dist/commands-close.js.map +0 -1
- package/dist/commands-config.d.ts +0 -31
- package/dist/commands-config.js +0 -272
- package/dist/commands-config.js.map +0 -1
- package/dist/commands-core.d.ts +0 -145
- package/dist/commands-core.js +0 -190
- package/dist/commands-core.js.map +0 -1
- package/dist/commands-devices.d.ts +0 -41
- package/dist/commands-devices.js +0 -144
- package/dist/commands-devices.js.map +0 -1
- package/dist/commands-doctor.d.ts +0 -25
- package/dist/commands-doctor.js +0 -1553
- package/dist/commands-doctor.js.map +0 -1
- package/dist/commands-guidance.d.ts +0 -27
- package/dist/commands-guidance.js +0 -150
- package/dist/commands-guidance.js.map +0 -1
- package/dist/commands-harness-context.d.ts +0 -57
- package/dist/commands-harness-context.js +0 -102
- package/dist/commands-harness-context.js.map +0 -1
- package/dist/commands-hook-attend.d.ts +0 -70
- package/dist/commands-hook-attend.js +0 -655
- package/dist/commands-hook-attend.js.map +0 -1
- package/dist/commands-hook-diagnostics.d.ts +0 -37
- package/dist/commands-hook-diagnostics.js +0 -136
- package/dist/commands-hook-diagnostics.js.map +0 -1
- package/dist/commands-hook-install.d.ts +0 -26
- package/dist/commands-hook-install.js +0 -784
- package/dist/commands-hook-install.js.map +0 -1
- package/dist/commands-hook-run.d.ts +0 -29
- package/dist/commands-hook-run.js +0 -933
- package/dist/commands-hook-run.js.map +0 -1
- package/dist/commands-hook-shape.d.ts +0 -19
- package/dist/commands-hook-shape.js +0 -48
- package/dist/commands-hook-shape.js.map +0 -1
- package/dist/commands-init.d.ts +0 -42
- package/dist/commands-init.js +0 -901
- package/dist/commands-init.js.map +0 -1
- package/dist/commands-io.d.ts +0 -2
- package/dist/commands-io.js +0 -117
- package/dist/commands-io.js.map +0 -1
- package/dist/commands-logs.d.ts +0 -30
- package/dist/commands-logs.js +0 -201
- package/dist/commands-logs.js.map +0 -1
- package/dist/commands-native-acknowledge.d.ts +0 -8
- package/dist/commands-native-acknowledge.js +0 -114
- package/dist/commands-native-acknowledge.js.map +0 -1
- package/dist/commands-project.d.ts +0 -4
- package/dist/commands-project.js +0 -41
- package/dist/commands-project.js.map +0 -1
- package/dist/commands-receive.d.ts +0 -3
- package/dist/commands-receive.js +0 -59
- package/dist/commands-receive.js.map +0 -1
- package/dist/commands-send-support.d.ts +0 -59
- package/dist/commands-send-support.js +0 -258
- package/dist/commands-send-support.js.map +0 -1
- package/dist/commands-send.d.ts +0 -34
- package/dist/commands-send.js +0 -900
- package/dist/commands-send.js.map +0 -1
- package/dist/commands-setup-proof.d.ts +0 -43
- package/dist/commands-setup-proof.js +0 -134
- package/dist/commands-setup-proof.js.map +0 -1
- package/dist/commands-skill.d.ts +0 -21
- package/dist/commands-skill.js +0 -199
- package/dist/commands-skill.js.map +0 -1
- package/dist/commands-sounds.d.ts +0 -12
- package/dist/commands-sounds.js +0 -35
- package/dist/commands-sounds.js.map +0 -1
- package/dist/commands-update-check.d.ts +0 -6
- package/dist/commands-update-check.js +0 -102
- package/dist/commands-update-check.js.map +0 -1
- package/dist/commands-update-resume.d.ts +0 -7
- package/dist/commands-update-resume.js +0 -143
- package/dist/commands-update-resume.js.map +0 -1
- package/dist/commands-update-skill.d.ts +0 -5
- package/dist/commands-update-skill.js +0 -36
- package/dist/commands-update-skill.js.map +0 -1
- package/dist/commands-update.d.ts +0 -11
- package/dist/commands-update.js +0 -286
- package/dist/commands-update.js.map +0 -1
- package/dist/commands.d.ts +0 -26
- package/dist/commands.js +0 -27
- package/dist/commands.js.map +0 -1
- package/dist/config-schema.d.ts +0 -62
- package/dist/config-schema.js +0 -302
- package/dist/config-schema.js.map +0 -1
- package/dist/config.d.ts +0 -181
- package/dist/config.js +0 -357
- package/dist/config.js.map +0 -1
- package/dist/credentials.d.ts +0 -96
- package/dist/credentials.js +0 -342
- package/dist/credentials.js.map +0 -1
- package/dist/file-lock.d.ts +0 -34
- package/dist/file-lock.js +0 -367
- package/dist/file-lock.js.map +0 -1
- package/dist/generated-session-label.d.ts +0 -2
- package/dist/generated-session-label.js +0 -152
- package/dist/generated-session-label.js.map +0 -1
- package/dist/guidance-content.d.ts +0 -53
- package/dist/guidance-content.js +0 -248
- package/dist/guidance-content.js.map +0 -1
- package/dist/guidance-render.d.ts +0 -25
- package/dist/guidance-render.js +0 -47
- package/dist/guidance-render.js.map +0 -1
- package/dist/guidance.d.ts +0 -69
- package/dist/guidance.js +0 -173
- package/dist/guidance.js.map +0 -1
- package/dist/harness-session-title.d.ts +0 -22
- package/dist/harness-session-title.js +0 -74
- package/dist/harness-session-title.js.map +0 -1
- package/dist/harnesses.d.ts +0 -65
- package/dist/harnesses.js +0 -159
- package/dist/harnesses.js.map +0 -1
- package/dist/hermes-attendant.d.ts +0 -38
- package/dist/hermes-attendant.js +0 -337
- package/dist/hermes-attendant.js.map +0 -1
- package/dist/hermes-plugin.d.ts +0 -11
- package/dist/hermes-plugin.js +0 -299
- package/dist/hermes-plugin.js.map +0 -1
- package/dist/hook-acknowledgements.d.ts +0 -70
- package/dist/hook-acknowledgements.js +0 -490
- package/dist/hook-acknowledgements.js.map +0 -1
- package/dist/hook-adapter.d.ts +0 -48
- package/dist/hook-adapter.js +0 -419
- package/dist/hook-adapter.js.map +0 -1
- package/dist/hook-events.d.ts +0 -105
- package/dist/hook-events.js +0 -130
- package/dist/hook-events.js.map +0 -1
- package/dist/hook-gates.d.ts +0 -7
- package/dist/hook-gates.js +0 -20
- package/dist/hook-gates.js.map +0 -1
- package/dist/hook-input.d.ts +0 -10
- package/dist/hook-input.js +0 -64
- package/dist/hook-input.js.map +0 -1
- package/dist/hook-lifecycle.d.ts +0 -112
- package/dist/hook-lifecycle.js +0 -2031
- package/dist/hook-lifecycle.js.map +0 -1
- package/dist/hook-project-sessions.d.ts +0 -28
- package/dist/hook-project-sessions.js +0 -141
- package/dist/hook-project-sessions.js.map +0 -1
- package/dist/hook-question-lock.d.ts +0 -29
- package/dist/hook-question-lock.js +0 -217
- package/dist/hook-question-lock.js.map +0 -1
- package/dist/hook-question-retirement.d.ts +0 -74
- package/dist/hook-question-retirement.js +0 -314
- package/dist/hook-question-retirement.js.map +0 -1
- package/dist/hook-question-state.d.ts +0 -58
- package/dist/hook-question-state.js +0 -239
- package/dist/hook-question-state.js.map +0 -1
- package/dist/hook-session-state.d.ts +0 -127
- package/dist/hook-session-state.js +0 -488
- package/dist/hook-session-state.js.map +0 -1
- package/dist/hook-types.d.ts +0 -476
- package/dist/hook-types.js +0 -4
- package/dist/hook-types.js.map +0 -1
- package/dist/injection-render.d.ts +0 -36
- package/dist/injection-render.js +0 -61
- package/dist/injection-render.js.map +0 -1
- package/dist/install-hooks.d.ts +0 -470
- package/dist/install-hooks.js +0 -1622
- package/dist/install-hooks.js.map +0 -1
- package/dist/integration-health.d.ts +0 -26
- package/dist/integration-health.js +0 -133
- package/dist/integration-health.js.map +0 -1
- package/dist/interactive.d.ts +0 -22
- package/dist/interactive.js +0 -644
- package/dist/interactive.js.map +0 -1
- package/dist/invocation-context.d.ts +0 -47
- package/dist/invocation-context.js +0 -164
- package/dist/invocation-context.js.map +0 -1
- package/dist/local-path.d.ts +0 -7
- package/dist/local-path.js +0 -27
- package/dist/local-path.js.map +0 -1
- package/dist/logging.d.ts +0 -157
- package/dist/logging.js +0 -599
- package/dist/logging.js.map +0 -1
- package/dist/main-run.d.ts +0 -1
- package/dist/main-run.js +0 -42
- package/dist/main-run.js.map +0 -1
- package/dist/main.d.ts +0 -2
- package/dist/main.js +0 -12
- package/dist/main.js.map +0 -1
- package/dist/native-answer-operation.d.ts +0 -70
- package/dist/native-answer-operation.js +0 -247
- package/dist/native-answer-operation.js.map +0 -1
- package/dist/native-skills.d.ts +0 -64
- package/dist/native-skills.js +0 -167
- package/dist/native-skills.js.map +0 -1
- package/dist/node-floor.d.ts +0 -19
- package/dist/node-floor.js +0 -32
- package/dist/node-floor.js.map +0 -1
- package/dist/npm-invocation.d.ts +0 -34
- package/dist/npm-invocation.js +0 -53
- package/dist/npm-invocation.js.map +0 -1
- package/dist/openclaw-continuation-bridge.d.ts +0 -7
- package/dist/openclaw-continuation-bridge.js +0 -64
- package/dist/openclaw-continuation-bridge.js.map +0 -1
- package/dist/openclaw-gateway-readiness.d.ts +0 -1
- package/dist/openclaw-gateway-readiness.js +0 -24
- package/dist/openclaw-gateway-readiness.js.map +0 -1
- package/dist/openclaw-generation.d.ts +0 -21
- package/dist/openclaw-generation.js +0 -115
- package/dist/openclaw-generation.js.map +0 -1
- package/dist/openclaw-message-bridge.d.ts +0 -8
- package/dist/openclaw-message-bridge.js +0 -93
- package/dist/openclaw-message-bridge.js.map +0 -1
- package/dist/openclaw-pending.d.ts +0 -8
- package/dist/openclaw-pending.js +0 -47
- package/dist/openclaw-pending.js.map +0 -1
- package/dist/openclaw-plugin.d.ts +0 -75
- package/dist/openclaw-plugin.js +0 -1353
- package/dist/openclaw-plugin.js.map +0 -1
- package/dist/openclaw-session-access.d.ts +0 -12
- package/dist/openclaw-session-access.js +0 -79
- package/dist/openclaw-session-access.js.map +0 -1
- package/dist/opencode-plugin.d.ts +0 -88
- package/dist/opencode-plugin.js +0 -286
- package/dist/opencode-plugin.js.map +0 -1
- package/dist/orca-session-title.d.ts +0 -11
- package/dist/orca-session-title.js +0 -111
- package/dist/orca-session-title.js.map +0 -1
- package/dist/pack-feedback-slice.d.ts +0 -35
- package/dist/pack-feedback-slice.js +0 -126
- package/dist/pack-feedback-slice.js.map +0 -1
- package/dist/pairing-qr.d.ts +0 -5
- package/dist/pairing-qr.js +0 -24
- package/dist/pairing-qr.js.map +0 -1
- package/dist/pending-pairing.d.ts +0 -38
- package/dist/pending-pairing.js +0 -70
- package/dist/pending-pairing.js.map +0 -1
- package/dist/platform.d.ts +0 -67
- package/dist/platform.js +0 -140
- package/dist/platform.js.map +0 -1
- package/dist/process-identity.d.ts +0 -26
- package/dist/process-identity.js +0 -82
- package/dist/process-identity.js.map +0 -1
- package/dist/program.d.ts +0 -59
- package/dist/program.js +0 -691
- package/dist/program.js.map +0 -1
- package/dist/project-enablement.d.ts +0 -21
- package/dist/project-enablement.js +0 -71
- package/dist/project-enablement.js.map +0 -1
- package/dist/question-settlement-process.d.ts +0 -17
- package/dist/question-settlement-process.js +0 -35
- package/dist/question-settlement-process.js.map +0 -1
- package/dist/question-timing.d.ts +0 -46
- package/dist/question-timing.js +0 -48
- package/dist/question-timing.js.map +0 -1
- package/dist/readiness.d.ts +0 -153
- package/dist/readiness.js +0 -149
- package/dist/readiness.js.map +0 -1
- package/dist/release.d.ts +0 -31
- package/dist/release.js +0 -52
- package/dist/release.js.map +0 -1
- package/dist/send-attempts.d.ts +0 -26
- package/dist/send-attempts.js +0 -139
- package/dist/send-attempts.js.map +0 -1
- package/dist/send.d.ts +0 -115
- package/dist/send.js +0 -421
- package/dist/send.js.map +0 -1
- package/dist/session-activation.d.ts +0 -13
- package/dist/session-activation.js +0 -64
- package/dist/session-activation.js.map +0 -1
- package/dist/session-attendant-probe.d.ts +0 -85
- package/dist/session-attendant-probe.js +0 -173
- package/dist/session-attendant-probe.js.map +0 -1
- package/dist/session-attendant-state.d.ts +0 -70
- package/dist/session-attendant-state.js +0 -256
- package/dist/session-attendant-state.js.map +0 -1
- package/dist/session-attendant.d.ts +0 -143
- package/dist/session-attendant.js +0 -520
- package/dist/session-attendant.js.map +0 -1
- package/dist/session-delivery.d.ts +0 -249
- package/dist/session-delivery.js +0 -576
- package/dist/session-delivery.js.map +0 -1
- package/dist/session-handoff.d.ts +0 -98
- package/dist/session-handoff.js +0 -118
- package/dist/session-handoff.js.map +0 -1
- package/dist/session-input-wakes.d.ts +0 -78
- package/dist/session-input-wakes.js +0 -239
- package/dist/session-input-wakes.js.map +0 -1
- package/dist/session-inputs.d.ts +0 -57
- package/dist/session-inputs.js +0 -434
- package/dist/session-inputs.js.map +0 -1
- package/dist/session-labels.d.ts +0 -56
- package/dist/session-labels.js +0 -396
- package/dist/session-labels.js.map +0 -1
- package/dist/session-message-handoff.d.ts +0 -39
- package/dist/session-message-handoff.js +0 -107
- package/dist/session-message-handoff.js.map +0 -1
- package/dist/setup-destinations.d.ts +0 -23
- package/dist/setup-destinations.js +0 -44
- package/dist/setup-destinations.js.map +0 -1
- package/dist/skill-integrity.d.ts +0 -54
- package/dist/skill-integrity.js +0 -164
- package/dist/skill-integrity.js.map +0 -1
- package/dist/skill-source/manifest.json +0 -40
- package/dist/skill-source/notifai/SKILL.md +0 -350
- package/dist/skill-source/notifai/references/diagnostics.md +0 -36
- package/dist/skill-source/notifai/references/harness-setup.md +0 -384
- package/dist/skill-source/notifai/references/native-questions.md +0 -51
- package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
- package/dist/skill-source/notifai/references/send-details.md +0 -14
- package/dist/skill-source/notifai/references/updates.md +0 -116
- package/dist/skill-source/notifai/references/writing-examples.md +0 -56
- package/dist/sound-ref.d.ts +0 -23
- package/dist/sound-ref.js +0 -28
- package/dist/sound-ref.js.map +0 -1
- package/dist/ui/banner.d.ts +0 -22
- package/dist/ui/banner.js +0 -87
- package/dist/ui/banner.js.map +0 -1
- package/dist/ui/config-view.d.ts +0 -30
- package/dist/ui/config-view.js +0 -108
- package/dist/ui/config-view.js.map +0 -1
- package/dist/ui/help.d.ts +0 -44
- package/dist/ui/help.js +0 -107
- package/dist/ui/help.js.map +0 -1
- package/dist/ui/theme.d.ts +0 -90
- package/dist/ui/theme.js +0 -244
- package/dist/ui/theme.js.map +0 -1
- package/dist/update-handoff.d.ts +0 -29
- package/dist/update-handoff.js +0 -69
- package/dist/update-handoff.js.map +0 -1
- package/dist/url-policy.d.ts +0 -85
- package/dist/url-policy.js +0 -369
- package/dist/url-policy.js.map +0 -1
- package/dist/version.d.ts +0 -40
- package/dist/version.js +0 -132
- package/dist/version.js.map +0 -1
- package/dist/wake-support.d.ts +0 -40
- package/dist/wake-support.js +0 -95
- package/dist/wake-support.js.map +0 -1
package/dist/commands-close.js
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { resolveCommandSession } from './command-session.js';
|
|
2
|
-
import { terminateCodexQuestions } from './codex-question-bindings.js';
|
|
3
|
-
import { EXIT, authedClient, loadLoggedConfig, reportError, } from './commands-core.js';
|
|
4
|
-
import { acknowledgementCommand, printAcknowledgementStatus } from './commands-send-support.js';
|
|
5
|
-
import { parkForRetirement, retireQueuedQuestions } from './hook-question-retirement.js';
|
|
6
|
-
import { dropPendingQuestion, inspectQuestionState } from './hook-question-state.js';
|
|
7
|
-
import { readSessionState, updateSessionState } from './hook-session-state.js';
|
|
8
|
-
import {} from './hook-types.js';
|
|
9
|
-
/**
|
|
10
|
-
* An explicit close is a retirement: whatever replies it returns go to the
|
|
11
|
-
* command's caller, never through a claimed hand-off, so they are not selected
|
|
12
|
-
* for delivery. The printed response keeps its released shape.
|
|
13
|
-
*/
|
|
14
|
-
async function retireReplies(client, requestId) {
|
|
15
|
-
const response = {
|
|
16
|
-
...(await client.closeReplies(requestId, 'retire')),
|
|
17
|
-
};
|
|
18
|
-
delete response.close_disposition;
|
|
19
|
-
delete response.delivered_reply_seq;
|
|
20
|
-
return response;
|
|
21
|
-
}
|
|
22
|
-
/** Retire a question so a late answer is rejected rather than silently lost. */
|
|
23
|
-
export async function closeCommand(deps, requestId, flags = {}) {
|
|
24
|
-
if (flags.pending === true && requestId !== undefined) {
|
|
25
|
-
deps.io.err('Pass a question or request id or --pending, not both.');
|
|
26
|
-
return EXIT.usage;
|
|
27
|
-
}
|
|
28
|
-
if (flags.pending !== true && requestId === undefined) {
|
|
29
|
-
deps.io.err('Pass a question or request id or --pending.');
|
|
30
|
-
return EXIT.usage;
|
|
31
|
-
}
|
|
32
|
-
if (flags.pending === true) {
|
|
33
|
-
return closePendingQuestions(deps, flags.json === true);
|
|
34
|
-
}
|
|
35
|
-
const questionId = requestId.startsWith('q_') ? requestId : undefined;
|
|
36
|
-
if (questionId !== undefined) {
|
|
37
|
-
const lookup = inspectQuestionState(questionId, deps.env);
|
|
38
|
-
if (!lookup.found) {
|
|
39
|
-
deps.io.err(lookup.ambiguous
|
|
40
|
-
? `Question ${questionId} appears in more than one local Agent Session; refusing to guess.`
|
|
41
|
-
: `No local registration state exists for ${questionId}. Use the original request id if available.`);
|
|
42
|
-
return EXIT.failed;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
const bindingOwner = resolveCommandSession(deps, requestId);
|
|
46
|
-
if (bindingOwner !== null)
|
|
47
|
-
revokeNativeBindings(bindingOwner.sessionId, deps.env, new Set([requestId]));
|
|
48
|
-
const local = await closeLocalQuestion(deps, requestId, flags.json === true);
|
|
49
|
-
if (local !== null)
|
|
50
|
-
return local;
|
|
51
|
-
// Answer delivery removes the pending entry but retains its stable identity.
|
|
52
|
-
// Re-read after local retirement: promotion or delivery may have raced it.
|
|
53
|
-
if (questionId !== undefined) {
|
|
54
|
-
const lookup = inspectQuestionState(questionId, deps.env);
|
|
55
|
-
if (!lookup.found) {
|
|
56
|
-
deps.io.err(`Cannot resolve question ${questionId} uniquely; use the original request id if available.`);
|
|
57
|
-
return EXIT.failed;
|
|
58
|
-
}
|
|
59
|
-
const question = lookup.question;
|
|
60
|
-
if (question.state === 'withdrawn' && question.submitted === false) {
|
|
61
|
-
if (flags.json)
|
|
62
|
-
deps.io.out(JSON.stringify(question, null, 2));
|
|
63
|
-
else
|
|
64
|
-
deps.io.out(`Question ${questionId} was already withdrawn without submission.`);
|
|
65
|
-
return EXIT.ok;
|
|
66
|
-
}
|
|
67
|
-
const resolved = question.request_id ?? question.frozen_request_id;
|
|
68
|
-
if (resolved === null) {
|
|
69
|
-
deps.io.err(`Question ${questionId} has no remote request identity; inspect its status before retrying.`);
|
|
70
|
-
return EXIT.failed;
|
|
71
|
-
}
|
|
72
|
-
requestId = resolved;
|
|
73
|
-
}
|
|
74
|
-
const lifecycleSession = resolveCommandSession(deps, requestId);
|
|
75
|
-
const config = loadLoggedConfig(deps, {
|
|
76
|
-
cwd: deps.cwd,
|
|
77
|
-
env: deps.env,
|
|
78
|
-
...(lifecycleSession === null ? {} : { sessionId: lifecycleSession.sessionId }),
|
|
79
|
-
});
|
|
80
|
-
const authed = authedClient(deps, config);
|
|
81
|
-
if (!authed)
|
|
82
|
-
return EXIT.auth;
|
|
83
|
-
try {
|
|
84
|
-
const response = await retireReplies(authed.client, requestId);
|
|
85
|
-
forgetClosedQuestion(deps, requestId);
|
|
86
|
-
if (flags.json) {
|
|
87
|
-
deps.io.out(JSON.stringify({
|
|
88
|
-
...response,
|
|
89
|
-
...(questionId === undefined ? {} : { question_id: questionId }),
|
|
90
|
-
agent_acknowledgement_required: response.replies.length > 0 || response.agent_acknowledgement_required,
|
|
91
|
-
acknowledgement_command: acknowledgementCommand(response.request_id, response.agent_acknowledgement_text_required, response.agent_acknowledgement, response.replies.length > 0),
|
|
92
|
-
}, null, 2));
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
deps.io.out(`Closed the reply window for ${requestId}.`);
|
|
96
|
-
if (response.replies.length > 0)
|
|
97
|
-
printAcknowledgementStatus(deps, response);
|
|
98
|
-
}
|
|
99
|
-
return EXIT.ok;
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
return reportError(deps, err);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Retire this session's outstanding questions, including registrations the
|
|
107
|
-
* Stop hook has not pushed yet. Preparations are withdrawn locally; admitted
|
|
108
|
-
* attempts keep retirement debt. Live ones need their reply window closed.
|
|
109
|
-
*/
|
|
110
|
-
async function closePendingQuestions(deps, json) {
|
|
111
|
-
const lifecycleSession = resolveCommandSession(deps);
|
|
112
|
-
if (lifecycleSession === null) {
|
|
113
|
-
deps.io.err('No active session pointer is available in this directory.');
|
|
114
|
-
return EXIT.noReply;
|
|
115
|
-
}
|
|
116
|
-
const sessionId = lifecycleSession.sessionId;
|
|
117
|
-
const pending = readSessionState(sessionId, deps.env).pending ?? [];
|
|
118
|
-
if (pending.length === 0) {
|
|
119
|
-
if (json) {
|
|
120
|
-
deps.io.out(JSON.stringify({ session_id: sessionId, withdrawn: [], closed: [] }, null, 2));
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
deps.io.err(`Session ${sessionId} has no registered question pending.`);
|
|
124
|
-
}
|
|
125
|
-
return EXIT.noReply;
|
|
126
|
-
}
|
|
127
|
-
const { withdrawn, retiring } = retireQueuedQuestions(sessionId, deps.env);
|
|
128
|
-
let live = [];
|
|
129
|
-
updateSessionState(sessionId, deps.env, state => {
|
|
130
|
-
live = (state.pending ?? []).filter((entry) => entry.request_id !== undefined);
|
|
131
|
-
return terminateCodexQuestions(state, new Set(live.flatMap(entry => entry.question_id === undefined ? [entry.request_id] : [entry.question_id, entry.request_id])));
|
|
132
|
-
});
|
|
133
|
-
const closed = [];
|
|
134
|
-
if (live.length > 0) {
|
|
135
|
-
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env, sessionId });
|
|
136
|
-
const authed = authedClient(deps, config);
|
|
137
|
-
if (!authed)
|
|
138
|
-
return EXIT.auth;
|
|
139
|
-
for (const entry of live) {
|
|
140
|
-
try {
|
|
141
|
-
await retireReplies(authed.client, entry.request_id);
|
|
142
|
-
parkClosedQuestion(sessionId, deps.env, entry);
|
|
143
|
-
dropPendingQuestion(sessionId, deps.env, entry);
|
|
144
|
-
closed.push(entry.request_id);
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
return reportError(deps, err, { operation: 'close', request_id: entry.request_id });
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
const output = {
|
|
152
|
-
session_id: sessionId,
|
|
153
|
-
withdrawn: withdrawn.map((entry) => ({
|
|
154
|
-
question: entry.question,
|
|
155
|
-
...(entry.question_id === undefined ? {} : { question_id: entry.question_id }),
|
|
156
|
-
})),
|
|
157
|
-
closed,
|
|
158
|
-
...(retiring.length === 0 ? {} : { retiring: retiring.map((entry) => entry.request_id) }),
|
|
159
|
-
};
|
|
160
|
-
if (json)
|
|
161
|
-
deps.io.out(JSON.stringify(output, null, 2));
|
|
162
|
-
else {
|
|
163
|
-
if (withdrawn.length > 0) {
|
|
164
|
-
deps.io.out(withdrawn.length === 1
|
|
165
|
-
? 'Withdrew 1 unpushed question so a later Stop will not send it.'
|
|
166
|
-
: `Withdrew ${withdrawn.length} unpushed questions so a later Stop will not send them.`);
|
|
167
|
-
}
|
|
168
|
-
for (const requestId of closed) {
|
|
169
|
-
deps.io.out(`Closed the reply window for ${requestId}.`);
|
|
170
|
-
}
|
|
171
|
-
if (retiring.length > 0) {
|
|
172
|
-
deps.io.out('Submission had already started; stopped local retries and queued retirement of the reserved request identities.');
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
return EXIT.ok;
|
|
176
|
-
}
|
|
177
|
-
/** Explicit cancellation revokes association locally even if the remote close
|
|
178
|
-
* needs retry. Natural expiry only ends the app window, not the native form.
|
|
179
|
-
*/
|
|
180
|
-
function revokeNativeBindings(sessionId, env, ids) {
|
|
181
|
-
updateSessionState(sessionId, env, state => terminateCodexQuestions(state, ids));
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Close one outstanding question by the stable id `notifai ask` returned, or
|
|
185
|
-
* by a request id already on a device. Admission decides whether a queued
|
|
186
|
-
* entry can be withdrawn silently or needs its reserved remote id retired.
|
|
187
|
-
* Returns null when this directory's session has no matching registration, so
|
|
188
|
-
* the caller can still close a live request id against the service.
|
|
189
|
-
*/
|
|
190
|
-
async function closeLocalQuestion(deps, id, json) {
|
|
191
|
-
const lifecycleSession = resolveCommandSession(deps, id);
|
|
192
|
-
if (lifecycleSession === null)
|
|
193
|
-
return null;
|
|
194
|
-
const sessionId = lifecycleSession.sessionId;
|
|
195
|
-
const entry = (readSessionState(sessionId, deps.env).pending ?? []).find((candidate) => candidate.question_id === id || candidate.request_id === id);
|
|
196
|
-
if (entry === undefined)
|
|
197
|
-
return null;
|
|
198
|
-
if (entry.request_id === undefined) {
|
|
199
|
-
const { withdrawn, retiring } = retireQueuedQuestions(sessionId, deps.env, entry.question_id);
|
|
200
|
-
// Admission may have completed and promoted this entry after the first
|
|
201
|
-
// read. Re-resolve it so the live close path owns that ordering.
|
|
202
|
-
if (withdrawn.length === 0 && retiring.length === 0) {
|
|
203
|
-
const current = (readSessionState(sessionId, deps.env).pending ?? []).find((candidate) => candidate.question_id === id || candidate.request_id === id);
|
|
204
|
-
if (current?.request_id !== undefined)
|
|
205
|
-
return closeLocalQuestion(deps, current.request_id, json);
|
|
206
|
-
return EXIT.noReply;
|
|
207
|
-
}
|
|
208
|
-
const output = {
|
|
209
|
-
session_id: sessionId,
|
|
210
|
-
withdrawn: withdrawn.map((item) => ({
|
|
211
|
-
question: item.question,
|
|
212
|
-
...(item.question_id === undefined ? {} : { question_id: item.question_id }),
|
|
213
|
-
})),
|
|
214
|
-
closed: [],
|
|
215
|
-
...(retiring.length === 0 ? {} : { retiring: retiring.map((item) => item.request_id) }),
|
|
216
|
-
};
|
|
217
|
-
if (json)
|
|
218
|
-
deps.io.out(JSON.stringify(output, null, 2));
|
|
219
|
-
else {
|
|
220
|
-
deps.io.out(retiring.length > 0
|
|
221
|
-
? 'Submission had already started; stopped local retries and queued retirement of the reserved request identity.'
|
|
222
|
-
: `Withdrew unpushed question ${entry.question_id ?? id} so a later Stop will not send it.`);
|
|
223
|
-
}
|
|
224
|
-
return EXIT.ok;
|
|
225
|
-
}
|
|
226
|
-
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env, sessionId });
|
|
227
|
-
const authed = authedClient(deps, config);
|
|
228
|
-
if (!authed)
|
|
229
|
-
return EXIT.auth;
|
|
230
|
-
try {
|
|
231
|
-
const response = await retireReplies(authed.client, entry.request_id);
|
|
232
|
-
parkClosedQuestion(sessionId, deps.env, entry);
|
|
233
|
-
dropPendingQuestion(sessionId, deps.env, entry);
|
|
234
|
-
if (json) {
|
|
235
|
-
deps.io.out(JSON.stringify({
|
|
236
|
-
...response,
|
|
237
|
-
agent_acknowledgement_required: response.replies.length > 0 || response.agent_acknowledgement_required,
|
|
238
|
-
question_id: entry.question_id,
|
|
239
|
-
acknowledgement_command: acknowledgementCommand(response.request_id, response.agent_acknowledgement_text_required, response.agent_acknowledgement, response.replies.length > 0),
|
|
240
|
-
}, null, 2));
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
deps.io.out(`Closed the reply window for ${entry.request_id}.`);
|
|
244
|
-
if (response.replies.length > 0)
|
|
245
|
-
printAcknowledgementStatus(deps, response);
|
|
246
|
-
}
|
|
247
|
-
return EXIT.ok;
|
|
248
|
-
}
|
|
249
|
-
catch (err) {
|
|
250
|
-
return reportError(deps, err, { operation: 'close', request_id: entry.request_id });
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
function forgetClosedQuestion(deps, requestId) {
|
|
254
|
-
const lifecycleSession = resolveCommandSession(deps, requestId);
|
|
255
|
-
if (lifecycleSession === null)
|
|
256
|
-
return;
|
|
257
|
-
const sessionId = lifecycleSession.sessionId;
|
|
258
|
-
const entry = (readSessionState(sessionId, deps.env).pending ?? []).find((candidate) => candidate.request_id === requestId);
|
|
259
|
-
if (entry === undefined)
|
|
260
|
-
return;
|
|
261
|
-
parkClosedQuestion(sessionId, deps.env, entry);
|
|
262
|
-
dropPendingQuestion(sessionId, deps.env, entry);
|
|
263
|
-
}
|
|
264
|
-
function parkClosedQuestion(sessionId, env, entry) {
|
|
265
|
-
try {
|
|
266
|
-
parkForRetirement(sessionId, env, entry, 'expired');
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
// Incomplete identifiers cannot be retired on a device; dropping the
|
|
270
|
-
// local record is still the right way to stop a later Stop from waiting.
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
//# sourceMappingURL=commands-close.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-close.js","sourceRoot":"","sources":["../src/commands-close.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { type CommandDeps } from './commands-core.js';
|
|
2
|
-
export declare function configShowCommand(deps: CommandDeps, flags: {
|
|
3
|
-
json?: boolean;
|
|
4
|
-
explain?: boolean;
|
|
5
|
-
plain?: boolean;
|
|
6
|
-
}): number;
|
|
7
|
-
/**
|
|
8
|
-
* One setting, explained in full.
|
|
9
|
-
*
|
|
10
|
-
* The gap this closes: `config show` prints a value and provenance but that is
|
|
11
|
-
* not enough to explain the setting's consequences. Every key already had a
|
|
12
|
-
* careful explanation — in a TypeScript comment, read by everyone except the
|
|
13
|
-
* person who needed it.
|
|
14
|
-
*/
|
|
15
|
-
export declare function configExplainCommand(deps: CommandDeps, key: string, flags?: {
|
|
16
|
-
json?: boolean;
|
|
17
|
-
}): number;
|
|
18
|
-
export declare function configSetCommand(deps: CommandDeps, key: string, rawValue: string, flags: {
|
|
19
|
-
project?: boolean;
|
|
20
|
-
local?: boolean;
|
|
21
|
-
session?: string;
|
|
22
|
-
yes?: boolean;
|
|
23
|
-
}): Promise<number>;
|
|
24
|
-
type ConfigMutationFlags = {
|
|
25
|
-
project?: boolean;
|
|
26
|
-
local?: boolean;
|
|
27
|
-
session?: string;
|
|
28
|
-
yes?: boolean;
|
|
29
|
-
};
|
|
30
|
-
export declare function configUnsetCommand(deps: CommandDeps, key: string, flags: ConfigMutationFlags): Promise<number>;
|
|
31
|
-
export {};
|
package/dist/commands-config.js
DELETED
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
|
|
4
|
-
import { ensurePrivateDirectory } from './atomic-file.js';
|
|
5
|
-
import { acceptedValues, configInfo } from './config-schema.js';
|
|
6
|
-
import { BOOLEAN_CONFIG_KEYS, CONFIG_KEYS, NUMERIC_CONFIG_KEYS, ORIGIN_LIST_CONFIG_KEYS, USER_OWNED_CONFIG_KEYS, configBounds, configDefaultValue, globalConfigPath, personalProjectConfigPath, sharedProjectConfigPath, sessionConfigPath, } from './config.js';
|
|
7
|
-
import { normalizeOrigin } from './url-policy.js';
|
|
8
|
-
import { renderConfigExplain, renderConfigList, renderConfigPlain } from './ui/config-view.js';
|
|
9
|
-
import { EXIT, loadLoggedConfig } from './commands-core.js';
|
|
10
|
-
import { isCliSoundRef } from './sound-ref.js';
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
// config show / set / unset
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
export function configShowCommand(deps, flags) {
|
|
15
|
-
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
16
|
-
if (flags.json) {
|
|
17
|
-
const output = Object.fromEntries(CONFIG_KEYS.map((key) => [
|
|
18
|
-
key,
|
|
19
|
-
{
|
|
20
|
-
value: config[key].value,
|
|
21
|
-
source: config[key].source,
|
|
22
|
-
summary: configInfo(key).summary,
|
|
23
|
-
},
|
|
24
|
-
]));
|
|
25
|
-
deps.io.out(JSON.stringify(output, null, 2));
|
|
26
|
-
return EXIT.ok;
|
|
27
|
-
}
|
|
28
|
-
// Anything that is not a person at a terminal keeps the flat `key = value`
|
|
29
|
-
// form it has always had. Scripts parse this, and a prettier layout for an
|
|
30
|
-
// audience that cannot see it would only be a breaking change.
|
|
31
|
-
if (deps.io.interactive !== true || flags.plain === true) {
|
|
32
|
-
for (const line of renderConfigPlain(config, flags.explain === true))
|
|
33
|
-
deps.io.out(line);
|
|
34
|
-
return EXIT.ok;
|
|
35
|
-
}
|
|
36
|
-
for (const line of renderConfigList(config, { showAdvanced: flags.explain === true })) {
|
|
37
|
-
deps.io.out(line);
|
|
38
|
-
}
|
|
39
|
-
return EXIT.ok;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* One setting, explained in full.
|
|
43
|
-
*
|
|
44
|
-
* The gap this closes: `config show` prints a value and provenance but that is
|
|
45
|
-
* not enough to explain the setting's consequences. Every key already had a
|
|
46
|
-
* careful explanation — in a TypeScript comment, read by everyone except the
|
|
47
|
-
* person who needed it.
|
|
48
|
-
*/
|
|
49
|
-
export function configExplainCommand(deps, key, flags = {}) {
|
|
50
|
-
if (!CONFIG_KEYS.includes(key)) {
|
|
51
|
-
deps.io.err(`Unknown setting "${key}".`);
|
|
52
|
-
deps.io.err(`Valid settings: ${CONFIG_KEYS.join(', ')}`);
|
|
53
|
-
return EXIT.usage;
|
|
54
|
-
}
|
|
55
|
-
const configKey = key;
|
|
56
|
-
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
57
|
-
const info = configInfo(configKey);
|
|
58
|
-
const entry = config[configKey];
|
|
59
|
-
if (flags.json) {
|
|
60
|
-
deps.io.out(JSON.stringify({
|
|
61
|
-
key: configKey,
|
|
62
|
-
label: info.label,
|
|
63
|
-
group: info.group,
|
|
64
|
-
kind: info.kind,
|
|
65
|
-
summary: info.summary,
|
|
66
|
-
detail: info.detail,
|
|
67
|
-
accepts: acceptedValues(configKey),
|
|
68
|
-
...(info.choices !== undefined ? { choices: info.choices } : {}),
|
|
69
|
-
value: entry.value,
|
|
70
|
-
source: entry.source,
|
|
71
|
-
}, null, 2));
|
|
72
|
-
return EXIT.ok;
|
|
73
|
-
}
|
|
74
|
-
if (deps.io.interactive !== true) {
|
|
75
|
-
deps.io.out(`${configKey} = ${JSON.stringify(entry.value)} [${entry.source}]`);
|
|
76
|
-
deps.io.out(info.detail.replace(/\n\n/g, '\n'));
|
|
77
|
-
deps.io.out(`accepts: ${acceptedValues(configKey)}`);
|
|
78
|
-
return EXIT.ok;
|
|
79
|
-
}
|
|
80
|
-
for (const line of renderConfigExplain(configKey, config))
|
|
81
|
-
deps.io.out(line);
|
|
82
|
-
return EXIT.ok;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Closest config key by edit distance, or null when nothing is close.
|
|
86
|
-
*
|
|
87
|
-
* The threshold matters more than the algorithm: suggesting a key that shares
|
|
88
|
-
* three letters with the typo sends the reader to the wrong setting with
|
|
89
|
-
* confidence, which is worse than listing all fourteen and letting them look.
|
|
90
|
-
*/
|
|
91
|
-
function nearestKey(input) {
|
|
92
|
-
let best = null;
|
|
93
|
-
let bestDistance = Number.POSITIVE_INFINITY;
|
|
94
|
-
for (const candidate of CONFIG_KEYS) {
|
|
95
|
-
const distance = editDistance(input.toLowerCase(), candidate);
|
|
96
|
-
if (distance < bestDistance) {
|
|
97
|
-
bestDistance = distance;
|
|
98
|
-
best = candidate;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return best !== null && bestDistance <= Math.max(2, Math.floor(best.length / 3)) ? best : null;
|
|
102
|
-
}
|
|
103
|
-
function editDistance(a, b) {
|
|
104
|
-
const previous = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
105
|
-
for (let i = 1; i <= a.length; i += 1) {
|
|
106
|
-
let diagonal = previous[0];
|
|
107
|
-
previous[0] = i;
|
|
108
|
-
for (let j = 1; j <= b.length; j += 1) {
|
|
109
|
-
const above = previous[j];
|
|
110
|
-
previous[j] = Math.min(previous[j] + 1, previous[j - 1] + 1, diagonal + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
111
|
-
diagonal = above;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return previous[b.length];
|
|
115
|
-
}
|
|
116
|
-
export async function configSetCommand(deps, key, rawValue, flags) {
|
|
117
|
-
const configKey = configMutationKey(deps, key);
|
|
118
|
-
if (configKey === null)
|
|
119
|
-
return EXIT.usage;
|
|
120
|
-
const info = configInfo(configKey);
|
|
121
|
-
let value = rawValue;
|
|
122
|
-
if (NUMERIC_CONFIG_KEYS.includes(configKey)) {
|
|
123
|
-
const numeric = Number(rawValue);
|
|
124
|
-
if (!Number.isInteger(numeric)) {
|
|
125
|
-
deps.io.err(`${key} takes ${acceptedValues(configKey)}, not "${rawValue}".`);
|
|
126
|
-
return EXIT.usage;
|
|
127
|
-
}
|
|
128
|
-
const bounds = configBounds(configKey);
|
|
129
|
-
if (bounds !== undefined && (numeric < bounds.min || numeric > bounds.max)) {
|
|
130
|
-
deps.io.err(`${key} must be between ${bounds.min} and ${bounds.max}.`);
|
|
131
|
-
return EXIT.usage;
|
|
132
|
-
}
|
|
133
|
-
value = numeric;
|
|
134
|
-
}
|
|
135
|
-
if (BOOLEAN_CONFIG_KEYS.includes(configKey)) {
|
|
136
|
-
if (rawValue !== 'true' && rawValue !== 'false') {
|
|
137
|
-
deps.io.err(`${key} is a toggle — pass "true" or "false", not "${rawValue}".`);
|
|
138
|
-
return EXIT.usage;
|
|
139
|
-
}
|
|
140
|
-
value = rawValue === 'true';
|
|
141
|
-
}
|
|
142
|
-
// Sound is listed as an enum of shipped names so the interactive picker has
|
|
143
|
-
// choices, but it also accepts an Account custom name or id. Other enum keys
|
|
144
|
-
// stay closed: an unrecognised value used to be written and only fail at send.
|
|
145
|
-
if (configKey === 'sound') {
|
|
146
|
-
if (!isCliSoundRef(rawValue)) {
|
|
147
|
-
deps.io.err(`${key} takes ${acceptedValues(configKey)} — not "${rawValue}".`);
|
|
148
|
-
return EXIT.usage;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else if (info.kind === 'enum' && info.choices !== undefined && !info.choices.includes(rawValue)) {
|
|
152
|
-
deps.io.err(`${key} takes one of: ${info.choices.join(', ')} — not "${rawValue}".`);
|
|
153
|
-
return EXIT.usage;
|
|
154
|
-
}
|
|
155
|
-
if (info.kind === 'list')
|
|
156
|
-
value = rawValue.split(',').map((s) => s.trim()).filter(Boolean);
|
|
157
|
-
if (ORIGIN_LIST_CONFIG_KEYS.includes(configKey)) {
|
|
158
|
-
const origins = value.map((entry) => normalizeOrigin(entry));
|
|
159
|
-
const rejected = value.filter((_, index) => origins[index] === null);
|
|
160
|
-
if (rejected.length > 0) {
|
|
161
|
-
deps.io.err(`${key} entries must be bare http(s) origins like "https://host" or "http://host:8080" — not ${rejected.map((entry) => `"${entry}"`).join(', ')}.`);
|
|
162
|
-
return EXIT.usage;
|
|
163
|
-
}
|
|
164
|
-
value = origins;
|
|
165
|
-
}
|
|
166
|
-
const target = await configMutationTarget(deps, flags);
|
|
167
|
-
if (target === null)
|
|
168
|
-
return EXIT.usage;
|
|
169
|
-
if (target.layer === 'project' && USER_OWNED_CONFIG_KEYS.includes(configKey)) {
|
|
170
|
-
deps.io.err(`${key} widens which origins this machine trusts, so it is never read from the repository's shared config — a cloned repository must not be able to set it.`);
|
|
171
|
-
deps.io.err('Store it on this machine (no flag) or for this project personally (--local).');
|
|
172
|
-
return EXIT.usage;
|
|
173
|
-
}
|
|
174
|
-
if (target.layer === 'global' && Object.is(value, configDefaultValue(configKey))) {
|
|
175
|
-
deps.io.err(`${key} is already the shipped default (${JSON.stringify(value)}).`);
|
|
176
|
-
deps.io.err(`Run \`notifai config unset ${key} --yes\` to remove a redundant override instead of creating one.`);
|
|
177
|
-
return EXIT.usage;
|
|
178
|
-
}
|
|
179
|
-
if (!flags.yes) {
|
|
180
|
-
const confirmed = await deps.io.confirm(`Set ${key} = ${JSON.stringify(value)} in ${target.path}?`);
|
|
181
|
-
if (!confirmed) {
|
|
182
|
-
deps.io.err('Not confirmed. Pass --yes to skip the confirmation gate.');
|
|
183
|
-
return EXIT.usage;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
const existing = existsSync(target.path)
|
|
187
|
-
? parseToml(readFileSync(target.path, 'utf8'))
|
|
188
|
-
: {};
|
|
189
|
-
existing[key] = value;
|
|
190
|
-
if (target.layer === 'project')
|
|
191
|
-
mkdirSync(path.dirname(target.path), { recursive: true });
|
|
192
|
-
else
|
|
193
|
-
ensurePrivateDirectory(path.dirname(target.path));
|
|
194
|
-
writeFileSync(target.path, `${stringifyToml(existing)}\n`);
|
|
195
|
-
deps.io.out(`Wrote ${key} to ${target.path}`);
|
|
196
|
-
return EXIT.ok;
|
|
197
|
-
}
|
|
198
|
-
function configMutationKey(deps, key) {
|
|
199
|
-
if (!CONFIG_KEYS.includes(key)) {
|
|
200
|
-
deps.io.err(`Unknown setting "${key}".`);
|
|
201
|
-
const near = nearestKey(key);
|
|
202
|
-
if (near !== null)
|
|
203
|
-
deps.io.err(`Did you mean "${near}"?`);
|
|
204
|
-
deps.io.err(`Valid settings: ${CONFIG_KEYS.join(', ')}`);
|
|
205
|
-
deps.io.err('Run `notifai config explain <key>` to see what one of them does.');
|
|
206
|
-
return null;
|
|
207
|
-
}
|
|
208
|
-
return key;
|
|
209
|
-
}
|
|
210
|
-
async function configMutationTarget(deps, flags) {
|
|
211
|
-
let layer = flags.local ? 'local' : flags.project ? 'project' : 'global';
|
|
212
|
-
if (flags.session === undefined &&
|
|
213
|
-
flags.local !== true &&
|
|
214
|
-
flags.project !== true &&
|
|
215
|
-
flags.yes !== true &&
|
|
216
|
-
deps.io.interactive === true &&
|
|
217
|
-
deps.io.select) {
|
|
218
|
-
const selected = await deps.io.select('Where should this setting live?', [
|
|
219
|
-
{ value: 'global', label: 'This machine', hint: 'applies across projects' },
|
|
220
|
-
{ value: 'project', label: 'This project (shared)', hint: '.notifai/config.toml' },
|
|
221
|
-
{ value: 'local', label: 'This project (personal)', hint: 'stored on this machine, not in the repo' },
|
|
222
|
-
]);
|
|
223
|
-
if (selected === null) {
|
|
224
|
-
deps.io.err('No configuration layer selected.');
|
|
225
|
-
return null;
|
|
226
|
-
}
|
|
227
|
-
layer = selected;
|
|
228
|
-
}
|
|
229
|
-
const targetPath = flags.session
|
|
230
|
-
? sessionConfigPath(flags.session, deps.env)
|
|
231
|
-
: layer === 'local'
|
|
232
|
-
? personalProjectConfigPath(deps.cwd, deps.env)
|
|
233
|
-
: layer === 'project'
|
|
234
|
-
? sharedProjectConfigPath(deps.cwd)
|
|
235
|
-
: globalConfigPath(deps.env);
|
|
236
|
-
return {
|
|
237
|
-
path: targetPath,
|
|
238
|
-
layer: flags.session ? 'session' : layer,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
export async function configUnsetCommand(deps, key, flags) {
|
|
242
|
-
const configKey = configMutationKey(deps, key);
|
|
243
|
-
if (configKey === null)
|
|
244
|
-
return EXIT.usage;
|
|
245
|
-
const target = await configMutationTarget(deps, flags);
|
|
246
|
-
if (target === null)
|
|
247
|
-
return EXIT.usage;
|
|
248
|
-
const existing = existsSync(target.path)
|
|
249
|
-
? parseToml(readFileSync(target.path, 'utf8'))
|
|
250
|
-
: {};
|
|
251
|
-
if (!Object.prototype.hasOwnProperty.call(existing, configKey)) {
|
|
252
|
-
deps.io.out(`${configKey} is not set in ${target.path}`);
|
|
253
|
-
return EXIT.ok;
|
|
254
|
-
}
|
|
255
|
-
if (!flags.yes) {
|
|
256
|
-
const confirmed = await deps.io.confirm(`Remove ${configKey} from ${target.path}?`);
|
|
257
|
-
if (!confirmed) {
|
|
258
|
-
deps.io.err('Not confirmed. Pass --yes to skip the confirmation gate.');
|
|
259
|
-
return EXIT.usage;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
delete existing[configKey];
|
|
263
|
-
if (Object.keys(existing).length === 0) {
|
|
264
|
-
rmSync(target.path, { force: true });
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
writeFileSync(target.path, `${stringifyToml(existing)}\n`);
|
|
268
|
-
}
|
|
269
|
-
deps.io.out(`Removed ${configKey} from ${target.path}; the inherited value now applies.`);
|
|
270
|
-
return EXIT.ok;
|
|
271
|
-
}
|
|
272
|
-
//# sourceMappingURL=commands-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-config.js","sourceRoot":"","sources":["../src/commands-config.ts"],"names":[],"mappings":"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"}
|