@raidiant/notifai 0.4.0 → 0.5.1
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/README.md +3 -4
- package/dist/claude-wake.d.ts +101 -0
- package/dist/claude-wake.js +397 -0
- package/dist/claude-wake.js.map +1 -0
- package/dist/codex-wake.d.ts +84 -0
- package/dist/codex-wake.js +238 -0
- package/dist/codex-wake.js.map +1 -0
- package/dist/commands.d.ts +15 -10
- package/dist/commands.js +321 -88
- package/dist/commands.js.map +1 -1
- package/dist/config-schema.d.ts +2 -2
- package/dist/config-schema.js +9 -35
- package/dist/config-schema.js.map +1 -1
- package/dist/config.d.ts +5 -38
- package/dist/config.js +11 -32
- package/dist/config.js.map +1 -1
- package/dist/harnesses.d.ts +3 -13
- package/dist/harnesses.js +6 -17
- package/dist/harnesses.js.map +1 -1
- package/dist/hooks.d.ts +119 -65
- package/dist/hooks.js +330 -285
- package/dist/hooks.js.map +1 -1
- package/dist/install-hooks.d.ts +22 -7
- package/dist/install-hooks.js +43 -28
- package/dist/install-hooks.js.map +1 -1
- package/dist/interactive.d.ts +1 -1
- package/dist/interactive.js +2 -4
- package/dist/interactive.js.map +1 -1
- package/dist/main.js +6 -13
- package/dist/main.js.map +1 -1
- package/dist/release.d.ts +31 -0
- package/dist/release.js +52 -0
- package/dist/release.js.map +1 -0
- package/dist/ui/theme.d.ts +1 -1
- package/package.json +9 -9
- package/src/claude-wake.test.ts +320 -0
- package/src/claude-wake.ts +489 -0
- package/src/codex-wake.test.ts +253 -0
- package/src/codex-wake.ts +288 -0
- package/src/commands.test.ts +393 -40
- package/src/commands.ts +433 -109
- package/src/config-schema.test.ts +3 -3
- package/src/config-schema.ts +11 -40
- package/src/config.test.ts +21 -16
- package/src/config.ts +15 -69
- package/src/harnesses.test.ts +7 -21
- package/src/harnesses.ts +17 -19
- package/src/hooks.test.ts +780 -290
- package/src/hooks.ts +466 -339
- package/src/install-hooks.test.ts +44 -3
- package/src/install-hooks.ts +43 -28
- package/src/interactive.ts +2 -7
- package/src/logging.test.ts +3 -3
- package/src/main.ts +6 -12
- package/src/release.ts +51 -0
- package/src/skill.test.ts +23 -0
- package/src/ui/config-view.test.ts +5 -5
- package/dist/idle.d.ts +0 -16
- package/dist/idle.js +0 -44
- package/dist/idle.js.map +0 -1
- package/src/idle.test.ts +0 -32
- package/src/idle.ts +0 -41
package/dist/config-schema.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type ConfigKey } from './config.js';
|
|
2
2
|
export type ConfigKind = 'string' | 'url' | 'integer' | 'boolean' | 'enum' | 'list';
|
|
3
3
|
/**
|
|
4
|
-
* Which surface a key belongs to. Grouping is the difference between
|
|
5
|
-
*
|
|
4
|
+
* Which surface a key belongs to. Grouping is the difference between a flat
|
|
5
|
+
* list of keys and a few short ones a reader can hold in their head.
|
|
6
6
|
*/
|
|
7
7
|
export type ConfigGroup = 'questions' | 'delivery' | 'project' | 'diagnostics' | 'connection';
|
|
8
8
|
export declare const CONFIG_GROUPS: {
|
package/dist/config-schema.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* What every configuration key means, in the reader's words.
|
|
3
3
|
*
|
|
4
|
-
* `config.ts` already documented
|
|
4
|
+
* `config.ts` already documented every key carefully — but in TypeScript
|
|
5
5
|
* comments, which is the one audience that never needed them. Someone running
|
|
6
|
-
* `notifai config show` saw `
|
|
7
|
-
* it did short of reading the source, so this module is that knowledge
|
|
8
|
-
* where it can be printed.
|
|
6
|
+
* `notifai config show` saw `ask_grace_seconds = 0` and had no way to learn
|
|
7
|
+
* what it did short of reading the source, so this module is that knowledge
|
|
8
|
+
* moved to where it can be printed.
|
|
9
9
|
*
|
|
10
10
|
* It is the single source for `config show`, `config set`'s errors, `config
|
|
11
11
|
* explain`, the help footer, and the interactive settings screen. One
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
*
|
|
14
14
|
* `summary` is the one-line form that fits beside a value in a list.
|
|
15
15
|
* `detail` is the paragraph shown once the reader has asked for this key
|
|
16
|
-
* specifically — progressive disclosure, so
|
|
17
|
-
*
|
|
16
|
+
* specifically — progressive disclosure, so the list of settings stays a list
|
|
17
|
+
* and not an essay.
|
|
18
18
|
*/
|
|
19
19
|
import { CLI_SOUNDS, INTERRUPTION_LEVELS } from '@raidiant/notifai-protocol';
|
|
20
20
|
import { LOG_LEVELS, configBounds } from './config.js';
|
|
21
21
|
export const CONFIG_GROUPS = [
|
|
22
22
|
{
|
|
23
23
|
id: 'questions',
|
|
24
|
-
title: 'Questions
|
|
25
|
-
blurb: '
|
|
24
|
+
title: 'Questions',
|
|
25
|
+
blurb: 'Whether a question an agent registered may leave this terminal and reach your devices, and how soon.',
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
id: 'delivery',
|
|
@@ -54,41 +54,15 @@ const INFO = {
|
|
|
54
54
|
detail: 'The master switch for question routing. When this is off, a question an agent registers with `notifai ask` stays in the terminal and never leaves this machine, whatever the presence settings say. Turn it off to stop being reached for a while without uninstalling the harness hooks.',
|
|
55
55
|
example: 'true',
|
|
56
56
|
},
|
|
57
|
-
require_idle: {
|
|
58
|
-
label: 'Only when I have stepped away',
|
|
59
|
-
group: 'questions',
|
|
60
|
-
kind: 'boolean',
|
|
61
|
-
summary: 'Whether sitting at this keyboard holds a question back',
|
|
62
|
-
detail: 'Off (the default) means notify me even while I am using this machine. `ask_grace_seconds` still runs, so the terminal is offered the question first; I just do not need to walk away before it may leave. Turn this on when local keyboard or mouse activity should keep questions in the terminal.\n\nThis is separate from `ask_notifications`, which switches routing off altogether: wanting to be reached only while away is different from not wanting to be reached.',
|
|
63
|
-
example: 'false',
|
|
64
|
-
},
|
|
65
|
-
away_after_seconds: {
|
|
66
|
-
label: 'Away after',
|
|
67
|
-
group: 'questions',
|
|
68
|
-
kind: 'integer',
|
|
69
|
-
unit: 's',
|
|
70
|
-
summary: 'Keyboard and mouse idle time before this machine counts as unattended',
|
|
71
|
-
detail: 'How long the keyboard and mouse must be quiet before you count as away. Only consulted while `require_idle` is on.\n\nWhere the operating system exposes no idle signal, silence since your last prompt is used instead, which is the conservative reading.',
|
|
72
|
-
example: '120',
|
|
73
|
-
},
|
|
74
57
|
ask_grace_seconds: {
|
|
75
58
|
label: 'Terminal-first grace',
|
|
76
59
|
group: 'questions',
|
|
77
60
|
kind: 'integer',
|
|
78
61
|
unit: 's',
|
|
79
62
|
summary: 'Optional delay before a question may reach your devices',
|
|
80
|
-
detail: 'Zero (the default) sends the question to your devices as soon as the agent turn ends. Set a positive duration to offer the terminal an exclusive answer window first; the timer is measured from the moment the agent asked.\n\nA timer and nothing more.
|
|
63
|
+
detail: 'Zero (the default) sends the question to your devices as soon as the agent turn ends. Set a positive duration to offer the terminal an exclusive answer window first; the timer is measured from the moment the agent asked.\n\nA timer and nothing more. Whether you happen to be at this keyboard does not change it: waiting no longer holds your terminal, so there is nothing your being here would protect you from.',
|
|
81
64
|
example: '0',
|
|
82
65
|
},
|
|
83
|
-
hook_reply_timeout_seconds: {
|
|
84
|
-
label: 'Hook wait for an answer',
|
|
85
|
-
group: 'questions',
|
|
86
|
-
kind: 'integer',
|
|
87
|
-
unit: 's',
|
|
88
|
-
summary: 'How long the harness hook blocks waiting for your answer',
|
|
89
|
-
detail: 'After a question has gone out, the harness continuation owner waits up to this long for your answer. The device reply window uses the same bound, so Notifai never accepts an answer after an agent with no dormant-session wake has already returned.\n\nThe ceiling exists because command-hook harnesses bound their Stop processes. Grace plus this value plus installer headroom stays inside that budget.',
|
|
90
|
-
example: '480',
|
|
91
|
-
},
|
|
92
66
|
sound: {
|
|
93
67
|
label: 'Sound',
|
|
94
68
|
group: 'delivery',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAA;AAUtE,MAAM,CAAC,MAAM,aAAa,GAAwD;IAChF;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -42,49 +42,16 @@ export interface CliConfig {
|
|
|
42
42
|
project: ResolvedValue<string | null>;
|
|
43
43
|
/** Free-text notification criteria agents consult before sending. */
|
|
44
44
|
notify_criteria: ResolvedValue<string | null>;
|
|
45
|
-
/**
|
|
45
|
+
/** Whether a registered agent question may reach companion devices at all. */
|
|
46
46
|
ask_notifications: ResolvedValue<boolean>;
|
|
47
|
-
/**
|
|
48
|
-
* Whether being at this machine suppresses a question. Sitting at the
|
|
49
|
-
* keyboard is not the same as not wanting to be reached — needing to stop
|
|
50
|
-
* using the machine in order to be notified is its own kind of interruption.
|
|
51
|
-
*
|
|
52
|
-
* On, the default, is the original behaviour: a question stays in the
|
|
53
|
-
* terminal while the keyboard is in use, because the person is right there
|
|
54
|
-
* and a push would be redundant. Off says notify me anyway — the grace window
|
|
55
|
-
* still runs, so the question is still offered to the terminal first, it just
|
|
56
|
-
* no longer needs the user to walk away before it may leave.
|
|
57
|
-
*
|
|
58
|
-
* This is deliberately separate from `ask_notifications`, which switches
|
|
59
|
-
* escalation off altogether. Wanting to be reached while working is the
|
|
60
|
-
* opposite of not wanting to be reached.
|
|
61
|
-
*/
|
|
62
|
-
require_idle: ResolvedValue<boolean>;
|
|
63
|
-
/**
|
|
64
|
-
* Keyboard/mouse idle time after which this machine counts as unattended.
|
|
65
|
-
* When the OS idle signal is unavailable, silence since the user's last prompt
|
|
66
|
-
* is the conservative fallback. Below the threshold the hooks stay out of the
|
|
67
|
-
* way entirely, because a blocking hook also blocks the terminal prompt the
|
|
68
|
-
* present user would use.
|
|
69
|
-
*
|
|
70
|
-
* Only consulted while `require_idle` is on.
|
|
71
|
-
*/
|
|
72
|
-
away_after_seconds: ResolvedValue<number>;
|
|
73
|
-
/**
|
|
74
|
-
* How long a hook blocks waiting for a companion-device answer before falling through
|
|
75
|
-
* to the harness's own prompt. Runtime arbitration keeps the complete Stop
|
|
76
|
-
* invocation inside its fixed 480s owner budget and 540s adapter ceiling.
|
|
77
|
-
*/
|
|
78
|
-
hook_reply_timeout_seconds: ResolvedValue<number>;
|
|
79
47
|
/**
|
|
80
48
|
* Terminal-first grace window, measured from the moment the question was
|
|
81
49
|
* sent: the agent asks in the terminal and starts a timer, and only once it
|
|
82
50
|
* elapses does the question reach companion devices.
|
|
83
51
|
*
|
|
84
|
-
* A timer, and only a timer.
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* questions, and answering one should not answer the other.
|
|
52
|
+
* A timer, and only a timer. Whether the user happens to be at this keyboard
|
|
53
|
+
* decides nothing — the waiter no longer holds their terminal, so there is
|
|
54
|
+
* nothing for their presence to protect them from.
|
|
88
55
|
*/
|
|
89
56
|
ask_grace_seconds: ResolvedValue<number>;
|
|
90
57
|
/**
|
|
@@ -106,7 +73,7 @@ export interface CliConfig {
|
|
|
106
73
|
/** Log files kept in total, the active one included. */
|
|
107
74
|
log_max_files: ResolvedValue<number>;
|
|
108
75
|
}
|
|
109
|
-
export declare const CONFIG_KEYS: readonly ["base_url", "wait_seconds", "ttl_seconds", "collapse_key", "devices", "sound", "interruption_level", "project", "notify_criteria", "ask_notifications", "
|
|
76
|
+
export declare const CONFIG_KEYS: readonly ["base_url", "wait_seconds", "ttl_seconds", "collapse_key", "devices", "sound", "interruption_level", "project", "notify_criteria", "ask_notifications", "ask_grace_seconds", "log_level", "log_max_bytes", "log_max_files"];
|
|
110
77
|
export type ConfigKey = (typeof CONFIG_KEYS)[number];
|
|
111
78
|
/** Keys whose TOML value must parse as a boolean; used by `config set`. */
|
|
112
79
|
export declare const BOOLEAN_CONFIG_KEYS: readonly ConfigKey[];
|
package/dist/config.js
CHANGED
|
@@ -3,7 +3,6 @@ import { existsSync, readFileSync, realpathSync } from 'node:fs';
|
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { parse as parseToml } from 'smol-toml';
|
|
6
|
-
import { HOOK_TIMING } from './harnesses.js';
|
|
7
6
|
/**
|
|
8
7
|
* How much the local log records. Defined here rather than in `logging.ts`
|
|
9
8
|
* because it is a configuration vocabulary first — `logging.ts` reads config,
|
|
@@ -21,25 +20,17 @@ export const CONFIG_KEYS = [
|
|
|
21
20
|
'project',
|
|
22
21
|
'notify_criteria',
|
|
23
22
|
'ask_notifications',
|
|
24
|
-
'require_idle',
|
|
25
|
-
'away_after_seconds',
|
|
26
|
-
'hook_reply_timeout_seconds',
|
|
27
23
|
'ask_grace_seconds',
|
|
28
24
|
'log_level',
|
|
29
25
|
'log_max_bytes',
|
|
30
26
|
'log_max_files',
|
|
31
27
|
];
|
|
32
28
|
/** Keys whose TOML value must parse as a boolean; used by `config set`. */
|
|
33
|
-
export const BOOLEAN_CONFIG_KEYS = [
|
|
34
|
-
'ask_notifications',
|
|
35
|
-
'require_idle',
|
|
36
|
-
];
|
|
29
|
+
export const BOOLEAN_CONFIG_KEYS = ['ask_notifications'];
|
|
37
30
|
/** Keys whose TOML value must parse as an integer within its configured bounds. */
|
|
38
31
|
export const NUMERIC_CONFIG_KEYS = [
|
|
39
32
|
'wait_seconds',
|
|
40
33
|
'ttl_seconds',
|
|
41
|
-
'away_after_seconds',
|
|
42
|
-
'hook_reply_timeout_seconds',
|
|
43
34
|
'ask_grace_seconds',
|
|
44
35
|
'log_max_bytes',
|
|
45
36
|
'log_max_files',
|
|
@@ -67,14 +58,8 @@ const DEFAULTS = {
|
|
|
67
58
|
// Installing the hooks is the opt-in; these exist to switch the behaviour
|
|
68
59
|
// back off for a project or a session without uninstalling anything.
|
|
69
60
|
ask_notifications: true,
|
|
70
|
-
// Questions reach devices
|
|
71
|
-
//
|
|
72
|
-
require_idle: false,
|
|
73
|
-
away_after_seconds: 120,
|
|
74
|
-
// Runtime waits stay inside a 480s budget. Harnesses that require a declared
|
|
75
|
-
// Stop limit use a preference-stable 540s; Codex uses its host-owned Stop
|
|
76
|
-
// default. Neither definition changes when these preferences do.
|
|
77
|
-
hook_reply_timeout_seconds: 480,
|
|
61
|
+
// Questions reach devices as soon as the turn ends. A terminal-first grace
|
|
62
|
+
// window is an opt-in delay on top of that.
|
|
78
63
|
ask_grace_seconds: 0,
|
|
79
64
|
// On by default: the log is the only account of what a headless hook did, and
|
|
80
65
|
// a diagnostic nobody switched on before the thing went wrong is not one.
|
|
@@ -169,21 +154,18 @@ export function findProjectLocalConfigPath(startDir) {
|
|
|
169
154
|
}
|
|
170
155
|
/**
|
|
171
156
|
* Ranges every layer is clamped to. Config is readable from a repository, so an
|
|
172
|
-
* out-of-range value is attacker input, not a typo:
|
|
173
|
-
* would
|
|
174
|
-
*
|
|
175
|
-
* already answered.
|
|
157
|
+
* out-of-range value is attacker input, not a typo: an unbounded grace window
|
|
158
|
+
* would consume the waiter's whole ceiling and silently leave no time at all in
|
|
159
|
+
* which the user's answer could still be accepted.
|
|
176
160
|
*/
|
|
177
161
|
const NUMERIC_BOUNDS = {
|
|
178
162
|
wait_seconds: { min: 0, max: 300 },
|
|
179
163
|
ttl_seconds: { min: 0, max: 7 * 24 * 3600 },
|
|
180
|
-
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
hook_reply_timeout_seconds: { min: 60, max: 540 },
|
|
186
|
-
ask_grace_seconds: { min: 0, max: HOOK_TIMING.maxGraceSeconds },
|
|
164
|
+
// A plain number, no longer derived from a hook budget's leftovers. Six
|
|
165
|
+
// minutes leaves two clear minutes of the waiter's 480s ceiling, so the
|
|
166
|
+
// longest window a user can choose still leaves an answer window the server
|
|
167
|
+
// will accept — with room to spare for a timer that wakes late.
|
|
168
|
+
ask_grace_seconds: { min: 0, max: 360 },
|
|
187
169
|
// The floor keeps rotation from thrashing (a file smaller than a handful of
|
|
188
170
|
// records would rotate on nearly every write); the ceiling is the point past
|
|
189
171
|
// which "local diagnostics" has become "a database on your disk".
|
|
@@ -259,9 +241,6 @@ export function loadConfig(options) {
|
|
|
259
241
|
project: resolve('project'),
|
|
260
242
|
notify_criteria: resolve('notify_criteria'),
|
|
261
243
|
ask_notifications: resolve('ask_notifications'),
|
|
262
|
-
require_idle: resolve('require_idle'),
|
|
263
|
-
away_after_seconds: resolve('away_after_seconds'),
|
|
264
|
-
hook_reply_timeout_seconds: resolve('hook_reply_timeout_seconds'),
|
|
265
244
|
ask_grace_seconds: resolve('ask_grace_seconds'),
|
|
266
245
|
log_level: resolve('log_level'),
|
|
267
246
|
log_max_bytes: resolve('log_max_bytes'),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/harnesses.d.ts
CHANGED
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
/** Every harness Notifai ships. This is the sole source of the harness union. */
|
|
2
2
|
export declare const HARNESSES: readonly ["claude-code", "codex", "cursor", "opencode"];
|
|
3
3
|
export type Harness = (typeof HARNESSES)[number];
|
|
4
|
-
|
|
5
|
-
export declare const HOOK_TIMING: Readonly<{
|
|
6
|
-
totalSeconds: 480;
|
|
7
|
-
finalizationReserveSeconds: 45;
|
|
8
|
-
submissionReserveSeconds: 40;
|
|
9
|
-
minimumReplySeconds: 60;
|
|
10
|
-
schedulingSlackSeconds: 1;
|
|
11
|
-
stdoutReserveSeconds: 5;
|
|
12
|
-
hostHeadroomSeconds: 60;
|
|
13
|
-
maxGraceSeconds: 334;
|
|
14
|
-
}>;
|
|
4
|
+
export type DeliveryRoute = 'hook-continuation' | 'inbox-socket' | 'owned-control-plane' | 'cold-resume' | 'hold-for-next-turn' | 'unsupported';
|
|
15
5
|
export type StopContinuation = 'decision-block' | 'followup-message' | 'unsupported';
|
|
16
6
|
export interface HarnessCapability {
|
|
17
7
|
/** How an answer is admitted to another turn in the already-open session. */
|
|
18
8
|
stopContinuation: StopContinuation;
|
|
19
|
-
/**
|
|
20
|
-
|
|
9
|
+
/** Available answer-delivery routes, best current route first. */
|
|
10
|
+
deliveryRoutes: readonly DeliveryRoute[];
|
|
21
11
|
/** Concise, honest readiness text for doctor and installation guidance. */
|
|
22
12
|
deliveryContract: string;
|
|
23
13
|
}
|
package/dist/harnesses.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
/** Every harness Notifai ships. This is the sole source of the harness union. */
|
|
2
2
|
export const HARNESSES = ['claude-code', 'codex', 'cursor', 'opencode'];
|
|
3
|
-
/** One canonical wall-clock budget shared by config, hooks, and installers. */
|
|
4
|
-
export const HOOK_TIMING = Object.freeze({
|
|
5
|
-
totalSeconds: 480,
|
|
6
|
-
finalizationReserveSeconds: 45,
|
|
7
|
-
submissionReserveSeconds: 40,
|
|
8
|
-
minimumReplySeconds: 60,
|
|
9
|
-
schedulingSlackSeconds: 1,
|
|
10
|
-
stdoutReserveSeconds: 5,
|
|
11
|
-
hostHeadroomSeconds: 60,
|
|
12
|
-
maxGraceSeconds: 334,
|
|
13
|
-
});
|
|
14
3
|
/**
|
|
15
4
|
* Exhaustive runtime contract. Adding a harness without deciding every
|
|
16
5
|
* continuation joint is a type error, not a silently degraded notification.
|
|
@@ -18,22 +7,22 @@ export const HOOK_TIMING = Object.freeze({
|
|
|
18
7
|
export const HARNESS_CAPABILITIES = {
|
|
19
8
|
'claude-code': {
|
|
20
9
|
stopContinuation: 'decision-block',
|
|
21
|
-
|
|
22
|
-
deliveryContract: '
|
|
10
|
+
deliveryRoutes: ['hook-continuation', 'inbox-socket', 'cold-resume', 'hold-for-next-turn'],
|
|
11
|
+
deliveryContract: 'the Stop hook returns at once and waits out of band, then posts the answer into this same session over its own inbox socket; a session that has stopped is resumed only once a liveness probe proves it stopped',
|
|
23
12
|
},
|
|
24
13
|
codex: {
|
|
25
14
|
stopContinuation: 'decision-block',
|
|
26
|
-
|
|
27
|
-
deliveryContract: 'live Stop continuation;
|
|
15
|
+
deliveryRoutes: ['hook-continuation', 'cold-resume', 'hold-for-next-turn'],
|
|
16
|
+
deliveryContract: 'live Stop continuation while the turn is held; once it returns, a stopped thread is resumed behind its writer lock and anything else waits for the next turn',
|
|
28
17
|
},
|
|
29
18
|
cursor: {
|
|
30
19
|
stopContinuation: 'unsupported',
|
|
31
|
-
|
|
20
|
+
deliveryRoutes: ['unsupported'],
|
|
32
21
|
deliveryContract: 'the hook can return a live follow-up, but the invoking shell exposes no exact conversation id; asynchronous ask is unsupported',
|
|
33
22
|
},
|
|
34
23
|
opencode: {
|
|
35
24
|
stopContinuation: 'unsupported',
|
|
36
|
-
|
|
25
|
+
deliveryRoutes: ['unsupported'],
|
|
37
26
|
deliveryContract: 'no proven answer continuation after session.idle; use a blocking reply command',
|
|
38
27
|
},
|
|
39
28
|
};
|
package/dist/harnesses.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../src/harnesses.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../src/harnesses.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AA0BhF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuC;IACtE,aAAa,EAAE;QACb,gBAAgB,EAAE,gBAAgB;QAClC,cAAc,EAAE,CAAC,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,CAAC;QAC1F,gBAAgB,EACd,iNAAiN;KACpN;IACD,KAAK,EAAE;QACL,gBAAgB,EAAE,gBAAgB;QAClC,cAAc,EAAE,CAAC,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,CAAC;QAC1E,gBAAgB,EACd,8JAA8J;KACjK;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,aAAa;QAC/B,cAAc,EAAE,CAAC,aAAa,CAAC;QAC/B,gBAAgB,EACd,gIAAgI;KACnI;IACD,QAAQ,EAAE;QACR,gBAAgB,EAAE,aAAa;QAC/B,cAAc,EAAE,CAAC,aAAa,CAAC;QAC/B,gBAAgB,EACd,gFAAgF;KACnF;CACF,CAAA"}
|