@raidiant/notifai 0.2.0 → 0.3.0
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/dist/commands.d.ts +33 -3
- package/dist/commands.js +283 -59
- package/dist/commands.js.map +1 -1
- package/dist/config-schema.d.ts +62 -0
- package/dist/config-schema.js +274 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/hooks.d.ts +31 -19
- package/dist/hooks.js +277 -189
- package/dist/hooks.js.map +1 -1
- package/dist/interactive.d.ts +4 -0
- package/dist/interactive.js +604 -0
- package/dist/interactive.js.map +1 -0
- package/dist/main.js +106 -17
- package/dist/main.js.map +1 -1
- package/dist/ui/banner.d.ts +22 -0
- package/dist/ui/banner.js +87 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/config-view.d.ts +32 -0
- package/dist/ui/config-view.js +105 -0
- package/dist/ui/config-view.js.map +1 -0
- package/dist/ui/help.d.ts +46 -0
- package/dist/ui/help.js +105 -0
- package/dist/ui/help.js.map +1 -0
- package/dist/ui/theme.d.ts +108 -0
- package/dist/ui/theme.js +261 -0
- package/dist/ui/theme.js.map +1 -0
- package/package.json +2 -1
- package/src/commands.test.ts +153 -11
- package/src/commands.ts +328 -60
- package/src/config-schema.test.ts +152 -0
- package/src/config-schema.ts +321 -0
- package/src/hooks.test.ts +214 -81
- package/src/hooks.ts +335 -224
- package/src/interactive.ts +692 -0
- package/src/main.ts +107 -16
- package/src/ui/banner.ts +95 -0
- package/src/ui/config-view.test.ts +86 -0
- package/src/ui/config-view.ts +135 -0
- package/src/ui/help.ts +124 -0
- package/src/ui/theme.test.ts +92 -0
- package/src/ui/theme.ts +279 -0
package/dist/main.js
CHANGED
|
@@ -3,10 +3,11 @@ import { readFileSync } from 'node:fs';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { Command } from 'commander';
|
|
6
|
-
import { askCommand, accessStatusCommand, authStatusCommand, capabilitiesCommand, closeCommand, configSetCommand, configShowCommand, devicesCommand, doctorCommand, hookRunCommand, hooksInstallCommand, hooksUninstallCommand, initCommand, loginCommand, logoutCommand, realIo, repliesCommand, sendCommand, statusCommand, } from './commands.js';
|
|
6
|
+
import { askCommand, accessStatusCommand, authStatusCommand, capabilitiesCommand, closeCommand, configExplainCommand, configSetCommand, configShowCommand, devicesCommand, doctorCommand, hookRunCommand, hooksInstallCommand, hooksUninstallCommand, initCommand, loginCommand, logoutCommand, realIo, repliesCommand, sendCommand, statusCommand, } from './commands.js';
|
|
7
7
|
import { defaultCredentialStore } from './credentials.js';
|
|
8
8
|
import { HARNESSES } from './install-hooks.js';
|
|
9
9
|
import { nativeSkills } from './native-skills.js';
|
|
10
|
+
import { GROUP, SEND_GROUP, helpConfiguration, rootHelpFooter } from './ui/help.js';
|
|
10
11
|
const deps = {
|
|
11
12
|
io: realIo(),
|
|
12
13
|
store: defaultCredentialStore(),
|
|
@@ -69,10 +70,50 @@ function version() {
|
|
|
69
70
|
}
|
|
70
71
|
const program = new Command('notifai')
|
|
71
72
|
.description('Send native device notifications from agents and local programs')
|
|
72
|
-
.version(version())
|
|
73
|
+
.version(version())
|
|
74
|
+
.configureHelp(helpConfiguration)
|
|
75
|
+
// Lazy on purpose. `addHelpText` also takes a string, but that builds the
|
|
76
|
+
// footer on every invocation — including the hook that runs in front of
|
|
77
|
+
// every prompt the user types, which never renders help at all.
|
|
78
|
+
.addHelpText('after', () => rootHelpFooter())
|
|
79
|
+
// Commander's default is to print the full help and exit 0 for an unknown
|
|
80
|
+
// `help` topic, so `notifai help nonsense` looked like it had worked. A
|
|
81
|
+
// reader who mistyped a command deserves to be told, and a script deserves
|
|
82
|
+
// a nonzero code.
|
|
83
|
+
.showSuggestionAfterError(true)
|
|
84
|
+
// Commander drops the implicit `help [command]` as soon as the program
|
|
85
|
+
// itself has an action handler — which the interactive default below gives
|
|
86
|
+
// it. Without this, adding that default would silently break
|
|
87
|
+
// `notifai help send` for everyone who reaches for it before `--help`.
|
|
88
|
+
.helpCommand(true)
|
|
89
|
+
// Where the implicit help command lands; every other command names its own.
|
|
90
|
+
.commandsGroup(GROUP.help);
|
|
91
|
+
/**
|
|
92
|
+
* Bare `notifai`.
|
|
93
|
+
*
|
|
94
|
+
* At a human terminal this opens the interactive app; anywhere else it prints
|
|
95
|
+
* help exactly as before. The check is the same one every other prompt in this
|
|
96
|
+
* CLI is gated on — stdin and stdout both TTYs, not CI, `NOTIFAI_NO_INPUT`
|
|
97
|
+
* unset — because an agent that reaches a prompt does not fail, it hangs
|
|
98
|
+
* for ever waiting on a stdin nobody is typing into.
|
|
99
|
+
*
|
|
100
|
+
* The import is dynamic so that the prompt library, the banner and the whole
|
|
101
|
+
* interactive tree cost nothing to the paths that never draw them — `send`,
|
|
102
|
+
* `ask`, and the hook that runs in front of every prompt the user types.
|
|
103
|
+
*/
|
|
104
|
+
program.action(async () => {
|
|
105
|
+
if (deps.io.interactive !== true) {
|
|
106
|
+
program.outputHelp();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const { interactiveCommand } = await import('./interactive.js');
|
|
110
|
+
process.exit(await interactiveCommand(deps, version()));
|
|
111
|
+
});
|
|
73
112
|
// Setup leads: `init` is the single entry command for first-run friendliness.
|
|
74
113
|
program
|
|
75
114
|
.command('init')
|
|
115
|
+
.helpGroup(GROUP.start)
|
|
116
|
+
.summary('Set this project up, step by step')
|
|
76
117
|
.description('Set up Notifai here, idempotently: sign-in, project id, hooks, device readiness, live receipt proof. ' +
|
|
77
118
|
'Interactive at a human terminal; never prompts otherwise (agents: pass flags)')
|
|
78
119
|
.option('--project-id <id>', 'project identifier slug (default: derived from the directory name)')
|
|
@@ -86,6 +127,8 @@ program
|
|
|
86
127
|
});
|
|
87
128
|
program
|
|
88
129
|
.command('doctor')
|
|
130
|
+
.helpGroup(GROUP.daily)
|
|
131
|
+
.summary('Check every part of the setup')
|
|
89
132
|
.description('Audit config, credential, server, contract, device, hook, and saved receipt proof; exits nonzero when any line is FAIL (no live send)')
|
|
90
133
|
.option('--json', 'machine-readable output')
|
|
91
134
|
.action(async (opts) => {
|
|
@@ -93,6 +136,8 @@ program
|
|
|
93
136
|
});
|
|
94
137
|
program
|
|
95
138
|
.command('login')
|
|
139
|
+
.helpGroup(GROUP.start)
|
|
140
|
+
.summary('Sign in and pair this machine')
|
|
96
141
|
.description('Pair this machine with your Notifai account via browser approval')
|
|
97
142
|
.option('--name <name>', 'machine name shown in the dashboard (default: hostname)')
|
|
98
143
|
.option('--base-url <url>', 'Notifai server URL')
|
|
@@ -102,11 +147,17 @@ program
|
|
|
102
147
|
});
|
|
103
148
|
program
|
|
104
149
|
.command('logout')
|
|
150
|
+
.helpGroup(GROUP.advanced)
|
|
151
|
+
.summary('Remove the stored machine credential')
|
|
105
152
|
.description('Remove the stored machine credential')
|
|
106
153
|
.action(() => {
|
|
107
154
|
process.exit(logoutCommand(deps));
|
|
108
155
|
});
|
|
109
|
-
const auth = program
|
|
156
|
+
const auth = program
|
|
157
|
+
.command('auth')
|
|
158
|
+
.description('Authentication helpers')
|
|
159
|
+
.summary('Machine identity and account plan')
|
|
160
|
+
.helpGroup(GROUP.advanced);
|
|
110
161
|
auth
|
|
111
162
|
.command('status')
|
|
112
163
|
.description('Show the stored machine identity')
|
|
@@ -123,6 +174,8 @@ auth
|
|
|
123
174
|
});
|
|
124
175
|
program
|
|
125
176
|
.command('devices')
|
|
177
|
+
.helpGroup(GROUP.daily)
|
|
178
|
+
.summary('List your devices and whether they can receive')
|
|
126
179
|
.description('List registered devices and their delivery readiness')
|
|
127
180
|
.option('--json', 'machine-readable output')
|
|
128
181
|
.action(async (opts) => {
|
|
@@ -130,6 +183,8 @@ program
|
|
|
130
183
|
});
|
|
131
184
|
program
|
|
132
185
|
.command('capabilities')
|
|
186
|
+
.helpGroup(GROUP.advanced)
|
|
187
|
+
.summary('Show what a platform can render')
|
|
133
188
|
.description('Show a platform capability contract')
|
|
134
189
|
.option('--platform <platform>', 'platform to describe (default: ios)')
|
|
135
190
|
.option('--json', 'machine-readable output')
|
|
@@ -138,26 +193,31 @@ program
|
|
|
138
193
|
});
|
|
139
194
|
const send = program
|
|
140
195
|
.command('send')
|
|
196
|
+
.helpGroup(GROUP.agent)
|
|
197
|
+
.summary('Send a notification')
|
|
141
198
|
.description('Send a notification')
|
|
199
|
+
.optionsGroup(SEND_GROUP.content)
|
|
142
200
|
.requiredOption('--title <title>', 'notification title')
|
|
143
201
|
.requiredOption('--body <body>', 'notification body')
|
|
144
|
-
.option('--subtitle <subtitle>')
|
|
202
|
+
.option('--subtitle <subtitle>', 'a line between the title and the body')
|
|
145
203
|
.option('--detail <markdown>', 'long-form markdown shown only in the app, never on the banner')
|
|
146
204
|
.option('--detail-file <path>', 'read --detail from a file (use - for stdin)')
|
|
147
|
-
.option('--
|
|
205
|
+
.option('--image <path|url|media_id>', 'upload or attach an image')
|
|
206
|
+
.optionsGroup(SEND_GROUP.routing)
|
|
148
207
|
.option('--kind <kind>', 'what this is: update (default) | done | question (requires --reply)')
|
|
149
208
|
.option('--project <id>', 'project identifier, e.g. my-app (lazily registered)')
|
|
150
|
-
.option('--session <id>', 'session identity (env: NOTIFAI_SESSION); presentation varies by surface')
|
|
151
209
|
.option('--device <id>', 'target a device id (repeatable)', (v, all) => [...all, v], [])
|
|
152
210
|
.option('--all', 'target all routable devices (overrides configured devices)')
|
|
153
|
-
.option('--
|
|
154
|
-
.option('--
|
|
155
|
-
.
|
|
211
|
+
.option('--session <id>', 'session identity (env: NOTIFAI_SESSION); presentation varies by surface')
|
|
212
|
+
.option('--event <event>', 'agent event name, e.g. tests_passed')
|
|
213
|
+
.optionsGroup(SEND_GROUP.presentation)
|
|
156
214
|
.option('--sound <sound>', 'default | done | attention | alert | none')
|
|
157
|
-
.option('--thread-id <id>', 'group related notifications')
|
|
158
215
|
.option('--level <level>', 'interruption level: passive | active | time_sensitive')
|
|
159
|
-
.option('--
|
|
160
|
-
.option('--
|
|
216
|
+
.option('--collapse-key <key>', 'replace earlier notifications with the same key')
|
|
217
|
+
.option('--thread-id <id>', 'group related notifications')
|
|
218
|
+
.option('--ttl <seconds>', 'delivery window in seconds', (v) => Number(v))
|
|
219
|
+
.option('--platform <platform>', 'limit optional fields to ios or macos (default: both)')
|
|
220
|
+
.optionsGroup(SEND_GROUP.reply)
|
|
161
221
|
.option('--reply', 'enable the inline reply action and block for the answer')
|
|
162
222
|
.option('--reply-timeout <seconds>', 'how long to wait for a reply (default: 900)', (v) => Number(v))
|
|
163
223
|
.option('--reply-window <seconds>', 'how long the server accepts a reply (default: 3600)', (v) => Number(v))
|
|
@@ -166,8 +226,10 @@ const send = program
|
|
|
166
226
|
// Kept registered, and always a usage error with --reply, so the caller gets
|
|
167
227
|
// a message pointing at `ask` instead of "unknown option".
|
|
168
228
|
.option('--no-block', 'rejected with --reply; use `notifai ask` to ask and end the turn')
|
|
229
|
+
.optionsGroup(SEND_GROUP.advanced)
|
|
169
230
|
.option('--wait <seconds>', 'how long to wait for provider outcomes', (v) => Number(v))
|
|
170
231
|
.option('--no-wait', 'return immediately after acceptance')
|
|
232
|
+
.option('--data <key=value>', 'custom data (repeatable)', (v, all) => [...all, v], [])
|
|
171
233
|
.option('--idempotency-key <key>', 'safe-retry key (default: random)')
|
|
172
234
|
.option('--base-url <url>', 'Notifai server URL')
|
|
173
235
|
.option('--json', 'print the full submission receipt as JSON')
|
|
@@ -209,6 +271,8 @@ const send = program
|
|
|
209
271
|
send.addHelpText('after', `\nKind profiles (used unless --sound, --level, or saved user config overrides them):\n update sound none level passive\n done sound done level passive\n question sound attention level active (--reply)\n`);
|
|
210
272
|
program
|
|
211
273
|
.command('replies [request_id]')
|
|
274
|
+
.helpGroup(GROUP.agent)
|
|
275
|
+
.summary('Retrieve replies to a question')
|
|
212
276
|
.description('Retrieve replies for a notification request')
|
|
213
277
|
.option('--pending', 'use the pushed question pending for this project session')
|
|
214
278
|
.option('--wait <seconds>', 'how long to wait for a reply', (v) => Number(v))
|
|
@@ -219,6 +283,8 @@ program
|
|
|
219
283
|
});
|
|
220
284
|
program
|
|
221
285
|
.command('status <request_id>')
|
|
286
|
+
.helpGroup(GROUP.agent)
|
|
287
|
+
.summary('Show the evidence trail for a request')
|
|
222
288
|
.description('Show the evidence trail for a notification request')
|
|
223
289
|
.option('--json', 'machine-readable output')
|
|
224
290
|
.action(async (requestId, opts) => {
|
|
@@ -226,6 +292,8 @@ program
|
|
|
226
292
|
});
|
|
227
293
|
program
|
|
228
294
|
.command('ask [question]')
|
|
295
|
+
.helpGroup(GROUP.agent)
|
|
296
|
+
.summary('Register a question, then end the turn')
|
|
229
297
|
.description('Register a question for the turn-end hook to route under your presence settings')
|
|
230
298
|
.option('--choice <label>', 'answers to offer instead of free text; repeat the flag once per answer (2-6)', (v, all) => [...all, v], [])
|
|
231
299
|
.option('--multi', 'with --choice, several answers may be selected')
|
|
@@ -270,12 +338,17 @@ program
|
|
|
270
338
|
});
|
|
271
339
|
program
|
|
272
340
|
.command('close <request_id>')
|
|
341
|
+
.helpGroup(GROUP.agent)
|
|
342
|
+
.summary('Retire a question so late answers are rejected')
|
|
273
343
|
.description('Retire a question so late answers are rejected rather than lost')
|
|
274
344
|
.action(async (requestId) => {
|
|
275
345
|
process.exit(await closeCommand(deps, requestId));
|
|
276
346
|
});
|
|
347
|
+
// Hidden, not removed. It is an entry point the hook installer writes into a
|
|
348
|
+
// harness config file, never something a person types — and listing it beside
|
|
349
|
+
// `send` invited exactly one reading, which is that you were supposed to.
|
|
277
350
|
program
|
|
278
|
-
.command('hook <event>')
|
|
351
|
+
.command('hook <event>', { hidden: true })
|
|
279
352
|
.description('Internal: run a harness hook (reads hook JSON on stdin)')
|
|
280
353
|
// Inert, and the point of it is that it is inert: the installed command line
|
|
281
354
|
// carries a marker that says "Notifai wrote this" independently of which
|
|
@@ -286,7 +359,11 @@ program
|
|
|
286
359
|
const harness = HARNESSES.find((candidate) => candidate === opts.harness);
|
|
287
360
|
process.exit(await hookRunCommand(deps, event, readStdin, harness));
|
|
288
361
|
});
|
|
289
|
-
const hooks = program
|
|
362
|
+
const hooks = program
|
|
363
|
+
.command('hooks')
|
|
364
|
+
.description('Install harness hooks for registered-question routing')
|
|
365
|
+
.summary('Wire a harness to route questions to your devices')
|
|
366
|
+
.helpGroup(GROUP.advanced);
|
|
290
367
|
hooks
|
|
291
368
|
.command('install')
|
|
292
369
|
.description('Wire this harness to route registered questions to your devices')
|
|
@@ -303,15 +380,27 @@ hooks
|
|
|
303
380
|
.action((opts) => {
|
|
304
381
|
process.exit(hooksUninstallCommand(deps, opts));
|
|
305
382
|
});
|
|
306
|
-
const config = program
|
|
383
|
+
const config = program
|
|
384
|
+
.command('config')
|
|
385
|
+
.description('Show or change settings')
|
|
386
|
+
.summary('Show or change settings')
|
|
387
|
+
.helpGroup(GROUP.daily);
|
|
307
388
|
config
|
|
308
389
|
.command('show')
|
|
309
|
-
.description('Show
|
|
310
|
-
.option('--explain', '
|
|
390
|
+
.description('Show every setting, what it does, and where its value came from')
|
|
391
|
+
.option('--explain', 'include advanced settings and the file each value came from')
|
|
392
|
+
.option('--plain', 'the flat key = value form, even at a terminal')
|
|
311
393
|
.option('--json', 'machine-readable output')
|
|
312
394
|
.action((opts) => {
|
|
313
395
|
process.exit(configShowCommand(deps, opts));
|
|
314
396
|
});
|
|
397
|
+
config
|
|
398
|
+
.command('explain <key>')
|
|
399
|
+
.description('Explain one setting in full: what it does, what it accepts, what it is now')
|
|
400
|
+
.option('--json', 'machine-readable output')
|
|
401
|
+
.action((key, opts) => {
|
|
402
|
+
process.exit(configExplainCommand(deps, key, opts));
|
|
403
|
+
});
|
|
315
404
|
config
|
|
316
405
|
.command('set <key> <value>')
|
|
317
406
|
.description('Set a configuration value (choose a layer interactively; unattended defaults machine-global and requires --yes)')
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type BannerSize = 'block' | 'ascii' | 'word';
|
|
2
|
+
export declare function bannerSize(columns?: number): BannerSize;
|
|
3
|
+
/** The wordmark as rendered lines, gradient included. */
|
|
4
|
+
export declare function bannerLines(columns?: number): string[];
|
|
5
|
+
/**
|
|
6
|
+
* Reveal the wordmark one row at a time.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately brief and deliberately skippable: this runs before someone can
|
|
9
|
+
* do anything, so it may not become a wait. It is skipped entirely when output
|
|
10
|
+
* is not a TTY, when `NOTIFAI_NO_ANIMATION` is set, and under `CI`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function printBanner(options?: {
|
|
13
|
+
animate?: boolean;
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
write?: (line: string) => void;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* One line of orientation under the wordmark — and it must stay one line.
|
|
19
|
+
* Wrapped onto two it stops reading as a subtitle and starts reading as the
|
|
20
|
+
* first paragraph of something, so a narrow terminal gets the version alone.
|
|
21
|
+
*/
|
|
22
|
+
export declare function tagline(version: string, columns?: number): string;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The wordmark shown when a human opens the interactive app.
|
|
3
|
+
*
|
|
4
|
+
* Three tiers, chosen by what the terminal can actually render rather than by
|
|
5
|
+
* what looks best in a screenshot: box-drawing blocks when the terminal is wide
|
|
6
|
+
* and Unicode-capable, a pure-ASCII form that survives anywhere, and a plain
|
|
7
|
+
* word when neither fits. A banner that wraps is worse than no banner, so the
|
|
8
|
+
* width check is not optional.
|
|
9
|
+
*
|
|
10
|
+
* The art is embedded rather than rendered at run time. It is one fixed word
|
|
11
|
+
* that will never change, and shipping a font engine to redraw a constant on
|
|
12
|
+
* every launch would cost every install — including the agents that never see
|
|
13
|
+
* it — for no benefit.
|
|
14
|
+
*/
|
|
15
|
+
import { gradientBlock, style, terminalWidth, unicode } from './theme.js';
|
|
16
|
+
/** ANSI Shadow. 50 columns, 6 rows. */
|
|
17
|
+
const BLOCK = [
|
|
18
|
+
'███╗ ██╗ ██████╗ ████████╗██╗███████╗ █████╗ ██╗',
|
|
19
|
+
'████╗ ██║██╔═══██╗╚══██╔══╝██║██╔════╝██╔══██╗██║',
|
|
20
|
+
'██╔██╗ ██║██║ ██║ ██║ ██║█████╗ ███████║██║',
|
|
21
|
+
'██║╚██╗██║██║ ██║ ██║ ██║██╔══╝ ██╔══██║██║',
|
|
22
|
+
'██║ ╚████║╚██████╔╝ ██║ ██║██║ ██║ ██║██║',
|
|
23
|
+
'╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═╝',
|
|
24
|
+
];
|
|
25
|
+
/** Pure ASCII. 34 columns, 4 rows — safe on any terminal, any code page. */
|
|
26
|
+
const ASCII = [
|
|
27
|
+
' _ _ ___ _____ ___ ___ _ ___ ',
|
|
28
|
+
' | \\| |/ _ \\_ _|_ _| __/_\\ |_ _|',
|
|
29
|
+
' | .` | (_) || | | || _/ _ \\ | | ',
|
|
30
|
+
' |_|\\_|\\___/ |_| |___|_/_/ \\_\\___|',
|
|
31
|
+
];
|
|
32
|
+
export function bannerSize(columns = terminalWidth()) {
|
|
33
|
+
if (unicode && columns >= 54)
|
|
34
|
+
return 'block';
|
|
35
|
+
if (columns >= 38)
|
|
36
|
+
return 'ascii';
|
|
37
|
+
return 'word';
|
|
38
|
+
}
|
|
39
|
+
/** The wordmark as rendered lines, gradient included. */
|
|
40
|
+
export function bannerLines(columns = terminalWidth()) {
|
|
41
|
+
switch (bannerSize(columns)) {
|
|
42
|
+
case 'block':
|
|
43
|
+
return gradientBlock(BLOCK);
|
|
44
|
+
case 'ascii':
|
|
45
|
+
return gradientBlock(ASCII);
|
|
46
|
+
case 'word':
|
|
47
|
+
return gradientBlock(['N O T I F A I']);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Reveal the wordmark one row at a time.
|
|
52
|
+
*
|
|
53
|
+
* Deliberately brief and deliberately skippable: this runs before someone can
|
|
54
|
+
* do anything, so it may not become a wait. It is skipped entirely when output
|
|
55
|
+
* is not a TTY, when `NOTIFAI_NO_ANIMATION` is set, and under `CI`.
|
|
56
|
+
*/
|
|
57
|
+
export async function printBanner(options = {}) {
|
|
58
|
+
const env = options.env ?? process.env;
|
|
59
|
+
const write = options.write ?? ((line) => process.stdout.write(`${line}\n`));
|
|
60
|
+
const lines = bannerLines();
|
|
61
|
+
const animate = options.animate !== false &&
|
|
62
|
+
process.stdout.isTTY === true &&
|
|
63
|
+
(env['NOTIFAI_NO_ANIMATION'] ?? '') === '' &&
|
|
64
|
+
(env['CI'] ?? '') === '';
|
|
65
|
+
write('');
|
|
66
|
+
for (const line of lines) {
|
|
67
|
+
// Two columns, matching the tagline and the status card beneath it. Flush
|
|
68
|
+
// left, the wordmark reads as a separate thing sitting above the app.
|
|
69
|
+
write(` ${line}`);
|
|
70
|
+
if (animate)
|
|
71
|
+
await new Promise((resolve) => setTimeout(resolve, 26));
|
|
72
|
+
}
|
|
73
|
+
write('');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* One line of orientation under the wordmark — and it must stay one line.
|
|
77
|
+
* Wrapped onto two it stops reading as a subtitle and starts reading as the
|
|
78
|
+
* first paragraph of something, so a narrow terminal gets the version alone.
|
|
79
|
+
*/
|
|
80
|
+
export function tagline(version, columns = terminalWidth()) {
|
|
81
|
+
const full = 'Native notifications for agents and local programs';
|
|
82
|
+
// Two leading columns of indent, two trailing for the version.
|
|
83
|
+
return columns >= full.length + 12
|
|
84
|
+
? `${style.dim(full)} ${style.dim(`v${version}`)}`
|
|
85
|
+
: style.dim(`v${version}`);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzE,uCAAuC;AACvC,MAAM,KAAK,GAAG;IACZ,oDAAoD;IACpD,oDAAoD;IACpD,oDAAoD;IACpD,oDAAoD;IACpD,oDAAoD;IACpD,oDAAoD;CACrD,CAAA;AAED,4EAA4E;AAC5E,MAAM,KAAK,GAAG;IACZ,oCAAoC;IACpC,uCAAuC;IACvC,qCAAqC;IACrC,wCAAwC;CACzC,CAAA;AAID,MAAM,UAAU,UAAU,CAAC,OAAO,GAAG,aAAa,EAAE;IAClD,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,OAAO,CAAA;IAC5C,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,OAAO,CAAA;IACjC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,WAAW,CAAC,OAAO,GAAG,aAAa,EAAE;IACnD,QAAQ,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7B,KAAK,OAAO;YACV,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7B,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA0F,EAAE;IAE5F,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAA;IACpF,MAAM,KAAK,GAAG,WAAW,EAAE,CAAA;IAC3B,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,KAAK,KAAK;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;QAC7B,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;QAC1C,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAA;IAE1B,KAAK,CAAC,EAAE,CAAC,CAAA;IACT,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,0EAA0E;QAC1E,sEAAsE;QACtE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QAClB,IAAI,OAAO;YAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IACtE,CAAC;IACD,KAAK,CAAC,EAAE,CAAC,CAAA;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,OAAO,GAAG,aAAa,EAAE;IAChE,MAAM,IAAI,GAAG,oDAAoD,CAAA;IACjE,+DAA+D;IAC/D,OAAO,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAChC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE;QACnD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering for the configuration surfaces a person reads.
|
|
3
|
+
*
|
|
4
|
+
* The agent-facing shapes are untouched and live elsewhere: `--json` is the
|
|
5
|
+
* contract, and the flat `key = value` form stays exactly as it was for
|
|
6
|
+
* anything that is not a terminal. What is new is only what a human sees.
|
|
7
|
+
*/
|
|
8
|
+
import { type CliConfig, type ConfigKey } from '../config.js';
|
|
9
|
+
/**
|
|
10
|
+
* The full settings listing, grouped and explained.
|
|
11
|
+
*
|
|
12
|
+
* Each key gets its name (what you type), its value (what is in force), where
|
|
13
|
+
* that value came from, and one line on what it does. The name leads rather
|
|
14
|
+
* than the friendly label because the next thing a reader does with it is type
|
|
15
|
+
* it into `config set`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function renderConfigList(config: CliConfig, options?: {
|
|
18
|
+
showAdvanced?: boolean;
|
|
19
|
+
}): string[];
|
|
20
|
+
/**
|
|
21
|
+
* Everything about one key, for someone who has asked about it specifically.
|
|
22
|
+
*
|
|
23
|
+
* This is the payoff of the listing above staying terse: the reader arrives
|
|
24
|
+
* here already knowing which key they care about, so the full paragraph, the
|
|
25
|
+
* legal values, and the layer the current value came from can all be spent on
|
|
26
|
+
* that one key.
|
|
27
|
+
*/
|
|
28
|
+
export declare function renderConfigExplain(key: ConfigKey, config: CliConfig): string[];
|
|
29
|
+
/** The flat form, unchanged, for anything that is not a person at a terminal. */
|
|
30
|
+
export declare function renderConfigPlain(config: CliConfig, explain: boolean): string[];
|
|
31
|
+
/** Longest visible line, for callers that need to size a rule or a box. */
|
|
32
|
+
export declare function widestLine(lines: readonly string[]): number;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering for the configuration surfaces a person reads.
|
|
3
|
+
*
|
|
4
|
+
* The agent-facing shapes are untouched and live elsewhere: `--json` is the
|
|
5
|
+
* contract, and the flat `key = value` form stays exactly as it was for
|
|
6
|
+
* anything that is not a terminal. What is new is only what a human sees.
|
|
7
|
+
*/
|
|
8
|
+
import { CONFIG_KEYS } from '../config.js';
|
|
9
|
+
import { CONFIG_GROUPS, acceptedValues, configInfo, configKeysByGroup, describeSource, formatValue, } from '../config-schema.js';
|
|
10
|
+
import { glyph, pad, style, terminalWidth, width, wrap } from './theme.js';
|
|
11
|
+
/**
|
|
12
|
+
* The full settings listing, grouped and explained.
|
|
13
|
+
*
|
|
14
|
+
* Each key gets its name (what you type), its value (what is in force), where
|
|
15
|
+
* that value came from, and one line on what it does. The name leads rather
|
|
16
|
+
* than the friendly label because the next thing a reader does with it is type
|
|
17
|
+
* it into `config set`.
|
|
18
|
+
*/
|
|
19
|
+
export function renderConfigList(config, options = {}) {
|
|
20
|
+
const columns = terminalWidth();
|
|
21
|
+
const lines = [];
|
|
22
|
+
const nameWidth = Math.max(...CONFIG_KEYS.map((key) => key.length));
|
|
23
|
+
const SUMMARY_INDENT = ' ';
|
|
24
|
+
for (const group of CONFIG_GROUPS) {
|
|
25
|
+
const keys = configKeysByGroup(group.id).filter((info) => options.showAdvanced === true || info.advanced !== true);
|
|
26
|
+
if (keys.length === 0)
|
|
27
|
+
continue;
|
|
28
|
+
lines.push('');
|
|
29
|
+
lines.push(style.heading(group.title));
|
|
30
|
+
for (const line of wrap(group.blurb, columns - 2))
|
|
31
|
+
lines.push(style.dim(` ${line}`));
|
|
32
|
+
lines.push('');
|
|
33
|
+
for (const info of keys) {
|
|
34
|
+
const entry = config[info.key];
|
|
35
|
+
const source = describeSource(entry.source);
|
|
36
|
+
const value = formatValue(info.key, entry.value);
|
|
37
|
+
const isSet = source.label !== 'default';
|
|
38
|
+
// The provenance mark is only drawn when there is provenance to show;
|
|
39
|
+
// an empty dim segment still emits escape codes, so a `trimEnd` on the
|
|
40
|
+
// finished string cannot remove it.
|
|
41
|
+
const provenance = isSet ? ` ${style.dim(`${glyph.bullet} ${source.label}`)}` : '';
|
|
42
|
+
lines.push(` ${style.code(pad(info.key, nameWidth))} ` +
|
|
43
|
+
`${isSet ? style.value(value) : style.unset(value)}${provenance}`);
|
|
44
|
+
for (const line of wrap(info.summary, columns - SUMMARY_INDENT.length)) {
|
|
45
|
+
lines.push(style.dim(`${SUMMARY_INDENT}${line}`));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
lines.push('');
|
|
50
|
+
lines.push(style.dim(`${glyph.arrow} ${style.code('notifai config explain <key>')} for what one of these means and how to change it.`));
|
|
51
|
+
return lines;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Everything about one key, for someone who has asked about it specifically.
|
|
55
|
+
*
|
|
56
|
+
* This is the payoff of the listing above staying terse: the reader arrives
|
|
57
|
+
* here already knowing which key they care about, so the full paragraph, the
|
|
58
|
+
* legal values, and the layer the current value came from can all be spent on
|
|
59
|
+
* that one key.
|
|
60
|
+
*/
|
|
61
|
+
export function renderConfigExplain(key, config) {
|
|
62
|
+
const info = configInfo(key);
|
|
63
|
+
const entry = config[key];
|
|
64
|
+
const source = describeSource(entry.source);
|
|
65
|
+
const columns = terminalWidth();
|
|
66
|
+
const lines = [];
|
|
67
|
+
lines.push('');
|
|
68
|
+
lines.push(`${style.code(key)} ${style.dim(glyph.bullet)} ${style.heading(info.label)}`);
|
|
69
|
+
lines.push('');
|
|
70
|
+
for (const paragraph of info.detail.split('\n\n')) {
|
|
71
|
+
for (const line of wrap(paragraph, columns - 2))
|
|
72
|
+
lines.push(` ${line}`);
|
|
73
|
+
lines.push('');
|
|
74
|
+
}
|
|
75
|
+
const valueLabel = formatValue(key, entry.value);
|
|
76
|
+
lines.push(` ${style.dim(pad('Now', 10))}${style.value(valueLabel)} ${style.dim(`${glyph.bullet} ${source.label}`)}`);
|
|
77
|
+
if (source.path !== null)
|
|
78
|
+
lines.push(` ${style.dim(pad('', 10))}${style.dim(source.path)}`);
|
|
79
|
+
lines.push(` ${style.dim(pad('Accepts', 10))}${acceptedValues(key)}`);
|
|
80
|
+
if (info.choices !== undefined && info.choiceHints !== undefined) {
|
|
81
|
+
lines.push('');
|
|
82
|
+
for (const choice of info.choices) {
|
|
83
|
+
const hint = info.choiceHints[choice];
|
|
84
|
+
lines.push(` ${style.dim(pad('', 10))}${style.code(pad(choice, 14))}${style.dim(hint ?? '')}`.trimEnd());
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
lines.push('');
|
|
88
|
+
const example = info.example ?? (info.choices?.[0] ?? 'value');
|
|
89
|
+
lines.push(` ${style.dim('Change it')} ${style.code(`notifai config set ${key} ${example}`)}`);
|
|
90
|
+
lines.push('');
|
|
91
|
+
return lines;
|
|
92
|
+
}
|
|
93
|
+
/** The flat form, unchanged, for anything that is not a person at a terminal. */
|
|
94
|
+
export function renderConfigPlain(config, explain) {
|
|
95
|
+
return CONFIG_KEYS.map((key) => {
|
|
96
|
+
const entry = config[key];
|
|
97
|
+
const provenance = explain ? ` [${entry.source}]` : '';
|
|
98
|
+
return `${key} = ${JSON.stringify(entry.value)}${provenance}`;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** Longest visible line, for callers that need to size a rule or a box. */
|
|
102
|
+
export function widestLine(lines) {
|
|
103
|
+
return Math.max(0, ...lines.map((line) => width(line)));
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=config-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-view.js","sourceRoot":"","sources":["../../src/ui/config-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help that answers "what can I do here", not "what strings does argv accept".
|
|
3
|
+
*
|
|
4
|
+
* The old help listed seventeen commands in one flat column, with the two a new
|
|
5
|
+
* user needs (`init`, `login`) sitting between a platform capability dump and
|
|
6
|
+
* an entry point marked "Internal:". Everything was equally prominent, which is
|
|
7
|
+
* the same as nothing being prominent.
|
|
8
|
+
*
|
|
9
|
+
* Grouping and colour are Commander's own (`commandsGroup`, `optionsGroup`, and
|
|
10
|
+
* the `styleX` hooks it calls when the output has colours); this module only
|
|
11
|
+
* supplies the palette and the group vocabulary. Commander turns its styling
|
|
12
|
+
* off by itself when the output is not a terminal, so piped help stays plain
|
|
13
|
+
* without a second code path.
|
|
14
|
+
*/
|
|
15
|
+
import { type HelpConfiguration } from 'commander';
|
|
16
|
+
/**
|
|
17
|
+
* Group headings, in the order a reader meets them.
|
|
18
|
+
*
|
|
19
|
+
* Ordering is by who needs it and when: first run, then daily use, then the
|
|
20
|
+
* commands agents drive, then the things touched once or never. Commander
|
|
21
|
+
* renders groups in first-use order, so these constants are also the layout.
|
|
22
|
+
*/
|
|
23
|
+
export declare const GROUP: {
|
|
24
|
+
readonly start: "Getting started:";
|
|
25
|
+
readonly daily: "Everyday:";
|
|
26
|
+
readonly agent: "For agents and scripts:";
|
|
27
|
+
readonly advanced: "Account and wiring:";
|
|
28
|
+
readonly help: "Help:";
|
|
29
|
+
};
|
|
30
|
+
/** Option groups for `send`, which carries thirty flags. */
|
|
31
|
+
export declare const SEND_GROUP: {
|
|
32
|
+
readonly content: "What it says:";
|
|
33
|
+
readonly routing: "Where it goes:";
|
|
34
|
+
readonly presentation: "How it arrives:";
|
|
35
|
+
readonly reply: "Asking for an answer:";
|
|
36
|
+
readonly advanced: "Advanced:";
|
|
37
|
+
};
|
|
38
|
+
export declare const helpConfiguration: HelpConfiguration;
|
|
39
|
+
/**
|
|
40
|
+
* Footer for the root help.
|
|
41
|
+
*
|
|
42
|
+
* Its whole job is to make the interactive app discoverable, because someone
|
|
43
|
+
* reading a wall of flags has already demonstrated they did not know it was
|
|
44
|
+
* there.
|
|
45
|
+
*/
|
|
46
|
+
export declare function rootHelpFooter(): string;
|