@raidiant/notifai 0.5.1 → 1.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 +165 -0
- package/README.md +11 -4
- package/dist/commands.d.ts +16 -1
- package/dist/commands.js +371 -157
- package/dist/commands.js.map +1 -1
- package/dist/config-schema.d.ts +1 -1
- package/dist/config-schema.js +2 -14
- package/dist/config-schema.js.map +1 -1
- package/dist/config.d.ts +19 -8
- package/dist/config.js +50 -7
- package/dist/config.js.map +1 -1
- package/dist/harnesses.d.ts +1 -0
- package/dist/harnesses.js +6 -0
- package/dist/harnesses.js.map +1 -1
- package/dist/hook-adapter.d.ts +10 -1
- package/dist/hook-adapter.js +79 -10
- package/dist/hook-adapter.js.map +1 -1
- package/dist/install-hooks.d.ts +54 -17
- package/dist/install-hooks.js +258 -97
- package/dist/install-hooks.js.map +1 -1
- package/dist/interactive.d.ts +32 -1
- package/dist/interactive.js +163 -47
- package/dist/interactive.js.map +1 -1
- package/dist/main.js +8 -8
- package/dist/main.js.map +1 -1
- package/dist/native-skills.d.ts +1 -1
- package/dist/native-skills.js +23 -58
- package/dist/native-skills.js.map +1 -1
- package/dist/pack-feedback-slice.d.ts +35 -0
- package/dist/pack-feedback-slice.js +126 -0
- package/dist/pack-feedback-slice.js.map +1 -0
- package/dist/readiness.d.ts +20 -0
- package/dist/readiness.js +24 -0
- package/dist/readiness.js.map +1 -1
- package/package.json +3 -2
- package/src/commands.test.ts +364 -31
- package/src/commands.ts +450 -177
- package/src/config-schema.ts +2 -17
- package/src/config.test.ts +29 -4
- package/src/config.ts +67 -11
- package/src/harnesses.ts +7 -0
- package/src/hook-adapter.test.ts +43 -1
- package/src/hook-adapter.ts +83 -11
- package/src/hooks.test.ts +4 -5
- package/src/install-hooks.test.ts +154 -2
- package/src/install-hooks.ts +231 -44
- package/src/interactive.test.ts +338 -0
- package/src/interactive.ts +221 -49
- package/src/main.ts +8 -8
- package/src/native-skills.test.ts +75 -0
- package/src/native-skills.ts +31 -75
- package/src/pack-feedback-slice.test.ts +212 -0
- package/src/pack-feedback-slice.ts +187 -0
- package/src/readiness.test.ts +25 -0
- package/src/readiness.ts +38 -0
- package/src/skill.test.ts +43 -0
- package/src/ui/config-view.test.ts +5 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
|
|
9
|
+
and [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
|
|
10
|
+
|
|
11
|
+
## [Unreleased]
|
|
12
|
+
|
|
13
|
+
## [1.0.0] - 2026-08-13
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- **BREAKING** Service origin is no longer a user setting. The compiled default and the origin stored on the credential stay; override only with `--base-url` or `NOTIFAI_BASE_URL`.
|
|
18
|
+
- **BREAKING** Personal project preferences leave the project tree and live under the user config directory, keyed by project root.
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- A bounded, consented slice of the local log can be packed for feedback.
|
|
23
|
+
- Test notifications are sent by kind rather than by inventing a sound.
|
|
24
|
+
- The agent skill walks setup itself and treats `--sound` / `--level` as overrides.
|
|
25
|
+
- Every detected harness is installed instead of picking one.
|
|
26
|
+
- The interactive app offers labeled hooks install and uninstall.
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- Codex hooks are written in the layer's existing representation.
|
|
31
|
+
- Readiness work that cannot change the next action is skipped.
|
|
32
|
+
- Unfinished import changes from the skill rewrite are dropped.
|
|
33
|
+
- Setup closes are short.
|
|
34
|
+
|
|
35
|
+
## [0.5.1] - 2026-08-13
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- Republished the 0.5.0 source. The previous tarball carried 0.4.0's compiled output, so agent-wake modules never reached npm.
|
|
40
|
+
|
|
41
|
+
## [0.5.0] - 2026-08-13
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
- Answers now reach the agent that asked without the user returning to the terminal.
|
|
46
|
+
- Asynchronous Claude Code Stop hook: it returns at once and posts the answer into the same session over its inbox socket.
|
|
47
|
+
- Codex Stop hook continues the turn directly, and resumes a stopped thread only behind a writer-lock probe.
|
|
48
|
+
|
|
49
|
+
### Removed
|
|
50
|
+
|
|
51
|
+
- **BREAKING** Presence gate and the held-turn budget. `require_idle`, `away_after_seconds`, and `hook_reply_timeout_seconds` are gone rather than deprecated.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- A registered question must carry a commitment to the work each answer resumes, and that commitment must not name where the answer arrives.
|
|
56
|
+
|
|
57
|
+
## [0.4.0] - 2026-08-12
|
|
58
|
+
|
|
59
|
+
### Added
|
|
60
|
+
|
|
61
|
+
- Agent-facing local logs.
|
|
62
|
+
- Crash-safe question continuation.
|
|
63
|
+
- Additive submission protocol updates required by the current CLI.
|
|
64
|
+
|
|
65
|
+
## [0.3.0] - 2026-08-10
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
|
|
69
|
+
- Interactive app.
|
|
70
|
+
- Self-describing settings: a config schema that documents and validates itself, and a themed presentation layer for the banner, help, and config views.
|
|
71
|
+
|
|
72
|
+
## [0.2.1] - 2026-08-09
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
|
|
76
|
+
- Question queue: asks never supersede each other; only replies supersede replies.
|
|
77
|
+
|
|
78
|
+
### Fixed
|
|
79
|
+
|
|
80
|
+
- `init` no longer stops at a routing pointer that has not fired yet.
|
|
81
|
+
|
|
82
|
+
## [0.2.0] - 2026-08-09
|
|
83
|
+
|
|
84
|
+
### Changed
|
|
85
|
+
|
|
86
|
+
- **BREAKING** A reply request carries a set of 1–4 questions instead of a single kind/choices pair.
|
|
87
|
+
- **BREAKING** One `--choice` flag per answer. The comma delimiter is gone.
|
|
88
|
+
|
|
89
|
+
### Added
|
|
90
|
+
|
|
91
|
+
- Free-text or closed questions, multi-select, and typed answers beside choices.
|
|
92
|
+
- `--detail` / `--detail-file`, and `ask --form` for several questions as one form.
|
|
93
|
+
|
|
94
|
+
## [0.1.8] - 2026-08-08
|
|
95
|
+
|
|
96
|
+
### Changed
|
|
97
|
+
|
|
98
|
+
- Human-facing product spelling is Notifai.
|
|
99
|
+
- Protocol dependency advanced to 0.1.2.
|
|
100
|
+
|
|
101
|
+
## [0.1.7] - 2026-08-05
|
|
102
|
+
|
|
103
|
+
### Changed
|
|
104
|
+
|
|
105
|
+
- Release engineering and companion-install guidance.
|
|
106
|
+
|
|
107
|
+
## [0.1.6] - 2026-08-05
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
|
|
111
|
+
- Native skills setup composed into `init`.
|
|
112
|
+
|
|
113
|
+
## [0.1.5] - 2026-08-05
|
|
114
|
+
|
|
115
|
+
### Added
|
|
116
|
+
|
|
117
|
+
- Release pin verification.
|
|
118
|
+
|
|
119
|
+
## [0.1.4] - 2026-08-05
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- Pinned skill installer source.
|
|
124
|
+
|
|
125
|
+
## [0.1.3] - 2026-08-05
|
|
126
|
+
|
|
127
|
+
### Changed
|
|
128
|
+
|
|
129
|
+
- Portable, time-bounded release checks.
|
|
130
|
+
|
|
131
|
+
## [0.1.2] - 2026-08-05
|
|
132
|
+
|
|
133
|
+
### Fixed
|
|
134
|
+
|
|
135
|
+
- CLI package installable from npm.
|
|
136
|
+
|
|
137
|
+
## [0.1.1] - 2026-08-05
|
|
138
|
+
|
|
139
|
+
### Added
|
|
140
|
+
|
|
141
|
+
- Receipt-backed setup.
|
|
142
|
+
|
|
143
|
+
## [0.1.0] - 2026-08-05
|
|
144
|
+
|
|
145
|
+
### Added
|
|
146
|
+
|
|
147
|
+
- First public release of the `notifai` CLI under Apache-2.0.
|
|
148
|
+
|
|
149
|
+
[unreleased]: https://github.com/Raidiant-io/notifai/compare/v1.0.0...HEAD
|
|
150
|
+
[1.0.0]: https://github.com/Raidiant-io/notifai/compare/v0.5.1...v1.0.0
|
|
151
|
+
[0.5.1]: https://github.com/Raidiant-io/notifai/compare/v0.5.0...v0.5.1
|
|
152
|
+
[0.5.0]: https://github.com/Raidiant-io/notifai/compare/v0.4.0...v0.5.0
|
|
153
|
+
[0.4.0]: https://github.com/Raidiant-io/notifai/compare/v0.3.0...v0.4.0
|
|
154
|
+
[0.3.0]: https://github.com/Raidiant-io/notifai/compare/v0.2.1...v0.3.0
|
|
155
|
+
[0.2.1]: https://github.com/Raidiant-io/notifai/compare/v0.2.0...v0.2.1
|
|
156
|
+
[0.2.0]: https://github.com/Raidiant-io/notifai/compare/v0.1.8...v0.2.0
|
|
157
|
+
[0.1.8]: https://github.com/Raidiant-io/notifai/compare/v0.1.7...v0.1.8
|
|
158
|
+
[0.1.7]: https://github.com/Raidiant-io/notifai/compare/v0.1.6...v0.1.7
|
|
159
|
+
[0.1.6]: https://github.com/Raidiant-io/notifai/compare/v0.1.5...v0.1.6
|
|
160
|
+
[0.1.5]: https://github.com/Raidiant-io/notifai/compare/v0.1.4...v0.1.5
|
|
161
|
+
[0.1.4]: https://github.com/Raidiant-io/notifai/compare/v0.1.3...v0.1.4
|
|
162
|
+
[0.1.3]: https://github.com/Raidiant-io/notifai/compare/v0.1.2...v0.1.3
|
|
163
|
+
[0.1.2]: https://github.com/Raidiant-io/notifai/compare/v0.1.1...v0.1.2
|
|
164
|
+
[0.1.1]: https://github.com/Raidiant-io/notifai/compare/v0.1.0...v0.1.1
|
|
165
|
+
[0.1.0]: https://github.com/Raidiant-io/notifai/releases/tag/v0.1.0
|
package/README.md
CHANGED
|
@@ -12,6 +12,11 @@ npm install -g @raidiant/notifai
|
|
|
12
12
|
notifai init
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
If you do not want a global bin, `npx --yes @raidiant/notifai@<version>` is
|
|
16
|
+
supported. Pin the version. `hooks install` then writes that same pinned npx
|
|
17
|
+
invocation into the harness adapter. This is slower than a real install and
|
|
18
|
+
is not the default path.
|
|
19
|
+
|
|
15
20
|
`init` walks the setup one step at a time and tells you the single next
|
|
16
21
|
thing to do. Run it again after each step; it works out what remains.
|
|
17
22
|
|
|
@@ -55,10 +60,12 @@ For a harness that cannot resume an idle agent turn, `notifai send
|
|
|
55
60
|
notifai hooks install
|
|
56
61
|
```
|
|
57
62
|
|
|
58
|
-
Wires question routing into
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
Wires question routing into every supported harness detected on this
|
|
64
|
+
machine (Claude Code, Codex, Cursor, OpenCode). `notifai init` does the
|
|
65
|
+
same and, at a terminal, lets you keep the detected set, pick a subset,
|
|
66
|
+
or add one it did not see. This is what lets an agent's question reach
|
|
67
|
+
your phone without the agent having to cooperate — no question detection,
|
|
68
|
+
no state in a context window that compaction will eat.
|
|
62
69
|
|
|
63
70
|
Every harness definition calls one stable user-level adapter at
|
|
64
71
|
`~/.notifai/bin/hook-adapter`. Node, package manager, CLI version, checkout,
|
package/dist/commands.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type ListRepliesResponse, type Platform, type QuestionT, type ReplyView, type RoutableDevice } from '@raidiant/notifai-protocol';
|
|
2
2
|
import { type ApiClient, type ClientOptions } from './client.js';
|
|
3
3
|
import type { CredentialStore } from './credentials.js';
|
|
4
|
-
import { type Readiness } from './readiness.js';
|
|
4
|
+
import { type Readiness, type ReadinessRefresh } from './readiness.js';
|
|
5
5
|
import type { Tone } from './ui/theme.js';
|
|
6
6
|
import { type HookHarness } from './hooks.js';
|
|
7
7
|
import { type Logger } from './logging.js';
|
|
8
8
|
import { type ClaudeWakeAdapters } from './claude-wake.js';
|
|
9
9
|
import { type CodexWakeAdapters } from './codex-wake.js';
|
|
10
|
+
import { type HookAdapterTarget } from './hook-adapter.js';
|
|
10
11
|
import { type SendFlags } from './send.js';
|
|
11
12
|
import type { NativeSkills, SkillScope } from './native-skills.js';
|
|
12
13
|
export interface CommandIo {
|
|
@@ -28,6 +29,12 @@ export interface CommandIo {
|
|
|
28
29
|
label: string;
|
|
29
30
|
hint?: string;
|
|
30
31
|
}[]): Promise<string | null>;
|
|
32
|
+
/** Interactive multi-select. `initial` are pre-selected values. */
|
|
33
|
+
multiselect?(message: string, options: {
|
|
34
|
+
value: string;
|
|
35
|
+
label: string;
|
|
36
|
+
hint?: string;
|
|
37
|
+
}[], initial?: string[]): Promise<string[] | null>;
|
|
31
38
|
intro?(title: string): Promise<void>;
|
|
32
39
|
outro?(message: string): Promise<void>;
|
|
33
40
|
note?(message: string, title?: string): Promise<void>;
|
|
@@ -52,6 +59,8 @@ export interface CommandDeps {
|
|
|
52
59
|
cwd: string;
|
|
53
60
|
/** Test seam; production fixes the hook adapter under os.homedir(). */
|
|
54
61
|
hookAdapterHome?: string;
|
|
62
|
+
/** Test seam; production uses this process's Node and CLI paths. */
|
|
63
|
+
hookInstallTarget?: HookAdapterTarget;
|
|
55
64
|
/** Test seam; production uses fetch against base_url. */
|
|
56
65
|
clientFactory?: (baseUrl: string, bearer: string | null, options?: ClientOptions) => ApiClient;
|
|
57
66
|
/** Test seam for bounded polling without wall-clock sleeps. */
|
|
@@ -228,6 +237,8 @@ export interface HooksInstallFlags {
|
|
|
228
237
|
execPath?: string;
|
|
229
238
|
scriptPath?: string;
|
|
230
239
|
}
|
|
240
|
+
/** True when this process is `npx` / `npm exec`, not a global or linked install. */
|
|
241
|
+
export declare function runningViaNpx(env: NodeJS.ProcessEnv, scriptPath: string): boolean;
|
|
231
242
|
export declare function hooksInstallCommand(deps: CommandDeps, flags: HooksInstallFlags): number;
|
|
232
243
|
export declare function hooksUninstallCommand(deps: CommandDeps, flags: HooksInstallFlags): number;
|
|
233
244
|
export declare function configShowCommand(deps: CommandDeps, flags: {
|
|
@@ -338,9 +349,13 @@ export declare function initCommand(deps: CommandDeps, flags: InitFlags): Promis
|
|
|
338
349
|
*/
|
|
339
350
|
export declare function assessReadiness(deps: CommandDeps, options?: {
|
|
340
351
|
skillScope?: SkillScope;
|
|
352
|
+
previous?: Readiness;
|
|
353
|
+
refresh?: readonly ReadinessRefresh[];
|
|
341
354
|
}): Promise<Readiness>;
|
|
342
355
|
export declare function doctorCommand(deps: CommandDeps, flags: {
|
|
343
356
|
json?: boolean;
|
|
357
|
+
}, options?: {
|
|
358
|
+
readiness?: Readiness;
|
|
344
359
|
}): Promise<number>;
|
|
345
360
|
export declare function realIo(env?: NodeJS.ProcessEnv): CommandIo;
|
|
346
361
|
export {};
|