@berthdev/berth 0.2.1-rc.0 → 0.2.2
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/src/agents/hook-files.d.ts +21 -0
- package/dist/src/agents/hook-files.js +199 -0
- package/dist/src/agents/hook-files.js.map +1 -0
- package/dist/src/agents/hooks.d.ts +5 -0
- package/dist/src/agents/hooks.js +33 -59
- package/dist/src/agents/hooks.js.map +1 -1
- package/dist/src/agents/name-key.d.ts +1 -0
- package/dist/src/agents/{claude-name.js → name-key.js} +22 -13
- package/dist/src/agents/name-key.js.map +1 -0
- package/dist/src/agents/registry.d.ts +7 -2
- package/dist/src/agents/registry.js +23 -13
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/cli/main.js +10 -2
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/context.d.ts +2 -0
- package/dist/src/context.js +1 -0
- package/dist/src/context.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/present/attach.js +17 -0
- package/dist/src/present/attach.js.map +1 -1
- package/dist/src/registry/sessions.d.ts +5 -2
- package/dist/src/registry/sessions.js +14 -5
- package/dist/src/registry/sessions.js.map +1 -1
- package/dist/src/snapshot/take.js +3 -3
- package/dist/src/snapshot/take.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/agents/claude-name.d.ts +0 -1
- package/dist/src/agents/claude-name.js.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Adapter, HookTarget } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Where and how each agent reads its hooks (spec §8). Every format marks
|
|
4
|
+
* Berth's entries with MARKER so install is idempotent and uninstall removes
|
|
5
|
+
* only Berth's own entries.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MARKER = "BERTH_HOOK=1";
|
|
8
|
+
type Env = Record<string, string | undefined>;
|
|
9
|
+
/** Builds the command an agent runs for one event. */
|
|
10
|
+
export type CommandFor = (event: string) => string;
|
|
11
|
+
interface HookFormat {
|
|
12
|
+
file(env: Env): string;
|
|
13
|
+
install(file: string, events: string[], commandFor: CommandFor, adapter: Adapter): void;
|
|
14
|
+
uninstall(file: string): void;
|
|
15
|
+
}
|
|
16
|
+
/** OpenCode loads every module in its plugins folder; this one forwards session events to `berth hook`. */
|
|
17
|
+
export declare function opencodePlugin(node: string, cli: string, events: string[]): string;
|
|
18
|
+
export declare function hookFormat(target: HookTarget, cli?: string): HookFormat;
|
|
19
|
+
/** Whether the target file holds Berth's entries. */
|
|
20
|
+
export declare function containsBerth(file: string): boolean;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { BerthError, ExitCode } from '../errors.js';
|
|
5
|
+
/**
|
|
6
|
+
* Where and how each agent reads its hooks (spec §8). Every format marks
|
|
7
|
+
* Berth's entries with MARKER so install is idempotent and uninstall removes
|
|
8
|
+
* only Berth's own entries.
|
|
9
|
+
*/
|
|
10
|
+
export const MARKER = 'BERTH_HOOK=1';
|
|
11
|
+
const home = (env) => env.HOME || homedir();
|
|
12
|
+
function readJson(file) {
|
|
13
|
+
if (!existsSync(file))
|
|
14
|
+
return {};
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse(readFileSync(file, 'utf8'));
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
throw new BerthError(`cannot parse ${file}: ${error.message}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function writeText(file, text) {
|
|
23
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
24
|
+
writeFileSync(file, text);
|
|
25
|
+
}
|
|
26
|
+
const writeJson = (file, data) => writeText(file, `${JSON.stringify(data, null, 2)}\n`);
|
|
27
|
+
function withoutBerthNested(groups = []) {
|
|
28
|
+
return groups
|
|
29
|
+
.map((g) => ({ ...g, hooks: (g.hooks ?? []).filter((h) => !h.command?.includes(MARKER)) }))
|
|
30
|
+
.filter((g) => g.hooks.length > 0);
|
|
31
|
+
}
|
|
32
|
+
function mapEvents(data, keep) {
|
|
33
|
+
const hooks = {};
|
|
34
|
+
for (const [event, groups] of Object.entries((data.hooks ?? {}))) {
|
|
35
|
+
const kept = keep(groups);
|
|
36
|
+
if (kept.length > 0)
|
|
37
|
+
hooks[event] = kept;
|
|
38
|
+
}
|
|
39
|
+
return hooks;
|
|
40
|
+
}
|
|
41
|
+
function nestedJson(file) {
|
|
42
|
+
return {
|
|
43
|
+
file,
|
|
44
|
+
install(path, events, commandFor) {
|
|
45
|
+
const data = readJson(path);
|
|
46
|
+
const hooks = mapEvents(data, withoutBerthNested);
|
|
47
|
+
for (const event of events) {
|
|
48
|
+
hooks[event] = [...(hooks[event] ?? []), { hooks: [{ type: 'command', command: commandFor(event) }] }];
|
|
49
|
+
}
|
|
50
|
+
writeJson(path, { ...data, hooks });
|
|
51
|
+
},
|
|
52
|
+
uninstall(path) {
|
|
53
|
+
if (!existsSync(path))
|
|
54
|
+
return;
|
|
55
|
+
const data = readJson(path);
|
|
56
|
+
writeJson(path, { ...data, hooks: mapEvents(data, withoutBerthNested) });
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const withoutBerthFlat = (entries = []) => entries.filter((e) => !e.command?.includes(MARKER));
|
|
61
|
+
function flatJson(file, ownFile) {
|
|
62
|
+
return {
|
|
63
|
+
file,
|
|
64
|
+
install(path, events, commandFor) {
|
|
65
|
+
const data = ownFile ? {} : readJson(path);
|
|
66
|
+
const hooks = mapEvents(data, withoutBerthFlat);
|
|
67
|
+
for (const event of events)
|
|
68
|
+
hooks[event] = [...(hooks[event] ?? []), { type: 'command', command: commandFor(event) }];
|
|
69
|
+
writeJson(path, { ...data, version: 1, hooks });
|
|
70
|
+
},
|
|
71
|
+
uninstall(path) {
|
|
72
|
+
if (!existsSync(path))
|
|
73
|
+
return;
|
|
74
|
+
if (ownFile) {
|
|
75
|
+
rmSync(path, { force: true });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const data = readJson(path);
|
|
79
|
+
writeJson(path, { ...data, hooks: mapEvents(data, withoutBerthFlat) });
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// ---- Kimi Code: TOML array tables ---------------------------------------
|
|
84
|
+
const TOML_BEGIN = `# >>> berth hooks (${MARKER}; remove with: berth hooks uninstall kimi)`;
|
|
85
|
+
const TOML_END = '# <<< berth hooks';
|
|
86
|
+
function stripTomlBlock(text) {
|
|
87
|
+
const start = text.indexOf(TOML_BEGIN);
|
|
88
|
+
if (start < 0)
|
|
89
|
+
return text;
|
|
90
|
+
const end = text.indexOf(TOML_END, start);
|
|
91
|
+
const after = end < 0 ? text.length : end + TOML_END.length;
|
|
92
|
+
return `${text.slice(0, start).replace(/\n+$/, '\n')}${text.slice(after).replace(/^\n+/, '')}`.replace(/^\n$/, '');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Kimi Code rejects the whole config on an unknown field or event, so the
|
|
96
|
+
* block holds only `event` and `command`. It goes last: `[[hooks]]` tables
|
|
97
|
+
* at the end of the file cannot capture keys meant for another table.
|
|
98
|
+
*/
|
|
99
|
+
const tomlConfig = {
|
|
100
|
+
file(env) {
|
|
101
|
+
if (env.KIMI_CODE_HOME)
|
|
102
|
+
return join(env.KIMI_CODE_HOME, 'config.toml');
|
|
103
|
+
const legacy = join(home(env), '.kimi');
|
|
104
|
+
const current = join(home(env), '.kimi-code');
|
|
105
|
+
return existsSync(legacy) && !existsSync(current) ? join(legacy, 'config.toml') : join(current, 'config.toml');
|
|
106
|
+
},
|
|
107
|
+
install(path, events, commandFor) {
|
|
108
|
+
const base = stripTomlBlock(existsSync(path) ? readFileSync(path, 'utf8') : '');
|
|
109
|
+
const tables = events.map((event) => `[[hooks]]\nevent = ${JSON.stringify(event)}\ncommand = ${JSON.stringify(commandFor(event))}\n`);
|
|
110
|
+
const sep = base && !base.endsWith('\n') ? '\n\n' : base ? '\n' : '';
|
|
111
|
+
writeText(path, `${base}${sep}${TOML_BEGIN}\n${tables.join('\n')}${TOML_END}\n`);
|
|
112
|
+
},
|
|
113
|
+
uninstall(path) {
|
|
114
|
+
if (existsSync(path))
|
|
115
|
+
writeText(path, stripTomlBlock(readFileSync(path, 'utf8')));
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
// ---- OpenCode: a plugin module ------------------------------------------
|
|
119
|
+
/** OpenCode loads every module in its plugins folder; this one forwards session events to `berth hook`. */
|
|
120
|
+
export function opencodePlugin(node, cli, events) {
|
|
121
|
+
return `// ${MARKER}: written by \`berth hooks install opencode\`; remove with \`berth hooks uninstall opencode\`.
|
|
122
|
+
import { spawn } from 'node:child_process';
|
|
123
|
+
|
|
124
|
+
const EVENTS = new Set(${JSON.stringify(events)});
|
|
125
|
+
const children = new Set();
|
|
126
|
+
|
|
127
|
+
function send(event, id) {
|
|
128
|
+
if (!process.env.TMUX_PANE) return;
|
|
129
|
+
try {
|
|
130
|
+
const child = spawn(${JSON.stringify(node)}, [${JSON.stringify(cli)}, 'hook', 'opencode', event], {
|
|
131
|
+
stdio: ['pipe', 'ignore', 'ignore'],
|
|
132
|
+
env: { ...process.env, BERTH_HOOK: '1' },
|
|
133
|
+
});
|
|
134
|
+
child.on('error', () => {});
|
|
135
|
+
child.stdin.end(JSON.stringify({ session_id: id ?? '' }));
|
|
136
|
+
} catch {
|
|
137
|
+
// Never disturb the agent.
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export const BerthPlugin = async () => ({
|
|
142
|
+
event: async ({ event }) => {
|
|
143
|
+
if (!EVENTS.has(event.type)) return;
|
|
144
|
+
const props = event.properties ?? event.data ?? {};
|
|
145
|
+
const id = props.sessionID ?? props.info?.id;
|
|
146
|
+
// Subagent sessions are children of the conversation the user resumes.
|
|
147
|
+
if (props.info?.parentID) {
|
|
148
|
+
if (id) children.add(id);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (id && children.has(id)) return;
|
|
152
|
+
send(event.type, id);
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
`;
|
|
156
|
+
}
|
|
157
|
+
function opencodeFormat(node, cli) {
|
|
158
|
+
return {
|
|
159
|
+
file(env) {
|
|
160
|
+
const config = env.XDG_CONFIG_HOME || join(home(env), '.config');
|
|
161
|
+
return join(config, 'opencode', 'plugins', 'berth.js');
|
|
162
|
+
},
|
|
163
|
+
install(path, events) {
|
|
164
|
+
writeText(path, opencodePlugin(node, cli, events));
|
|
165
|
+
},
|
|
166
|
+
uninstall(path) {
|
|
167
|
+
if (existsSync(path) && readFileSync(path, 'utf8').includes(MARKER))
|
|
168
|
+
rmSync(path, { force: true });
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
// ---- Registry -----------------------------------------------------------
|
|
173
|
+
export function hookFormat(target, cli = '') {
|
|
174
|
+
switch (target) {
|
|
175
|
+
case 'claude-settings':
|
|
176
|
+
return nestedJson((env) => join(home(env), '.claude', 'settings.json'));
|
|
177
|
+
case 'codex-hooks':
|
|
178
|
+
return nestedJson((env) => join(home(env), '.codex', 'hooks.json'));
|
|
179
|
+
case 'gemini-settings':
|
|
180
|
+
return nestedJson((env) => join(home(env), '.gemini', 'settings.json'));
|
|
181
|
+
case 'qoder-settings':
|
|
182
|
+
return nestedJson((env) => join(env.QODER_CONFIG_DIR || join(home(env), '.qoder'), 'settings.json'));
|
|
183
|
+
case 'cursor-hooks':
|
|
184
|
+
return flatJson((env) => join(home(env), '.cursor', 'hooks.json'), false);
|
|
185
|
+
case 'copilot-hooks':
|
|
186
|
+
return flatJson((env) => join(env.COPILOT_HOME || join(home(env), '.copilot'), 'hooks', 'berth.json'), true);
|
|
187
|
+
case 'kimi-config':
|
|
188
|
+
return tomlConfig;
|
|
189
|
+
case 'opencode-plugin':
|
|
190
|
+
return opencodeFormat(process.execPath, cli);
|
|
191
|
+
default:
|
|
192
|
+
throw new BerthError(`unknown hook target ${String(target)}`, ExitCode.usage);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** Whether the target file holds Berth's entries. */
|
|
196
|
+
export function containsBerth(file) {
|
|
197
|
+
return existsSync(file) && readFileSync(file, 'utf8').includes(MARKER);
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=hook-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-files.js","sourceRoot":"","sources":["../../../src/agents/hook-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,11 @@ export declare function hookCommand(cliPath: string, agent: string, event: strin
|
|
|
4
4
|
export declare function installHooks(agentId: string, cliPath: string, env?: NodeJS.ProcessEnv): string;
|
|
5
5
|
export declare function uninstallHooks(agentId: string, env?: NodeJS.ProcessEnv): string;
|
|
6
6
|
export declare function hooksInstalled(agentId: string, env?: NodeJS.ProcessEnv): boolean;
|
|
7
|
+
export type HookStatus = 'installed' | 'missing' | 'none';
|
|
8
|
+
/** Whether an agent's hooks are installed; `none` when Berth has no hooks for it. */
|
|
9
|
+
export declare function hookStatus(agentId: string, env?: NodeJS.ProcessEnv): HookStatus;
|
|
10
|
+
/** What a user is told when an agent in use has no hooks (spec §4.2). */
|
|
11
|
+
export declare function hookHint(agentId: string): string;
|
|
7
12
|
/** What a hook event changes on the session, or nothing when the event does not matter. */
|
|
8
13
|
export declare function metaForEvent(adapter: Adapter, event: string, payload: Record<string, unknown>): Record<string, string>;
|
|
9
14
|
/**
|
package/dist/src/agents/hooks.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { dirname, join } from 'node:path';
|
|
3
|
-
import { homedir } from 'node:os';
|
|
4
1
|
import { BerthError, ExitCode } from '../errors.js';
|
|
5
2
|
import { shellQuote } from '../shell.js';
|
|
6
3
|
import { Tmux } from '../tmux/client.js';
|
|
@@ -8,42 +5,16 @@ import { presentState } from '../present/state.js';
|
|
|
8
5
|
import { createContext } from '../context.js';
|
|
9
6
|
import { snapshotQuietly } from '../snapshot/take.js';
|
|
10
7
|
import { requireAdapter } from './commands.js';
|
|
11
|
-
import { stateForEvent } from './registry.js';
|
|
12
|
-
|
|
13
|
-
const MARKER = 'BERTH_HOOK=1';
|
|
14
|
-
function hookFile(adapter, env) {
|
|
15
|
-
const home = env.HOME || homedir();
|
|
16
|
-
switch (adapter.hookTarget) {
|
|
17
|
-
case 'claude-settings':
|
|
18
|
-
return join(home, '.claude', 'settings.json');
|
|
19
|
-
case 'codex-hooks':
|
|
20
|
-
return join(home, '.codex', 'hooks.json');
|
|
21
|
-
default:
|
|
22
|
-
throw new BerthError(`${adapter.displayName} has no hook integration in Berth yet`, ExitCode.usage);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
8
|
+
import { getAdapter, stateForEvent } from './registry.js';
|
|
9
|
+
import { containsBerth, hookFormat, MARKER } from './hook-files.js';
|
|
25
10
|
function hookEvents(adapter) {
|
|
26
11
|
const { start, working, waiting, done } = adapter.events;
|
|
27
12
|
return [...new Set([...start, ...working, ...waiting, ...done])];
|
|
28
13
|
}
|
|
29
|
-
function
|
|
30
|
-
if (!
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return JSON.parse(readFileSync(file, 'utf8'));
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
throw new BerthError(`cannot parse ${file}: ${error.message}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function withoutBerth(groups = []) {
|
|
40
|
-
return groups
|
|
41
|
-
.map((g) => ({ ...g, hooks: (g.hooks ?? []).filter((h) => !h.command?.includes(MARKER)) }))
|
|
42
|
-
.filter((g) => g.hooks.length > 0);
|
|
43
|
-
}
|
|
44
|
-
function writeHooks(file, data) {
|
|
45
|
-
mkdirSync(dirname(file), { recursive: true });
|
|
46
|
-
writeFileSync(file, `${JSON.stringify(data, null, 2)}\n`);
|
|
14
|
+
function targetOf(adapter) {
|
|
15
|
+
if (!adapter.hookTarget)
|
|
16
|
+
throw new BerthError(`${adapter.displayName} has no hook integration`, ExitCode.usage);
|
|
17
|
+
return adapter.hookTarget;
|
|
47
18
|
}
|
|
48
19
|
/** Command an agent runs for an event: `BERTH_HOOK=1 <node> <cli> hook <agent> <event>`. */
|
|
49
20
|
export function hookCommand(cliPath, agent, event) {
|
|
@@ -51,46 +22,49 @@ export function hookCommand(cliPath, agent, event) {
|
|
|
51
22
|
}
|
|
52
23
|
export function installHooks(agentId, cliPath, env = process.env) {
|
|
53
24
|
const adapter = requireAdapter(agentId);
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
for (const event of hookEvents(adapter)) {
|
|
58
|
-
hooks[event] = [...withoutBerth(hooks[event]), { hooks: [{ type: 'command', command: hookCommand(cliPath, adapter.id, event) }] }];
|
|
59
|
-
}
|
|
60
|
-
writeHooks(file, { ...data, hooks });
|
|
25
|
+
const format = hookFormat(targetOf(adapter), cliPath);
|
|
26
|
+
const file = format.file(env);
|
|
27
|
+
format.install(file, hookEvents(adapter), (event) => hookCommand(cliPath, adapter.id, event), adapter);
|
|
61
28
|
return file;
|
|
62
29
|
}
|
|
63
30
|
export function uninstallHooks(agentId, env = process.env) {
|
|
64
|
-
const
|
|
65
|
-
const file =
|
|
66
|
-
|
|
67
|
-
return file;
|
|
68
|
-
const data = readHooks(file);
|
|
69
|
-
const hooks = {};
|
|
70
|
-
for (const [event, groups] of Object.entries(data.hooks ?? {})) {
|
|
71
|
-
const kept = withoutBerth(groups);
|
|
72
|
-
if (kept.length > 0)
|
|
73
|
-
hooks[event] = kept;
|
|
74
|
-
}
|
|
75
|
-
writeHooks(file, { ...data, hooks });
|
|
31
|
+
const format = hookFormat(targetOf(requireAdapter(agentId)));
|
|
32
|
+
const file = format.file(env);
|
|
33
|
+
format.uninstall(file);
|
|
76
34
|
return file;
|
|
77
35
|
}
|
|
78
36
|
export function hooksInstalled(agentId, env = process.env) {
|
|
79
37
|
const adapter = requireAdapter(agentId);
|
|
80
38
|
if (!adapter.hookTarget)
|
|
81
39
|
return false;
|
|
82
|
-
|
|
83
|
-
|
|
40
|
+
return containsBerth(hookFormat(adapter.hookTarget).file(env));
|
|
41
|
+
}
|
|
42
|
+
/** Whether an agent's hooks are installed; `none` when Berth has no hooks for it. */
|
|
43
|
+
export function hookStatus(agentId, env = process.env) {
|
|
44
|
+
const adapter = getAdapter(agentId);
|
|
45
|
+
if (!adapter?.hookTarget)
|
|
46
|
+
return 'none';
|
|
47
|
+
try {
|
|
48
|
+
return hooksInstalled(agentId, env) ? 'installed' : 'missing';
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return 'missing';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** What a user is told when an agent in use has no hooks (spec §4.2). */
|
|
55
|
+
export function hookHint(agentId) {
|
|
56
|
+
const name = getAdapter(agentId)?.displayName ?? agentId;
|
|
57
|
+
return `Berth: ${name} hooks are not installed, so after a restart this session starts a new conversation. Run: berth hooks install ${agentId}`;
|
|
84
58
|
}
|
|
85
59
|
/** What a hook event changes on the session, or nothing when the event does not matter. */
|
|
86
60
|
export function metaForEvent(adapter, event, payload) {
|
|
87
61
|
const meta = {};
|
|
88
|
-
const id = payload.session_id ?? payload.sessionID ?? payload.conversation_id;
|
|
62
|
+
const id = payload.session_id ?? payload.sessionId ?? payload.sessionID ?? payload.conversation_id;
|
|
89
63
|
if (adapter.events.start.includes(event) && typeof id === 'string' && id)
|
|
90
64
|
meta.conversation = id;
|
|
91
65
|
let state = stateForEvent(adapter, event);
|
|
92
|
-
//
|
|
93
|
-
if (
|
|
66
|
+
// Some agents also notify for idle reminders; only a permission request means waiting.
|
|
67
|
+
if (state === 'waiting' && adapter.waitingWhen && !adapter.waitingWhen(payload))
|
|
94
68
|
state = undefined;
|
|
95
69
|
if (state)
|
|
96
70
|
meta.state = state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/agents/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/agents/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function conversationByName(agent: string, cwd: string, name: string, env?: NodeJS.ProcessEnv): string | undefined;
|
|
@@ -2,25 +2,31 @@ import { closeSync, existsSync, openSync, readdirSync, readSync, realpathSync, s
|
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
/**
|
|
5
|
-
* Name key (spec §4.2):
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* conversation. Claude
|
|
9
|
-
*
|
|
5
|
+
* Name key (spec §4.2): an agent started with `--name X` records X as a
|
|
6
|
+
* `custom-title` entry near the top of its transcript. The newest transcript
|
|
7
|
+
* in the session's directory carrying that title is the session's
|
|
8
|
+
* conversation. Claude Code and Qoder CLI keep a directory's transcripts as
|
|
9
|
+
* <root>/projects/<encoded cwd>/<id>.jsonl; Claude encodes every
|
|
10
|
+
* non-alphanumeric character as '-', Qoder documents '/' as '-'.
|
|
10
11
|
*/
|
|
11
12
|
const HEADER_LINES = 40;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const ROOTS = {
|
|
14
|
+
claude: (env) => join(env.HOME || homedir(), '.claude'),
|
|
15
|
+
qoder: (env) => env.QODER_CONFIG_DIR || join(env.HOME || homedir(), '.qoder'),
|
|
16
|
+
};
|
|
17
|
+
const ENCODINGS = [(p) => p.replace(/[^A-Za-z0-9]/g, '-'), (p) => p.replace(/\//g, '-')];
|
|
18
|
+
function projectDirs(root, cwd) {
|
|
19
|
+
const paths = [cwd];
|
|
15
20
|
try {
|
|
16
21
|
const real = realpathSync(cwd);
|
|
17
22
|
if (real !== cwd)
|
|
18
|
-
|
|
23
|
+
paths.push(real);
|
|
19
24
|
}
|
|
20
25
|
catch {
|
|
21
26
|
// The directory may be gone; the recorded path still names its transcripts.
|
|
22
27
|
}
|
|
23
|
-
|
|
28
|
+
const dirs = paths.flatMap((p) => ENCODINGS.map((encode) => join(root, 'projects', encode(p))));
|
|
29
|
+
return [...new Set(dirs)].filter((d) => existsSync(d));
|
|
24
30
|
}
|
|
25
31
|
function titleOf(file) {
|
|
26
32
|
const fd = openSync(file, 'r');
|
|
@@ -43,8 +49,11 @@ function titleOf(file) {
|
|
|
43
49
|
closeSync(fd);
|
|
44
50
|
}
|
|
45
51
|
}
|
|
46
|
-
export function
|
|
47
|
-
const
|
|
52
|
+
export function conversationByName(agent, cwd, name, env = process.env) {
|
|
53
|
+
const root = ROOTS[agent];
|
|
54
|
+
if (!root)
|
|
55
|
+
return undefined;
|
|
56
|
+
const files = projectDirs(root(env), cwd)
|
|
48
57
|
.flatMap((dir) => readdirSync(dir).filter((f) => f.endsWith('.jsonl')).map((f) => join(dir, f)))
|
|
49
58
|
.map((file) => ({ file, mtime: statSync(file).mtimeMs }))
|
|
50
59
|
.sort((a, b) => b.mtime - a.mtime);
|
|
@@ -54,4 +63,4 @@ export function claudeConversationByName(cwd, name, home = process.env.HOME || h
|
|
|
54
63
|
}
|
|
55
64
|
return undefined;
|
|
56
65
|
}
|
|
57
|
-
//# sourceMappingURL=
|
|
66
|
+
//# sourceMappingURL=name-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-key.js","sourceRoot":"","sources":["../../../src/agents/name-key.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* `source` records where each row's commands and events come from:
|
|
5
5
|
* - `help <version>`: checked against the CLI's own --help on that version;
|
|
6
|
-
* - `cmux`: follows cmux's handling of that agent (reference commit in spec §8)
|
|
6
|
+
* - `cmux`: follows cmux's handling of that agent (reference commit in spec §8);
|
|
7
|
+
* - `docs`: the CLI's official documentation (links in spec §8).
|
|
7
8
|
* No code is taken from other projects; facts about the CLIs are restated here.
|
|
8
9
|
*/
|
|
9
10
|
export type AgentState = 'working' | 'waiting' | 'done';
|
|
@@ -14,6 +15,8 @@ export interface HookEvents {
|
|
|
14
15
|
waiting: string[];
|
|
15
16
|
done: string[];
|
|
16
17
|
}
|
|
18
|
+
/** Hook file formats Berth can write (see hook-files.ts). */
|
|
19
|
+
export type HookTarget = 'claude-settings' | 'codex-hooks' | 'gemini-settings' | 'qoder-settings' | 'cursor-hooks' | 'copilot-hooks' | 'kimi-config' | 'opencode-plugin';
|
|
17
20
|
export interface Adapter {
|
|
18
21
|
id: string;
|
|
19
22
|
displayName: string;
|
|
@@ -24,8 +27,10 @@ export interface Adapter {
|
|
|
24
27
|
/** Options kept on resume; value says whether the option takes an argument. */
|
|
25
28
|
keep: Record<string, boolean>;
|
|
26
29
|
/** Where Berth writes hooks for this agent, when it supports them. */
|
|
27
|
-
hookTarget?:
|
|
30
|
+
hookTarget?: HookTarget;
|
|
28
31
|
events: HookEvents;
|
|
32
|
+
/** For a waiting event that also fires for other reasons: whether this payload asks for the user. */
|
|
33
|
+
waitingWhen?: (payload: Record<string, unknown>) => boolean;
|
|
29
34
|
source: string;
|
|
30
35
|
}
|
|
31
36
|
export declare const ADAPTERS: Adapter[];
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* `source` records where each row's commands and events come from:
|
|
5
5
|
* - `help <version>`: checked against the CLI's own --help on that version;
|
|
6
|
-
* - `cmux`: follows cmux's handling of that agent (reference commit in spec §8)
|
|
6
|
+
* - `cmux`: follows cmux's handling of that agent (reference commit in spec §8);
|
|
7
|
+
* - `docs`: the CLI's official documentation (links in spec §8).
|
|
7
8
|
* No code is taken from other projects; facts about the CLIs are restated here.
|
|
8
9
|
*/
|
|
9
10
|
const noEvents = { start: [], working: [], waiting: [], done: [] };
|
|
@@ -31,6 +32,7 @@ export const ADAPTERS = [
|
|
|
31
32
|
},
|
|
32
33
|
hookTarget: 'claude-settings',
|
|
33
34
|
events: claudeEvents,
|
|
35
|
+
waitingWhen: (p) => /permission/i.test(String(p.message ?? '')),
|
|
34
36
|
source: 'help 2.1.310',
|
|
35
37
|
},
|
|
36
38
|
{
|
|
@@ -63,8 +65,10 @@ export const ADAPTERS = [
|
|
|
63
65
|
launch: 'gemini {args}',
|
|
64
66
|
resume: 'gemini --resume {conversation} {args}',
|
|
65
67
|
keep: { '--model': true, '-m': true, '--yolo': false, '--approval-mode': true },
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
hookTarget: 'gemini-settings',
|
|
69
|
+
events: { start: ['SessionStart'], working: ['BeforeAgent'], waiting: ['Notification'], done: ['AfterAgent'] },
|
|
70
|
+
waitingWhen: (p) => p.notification_type === 'ToolPermission',
|
|
71
|
+
source: 'docs (hooks, hooks on by default since 0.27); cmux',
|
|
68
72
|
},
|
|
69
73
|
{
|
|
70
74
|
id: 'opencode',
|
|
@@ -73,18 +77,21 @@ export const ADAPTERS = [
|
|
|
73
77
|
launch: 'opencode {args}',
|
|
74
78
|
resume: 'opencode --session {conversation} {args}',
|
|
75
79
|
keep: { '--model': true, '-m': true, '--agent': true },
|
|
80
|
+
hookTarget: 'opencode-plugin',
|
|
76
81
|
events: { start: ['session.created'], working: [], waiting: [], done: ['session.idle'] },
|
|
77
|
-
source: 'cmux',
|
|
82
|
+
source: 'docs (plugins); cmux',
|
|
78
83
|
},
|
|
79
84
|
{
|
|
80
85
|
id: 'copilot',
|
|
81
86
|
displayName: 'GitHub Copilot CLI',
|
|
82
87
|
binary: 'copilot',
|
|
83
88
|
launch: 'copilot {args}',
|
|
84
|
-
resume: 'copilot --resume
|
|
89
|
+
resume: 'copilot --resume={conversation} {args}',
|
|
85
90
|
keep: { '--model': true, '--allow-all-tools': false, '--add-dir': true },
|
|
86
|
-
|
|
87
|
-
|
|
91
|
+
hookTarget: 'copilot-hooks',
|
|
92
|
+
events: { start: ['sessionStart'], working: ['userPromptSubmitted'], waiting: ['notification'], done: ['agentStop'] },
|
|
93
|
+
waitingWhen: (p) => /permission/i.test(String(p.notification_type ?? p.notificationType ?? '')),
|
|
94
|
+
source: 'docs (hooks, CLI 1.0.21+); cmux',
|
|
88
95
|
},
|
|
89
96
|
{
|
|
90
97
|
id: 'cursor',
|
|
@@ -93,8 +100,9 @@ export const ADAPTERS = [
|
|
|
93
100
|
launch: 'cursor-agent {args}',
|
|
94
101
|
resume: 'cursor-agent --resume {conversation} {args}',
|
|
95
102
|
keep: { '--model': true, '--force': false },
|
|
96
|
-
|
|
97
|
-
|
|
103
|
+
hookTarget: 'cursor-hooks',
|
|
104
|
+
events: { start: ['sessionStart'], working: ['beforeSubmitPrompt'], waiting: [], done: ['stop'] },
|
|
105
|
+
source: 'help 2025.09.12 (commands); docs (hooks, CLI 2026.01+); cmux',
|
|
98
106
|
},
|
|
99
107
|
{
|
|
100
108
|
id: 'kimi',
|
|
@@ -103,8 +111,9 @@ export const ADAPTERS = [
|
|
|
103
111
|
launch: 'kimi {args}',
|
|
104
112
|
resume: 'kimi --session {conversation} {args}',
|
|
105
113
|
keep: { '--agent': true, '--add-dir': true, '--model': true, '-m': true },
|
|
106
|
-
|
|
107
|
-
|
|
114
|
+
hookTarget: 'kimi-config',
|
|
115
|
+
events: { start: ['SessionStart'], working: ['UserPromptSubmit'], waiting: ['PermissionRequest'], done: ['Stop'] },
|
|
116
|
+
source: 'help 0.31.1 (commands); docs (hooks); cmux',
|
|
108
117
|
},
|
|
109
118
|
{
|
|
110
119
|
id: 'qoder',
|
|
@@ -113,8 +122,9 @@ export const ADAPTERS = [
|
|
|
113
122
|
launch: 'qodercli --name {name} {args}',
|
|
114
123
|
resume: 'qodercli --resume {conversation} {args}',
|
|
115
124
|
keep: { '--model': true, '--yolo': false },
|
|
116
|
-
|
|
117
|
-
|
|
125
|
+
hookTarget: 'qoder-settings',
|
|
126
|
+
events: { start: ['SessionStart'], working: ['UserPromptSubmit'], waiting: ['PermissionRequest'], done: ['Stop'] },
|
|
127
|
+
source: 'help 1.0.48 (commands); docs (hooks); cmux',
|
|
118
128
|
},
|
|
119
129
|
{
|
|
120
130
|
id: 'shell',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agents/registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agents/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/main.js
CHANGED
|
@@ -6,7 +6,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
import { parseArgs } from 'node:util';
|
|
7
7
|
import { createContext } from '../context.js';
|
|
8
8
|
import { BerthError, ExitCode } from '../errors.js';
|
|
9
|
-
import { handleHook, installHooks, uninstallHooks } from '../agents/hooks.js';
|
|
9
|
+
import { handleHook, hookHint, hookStatus, installHooks, uninstallHooks } from '../agents/hooks.js';
|
|
10
10
|
import { adopt, bellRang, checkOrigin, create, list, requireLive, stamp } from '../registry/sessions.js';
|
|
11
11
|
import { doctor } from '../registry/doctor.js';
|
|
12
12
|
import { takeSnapshot } from '../snapshot/take.js';
|
|
@@ -60,6 +60,11 @@ function formatResults(results) {
|
|
|
60
60
|
return 'nothing to restore';
|
|
61
61
|
return results.map((r) => `${r.name}\t${r.outcome}${r.detail ? `\t${r.detail}` : ''}`).join('\n');
|
|
62
62
|
}
|
|
63
|
+
/** Tell the user, on stderr, when the agent just started has no hooks. */
|
|
64
|
+
function hintHooks(agent) {
|
|
65
|
+
if (agent && hookStatus(agent) === 'missing')
|
|
66
|
+
process.stderr.write(`${hookHint(agent)}\n`);
|
|
67
|
+
}
|
|
63
68
|
function cliPath() {
|
|
64
69
|
return realpathSync(fileURLToPath(import.meta.url));
|
|
65
70
|
}
|
|
@@ -92,11 +97,14 @@ function run(ctx, command, rest, out) {
|
|
|
92
97
|
extraArgs,
|
|
93
98
|
});
|
|
94
99
|
out(name);
|
|
100
|
+
hintHooks(positionals[0]);
|
|
95
101
|
return ExitCode.ok;
|
|
96
102
|
}
|
|
97
103
|
case 'adopt': {
|
|
98
104
|
const { values, positionals } = parse(rest, { agent: { type: 'string' }, origin: { type: 'string' } });
|
|
99
|
-
|
|
105
|
+
const agent = need(values.agent, '--agent');
|
|
106
|
+
adopt(ctx, need(positionals[0], 'session'), agent, values.origin);
|
|
107
|
+
hintHooks(agent);
|
|
100
108
|
return ExitCode.ok;
|
|
101
109
|
}
|
|
102
110
|
case 'attach': {
|
package/dist/src/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
package/dist/src/context.d.ts
CHANGED
|
@@ -5,5 +5,7 @@ export interface Context {
|
|
|
5
5
|
config: BerthConfig;
|
|
6
6
|
tmux: Tmux;
|
|
7
7
|
store: SnapshotStore;
|
|
8
|
+
/** Environment the context was made from; locates agent configuration. */
|
|
9
|
+
env: Record<string, string | undefined>;
|
|
8
10
|
}
|
|
9
11
|
export declare function createContext(env?: Record<string, string | undefined>): Context;
|
package/dist/src/context.js
CHANGED
|
@@ -7,6 +7,7 @@ export function createContext(env = process.env) {
|
|
|
7
7
|
config,
|
|
8
8
|
tmux: new Tmux({ bin: config.tmuxBin, socket: config.tmuxSocket, socketPath: config.tmuxSocketPath }),
|
|
9
9
|
store: new SnapshotStore(config.snapshotRoot),
|
|
10
|
+
env,
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=context.js.map
|
package/dist/src/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAUxC,MAAM,UAAU,aAAa,CAAC,MAA0C,OAAO,CAAC,GAAG;IACjF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO;QACL,MAAM;QACN,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;QACrG,KAAK,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC;QAC7C,GAAG;KACJ,CAAC;AACJ,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export { BerthError, ExitCode } from './errors.js';
|
|
|
4
4
|
export { Tmux, type LiveSession, type SessionMeta } from './tmux/client.js';
|
|
5
5
|
export { ADAPTERS, getAdapter, type Adapter } from './agents/registry.js';
|
|
6
6
|
export { keptArgs, launchCommand, resumeCommand } from './agents/commands.js';
|
|
7
|
-
export { installHooks, uninstallHooks, handleHook, metaForEvent } from './agents/hooks.js';
|
|
7
|
+
export { installHooks, uninstallHooks, handleHook, metaForEvent, hookStatus, hookHint, type HookStatus } from './agents/hooks.js';
|
|
8
8
|
export { list, create, adopt, stamp, bellRang, clearBell, BELL_NOTE, type SessionRow } from './registry/sessions.js';
|
|
9
9
|
export { doctor } from './registry/doctor.js';
|
|
10
10
|
export { SnapshotStore, type Snapshot, type SnapshotSession } from './snapshot/store.js';
|
package/dist/src/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { BerthError, ExitCode } from './errors.js';
|
|
|
4
4
|
export { Tmux } from './tmux/client.js';
|
|
5
5
|
export { ADAPTERS, getAdapter } from './agents/registry.js';
|
|
6
6
|
export { keptArgs, launchCommand, resumeCommand } from './agents/commands.js';
|
|
7
|
-
export { installHooks, uninstallHooks, handleHook, metaForEvent } from './agents/hooks.js';
|
|
7
|
+
export { installHooks, uninstallHooks, handleHook, metaForEvent, hookStatus, hookHint } from './agents/hooks.js';
|
|
8
8
|
export { list, create, adopt, stamp, bellRang, clearBell, BELL_NOTE } from './registry/sessions.js';
|
|
9
9
|
export { doctor } from './registry/doctor.js';
|
|
10
10
|
export { SnapshotStore } from './snapshot/store.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,IAAI,EAAsC,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAgB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,IAAI,EAAsC,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAgB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAmB,MAAM,mBAAmB,CAAC;AAClI,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAmB,MAAM,wBAAwB,CAAC;AACrH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAuC,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAc,MAAM,qBAAqB,CAAC;AAC5H,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { appendFileSync } from 'node:fs';
|
|
2
2
|
import { stamp } from '../registry/sessions.js';
|
|
3
3
|
import { isIterm2, presentState } from './state.js';
|
|
4
|
+
import { hookHint, hookStatus } from '../agents/hooks.js';
|
|
4
5
|
/** iTerm2 user variable naming the session a pane shows (spec §7.3). */
|
|
5
6
|
export const PANE_VARIABLE = 'berthSession';
|
|
6
7
|
export function setUserVar(name, value) {
|
|
@@ -27,5 +28,21 @@ export function clientAttached(ctx, client) {
|
|
|
27
28
|
stamp(ctx, client.session, { origin: 'iterm2' });
|
|
28
29
|
}
|
|
29
30
|
presentState(ctx.tmux, client.session, live.meta.state ?? '', { note: live.meta.note, clients: [{ tty: client.tty, termtype: client.termtype }] });
|
|
31
|
+
if (live.meta.origin !== 'vscode')
|
|
32
|
+
hintHooksOnce(ctx, live.meta.agent, client.tty);
|
|
33
|
+
}
|
|
34
|
+
const HINT_SECONDS = 10;
|
|
35
|
+
/**
|
|
36
|
+
* Terminals other than VS Code (which asks in its own UI) get the hooks hint
|
|
37
|
+
* in tmux's status line, once per agent per tmux server.
|
|
38
|
+
*/
|
|
39
|
+
function hintHooksOnce(ctx, agent, tty) {
|
|
40
|
+
if (hookStatus(agent, ctx.env) !== 'missing')
|
|
41
|
+
return;
|
|
42
|
+
const flag = `@berth_hinted_${agent}`;
|
|
43
|
+
if (ctx.tmux.run(['show-option', '-gqv', flag], true).stdout.trim())
|
|
44
|
+
return;
|
|
45
|
+
ctx.tmux.run(['set-option', '-g', flag, '1'], true);
|
|
46
|
+
ctx.tmux.run(['display-message', '-c', tty, '-d', String(HINT_SECONDS * 1000), hookHint(agent)], true);
|
|
30
47
|
}
|
|
31
48
|
//# sourceMappingURL=attach.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/present/attach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/present/attach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAE5C,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAa;IACpD,OAAO,wBAAwB,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrF,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,MAAsB;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;QAAE,OAAO;IAC9B,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACnJ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAY,EAAE,KAAa,EAAE,GAAW;IAC7D,IAAI,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;QAAE,OAAO;IACrD,MAAM,IAAI,GAAG,iBAAiB,KAAK,EAAE,CAAC;IACtC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO;IAC5E,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACpD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACzG,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Context } from '../context.js';
|
|
2
|
+
import { type HookStatus } from '../agents/hooks.js';
|
|
2
3
|
/** One row of `berth ls` (implementation §2.2). */
|
|
3
4
|
export interface SessionRow {
|
|
4
5
|
name: string;
|
|
@@ -11,6 +12,8 @@ export interface SessionRow {
|
|
|
11
12
|
note: string;
|
|
12
13
|
attachedClients: number;
|
|
13
14
|
live: boolean;
|
|
15
|
+
/** Whether the agent's Berth hooks are installed (spec §4.2). */
|
|
16
|
+
hooks: HookStatus;
|
|
14
17
|
}
|
|
15
18
|
export declare const ORIGINS: readonly ["vscode", "iterm2", "none"];
|
|
16
19
|
export declare function list(ctx: Context): SessionRow[];
|
|
@@ -39,8 +42,8 @@ export declare const BELL_NOTE = "bell";
|
|
|
39
42
|
/**
|
|
40
43
|
* A terminal bell from a managed session (tmux alert-bell). Agents without
|
|
41
44
|
* Berth hooks get state `waiting`, so every agent can ask for attention; for
|
|
42
|
-
* agents whose hooks
|
|
43
|
-
* is ignored. Returns whether the state changed.
|
|
45
|
+
* agents whose installed hooks report waiting the hooks are more precise and
|
|
46
|
+
* the bell is ignored. Returns whether the state changed.
|
|
44
47
|
*/
|
|
45
48
|
export declare function bellRang(ctx: Context, name: string, env?: NodeJS.ProcessEnv): boolean;
|
|
46
49
|
/** Seeing a session answers its bell: clear a bell-raised waiting state. */
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { basename } from 'node:path';
|
|
2
2
|
import { BerthError, ExitCode } from '../errors.js';
|
|
3
3
|
import { launchCommand, requireAdapter } from '../agents/commands.js';
|
|
4
|
-
import { hooksInstalled } from '../agents/hooks.js';
|
|
4
|
+
import { hooksInstalled, hookStatus } from '../agents/hooks.js';
|
|
5
5
|
import { getAdapter } from '../agents/registry.js';
|
|
6
6
|
import { snapshotQuietly } from '../snapshot/take.js';
|
|
7
7
|
import { presentState } from '../present/state.js';
|
|
8
8
|
export const ORIGINS = ['vscode', 'iterm2', 'none'];
|
|
9
9
|
export function list(ctx) {
|
|
10
10
|
const live = ctx.tmux.listSessions();
|
|
11
|
+
const statuses = new Map();
|
|
12
|
+
const hooks = (agent) => {
|
|
13
|
+
if (!agent)
|
|
14
|
+
return 'none';
|
|
15
|
+
if (!statuses.has(agent))
|
|
16
|
+
statuses.set(agent, hookStatus(agent, ctx.env));
|
|
17
|
+
return statuses.get(agent);
|
|
18
|
+
};
|
|
11
19
|
const rows = live.map((s) => ({
|
|
12
20
|
name: s.name,
|
|
13
21
|
managed: Boolean(s.meta.agent),
|
|
@@ -19,12 +27,13 @@ export function list(ctx) {
|
|
|
19
27
|
note: s.meta.note ?? '',
|
|
20
28
|
attachedClients: s.attachedClients,
|
|
21
29
|
live: true,
|
|
30
|
+
hooks: hooks(s.meta.agent ?? ''),
|
|
22
31
|
}));
|
|
23
32
|
const liveNames = new Set(live.map((s) => s.name));
|
|
24
33
|
for (const s of ctx.store.newest()?.sessions ?? []) {
|
|
25
34
|
if (liveNames.has(s.name))
|
|
26
35
|
continue;
|
|
27
|
-
rows.push({ ...s, managed: true, state: '', note: '', attachedClients: 0, live: false });
|
|
36
|
+
rows.push({ ...s, managed: true, state: '', note: '', attachedClients: 0, live: false, hooks: hooks(s.agent) });
|
|
28
37
|
}
|
|
29
38
|
return rows;
|
|
30
39
|
}
|
|
@@ -115,8 +124,8 @@ export const BELL_NOTE = 'bell';
|
|
|
115
124
|
/**
|
|
116
125
|
* A terminal bell from a managed session (tmux alert-bell). Agents without
|
|
117
126
|
* Berth hooks get state `waiting`, so every agent can ask for attention; for
|
|
118
|
-
* agents whose hooks
|
|
119
|
-
* is ignored. Returns whether the state changed.
|
|
127
|
+
* agents whose installed hooks report waiting the hooks are more precise and
|
|
128
|
+
* the bell is ignored. Returns whether the state changed.
|
|
120
129
|
*/
|
|
121
130
|
export function bellRang(ctx, name, env = process.env) {
|
|
122
131
|
const live = ctx.tmux.listSessions().find((s) => s.name === name);
|
|
@@ -124,7 +133,7 @@ export function bellRang(ctx, name, env = process.env) {
|
|
|
124
133
|
if (!agent)
|
|
125
134
|
return false;
|
|
126
135
|
const adapter = getAdapter(agent);
|
|
127
|
-
if (adapter?.
|
|
136
|
+
if (adapter?.events.waiting.length && hooksInstalled(agent, env))
|
|
128
137
|
return false;
|
|
129
138
|
stamp(ctx, name, { state: 'waiting', note: BELL_NOTE });
|
|
130
139
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/registry/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/registry/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { conversationByName } from '../agents/name-key.js';
|
|
2
2
|
/** Record every managed live session; returns the snapshot directory. */
|
|
3
3
|
/** Snapshot, never throwing: for callers whose own work must not fail on it. */
|
|
4
4
|
export function snapshotQuietly(ctx) {
|
|
@@ -18,8 +18,8 @@ export function takeSnapshot(ctx, now = new Date()) {
|
|
|
18
18
|
const cwd = s.meta.cwd ?? s.path;
|
|
19
19
|
let conversation = s.meta.conversation ?? '';
|
|
20
20
|
// No hook-reported id: fall back to the name key (spec §4.2).
|
|
21
|
-
if (!conversation
|
|
22
|
-
conversation =
|
|
21
|
+
if (!conversation) {
|
|
22
|
+
conversation = conversationByName(s.meta.agent, cwd, s.name) ?? '';
|
|
23
23
|
if (conversation)
|
|
24
24
|
ctx.tmux.setMeta(s.name, { conversation });
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take.js","sourceRoot":"","sources":["../../../src/snapshot/take.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"take.js","sourceRoot":"","sources":["../../../src/snapshot/take.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,yEAAyE;AACzE,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,CAAC;QACH,YAAY,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACzD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK;YAAE,SAAS;QAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;QACjC,IAAI,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAC7C,8DAA8D;QAC9D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnE,IAAI,YAAY;gBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QAClI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACvD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function claudeConversationByName(cwd: string, name: string, home?: string): string | undefined;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-name.js","sourceRoot":"","sources":["../../../src/agents/claude-name.ts"],"names":[],"mappings":"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"}
|