@raidiant/notifai 5.0.0 → 7.0.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/CHANGELOG.md +51 -0
- package/README.md +2 -2
- package/dist/atomic-file.js +13 -0
- package/dist/atomic-file.js.map +1 -1
- package/dist/client.d.ts +8 -3
- package/dist/client.js +24 -3
- package/dist/client.js.map +1 -1
- package/dist/commands-auth.d.ts +14 -0
- package/dist/commands-auth.js +154 -0
- package/dist/commands-auth.js.map +1 -0
- package/dist/commands-config.d.ts +31 -0
- package/dist/commands-config.js +246 -0
- package/dist/commands-config.js.map +1 -0
- package/dist/commands-core.d.ts +102 -0
- package/dist/commands-core.js +135 -0
- package/dist/commands-core.js.map +1 -0
- package/dist/commands-devices.d.ts +31 -0
- package/dist/commands-devices.js +124 -0
- package/dist/commands-devices.js.map +1 -0
- package/dist/commands-doctor.d.ts +24 -0
- package/dist/commands-doctor.js +1011 -0
- package/dist/commands-doctor.js.map +1 -0
- package/dist/commands-harness-context.d.ts +65 -0
- package/dist/commands-harness-context.js +97 -0
- package/dist/commands-harness-context.js.map +1 -0
- package/dist/commands-hook-shape.d.ts +17 -0
- package/dist/commands-hook-shape.js +37 -0
- package/dist/commands-hook-shape.js.map +1 -0
- package/dist/commands-hooks.d.ts +115 -0
- package/dist/commands-hooks.js +1225 -0
- package/dist/commands-hooks.js.map +1 -0
- package/dist/commands-init.d.ts +35 -0
- package/dist/commands-init.js +580 -0
- package/dist/commands-init.js.map +1 -0
- package/dist/commands-io.d.ts +2 -0
- package/dist/commands-io.js +110 -0
- package/dist/commands-io.js.map +1 -0
- package/dist/commands-logs.d.ts +30 -0
- package/dist/commands-logs.js +201 -0
- package/dist/commands-logs.js.map +1 -0
- package/dist/commands-send-support.d.ts +44 -0
- package/dist/commands-send-support.js +183 -0
- package/dist/commands-send-support.js.map +1 -0
- package/dist/commands-send.d.ts +33 -0
- package/dist/commands-send.js +519 -0
- package/dist/commands-send.js.map +1 -0
- package/dist/commands-setup-proof.d.ts +15 -0
- package/dist/commands-setup-proof.js +53 -0
- package/dist/commands-setup-proof.js.map +1 -0
- package/dist/commands-skill.d.ts +10 -0
- package/dist/commands-skill.js +71 -0
- package/dist/commands-skill.js.map +1 -0
- package/dist/commands.d.ts +12 -387
- package/dist/commands.js +12 -4536
- package/dist/commands.js.map +1 -1
- package/dist/config-schema.js +1 -1
- package/dist/config-schema.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.js +6 -4
- package/dist/config.js.map +1 -1
- package/dist/credentials.js +13 -3
- package/dist/credentials.js.map +1 -1
- package/dist/generated-session-label.d.ts +2 -0
- package/dist/generated-session-label.js +152 -0
- package/dist/generated-session-label.js.map +1 -0
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +127 -99
- package/dist/hooks.js.map +1 -1
- package/dist/interactive.js +4 -4
- package/dist/interactive.js.map +1 -1
- package/dist/invocation-context.d.ts +3 -0
- package/dist/invocation-context.js +23 -6
- package/dist/invocation-context.js.map +1 -1
- package/dist/logging.js +1 -0
- package/dist/logging.js.map +1 -1
- package/dist/main.js +3 -3
- package/dist/main.js.map +1 -1
- package/dist/opencode-plugin.js +18 -3
- package/dist/opencode-plugin.js.map +1 -1
- package/dist/readiness.d.ts +3 -1
- package/dist/readiness.js.map +1 -1
- package/dist/session-labels.d.ts +30 -0
- package/dist/session-labels.js +278 -0
- package/dist/session-labels.js.map +1 -0
- package/package.json +2 -2
- package/src/atomic-file.ts +12 -0
- package/src/client.test.ts +90 -1
- package/src/client.ts +35 -2
- package/src/commands-auth.ts +174 -0
- package/src/commands-config.ts +307 -0
- package/src/commands-core.ts +240 -0
- package/src/commands-devices.ts +150 -0
- package/src/commands-doctor.ts +1209 -0
- package/src/commands-harness-context.ts +134 -0
- package/src/commands-hook-shape.ts +53 -0
- package/src/commands-hooks.ts +1586 -0
- package/src/commands-init.ts +721 -0
- package/src/commands-io.ts +108 -0
- package/src/commands-logs.ts +243 -0
- package/src/commands-send-support.ts +227 -0
- package/src/commands-send.ts +623 -0
- package/src/commands-setup-proof.ts +71 -0
- package/src/commands-skill.ts +84 -0
- package/src/commands.test.ts +567 -42
- package/src/commands.ts +58 -5614
- package/src/config-schema.ts +1 -1
- package/src/config.test.ts +9 -0
- package/src/config.ts +10 -5
- package/src/credentials.test.ts +25 -1
- package/src/credentials.ts +13 -3
- package/src/generated-session-label.ts +155 -0
- package/src/hooks.test.ts +355 -16
- package/src/hooks.ts +145 -97
- package/src/install-hooks.test.ts +84 -1
- package/src/interactive.test.ts +19 -1
- package/src/interactive.ts +4 -4
- package/src/invocation-context.test.ts +115 -16
- package/src/invocation-context.ts +32 -11
- package/src/logging.test.ts +15 -2
- package/src/logging.ts +1 -0
- package/src/main.ts +9 -3
- package/src/opencode-plugin.ts +18 -3
- package/src/readiness.ts +3 -1
- package/src/session-labels.test.ts +303 -0
- package/src/session-labels.ts +360 -0
- package/src/skill.test.ts +13 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { PLATFORMS } from '@raidiant/notifai-protocol';
|
|
2
|
+
import { EXIT, authedClient, loadLoggedConfig, makeClient, reportError, resolvedBaseUrl, } from './commands-core.js';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// devices / capabilities
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
export async function devicesCommand(deps, flags) {
|
|
7
|
+
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
8
|
+
const authed = authedClient(deps, config);
|
|
9
|
+
if (!authed)
|
|
10
|
+
return EXIT.auth;
|
|
11
|
+
try {
|
|
12
|
+
const result = await authed.client.listDevices();
|
|
13
|
+
if (flags.json) {
|
|
14
|
+
deps.io.out(JSON.stringify(result, null, 2));
|
|
15
|
+
return EXIT.ok;
|
|
16
|
+
}
|
|
17
|
+
if (result.devices.length === 0) {
|
|
18
|
+
const supportUrl = supportPageUrl(authed.baseUrl);
|
|
19
|
+
let email = null;
|
|
20
|
+
try {
|
|
21
|
+
email = (await authed.client.accessStatus()).email;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Best-effort: the empty-state copy still points at /support without it.
|
|
25
|
+
}
|
|
26
|
+
deps.io.out(`No devices yet. Install Notifai from ${supportUrl}, ${sameAccountSignInLine(email)}, and allow notifications.`);
|
|
27
|
+
return EXIT.ok;
|
|
28
|
+
}
|
|
29
|
+
for (const d of result.devices) {
|
|
30
|
+
deps.io.out(`${d.device_id} ${d.display_name} ${d.platform} ${d.status_message ?? 'Working'}`);
|
|
31
|
+
}
|
|
32
|
+
return EXIT.ok;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
return reportError(deps, err);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Devices as data, for surfaces that render them themselves.
|
|
40
|
+
*
|
|
41
|
+
* `devicesCommand` prints and returns an exit code, which is the right shape
|
|
42
|
+
* for a command and the wrong one for a menu that wants to show names beside
|
|
43
|
+
* checkboxes. Silent on every failure by design: the interactive app already
|
|
44
|
+
* shows the credential and connectivity state on its status card, so a second
|
|
45
|
+
* error line here would be reporting the same fault twice.
|
|
46
|
+
*/
|
|
47
|
+
export async function deviceInventory(deps) {
|
|
48
|
+
if (!deps.store.load())
|
|
49
|
+
return null;
|
|
50
|
+
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
51
|
+
const authed = authedClient(deps, config);
|
|
52
|
+
if (!authed)
|
|
53
|
+
return null;
|
|
54
|
+
try {
|
|
55
|
+
return (await authed.client.listDevices()).devices;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Whether a device is in a state where a notification would actually arrive. */
|
|
62
|
+
export function canDeviceReceive(device) {
|
|
63
|
+
return deviceCanReceive(device);
|
|
64
|
+
}
|
|
65
|
+
export async function capabilitiesCommand(deps, flags) {
|
|
66
|
+
// Locally, and with the same message `send` gives. Spending a round trip to
|
|
67
|
+
// have the server answer "Request validation failed" told the caller neither
|
|
68
|
+
// which flag was wrong nor what it accepts.
|
|
69
|
+
if (flags.platform !== undefined && !PLATFORMS.includes(flags.platform)) {
|
|
70
|
+
deps.io.err(`Unknown platform "${flags.platform}" — use ${PLATFORMS.join(' or ')}.`);
|
|
71
|
+
return EXIT.usage;
|
|
72
|
+
}
|
|
73
|
+
const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
|
|
74
|
+
const credential = deps.store.load();
|
|
75
|
+
const baseUrl = resolvedBaseUrl(config, credential);
|
|
76
|
+
const client = makeClient(deps, baseUrl, null);
|
|
77
|
+
try {
|
|
78
|
+
const doc = await client.capabilities(flags.platform ?? 'ios');
|
|
79
|
+
if (flags.json) {
|
|
80
|
+
deps.io.out(JSON.stringify(doc, null, 2));
|
|
81
|
+
return EXIT.ok;
|
|
82
|
+
}
|
|
83
|
+
deps.io.out(`${doc.platform} capability contract v${doc.schema_version} (payload limit ${doc.payload_limit_bytes} bytes)`);
|
|
84
|
+
for (const field of doc.fields) {
|
|
85
|
+
deps.io.out(` ${field.path}: ${field.status}${field.reason ? ` — ${field.reason}` : ''}`);
|
|
86
|
+
}
|
|
87
|
+
return EXIT.ok;
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
return reportError(deps, err);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function supportPageUrl(baseUrl) {
|
|
94
|
+
return `${baseUrl.replace(/\/$/, '')}/support`;
|
|
95
|
+
}
|
|
96
|
+
/** Same-account line for the device hop; prefers the real email when known. */
|
|
97
|
+
export function sameAccountSignInLine(email) {
|
|
98
|
+
return email
|
|
99
|
+
? `sign in with the same email as this account (${email})`
|
|
100
|
+
: 'sign in with the same email as this account';
|
|
101
|
+
}
|
|
102
|
+
export function deviceInstallRemedy(options) {
|
|
103
|
+
const support = supportPageUrl(options.baseUrl);
|
|
104
|
+
const sameEmail = sameAccountSignInLine(options.email);
|
|
105
|
+
if (options.devices.length === 0) {
|
|
106
|
+
return (`open the install steps at ${support} on your iPhone, ` +
|
|
107
|
+
`install Notifai, ${sameEmail}, and allow notifications`);
|
|
108
|
+
}
|
|
109
|
+
if (options.devices.some((d) => d.permission_status === 'denied')) {
|
|
110
|
+
return 'allow notifications for Notifai in iPhone Settings';
|
|
111
|
+
}
|
|
112
|
+
return 'open Notifai on your iPhone and allow its notification prompt';
|
|
113
|
+
}
|
|
114
|
+
export function deviceCanReceive(device) {
|
|
115
|
+
const receiveIsFloored = device.support?.state === 'must_update' &&
|
|
116
|
+
device.support.affected_operation === 'receive_notifications';
|
|
117
|
+
return (!receiveIsFloored &&
|
|
118
|
+
device.registration_healthy &&
|
|
119
|
+
(device.permission_status === 'authorized' || device.permission_status === 'provisional'));
|
|
120
|
+
}
|
|
121
|
+
export function readyIosDevices(devices) {
|
|
122
|
+
return devices.filter((device) => device.platform === 'ios' && deviceCanReceive(device));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=commands-devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-devices.js","sourceRoot":"","sources":["../src/commands-devices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SkillScope } from './native-skills.js';
|
|
2
|
+
import { type Readiness, type ReadinessRefresh, type ReadinessState } from './readiness.js';
|
|
3
|
+
import { type CommandDeps } from './commands-core.js';
|
|
4
|
+
/**
|
|
5
|
+
* Read the whole setup once, in dependency order.
|
|
6
|
+
*
|
|
7
|
+
* Descent stops where a prerequisite is missing: without a credential there is
|
|
8
|
+
* nothing to ask the server with, and without a reachable server a contract
|
|
9
|
+
* mismatch is unknowable rather than absent. Those downstream states report
|
|
10
|
+
* `unknown`, which is the honest answer and keeps a network outage from
|
|
11
|
+
* looking like a broken install.
|
|
12
|
+
*/
|
|
13
|
+
export declare function assessReadiness(deps: CommandDeps, options?: {
|
|
14
|
+
skillScope?: SkillScope;
|
|
15
|
+
previous?: Readiness;
|
|
16
|
+
refresh?: readonly ReadinessRefresh[];
|
|
17
|
+
}): Promise<Readiness>;
|
|
18
|
+
export declare function doctorCommand(deps: CommandDeps, flags: {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
}, options?: {
|
|
21
|
+
readiness?: Readiness;
|
|
22
|
+
}): Promise<number>;
|
|
23
|
+
/** One line telling the reader what to actually do about a state. */
|
|
24
|
+
export declare function remedyLine(state: ReadinessState): string;
|